Monday, July 24, 2006

More on modelling evolution

Imagine an environment which contains a variety of resources: we might imagine these as being carbon dioxide molecules, water molecules, visible light photons, and so on. The environment will probably contain a large number of these – though not uncountably large. And even using non-specialist datatypes, a 64 bit integer will allow counting up to 1018 – a 16 byte BCD number (“decimal” in Visual Basic) will count up to 1028! So it is possible to work with pretty large populations – remember that 22.4 dm3 of gas contains only 6x1023 molecules – and of course, the same datatypes are available to count instances of particular species.

Imagine in this environment a simple proto-organism – perhaps no more than a protein; perhaps as much as a simple cellular organism. The significant thing about this proto-organism is that it is the simplest reproducing organism. If the organism has access to (say) two molecules of carbon dioxide, two molecules of water and a photon of visible light, it will reproduce, becoming two copies of the organism, and outputting (let's say) one molecule of oxygen. There are now two copies of the organism, and the environment has gained one molecule of oxygen, but lost the required input molecules and energy. (We deduce from this that the organism consists of two carbon atoms, four hydrogen atoms, and four oxygen atoms ... but that's not important right now.)

As the population of this organism grows, the number of molecules of the resources in the environment decreases. It would be possible for the environment to be replenished with each step, or for a limited amount of a particular environmental resource to be available at each step.

Now, with a finite probability, the organism might mutate. Not just generally mutate, but significantly mutate. What I mean by a “significant mutation” is that it changes what it uses from the environment and what it returns to the environment when it reproduces. So an organism might use a molecule of oxygen instead of one of the molecules of carbon dioxide, and return a molecule of carbon dioxide when it reproduces. If this happens, we have a functionally different organism – which itself reproduces and affects the environment.

In my latest foray into Visual Basic, I started modelling this. It is possible to have mutation rates at very low levels (let's say one in 1010, for the sake of argument), so the population of an organism has to get to the sort of levels that most programs modelling evolution can't dream of before it is likely to mutate.

The number of exchanges with the environment (molecules used or returned) represent what I termed the "weight" of the organism. The higher the weight, the longer an organism takes to reproduce. If a resource in the environment is exhausted, the population of an organism that requires that resource to reproduce declines. If it is "limited" (by which, in my first attempt at modelling it, I suggested that more than 1% of the environmental resource is used in each step) the population of an organism that requires that resource won't grow.

I think this is a new approach to modelling evolution - and it is more concerned with large-scale changes in populations over time, rather than the evolution of new functionality. Indeed, this model assumes that new functionality can evolve (and that the proto-organism can appear in the first place), rather than seeking to demonstrate how this might happen, and on that basis looks at how populations might develop over time. "Tangled Nature", as developed by Henrik Jensen et al, looks at changes in large populations in this way, but I think the advantage of this approach is that it ought to be less computationally heavy but still able to yield interesting results.