Minivida - Dissection of Avida Digital Evolution

Minivida - Avida Based Simulation - Dissection of a Digital Organism

Avida is an evolutionary simulation which seeks to demonstrate the synthesis of nand logic. The paper, The Evolutionary Origin of Complex Features is based on research done with Avida and has received widespread attention. The claim of the paper was to demonstrate "how complex functions can originate by random mutation and natural selection." The actual task demonstrated was to evolve a list of instructions which took input values and uses nand operations on them to produce the bitwise EQU or XNOR operation.

Minivida is a web based simulator which is based on, similiar to, but not identical to the simulation done by the main Avida program. In order to be feasible to run in a web-based environment several elements of Avida have been simplified. However, the simplifications have been done on non-critical elements of Avida's design so that this website is sufficiently similiar to the original Avida program to make it helpful.

Avida's programs can be represented as a string of english letters. Each letter corresponds to a particular command in Avida's instruction set. The instructions are run in sequential order, with some exceptions, to provide a recipe for how the program should take the inputs to produce the outputs. Detail on the instructions is available under the instructions tab. An attempt has been made to maintain as much compatilibity with Avida as possible, so most Avida programs should run on this simulator with the same results. However, all instructions relating to copying instructions are either ignored or only partially implemented.

Not all of the instructions available to Avida are useful for producing nand-operations. In fact a majority of them can be thrown out with affecting the ability of the programs to produce EQU. Under the instructions tab, you can control which instructions the program is allowed to do.

Avida rewards various possible tasks that could be performed. These are the different possible bitwise operations which can be performed using nand gates. By default in both Avida and Mini-Vida all possible operations are rewarded relative the number of nand gates required to produce them. These different operations provide stepping stones that enable the simulation to produce more complex operations by building on less complicated ones.

You can observe how changing the rewarded tasks affects the simulation by changing the settings under the Tasks tab. For each type of operation you can either disable the reward by clearing the checkbox or change the level of reward by setting the number.

Generation: Queries: Current Best:


Avida is rewarded for performing a number of different tasks. Here you can control which tasks are rewarded and how much

Avida has a set of instructions that it uses to produce its results. Here you can control which ones are available


a nop-A No effect, but may change operation of instruction before it.
b nop-B No effect, but may change operation of instruction before it.
c nop-C No effect, but may change operation of instruction before it.
d if-equal Skips an instructions if two registers are equal.
e if-less Skips an instruction if one register is less then the other.
f pop Pops a value off of the stack.
g push Pushes a value onto the stack.
h swap-stk Switches between the two stacks.
i swap Swaps two registers.
j shift-r Shift a register value to the right.
k shift-l Shift a register value to the left.
l inc Increment the value in a register.
m dec Decrement the value in a register.
n add Add two register values together.
o sub Subtract two register values.
p nand Calculate the bitwise nand of two register values.
q IO Read in an input and write out an output.
r h-alloc Allocates memory for offspring (side-effects only)
s h-divide Signal the end of the copying process (not-implemented)
t h-copy Copies a instruction (side-effects only)
u h-search Search for a label
v mov-head Move one of the heads (partially implemented)
w jmp-head Move one of the heads forward (partially implemented)
x get-head Move the location of one of the heads into a register
y if-label Skip an instruction if a certain label has just been copied. (not implemented)
z set-flow Moves the flow-head to the position of one of the other heads.

There are a number of settings you can tweak

Random Inputs Standard Inputs You can either use random inputs, or standard inputs which are designed to test all cases for the bitwise operations.

The Evolutionary Informatics Lab