I am working on implementing a cellular automata framework in JavaScript, though I don't really have a good sense of what I'm doing yet. I have spent days searching for "rules" for cellular automata, but didn't really find much in terms of collections or data sets describing the rules. Wondering if you could explain or outline briefly what the common rules or rule frameworks are for 2D cellular automata.
- What are some examples of state systems varying by number of states, looking mainly for smaller state systems from 2 to 10 or 12 or something smaller.
- What are the rules generally like for these 2D automata, what is the spectrum? For example, does it check if the neighboring cells are greater than some value, or less than, or equal to, or a combination thereof? It seems like there's a huge number of ways to do this, and I'm not really sure how the community has gone about defining the state transitions in the rules.
- Sort of a tangential question which I'm curious about... In the research, do they always focus on the evolution of a CA given one set of rules at a time, or do they ever have the rules dynamically change or evolve themselves in some way?
Basically I'm wondering what the spectrum of the types of rules are for 2D cellular automata. I haven't found much on the web describing this.
Like for example, here are some open source projects for 2D cellular automata, and I'm not really sure still how they are thinking about the rule systems.
Here is my attempt at constructing some rules, and I just don't get it yet.
const ca = new CA2D({
w: 20,
h: 20,
max: 1,
move: [
{
make: 1,
test: [
eq(1),
eq(0),
eq(1),
eq(1),
any,
eq(1),
eq(1),
eq(0),
eq(1),
],
},
{
make: 1,
test: [
eq(1),
eq(0),
eq(1),
eq(0),
any,
eq(1),
eq(0),
eq(0),
eq(0),
],
},
{
make: 1,
test: [
eq(1),
eq(0),
eq(0),
eq(0),
any,
eq(0),
eq(0),
eq(0),
eq(0),
],
},
{
make: 0,
test: [
eq(1),
eq(0),
eq(0),
eq(0),
any,
eq(0),
eq(0),
eq(0),
eq(1),
],
},
{
make: 0,
test: [
eq(1),
eq(1),
eq(0),
eq(0),
any,
eq(1),
eq(0),
eq(0),
eq(1),
],
},
],
})
