Bruce Glassco, Ph.D.
This is a set of notes for artificial life forms that would exist as a colony of computer-simulated, 3-dimensional, evolution-capable creatures inhabiting a virtual fish tank. Each artificial creature, much like real creatures, would carry its strategy for dealing with its environment encoded in its physical configuration. Environmental factors with which creatures would need to contend would be a steadily downward-drifting food supply, a current in the tank which they could drift with, swim against, or attach themselves to the tank floor in order to avoid entirely, and of course other emergent creatures. Poorly adapted creatures would go extinct, while well-adapted creatures would have the opportunity to reproduce with the potential of mutation and evolution.
At the beginning of the simulation the tank would be stocked with tiny randomized simple "organisms" made up of groups of cellular automata. Each organism is capable of independently moving, growing, reproducing, and attacking other organisms. If conditions are right, these groups should theoretically evolve towards more and more complex, efficient, and specialized forms. Eventually the starting blobs of protoplasm might evolve into schools of tiny guppy-like creatures, vast kelp-like structures rooted to the tank's bottom, scuttling crabs, and even filter-feeding whales and sharp-toothed predatory sharks.
Successful creatures may evolve as plants, with no "nervous systems" to speak of. However, included in the cellular toolkit will be a variety of sensory organs which emit signals based upon their perception of the environment. There will also be "neuron" cells capable of transmitting these signals to "muscle" cells. These neurons will have the capacity to function as AND gates, OR gates, etc. Therefore, in a creature of sufficient size, it may be possible for a complex computational brain to evolve from a random grid of biological simulators, giving evolutionary advantages to creatures able to turn and swim towards promising food supplies or away from predators.
Given the possibility of distributed computing, there is no limit to how sophisticated these creatures might eventually become if enough people ran the simulation simultaneously.
This project was inspired by reading an interview of Richard Dawkins in Wired magazine. He speaks of an imaginary prize he would like to offer: "My prize would be for a visually appealing world in which the life-forms have a visible, and preferably 3-D, morphology on the computer screen. They must evolve adaptations not just to 'inanimate' factors like the weather (which would produce essentially predictable, not emergent evolution) but to other evolving life forms (which is a recipe for emergent properties)." I believe that the rules which follow, if programmed, would fulfill these conditions.
In most Artificial Life simulations, the genome of an individual creature is represented by lines of computer instructions. Thus, its behavior is susceptible to evolution, but the basic tools it possesses to handle its environment remain unchanged.
My proposal is that, as in nature, an individual's genome should be encoded in its physical structure rather than an abstract set of instructions. Thus, creatures may experiment for themselves with tools such as propulsion systems, sensory organs, and offensive and defensive weaponry, balancing the advantages gained with the extra mass carried in order to determine the most efficient configurations.
The tank is a 3-dimensional cubic grid. Depending on the processing requirements, I would imagine it to be somewhere between 10x10x10 and 100x100x100. Food particles -- free floating neutral cells -- are continually added to the top at the same rate that they are devoured by creatures, so that the food supply is constant. The food particles drift down every turn until they pile up at the bottom of the tank, assuming they don’t get eaten by creatures on the way.
Two opposite sides and the base of the tank are considered “walls,” and organisms with properly oriented anchor cells can attach themselves to a wall to keep from drifting. Otherwise, the food and all the organisms are subject to a current which will move them one space per turn in a constant direction, with cells that are pushed out of the tank in one direction reappearing on the opposite side.
It may be clearer to think of the tank as a standard die (with opposite sides adding up to 7). Each side has the following properties:
1: The top side of the tank. Food particles appear randomly on this plane with every tick of the simulation. Organisms cannot enter this plane.
6, 2, and 5: The sides and bottom of the tank. Nothing can move through these sides. Organisms with the proper Anchor cells that begin next to one of these sides will not move due to current or its own propulsion.
3 and 4: A steady current moves each food particle and organism one space along this axis each click. Any cell or particle that enters one plane will be instantly teleported to the opposite plane.
Each fishtank, upon its creation, would have a number of user-adjustable variables, including food inclusion rate, amount of food necessary for a creature for reproduction, creature longevity, fat used for movement, etc.
There should be enough starting organisms so that about 3% of the starting space is taken up by organisms. In a 100x100x100 matrix, this would be about 1,000 organisms, each randomly consisting of a brain inside a cube of 26 other randomly generated cells. Of course, a large number of the starting organisms would be unsuited to eat at all, due to having no mouths or mouths inconveniently placed. But hopefully a few would have mouths serendipidously placed, and would start to reproduce.
All cells in a creature have:
a unique id number
nerve receptors – a register for a number from 0-99, which can be sent or copied to adjacent cells
fat counter -- keeps track of "food"
Some cells (gut, brain, muscle, rotator) have a fat distributor subroutine:
look at all adjacent cells
if an adjacent cell is a mouth or gut cell, take half of its fat number and add it to your own fat counter. Gut cells only take food from adjacent gut cells with higher id numbers.
TYPES OF CELLS
BRAIN/REPRODUCER -- 1 per organism
The brain has several functions and subroutines:
Keep a master list of what cells are part of the body
Make sure all cells are contiguous, and chop off any cell that isn't attached
The brain maintains a fat counter, and has the fat collection subroutine like muscle. When the counter equals the total number of cells in the organization, and it senses a nearby empty space of sufficient size, it makes a copy of the entire organism. Both copies have brain fat reduced to zero.
The brain also uses a certain amount of fat from adjacent cells every turn. If it runs out of food, the entire organism dies and all its cells turn into free-floating food particles. Also, if the brain is destroyed by another creature’s mouth or tooth, then the entire creature dies as well.
Alternative to Growth Bud, below: When the Brain cell receives fat, it is divided into four parts: growth, reproduction, movement, and longevity. Longevity loses a certain amount every turn until death. Movement powers muscles at a rate set by a tank variable. Reproduction creates a copy whenever the fat counter reaches the size of the creature (original). Growth causes a new cell to appear whenever the Growth Variable is reached; this number is an individual variable.
Every starting creature gets a 2-digit number. When it reproduces, its offspring starts with the same 2 digits as parent, but is a 3-digit number. You can count the generation of a creature by the number of its digits. When a creature has reproduced 9 times, it dies.
Organisms might be born with one of several different reproduction strategies. For instance, plants might thrive if they put their offspring close by, but if fish did the same they might immediately rip into each other, causing both to die. Different reproduction strategies might be to choose an empty space randomly out of the entire tank, to look in a particular direction until you come across an empty space (a good strategy for plants -- create the new plant straight up, and let the current cause it to drift to a new spot), or create the new child as close as possible.
NERVOUS SYSTEM CELLS
Each cell has a randomly-determined range -- two numbers between 00 and 99. Thus a 56,62 spitter would generate a random number from 56 to 62 every turn. This number is transmitted to the neural receptors of all 26 adjacent cells.
You could make different kinds of spitters, and see which ones work the best. For instance, a spitter might produce numbers in sequence, instead of at random. They might fluctuate up and down in a sine wave. They might produce numbers in a weighted curve. Presumably, natural selection will pick out the best ones for particular tasks in particular creatures.
This works like a number spitter, but only functions if it senses a foreign cell X+2 spaces away in a straight unobstructed line, where X is the number of adjacent eye cells.
DANGER SENSE EYE
Works exactly like regular eye, but only functions if it senses a foreign mouth or tooth cell. Both kinds of eye cells give one another a bonus.
OTHER SENSORY ORGANS
Other types of specialized sensory cells are also possible. Specialized eye cells could sense walls, for instance. You could have noses, that send a signal when they sense a particular kind of cell in any direction at all. Or internal sensors, that send a number equal to the size of the creature. There could be three different kinds of positional sensors, that send back your x-coordinate, your y-coordinate, or your z-coordinate.
Whenever its number receiver gets a number, it passes it on to the neural receptors of all 26 adjacent friendly cells.
Various kinds of nerve cells would behave in different ways when they simultaneously received numbers from two adjacent cells. One might work as an AND gate, adding the numbers together, and another as an OR gate, alternating between sources. One cell might alternate passing on the highest and lowest number it receives, one might average multiple numbers together, etc.
I have no idea whether, if you make enough different kinds of sensors and nerves, some kind of brain would eventually develop, but it's nice to think so.
DIGESTIVE & PROPULSION SYSTEM
When adjacent to a food cell, this cell eliminates it and adds one to its fat counter.
Can store fat numbers. Also, has fat distribution subroutine. Can only take a fat cell from an adjacent fat cell if its ID # is lower (this assures that food travels in a constant direction and two adjacent gut cells don’t just pass food back and forth).
All gut cells start off the game with about 5-10 stored fat.
This might be overly complicated – perhaps the mouth cells should just teleport fat directly to the brain.
It has a neural range (00-99), and a vector (one of the 26 directions). Also has a fat collection subroutine. Whenever its neural receptor receives a random number within its range from an adjacent spitter or nerve cell, it first checks all adjacent digestive system cells (Mouths and Guts), looking for stored fat. It needs an amount of stored fat to operate equal to the total size of the organism/40 (thus, bigger creatures will need more food to move). If it finds sufficient fat, it eliminates it, and moves the entire organism one space in the direction of its movement vector. If it receives multiple signals, it only responds once.
If another cell is blocking the organism, the "brains" of the two organisms are consulted to check the creatures' size. If the moving creature is larger, it "pushes" the smaller creature in front of it; otherwise, its movement fails.
Exactly like muscle, but when it gets a signal it rotates the entire individual around itself (or maybe around the brain) in one of six directions.
Does nothing, but is immune to enemy tooth cells.
If a tooth cell senses a cell belonging to a different creature is adjacent to it, it turns that cell into food. It doesn’t work on Armor, though. If two enemy tooth cells are adjacent to one another, the one belonging to the larger creature eliminates the other.
Destroys adjacent enemy cell belonging to a different creature, including armor but excluding another claw. It does not turn it into food, like a tooth cell, but just destroys it. Like a muscle, it uses up 1 from an adjacent fat storage cell whenever it destroys another cell. If it does not have the necessary fat, it can be eaten like any other cell.
The essential cell for plants. If it is adjacent to a wall, this cell cancels the effect of current for the entire organism. Any organisms without anchors next to a wall will drift one space per turn in the direction that the current flows.
Has a fat-grabber routine like gut or brain. Whenever its fat number is at least one, it randomly makes a copy of itself or an adjacent cell, puts the new cell into in an adjacent empty space, and tells the brain that the new cell is part of the organism. It subtracts one from its fat when it does this. When it is completely surrounded, it randomly turns into a nerve or gut cell.
Or this is just handled by the central cell.
There are several different ways in which mutation might be handled.
There should be an overall "radioactivity field" which is capable of being set by the user. At the beginning of the simulation, the radiation might be set quite low, so that efficient organisms have the opportunity to reproduce widely. Later, once several different "species" have become widely distributed, the background radiation could go higher, so that new variations could develop.
Mutations should occur primarily when creatures reproduce. At that time, there would be a small chance that each cell will change one of its parameters -- ie., a spitter cell could change one of the numbers in its range slightly, or a rotator might change its direction. There would be an even smaller chance that a cell would change into another type of cell entirely.
A stronger form would be to have all cells keep track of their own activity -- how often muscles fire, how often nerves receive messages, how often eyes sense objects, how often armor repels an attack, etc. The less activity a cell exhibits, the more likely it would be to mutate.
Overall tank variables:
Density of starting creatures
Density of food drops
Metabolism – how much food a creature consumes with every click to not die
Cost of movement – how much food a creature needs to move. Too high and everything will be sluggish. Too low and there will be no penalty for inefficient movement.
Starting default individual variables.
Individual variables: (These can change slightly up or down with each generation)
Percentage of incoming food going to growth, reproduction, motion, and vitality.
Likelihood of cellular mutation after reproduction.
Distance offspring appear at.
Cost of growth – low will lead to larger creatures, but larger creatures don’t reproduce as often.
Mutation and growth variables.
Instead of buds, whenever a brain’s growth reserve reaches the growth number, a random empty space adjacent to the creature becomes an external cell (mouth, armor, eye) or possibly internal. If an existent cell is completely surrounded, it turns into an internal cell. Mouths turn into guts, eyes turn into nerves.
WHAT I THINK WILL HAPPEN
The biggest initial advantage will be to have a mouth cell on the side which your muscles are primarily pushing you. These kinds of organisms should reproduce fairly quickly. The upper areas, where the food is falling, should get filled with small fast-moving cruisers.
Since all food is dropping towards the bottom, that's also a good place to be. There are two basic strategies for collecting food: moving after it and snapping it up (animal) or anchoring yourself to the bottom so that you aren't affected by current anymore, and letting the food drift into your mouth (plant). This strategy would let you get rid of unnecessary baggage like muscles and nerves and eyes. Once the plants are rooted, they should put most of their energy into mouths, guts, and growth buds. Since the tallest of these plants will have first crack at the food as it drifts down at a diagonal, there should be some height competition. Long skinny branches with mouths on the end might work. Also, if you grow adjacent to another plant, you can start eating your way into it, so things could get nasty on the floor in slow motion. The same strategy would also work on the walls.
There might also be a niche for small bottom feeders to pick up food the plants miss. Eyes might help here, both to find the food and to keep away from the big nasty plants.
On the other hand, the plants themselves would also be a good source of food. Bottom feeders might develop a ring of teeth and mouths to slice through the plants stems, and then feast on what remains.
Both plants and fish should start developing internal and external structures. Armor is obviously a good idea around as much of your body as possible. Fish will have an advantage here -- since they'll swim basically in one direction, they'll be able to concentrate their mouth cells on the front end, and armor the rest of themselves. Fish insides should end up with a string of gut connecting the mouth to the brain, with clusters of muscles around it. If you've got more muscles, not only do you go faster, but you have more flexibility to get around obstacles, etc. A fish that goes in a particular direction most of the time, but occasionally flips its direction or moves sideways, would have an advantage over a creature whose muscle/nerve combinations only push it one way. Number spitters and threads of nerves may also be inside.
One of the most interesting parts of the program will be seeing if complex brains develop. In theory, you could use the neural cells to build brains. The question is, will evolution build them on its own?
For instance, it would be a big advantage to a fish to learn how to stay away from the walls. Not only is it bad to swim into a wall because you can get stuck with your nose in a corner, but it's also dangerous because that's where all the nasty plants live. If you've got cells that deliver the X-coordinate or Y-coordinate each turn, then theoretically a mechanism could develop which rotates the fish to face the center of the tank whenever the X or Y gets too far towards the extremes of 0 or 100. Likewise, it might be useful to have a mechanism that keeps your Z coordinate as high or low as possible, since there will tend to be more food at the top and bottom of the tank.
If you were designing a shark, you would put four eyes around the mouth. Each one would send a different signal to nearby muscles when they detect food in their direction, and perhaps also turn the creature away if they spotted a predator. The question is, will evolution build the same kinds of computers that we would?
Mouth cells are vulnerable for both plants and animals. Thus, I think an efficient strategy might be to have the mouth cells in a recessed area, surrounded by armor, to keep larger creatures out. A ridge of armor is a waste of mass, though -- smaller cones would do the same with less. And the way the growth buds work, things might tend to grow in cones anyway. In the highest life forms, these cones might be tipped with teeth cells, to rip apart a large creature and kill it, thus turning it into food before its mouth can come into contact with your mouth.
This would lead to the evolution of genuine teeth.
Another strategy might be to forget about teeth, forget about eating other organisms, and armor your front end heavily, with little holes big enough to let single food cells through into a hollow mouth area. These mouths would be like the balleen of a blue whale.
Of course, one of the beauties of a program like this is that organisms could develop that you do not anticipate.