Wednesday, April 25, 2012

Evolution Simulator

One of the things I've been interested in for a long time is trying to simulate evolution in various forms.  There have been quite a few attempts at this over the years and some quite interesting things have been created.

Anyway the problem I've been trying to wrap my head around is what the correct simulation substrate is.  I feel like having a very flexible substrate that can do "anything" is really important to give you enough flexibility to do something really great.

For example real evolution uses real physics with atoms, molecules etc.   Very complex structure can be created through the magic of protein folding which is simply the physical side effect of the nature of the protein molecules.   What's the equivalent machinery that we could simulate?

A straight up copy of real physics would do the trick well but that's a fairly tricky proposition.   Ultimately I think whatever the simulation is built on itself has to be flexible and expose the underlying system itself to modification.  So I'm been thinking along the lines of (very roughly) something like a core-wars type environment where the organisms can interact.  I'm starting to think though that there does need to be some sort of underlying "physics" of some sort to make all of this work and the "programming" of the organisms has to itself be represented in this physical environment.

That got me thinking about trying out something on the level of cells.   Probably not the same as human cells but basically a cell would contain a physical world representation, a blob of "code" inside it and a set of "inputs".  I would expect there to be things like programmable cell death, cell development etc.  In the simulation there would be ways for cells to stick to other cells (if they are amenable), communicate, develop, work together, spawn new cells (assuming they have the resources to do so) etc.

Each cells representation in the world is basically a physics object.   Constraints would allow them to stick together.  Motors could use resources but provide locomotion etc.  The shape could be defined using code inside of the cell.  Possibly the shape is just a convex hull around a defined point cloud and the cloud can itself animate and change the shape on the fly.  Or maybe it's just polygon soup.  This would enable some interesting stuff. 

Reproduction wouldn't be too defined in terms of the high level.  Cells can communicate and copy code with each other and spawn new cells when they have resources available to do so.  I'm not sure what the resources are, possibly we fill the environment with "empty" cells that can simply be attacked or absorbed.   Possibly need to define how matter transforms to energy and vice-versa.  Maybe connecting cells takes energy and breaking them apart releases it or something.

Anyway I would love to have some time to tinker with this kind of stuff.  Instead I'm just writing it down as running a software company tends to suck up your time.

1 comment:

  1. I built an evolution simulator recently so your thinking is quite familiar to me (it still requires work but have a look if you like:

    I think you need to define what it is you would want from your simulator (if you were ever to build it). Is it to teach people about evolution, to look good, or to prove a particular evolutionary process?

    There are some interesting aspects about evolution that do limit our ability to simulate it on a computer. The complexity that can be produced is quite staggering and to record that information on a computer will use a lot of memory. I think a lot of simulations of what I have seen are a balancing act between interactivity, cool features and what can be achieved with the available technology.

    I found I received a lot of insights by building that simulator so I recommend giving it a go if you are interested in evolution.

    Cheers, Dale