Zen
 and the art of creating life

Thomas S. Ray





Saar Cohen ALife and GA seminar 1998
Introduction

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).