BOBO/,dHHHHHHHf Z-jFLOM!`vExHH@Rg(HH(dh $l /b 77@H/H/hb7@@L  \@DSET=== 4P1  d        s  m n { T U V e         n{  Ve f  Fh PI. Hypothesis This project was designed to produce a simple program that could simulate genetic drift given an arbitrary set of environmental and reproductive rules. Genetic drift occurs in an isolated population over time. It is the often-overlooked counterpart of natural selection, wherein the collective genepool of a population begins to favor a certain trait over other traits, or completely eliminates a certain trait. This can occur because of several environmental influences, including disease, lack of a certain resource, abundance of an as-of-yet unexploited resource, natural disaster, and so on. According to the Hardy-Weinberg principle, the frequency of all genes in a gene pool can be modelled with this equation: p^2 + 2pq + p^2 = 1, where p represents the frequency of dominant alleles, and q represents the frequency of recessive alleles. Thus, p^2 represents the total number of organisms in a population with a homozygous dominant gene, 2pq a heterozygous gene, and q^2 a recessive gene. This equation holds true for all values of p and q greater than zero such that p+q = 1. When drift occurs, the values of p and q change, but still add up to be equal to one. So, the hypothesis of this project is simply this: genetic drift can be simulated, and possibly even predicted, using an accurate computer model. A program can be written to simulate the genetic drift in populations of nearly arbitrary size with fairly liberal limitations on the rules and accuracy of the simulation. II. Method The program design for this application is fairly simple. We create a small data object that well call an organism, capable of breeding, dying, aging, and all the other natural processes that are relevant to this experiment. When the program is run, it will allocate memory for a given number of organisms. The maximum number of organisms that can be allocated is dependent on the available amount of memory on the machine. The organism structure contains three variables, the minimum we could use in a simulation. The first is age, represented by an unsigned 16-bit integer, with a maximum value of 65535 and a minimum value of zero, which indicates a dead organism (and a memory region available for population by a new organism). The other two variables are unsigned 8-bit integers. The maximum and minimum values for these values are irrelevant; instead of using them to represent numbers, the program sets the individual bits to represent the different alleles on each complimentary chromosome (these variables are named ls and rs, standing for left side and right side). The first seven bits represent the alleles for traits. Whatever traits these alleles represent are arbitrary, and unimportant to the program. They could represent hair color, protein shape, or anything of a similar nature. If the bit representing an allele has a value of one, then that allele is said to be dominant. If the bit is zero, the allele is said to be recessive. Thus, if both bits are equal to one (dominant), the trait is said to be homozygous dominant. If they one but not the other is dominant, then the trait is heterozygous dominant. If both bits are equal to zero, then the trait is said to be recessive. The eighth bit is reserved for the representation of gender. If both bits are set to 1, then the gender is female. If one bit is set to 1 and the other to 0, the gender is male. The gender is undefined when both bits are equal to 0, but such an anomaly should not occur within natural execution of the program. After the memory for the organisms is allocated, the program prompts for rules to govern the simulation. First, the program asks for the number of traits to include in the simulation. This number is set to at least one but not more than seven. Next, the program asks for all of the genetic restrictions on mother organisms. This means that for any organism to be used as a mother, it must be both female and meet the restrictions on each of the traits specified in the simulation. Restrictions for each trait can be one of the following: fully dominant, meaning that the trait for the mother is homozygous and dominant; partially dominant, meaning that the trait is heterozygous; recessive, meaning that the trait is homozygous recessive; and finally, null, meaning that there is no particular restriction for the mother on that particular trait. Breeding restrictions for father organisms work in the same fashion. Lastly, the program asks for kill rules. There can be at least zero and at most eight of these. They work in a similar fashion to the breeding rules mentioned in the preceeding paragraph, except that they take the age of the organism and its gender into account (though both variables can be neglected). As the program runs, it steps through a loop for a user-determined number of times. For each loop, the program breeds new organisms from existing male and female organisms that meet the relevant breeding criteria. Then the organism evaluates kill-rules, killing off the organisms that match the kill criteria. Finally, the program compiles statistical data- the number of organisms with each trait that are homozygous dominant, heterozygous dominant, or recessive, as well as the total number of organisms and the number of males and females. This data is then written out to a file that can be opened by a spreadsheet application, and consequently graphed to produce a more human-readable presentation of data. III. Results The program was run with several different configurations, and then the output was graphed. The most notable feature of the graphs was the flat-lining on many simulations; that is, not enough creatures died via the kill rules, so no new creatures were created, and therefore the lines representing the trait statistics flattened out and remained flat until certain organisms were killed, freeing up memory for new organisms to occupy and thus change the statistical data. IV. Conclusion This program has demonstrated that is possible to create a simple simulation of genetic drift in a given population. However, the simulation is overly simplistic, and does not compensate for mutation or other anomalies that occur naturally. It does, however, provide a relatively accurate model for genetic drift when a certain trait has been proven as being critical to the breeding habits and genetic drift of a population. Features the program could use include compensation for mutation, and a more realistic model of the killing and breeding rules. The ability to save the progress of the program would be useful, because it is so computationally intensive that the user may need to pause the program in order to do other work. Also, embedding a timer in the program to measure the time each iteration takes would be very interesting, just to see what kind of mathematical model could be used to evaluate the time requirements of the applications for a given set of parameters.ZNDSET2Hӡ 6*DSET2H@J$ 6*DSUMHDNISTYL F6JSTYL/p/t+   !              pHASH $.. . .*.. .. :. :.*L:Qhjazo}BodN  CHAR   "     F HASH       R CELL"HASH  GRPH7 (HASH  vl RULR   @HASH   @ KSEN"HASH2LKUP  0$NAMEDefault Default SS Default TBHeaderBodyFooterFootnoteFootnote Index DFNTM HelveticaGeneva Lucida GrandeTimes New RomanMCROMCROoBlNMARKMRKS MOBJWMBTSNAPzz HH HH @#co{R^o{sRo{3^o{BJRZ=NsBF1JRRF15BF1Ns5=Rc3^^sJRVkZJRo{F1VNs^F1F1BF1g9F1JRkZVso{wg9}kZg9w{{wws{w {{o{wws{wso{w o{w{swwo{{w{so{wo{o{{wo{o{{w{o{kZwcwo{g9RVcZRNsVo{ZRF1g9NsNsJR&Zo{VsNsRVRNsNsg9cNsRRVRkZRRJRNsNsZo{RNsg9ZVNsRcZRJRNsRZRVRo{R^Zo{3w{swwskZsUw{{kZ{w{ww kZs{wwo{swJZBRF1g9=JRNsBBZ5VRZJRcF1^V=Z=JRF1B=F1R9cF1Bc=NsNsF1=F1JRNsR^NsBNsJRcJRJR=^=kZBBZcF1ZF1Bg9B^5g99F1F1BNs=o{swsE{w{kZ{{{s{{{{kZRRVRRNsZVkZRNskZg9RRg9o{cg9cg9F1kZRNsR^cRVZRNsNso{^VRRVg9RkZVRNsZNskZJRVNsVZRkZsF1ZVJR^^g9F1g9o{wo{wsswws{{w{sw{ w{{w{ww{s{wsw{w{swwg9wsw{ww{sw{{s{{swo{{sw{w{{{޿ sccRg9Rcg9V^V^ VsRkZo{^^Z^VZ^.cVZZkZZkZZR^^skZcZ^R^kZg9Rg9kZZ^kZ^g9Nscg9g9R^g9s^sg9^c^R^Rg9wwo{so{{wVo{kZckZo{kZwkZ{{co{^skZskZkZwo{c^kZwws#o{{wo{o{wkZkZ{skZwswswo{wkZo{skZskZ{o{{o{kZo{^kZwo{g9o{c^^ccZ^ssg9c^Zco{g9VkZ{Z scco{g9kZkZcg9Zo{^ skZ^Zc^kZRsg9c^o{^VVcg9cg9kZsco{^^ZZkZwkZg9+kZo{kZwwkZkZsg9kZwo{g9wskZcwo{kZskZo{o{kZso{skZg9kZ{kZwkZwso{g9wkZo{skZsg9g9o{g9o{g9sg9wg9o{kZg9g9^cDwZg9cckZZscs^kZwkZkZcg9g9wcg9g9o{o{kZZkZkZg9Zg9skZkZ^kZg9wc{o{ckZg9o{kZo{g9co{^cg9Zwg9co{g9o{kZkZZo{kZZo{^cg9Zo{wZkZ^sg9so{kZkZc sg9^kZ^o{g9scg9^cZckZ o{g9g9o{^o{g9kZco{wg9cg9Rg9Zg9kZcso{^kZZkZkZw^co{cZ%w^g9kZg9o{wskZ^{kZwo{o{%o{VVRkZZg9^^Vo{^kZc^s{w!g9swsswg9{o{o{wskZ{g9Zswg9{swwo{wwskZ{wg9{skZw{w{kZo{kZssw swwwwswswDcV^ZVRR5kZVscBkZ^JRRVg9g9kZJRRNsVJRsNsRR^NsRVo{cBo{ZNsRNsZJR^o{RsF1cF1NsRNsg9Nsg9g9=RNswF1R^^VRo{9s{www{so{{m{ wkZwo{{w{{o{w{wkZo{www{{{wkZs ^Bo{=BBNsF1BZJR:^^9F1^JRBBF1BNsc^ss^wRF1^ckZV{g9g9wc5JRNsBkZkZ^{=NsJRBBJRNsJRg9B^V=BJRJRF1RZVNs5wswswsw{{G{o{{{{ss{w{o{kZ{o{{g9F1NsRJR=Nsg9NsJRRF1RsBRcg9ckZNsZRJRJRVRZ^Bg9Ns!RVF1c^^VcNsRJRRNsRg9JRF1NsJRsg9g9RF1scg9kZsF1VVJRJRRg9F1g9+sss{{{ss{{@g9ZZVo{^ZNs^VsVkZcRVZV^Vo{Zs^cZ^^NsNs^Zo{ZVVo{ZkZZ^RccVRZZg9RcZVZVVkZR^^kZZZ^z"s{o{wwo{wwsss^g9so{wso{{wg9sg9wo{wssw{wswskZVws{so{skZcswwo{g9c{{{s{{kZV^VcZkZNsZ^:csZ^kZ^o{o{Zs^cZV^^sNs^V{g9ZVo{^^VZ^^wNsZV^g9^^sNs^o{Vg9^Ns^cg9^^kZkZR^g9cskZwkZBcZco{kZ^g9g9kZsg9kZs^o{o{sskZkZg9ss{NskZkZ{wg9g9{kZZg9o{g9o{sg9kZg9kZ{sg9{kZkZwkZswg9kZkZskZscwg9kZs^Jo{c^Zco{g9Vcwg9^g9s^kZ^wR^kZo{kZZwVscVRcg9sVV^o{g9o{g9^{kZZkZg9c^Zg9sVo{scc^o{s^^g9Zg9kZkZg9g9ZkZRkZVVJZZg9co{so{^^scg9g9sg9ckZsc^s^wo{^skZo{cco{^cwkZg9o{cco{scsscg9^g9sg9co{g9^g9kZcg9cc=cso{csckZcg9^c'wkZwg9w^swkZo{c{kZo{w)sRo{g9kZ^^cV^Vo{^o{^Vg9{{ޤ?g9so{o{{kZwo{wo{o{wswwco{kZs{wswwo{{wwswskZ{o{kZsswwo{sg9sVwwswsswkZwo{sw{wg9?o{Vwo{Nso{VZcRkZNsVVkZVkZsVJRo{ZcRZkZkZ^^ZZRg9csVJRF1VVc^o{^Z^sZZcVsZRZVVZ^g9V^V%{w{{w{wEsww{w{wwsww{w{g9NsNsF1NsNsZg9VRV^ZF1VF1ZVJRwF1JR3RNsg9Ns^NsJRRVcNsRNsRNsRg9RNsNsJR^{RkZZJRBJRBNskZJRNsg9Nso{BZNsVNskZRkZNsJRRF1JRRo{/swwo{sww{gw{wo{w{www{wo{wwww{{{{{{IcJRNsNsJRF1NsBg9F1RJRg9=g9JRF1BJRF1JRBB=g9Bs=BJRNskZ=BF1JRBRZNsF1F1s9F1Vg9=9ZRg9==Ns9g9=JRBJRF1F1BVF1F1g9JRNs^F1F1=)o{{so{w{{wsw{ޯ7cVRZRZVVRckZVkZNsVg9NsVVZNsRRZֳ3{sswsso{s{ws{wo{wo{wssw' g9kZ^^wg9o{{cc+Vo{JRcNsF1g9F1ZZ1ZV^VB+R^BkZZJRNsZ9g9JR9=F1JRJRBQo{o{{o{{wo{{{wsso{{{{&g9cJRwNsNsF1RJRF1g9F1NsJRF1kZJRNsg9ZF1g9JRNsJRRRF1RNsg9NskZF1NsJRVkZRNsZ{VVg9VVJRF1kZg9NsF1JRJRg9=VZNsRNsVcg9BB1so{ssssssss'w{{w{{ o{R^kZc^Vg9Ro{Z^RZ^^VZRVg9Zc^ZV^VVg9o{ZNsZwVZg9Z^g9NskZ^NsZ^o{VZZV^kZZ^ZZRZ^g9VJR{w{sswswsg9^so{sswwg9s{sw+so{kZNso{o{sNswkZVsJR{ss{ss{s{wwss{swwssg9sw{sw{wo{wTNAM6979D755356672EE623C983052C6A0CPRT/ com.apple.print.DocumentTicket.PMSpoolFormat com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.DocumentTicket.PMSpoolFormat application/pdf com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:05Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMColorSyncProfileID com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMColorSyncProfileID 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:05Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMCopies com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMCopies 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:05Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMCopyCollate com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMCopyCollate com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:05Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMFirstPage com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMFirstPage 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:05Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMLastPage com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMLastPage 2147483647 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:05Z com.apple.print.ticket.stateFlag 0 com.apple.print.PrintSettings.PMPageRange com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PrintSettings.PMPageRange 1 2147483647 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:05Z com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PrintSettingsTicket  com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:02Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:02Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:02Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:02Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:02Z com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:02Z com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.printingmanager com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -18 -18 774 594 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:02Z com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator com.apple.print.pm.PostScript com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName na-letter com.apple.print.ticket.client com.apple.print.pm.PostScript com.apple.print.ticket.modDate 2003-07-01T17:49:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator com.apple.print.pm.PostScript com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:02Z com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator com.apple.print.pm.PostScript com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -18 -18 774 594 com.apple.print.ticket.client com.apple.printingmanager com.apple.print.ticket.modDate 2005-09-18T18:34:02Z com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator com.apple.print.pm.PostScript com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName US Letter com.apple.print.ticket.client com.apple.print.pm.PostScript com.apple.print.ticket.modDate 2003-07-01T17:49:36Z com.apple.print.ticket.stateFlag 1 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.privateLock com.apple.print.ticket.type com.apple.print.PageFormatTicket ETBLhDSUM(HDNI(STYL(MCRO5$oBlN54MARK5@WMBT5fSNAP5rTNAMMCPRTN ETBL}tU