One of my other fascinations is evolutionary processes. In the past, I have written simple, computer programs in which short strings compete to become simple words, but I want to try something more complex. One of the big holdups? I've never developed a sufficiently complex and interesting way to representing these creatures before now.
One way I'd like to represent a creature would be as a complex set of nodes and links. Treating nodes as points, and links as springs or pistons between the nodes, creatures could be made to move. This is all really nice on paper, but I've always run into an implementation problem: How to give the creature a simple to implement but functionally meaningful way to manipulate its own movement.
This is where a cellular automata come in. These simple games can work as a method to control movement. If each node is given a state, and alters that state based on a simple set of rules, as in the game of life, the links can change their length based on the states of the nodes they are connected to. Of course, the game played on the creature needs some basic properties that some games just don't have. Conway's game of life assumes that each node has exactly four neighbors, while Langton's ant needs to have an order defined on the nodes. Any game that's to work needs to have coherent and interesting behavior regardless of the number of nodes, and it needs to have consistent behavior regardless of ordering. While not required, I'd love it if it were capable of sending signals down a single strand of nodes, and it'd be nice if it were possible to make some kind of resetting muscle.
I have at least one game that fits this bill: the Cyclic Cellular Automaton. This is what I hope to use in my program. Next post, I'll explain how I plan to build creatures from a linear genetic code.