Zen and the art of creating life Thomas S. Ray
Saar Cohen ALife and GA seminar 1998
This article is some sort of a beginner's guide to ALife. It covers some of the main issues of creating ALife and the considerations which should be made. The article deals only with creating ALife in software, and not making simulations, but instantiating life. Through the entire article, the writer takes the approach of not forcing our assumptions of the world on the ALife creatures and habitat we create - "Respecting the medium". In other words, the article is not about simulating existing biological systems using the computer but about instantiating life forms using the native environment that exists in the computer. The article first looks at definitions of "life", then it presents the computer environment, and the genetic language which will be used to construct the creatures and provide means for reproducing and so on.
Recognizing Life
Two methods are presented as of the question of recognizing life - the burning question "is it alive?". It does not address the validity of the question or even question its necessity. There are two main methods presented: The first is to Create a list that includes Necessary properties of life, ( such as Self-Replication... ) and checking for all of them in the "life form" in question. In this method, if one of the properties is lacking from the creature, it is deemed "not alive". The other method is to create a list of unique properties of life and checking for apperarance of any of them in the creature in question. What properties should we put inside these lists? The article does not specify them. It is not hard to figure out that this is a major question and can not be answered in a way that will be aggreeable by all. The writer does specify evolution as a clear characteristic of life, though it can also be described as a maker of life.
The Environment
The enviroment in which our creatures will grow, live and prosper (hopefully)
is presented as a Logical/Informational environment, as opposed to tge
Physical/Chemical environment in which we spend our lives. This should
be understood and respected by creators of ALife. This means, for example,
that there is no need of simulating a two-dimensional (or 3D) physical
world inside the computer, as this will not be "respecting the medium".
The major factors in the environment are:
*CPU - This is the provider of resources. Clock cycles are the "energy"
of the creatures. A creature which is denied of CPU time will not move,
will not reproduce, will not be able to do anything.
*RAM - The RAM is actually the world in which the creatures live their
lives. The topology of the RAM provides the "map" of this world. In fact,
this is hardly a map in our sense as this is not an euclidean space at
all. This is due to the assumption the distance is proportional to the
speed of access. In order for data to move from one place in the RAM to
another place, it have to be transferred to some register in the CPU and
then back to the new location in RAM. This trip takes the same time for
all addresses in memory. So, we got a space in which the distance between
every two points is the same. This is not a euclidean space. Memory is
actually a bit more complicated, as different access times for cache, L2
cache, RAM and external memory devices, such as Hard Disks provide more
diversity and complicate the topology.
*Operating System - The OS provides control of the resources. It governs
the distribution of the "food" and "energy" of the creatures. It is by
its rules that the creatures get their place in RAM, get their clock cycles
from the CPU and so on. In this way, the creatures will fight over the
resources, and evolution will explore the options provided in the OS. An
example might be for a process to discover a way to enhance its priority
and thus get more CPU cycles.
The Genetic Language
What can pass as a good programming language for ALife creature? Let
us just remember that we are not talking of programs simulating creatures,
but we are talking of computer programs which are the creatures. The programs
will be subject directly to the genetic algorithms and should have a way
to reproduce themselves. Machine language is too brittle for this objective.
A slight change in one of the bytes of an executable will cause the executable
not to be runnable. What we need is that changes that happen because of
the genetic operators (will be discussed later) will provide runnable programs
with different functionality, not a segmantation fault... So, the language
we will use should have these qualities:
* Graceful error handling - Don't terminate on every command that is
invalid, but try your best to continue executing the program, unless something
really bad happens.
* All bit patterns should be Meaningful - since a standard machine
language does not include thousands of commands, the commands should be
short, about 6 bits.
* Stand alone instructions - Since instructions are subject to changes,
it is not good to have a situation in which a changed instruction causes
a whole chunk of instructions to become erronous.
* No inclusion of data and numeric operands in code - To simplify the
language.
* Addressing - bit code and complementary. As a result from the previous
recommendation, no commands such as "JMP 04" are available. The language
has to provide a way around this. This can be done by giving "labels" to
commands and looking for them with their complementary.
Genetic Operators
The representations of the genetic operators in the system are thus:
* Mutations - Represented by Bit Flips. These can happen in
several ways:
* Random mistakes - Flip a bit every once in a while. Fun for
all.
* While copying - When data moves in memory, similar to "copying
errors" in chemical reactions when
duplicating DNA and so on.
* Flaws - Represented by miscalculations.
* Random CPU results - Every once in a while, give a wrong answer.
Intel tried to do this with the Pentium,
but failed.
* Death - A very popular operator. There are many ways to die
(for a process, of course). Some of the best
are:
* Flaw Rate - Every creature has a flaw rate. As it "ages"
his flaw rate increases. The execution of the
program is subject to more errors as the flaw rate
increases. When it reaches a threshold, the creature
dies.
* "Suicide" instruction - Plant a suicide instruction
in the language. When a creature executes this
instruction, he dies.
* Death by local crowding - too many neighbours kill the
creature.
* Recombination (sex) - There is a decision to be made here
- Sexual Replication Vs. Asexual Replication.
* Sexual Replication - A Gene Pool structure. Provides more
diversity and adjusting to environmental
changes.
* Asexual Replication - Represents a tree-like structure in
the gene space. Does not provide much diversity.
There is an argument that asexual replication does not
match the species concept. The article supports the
sexual method. The question is how to implement it in
the system. This will be done by the "Crossover"
operator which can be done in several ways, starting from
bitwise crossover to selecting between
instructions of the two parents.
Advanced Topics
* Ecological Context - There is a great influence on evolution
and evolution rate due to ecology. This implies the interaction between
species and the competition/cooperation between species that fight over
the same niche in the environment. The rate of evolution is faster due
to the other creatures which inhibit the environment.
* Multicellularity - As in real life, creatures evolved from primitive
creatures made of one cell to the complex multicellular creatures we see
around us today, this process might occur inside the computer. The way
this is implemented is by parallel computing. If a process represents a
single cell, then parallel processes, each with specific behaviours, represent
groups of dedicated cells. Much like a muscle in the human body or any
other organ. This evolution into multicellular is important, as was this
transformation in the real world. It allows a creature to expand in its
functionality and complexity and become more organized and productive.
* Neural Networks? - The article states that neural network are a
way to simulate (in part) the way the brain works. It is not suitable to
the digital medium. Perhaps during the evolution, better solutions will
emerge...
* Creating "Useful" species - The creatures are so far asked to do
nothing but survive. It is likely that we will want "useful" creatures
at some stage. Perhaps we would like creatures which kill viruses, or things
like that. This might be done by "Digital husbandry" or Digital "Genetic
Engineering". It is not proposed how to do these things.
Summary
The main points brought up in the article were:
* Respecting the medium
* Creating organized sexuality
* Controlling evolution
* Creating multicellularity ( at an advanced stage ).
As an example for a system trying to use this model, the writer brings
the Tierra system. This system used 5 bit instructions, for a total of
32 meaningful commands. There were two main differences between the language
used there and machine language: The numeric operands were eliminated from
the code, and the usage of complimentary patterns to control addressing.
It used diploid sexual reproduction and every program included actually
two programs in alternate bytes, with only one of them executing, thus
allowing the diploid recombination. The article does not state the results
of this experiment in terms of programs that evolved or the success of
the population, but it says some interesting results have emerged, and
it has been used to test the effect of several factors on the evolutionary
process, such as the language used and so on.
I have some remarks on the article. The first is that it is maybe too "purist"
in attitude. It insists that nothing is forced on the built-in set of rules
and environment inside the computer. I think there has to be some compromise
between this and simulations. After all, since the space these creatures
occupy is so weird and hard to understand, maybe we will not be able to
learn much from the results of the experiment. Where size isn't really
important and movement is defined very diffently, the creatures that will
evolve might make no, or little, sense to us.
I think that the question of making these creatures do something useful
is interesting. It can be very interesting trying to "guide" the creatures
into doing something good. Trying to develop the next word processing program
using these creatures might be hard, but developing a process that knows
how to kill every process in its neighborhood, or just the "bad" processes,
can be useful and relatively easy (as creatures fight between themselves
on resources as part of the evolution and the fight for survival).