Last updated: March 2nd, 2023
Evolve 5.0
VOLVE    5.0

Frequently Asked Questions


What is the latest version?

The latest version is 5.0 . (Released on: February 22, 2023 )


What is Evolve?

Evolve 5.0 is an artificial life simulator.

It is a mixture of Conway's "LIFE" and "Core Wars". Each organism has a genetic program which controls its behavior. The program has all the normal types of instructions you would expect from a programming language: flow control, arithmetic, subroutines, and so on. But, there are also special primitives for interacting with the universe. Such as EAT, LOOK, GROW, MOVE, MAKE-SPORE.


Why would someone use this?

Some reasons,

  1. Interested in seeing evolution unfold.
  2. Testing evolutionary hypotheses.
  3. Interested in swarm intellegence.
  4. Interested in genetic algorithms.
  5. Enjoy programming challenges.
  6. A new kind of core wars competition platform.
  7. Teaching low-level programming concepts.
There are 1,000 reasons we can think of to have this...

... but mostly it's for the reasons we can't think of. (Contact)

... mostly (Aliens)


What is the purpose of Evolve?

My goal is to run a large-scale simulation and see evidence of really cool (perhaps intellegent) behavior. And then... well, if that happens I will enlist my ALife creatures to do my taxes.


What is KFORTH?

KFORTH is a forth-like language. The 'K' stands for "Ken's". So KFORTH means Ken's Forth. Woo hoo.

This is the language used to control the cells in the simulator. This language has several properties that make it perfect for being used in an ALife context. It is simple to implement and parse. It has a very simple instruction set. It only has one data type (which is a 16-bit integer). KFORTH programs compile into a simple row/column matrix which is fast and easy to mutate.


Any large-scale simulations happening?

No. Many years ago in 2007 I ran a "One Year of ALife" project. I had a dedicated linux box that ran an Evolve 4.0 simulation for 1 year. Every day a snapshot is uploaded to my website. I never completed the full year as the simulation got stuck and uninteresting. I restarted several times. I think the most was like 50 days.

With the new Evolve 5.0 I hope to get the chance to attempt another long term simulation.


Have you ever seen any intellegent behaviors evolve with this software?

Sadly, no. But, let me add that (1) It has taken lots of tweaking to get to the current version of this simulator. And (2) only now that I have a dedicated linux box can I run this in the proper time frame needed to see cool things evolve.

It hasn't all been a waste. I have seen the essence of Darwinian selection many times. New innovations are constantly evolving and displacing other creatures. But when you observe their behaviors it is not "mind-blowing" or clever or intellegent.

My personal bench-mark for coolness will be if creatures evolve to use the "LOOK" instruction and actually evade/hunt other creatures. If this kind of behavior evolves I will be immensely happy.


What does a KFORTH program look like?

Here's a sample:

main:
{
	7 fact call
}

;
; Recursive factorial algorithm:
; ( n -- factorial(n) )
;
fact:
{
	dup 0 =
		{ pop 1 }
		{ dup 1 - fact call * } ifelse
}

The 'fact' routine computes the factorial. This is how humans write KFORTH. But names like 'fact' and 'main' are really labels for code blocks, which make it easier for us humans to write in KFORTH. These labels are mapped to code block numbers (main is 0, and fact is 1).

Another aid for humans are the nested code blocks like, { pop 1 }. Again, when compiled these nested code blocks are pulled out and put into their own code block with their own code block number. In this case { pop 1 } becomes code block 2.

Here is the same program after being compiled:

main:
{
	7 1 call
}

row1:
{
	dup 0 = 2 3 ifelse
}

row2:
{
	pop 1
}

row3:
{
	dup 1 - 1 call *
}

Notice the nice grid-like layout of compiled KFORTH. This property makes it easy to merge 2 programs (during sexual recombination). Evolve just alternates rows of code blocks to form a new child program.

(click here to see a graphical representation of this program as it would be stored internally)

Also notice that compiled programs have no real syntax requirements. Each row is simply a list of instructions or numbers. This means our mutation algorithm will be simpler because it doesn't have to worry about about preserving any special syntax crap.

Click here to see more KFORTH examples.


What does an evolved KFORTH program look like?

Click here to see some sample KFORTH programs that evolved after running them in a simulation. These KFORTH programs can actually be used to seed your own simulations.


Does KFORTH support recursion?

Yes it does (see the example above). This was the biggest limitation of my previous attempts at an ALife simulator. Previous versions used a gross half-baked assembly language with a fixed sized stack (stack size=4).


What instructions do organisms have?

In addition to all the normal Forth-like operators, the following instructions cause the Cell executing them to interact with the universe:

And many more... See this page to learn more about all the instructions.


Can cells communicate?

Yes, lots of ways. Each cell has a "MOOD" register, which only they can set. Other cells can query this MOOD register. I guess the theory being that a creature could evolve to use this register. If it was in "EVADE" mode, or "FORAGE" mode, it could set its mood, and the other cells could act accordingly.

Also, every cell has a MESSAGE register. This can be set by the SEND instruction, which allows any cell to send a value to any other cell (within the same organism, of course). The organism can query its own MESSAGE register and act accordingly. As special case, the BROADCAST instruction will set the MESSAGE register for all cells in the organism.

Lastly, all the cells share the same program memory, which can be written to as well as read from.

I provided these primitives but I have no idea if anything will evolve to use them. My experience with ALIFE simulators indicates that what I think is a useful idea, is not necessarily what evolution will think is useful. More information on communicating between cells is available here.


How do you limit/prevent runaway stack growth?

The kforth machine used by each cell has a fixed call stack and fixed data stack (64 elements each). To limit growth the CPU simply stops pushing items on the stack, basically treating all instructions as NOP's unless they pop things off the stack.


Do any simulations die off?

Yes, in some cases the simulation will reach a state where there are only a few organisms, and they don't reproduce for some reason (they are stuck in the wrong part of their genetic program).

When energy (and population) is too low you can have too much useful energy sitting around as spores or organic material and not enough moving creatures to eat it. So yes, some simulations will peter out.


Has any creature evolved to LOOK around?

Yes, it is common nowadays. In older versions of the simulator it didn't occur. The vision system has been recently changed, and so far the results look good. But in the previous versions LOOK'ing around was rare.

It is my goal to see creatures evolve that will make heavy use of the vision instructions. For me this represents a special kind of awareness for organisms.

I think the trend in life forms is to become more and more aware up to the available information in the environment. So rich awareness requires a lot of information to be aware of. Evolve 5.0 has Vision, Sound and Odor as channels of information. Additionally, all the instructions returns useful success/error codes, which can be a form of awareness. (For example OMOVE returns if it worked or not. This tells the organism when it "bumps" into something, a form of awareness)


How do I pan the simulation window?

Use the arrow keys to scroll the window when you are zoomed in. Or just click your mouse and drag the window.


How do I create barriers?

Select the barrier right click tool. Now right click inside of the simulation window and drag your mouse to draw a barrier. If you want to erase, right click on an existing barrier first (now you're in erase mode). See the section on barriers for more information.


What is the Simulation file format?

The format is a self describing format called "Photon Ascii". Click here to see an example of the ASCII file format.


What is 'evolve_batch'?

evolve_batch is a command line utility. It runs on linux, macos and windows. The primary purpose is to run a simulation from a shell. See the section on Evolve Batch for more information.


How fast is the Evolve simulator?

Assuming a 2.0 Ghz machine, then a simulation with a population of 3,000 will produce 100 steps/sec. (a population of 6,000 will give 50 steps/sec.).

Every day you can expect about 3 to 5 million simulation steps to elapse.

Every 4 or 5 days you can expect about 1 billion births/deaths.


How long can simulations be run? Are there any overflow considerations?

The C data type used for counting things (like number of births, steps, etc...) all use 64-bit integers instead of the more standard 32-bit integers. This effectively removes any overflow issues associated with running a simulation for an extended period of time (Like the One Year of Alife project). The simulator is designed to be saved and restored without losing any state changes.