Cellular Evolution

About

Evolution has always been my favourite theme, and this is probably the oldest project I have. There haven't been much programming done when it comes to this project, but I do have a lot of base material and planning. I used to have a webpage where I wrote about and discussed the project, it may even still exist somewhere out there but I have forgotten what I called it and it's outdated now anyway so it doesn't matter.

This project is also one of the very few that has attracted outside interest. It's very nice to know that other people are interested and willing to help :D

Basics

This project is about the simulation and evolution of cells. Each cell is represented as a square on a grid and has the ability to move around. Controlling the cells is a signal/receptor/inhibitor system described by each cell's genetic code. To survive, a cell must gather energy from its surroundings. A base level of energy is provided by a 'sun', but cells may also attack and attempt to drain other cells of their energy.

Goal

The ultimate goal, one that I will be extremely happy to finaly reach at some point, is to get the cells to group and/or differentiate. That is, I want them to evolve into multi-cellular organisms. That is in fact how this project started; I was curious about the evolution of organisms and wanted a way to see and experiment with that kind of evolution.

Extended Description

The Environment

The environment the cells live in is a simple square grid. Each square may contain a cell, but only one and a cell is always on one square. Cells also have the ability to move around to a neighboring square.

Each square has an energy level. In the case of empty squares, this energy comes from the sun which continously resupplies the empty cells with energy, up to a predefined level. For occupied squares, the energy is that of the residing cell. When a cell dies, its remaining energy is transfered to the resulting empty square.

Different chemicals may be emitted by the cells. These then diffuse at a speed depending on the size of the chemical (small moves faster). The chemicals are also subject to decay, and will dissapear after a few ticks.

Movement

When cells move around, they push against any neighboring cells in that direction and if they have the necessary strength they will move. When a cell pushes against several other cells, it's strength is divided between all the cells and added to an accumulative movement variable. When this value exeeds one in any direction (+x, -x, +y, -y) the cell is moved one step and the movement variable is decremented.

While this is in no way "physically correct", it does provide a very nice compromise between simplicity and usefulness. It enables me to keep the simple grid system, while also allowing for creation of muscle like cell structures (e.g. a row of cells pushing forward).

The Cells

Each cell is descibed entirely by its genetic code, which is divided into two parts that descibe two different parts of the cell.

Physical Aspects

Each cell is a single square on a grid, but that square may have many different attributes:

Behaviour

As stated above, I intend for the cells to be controlled through a signal/receptor/inhibitor system, similar to the body's hormone system. Whether or not this is what I use in the end depends entirely on whether I can device a good system for describing it in the genome and a good algorithm to compute it.

Algorithm

The simulation of the cells and their environment will no doubt become very processor intensive. Therefore I must create an algorithm that enables effective distributed computing. Hopefully, when this project matures, I will be able to borrow processing power from the university.

Comments

Add a comment: