OVERVIEW

DarwinBots is an artificial life software, that means it's purpose is to simulate as closer as possible some of the aspects of natural life and evolution in a computer. The fascinating thing it's it does so by bringing to life a certain number of individuals, which must strive for existence like the real organisms do. The other side of the matter is that, since you cannot simulate ALL of the process involved in real life - they are far too much complicated to be simulated by a software and yet not well understood- the programmer (me!) must choose which aspect of life to simulate, and build a model of world which could be at the same time complex enough to be interesting but simple enough to be calculated fast, to be something like entertaining.

How is an artificial life software made? Basically, the idea is to simulate a certain number of individuals - that is, things which act indipendently from each others and perfectly unconscious of being part of something bigger- and give them all some kind of code which specifies how they look, or how they act, or how they interact with the world they are put in. Reproduction of those individuals is simply obtained by duplicating their code, but with some degree of variation from parent to child. This way, the codes passed on through generation will eventually become different, assuring to the individuals different behaviours or shapes. If those shapes or behaviours can improve the individual's ability to reproduce its own code, those new characters will be passed on to next generation; otherwise, they will likely disappear.

How is this made in DarwinBots?


The DarwinBots universe is a big, flat field, populated by flat individuals called 'robots'. Every robot is a simple square of fixed size, so shape is not involved in evolution in any way. What is involved in evolution is the robot behaviour, which is determined by a variable length code (a 'DNA') that's in fact a complete program written in a special language (which hasn't yet a name- suggestions?).
Like any other program, the robots DNA need, in order to work, to manipulate the values stored in a memory array. Each robot has a 1000 integers memory array, that the DNA can access for read and write operations.
To interact with its world, a robot has a set of senses and 'muscles' which are the same for all robots. What may vary, however, is the ability to use the information provided by these senses and to control the muscles in order to feed and reproduce.

Every robot has an energy parameter, which is worth nothing else than stating when a robot is dead: that is, when its energy reaches zero. Energy is consumed by any operation made by the robot (that is, moving, but also storing values in memory or just by compare operations) so that there is a cost/benefit ratio for every action. But you can't really say a robot is more healthy the more energy it has: there could be the case of species in which the average individual has really few energy, but is very successful; and, on the contrary, there could be species in which individuals are on the average plenty of energy, but scarcely able to reproduce (why? 'cause they're stupid!).

The simulated universe is simple but quite powerful. Each robot has an aim (represented by a white spot) which indicates the direction in which a robot is pointing. Any of the robot movements or input senses is related to the aim position, so that none of his senses gives him an absolute information about the environment.
There are only two types of objects in the universe: the robots and the  shots, or particles. While robots are square and cannot overlap, but tend to bounce on each others, shots are completely immaterial, so they don't collide with each others. Shots are produced by robots, and carry information or energy. For example, a robot eats by shooting an opponent with a particular particle jet. When (if) the target is reached, it's forced by the particle jet itself to respond with another jet, carrying tokens of his own energy.
But shots can also carry information, in the form of a couple address/value that is stored - when reached- in the receiver's memory.

Since the memory is made both by unused - but usable- cells and cells connected to the input or output organs, such jets can easily be used also to mess up other robots.
Finally, there's a last semi-physical object, that is ties between robots. You can see those ties when a robot is duplicating itself - they will be thick but temporary- as well when a robot voluntarily creates them, and in that case they will be thin but everlasting.

The mutation part.

As I said before, the other part of an artificial life program is the individual's reproduction with random mutations. As the robot's DNA is just a computer program, the mutation part consists just in messing it up a bit. However, this can be done in some ways which can diminish the frequency of SENSELESS mutations (althought negative mutations are always the biggest part). This is done by routines that substitute a variable with another random variable, an instruction with another random instruction, and so on - or by inserting completely new
instruction blocks, that is, instruction with parameters. For a complete explanation on how DNA works, read the DNA tutorial.

The good part in mutation is that, being completely random, it's easy to see coming out something surprising and somewhat intelligent - at least, something we haven't thought before. For example, during the coding and testing time, some robots have evolved, which were able to do impossible tasks, such increasing their own energy without eating and moving up and down without consuming energy. They have rapidly swept away all other robots, before I found the bug in the program they were exploiting. Someway, I can say they have been my first beta-testers.


Ok, I think it's enough.

Introduction