While Avida is used most often in experimental mode where digital organisms are allowed to evolve and a whole lot of data is produced and saved, there is another way you can use Avida after the experiment is over: analyze mode.
You can run Avida in analyze mode by adding the flag -a on the command line. This enables you to open up the data files produced by Avida and calculate all sorts of things using the Avida test CPU and even resources that you can control. You can recreate conditions that occurred during a run or find out more about mutations, for example. On our wiki, we have an introduction to the Analyze File along with several tutorials:
- Building your own analyze command
- Copying lineages
- Testing a genome sequence
- Using variables
- Working with batches
- Try it yourself exercises
Our work of documenting is never done, however, so recently we added documentation for several analyze functions related to understanding organisms’ genome complexity.
Determine redundancy by calculating the percentage of the lifetimes where fitness is decreased over a range of instruction failure probabilities.
ANALYZE_COMPLEXITY [mut_rate] [directory] [useResources] [batchFrequency]
Loops through each genotype in the batch and tests the fitness of each single site mutant. useResources is a flag to set whether the testCPU should use resources when testing the mutants. Calculates probabilities at mutation selection balance, normalizes fitness values, and calculates and outputs complexity based on entropy.
Loops through each genotype in the batch and calculates the number of positive and neutral mutations for single and double mutations. Calculates entropy as (log(pos_neut_mut/( pow((double)num_insts,(double)2)*(gen_length)*(gen_length-1)*(0.5))) / log(num_insts) where num_insts is the number of instructions in the instruction set. Calculates and outputs complexity as gen_length – entropy.
Loops through all genomes in batch and tests the removal of each instruction (-2=lethal, -1=detrimental, 0=neutral, 1=beneficial). If max_knockouts is more than one, also tests pairs of knockouts. If both individual knockouts are both harmful, but in combination they are neutral or even beneficial, they should not count as information. If the individual knockouts are both neutral (or beneficial?), but in combination they are harmful, they are likely redundant to each other. For now, count them both as information. Outputs the counts of each type of instruction.
Loops through all genotypes in batch and outputs the complexity of each genotype as 1 – entropy.
ANALYZE_NEWINFO [mutation_rate] [directory]
Only works for fixed length runs and requires lineage in the batch. Calculates the information of each organism and its parent about the environment and finds if there is a gain or decrease of information. Compares parent and child information at each instruction site to determine if information has been gained or lost. Calculates information the same as ANALYZE_COMPLEXITY.
Works best on lineages and requires fixed length genomes. Loops through each genotype to check for mutations from the previous genotype in the lineage and then tests if those mutations are currently adaptive. Prints out the number of beneficial, neutral, detrimental and static sites at the given lineage depth.
This command will examine the current population, and sample mutations to see what the distribution of complexity changes is. Only genotypes with a certain abundance (default=3) will be tested to make sure that the organism didn’t already have hidden complexity due to a downward step.
Have you ever used the analyze mode of Avida?