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 + -
显示快捷键?