A Beginner's Guide to avida

In this section, we give a general description of the structure of avida and examine a few of the implementation details.

The avida System

At the highest level, the avida system consists of a grid and a set of interactions between points on the grid. The grid is a two-dimensional lattice with natural Cartesian coordinates specifying the grid points and periodic boundary conditions at the edges, resulting in a toroidal geometry. Each grid point harbors a separate central processing unit (CPU).

This leads to a virtual representation of a standard multiple-instruction multiple-data (MIMD) parallel machine; the CPUs can be run either synchronously or asynchronously, closely approximating actual parallel machines. The closeness of this approximation depends largely on the granularity, or simplicity, of the instruction set. If a single instruction can have an extremely large effect on the surrounding environment, it will be correspondingly harder to approximate parallel execution using an asynchronous update technique. The Time Slicing section details the various mechanisms by which these time slices are allocated and CPUs are scheduled for execution.

While this representation is in itself general enough to be used in many types of simulations, e.g., the study of MIMD adaptive computation, avida is designed explicitly for Artificial Life research. Hence, we term each grid point a cell or organism, and each associated list of instructions the genome of that organism. Naturally, active grid points are alive, and inactive (or empty) grid points are dead. The genome of each CPU is circular, as in most bacteria and viruses. As a consequence, the instruction pointer never leaves a cell unless it is forced by explicit command (see parasitism and the jump-p command in the Virtual CPU section.

We define the assembly language to be simple and to support the capacity for reproduction, where the program from one processor can copy itself and replace the program of a neighboring processor with its copy. We then seed the environment with a simple human-coded self-replicating program which soon spreads throughout the available lattice.

These active programs have a small probability of each command being randomly permuted in the copy of their genomes (see the Mutations section for a description of this process); this results in a Darwinian selection process. By using different time-slice allocation methods (see the Time Slicing section) we can specify a fitness landscape such that the programs will evolve to exhibit useful behavior beyond that of simple self-reproduction.


NEXT: Time Slicing and the Fitness Landscape
PREV: Introduction

INDEX


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