This is an experiment in artificial life. It is an implementation of an ecosystem containing ``creatures'' which do things, evolve, and interact.

The life of each creature is operated through a state machine which works on a Lisp structure, creature. Everything needed in the life of the creature is in, or reachable from, that structure.

Creatures live in realms, within which they can interact as they live -- one of the differences between this system and many that have gone before it is that the creatures can interact, both through their ordinary actions and through actions which occur only for the purpose of communication.

The creatures system differs from many genetic algorithm systems in that there is not normally any explicit evaluation of fitness. Instead, the survival of an organism depends on its interactions with other organisms around it and with the non-living parts of the environment in which it is found... organisms thrive as they feed, and perish when they starve or are eaten by other organisms. The likelihood of their thriving or perishing depends on their current state, and so the state is evaluated implicitly through the normal course of life.

Breeding of creatures is also different from that in many genetic algorithm systems, in that it is not done for the organisms by the underlying implementation as part of the framework of the world in which they live, but they have to do it themselves as one of their possible actions.

The evaluation system architecture allows operators to access the whole of the creature, thus allowing the creatures to live reflectively, and also making it possible for actions such as breeding and migration to be done by ordinary operators instead of having to be built into the evaluation system. Thus, the creatures system is largely reflective, although some of the underlying Lisp code is fixed and cannot evolve.

The underlying evaluation system is more flexible than those used in many genetic algorithm systems; we have several possible ways of defining re-usable functions automatically, through using genome loci as ``subroutines'', through augmenting the operator set, and through allowing flet, lambda and funcall forms to be used in the languages. We make this possible by providing type-strict crossover thus allowing rich use of Lisp in the genotypes.

One restriction that I designed in, that I'm not so sure about now, is that each organism is a member of a taxon, and the taxa are set up initially by the programmer. This is fine for the original main purpose of the system (to study the interaction of memetic and genetic evolution in an ecosystem in which predation occurs) but may make it less suitable for the study of speciation.

You can up creatures.lisp if you have any interest therein.

[Creatures index] [alife index]
John C. G. Sturdy
[research index] [John's home] Last modified: Sun Sep 25 21:59:54 GMT Daylight Time 2005