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 2
29 possible rulsets for these 2d cellular automata with a Moore
neighborhood
of 1. That is, in a window of 9 cells, there are a 2
9 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 (2
9 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.