trying to create a primordial soup

For general discussion about Conway's Game of Life.
Post Reply
saibot
Posts: 1
Joined: February 15th, 2012, 1:03 pm

trying to create a primordial soup

Post by saibot » June 5th, 2012, 6:53 am

Dear all,

many CA enthusiasts have tried, I presume, to create a CA environment in which something akin to (biological) evolution would take place. Here I would like to explain another go at this and am curious about your opinions.

I believe that thermodynamics plays a crucial rôle for life. Instead of explaining the theoretical underpinning of this conviction, let me only mention that it implies that one has to add a component of randomness to the CA in order to even have a chance of obtaining something deserving to be called "evolution".

My present attempt seems to have been partially successful: the simulation bears some resemblance to actual thermodynamics and the mechanisms of heat transfer. I interpret pattern activity as "heat" which proliferates through "heat flow" (activity spreads) and "radiation" (active regions produce gliders and sometimes spaceships, which cause activity in other regions). In general, what I find encouraging is the emergence of a "dynamical equilibrium", i.e. a constant flurry of changing levels of activity and creation and extinction of populated regions (the "blobs" in the image below) and empty regions ("voids").

Below you can see the script used together with a snapshot of the simulation after roughly 8 million generations. The corresponding golly file is available here. The script used for the simulation is also below; if you decide to try it out, I would love to hear your experiences! Especially so if you happen to have some more computational power than my laptop does ;)
You should initialize your simulation with an arbitrary pattern located in a small region and the script will do the rest. It uses a "moving bounding box" technique which confines the system to a finite rectangle whose size is dynamically determined by the system itself. It generally reaches a (temporary?) equilibrium after sufficiently many generations. In order to increase the box's equilibrium size, you should increase the number in the definition of $prob, which is currently set to 400.

My questions are:
Q1 wrote: How do you interpret the results of this simulation? Are such phenomena trivial and/or well-known? Have you seen similar things before?
Recognizing any further progress towards a "primordial soup" may be quite difficult. For example, as a next step one could look for spatial variations of certain still lives, e.g. beehives. If a significant spatial variation would exist, one might regard it as very primitive form of chemistry: the density of beehives may potentially influence the future density of other still lives left behind by future activity. On the other hand, so far I have seen little evidence of this it may very well be too naive. Therefore the question:
Q2 wrote: What would you try to achieve next with the simulation? In which direction would you try to modify it?
While I have some more ideas about this, I wouldn't mind hearing someone else's opinion first. Along similar lines, I wonder:
Q3 wrote: Which properties should a simulation have in order to qualify as a "primordial soup"?
Looking forward to any comments!

Code: Select all

# I should have cleaned this up! However my Perl has stopped working and currently I cannot run any simulations, so that I didn't want to mess with the code...
# To begin, you can run the simulation as it is and then start to play with the parameters.

use strict;

my @rect;
my $n;
my $x;
my $y;
my $sprinkle;
my $prob;

while (1)
{
        g_update();
        g_run(8);

        @rect = g_getrect();

        $sprinkle = int(sqrt($rect[2]*$rect[3])/3);    # Here you can modify the division by 3 to something else. This determines the number of cells which get randomly reinitialized below
        $prob = 400/sqrt($rect[2]*$rect[3]);   # Here you can change the number in order to get different equilibrium sizes of the moving bounding box

        for ($n = 0; $n != @rect[2]; $n++)
        {
                g_setcell(@rect[0]+$n,@rect[1],int(rand()+$prob));
                g_setcell(@rect[0]+$n,@rect[1]+@rect[3]-1,int(rand()+$prob));
        }

        for ($n = 0; $n != @rect[3]; $n++)
        {
                g_setcell(@rect[0],@rect[1]+$n,int(rand()+$prob));
                g_setcell(@rect[0]+@rect[2]-1,@rect[1]+$n,int(rand()+$prob));
        }

        for ($n = 0; $n != $sprinkle; $n++)
        {
                g_setcell(@rect[0]+int(rand()*@rect[2]),int(@rect[1]+rand()*@rect[3]),int(rand()+0.03));  # Here you can change the number in the end in order to control the probability that a randomly reinitialized cell is set to 0 or 1. Dramatic effect!
        }

}

Image

Post Reply