genesis.html
来自「有趣的模拟进化的程序 由国外一生物学家开发 十分有趣」· HTML 代码 · 共 424 行 · 第 1/2 页
HTML
424 行
us to act on this. (Note that as soon as anything here is turned on, themutations need to be tested. Turning multiple settings on will cost noadditional speed decrease)<p><table cellpadding=5 border=2><tr><td valign=top><b><tt>REVERT_FATAL<br> REVERT_DETRIMENTAL<br> REVERT_NEUTRAL<br> REVERT_BENEFICIAL</tt></b> <td valign=top>When a mutation occurs of the specified type, the number listed next to that entry is the probability that the mutation will be reverted. That is, the child organism's genome will be restored as if the mutation had never occurred. This allows us both to manually manipulate the abundance of certain mutation types, or to entirely eliminate them.<tr><td valign=top><b><tt>STERILIZE_FATAL<br> STERILIZE_DETRIMENTAL<br> STERILIZE_NEUTRAL<br> STERILIZE_BENEFICIAL</tt></b> <td valign=top>The sterilize options work similarly to revert; the difference being that an organism never has its genome restored. Instead, if the selected mutation category occurs, the child is sterilized so that it still takes up space, but can never produce an offspring of its own.<tr><td valign=top><b><tt>FAIL_IMPLICIT</tt></b> <td>If this toggle is set, organisms <i>must</i> be able to produce exact copies of themselves or else they are sterilized and cannot produce any offspring. An organism that naturally (without any external effects) produces an inexact copy of itself is said to have implicit mutations. If this flag is set, explicit mutations (as described in the mutations section above) can still occur.</table><h3>Time Slicing</h3>These settings describe exactly what an update is, and how CPU time isallocated to organisms during that update.<p><table cellpadding=5 border=2><tr><td valign=top><b><tt>AVE_TIME_SLICE</tt></b> <td>This sets the average number of instructions an organism should execute each update. Organisms with a low merit will consistently obtain fewer, while organisms of a higher merit will receive more.<tr><td valign=top><b><tt>SLICING_METHOD</tt></b> <td>This setting determines the method by which CPU time is handed out to the organisms. Method 0 ignores merit, and hands out time on the CPU evenly; each organism executes one instruction for the whole population before moving onto the second. Method 1 is probabilistic; each organism has a chance of executing the next instruction proportional to it merit. This method is slow due to the large number of random values that need to be obtained and evaluated (and it only gets slower as merits get higher). Method 2 is fully integrated; the organisms get CPU time proportional to their merit, but in a fixed, deterministic order.<tr><td valign=top><b><tt>SIZE_MERIT_METHOD</tt></b> <td>This setting determines the base value of an organism's merit. Merit is typically proportional to genome length otherwise there is a strong selective pressure for shorter genomes (shorter genome => less to copy => reduced copying time => replicative advantage). Unfortunately, organisms will cheat if merit is proportional to the full genome length -- they will add on unexecuted and uncopied code to their genomes creating a code bloat. This isn't the most elegant fix, but it works.<tr><td valign=top><b><tt>TASK_MERIT_METHOD</tt></b> <td>This toggle determines if merit can be increased by performing tasks. Ideally, this should just be taken care of in the environment file.<tr><td valign=top><b><tt>MAX_LABEL_EXE_SIZE</tt></b> <td>Labels are sequences of nop (no-operation) instructions used only to modify the behavior of other instructions. Quite often, an organism will have these labels in their genomes where the nops are used by another instruction, but never executed directly. To represent the executed length of an organism correctly, we need to somehow count these labels. Unfortunately, if we count the entire label, the organisms will again "cheat" artificially increasing their length by growing huge labels. This setting limits the number of nops that are counted as executed when a label is used.<tr><td valign=top><b><tt>MERIT_TIME</tt></b> <td>When should merit be updated for an organisms? A 0 here indicates that every time a task is completed, the merit should immediately be updated to reflect that task. A 1 means that the merit is only updated on a divide (taking into account all the merit earned over the organisms lifetime) and passed on to both the parent and child for their next gestation cycle. Since there are such radical merit changes over the lifetime of an organism, method 0 can cause some odd effects where once an organism builds up enough merit they can have lots of offspring rapidly, but most organisms dies in infancy. Method 1 keeps merit constant for an organisms' entire life, but innovations are only rewarded one generation removed. At some point we could add an option of the highest of the two.<tr><td valign=top><b><tt>MAX_NUM_TASKS_REWARDED</tt></b> <td>This setting allows the user to limit the total number (but not magnitude) of rewards that and organism gets by performing tasks. This is another quick hack, and should probably be incorporated into the environment configuration file.</table><h3>Genotype Info</h3><p>These settings control how avida monitors and deals with genotypes,species, and lineages.<p><table cellpadding=5 border=2><tr><td valign=top><b><tt>THRESHOLD</tt></b> <td>For some statistics, we only want to measure organisms that we are sure are alive, but its not worth taking the time to run them all in isolation, without outside effect (and in some eco-system situations that isn't even possible!). For these purposes, we call a genotype "threshold" if there have ever been more than a certain number of organisms of that genotype. A higher number here ensures a greater probability that the organisms are indeed "alive". Recently, we've been shifting away from using threshold genotypes and instead finding other, more accurate testing methods.<tr><td valign=top><b><tt>GENOTYPE_PRINT</tt></b> <td>Should all genotypes be printed out upon reaching threshold? Each will receive its own file in the genebank directory, so this can get <i>very</i> hard disk intensive. Many runs will have in the millions of organisms.<tr><td valign=top><b><tt>GENOTYPE_PRINT_DOM</tt></b> <td>Printing only the dominant genotype keeps track of the most successful individual genotypes without costing a huge amount of memory. The number you place here is the total number of updates that a genotype must remain dominant for it to be printed out. A 0 turns this off.<tr><td valign=top><b><tt>SPECIES_THRESHOLD</tt></b> <td>In Avida, two organisms are said to be of the same species if you can perform all possible crossovers between them, and no more than a certain threshold (set here) fail to be viable offspring. The crossovers are done in isolation, and never affect the population as a whole.<tr><td valign=top><b><tt>SPECIES_RECORDING</tt></b> <td>This entry sets if and how species should be recorded in avida. A setting of 0 turns all species tests off. A setting of 1 means that every time a genotype reaches threshold, it is tested against all currently existing species to determine if it is part of any of them. If so, its species is set, and if not, it becomes the prototype of a new species. Finally, a setting of 2 only tests a new threshold genotype against the species of its parent (since each species test can take a long time) and if that fails immediately creates a new species. In practice, methods 1 and 2 produce similar results, but method 1 can take a lot longer to run.<tr><td valign=top><b><tt>SPECIES_PRINT</tt></b> <td>Toggle: Should new species be printed as soon as they are created?<tr><td valign=top><b><tt>TEST_CPU_TIME_MOD</tt></b> <td>Many of our analysis methods (such as species testing) require that we be able to run organisms in isolation. Unfortunately, some of these organisms we test might be non-viable. At some point, we have to give up the test and label it as non-viable, but we can't give up too soon or else we might miss a viable, though slow replicator. This setting is multiplied by the length of the organism's genome in order to determine how many CPU-cycles to run the organism for. A setting of 20 effectively means that the average instruction must be executed twenty times before we give up. In practice, most organisms have an efficiency here of about 5, so 20 works well, but for accurate tests on some pathological organisms, we will be required to raise this number.<tr><td valign=top bgcolor="#AAFFAA"><b><tt>TRACK_MAIN_LINEAGE</tt></b> <td bgcolor="#AAFFAA">In a normal avida run, the genebank keeps track of all existing genotypes, and deletes them when the last organism of that genotype dies out. With this flag set, a genotype will not be deleted unless both it and <i>all of its descendents</i> have died off. This allows us to track back from any genotypes to its distant ancestors, monitoring all of the differences along the way. Once this information is being saved, see the events file for how to output it.</table><h3>Log Files</h3><p>Log files are printed every time a specified event occurs. By default,all logs settings are 0 (i.e. the logs are turned off). Each time a loggedevent is printed, the update and identifying information on the individualthat triggered it is always included. There are more entries listed in thegenesis file than here, but I think all of the rest are deprecated.<p><table cellpadding=5 border=2><tr><td valign=top><b><tt>LOG_CREATURES</tt></b> <td>If toggle is set, print an entry to "creature.log" whenever a new organism is born. Include position information, parent organism, and a link to it genotype so the run can be reconstructed. This gets <i>very</i> large.<tr><td valign=top><b><tt>LOG_GENOTYPES</tt></b> <td>If toggle is set, print an entry to "genotype.log" whenever a new genotype is created. Includes information on its parent genotype.<tr><td valign=top><b><tt>LOG_THRESHOLD</tt></b> <td>If toggle is set, print an entry to "threshold.log" whenever a genotype reaches threshold. Includes information on what species it is.<tr><td valign=top><b><tt>LOG_SPECIES</tt></b> <td>If toggle is set, print an entry to "species.log" whenever a new species is created. Includes information on the genotype the triggered the creation.<tr><td valign=top><b><tt>LOG_LINEAGES</tt></b> <td>Lineages can be given unique identifies and printed (into the file "lineage.log") whenever they are created. Includes details about the event that created the lineage.<tr><td valign=top><b><tt>LINEAGE_CREATION_METHOD</tt></b> <td>Details when lineages are created. This should probably be listed in an earlier section, but there is way too much descriptive information in the genesis file that should probably go instead into a manual. Basically, this allows you to decide under exactly which conditions a new lineage will be created. I'll let you read the genesis file itself to see the methods.</table>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?