Frequently Asked Questions
What is the latest version?
The latest version is 4.8e. (Released on: July 1, 2007)
What is Evolve?
Evolve 4.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.
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/parse etc... It has a very simple instruction set. It only has one data type (which is a 64-bit integer). KFORTH programs compile into a simple row/column matrix, which lends itself to sexual recombination (Evolve interlaces each row between the two parents).
Any large-scale simulations happening?
Yes. I just started my One Year of ALife project. I have a dedicated linux box that will run an Evolve 4.0 simulation for 1 year. Every day a snapshot is uploaded to my website. Go here to learn more and see the progress of this project.
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: { 20 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: { 20 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).I strongly believe that supporting recursion is paramount to evolving creatures with impressive behaviors. So I am optimistic that "Evolve 4.0" with KFORTH should succeed as an ALife simulator.
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:- OMOVE: Move the organism.
- ROTATE: Rotate the organism by 90 degree units.
- CMOVE: Move a cell relative to the organism
- EAT: Eat edible stuff near this cell.
- MAKE-SPORE: Create a spore nearby
- GROW: Add a cell to our organism
- LOOK: Look in a direction and return what was seen and its distance.
- WHERE: return distance to the thing seen while looking in a specified direction.
- WHAT: return 'what' value of the thing seen while looking in a specified direction.
- NEAREST: return direction to nearest thing after looking in all 8 directions.
- FARTHEST: return direction to farthest thing after looking in all 8 directions.
- NEAREST2: same as NEAREST except the search radius can be limited.
- FARTHEST2: same as FARTHEST except the search radius can be limited.
- MOOD: query the mood variable of another cell within the same organism.
- MOOD!: set our mood variable.
- BROADCAST: send a value to all cell within the same organism.
- SEND: send a value to a particular cell (within the same organism).
- RECV: query our message buffer and put its value on to the data stack.
- AGE: query the age of our organism (number of simulation steps the organism has
been alive for). ("How old am I?")
- NUM-CELLS: query the number of cells in our organism. ("How big am I?")
- HAS-NEIGHBOR: query if the organism has a neighboring cell.
Click here to learn more about these instructions.
Can cells communicate?
In a very limited way. 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.
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?
A single mutation inside of a tight loop, could easily cause these creatures to fill up its data stack (or call stack). The way I control this is the concept of 'energy'. Every organism has a counter that contains its energy. As it eats stuff, this counter grows. When you first create a simulation you specify the amount of energy for the first organism. This amount never changes (energy is conserved). It moves around between organisms etc...For the most part energy is not needed to MOVE, LOOK, etc... But when a cell wants to push something on a stack (the data stack or call stack), it requires 1 unit of energy to do so. If the organism doesn't have enough energy... well this will sound cruel, but in that case Evolve kills the cell that tries to do this.
This turns out to be a reasonable way to make sure evolving KFORTH programs are stack friendly.
This is also the reason why the amount of energy in your simulation controls the overall population. Every organism needs a minimum of 1 unit of energy to survive. So if you had a universe with a total of 300 units of energy, you could never have more than about 300 organisms.
When an organism or cell dies, any energy stored in the form of stack elements will be transferred back to the organism (or as organic material).
NOTE: Every cell gets 50 "no cost" stack elements, which it can use without needing energy. When the combined size of the call and data stacks grow past 50, then each additional stack element requires 1 unit of energy.
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?
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 believe evolution is progressive, in the sense that it tends to foster more and more awareness in creatures. Humans are therefore the best example of this trend in evolution. Hopefully this simulator will demonstrate a similar trend.
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.
Do you output any other format besides binary?
Yes there is an ASCII format. It is a secret feature. If you specify a file with an extension of .txt, Evolve will write out a text file of your simulation. However this is very slow (you have been warned). The format is a self describing format called "Photon Ascii".When you load a file Evolve checks if it is binary or ascii and load it correctly.
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 both linux and windows. The primary purpose is to run a simulation from a shell. See the section on Evolve Batch for more information.
I am missing 'MFC71.DLL'?
This is a dependency that Evolve.exe has. You can download the missing .dll from many DLL installation websites. This DLL is now bundled when you install, evolve4exe.zip, so this error shouldn't happen anymore. But if it does, then you can grab a copy of this .DLL the Evolve installation directory. Good luck.
I get "Bad Magic Number", when opening a sim file?
This means the file is not in the proper format. If the file was generated using a newer version than your software, make sure you grab the latest version of Evolve. Your previous simulation files will still work (they will automatically be upgraded to the latest version).
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).
What is an XY Simulation?
This is a special type of simulation in which the organisms must reproduce sexually (rather than asexually). See the section on XY Simulations for more information.