Mutations

Avida has a range of both explicit and implicit mutations. Five forms of explicit mutations have been implemented.

There are three intuitive ways in which mutations can be triggered in avida. The first is the most basic cosmic-ray or point mutation, which is an external random process independent of the action of the cell---it will hit randomly chosen points in the soup at Poisson-randomly distributed times. Next we have copy mutations, which can occur whenever a creature tries to copy a line. There is a small probability (fixed by the user) that this copy will be flawed. Finally we have divide mutations which occur at the time of birth of the child, and which modifies the parent's genome in a predetermined way, such as inserting or deleting a random instruction from a random location.

The primary type of these explicit mutations are copy mutations. They are used most commonly in avida runs as they also are the most prevalent in natural biological systems. Overall, the types of mutations implemented in avida are

  • Copy mutations
  • Point mutations
  • Divide mutations
  • Divide insertions
  • Divide deletions
  • Naturally, the rates for all these mutations must be below a certain threshold in order to avoid killing the population, while a rate that is too low slows evolution to a crawl (see Chapter 11 of the book Introduction to Artificial Life for a study of learning vs. mutation rate.)

    It is also important to note that each of the different forms of mutations have different rates that are expressed in different units. Copy mutations are per-site, point mutations are per-site per-update, and divide mutations are per-creature. What this means is that for the former two, longer creatures stand a better chance of being mutated so they put a pressure on the soup for creature size to shrink. On the other hand, with divide mutations longer creatures can often better survive a single mutation, and hence put a slight pressure for sequence growth on the population.

    Implicit mutations in avida typically involve mistakes (due to incomplete or faulty algorithms) committed in the act of self-copying, usually instigated by code corrupted by mutations. There are a wide assortment of these, many of which have not been categorized due to the ability of creatures to always find new and surprising methods of operation.

    One of the most common forms of implicit mutations is the duplication of code within a creature; sometimes the flow of execution will be distorted such that a section of code will be replicated multiple times within a single daughter. A second (similar) form occurs when a creature only partially copies itself over a dead creature which previously occupied the CPU. The two creatures (old and new) have effectively merged into a single one---a process which has been dubbed necrophilia. Other implicit mechanisms are certainly possible. As a result, the effective copy-fidelity of a program can be significantly lower than the one calculated with mutation rates only.

    Setting Mutation Rates

    Mutation rates can be configured in the genesis file in the ``Mutations'' section. There are five settings; all of these are scaled independently, depending on the type of mutation, and are explained in more detail below.

  • POINT_MUT_RATE: This value is the probability of mutation per-site per-update, in units of ×10-6. Typically, a population can survive values up to approximately 500, assuming that no other mutations are turned on.
  • COPY_MUT_RATE: The probability of a copy instruction writing the incorrect instruction. These are the most common mutations used in avida since they best model simple biological systems. The values are specified in units of ×10-4. Depending on the length of the genomes, soups can sometimes survive values up to 350 or so. Typically, 30 is considered a low mutation rate, while 200 is high.
  • DIVIDE_MUT_RATE: The probability of mutation every time a divide occurs. This causes a single instruction, chosen randomly from the code, to mutate. All divide-based mutations are specified in units of ×10-2. Thus a soup can handle divide mutation rates as high as 85 (i.e., one instruction is mutated 85 percent of the time its host divides).
  • DIVIDE_INS_RATE and DIVIDE_DEL_RATE: The probability to inject or remove a random instruction to (or from) a random location is triggered in a similar way to DIVIDE_MUT_RATE (and also specified in unts of ×10-2). A typical population appears to tolerate up to about a value of 85.
  • By default, COPY_MUT_RATE is set to a value of 50 (which translates to a probability of 0.005 per copy, and insert and delete mutations are turned on to 5 percent, i.e., DIVIDE_INS_RATE and DIVIDE_DEL_RATE are set to 5. The insert and delete mutations facilitate size changes in the population, which is helpful in the development of complexity.

    Additionally, there are two other places where experimentation with mutations is possible. The first is in the instruction set; instructions are available which allow programs to alter their own copy mutation rate. These are set-cmut and mod-cmut. (See the Virtual CPU section for more information on initializing and using these instructions.)

    The other place where mutation rate can be controlled is the event-list file. There is a single event called set_copy_mut which resets the copy mutation rate of all the CPUs during a run. See the Configuring Avida section or the event_file itself for more information on this.


    NEXT: Installing Avida
    PREV: The Virtual CPU

    INDEX


    Page maintained by Charles Ofria
    Send all comments to charles@krl.caltech.edu