Most of these cellular automata were created using a C# program I wrote called "Lifelike" which is available via github here. Lifelike executes an interactive genetic algorithm effectively allowing you to breed new CA. It works as follows:
- The user selects a number of states, cellular structure, and neighborhood function and kicks off the genetic process.
- Lifelike sets the current generation to nil, where by “generation” we just mean a set of cellular automata that have been tagged with fitness values.
- While the user has not clicked the “go to the next generation” button,
- If the current generation is nil, Lifelike randomly generates a cellular automata, CA, from scratch by making an s by r state table filled with random numbers from 0 to s. (The random states are generated via a discrete distribution controllable by the user). If the generation is not nil, Lifelike selects a reproduction method requiring k parents, selects k parents from the current generation such that this selection is weighted on the fitness of the automata, generates CA using the reproduction method and parents, and then possibly selects a random mutation function and mutates CA, selecting the mutation function via a discrete distribution controllable by the user and applying it with a “temperature” controlled by the user.
- Lifelike presents CA in a window.
- The user either skips CA in which case it no longer plays a role in the algorithm or applies a fitness value to it and adds it to the next generation.
- When the user decides to go to next generation, the selections the user just made become the new parent generation and processing continues.
The CA viewer used on this web page was written by Jack Kutilek. It takes CA rules in Lifelike format, simple JSON containing a state table and meta information, and renders the running CA using WebGL and a fragment shader.