- It was meant for 1D rules. This is mentioned in the LifeWiki article, but this classification was intended for the 1D automata that Wolfram was analyzing. Extending it to 2D rules adds a lot of gray area and reduces its usefulness.
- It's hard to tell what class rules are in. Take B3/S as an example. Although soups in this rule technically have a chance of generating something other than the vacuum, the chance of this actually happening in a random soup is extremely low. Especially in INT rules, figuring out the difference between a class 1 rule and a class 2 rule can be difficult, even though both are well-defined.
- Figuring out what class a rule is in is subjective. In particular, distinguishing between class 2 and 4 automata and class 3 and 4 automata is pretty subjective. There is no defined line in the sand between being chaotic, having 'a mixture between order and randomness', and turning into simple ash. Soups in DryLife seem to have portions of both order and randomness to me, but it's placed into class 3 on the wiki.
All of this is to say that I think we can do better! In my opinion this is a useful idea - I'm interested in hearing ideas of alternative classification methods, and I wanted to share an interesting (failed) attempt at a classification that I think could be a step in the right direction.
My attempt
The general idea here is to assign to each rule some collection of numerical values which represent the rule's dynamics in some way. These values correspond to some point in Euclidean space - let's call this the 'property space'. If we partition this space into several regions, then the rules can be divided into categories based on which region they lie in. Because rules with similar dynamics will be close together, they will generally be in the same region, and so similar rules should be grouped together.
Here are the two parameters, both ranging from 0-1, that I used in my simulation:
- Density: Starting from a random soup, what percentage of cells will be alive after a long time? Here a density of 0 means all cells are dead and a density of 1 means all cells are alive.
- Temperature: Starting from a random soup and simulating for a long time, what percentage of cells will change state on the next generation? Here a temperature of 0 means no cells change state after a long time, and a temperature of 1 means all of them do. Essentially soups will become more 'flickery' as temperature increases.
I ran this simulation for all of the 131072 Life-like rules which don't have the B0 condition. This was done with some custom (and probably horribly inefficient) C# code which generated the soups & then simulated them on the GPU. After the processing is done we can visualize the results with a scatterplot. Here, each rule we simulated is represented by a point in property space, which is then plotted. This is what it looks like:
You can see that all the rules are located in a triangle (I've darkened the spaces where it's impossible for rules to be). Here, the left edge of the triangle represents all live cells dying at the end of each generation (e.g. B2/S), the right edge represents all dead cells becoming alive at the end of each generation, and the bottom edge represents a rule in which soups tend towards completely static patterns. It's kind of hard to see but there are many rules with very low temperature (like Life) which are near the bottom edge but are kind of obscured by the x-axis. The graph also nearly has mirror symmetry - this symmetry corresponds to mapping a rule to its complement, which must have the same temperature and the opposite density. This means that all self-complementary rules should lie on the vertical line x = 0.5.
I was hoping that the rules would group together into a few defined 'clumps'. If this was the case, it would lead to natural regions (one for each clump) as it means similar rules would very rarely be put into different regions. Unfortunately, that doesn't seem to be the case here. There does seem to be a 'phase transition' at some point where rules go from being very low temperature to being very high temperature (note how the region with temperature 0.1-0.2 is nearly empty), but other than that there doesn't seem to be any obvious categorization here. To me, this is a sign that a different set of parameters need to be used in order to give a truly 'natural' classification where rules fall into one of a few discrete clumps. If we can find a set of properties which does clump naturally for Life-like rules, it probably means it extends well to INT rules as well.
With that said, what ideas do you all have? Any ideas on different parameters to use for a simulation? Did I miss a natural way to divide this plot into regions? Or something completely different? Let me know your thoughts. I've also attached a JSON file of the data used for the above plot if you want to take a closer look.