Semi-Automatic Discovery of Interesting Cellular Automata Using Interactive Genetic Algorithms

Discovering Computational Creatures

I've always loved Conway's Game of Life and I wondered whether there were other interesting cellular automata. I wanted to find them.

I fell down a massive rabbit hole trying to figure out what a precise definition of "interesting" would be, and eventually concluded there wasn't really a good one. Also even if there was, I couldn't figure out an easy way of knowing whether a cellular automata ruleset would lead to interesting behavior without actually running it.

So there are 229 possible rulsets for these 2d cellular automata with a Moore neighborhood of 1. That is, in a window of 9 cells, there are a 29 possible states. For each of those states, we need to specify whether this leads to the center cell being alive or dead in the next time step.

That's a lot.

After some experimentation (with my friend Matthew Li) we settled on a two-step process. First, we would generate random rulesets (29 bit strings), check which ones did interesting stuff, and then randomly "breed" interesting rulesets together to generate new ones. That is, we'd split the strings, and splice them together, with a few pointwise mutations. We'd then check the new rulesets to see if they were interesting, and repeat the process.

Once we found one that we liked, we'd refine it using an interactive interface. The interface would let us run the cellular automata, and show which rules activate most frequently. We could then manually adjust the ruleset, by setting whether each rule lead to the center cell being alive or dead.

This was actually fairly successful in letting us find interesting cellular automata.

My favorite that I've found so far is one I've nicknamed Sierpinski Sludge. If I recall correctly, I encountered it initially in the breeding grounds, and then refined it using the enneract interface.