In preparation for a conference entitled “Distributed Consensus with Cellular Automata & Related Systems” that we’re organizing with NKN (= “New Kind of Network”) I decided to explore the problem of distributed consensus using methods from A New Kind of Science (yes, NKN “rhymes” with NKS) as well as from the Wolfram Physics Project.
A Simple Example
✕
BlockRandom[SeedRandom[77]; Module[{pts = RandomPointConfiguration[HardcorePointProcess[0.09, 2, 2], Rectangle[{0, 0}, {40, 40}]]["Points"], clrs}, clrs = Table[ RandomChoice[{.65, .35} -> {Hue[0.15, 0.72, 1], Hue[ 0.98, 1, 0.8200000000000001]}], Length[pts]]; Graphics[{EdgeForm[Gray], Table[Style[Disk[pts[[n]]], clrs[[n]]], {n, Range[Length[pts]]}]}]]] |
Consider a collection of “nodes”, each one of two possible colors. We want to determine the majority or “consensus” color of the nodes, i.e. which color is the more common among the nodes.
One obvious method to find this “majority” color is just sequentially to visit each node, and tally up all the colors. But it’s potentially much more efficient if we can use a distributed algorithm, where we’re running computations in parallel across the various nodes.
One possible algorithm works as follows. First connect each node to some number of neighbors. For now, we’ll just pick the neighbors according to the spatial layout of the nodes:
✕
ConsensusState[points_, colors_, nn_ : 5] := NearestNeighborGraph[points, nn, DirectedEdges -> True, DistanceFunction -> EuclideanDistance, VertexStyle -> MapThread[Rule, {points, colors}], VertexSize -> 0.75, EdgeStyle -> \!\(\* TagBox[ StyleBox["Gray", ShowSpecialCharacters->False, ShowStringCharacters->True, NumberMarks->True], FullForm]\)]; BlockRandom[SeedRandom[77]; Module[{pts = RandomPointConfiguration[HardcorePointProcess[0.09, 2, 2], Rectangle[{0, 0}, {40, 40}]]["Points"], clrs}, clrs = Table[ RandomChoice[{.65, .35} -> {Hue[0.15, 0.72, 1], Hue[ 0.98, 1, 0.8200000000000001]}], Length[pts]]; ConsensusState[pts, clrs]]] |
The algorithm works in a sequence of steps, at each step updating the color of each node to be whatever the “majority color” of its neighbors is. In the case shown, this procedure converges after a few steps to make all nodes have the “majority color” (which here is yellow)—or in effect “agree” on what the majority color is:
✕
ConsensusState[points_, colors_, nn_:5] := NearestNeighborGraph[points,nn,DirectedEdges->True, DistanceFunction->EuclideanDistance,VertexStyle -> MapThread[Rule, {points, colors}], VertexSize -> 0.75, EdgeStyle -> Gray] NodeDependencies[points_, nn_:5]:= Table[n-> Flatten[Map[Position[points, #]&,VertexOutComponent[NearestNeighborGraph[points,nn, DirectedEdges -> True, DistanceFunction->EuclideanDistance], points[[n]], {1}]]], {n, Range[Length[points]]}] SynchronousStepNewColors[dependencies_, colors_]:= Flatten[Map[With[{neighbors = Sort[Counts[Part[colors, Last[#]]], Greater]}, If[DuplicateFreeQ[Values[neighbors]], First[Keys[neighbors]], colors[[First[#]]]]]&, dependencies]] GraphicsGrid[Partition[BlockRandom[SeedRandom[77];Module[{pts = RandomPointConfiguration[HardcorePointProcess[0.09, 2, 2], Rectangle[{0, 0}, {40, 40}]]["Points"],clrslist, highlights}, clrslist=NestList[SynchronousStepNewColors[NodeDependencies[pts], #]&, Table[RandomChoice[{.65,.35}->{Yellow,Red}], Length[pts]], 7]; MapIndexed[With[{colors = #}, Graph[ConsensusState[pts, colors],ImageSize->150]] &,clrslist] ]],4],ImageSize-> 600] |
This is a simple example of a distributed consensus algorithm in action. The challenge we’ll discuss here is to find the most efficient and robust such algorithms.
The Background
In any decentralized system with computers, people, databases, measuring devices or anything else one can end up with different values or results at different “nodes”. But for all sorts of reasons one often wants to agree on a single “consensus” value, that one can for example use to “make a decision and go on to the next step”.
Blockchains are one example of systems that need this kind of consensus to “finish each block”. Traditional blockchains achieve consensus through what amounts to a centralized mechanism (even though there are multiple “decentralized” copies of the blockchain that is produced).
But there are now starting to be distributed analogs of blockchains that need distributed consensus algorithms. And the main inspiration for the algorithms being developed are cellular automata (and to a lesser extent spin systems in statistical mechanics).
One issue is to make the algorithm as efficient as possible. Another is to make it as robust as possible, for example with respect to random noise—or malicious errors—introduced at or between nodes.
The amount of random noise can be thought of as something like a temperature. And at least in certain cases there can be a “phase transition” so that below a certain “temperature” there can be zero effect on the consensus output—implying robustness to a certain level of noise.
Some of what happens can be studied using methods from standard equilibrium statistical physics. But in most cases one has to take account of the time dependence or evolution of the system, leading to something like a probabilistic cellular automaton (closely related to directed percolation, dynamic spin systems, etc.).
As I’ll discuss below, in the early days of computing, there was great interest in synthesizing reliable systems out of unreliable components. And by the 1960s there was study first of neural nets and then of cellular automata with probabilistic elements. And some surprising results were obtained that showed that cellular automata could be set up that would be robust with respect to a certain nonzero level of noise.
One feature of cellular automata is that their elements are all assumed to be arranged in a definite array, and to be updated in parallel “at the same time” in a sequence of steps. For many practical applications, however, one instead wants elements that are connected in some kind of graph (that may even be dynamic), and that are in general updated asynchronously, in no particular order.
The simple example we gave above is a graph cellular automaton: the connections between elements are defined by a graph, but the updates are all done synchronously at each step. In the past, it’s been difficult to analyze the more general setup where there is no rigid notion of either space or time. But this is exactly the setup in our new Physics Project, and so there’s now the potential to use its formalism and results (as well as intuition imported from physics) to make further progress.
Deterministic Cellular Automata
To start getting some intuition for the problem of distributed consensus, let’s consider the following very simple setup. We have a line of cells, each with one of two possible colors. Then we update the colors of these cells in a sequence of steps, based on a local rule which depends on neighboring cells. This system is a one-dimensional cellular automaton—of the kind that I started studying more than 40 years ago.
We imagine that the initial condition involves a fraction p of red cells. We want all the cells to turn red if p > , and all of them to turn yellow if p < . The most obvious rule that might achieve this would just replace each cell by the majority color in its neighborhood (rule 232 in my numbering scheme):
✕
RulePlot[CellularAutomaton[232], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange] |
Here’s what rule 232 does starting with 70% red cells in a “random configuration”:
✕
BlockRandom[SeedRandom[567]; ArrayPlot[ CellularAutomaton[232, RandomChoice[{.7, .3} -> {1, 0}, 120], 20], Mesh -> True, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange]] |
As we can see, it manages to achieve a little “local consensus”, but ultimately it’s not successful at reaching a “global consensus” in which all cells are the same color.
And we might imagine that there’d be no rule for a 1D deterministic cellular automaton that would lead to global consensus (or be able to solve the “density classification problem” of deciding whether the density of initial red cells is above or below 50%). But it turns out that this isn’t true. And for example in 1978 the following “radius 3” rule (operating on size-7 neighborhoods) was constructed (and we’ll call it the “GKL rule”):
✕
{l3_, _, l1_, c_, r1_, _, r3_} :> If[If[c == 0, r1 + r3, l1 + l3] + c >= 2, 1, 0] |
Here’s what this rule does with 60% red cells:
✕
BlockRandom[SeedRandom[567]; ArrayPlot[ CellularAutomaton[{FromDigits[ Tuples[{1, 0}, 7] /. {l3_, _, l1_, c_, r1_, _, r3_} :> If[If[c == 0, r1 + r3, l1 + l3] + c >= 2, 1, 0], 2], 2, 3}, RandomChoice[{.6, .4} -> {1, 0}, 300], 60], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False]] |
And here’s what it does with 40% red cells:
✕
BlockRandom[SeedRandom[569]; ArrayPlot[ CellularAutomaton[{FromDigits[ Tuples[{1, 0}, 7] /. {l3_, _, l1_, c_, r1_, _, r3_} :> If[If[c == 0, r1 + r3, l1 + l3] + c >= 2, 1, 0], 2], 2, 3}, RandomChoice[{.4, .6} -> {1, 0}, 300], 60], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False]] |
In both these cases, the rule successfully achieves “global consensus”. And in fact one can prove that this rule will always do this, at least after sufficiently many steps. Here’s a plot of how the density evolves as a function of time for different initial densities:
✕
data=ParallelTable[If[p==.5,Nothing,MeanAround/@Transpose[Table[Mean/@CellularAutomaton[{FromDigits[Tuples[{1,0},7]/. {l3_,_,l1_,c_,r1_,_,r3_}:>If[If[c==0,r1+r3,l1+l3]+c>=2,1,0],2],2,3},RandomChoice[{p,1-p}->{1,0},5000],200],200]]],{p,.3,.7,.05}]; ListLinePlot[MapThread[Callout[#1, Row[{Style["p",Italic],"=",#2}]]&,{data, Cases[Range[.3, .7, .05], Except[0.5]]}]] |
And what we see is that there’s what looks like a phase transition: for initial density p < 0.5, the final density is exactly 0, while for initial density p > 0.5, it’s instead exactly 1.
What happens precisely at p = 0.5? In a sense the cellular automaton “can’t make up its mind” and on an infinite line it generates an infinite nested sequence of domains that alternate between 0 and 1:
✕
BlockRandom[SeedRandom[24425]; ArrayPlot[ CellularAutomaton[{FromDigits[ Tuples[{1, 0}, 7] /. {l3_, _, l1_, c_, r1_, _, r3_} :> If[If[c == 0, r1 + r3, l1 + l3] + c >= 2, 1, 0], 2], 2, 3}, RandomChoice[{.5, .5} -> {1, 0}, 1000], 500], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False]] |
This nested structure is typical of what’s seen in critical phenomena in statistical physics, and in fact cellular automata like this are the very simplest examples of “true” phase transitions that I know. (Like other phase transitions, these don’t become “sharp” except in infinite systems. In typical statistical mechanics one doesn’t get phase transitions in 1D, but that’s a consequence of the assumption of microscopic reversibility, which doesn’t apply to cellular automata like this.)
So what other cellular automaton rules achieve consensus like this? There are no radius-1 rules that work. And if one searches all 232 radius-2 rules (as I did for A New Kind of Science), the best one finds are a handful of examples that achieve “approximate consensus” in the sense that most, though not all, of the cells go to the “majority value” (this is the r = 2 rule 4196304428, for p = 0.6):
✕
BlockRandom[SeedRandom[567]; ArrayPlot[ CellularAutomaton[{4196304428, 2, 2}, RandomChoice[{.6, .4} -> {1, 0}, 500], 200], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False]] |
By the way, among radius-1 rules, there is rule 184 (often used as a basic model of road traffic flow), which doesn’t achieve consensus on “overall density”, but does do so with respect to left- and right-moving stripes, here with the nested pattern generated when p = 0.5:
✕
BlockRandom[SeedRandom[567]; ArrayPlot[CellularAutomaton[184, RandomChoice[{1, 0}, 400], 180], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False]] |
What about “achieving consensus faster”? Here’s a comparison of our original GKL rule with another radius-3 rule (discovered by genetic programming methods) whose average consensus time is shorter:
✕
Column[BlockRandom[SeedRandom[24125]; ArrayPlot[ CellularAutomaton[#, RandomChoice[{.48, .52} -> {1, 0}, 800], 180], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False, ImageSize -> {650, Automatic}]] & /@ {{339789091192587366278221041213531750560, 2, 3}, {339841014953466429132970652455676805280, 2, 3}}] |
It’s not known in general what the “fastest” radius-3 rule is. The two rules above have the feature that they “do their job” in a fairly “simple-looking” way. But there are also rules like the following that do their job in a “more ornate” way:
✕
Column[BlockRandom[SeedRandom[24125]; ArrayPlot[ CellularAutomaton[#, RandomChoice[{.48, .52} -> {1, 0}, 800], 240], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False, ImageSize -> {650, Automatic}]] & /@ {{337607298446901146542393000444934784552, 2, 3}, {338557163619953682141694933300561896488, 2, 3}, {313421633154342960352882914658469183496, 2, 3}}] |
Human-engineered rules (like the first one above) almost inevitably work in simpler and more “understandable” ways. But experience elsewhere (such as with optimal sorting networks) suggests that optimal rules will often be ones that don’t look simple in their behavior, and that can’t realistically be constructed by standard engineering methods, and essentially just have to be found “experimentally” by searching the computational universe of possible rules.
A notable feature of particularly the earlier rules we looked at is that they show a small number of types of very distinct “domains” with definite walls or boundaries between them. And in many ways such walls can be thought of as being like localized structures, “defects” or “particles”. But for our purposes here what tends to be important is whether these particles move around, and whether they annihilate each other to leave a uniform “consensus” final state.
In the simple majority rule it’s inevitable that there are static domain walls:
✕
BlockRandom[SeedRandom[567]; ArrayPlot[ CellularAutomaton[232, RandomChoice[{.6, .4} -> {1, 0}, 300], 60], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange]] |
The reason is that as soon as a domain is larger than the cellular automaton neighborhood, a cell at the boundary of the domain will inevitably see a balanced number of cells of each color on the two sides of the boundary. So the cell itself will act as a “tie breaker”, and will always decide to stay its own color—thereby making the domain boundary stay as it is.
So what if we have a longer-range rule, that samples more distant cells? With range-2 (i.e. a 5-cell neighborhood) “wrong domains” with widths below 4 disappear:
✕
majrn[n_] := FromDigits[If[Total[#] > n/2, 1, 0] & /@ Tuples[{1, 0}, n], 2] BlockRandom[SeedRandom[567]; ArrayPlot[ CellularAutomaton[{majrn[5], 2, {{-2}, {-1}, {0}, {1}, {2}}}, RandomChoice[{.6, .4} -> {1, 0}, 300], 60], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange]] |
Things work a bit better if the cells being sampled aren’t adjacent, but are for example in the pattern :
✕
majrn[n_] := FromDigits[If[Total[#] > n/2, 1, 0] & /@ Tuples[{1, 0}, n], 2] BlockRandom[SeedRandom[567]; ArrayPlot[ CellularAutomaton[{majrn[5], 2, {{-3}, {-1}, {0}, {2}, {4}}}, RandomChoice[{.6, .4} -> {1, 0}, 300], 60], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange]] |
But no finite-size sampling with the pure majority rule will remove all domains. What about the GKL rule? This rule actually only samples 5 cells, but its “extremities” are at distance 3. So can we “improve” it by having it sample more distant cells?
Here’s a comparison of a few cases (the first one is the original):
✕
GraphicsGrid[ Partition[ Labeled[BlockRandom[SeedRandom[567]; ArrayPlot[ CellularAutomaton[{4177065992, 2, List /@ #}, RandomChoice[{.6, .4} -> {1, 0}, 300], 100], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange, ImageSize -> 300]], Style[#, 11]] & /@ {{-3, -1, 0, 1, 3}, {-5, -1, 0, 1, 5}, {-3, -1, 0, 1, 5}, {-3, -1, 0, 2, 4}}, 2]] |
Here we’ve only discussed cellular automata with two possible colors for each cell. We could also consider rules that involve other “helper” colors that either disappear before the final state is reached, or define additional consensus states.
But Does It Always Work?
We’ve seen that there are 1D cellular automata that—at least in the examples we’ve looked at—achieve “majority consensus”. But given a particular rule, will it always reach consensus, or are there exceptions?
As a first way to get a well-defined version of that question, we can consider finite cellular automata, say with a total of n cells, and cyclic boundary conditions. There are a total of 2n possible configurations in this case, and we can represent all possible paths of evolution of the cellular automaton using a state transition graph.
Here’s the graph for the GKL rule we discussed above, for the case n = 5. Each node in the graph is colored according to whether its “red-cell fraction” is above or below . And what we see in this case is “perfect density classification” or “perfect consensus”, with all states correctly leading to all-red or all-yellow states:
✕
With[{n = 5}, Graph[# -> CellularAutomaton[{339789091192587366278221041213531750560, 2, 3}][#] & /@ Tuples[{1, 0}, n], VertexStyle -> (# -> If[Mean[#] > 1/2, Hue[0.98, 1, 0.8200000000000001], Hue[ 0.15, 0.72, 1]] & /@ Tuples[{1, 0}, n]), GraphLayout -> {"VertexLayout" -> "LayeredDigraphEmbedding", "PackingLayout" -> "LayeredLeft"}, EdgeStyle -> \!\(\* TagBox[ StyleBox[ InterpretationBox[ RowBox[{"CloudGet", "[", "\"\<http://wolfr.am/VtlQl86f\>\"", "]"}], Hue[0.75, 0, 0.35], Editable->False, Selectable->False], ShowSpecialCharacters->False, ShowStringCharacters->True, NumberMarks->True], FullForm]\)]] |
But as soon as we look, for example, at n = 7, we immediately see a problem:
✕
With[{n = 7}, Graph[# -> CellularAutomaton[{339789091192587366278221041213531750560, 2, 3}][#] & /@ Tuples[{1, 0}, n], VertexStyle -> (# -> If[Mean[#] > 1/2, Hue[0.98, 1, 0.8200000000000001], Hue[ 0.15, 0.72, 1]] & /@ Tuples[{1, 0}, n]), VertexSize -> .4, GraphLayout -> {"VertexLayout" -> "LayeredDigraphEmbedding", "PackingLayout" -> "Layered"}, EdgeStyle -> \!\(\* TagBox[ StyleBox[ InterpretationBox[ RowBox[{"CloudGet", "[", "\"\<http://wolfr.am/VtlQl86f\>\"", "]"}], Hue[0.75, 0, 0.35], Editable->False, Selectable->False], ShowSpecialCharacters->False, ShowStringCharacters->True, NumberMarks->True], FullForm]\)]] |
The states
✕
ArrayPlot[ CellularAutomaton[{FromDigits[ Tuples[{1, 0}, 7] /. {l3_, _, l1_, c_, r1_, _, r3_} :> If[If[c == 0, r1 + r3, l1 + l3] + c >= 2, 1, 0], 2], 2, 3}, #, 4], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False, Mesh -> True, MeshStyle -> Orange, ImageSize -> Tiny] & /@ {{0, 0, 1, 0, 0, 1, 1}, {0, 0, 1, 1, 0, 1, 1}} |
and their cyclic variations “get stuck” and do not achieve consensus. At size 11 there’s another issue: now a few states that should have achieved “consensus 1” actually go to “consensus 0”:
✕
With[{size11 = Graph[# -> CellularAutomaton[{339789091192587366278221041213531750560, 2, 3}][#] & /@ Tuples[{1, 0}, 11], VertexStyle -> (# -> If[Mean[#] > 1/2, Hue[0.98, 1, 0.8200000000000001], Hue[ 0.15, 0.72, 1]] & /@ Tuples[{1, 0}, 11]), VertexSize -> .4, EdgeStyle -> \!\(\* TagBox[ StyleBox[ InterpretationBox[ RowBox[{"CloudGet", "[", "\"\<http://wolfr.am/VtlQl86f\>\"", "]"}], Hue[0.75, 0, 0.35], Editable->False, Selectable->False], ShowSpecialCharacters->False, ShowStringCharacters->True, NumberMarks->True], FullForm]\)]}, Grid[{{Show[Graph[# , AspectRatio -> 1/3], ImageSize -> {300, Automatic}] &[ WeaklyConnectedGraphComponents[size11][[1]]], With[{stuck = Catenate[ EdgeList /@ Drop[WeaklyConnectedGraphComponents[size11], 2]]}, Show[Graph[stuck, VertexStyle -> (# -> If[Mean[#] > 1/2, Hue[0.98, 1, 0.8200000000000001], Hue[ 0.15, 0.72, 1]] & /@ (First /@ stuck)), EdgeStyle -> \!\(\* TagBox[ StyleBox[ InterpretationBox[ RowBox[{"CloudGet", "[", "\"\<http://wolfr.am/VtlQl86f\>\"", "]"}], Hue[0.75, 0, 0.35], Editable->False, Selectable->False], ShowSpecialCharacters->False, ShowStringCharacters->True, NumberMarks->True], FullForm]\), GraphLayout -> {"VertexLayout" -> "LayeredDigraphEmbedding", "PackingLayout" -> "NestedGrid"}], ImageSize -> {Automatic, 200}]]}, {Show[ Graph[# , AspectRatio -> 1/3], ImageSize -> {300, Automatic}] &[ WeaklyConnectedGraphComponents[size11][[2]]], SpanFromAbove}}, Alignment -> {Center, Center}]] |
The states that “get to the wrong consensus” here all turn out to be cyclic variations of the following
✕
ArrayPlot[ CellularAutomaton[{FromDigits[ Tuples[{1, 0}, 7] /. {l3_, _, l1_, c_, r1_, _, r3_} :> If[If[c == 0, r1 + r3, l1 + l3] + c >= 2, 1, 0], 2], 2, 3}, #, 7], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False, Mesh -> True, MeshStyle -> Orange, ImageSize -> Tiny] & /@ {{1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1}, {0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0}} |
where in the first case there are 6 cells and 5 , yet the final state is all , and in the second case it’s the other way around.
And it turns out that there’s actually a general problem: one can prove that there’s no rule that can perfectly achieve “majority consensus” on a finite array with cyclic boundary conditions.
What about on an infinite array? Here it’s possible to achieve “perfect majority consensus” for all but a set of “special initial conditions” with measure 0. An example of such a “special initial condition” is an infinite repetition of either of the two blocks shown above. These initial conditions—instead of going to consensus—will just remain fixed with time.
If initial conditions are generated “at random”, with the value of each cell being chosen according to certain fixed probabilities, then there’s effectively zero probability of getting one of the “exception” initial conditions. And even though the “tapers” might be arbitrarily long, there’s no chance of not eventually reaching a consensus state.
But this conclusion depends on the idea that initial conditions are really generated “at random”. If, for example, they were generated by a definite program, then though the initial conditions might seem “statistically random” with respect to certain tests, it doesn’t mean that they won’t give special weight to the “exceptional” initial conditions.
Beyond One Dimension
In one dimension one can explain the fact that certain configurations “get stuck” and don’t achieve consensus by saying that in 1D effects can’t “get around each other”. But in 2D there is no such constraint.
So then what about the “pure 2D majority rule” (totalistic code 56):
✕
RulePlot[CellularAutomaton[<|"Dimension" -> 2, "Neighborhood" -> 5, "TotalisticCode" -> 56|>], ColorFunction -> (Blend[{RGBColor@Hue[0.15, 0.72, 1], RGBColor@Hue[0.98, 1, 0.8200000000000001]}, #] &), MeshStyle -> Orange] |
Starting say from 30% 1s we again see that things get stuck:
✕
BlockRandom[SeedRandom[23424]; ArrayPlot[#, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, ImageSize -> 120, Frame -> False, Mesh -> True, MeshStyle -> Orange] & /@ CellularAutomaton[<|"Dimension" -> 2, "Neighborhood" -> 5, "TotalisticCode" -> 56|>, RandomChoice[{.3, .7} -> {1, 0}, {30, 30}], {{0, 4}, All}]] |
Here is the corresponding evolution shown in 3D, with time going down:
✕
BlockRandom[SeedRandom[23424]; ArrayPlot3D[#, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange] &@ CellularAutomaton[<|"Dimension" -> 2, "Neighborhood" -> 5, "TotalisticCode" -> 56|>, RandomChoice[{.3, .7} -> {1, 0}, {30, 30}], {{0, 10}, All}]] |
But here is another rule (9-neighbor totalistic code 976):
✕
GraphicsGrid[ Partition[ BlockRandom[SeedRandom[23424]; ArrayPlot[#, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, ImageSize -> 80, Frame -> False] & /@ (CellularAutomaton[<|"Dimension" -> 2, "Neighborhood" -> 9, "TotalisticCode" -> 976|>, RandomChoice[{.45, .55} -> {1, 0}, {30, 30}], {{0, 17}, All}])], 7]] |
And now what we see is that in this case blob-like domains of the “minority color” get left over, but gradually get smaller. We can see the phenomenon in 3D:
✕
BlockRandom[SeedRandom[23424]; ArrayPlot3D[#, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}] &@(CellularAutomaton[<| "Dimension" -> 2, "Neighborhood" -> 9, "TotalisticCode" -> 976|>, RandomChoice[{.45, .55} -> {1, 0}, {50, 50}], {{0, 40}, All}])] |
Looking at a spacetime slice in the center, and letting more distant cells “recede into the fog”, we see what looks like “diffusive” behavior, with domain walls in effect executing random walks that eventually annihilate:
✕
BlockRandom[SeedRandom[23424]; ArrayPlot[ Mean /@ Transpose[ MapIndexed[#1*(1.6^-Last[#2]) &, CellularAutomaton[<|"Dimension" -> 2, "TotalisticCode" -> 976, "Neighborhood" -> 9|>, RandomChoice[{.45, .55} -> {1, 0}, {220, 40}], 80], {-1}], 2 <-> 3], ColorFunction -> (Blend[{RGBColor@Hue[0.15, 0.72, 1], RGBColor@Hue[0.98, 1, 0.8200000000000001]}, #] &), Frame -> False]] |
The rule we just saw is close to the majority rule on a 9-cell 3×3 region, except for totals 4 and 5, which are taken to give 1 and 0 rather than 0 and 1. If we use the pure majority rule on the 3×3 region it gets stuck:
✕
GraphicsGrid[ Partition[ BlockRandom[SeedRandom[23424]; ArrayPlot[#, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, ImageSize -> 80, Frame -> False] & /@ (CellularAutomaton[<|"Dimension" -> 2, "Neighborhood" -> 9, "TotalisticCode" -> 992|>, RandomChoice[{.45, .55} -> {1, 0}, {30, 30}], {{0, 8}, All}])], 7]] |
But it turns out to be straightforward to find 2D majority rules that do not get stuck. In fact, basically any majority rule that samples cells in an asymmetric way will work.
As an example, consider a rule that samples the following cells in each 3×3 neighborhood:
✕
majplot[offsets_] := ArrayPlot[ Reverse[Transpose[SparseArray[(2 + offsets) -> 1, {3, 3}]]], Mesh -> True, ImageSize -> 40] majplot[{{0, 1}, {1, 0}, {0, 0}}] |
Here is the 3D evolution of this rule starting from 45% 1s:
✕
BlockRandom[SeedRandom[23424]; ArrayPlot3D[#, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[ 0.98, 1, 0.8200000000000001]}] &@(CellularAutomaton[{{{_, a_, _}, {_, b_, c_}, {_, _, _}} :> If[a + b + c >= 2, 1, 0]}, RandomChoice[{.45, .55} -> {1, 0}, {50, 50}], {{0, 80}, All}])] |
And here is what a spacetime slice looks like:
✕
BlockRandom[SeedRandom[23424]; ArrayPlot[ Mean /@ Transpose[ MapIndexed[#1*(1.6^-Last[#2]) &, CellularAutomaton[{{{_, a_, _}, {_, b_, c_}, {_, _, _}} :> If[a + b + c >= 2, 1, 0]}, RandomChoice[{.45, .55} -> {1, 0}, {220, 40}], 60], {-1}], 2 <-> 3], ColorFunction -> (Blend[{RGBColor@Hue[0.15, 0.72, 1], RGBColor@Hue[0.98, 1, 0.8200000000000001]}, #] &), Frame -> False]] |
The behavior as a function of the initial density shows a clear transition at 50%:
✕
Row[ParallelTable[ BlockRandom[SeedRandom[23424]; Labeled[ArrayPlot[ Mean /@ Transpose[ MapIndexed[#1*(1.6^-Last[#2]) &, CellularAutomaton[{{{_, a_, _}, {_, b_, c_}, {_, _, _}} :> If[a + b + c >= 2, 1, 0]}, RandomChoice[{p, 1 - p} -> {1, 0}, {60, 40}], 60], {-1}], 2 <-> 3], ImageSize -> 72, ColorFunction -> (Blend[{RGBColor@Hue[0.15, 0.72, 1], RGBColor@Hue[0.98, 1, 0.8200000000000001]}, #] &), Frame -> False], Style[PercentForm[p], 11]]], {p, .3, .7, .05}]] |
Here are results for different samplings of cells in the 3×3 neighborhood; all successfully achieve consensus:
✕
MajorityRule[offsets_] := With[{n = Length[offsets]}, {FromDigits[ If[# > n/2, 1, 0] & /@ Reverse[Range[0, n]], 2], {2, 1}, offsets}] majrow[oo_] := Row[BlockRandom[ SeedRandom[23424]; {majplot[oo], ArrayPlot3D[#, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, ImageSize -> 220] &@(CellularAutomaton[MajorityRule[oo], RandomChoice[{.45, .55} -> {1, 0}, {50, 50}], {{0, 60}, All}]), ArrayPlot[ Mean /@ Transpose[ MapIndexed[#1*(1.6^-Last[#2]) &, CellularAutomaton[MajorityRule[oo], RandomChoice[{.45, .55} -> {1, 0}, {100, 60}], 60], {-1}], 2 <-> 3], ColorFunction -> (Blend[{RGBColor@Hue[0.15, 0.72, 1], RGBColor@Hue[0.98, 1, 0.8200000000000001]}, #] &), Frame -> False, ImageSize -> 300]}], Spacer[25]] majrow[{{1, -1}, {1, 1}, {0, 0}}] |
✕
majrow[{{0, -1}, {1, 1}, {0, 0}}] |
✕
majrow[{{0, -1}, {1, 1}, {-1, 0}}] |
✕
majrow[{{0, 1}, {-1, 0}, {1, 1}, {1, 0}, {0, -1}}] |
With our original 5-cell “symmetrical” neighborhood we can get very similar behavior by setting things up like the 1D GKL rule:
✕
{{{_, a_, _}, {b_, c_, d_}, { _, e_, _}} :> If[If[c == 0, a + b, d + e] + c >= 2, 1, 0]} |
✕
{BlockRandom[SeedRandom[23424]; ArrayPlot3D[#, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[ 0.98, 1, 0.8200000000000001]}] &@(CellularAutomaton[{{{_, a_, _}, {b_, c_, d_}, { _, e_, _}} :> If[If[c == 0, a + b, d + e] + c >= 2, 1, 0]}, RandomChoice[{.45, .55} -> {1, 0}, {50, 50}], {{0, 80}, All}])], BlockRandom[SeedRandom[23424]; ArrayPlot[ Mean /@ Transpose[ MapIndexed[#1*(1.6^-Last[#2]) &, CellularAutomaton[{{{_, a_, _}, {b_, c_, d_}, { _, e_, _}} :> If[If[c == 0, a + b, d + e] + c >= 2, 1, 0]}, RandomChoice[{.45, .55} -> {1, 0}, {100, 40}], 60], {-1}], 2 <-> 3], ColorFunction -> (Blend[{RGBColor@Hue[0.15, 0.72, 1], RGBColor@Hue[0.98, 1, 0.8200000000000001]}, #] &), Frame -> False]]} |
Cellular Automata with Noise
So far we’ve assumed that once it’s started, the evolution of the cellular automaton is entirely deterministic. But what if there’s some “noise” in the evolution—say if the values of cells are randomly flipped with some probability? Here’s what happens with the simple majority rule in 1D in this case:
✕
BlockRandom[SeedRandom[34646]; ArrayPlot[ NestList[MapAt[1 - # &, CellularAutomaton[232][#], List /@ RandomInteger[{1, 400}, 5]] &, RandomChoice[{.4, .6} -> {1, 0}, 400], 100], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False]] |
What about the GKL rule? At low levels of noise the rule will typically “fight it off” and still achieve consensus:
✕
BlockRandom[SeedRandom[32546]; ArrayPlot[ NestList[MapAt[1 - # &, CellularAutomaton[{FromDigits[ Tuples[{1, 0}, 7] /. {l3_, _, l1_, c_, r1_, _, r3_} :> If[If[c == 0, r1 + r3, l1 + l3] + c >= 2, 1, 0], 2], 2, 3}][#], List /@ RandomInteger[{1, 400}, 5]] &, RandomChoice[{.4, .6} -> {1, 0}, 400], 120], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False]] |
But eventually the level of noise becomes too great, and consensus is typically lost:
✕
BlockRandom[SeedRandom[32546]; ArrayPlot[ NestList[MapAt[1 - # &, CellularAutomaton[{FromDigits[ Tuples[{1, 0}, 7] /. {l3_, _, l1_, c_, r1_, _, r3_} :> If[If[c == 0, r1 + r3, l1 + l3] + c >= 2, 1, 0], 2], 2, 3}][#], List /@ RandomInteger[{1, 400}, 30]] &, RandomChoice[{.4, .6} -> {1, 0}, 400], 150], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False]] |
In general, the presence of “noise” turns our system from an ordinary cellular automaton into a probabilistic cellular automaton. (And this, in turn, is equivalent to what’s sometimes called directed percolation, or to a spin system that’s taken to evolve in time with random updates according to rules with certain weightings. It’s also related to what’s sometimes been called an “interacting particle system”—in which for example boundaries of regions follow something like an array of random walks, that annihilate when they meet. )
Let’s talk in a bit more detail about the overall behavior of the GKL rule. When there’s no noise, it shows a sharp transition from final state 0 to final state 1 when the initial density goes from below 0.5 to above 0.5. But what happens when we add noise? We can summarize the result by a classic physics-style phase diagram:
✕
(*res2=With[{length=500,steps=1000}, BlockRandom[SeedRandom[625]; ParallelTable[Mean[Nest[MapAt[1-#&,CellularAutomaton[{\ 339789091192587366278221041213531750560,2,3}][#],List/@RandomInteger[{\ 1,length},Floor[length*\[Epsilon]]]]&,RandomChoice[{p,1-p}\[Rule]{1,0}\ ,length],steps]],{p, 0, 1,.001}, {\[Epsilon], 0, 0.15,.001}]]];*) res2 = Import[ "https://www.wolframcloud.com/obj/sw-writings/DistributedConsensus/\ Data/gklnoise-01.wxf"]; ListDensityPlot[res2, DataRange -> {{ 0, 0.15}, { 0, 1}}, ColorFunction -> (Blend[{RGBColor[1., 0.9279999999999999, 0.28], RGBColor[0.8200000000000001, 0., 0.0984000000000001]}, #] &), AspectRatio -> .7, FrameLabel -> {"noise level", "initial density"}] |
This diagram shows the final density produced by the rule as a function of the initial density and the noise level. At zero noise level, there’s a fairly sharp transition as a function of initial density. (It’s not perfectly sharp because this diagram was generated by sampling a finite number of initial conditions in a finite region.) And as the noise level increases, the sharp transition seems to survive for a while—until eventually a critical noise level is reached at which it disappears.
Is there a rigorous way to analyze what’s going on? Well, not yet. And in fact for a long time it was thought that in the presence of noise any 1D system like this would necessarily be ergodic, in the sense that it would eventually visit all possible states, and certainly not evolve from different initial densities to different final states.
But in the 1980s a complicated cellular automaton was constructed that it was possible to prove would not show such behavior. The system was put together for the purpose of “doing reliable computation even in the presence of noise” and was set up using rather elaborate software-engineering-like methodology. But ultimately it was just a 1D cellular automaton, albeit with an astronomically complicated rule. And the crucial point was that up to some nonzero level of noise, the system could reliably perform a computation—such as achieving majority consensus.
But does one really need a system with such complicated underlying rules to do this? Undoubtedly not. And the situation reminds me of what happened with the problem of ordinary computation universality in cellular automata. Back in the 1950s it seemed one could achieve this with a very complicated setup, constructed in an engineering-like way. But now we know that actually even one of the very simplest conceivable 1D cellular automata—rule 110—is already computation universal. And in fact the Principle of Computational Equivalence implies that whenever we see behavior that is not obviously simple, we can expect computation universality.
Of course, it doesn’t seem like we should need to have computation universality to get distributed consensus—though the Principle of Computational Equivalence suggests that computation universality is “cheap” so might in effect “come along for free” with rules that have other necessary properties. (And by the way, this isn’t a trivial issue, because when systems are capable of universal computation there’s the potential for them to “do something one couldn’t predict”, including, for example, break out of some computer security constraint one thinks one’s defined.)
But knowing that there’s a very complicated cellular automaton that achieves distributed consensus even in the presence of noise makes one wonder what the simplest cellular automaton which can do this might be. And based on my previous experience, I would expect it’ll be very simple—like the GKL rule—though it may be very difficult to prove this.
It might be useful to make a few remarks about the whole issue of “noise”. In a sense when one says there’s “noise” in a system one’s saying that the system is “open”, and there’s something coming from “outside” it that one can’t predict. But as an “approximation” one can imagine just having some pseudorandom generator of noise—like the rule 30 cellular automaton. And then one once again has a “closed” system, to which one can immediately apply thinking based for example on the Principle of Computational Equivalence.
But what about “truly unpredictable noise”? To say that this is present is to say that there are different paths of history that the system could follow, and one doesn’t know which one will be followed in any particular case. Informed by our Physics Project, we can represent these possibilities by defining a multiway graph, in which there’s a branch whenever two different states are generated, depending on the noise.
But in addition to branches, there can also be merges in the multiway graph. And in the rather trivial case of a cellular automaton with the identity rule, allowing every possible individual cell to be flipped by noise, we get the multiway graph:
✕
getStateGraphics[state_] := Framed[ Style[ ArrayPlot[{state}, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Mesh -> True, MeshStyle -> Orange], Hue[0.62, 1, 0.48]], Background -> Directive[Opacity[0.2], Hue[0.62, 0.45, 0.87]], FrameMargins -> {{2, 2}, {0, 0}}, RoundingRadius -> 0, FrameStyle -> Directive[Opacity[0.5], Hue[0.62, 0.52, 0.82]]]; getStateRenderingFunction[] := Inset[getStateGraphics[ToExpression[#2]], #1, Center, {First[#3], Automatic}] &; flipbits[list_] := Table[list -> MapAt[1 - # &, list, i], {i, Length[list]}]; SimpleGraph[ Flatten[ NestList[Flatten[flipbits /@ (Last /@ #)] &, flipbits[{0, 0, 0}], 5]], VertexShapeFunction -> getStateRenderingFunction[], VertexSize -> 1, EdgeStyle -> Hue[0.75, 0, 0.35], PerformanceGoal -> "Quality"] |
Here’s what happens if we apply the majority cellular automata rule (rule 232) after each “noise flip” (and go a total of just 2 steps):
✕
getStateGraphics[state_] := Framed[ Style[ ArrayPlot[{state}, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Mesh -> True, MeshStyle -> Orange], Hue[0.62, 1, 0.48]], Background -> Directive[Opacity[0.2], Hue[0.62, 0.45, 0.87]], FrameMargins -> {{2, 2}, {0, 0}}, RoundingRadius -> 0, FrameStyle -> Directive[Opacity[0.5], Hue[0.62, 0.52, 0.82]]]; getStateRenderingFunction[] := Inset[getStateGraphics[ToExpression[#2]], #1, Center, {First[#3], Automatic}] &; flipbitsCA[ru_, list_] := Table[list -> ru[MapAt[1 - # &, list, i]], {i, Length[list]}] SimpleGraph[ With[{g = Graph[ Flatten[ NestList[ Flatten[ flipbitsCA[CellularAutomaton[232], #] & /@ (Last /@ #)] &, flipbitsCA[CellularAutomaton[232], {0, 1, 1, 1, 0}], 3]]]}, Graph[g, VertexShapeFunction -> getStateRenderingFunction[], AspectRatio -> 1/2, VertexSize -> 1.6, EdgeStyle -> Hue[0.75, 0, 0.35], PerformanceGoal -> "Quality"]]] |
Going more steps, with thicker edges representing more updating events connecting the same states, we get:
✕
getStateGraphics[state_] := Framed[ Style[ ArrayPlot[{state}, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Mesh -> True, MeshStyle -> Orange], Hue[0.62, 1, 0.48]], Background -> Directive[Opacity[0.2], Hue[0.62, 0.45, 0.87]], FrameMargins -> {{2, 2}, {0, 0}}, RoundingRadius -> 0, FrameStyle -> Directive[Opacity[0.5], Hue[0.62, 0.52, 0.82]]]; getStateRenderingFunction[] := Inset[getStateGraphics[ToExpression[#2]], #1, Center, {First[#3], Automatic}] &; flipbitsCA[ru_, list_] := Table[list -> ru[MapAt[1 - # &, list, i]], {i, Length[list]}] With[{g = Graph[ Flatten[ NestList[ Flatten[ flipbitsCA[CellularAutomaton[232], #] & /@ (Last /@ #)] &, flipbitsCA[CellularAutomaton[232], {0, 1, 1, 1, 0}], 4]]]}, SimpleGraph[g, VertexShapeFunction -> getStateRenderingFunction[], VertexSize -> 1.25, PerformanceGoal -> "Quality", EdgeStyle -> Thread[ EdgeList[ SimpleGraph[ g]] -> (Directive[Hue[0.75, 0, 0.35], Thickness[1.5*Counts[EdgeList[g]][#]/Length[EdgeList[g]]], Arrowheads[ 7.5*Counts[EdgeList[g]][#]/Length[EdgeList[g]]]] & /@ EdgeList[SimpleGraph[g]])]]] |
There are several subtle limits to be taken. The size of the cellular automaton is being taken to infinity. The number of steps is also being taken to infinity (though slower). And by saying that there is only a certain “density of noise” we’re effectively taking limits on the relative weightings of edges.
To have a system which achieves consensus even in the presence of noise, only particular attractors must survive in these limits. But quite what kind of underlying rule is necessary for this we don’t know—though my guess is that it will ultimately be surprisingly simple.
Will computation universality “come along for the ride”? I don’t know, but I wouldn’t be surprised if it did. Though it’s worth understanding that the definition of computation universality in a multiway system like this is somewhat subtle. (I recently discussed it in the context of multiway Turing machines, but there are still more issues when one’s interested in probabilities and “probabilistic weightings” of different paths.)
“Purposeful Attacks” on a Cellular Automaton
We’ve just talked about the effects of “random noise” on consensus in a cellular automaton. But what about “noise” (or “errors”) that are “purposefully introduced”? Is there a pattern of some potentially small number of errors that will, for example, flip the consensus result?
One version of this question—reminiscent of adversarial examples in neural networks—is just to ask what changes need to be made to an initial condition to “flip its result”. Or, put another way: let’s say one has a system (like the GKL rule) that basically achieves correct consensus for almost all randomly chosen initial conditions. Now we ask the question of whether there is a systematic way to tweak a given randomly chosen initial condition to make it “lead to the wrong answer”. (One can think of this as a bit like asking whether one can find a nonce that will make a cryptographic hash come out in a particular way.)
Needless to say, there are many subtleties to this question. What do we mean by “random initial conditions”? Presumably a periodic state wouldn’t qualify. What kinds of “tweaks” can we make?
Something that might conceivably happen is that there’s a certain behavior with “ordinary” initial conditions, but there’s some special “seed” that—if it occurs—will produce unbounded (“tumor-style”) growth that eventually takes over the system, as in this simple example from rule 122:
✕
BlockRandom[SeedRandom[244234]; ArrayPlot[ CellularAutomaton[122, ReplacePart[Append[Riffle[RandomInteger[1, 101], 0], 0], 140 -> 1], 40], Frame -> False]] |
If instead of just “attacking” the initial conditions one allows the possibility of, say, changing the value of a particular cell on every step, it’s easy to end up, for example, with “immovable lumps” that in effect prevent “full consensus”:
✕
BlockRandom[SeedRandom[3257]; ArrayPlot[ NestList[MapAt[RandomChoice[{0, 1} -> {# &, 1 - # &}], CellularAutomaton[{339789091192587366278221041213531750560, 2, 3}][#], List /@ Range[195, 205]] &, RandomChoice[{.4, .6} -> {1, 0}, 400], 120], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> False]] |
But what if one considers making changes at a small number of places in the ongoing evolution—say in effect adding a little “intelligent noise” at locations carefully computed from the actual pattern of evolution? Will the system always be able to “heal itself” from such “Byzantine tampering”, in effect “correcting few-bit errors”? Or is there some particular “vulnerability” that can be exploited to “corrupt” the final results with just a few carefully chosen changes?
One can think of the two consensus final states as being attractors, whose basins of attraction include all initial conditions above or below density . Alternatively, one can think of the cellular automaton as “solving the classification problem” of “recognizing the initial density”. And perhaps there is some way to extend the cellular automaton to a neural net with continuous weights, and then use machine learning methods to iteratively find minimal places where weights can be changed.
Graph Cellular Automata
In an ordinary cellular automaton, values are assigned to cells laid out in a definite grid. But as a generalization one can allow the cells to lie at the nodes of a graph—and then to take the neighbors on the graph to define the neighbors to be used in the rule:
✕
RandomGraph[{20, 40}, EdgeStyle -> Gray, VertexStyle -> Table[i -> (RandomInteger[] /. {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}), {i, 20}], VertexSize -> .5] |
There is one immediate issue here. In the basic definition of a standard cellular automaton, the rule “takes its arguments” in a definite order. But if one’s dealing with an ordinary graph (as opposed to, for example, an ordered hypergraph), all one knows is what nodes are connected to a given node—with no immediate ordering defined.
And this implies constraints on the type of cellular automaton rule we can use. One can think of setting up a “geodesic ball” around each node in the graph. Successive “shells” contain nodes that are successive graph distances away from a given node. But the cellular automaton rule can’t distinguish which “position” a given cell is at within a particular shell; all it can do is count the total number of cells in each shell that have a given value.
If the graph is vertex transitive, so that the graph structure around every node in the graph is the same (as for a Cayley graph), then the cellular automaton rule can basically contain a fixed table of results that depend only on the number of cells of each value in each shell. But for a general graph the rule for the cellular automaton must allow for arbitrary numbers of cells in each shell.
And one case where this happens to be straightforward to do is for the simple majority rule. So here’s an example of this rule applied to “geodesic shells of radius 1” in the graph above:
✕
SynchronousStepNewColors[dependencies_, colors_] := Flatten[ Map[With[{neighbors = Sort[Counts[Part[colors, Last[#]]], Greater]}, If[DuplicateFreeQ[Values[neighbors]], First[Keys[neighbors]], colors[[First[#]]]]] &, dependencies]] GraphMajorityCA[graph0_, p_, steps_, radius_ : 1] := BlockRandom[SeedRandom[14]; With[{graph = IndexGraph[graph0]}, With[{init = Association[# -> RandomChoice[{1 - p, p} -> {1, 0}] & /@ VertexList[graph]]}, Module[{dependencies}, dependencies = Table[ n -> VertexOutComponent[graph, VertexList[graph][[n]], radius], {n, VertexCount[graph]}]; Graph[EdgeList[graph], VertexStyle -> MapThread[ Rule[#1, Switch[#2, 0, Hue[0.15, 0.72, 1], 1, Hue[ 0.98, 1, 0.8200000000000001]]] &, {Keys[init], #}], EdgeStyle -> Gray, VertexSize -> .5] & /@ NestList[SynchronousStepNewColors[dependencies, #] &, Values[init], steps] ]]]] Rotate[#, 90 Degree] & /@ (Graph[#, ImageSize -> 190] & /@ GraphMajorityCA[\!\(\* GraphicsBox[ NamespaceBox["NetworkGraphics", DynamicModuleBox[{Typeset`graph = HoldComplete[ Graph[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}, {Null, SparseArray[ Automatic, {20, 20}, 0, { 1, {{0, 2, 5, 7, 9, 13, 20, 25, 29, 33, 36, 41, 43, 46, 48, 54, 59, 63, 68, 72, 80}, {{5}, {7}, {11}, {16}, { 18}, {11}, {13}, {16}, {18}, {1}, {6}, {9}, {20}, { 5}, {13}, {15}, {16}, {17}, {19}, {20}, {1}, {9}, { 13}, {15}, {16}, {10}, {15}, {19}, {20}, {5}, {7}, { 12}, {20}, {8}, {15}, {20}, {2}, {3}, {16}, {17}, { 20}, {9}, {19}, {3}, {6}, {7}, {17}, {18}, {6}, {7}, { 8}, {10}, {18}, {20}, {2}, {4}, {6}, {7}, {11}, {6}, { 11}, {14}, {18}, {2}, {4}, {14}, {15}, {17}, {6}, { 8}, {12}, {20}, {5}, {6}, {8}, {9}, {10}, {11}, {15}, { 19}}}, Pattern}]}, {EdgeStyle -> { GrayLevel[0.5]}, VertexSize -> {0.5}, VertexStyle -> { 18 -> Hue[0.98, 1, 0.8200000000000001], 6 -> Hue[0.98, 1, 0.8200000000000001], 15 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.15, 0.72, 1], 20 -> Hue[0.15, 0.72, 1], 9 -> Hue[0.98, 1, 0.8200000000000001], 13 -> Hue[0.98, 1, 0.8200000000000001], 2 -> Hue[0.98, 1, 0.8200000000000001], 8 -> Hue[0.15, 0.72, 1], 3 -> Hue[0.98, 1, 0.8200000000000001], 4 -> Hue[0.98, 1, 0.8200000000000001], 11 -> Hue[0.98, 1, 0.8200000000000001], 10 -> Hue[0.15, 0.72, 1], 19 -> Hue[0.98, 1, 0.8200000000000001], 7 -> Hue[0.15, 0.72, 1], 16 -> Hue[0.15, 0.72, 1], 17 -> Hue[0.98, 1, 0.8200000000000001], 14 -> Hue[0.15, 0.72, 1], 12 -> Hue[0.15, 0.72, 1], 5 -> Hue[0.15, 0.72, 1]}}]]}, TagBox[GraphicsGroupBox[GraphicsComplexBox[CompressedData[" 1:eJxTTMoPSmViYGAQAWIQ/f6kR7GgOLuDhRP7AqlYDgefsPSGL9fv2f8Lnlkc mvfBvlZItHLWuS/2DGgg/9jtrhs7ftvvM+ptrezlcCgy9vQT9GBy2Ll97u7Y OCaHo7IP/Cbs+mnfZbVWik2F2SGqOd7o0ar/9t8kP65/vJjL4Wi3ZX5Y6VP7 NZUzj4qe5nFo3Jj1qfrrf/v3vhsYxNawO3AEfFuR0nfZ/tTMg6XzfL7Z82q9 dLwv+cG+ZsK3ia8MhBxkHH6bp6f8sQ9p/u2R+eGffUTSNr4jU1/Ym2z+VXtG 8ZJ9ztZLRw4cZnFg2NDoE27D5JBj4p33avNHe1n24FmPsj7bvxN+fM7e86d9 ixWjlEzhJ/tz3z/kCdxkcEiQU3+SM+u5fcT+3BNHM37bP2tYmmyryOug/He9 3TWdr/a919meTv/D5rCNS/Ajo/gXewA1KJH+ "], { {GrayLevel[0.5], Opacity[0.7], Arrowheads[0.], ArrowBox[{{1, 5}, {1, 7}, {2, 11}, {2, 16}, {2, 18}, {3, 11}, {3, 13}, {4, 16}, {4, 18}, {5, 6}, {5, 9}, {5, 20}, {6, 13}, {6, 15}, {6, 16}, {6, 17}, {6, 19}, {6, 20}, {7, 9}, {7, 13}, {7, 15}, {7, 16}, {8, 10}, {8, 15}, {8, 19}, {8, 20}, {9, 12}, {9, 20}, {10, 15}, {10, 20}, {11, 16}, {11, 17}, {11, 20}, {12, 19}, {14, 17}, {14, 18}, {15, 18}, {15, 20}, {17, 18}, {19, 20}}, 0.09587857253283466]}, {Hue[0.6, 0.2, 0.8], EdgeForm[{GrayLevel[0], Opacity[0.7]}], {Hue[0.15, 0.72, 1], DiskBox[1, 0.09587857253283466]}, {Hue[0.98, 1, 0.8200000000000001], DiskBox[2, 0.09587857253283466]}, {Hue[0.98, 1, 0.8200000000000001], DiskBox[3, 0.09587857253283466]}, {Hue[0.98, 1, 0.8200000000000001], DiskBox[4, 0.09587857253283466]}, {Hue[0.15, 0.72, 1], DiskBox[5, 0.09587857253283466]}, {Hue[0.98, 1, 0.8200000000000001], DiskBox[6, 0.09587857253283466]}, {Hue[0.15, 0.72, 1], DiskBox[7, 0.09587857253283466]}, {Hue[0.15, 0.72, 1], DiskBox[8, 0.09587857253283466]}, {Hue[0.98, 1, 0.8200000000000001], DiskBox[9, 0.09587857253283466]}, {Hue[0.15, 0.72, 1], DiskBox[10, 0.09587857253283466]}, {Hue[0.98, 1, 0.8200000000000001], DiskBox[11, 0.09587857253283466]}, {Hue[0.15, 0.72, 1], DiskBox[12, 0.09587857253283466]}, {Hue[0.98, 1, 0.8200000000000001], DiskBox[13, 0.09587857253283466]}, {Hue[0.15, 0.72, 1], DiskBox[14, 0.09587857253283466]}, {Hue[0.15, 0.72, 1], DiskBox[15, 0.09587857253283466]}, {Hue[0.15, 0.72, 1], DiskBox[16, 0.09587857253283466]}, {Hue[0.98, 1, 0.8200000000000001], DiskBox[17, 0.09587857253283466]}, {Hue[0.98, 1, 0.8200000000000001], DiskBox[18, 0.09587857253283466]}, {Hue[0.98, 1, 0.8200000000000001], DiskBox[19, 0.09587857253283466]}, {Hue[0.15, 0.72, 1], DiskBox[20, 0.09587857253283466]}}}]], MouseAppearanceTag["NetworkGraphics"]], AllowKernelInitialization->False]], DefaultBaseStyle->{ "NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]}, FormatType->TraditionalForm, FrameTicks->None]\), .3, 3]) |
So what globally happens with this rule? For the graph
✕
Graph[ResourceFunction["TorusGraph"][{3, 3}], VertexStyle -> White, VertexSize -> .2, EdgeStyle -> \!\(\* TagBox[ StyleBox[ InterpretationBox[ RowBox[{"CloudGet", "[", "\"\<http://wolfr.am/VtlQl86f\>\"", "]"}], Hue[0.75, 0, 0.35], Editable->False, Selectable->False], ShowSpecialCharacters->False, ShowStringCharacters->True, NumberMarks->True], FullForm]\)] |
here’s what the state transition graph looks like when the rule is applied, whereas above nodes are colored according to which value is in the majority:
✕
SynchronousStepNewColors[dependencies_, colors_] := Flatten[ Map[With[{neighbors = Sort[Counts[Part[colors, Last[#]]], Greater]}, If[DuplicateFreeQ[Values[neighbors]], First[Keys[neighbors]], colors[[First[#]]]]] &, dependencies]] GraphMajorityCASTG[graph0_, radius_ : 1] := With[{graph = IndexGraph[graph0]}, Module[{dependencies}, dependencies = Table[ n -> VertexOutComponent[graph, VertexList[graph][[n]], radius], {n, VertexCount[graph]}]; # -> SynchronousStepNewColors[dependencies, #] & /@ Tuples[{1, 0}, VertexCount[graph]] ]] With[{g = GraphMajorityCASTG[ResourceFunction["TorusGraph"][{3, 3}], 1]}, Graph[g, VertexStyle -> (# -> If[Mean[#] > 1/2, Hue[0.98, 1, 0.8200000000000001], Hue[ 0.15, 0.72, 1]] & /@ VertexList[g]), EdgeStyle -> \!\(\* TagBox[ StyleBox[ InterpretationBox[ ButtonBox[ TooltipBox[ GraphicsBox[{ {GrayLevel[0], RectangleBox[{0, 0}]}, {GrayLevel[0], RectangleBox[{1, -1}]}, {Hue[0.75, 0, 0.35], RectangleBox[{0, -1}, {2, 1}]}}, AspectRatio->1, DefaultBaseStyle->"ColorSwatchGraphics", Frame->True, FrameStyle->Hue[0., 0., 0.23333333333333334`], FrameTicks->None, ImageSize->{Automatic, 12.879}, PlotRangePadding->None], StyleBox[ RowBox[{"Hue", "[", RowBox[{"0.75`", ",", "0", ",", "0.35`"}], "]"}], NumberMarks -> False]], Appearance->None, BaseStyle->{}, BaselinePosition->Baseline, ButtonFunction:>With[{Typeset`box$ = EvaluationBox[]}, If[ Not[ AbsoluteCurrentValue["Deployed"]], SelectionMove[Typeset`box$, All, Expression]; FrontEnd`Private`$ColorSelectorInitialAlpha = 1; FrontEnd`Private`$ColorSelectorInitialColor = Hue[0.75, 0, 0.35]; FrontEnd`Private`$ColorSelectorUseMakeBoxes = True; MathLink`CallFrontEnd[ FrontEnd`AttachCell[Typeset`box$, FrontEndResource["HueColorValueSelector"], {0, {Left, Bottom}}, { Left, Top}, "ClosingActions" -> { "SelectionDeparture", "ParentChanged", "EvaluatorQuit"}]]]], DefaultBaseStyle->{}, Evaluator->Automatic, Method->"Preemptive"], Hue[0.75, 0, 0.35], Editable->False, Selectable->False], ShowSpecialCharacters->False, ShowStringCharacters->True, NumberMarks->True], FullForm]\)]] |
No doubt there are general results that can be proved about the “success rate” for the majority cellular automaton rule on graphs. But experiments tend to suggest that the rule does much better on graphs than it does on regular arrays.
Presumably there are graph-theoretic features of the underlying graph that affect the performance. Higher connectivity presumably helps, not least because it tends to avoid “bridges” where colors can be balanced on “all sides” of a particular node. Lack of symmetry also probably tends to inhibit the appearance of cycles. And in general one can think of the “spreading of consensus” as being at least somewhat like a percolation process.
For ordinary cellular automata, it’s clear what it means to ask about the “infinite-size limit”. But for graphs it’s only immediately clear when one’s dealing with some readily extensible family of graphs (like grids or torus graphs or various Cayley graphs). And for arbitrary “random graphs” the results will probably depend significantly on the graph distribution used.
In our Physics Project we have been concerned with large graphs that can be “grown” according to local rules. We expect such graphs often to show certain “statistical regularities” in the “continuum limit”. In our project, we characterize the structure of these graphs by looking for example at the growth rates of volumes of geodesic balls, and identifying things like dimension and curvature from them. So what will happen if we run a majority rule cellular automaton on a large graph that has certain “geometrical” properties?
Essentially we need to ask what the “continuum limit” of the majority rule cellular automaton is. The grids used in ordinary cellular automata are too special for them to achieve any kind of generic such limit. But on “geometrizable” graphs, it’s more reasonable to expect such a continuum limit.
We can try considering a 1D example. The initial values are then just given by a continuous function of position:
✕
With[{if = (SeedRandom[69774]; Interpolation[RandomReal[{-10, 10}, 10], InterpolationOrder -> 6])}, Plot[if[x], {x, 1, 10}, Filling -> Axis, ColorFunctionScaling -> False, ColorFunction -> (If[#2 > 0, Hue[0.98, 1, 0.8200000000000001], Hue[ 0.15, 0.72, 1]] &), Frame -> True, AspectRatio -> 1/3, FrameTicks -> None]] |
The “consensus result” in this case should be a constant function whose value is effectively the sign of the integral of this function. But what kind of integro-differential-algebraic equation can reproduce the time evolution isn’t clear.
Going back to majority cellular automata on graphs, it’s worth noting that if the edges of the graph can be assigned both positive and negative weights, then the system is effectively like a synchronous version of a neural net. The analog of this on a regular grid (which is structurally like a spin glass) is then known to show various features of computational irreducibility.
Instead of thinking about underlying graphs with weighted edges, we can consider cellular automaton rules that don’t just involve pure nearest-neighbor majority. For example, we could consider rules that have different weights for geodesic shells of different radii (much like the activation-inhibition cellular automata used to model things like biological pigmentation patterns).
But is it really true that only totalistic rules based on geodesic shells can be used for graph cellular automata? To do more than this requires in effect defining “directions” in the graph. But our Physics Project has provided a variety of mechanisms for doing just this—and this in principle for setting up non-totalistic graph cellular automata.
Asynchronous Updating
An important feature of cellular automata is the assumption that all cell values are updated “simultaneously” or “synchronously” in a definite series of steps. But in practical examples of distributed consensus one’s often dealing with values that are instead updated asynchronously. In effect, what one wants is to “break down” the synchronous updating of an ordinary cellular automaton into a sequence of updates of individual cells, with the order of these updates not being specified by any particular rule.
So an obvious first question is: “Does it actually matter in what order these individual updates are done?” And sometimes it doesn’t. Here’s an example. Instead of an ordinary cellular automaton, consider a block cellular automaton in which at each step pairs of values adjacent cells are replaced by new values:
✕
RulePlot[SubstitutionSystem[{{0, 0} -> {0, 0}, {1, 0} -> {0, 1}, {0, 1} -> {0, 1}, {1, 1} -> {1, 1}}], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange] |
For synchronous updating, we might apply these rules in a systematic “brick-like” pattern. But to study asynchronous updating, let’s just apply these rules in random positions at each step. Here are a few examples of what can happen:
✕
BlockRandom[SeedRandom[235234]; With[{i = RandomInteger[1, 30]}, Table[ArrayPlot[ NestList[ First[ Sort[{Flatten[ MapAt[Sort, Partition[#, 2], Union[List /@ RandomInteger[{1, Length[#]/2}, 20]]]], RotateRight[ Flatten[ MapAt[Sort, Partition[RotateLeft[#], 2], Union[ List /@ RandomInteger[{1, Length[#]/2}, 20]]]]]}]] &, i, 63], ImageSize -> {150, Automatic}, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Mesh -> True, MeshStyle -> Orange], 4]]] |
And the notable feature is that even though the specific evolution in each case is different, the final result is always the same—in this case just corresponding to having all sorted before
It doesn’t work this way for all rules, but for this rule, regardless of the intermediate states that are produced, there is always eventual consistency in the final result.
As it turns out, this kind of phenomenon is crucial in our Physics Project. And indeed the generalization that we call “causal invariance” is what leads, for example, to relativistic invariance. But from the formalism of the Physics Project we also get a general approach to asynchronous evolution: trace all possible “update histories” using a multiway graph.
Here is the multiway graph for the simple sorting rule above:
✕
getStateGraphics[state_] := Framed[ Style[ ArrayPlot[{state}, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Mesh -> True, MeshStyle -> Orange], Hue[0.62, 1, 0.48]], Background -> Directive[Opacity[0.2], Hue[0.62, 0.45, 0.87]], FrameMargins -> {{2, 2}, {0, 0}}, RoundingRadius -> 0, FrameStyle -> Directive[Opacity[0.5], Hue[0.62, 0.52, 0.82]]]; getStateRenderingFunction[] := Inset[getStateGraphics[ToExpression[#2]], #1, Center, {First[#3], Automatic}] &; ResourceFunction[ "MultiwaySystem"][{{1, 0} -> {0, 1}}, {{1, 0, 1, 1, 0, 0, 1}}, 8, "StatesGraph", "StateRenderingFunction" -> getStateRenderingFunction[], VertexSize -> 1.75, PerformanceGoal -> "Quality"] |
As expected, all possible update histories eventually converge to the same final state.
So what about the majority rule cellular automaton? It doesn’t always show eventual consistency, as this example shows:
✕
randomOrderCAFunc[ruleRadius_, ruleNumber_, init_, eventCount_, func_] := func[evaluateSingleEvent[ruleRadius, ruleNumber, #] &, init, eventCount]; RandomOrderCA[args___] := randomOrderCAFunc[args, Nest]; RandomOrderCAList[args___] := randomOrderCAFunc[args, NestList]; findLastEvent[eventNumber_, position_, eventsIndex_] := Module[{}, Max[Select[Lookup[eventsIndex, position, {-Infinity}], # < eventNumber &]] ]; getCausalLinks[eventNumber_, position_, eventsIndex_, size_, ruleRadius_] := Module[{}, DeleteCases[ findLastEvent[eventNumber, #, eventsIndex] -> eventNumber & /@ Mod[Range[position - ruleRadius, position + ruleRadius], size, 1], -Infinity -> _] ]; RandomOrderCACausalGraph[ruleRadius_, ruleNumber_, init_, eventCount_, opts___] := Module[{eventsIndex, eventPositions}, eventsIndex = KeySort @ Map[ Last, GroupBy[ Thread[ (eventPositions = Reap[RandomOrderCA[ruleRadius, ruleNumber, init, eventCount]][[2, 1]]) -> Range[eventCount]], First], {2}]; Graph[ Range[eventCount], Catenate[getCausalLinks[#, eventPositions[[#]], eventsIndex, Length[init], ruleRadius] & /@ Range[eventCount]], EdgeStyle -> ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", "EdgeStyle"], VertexStyle -> ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", "VertexStyle"], opts] ] randomInit[size_, onesFraction_] := RandomChoice[{1 - onesFraction, onesFraction} -> {0, 1}, size]; evaluateSingleEvent[ruleRadius_, ruleNumber_, init_] := evaluateEventAtPlace[ruleRadius, ruleNumber, init, Sow[RandomInteger[{1, Length[init]}]]]; evaluateEventAtPlace[ruleRadius_, ruleNumber_, init_, center_] := Module[{input, newCenterValue}, input = cyclicTake[init, Range[center - ruleRadius, center + ruleRadius]]; newCenterValue = CellularAutomaton[{ruleNumber, 2, ruleRadius}, input][[ruleRadius + 1]]; ReplacePart[init, center -> newCenterValue] ]; cyclicTake[list_, indices_] := cyclicPart[list, #] & /@ indices; cyclicPart[list_, index_] := list[[Mod[index, Length[list], 1]]]; getStateGraphics[state_] := Framed[ Style[ ArrayPlot[{state}, ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Mesh -> True, MeshStyle -> Orange], Hue[0.62, 1, 0.48]], Background -> Directive[Opacity[0.2], Hue[0.62, 0.45, 0.87]], FrameMargins -> {{2, 2}, {0, 0}}, RoundingRadius -> 0, FrameStyle -> Directive[Opacity[0.5], Hue[0.62, 0.52, 0.82]]]; getStateRenderingFunction[] := Inset[getStateGraphics[List @@ #2], #1, Center, {First[#3], Automatic}] &; SeedRandom[643767 + 5]; SimpleGraph[ NestGraph[ Table[state @@ evaluateEventAtPlace[1, 232, List @@ #, c], {c, 1, Length[#]}] &, state @@ randomInit[9, 0.7], 20, VertexShapeFunction -> getStateRenderingFunction[], PerformanceGoal -> "Quality", VertexSize -> 1, ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph", "Options"]]] |
So this means that in general it matters in what order asynchronous updates are done, or, in effect, what “path of history” is taken. But to get a sense of typical behavior, we can consider random sequences of updates. Here’s an example of what one gets, doing one update per step:
✕
caEvaluateCompiled = FunctionCompile[ Function[{Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[ position = RandomInteger[{1, Length[state]}]; substate = state[[ Mod[#, Length[state], 1] & /@ Range[position - rad, position + rad]]]; rulePart = Fold[2 #1 + #2 &, 0, substate] + 1; newCellValue = rule[[rulePart]]; state[[position]] = newCellValue; , eventCount]; state ]]]; Should be compiled for all machine targets: caEvaluateCompiled = CompiledCodeFunction[ Association["Signature" -> TypeSpecifier[{ "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64", "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64"} -> "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]]], "Input" -> Compile`Program[{}, Function[{ Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[position = RandomInteger[{1, Length[state]}]; substate = Part[state, Map[Mod[#, Length[state], 1]& , Range[position - rad, position + rad]]]; rulePart = Fold[2 # + #2& , 0, substate] + 1; newCellValue = Part[rule, rulePart]; Part[state, position] = newCellValue; Null, eventCount]; state]]], "ErrorFunction" -> Automatic, "InitializationName" -> "Initialization_667648a7_ecf6_4a9d_97c7_f8cc07f5743e", "ExpressionName" -> "Main_ExprInvocation", "CName" -> "Main_CInvocation", "FunctionName" -> "Main", "SystemID" -> "MacOSX-x86-64", "VersionData" -> {12.3, 0, 0}, "CompiledIR" -> Association["MacOSX-x86-64" -> ByteArray[CompressedData[" 1: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 "]], "Linux-x86-64" -> ByteArray[CompressedData[" 1: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 jHZ0I2GDKAO6wzJm5c3CO9CEgTgTCgm6C3nCnOOQjlyEprMncs1EQIQxOM89 6UCEsKdShGF4hQhX/sDxDdXzMzETBOJuL6tPh2w8NJ1ldnsFmmenHXzQIEHG +CbG6tC5eRtWZB+h3cZ41acLsIDGPcHROYbzjwICLIjYlzk9Hkl43z3BvBwj vaNGekG1XnVzM2uO0GB9kkCy4NUKnumSmHkgynIoYjvifkG95aPbwV/Z2mhg eXCMesmb7pWp+BGCcCFebMlf2EAnl1Kg6/hSUFm0YxeGlYA2rlj8521QYcDF nEegiq450ayK1McnldnjV1VF4Fax4l9qsOkWWIEUvuZUHoj6Vm9c0ZD8vTp+ jtVdS75VXC2v+MBZxJvKVZVx7LTSm15o5/1hKVzEc0NX3VYvyfvhuzNg3o7v qWK7FQSB9yLKdopVquu8HQ+pbl7z8l1BuPGbp4xjSViFN5eserPgOrmHqSmx IxIE9YsoG2761VLqLTGOSAWyaENFNP8s4GAY5eCdkgOzRZgrDTbZQieQz2gk k6csztsYQgFYJ0HWCRy9K6Ml58C6B+g6kZpiXfwidmGDzWm3JbJ1z1mc0aeN 2rmgIotgLihCqGQtUFJ5UUnl8Krur66T/xbLqCQtodCqayWW7CVxtX75K68g iftXNWXi5vwS9JWe978EWD17WGAP8zYKEnJfAB/aSMTOOuGca8bJ3CgIAicI l+PChNm0S97dDMM38NywEGw6VkyLJCWpkEP1OiWGAioOC2z6jXfo8W7Dl5qk 9Nc8FnAPSCNUr5thBEohsgo1OS/jcsi6jHrgD+LZwB8aYMQfA9cr/TFX9VnI 8UCjvxm5BAyLco24KSl0/+qDYC2eugcuyrXO2CjYk3eQxayfTQLLC3nQkiBe asZWxL/FKgr/DtyixHda9V3I8R6jtwzHX7ZwyhkbVGxzQ5ozU0gXnEDF9oYv jntx0qye+Jb0DBvLD8RhyahDPVRRONTbE1BwqN5HibGskkvJU7my48lPpoTI rW8ygBPytiqdsFO5xuSUGKyZZMxFWMbnpMLM3/pxrjjsCbM3mXw115fEBcZW Il1A/WOUef42BbE/F6t+G3qcPdfbBBU/RhW7im6ba0ZS3YnDSrq3wWCvJCEP CtNQK5iVztIA3OaZKpWlp4rdRV+b5whnb8R+T7sEp+fwJnqwKYApgSZK4Ccl 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 ZDS1t/0sIuq/915sXAwCDKkvyvjy8JM8GazsaxKSPSNOVQ+eap2qXK6NLLy0 62bhLuep4U8XrD5szA7HzXVvm+Pl92rTEDDU1YtZJ5GoLG1KpreOVlcltiBV wc9DZxzeYy4Axu7HG18efXKW+PP0FGR8Of5J/X8AtX+YQbb5LXtPrGr4l9ip +vuVf4gPiOo+Ij6X37nG19KQntHvu42v7UF7ZYnG1/5Aj15MNnYqCVeYxOmm KaDSXp68Ghgv7Z8qjbKBUbbpQ9z2F1NPChc5wmREgSf7+k/2DZ8cGqq4OFrx +3gF4PDxSKxC3aP6V4eXXATFxO5dq4DN9J8dDW+RdwboX+q04c99/SPkS4px 0/uJ31MKOqPG5wKDfRj/6QPV2Om00mDHX6dtre6abrB7913du2xqV4fLXUjG A72P29459eRCljUs1xX39OOpikLfeOA5otaBdq8ji8W/gULE8aJeturuk3uG hro+5LRoNKOe92JvxevwW693Vb2OGr86PEmR5UhuZyl329SuiYm58lDWxJ2s jjd2OiMjzBlsWZV2pvoOpBAjF4ix4sLh2Bmx8O+UAqwsUT2PnpaompFEMxEp dQl6g172KgS9IgR2K7LXJWYlGTn/b02YHH3Xj57L+g8kBAwkfe4qyzpWBtXt z7xr9WFcY1FvS1yrQdPqls0R5V+leD9Aq3iHFGnitqmJ1AuYx8j40fjW1vEz reMdU++5AZ6y06zDIx/O9FV30J+KkWtKvXHgnMEDOY/ouFU1LvqTYCkrzxef 7QqTXWpK6JQ6Hpkq6dj8Csqw+3Lyu67LJYaP0UavVCRH9Tl+7qrMOq2qONMu K5z6mLJed/rJfWXL8temO+hi9eXfrZglmZjqs6xZZD8rkJJzZCrIlkqg9n/8 x/AcVuBK3qSDaVPA38s747UZPiHImUDMZs3ML2cCyaZo6R9b+YF63TBvegWx s91rtd0Xr/x9qLo0+aYuMnn3zVFwhoL2toxSnc2Ap/6x63RZD480zc0OVNdB uxAt/723ddetql23hqYqqoaiFPicq8enXqQ86zRAa9WoT2UgDAdia6JOz28d glB7dB7i7u2a+lT1B08kT5yxZyajjK3XIRdwbjWF01Fahqo+5EhFikxZNTBZ vcsNKcl/S96zvAviIgTsrLo4cLZuwKh1YNvvU5uuLvpaEZra66ZAUf4dubxt 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 95quYlkc+H/bqQ28 "]]], "orcInstance" -> 140373448223744, "orcModuleId" -> 1, "targetMachineId" -> 140373447970304], 5481287872, 5481287664, 5481287744, 5481283584, "{\"PackedArray\"[\"Integer64\", TypeFramework`TypeLiteral[1, \ \"Integer64\"]], \"Integer64\", \"PackedArray\"[\"Integer64\", \ TypeFramework`TypeLiteral[1, \"Integer64\"]], \"Integer64\"} -> \"PackedArray\ \"[\"Integer64\", TypeFramework`TypeLiteral[1, \"Integer64\"]]"]; RandomAsynchronousCellularAutomaton[{rn_, 2, r_}, init_, {t_, ct_}] := NestList[ caEvaluateCompiled[Reverse[IntegerDigits[rn, 2, 2^(2 r + 1)]], r, #, ct] &, init, t] BlockRandom[SeedRandom[567]; ArrayPlot[ RandomAsynchronousCellularAutomaton[{232, 2, 1}, RandomChoice[{.7, .3} -> {1, 0}, 400], {100, 1}], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange, Frame -> None]] |
And here’s the corresponding result if we do 20 updates per step:
✕
caEvaluateCompiled = FunctionCompile[ Function[{Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[ position = RandomInteger[{1, Length[state]}]; substate = state[[ Mod[#, Length[state], 1] & /@ Range[position - rad, position + rad]]]; rulePart = Fold[2 #1 + #2 &, 0, substate] + 1; newCellValue = rule[[rulePart]]; state[[position]] = newCellValue; , eventCount]; state ]]]; Should be compiled for all machine targets: caEvaluateCompiled = CompiledCodeFunction[ Association["Signature" -> TypeSpecifier[{ "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64", "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64"} -> "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]]], "Input" -> Compile`Program[{}, Function[{ Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[position = RandomInteger[{1, Length[state]}]; substate = Part[state, Map[Mod[#, Length[state], 1]& , Range[position - rad, position + rad]]]; rulePart = Fold[2 # + #2& , 0, substate] + 1; newCellValue = Part[rule, rulePart]; Part[state, position] = newCellValue; Null, eventCount]; state]]], "ErrorFunction" -> Automatic, "InitializationName" -> "Initialization_667648a7_ecf6_4a9d_97c7_f8cc07f5743e", "ExpressionName" -> "Main_ExprInvocation", "CName" -> "Main_CInvocation", "FunctionName" -> "Main", "SystemID" -> "MacOSX-x86-64", "VersionData" -> {12.3, 0, 0}, "CompiledIR" -> Association["MacOSX-x86-64" -> ByteArray[CompressedData[" 1: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 "]], "Linux-x86-64" -> ByteArray[CompressedData[" 1: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 jHZ0I2GDKAO6wzJm5c3CO9CEgTgTCgm6C3nCnOOQjlyEprMncs1EQIQxOM89 6UCEsKdShGF4hQhX/sDxDdXzMzETBOJuL6tPh2w8NJ1ldnsFmmenHXzQIEHG +CbG6tC5eRtWZB+h3cZ41acLsIDGPcHROYbzjwICLIjYlzk9Hkl43z3BvBwj vaNGekG1XnVzM2uO0GB9kkCy4NUKnumSmHkgynIoYjvifkG95aPbwV/Z2mhg eXCMesmb7pWp+BGCcCFebMlf2EAnl1Kg6/hSUFm0YxeGlYA2rlj8521QYcDF nEegiq450ayK1McnldnjV1VF4Fax4l9qsOkWWIEUvuZUHoj6Vm9c0ZD8vTp+ jtVdS75VXC2v+MBZxJvKVZVx7LTSm15o5/1hKVzEc0NX3VYvyfvhuzNg3o7v qWK7FQSB9yLKdopVquu8HQ+pbl7z8l1BuPGbp4xjSViFN5eserPgOrmHqSmx IxIE9YsoG2761VLqLTGOSAWyaENFNP8s4GAY5eCdkgOzRZgrDTbZQieQz2gk k6csztsYQgFYJ0HWCRy9K6Ml58C6B+g6kZpiXfwidmGDzWm3JbJ1z1mc0aeN 2rmgIotgLihCqGQtUFJ5UUnl8Krur66T/xbLqCQtodCqayWW7CVxtX75K68g iftXNWXi5vwS9JWe978EWD17WGAP8zYKEnJfAB/aSMTOOuGca8bJ3CgIAicI l+PChNm0S97dDMM38NywEGw6VkyLJCWpkEP1OiWGAioOC2z6jXfo8W7Dl5qk 9Nc8FnAPSCNUr5thBEohsgo1OS/jcsi6jHrgD+LZwB8aYMQfA9cr/TFX9VnI 8UCjvxm5BAyLco24KSl0/+qDYC2eugcuyrXO2CjYk3eQxayfTQLLC3nQkiBe asZWxL/FKgr/DtyixHda9V3I8R6jtwzHX7ZwyhkbVGxzQ5ozU0gXnEDF9oYv jntx0qye+Jb0DBvLD8RhyahDPVRRONTbE1BwqN5HibGskkvJU7my48lPpoTI rW8ygBPytiqdsFO5xuSUGKyZZMxFWMbnpMLM3/pxrjjsCbM3mXw115fEBcZW Il1A/WOUef42BbE/F6t+G3qcPdfbBBU/RhW7im6ba0ZS3YnDSrq3wWCvJCEP CtNQK5iVztIA3OaZKpWlp4rdRV+b5whnb8R+T7sEp+fwJnqwKYApgSZK4Ccl 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 ZDS1t/0sIuq/915sXAwCDKkvyvjy8JM8GazsaxKSPSNOVQ+eap2qXK6NLLy0 62bhLuep4U8XrD5szA7HzXVvm+Pl92rTEDDU1YtZJ5GoLG1KpreOVlcltiBV wc9DZxzeYy4Axu7HG18efXKW+PP0FGR8Of5J/X8AtX+YQbb5LXtPrGr4l9ip +vuVf4gPiOo+Ij6X37nG19KQntHvu42v7UF7ZYnG1/5Aj15MNnYqCVeYxOmm KaDSXp68Ghgv7Z8qjbKBUbbpQ9z2F1NPChc5wmREgSf7+k/2DZ8cGqq4OFrx +3gF4PDxSKxC3aP6V4eXXATFxO5dq4DN9J8dDW+RdwboX+q04c99/SPkS4px 0/uJ31MKOqPG5wKDfRj/6QPV2Om00mDHX6dtre6abrB7913du2xqV4fLXUjG A72P29459eRCljUs1xX39OOpikLfeOA5otaBdq8ji8W/gULE8aJeturuk3uG hro+5LRoNKOe92JvxevwW693Vb2OGr86PEmR5UhuZyl329SuiYm58lDWxJ2s jjd2OiMjzBlsWZV2pvoOpBAjF4ix4sLh2Bmx8O+UAqwsUT2PnpaompFEMxEp dQl6g172KgS9IgR2K7LXJWYlGTn/b02YHH3Xj57L+g8kBAwkfe4qyzpWBtXt z7xr9WFcY1FvS1yrQdPqls0R5V+leD9Aq3iHFGnitqmJ1AuYx8j40fjW1vEz reMdU++5AZ6y06zDIx/O9FV30J+KkWtKvXHgnMEDOY/ouFU1LvqTYCkrzxef 7QqTXWpK6JQ6Hpkq6dj8Csqw+3Lyu67LJYaP0UavVCRH9Tl+7qrMOq2qONMu K5z6mLJed/rJfWXL8temO+hi9eXfrZglmZjqs6xZZD8rkJJzZCrIlkqg9n/8 x/AcVuBK3qSDaVPA38s747UZPiHImUDMZs3ML2cCyaZo6R9b+YF63TBvegWx s91rtd0Xr/x9qLo0+aYuMnn3zVFwhoL2toxSnc2Ap/6x63RZD480zc0OVNdB uxAt/723ddetql23hqYqqoaiFPicq8enXqQ86zRAa9WoT2UgDAdia6JOz28d glB7dB7i7u2a+lT1B08kT5yxZyajjK3XIRdwbjWF01Fahqo+5EhFikxZNTBZ vcsNKcl/S96zvAviIgTsrLo4cLZuwKh1YNvvU5uuLvpaEZra66ZAUf4dubxt B/uCRjYlcLMB+9qAwdRAhcM3sk3e92pQhGh1OVZ5NXmycKyzcO+mq3tPFY7T pwbaXcp2IPhfPXmRdvNDzl7Br7iNoka9Iv2u99X3fUGWFvUN6HfdXyVj+QWX PjRaPZrzXRKIa7sqZcmTmYLGmD4QwJPRXutuY6fbEFopROmXjUgnh594Heq/ xKvvHJIWqCCpnD6UUmuliqS7jtcpz9bgTBAB1u3qqIufuBrVEaNCe+pqLgkn VO++ICUr43v1++rSWDcNjmzrHP2LXOSMqb4z6vO3yqIj8dP9fpwyhz8enHqc ZaNUv/P9ceD8vQeRiLXpYv+m6rFzo9Rf5iKpZNep0Rw3DVmxUjfQXvd+/OrQ RIF+OPb83abEiavh43a4AjQ4DJ4uG3ae2kUva0DS7bKr8SDd4nRB9Hoa9flD uLH1CBrpy2JBDO+wR8uWic6U2qdIRnllWHbYBVAsuhg+uUEZaoZuTo48OURE j7f6yhL++04vq7kKiY+XDk11+qrJstMNfdSOhjeV7T41+f6JHSrDz8AGXXDP uh1U6w4UTZ07UJ/MzzCZ1KHoBDWfJ4kV71tfTXnqemHP71kRKOLxC1HOFweq 61JqbxNzAZWVF1IKHg/2KkJzbGfTyGQZAI05ky9lnLtTcIAz2YU/GxBhfhs2 MZy6E2pCNnk4vFwFn0ErtsAWKeAD/wGy61x59t1XCPtJFRcGZewPSM+jkulo Snl2yXFIW7TD9XSomfmCnZPSAIM+hlXwW+o44pkVY2dGc65Pq/EmyuLd0PPQ UfpozqahRV8N0zPL0/W7VskuV9JeT7tcmfDTOlb66Njh8XoVFnpVUOoYJb3x WTqqvIh4uHfqyOZc5NrEqIMSmDKQ1nlqPnLdZJu0Mqt9/VMHzd2qizul79Di u6s8a4P8Yn9Z1pZINEw+Ktnauvf+1OJtm8+jN0KkNxcidfdwcQf9KnIppLF3 4oBZai/lX359736Qd97nyzulKbKbPo2ngkFQzikcquxybHkgP/jxirwzuthD xsItbtfnz6OjPXL4jQfqyKWT8kr00slPBDD4s+TI+GHbsXoNwlzZnIl85WVv 6URWn4O2/EJg3Fbpx6wWXR3FKVHKyFj1yA5aNnIryvXM6Hp9CiIS+7Mt9oUt aSmtjx2b0Uunrx2anplm0mEFlsrR8YDed+/lBFVYo6y/49KrESlljZRl5Xaj vd7KrC3ytGIP0srqqZJKYw4LlW581al9qOS6KjHINaO/9lVJh1DJ9ZWqyACd Upko+97dWfGYb5meyFh7pXc0asAl5iJmNnJ9bahs61DZtiHHz62jKccxynso N85OAY3NlyCilZZlfRSpyvClnlv55R7B6PJO6Q30Nou0JIs2jt58a/3sXy9J w85aQ52qxjZ2M6vbfNLZ7ksm5Rf65cPXs3RtTsgWSEu2oqzbbZPKAeXx6DW6 sY5x0TVZL3VcdAK5SvaXc8DmQUQq50aLs9rbv9x0GapuHBfNR0l0PncKvbJW OTJ6bYVcgWdaPgWMugRdxq5Sca/oHErt9Xm8vAi5aZEy6NAUdw1zoMux1uzR 3tRiee9mqoasnrD/LC0J0QbW0T+egliHKB69yvYekNY4G2xW+Zfs/uJW+iR6 L6W1jCG7/RK5OYK1FkPtbC0ZNF2ceuotqqa+j/HuaG3SkhLQ+g7UJhhk8l8T 26Ty4+MP3BXX4Xvjpwbe/RX46jrcQvAWFS08ktf2/siUw6Cpvez8/NNr0wT0 Ht5QceoZjI6ipljyuctlzVBph8f0E+2S+QT36ePSb2aOy7gzx+UZM8c3emaO K4ZnjsclK2QXzDdc6X0X1ecSVId5MP2iQpQ3kLvD1y0lr01f6HVTdG1UV9u+ utHleNRMdtXXly6/cfsuhOCOqqy38nDXhwBp2ULZBO65P59txQ6Dk/5fa909 GtPGRbsNATwhlb4duUR6pPVGMjo+K20Fw8i+pchLp9YQ5A3azfufw8KFOGG2 5LjEqZ5zD2IEF4Vka9q02fiR9CL01jy1EC4UroRDikI4B34kl5Kt+MckxzHm R8CEevwawub9m3J+Xoir8H58vCekYNe9bltv/Qg98Qtv4UK3Nji8KIRGn6tR Sg4TFkiOM7jZdm02uZrfg1Uf2A859964IJOfEVeAyVPeT473pBVw70GuCNCV BIBCdQbAwGMgGJalAww9mQiGQzm1XL02ZALOAJlwyfSy1KaNCtASlroCtNle CIaP3m9LyanIKvYxZNWx1nwwYcT1EZiwLRNM6FT3Bxj2MXYCfhfNB6yNZFyS HOdXzbVus+nWPQ8mzzpah74Ci7wD9x55nwjvh74Di0ffgeMLLCgmh6BHLFVk jg5R9fsDQfO9s4/QCDjkEQ1H5cM3msgjMDzk0VdNwc7jDArynAWJzRS/gE6Y UZYEMY/vx2IlHORJmiASKc90f+0BCwuKGim4nCESc44HwugTYdTzzW85+jI8 zCLhKn1fkmAjoZf0QoOwmQRtIj3Dqu/XEJmjDxVhkSdCwA6X3BmwcCNhrir6 HMkRV/WMSDsMxlNLwHkHh60mvTQSZNKxTJaQTtKLZAqY9TyYRoOZHRSDO7KX gtLZ8zdI0EclLFYhzwYzSASa5SGJJdtmB8UHfXJiVX7lbf1D5mSxfAH/q3I2 E30cw2cW+qSCXYa9ehQriAXrFiNvHQWjz0Y3E9BnnAG6b6zwe5n3upciDyxn wDTODTHhOv5+2G1MBPIQw7+AXL2i0XTBbbVP6bKvbLFvHEhL1XygiMOOAVMJ qURjJFK32m0d/RzZ8oHbkhjZcpPbsnRq1DMOpJaRfWlgO/QuRcdofNeAPVdq n9JrX9lq3zi0POorDxX3pCgvL3DutLV1P5hf27U4VZ2GxIsWp6iWCoCH21I5 KS1eATyof2yb9Pu1mJyzvWUB7qs97YjR3rMovmlcG+RJh8q+TIrybvTQeEDL nBKwe18FSGzBa8GEPVV99gg9faOR69Bh74UYsN3Izchv0OFAaDxy1DlNS3Gv tvfWZ2lFB2t6KJHfNTszal/VO5WCa0PlUOwrfceVFndK7c5NfbQOlofQqJY9 kS37uC2fJ6WlyH34fqfCU41IEB65MR8dptKb0OHNEHRYfeoxSAtnRyoD0WEW HcQKapp0Qnm75PDQRECrLqR4qOHw0GjUKXROV/Fn5C7aspTNKMLR4jF0eIZ+ dC3Gv7NFJquL2ehC376bvgMlvkOVvqNjAaOEBITllEg7RIAdQx/iEfmPpqjk JKrW2jJWX9eeNXvxVORSysPp9wbRjNJ1yn/6fdN1m9fPuI0agPNEKqjFvtLi QqldlDTu/tQHrgeiZd9RAqqFBC1I6dtnUN9eifq2iuz9VhMLobY+xoIIHPwY SwPA7IiqD01rXOfqULyzyIfz/VhwjYYbj3Cd7EpBDZ0kNCf6ZJFzbvtlw4bW cw+5Y/hbxMoHjB0VBv+nEb7DEucve16Z5UXOSvcHvuGtfLBWB3kcl0USsGer SWgNNjQvud9tsPC7jvfwIjf8CebTOBTZgrjaN2GbCQ9/ymMtYZOYaqRndlr7 NUhWMLSS9EwAuiL0WT4GGX2Wz5VCXrCe1M05jlmBRCB1EIG2MMihqkechCCw WBRR8LiG2b9tFAQfjgYyWQ94fhEL9DFQHslC1HNkZA6inoF9aVh1xN8Gyie7 iEWIA5Qc6U3jOoEclhjQAmqHHZDyanjv5/un/gApp6Nl1HCpotjoe9eFGCIA lrOBqXVUHkYMEQxvqoDh8J5t9AfAjK4OvVNhyq5UJE1KPVFKyiI9EUqqpOsV bpBwZGAqFTfdXNIivdA5fXXoEqc0VYU79TlNtpaoIsa976q0BdlRWjp7ZiGw YsawdD7b2/TL0BNlf1kk4sy3Olsfp69jxY0uTjPGKOusI33Vkcubp6X2Foa7 or7uG/vcWmyGMFixGgd9sT30myl4N9T2sLK8QkWOFRO+Y96jkCSapgQ8RcCJ VmsuwgwTMJhDNApiHgtYNYRaOrCtCFa5RBtalY7DyL7NMI+nIzahVp8JEFt7 6AxLP2IMyDy76pTN36Xb1adD6t9jZj21O9NCUe4/F92fje6P0IWnYWBXVR02 8v55uN+/sCr5MPsT2/sQ+qQfsPrPsN0KwqOfWGwL7+xUiok5rn+NH/LMnAiD BQnALrV5rkf2D0GZGiIWzLtymw+pAzzmBSSe3edZHyjlmNms4IlRDA3QtJxr p0LRW851BL9p3KXgF3nN/N/S5W7BBz7paoH452eY5vGFBp25chq8l5OavsfE z/ejqGkXGOPv3mVV6OiQkCcKeYjrHTa2W0F9J4xeoYewpWcPYwWQnQHyTRHk n7AOyhnuJXKY0MOJkgc6gMySHuS3dBj5dVDS1YHS9Q1Kl6pMXzY0DBIwMrFk +DaJparjqqHDnq/jpncM1+iJrismAl3CePmrtq8ket7NBNl7ts3EHZTFUj/r Lb9osE38kZjCxoGYUkuRRQGJUZEET6A3uL/EigkFzSVu8Ior5gb+hPKfuj1D TbR5Gt75u4i9v9nkvS7CUMl4ZhAvCSYR0pjE2v0a18meVNmj/RKjNgwtXUJY N9f7F9XmHzCR88tzTpCwHNyal096MDgrXL8mnSJhQU4GCbXQMItCduVrqdmI hCBSOAlkz5a24fz8hLZteX+mv7oHlem01/u4Y4sw8+MGeT/xacGsjkCcCY3E ka2ezNMR2fsJA4+zVyhXr8vGObXxDuLDF7PJDTCufU20qS0VL+OJVo8xCIZl KGD0tQ8jYOAW5a6BxB9B6cFcJX/Ucy+svo+jBoQxF6Jnu7Zq7uARY7Mx8cDU ODDvhMgRauPprNGocI5g4bFIrSGwooCyZBh5cQy7sEigT3bAxyGv0h2e1ZwD A/Ejby+olVLiamEedj7yOseE8r1ogQVPYlmDUzG0LsDMz0NeR5VYKGN5LhYE Zvc1indQF1lcxwPfxKirYhq0HeWvko250hu0vQ2tIy6J1ZD3wi4qX/fMU+Mw 7zH9FW9oPX3TqO2nnoHDIJaSGe1D9ZhYnKLihbHUHh66iA5LUojocPR32dFU jd91/GsD+vaXLaUOo3fw0rRQyJDnRTmkxcNgrTs1rYNuPOJei8auxSmq3giS 1vcLYZUi79qArj40TqRdOcdD4kQvkY8OG435yHBA5gcf9GgAz/Ioj/RF/vxv 5mNh36n0ZencHQch75blgVo5XbVojHm/AsUZ1fLYlKFhwxALgsXpjr59drX+ Mrj0uO70h0zef0ucPtx4bkYib9WNRigBxQ3KdZ/iMzS7YZmf2mhSTNJx/UTv vCUClXwzR0yEQKfbfENgkmDOr/Pkc0PIEDQAWm3cMQ5RHlfHwM8i0PpAsg/u bJDPRVrkYzV58qBsgZN948IBtMh5ElE+T3Ecks9H/mD5uYCiRT54gQSuWDAX CeJIDNNSwB0hKB3AN4Mx8r2qjdPgh0BfE/rSInCSJQSdhGR4FC0KB0h/Af3Z 0JdWAReDPvL1IEWrgD+Sjx/9A/4S9OnQl1axL5JLkLGiVcCNwFgf+tIq8Dhi ZN/mVLQK+Gr5+tX/wBMuH4f/A56OkX33RNEq4MiXQ5A8qWgV+G9iZLJUtAr5 v8bIPlalaBXwLiD/WWA8ifkiT0T+WlgZXNEq5ptgZfMUrWJfW/nY9h9wd6xM 34pWAV8rH6/9BzwIK9OfolXAE+V4E/+BXwTGSD5VtAr4UTndR6fRj8AvyNdf +AeeMqzMDhStQs73wJgGfWkV8F6sTK+KVgGHpvkHUSE3iqw//V8BR2xbG/rS KuDI31bgs4hjAp99i6xJCIyxd7CxR7+9wrQLjwyPCw+MCN8TGBceFekeFRni GxgeifwHeMZHbkeAc7988mVtXExIINcrJG51SFKce2BcYIBfQADSrgkJDJYd DPgvfKFE2UO/4xKSFB2yPc4q3NozJiTEd3U8NyQmfDu6PC4sJipR/k0hj6Tt IdEIOQEBO5KSAqJDYmKjIgORr88EJDC3h4Vs38UOioqJWx8Ytz1sHbIOxR0b Gx9klRgeF2YVlRASExoRlWgVLt82NjA4+D8eWhMfGRfODQlwA7zEhUwnZgZl ATtC4vwCY+JiUVTx/59duPER/+YQN4S7PTrZKpoZ7ij7mbb9N5HhoVEx3DWB kcFRXF+5vGJXzFBWgL29g72dY6BDQMj2UPsAu0Cn4AAnh+0OAaGO27czHUIX O9jZotoMcFsRmRC1HV2EjtfHBEYDAQa4BUZEoACPpOiYL3NWhyQGKL7g5BET ExUTGxKnFP/auOSIkHUhsXHACgJ814VExkbFKIZyOrcjOlAu8AY8AEQygcoX IPuh2pYNgTC/KE82H4A84kJigIblcxQiA7QopSX7DFB4aAgiM6vYOKAQ9NhM eEhkMAq1trZiWjFhawd7GzunoGB7B1ubQOABdsF2ix2YTjYhwU62Ng72jg42 doH2oUz7JEf7AHu7hdHbF0aER8YnrfdVftTqv/dJK6vECCuffziUlc//mkvJ 95quYlkc+H/bqQ28 "]]], "orcInstance" -> 140373448223744, "orcModuleId" -> 1, "targetMachineId" -> 140373447970304], 5481287872, 5481287664, 5481287744, 5481283584, "{\"PackedArray\"[\"Integer64\", TypeFramework`TypeLiteral[1, \ \"Integer64\"]], \"Integer64\", \"PackedArray\"[\"Integer64\", \ TypeFramework`TypeLiteral[1, \"Integer64\"]], \"Integer64\"} -> \"PackedArray\ \"[\"Integer64\", TypeFramework`TypeLiteral[1, \"Integer64\"]]"]; RandomAsynchronousCellularAutomaton[{rn_, 2, r_}, init_, {t_, ct_}] := NestList[ caEvaluateCompiled[Reverse[IntegerDigits[rn, 2, 2^(2 r + 1)]], r, #, ct] &, init, t] BlockRandom[SeedRandom[567]; ArrayPlot[ RandomAsynchronousCellularAutomaton[{232, 2, 1}, RandomChoice[{.7, .3} -> {1, 0}, 400], {100, 20}], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange, Frame -> None]] |
We might have thought that asynchronous updating would add enough randomness to “break ties” and prevent things getting stuck. But in fact it’s not hard to see that the results are in this case in the end no different from synchronous updating.
What about for something like the GKL rule? Here are asynchronous results for it, now with 50 updates per step (with initially 60% ).
✕
caEvaluateCompiled = FunctionCompile[ Function[{Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[ position = RandomInteger[{1, Length[state]}]; substate = state[[ Mod[#, Length[state], 1] & /@ Range[position - rad, position + rad]]]; rulePart = Fold[2 #1 + #2 &, 0, substate] + 1; newCellValue = rule[[rulePart]]; state[[position]] = newCellValue; , eventCount]; state ]]]; Should be compiled for all machine targets: caEvaluateCompiled = CompiledCodeFunction[ Association["Signature" -> TypeSpecifier[{ "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64", "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64"} -> "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]]], "Input" -> Compile`Program[{}, Function[{ Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[position = RandomInteger[{1, Length[state]}]; substate = Part[state, Map[Mod[#, Length[state], 1]& , Range[position - rad, position + rad]]]; rulePart = Fold[2 # + #2& , 0, substate] + 1; newCellValue = Part[rule, rulePart]; Part[state, position] = newCellValue; Null, eventCount]; state]]], "ErrorFunction" -> Automatic, "InitializationName" -> "Initialization_667648a7_ecf6_4a9d_97c7_f8cc07f5743e", "ExpressionName" -> "Main_ExprInvocation", "CName" -> "Main_CInvocation", "FunctionName" -> "Main", "SystemID" -> "MacOSX-x86-64", "VersionData" -> {12.3, 0, 0}, "CompiledIR" -> Association["MacOSX-x86-64" -> ByteArray[CompressedData[" 1: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 "]], "Linux-x86-64" -> ByteArray[CompressedData[" 1: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 jHZ0I2GDKAO6wzJm5c3CO9CEgTgTCgm6C3nCnOOQjlyEprMncs1EQIQxOM89 6UCEsKdShGF4hQhX/sDxDdXzMzETBOJuL6tPh2w8NJ1ldnsFmmenHXzQIEHG +CbG6tC5eRtWZB+h3cZ41acLsIDGPcHROYbzjwICLIjYlzk9Hkl43z3BvBwj vaNGekG1XnVzM2uO0GB9kkCy4NUKnumSmHkgynIoYjvifkG95aPbwV/Z2mhg eXCMesmb7pWp+BGCcCFebMlf2EAnl1Kg6/hSUFm0YxeGlYA2rlj8521QYcDF nEegiq450ayK1McnldnjV1VF4Fax4l9qsOkWWIEUvuZUHoj6Vm9c0ZD8vTp+ jtVdS75VXC2v+MBZxJvKVZVx7LTSm15o5/1hKVzEc0NX3VYvyfvhuzNg3o7v qWK7FQSB9yLKdopVquu8HQ+pbl7z8l1BuPGbp4xjSViFN5eserPgOrmHqSmx IxIE9YsoG2761VLqLTGOSAWyaENFNP8s4GAY5eCdkgOzRZgrDTbZQieQz2gk k6csztsYQgFYJ0HWCRy9K6Ml58C6B+g6kZpiXfwidmGDzWm3JbJ1z1mc0aeN 2rmgIotgLihCqGQtUFJ5UUnl8Krur66T/xbLqCQtodCqayWW7CVxtX75K68g iftXNWXi5vwS9JWe978EWD17WGAP8zYKEnJfAB/aSMTOOuGca8bJ3CgIAicI l+PChNm0S97dDMM38NywEGw6VkyLJCWpkEP1OiWGAioOC2z6jXfo8W7Dl5qk 9Nc8FnAPSCNUr5thBEohsgo1OS/jcsi6jHrgD+LZwB8aYMQfA9cr/TFX9VnI 8UCjvxm5BAyLco24KSl0/+qDYC2eugcuyrXO2CjYk3eQxayfTQLLC3nQkiBe asZWxL/FKgr/DtyixHda9V3I8R6jtwzHX7ZwyhkbVGxzQ5ozU0gXnEDF9oYv jntx0qye+Jb0DBvLD8RhyahDPVRRONTbE1BwqN5HibGskkvJU7my48lPpoTI rW8ygBPytiqdsFO5xuSUGKyZZMxFWMbnpMLM3/pxrjjsCbM3mXw115fEBcZW Il1A/WOUef42BbE/F6t+G3qcPdfbBBU/RhW7im6ba0ZS3YnDSrq3wWCvJCEP CtNQK5iVztIA3OaZKpWlp4rdRV+b5whnb8R+T7sEp+fwJnqwKYApgSZK4Ccl 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 ZDS1t/0sIuq/915sXAwCDKkvyvjy8JM8GazsaxKSPSNOVQ+eap2qXK6NLLy0 62bhLuep4U8XrD5szA7HzXVvm+Pl92rTEDDU1YtZJ5GoLG1KpreOVlcltiBV wc9DZxzeYy4Axu7HG18efXKW+PP0FGR8Of5J/X8AtX+YQbb5LXtPrGr4l9ip +vuVf4gPiOo+Ij6X37nG19KQntHvu42v7UF7ZYnG1/5Aj15MNnYqCVeYxOmm KaDSXp68Ghgv7Z8qjbKBUbbpQ9z2F1NPChc5wmREgSf7+k/2DZ8cGqq4OFrx +3gF4PDxSKxC3aP6V4eXXATFxO5dq4DN9J8dDW+RdwboX+q04c99/SPkS4px 0/uJ31MKOqPG5wKDfRj/6QPV2Om00mDHX6dtre6abrB7913du2xqV4fLXUjG A72P29459eRCljUs1xX39OOpikLfeOA5otaBdq8ji8W/gULE8aJeturuk3uG hro+5LRoNKOe92JvxevwW693Vb2OGr86PEmR5UhuZyl329SuiYm58lDWxJ2s jjd2OiMjzBlsWZV2pvoOpBAjF4ix4sLh2Bmx8O+UAqwsUT2PnpaompFEMxEp dQl6g172KgS9IgR2K7LXJWYlGTn/b02YHH3Xj57L+g8kBAwkfe4qyzpWBtXt z7xr9WFcY1FvS1yrQdPqls0R5V+leD9Aq3iHFGnitqmJ1AuYx8j40fjW1vEz reMdU++5AZ6y06zDIx/O9FV30J+KkWtKvXHgnMEDOY/ouFU1LvqTYCkrzxef 7QqTXWpK6JQ6Hpkq6dj8Csqw+3Lyu67LJYaP0UavVCRH9Tl+7qrMOq2qONMu K5z6mLJed/rJfWXL8temO+hi9eXfrZglmZjqs6xZZD8rkJJzZCrIlkqg9n/8 x/AcVuBK3qSDaVPA38s747UZPiHImUDMZs3ML2cCyaZo6R9b+YF63TBvegWx s91rtd0Xr/x9qLo0+aYuMnn3zVFwhoL2toxSnc2Ap/6x63RZD480zc0OVNdB uxAt/723ddetql23hqYqqoaiFPicq8enXqQ86zRAa9WoT2UgDAdia6JOz28d glB7dB7i7u2a+lT1B08kT5yxZyajjK3XIRdwbjWF01Fahqo+5EhFikxZNTBZ vcsNKcl/S96zvAviIgTsrLo4cLZuwKh1YNvvU5uuLvpaEZra66ZAUf4dubxt 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 95quYlkc+H/bqQ28 "]]], "orcInstance" -> 140373448223744, "orcModuleId" -> 1, "targetMachineId" -> 140373447970304], 5481287872, 5481287664, 5481287744, 5481283584, "{\"PackedArray\"[\"Integer64\", TypeFramework`TypeLiteral[1, \ \"Integer64\"]], \"Integer64\", \"PackedArray\"[\"Integer64\", \ TypeFramework`TypeLiteral[1, \"Integer64\"]], \"Integer64\"} -> \"PackedArray\ \"[\"Integer64\", TypeFramework`TypeLiteral[1, \"Integer64\"]]"]; RandomAsynchronousCellularAutomaton[{rn_, 2, r_}, init_, {t_, ct_}] := NestList[ caEvaluateCompiled[Reverse[IntegerDigits[rn, 2, 2^(2 r + 1)]], r, #, ct] &, init, t] BlockRandom[SeedRandom[567]; ArrayPlot[ RandomAsynchronousCellularAutomaton[{\ 339789091192587366278221041213531750560, 2, 3}, RandomChoice[{.6, .4} -> {1, 0}, 400], {150, 50}], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange, Frame -> None]] |
And unlike what we saw above for synchronous updating when we added noise, the change to asynchronous updating seems to completely destroy “majority consensus” for this rule. Note that using more updatings per step does not improve the result (which should in the end be not ):
✕
caEvaluateCompiled = FunctionCompile[ Function[{Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[ position = RandomInteger[{1, Length[state]}]; substate = state[[ Mod[#, Length[state], 1] & /@ Range[position - rad, position + rad]]]; rulePart = Fold[2 #1 + #2 &, 0, substate] + 1; newCellValue = rule[[rulePart]]; state[[position]] = newCellValue; , eventCount]; state ]]]; Should be compiled for all machine targets: caEvaluateCompiled = CompiledCodeFunction[ Association["Signature" -> TypeSpecifier[{ "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64", "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64"} -> "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]]], "Input" -> Compile`Program[{}, Function[{ Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[position = RandomInteger[{1, Length[state]}]; substate = Part[state, Map[Mod[#, Length[state], 1]& , Range[position - rad, position + rad]]]; rulePart = Fold[2 # + #2& , 0, substate] + 1; newCellValue = Part[rule, rulePart]; Part[state, position] = newCellValue; Null, eventCount]; state]]], "ErrorFunction" -> Automatic, "InitializationName" -> "Initialization_ebf3942d_117d_4dd2_a02b_59c5c41b2c75", "ExpressionName" -> "Main_ExprInvocation", "CName" -> "Main_CInvocation", "FunctionName" -> "Main", "SystemID" -> "MacOSX-x86-64", "VersionData" -> {12.3, 0, 0}, "CompiledIR" -> Association["MacOSX-x86-64" -> ByteArray[CompressedData[" 1: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 73j/yfF4/+x5PHnK4eE5h/fvSUdR//1/gIavxg== "]]], "orcInstance" -> 140546848939520, "orcModuleId" -> 1, "targetMachineId" -> 140546849609216], 5154796080, 5154795872, 5154795952, 5154791424, "{\"PackedArray\"[\"Integer64\", TypeFramework`TypeLiteral[1, \ \"Integer64\"]], \"Integer64\", \"PackedArray\"[\"Integer64\", \ TypeFramework`TypeLiteral[1, \"Integer64\"]], \"Integer64\"} -> \"PackedArray\ \"[\"Integer64\", TypeFramework`TypeLiteral[1, \"Integer64\"]]"]; RandomAsynchronousCellularAutomaton[{rn_, 2, r_}, init_, {t_, ct_}] := NestList[ caEvaluateCompiled[Reverse[IntegerDigits[rn, 2, 2^(2 r + 1)]], r, #, ct] &, init, t] Grid[Partition[ Labeled[ BlockRandom[SeedRandom[567]; ArrayPlot[ RandomAsynchronousCellularAutomaton[{\ 339789091192587366278221041213531750560, 2, 3}, RandomChoice[{.6, .4} -> {1, 0}, 400], {150, #}], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, MeshStyle -> Orange, Frame -> None, ImageSize -> {300, 150}]], Style[#, 11], Spacings -> {0, -0.5}] & /@ {100, 1000, 10000, 10^5}, 2], Spacings -> {0, 0}] |
So what happens if we search for rules that achieve consensus asynchronously? In the nearest-neighbor case, the simple majority rule does best, although it’s basically no good.
Here are results for a few rules found by searching a million range-2 rules:
✕
caEvaluateCompiled = FunctionCompile[ Function[{Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[ position = RandomInteger[{1, Length[state]}]; substate = state[[ Mod[#, Length[state], 1] & /@ Range[position - rad, position + rad]]]; rulePart = Fold[2 #1 + #2 &, 0, substate] + 1; newCellValue = rule[[rulePart]]; state[[position]] = newCellValue; , eventCount]; state ]]]; Should be compiled for all machine targets: caEvaluateCompiled = CompiledCodeFunction[ Association["Signature" -> TypeSpecifier[{ "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64", "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64"} -> "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]]], "Input" -> Compile`Program[{}, Function[{ Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[position = RandomInteger[{1, Length[state]}]; substate = Part[state, Map[Mod[#, Length[state], 1]& , Range[position - rad, position + rad]]]; rulePart = Fold[2 # + #2& , 0, substate] + 1; newCellValue = Part[rule, rulePart]; Part[state, position] = newCellValue; Null, eventCount]; state]]], "ErrorFunction" -> Automatic, "InitializationName" -> "Initialization_667648a7_ecf6_4a9d_97c7_f8cc07f5743e", "ExpressionName" -> "Main_ExprInvocation", "CName" -> "Main_CInvocation", "FunctionName" -> "Main", "SystemID" -> "MacOSX-x86-64", "VersionData" -> {12.3, 0, 0}, "CompiledIR" -> Association["MacOSX-x86-64" -> ByteArray[CompressedData[" 1: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 "]], "Linux-x86-64" -> ByteArray[CompressedData[" 1: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 jHZ0I2GDKAO6wzJm5c3CO9CEgTgTCgm6C3nCnOOQjlyEprMncs1EQIQxOM89 6UCEsKdShGF4hQhX/sDxDdXzMzETBOJuL6tPh2w8NJ1ldnsFmmenHXzQIEHG +CbG6tC5eRtWZB+h3cZ41acLsIDGPcHROYbzjwICLIjYlzk9Hkl43z3BvBwj vaNGekG1XnVzM2uO0GB9kkCy4NUKnumSmHkgynIoYjvifkG95aPbwV/Z2mhg eXCMesmb7pWp+BGCcCFebMlf2EAnl1Kg6/hSUFm0YxeGlYA2rlj8521QYcDF nEegiq450ayK1McnldnjV1VF4Fax4l9qsOkWWIEUvuZUHoj6Vm9c0ZD8vTp+ jtVdS75VXC2v+MBZxJvKVZVx7LTSm15o5/1hKVzEc0NX3VYvyfvhuzNg3o7v qWK7FQSB9yLKdopVquu8HQ+pbl7z8l1BuPGbp4xjSViFN5eserPgOrmHqSmx IxIE9YsoG2761VLqLTGOSAWyaENFNP8s4GAY5eCdkgOzRZgrDTbZQieQz2gk k6csztsYQgFYJ0HWCRy9K6Ml58C6B+g6kZpiXfwidmGDzWm3JbJ1z1mc0aeN 2rmgIotgLihCqGQtUFJ5UUnl8Krur66T/xbLqCQtodCqayWW7CVxtX75K68g iftXNWXi5vwS9JWe978EWD17WGAP8zYKEnJfAB/aSMTOOuGca8bJ3CgIAicI l+PChNm0S97dDMM38NywEGw6VkyLJCWpkEP1OiWGAioOC2z6jXfo8W7Dl5qk 9Nc8FnAPSCNUr5thBEohsgo1OS/jcsi6jHrgD+LZwB8aYMQfA9cr/TFX9VnI 8UCjvxm5BAyLco24KSl0/+qDYC2eugcuyrXO2CjYk3eQxayfTQLLC3nQkiBe asZWxL/FKgr/DtyixHda9V3I8R6jtwzHX7ZwyhkbVGxzQ5ozU0gXnEDF9oYv jntx0qye+Jb0DBvLD8RhyahDPVRRONTbE1BwqN5HibGskkvJU7my48lPpoTI rW8ygBPytiqdsFO5xuSUGKyZZMxFWMbnpMLM3/pxrjjsCbM3mXw115fEBcZW Il1A/WOUef42BbE/F6t+G3qcPdfbBBU/RhW7im6ba0ZS3YnDSrq3wWCvJCEP CtNQK5iVztIA3OaZKpWlp4rdRV+b5whnb8R+T7sEp+fwJnqwKYApgSZK4Ccl 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 ZDS1t/0sIuq/915sXAwCDKkvyvjy8JM8GazsaxKSPSNOVQ+eap2qXK6NLLy0 62bhLuep4U8XrD5szA7HzXVvm+Pl92rTEDDU1YtZJ5GoLG1KpreOVlcltiBV wc9DZxzeYy4Axu7HG18efXKW+PP0FGR8Of5J/X8AtX+YQbb5LXtPrGr4l9ip +vuVf4gPiOo+Ij6X37nG19KQntHvu42v7UF7ZYnG1/5Aj15MNnYqCVeYxOmm KaDSXp68Ghgv7Z8qjbKBUbbpQ9z2F1NPChc5wmREgSf7+k/2DZ8cGqq4OFrx +3gF4PDxSKxC3aP6V4eXXATFxO5dq4DN9J8dDW+RdwboX+q04c99/SPkS4px 0/uJ31MKOqPG5wKDfRj/6QPV2Om00mDHX6dtre6abrB7913du2xqV4fLXUjG A72P29459eRCljUs1xX39OOpikLfeOA5otaBdq8ji8W/gULE8aJeturuk3uG hro+5LRoNKOe92JvxevwW693Vb2OGr86PEmR5UhuZyl329SuiYm58lDWxJ2s jjd2OiMjzBlsWZV2pvoOpBAjF4ix4sLh2Bmx8O+UAqwsUT2PnpaompFEMxEp dQl6g172KgS9IgR2K7LXJWYlGTn/b02YHH3Xj57L+g8kBAwkfe4qyzpWBtXt z7xr9WFcY1FvS1yrQdPqls0R5V+leD9Aq3iHFGnitqmJ1AuYx8j40fjW1vEz reMdU++5AZ6y06zDIx/O9FV30J+KkWtKvXHgnMEDOY/ouFU1LvqTYCkrzxef 7QqTXWpK6JQ6Hpkq6dj8Csqw+3Lyu67LJYaP0UavVCRH9Tl+7qrMOq2qONMu K5z6mLJed/rJfWXL8temO+hi9eXfrZglmZjqs6xZZD8rkJJzZCrIlkqg9n/8 x/AcVuBK3qSDaVPA38s747UZPiHImUDMZs3ML2cCyaZo6R9b+YF63TBvegWx s91rtd0Xr/x9qLo0+aYuMnn3zVFwhoL2toxSnc2Ap/6x63RZD480zc0OVNdB uxAt/723ddetql23hqYqqoaiFPicq8enXqQ86zRAa9WoT2UgDAdia6JOz28d glB7dB7i7u2a+lT1B08kT5yxZyajjK3XIRdwbjWF01Fahqo+5EhFikxZNTBZ vcsNKcl/S96zvAviIgTsrLo4cLZuwKh1YNvvU5uuLvpaEZra66ZAUf4dubxt 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 95quYlkc+H/bqQ28 "]]], "orcInstance" -> 140373448223744, "orcModuleId" -> 1, "targetMachineId" -> 140373447970304], 5481287872, 5481287664, 5481287744, 5481283584, "{\"PackedArray\"[\"Integer64\", TypeFramework`TypeLiteral[1, \ \"Integer64\"]], \"Integer64\", \"PackedArray\"[\"Integer64\", \ TypeFramework`TypeLiteral[1, \"Integer64\"]], \"Integer64\"} -> \"PackedArray\ \"[\"Integer64\", TypeFramework`TypeLiteral[1, \"Integer64\"]]"]; RandomAsynchronousCellularAutomaton[{rn_, 2, r_}, init_, {t_, ct_}] := NestList[ caEvaluateCompiled[Reverse[IntegerDigits[rn, 2, 2^(2 r + 1)]], r, #, ct] &, init, t] GraphicsGrid[ ParallelTable[ BlockRandom[SeedRandom[567]; ArrayPlot[ RandomAsynchronousCellularAutomaton[{#, 2, 2}, RandomChoice[{p, 1 - p} -> {1, 0}, 300], {200, 400}], ColorRules -> {0 -> Hue[0.15, 0.72, 1], 1 -> Hue[0.98, 1, 0.8200000000000001]}, Frame -> None]], {p, .3, .7, .1}] & /@ {4272826020, 4242057736, 4265795970, 3663321792, 3953790018, 4020250803}] |
These rules were the top performers in terms of having “closest-to-majority-consensus” average behavior. In the pictures here, an average of 2 updates per cell is being done between successive rows.
If we plot the final density as shown in these pictures against initial density, here are the results for the first 3 rules (with rule numbers 4272826020, 4242057736, and 4265795970):
✕
caEvaluateCompiled = FunctionCompile[ Function[{Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[ position = RandomInteger[{1, Length[state]}]; substate = state[[ Mod[#, Length[state], 1] & /@ Range[position - rad, position + rad]]]; rulePart = Fold[2 #1 + #2 &, 0, substate] + 1; newCellValue = rule[[rulePart]]; state[[position]] = newCellValue; , eventCount]; state ]]]; Should be compiled for all machine targets: caEvaluateCompiled = CompiledCodeFunction[ Association["Signature" -> TypeSpecifier[{ "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64", "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]], "Integer64"} -> "PackedArray"["Integer64", TypeFramework`TypeLiteral[1, "Integer64"]]], "Input" -> Compile`Program[{}, Function[{ Typed[rule, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[rad, "MachineInteger"], Typed[init, TypeSpecifier["PackedArray"]["MachineInteger", 1]], Typed[eventCount, "Integer64"]}, Module[{state, position, substate, rulePart, newCellValue}, state = init; Do[position = RandomInteger[{1, Length[state]}]; substate = Part[state, Map[Mod[#, Length[state], 1]& , Range[position - rad, position + rad]]]; rulePart = Fold[2 # + #2& , 0, substate] + 1; newCellValue = Part[rule, rulePart]; Part[state, position] = newCellValue; Null, eventCount]; state]]], "ErrorFunction" -> Automatic, "InitializationName" -> "Initialization_667648a7_ecf6_4a9d_97c7_f8cc07f5743e", "ExpressionName" -> "Main_ExprInvocation", "CName" -> "Main_CInvocation", "FunctionName" -> "Main", "SystemID" -> "MacOSX-x86-64", "VersionData" -> {12.3, 0, 0}, "CompiledIR" -> Association["MacOSX-x86-64" -> ByteArray[CompressedData[" 1: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 "]], "Linux-x86-64" -> ByteArray[CompressedData[" 1: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 jHZ0I2GDKAO6wzJm5c3CO9CEgTgTCgm6C3nCnOOQjlyEprMncs1EQIQxOM89 6UCEsKdShGF4hQhX/sDxDdXzMzETBOJuL6tPh2w8NJ1ldnsFmmenHXzQIEHG +CbG6tC5eRtWZB+h3cZ41acLsIDGPcHROYbzjwICLIjYlzk9Hkl43z3BvBwj vaNGekG1XnVzM2uO0GB9kkCy4NUKnumSmHkgynIoYjvifkG95aPbwV/Z2mhg eXCMesmb7pWp+BGCcCFebMlf2EAnl1Kg6/hSUFm0YxeGlYA2rlj8521QYcDF nEegiq450ayK1McnldnjV1VF4Fax4l9qsOkWWIEUvuZUHoj6Vm9c0ZD8vTp+ jtVdS75VXC2v+MBZxJvKVZVx7LTSm15o5/1hKVzEc0NX3VYvyfvhuzNg3o7v qWK7FQSB9yLKdopVquu8HQ+pbl7z8l1BuPGbp4xjSViFN5eserPgOrmHqSmx IxIE9YsoG2761VLqLTGOSAWyaENFNP8s4GAY5eCdkgOzRZgrDTbZQieQz2gk k6csztsYQgFYJ0HWCRy9K6Ml58C6B+g6kZpiXfwidmGDzWm3JbJ1z1mc0aeN 2rmgIotgLihCqGQtUFJ5UUnl8Krur66T/xbLqCQtodCqayWW7CVxtX75K68g iftXNWXi5vwS9JWe978EWD17WGAP8zYKEnJfAB/aSMTOOuGca8bJ3CgIAicI l+PChNm0S97dDMM38NywEGw6VkyLJCWpkEP1OiWGAioOC2z6jXfo8W7Dl5qk 9Nc8FnAPSCNUr5thBEohsgo1OS/jcsi6jHrgD+LZwB8aYMQfA9cr/TFX9VnI 8UCjvxm5BAyLco24KSl0/+qDYC2eugcuyrXO2CjYk3eQxayfTQLLC3nQkiBe asZWxL/FKgr/DtyixHda9V3I8R6jtwzHX7ZwyhkbVGxzQ5ozU0gXnEDF9oYv jntx0qye+Jb0DBvLD8RhyahDPVRRONTbE1BwqN5HibGskkvJU7my48lPpoTI rW8ygBPytiqdsFO5xuSUGKyZZMxFWMbnpMLM3/pxrjjsCbM3mXw115fEBcZW Il1A/WOUef42BbE/F6t+G3qcPdfbBBU/RhW7im6ba0ZS3YnDSrq3wWCvJCEP CtNQK5iVztIA3OaZKpWlp4rdRV+b5whnb8R+T7sEp+fwJnqwKYApgSZK4Ccl gd+f4oWG6q18KiOQehRm3tgI5HrUO9lJUZxim96tyn4b0yYLU2EZp3v+xTkO m8uD0Y+n1p0w81Z9qAUieTCgqjsLCWvpOcqw9sa8+cTG/T9wDoDcwMz5plnr W2AnEx7ATjbdNlOE93eenqGqGwSbBCwrph4QxzYTRByMEKXuqlXFocd7zDhA HGC8W9V1gH78hjCEc1ysIScEZ7j5hBnvwJ2cI7TojJCY/UAleSFKlXAICo4X nOmOCNULDjJX7L3y4vpQ1VDBt/PYS4JIwS92IPYTSlDYjyQUoaENUcmfqk9C j/PNd5qA/GAP8kNEPHkBKfh4njlhAYlvnn2inLUD7McC+1kzwXHh3/FPzSND 9SKeIlsJkK22eZ0wKz9whNYQsqMZIZC3Q0lgqpLA82fEYFW0yTwFgWE7toaq xggaMlhWEB0Ip9kMNewIpXDaVd8BW5mXYCJPXOTEpyHHOfO8vyXhcdf5PKD2 b7FY+A0S4AXX8+lqwMKLgTEEoXl/A50pp1dtH/bBiZDuA2dBrj6ogYjUWKgG TPXlAWCq3arB86ySkO2zeZAn+ZAGYt3GLdZnNhLOfTzAqc3rBpQw3/qHqqae N92/j3+qCkl0Iroy0VUoLeLhvA1gVRHpO448Pb8b/tdGQRGYWWceRwISIdFz YITqkNv7obAA0jNBBaD2fAAqpzdKOe081x0fqlcbZKmQ05Pfg0NV6wRNGSxm Gx0JCQ/NYEhND3uDE4WI+QRKRrWSjBfzLgEyfrNQkjEWeGKj4Le8BAaF7ErE AgNIVCVxajn94FiDOCUsk+vnGefex20PLWdwDEE14Kh+HcQOiOLeJGh+lRn/ kqtdYLr/xHzDvxDOmYYKztMfKbecmAed20go9lZsyZyS6CEmBC8EJoRZmH29 nBMvN6FIyhaiglP9/Lx9oXqPghYqOPW8tCNU9TGQ8/P4pEwsVsJKgGWG9BLU 4YZd+XksYMRHaOefYM6RC1ax+WQHSvl2QouGx2v8dXyEtR+7uWPTIfZWkG0S yuYEbG3WUCGp8KzbKaC0AqcTHptBvY0HqaNb0mzJ30x2oBEBuO3OZvwZ2IKo greRVRGB3a6iIfS8C7el3gPNpdq66fvdhm1Xwbo/quLkRXIgx40tO3GM9dcF KQgSkLZS9LX+vG/J3nrInAx5vsJhEKJWRevKEhaF4KxTcj/MlQKyvMc22Tlf MjsssGA5QMq6sBYGZXx0Dbw8LBr/WayCA6cLddHsz+JoN042KAa2vZSR8ptu eqknw05Og59n+qSM1IB3suMPddNfeM6zO8mEdJxVHqq6wiAR2jmrgCxKdqg/ RMqXNJJVJSj2xbZb/FyZ7RRaMPPeG91Uqk8sBIsmVPIH/cmHZYmZ9oia7/qj Kpt5D9LPlx1PJ+SPPdA4DPgbW82PE1BINQR3iAp1apLZYksJRRMPQZlECHII /HjYbYvgrpbBbMrw4kjphNgfQw3ovZGhORcAkgvHRc/RQwlXjI/bGboLdUob pfadXWmvTc1XFq1jFQzEvzZ1CfqE81Jxv8VtzdSDfYkP4Axu763DXe8DpKWH tZhg8U3fce8rXQnH1rHiRhIHTUFsWccq7ovj8vHIspQWov60ZZ8DpBVbCWDP QafDASvQPT/4dn240rc8ks6QAOqium6EoDS9Oyt9j5D79VDZXW1Kaq/PhWUA cW2Lc9Q3K1XckwJaS7PaYNmKD9Ysd1s4I6WlPKVlImDUczkysdUpsh+7QsV9 6bYWl6AKhJaxbdKLs6mNPMBll31nb/Vr0/U0poy0kdIzXWNZUpeg61gw8dNq aekqgOPYSAl3gbuKe8kVymzKX7qKtR86RtJ8Wx+7rmOln+rwxzxI7au4BiZ0 fIgDkKEl3NMYgGPvtpEdFBnyvlvcoU8B0kR69LX7Ah86zLhd6igIar0x2ZoY 1YG9/xYSVjs2uW2pf2aa4JwNKO+rHDR9PJ/lTY4+cYO1BkNNG63IonWiG90K R2WXfKVLw90Ot6bN4bB0tGlqT2QhDnC6r6rPJcajMY6isaatJGXqFncM6wv4 b2qdnEV1ifF7iB6wj5ImVk8t9pWWAtQPGltvZG0JYqG47NOkjtypxZXG0Tya DyDco3EopXEksXE0oaNlT0fvvo6BTwED5SnqlkA5o0fGi7M27AD6eXBWWsLQ Ro1o22aUyIGS9+qIeTleHRctNpxN6dnzdddfMus6M5KwrSvtyrjoABFhY0nl qRagwMLRshzZuIOOynPgVjxqAnFXT92E1mKoWaNlWY8co35EmTw74hIkRSxy aUdvJg1W6O9wy/uAlgozGSVHjNd6WGrzdd5f6Vu8Wrq4aSQtSroA2Ip/4UBp sgx11ymZufVWjiFrnt86vDkZYaewtdQJlfHoaukUYn9RAyV8FDB2pstL4SQf rrROnTkVhvLfNb4MNT/uSFlK64eoLkI8Ygb7IsWIzTmltdQh5pg+tDSqEAHc qOot9UbsU/qJe1UGGEjUe0OoXsFcnf55yse9Sd1SZ/giL48inOMBffiu0Z3m XtCbNjhL10YvAGhs9cCNAPoihJemrtISlPRP26Qneyzd3H0+HAee17LndcsF K6ZGOoVKfuCT5q7javunS4wX5QHZO1A6we1a9nlkyWV78U61VbHjNj/H0n9c tTfWNGf3/JpVP8auuB4g+BF7/nTZe/pRUShLjX413vlqf3VVSu02lSNqog9n Lvju5lzmiaoT26+m1HriEJjBxYXfdl/ihXWFS/eoAkBMZ6HGCfgyz6Iv1uW+ r+xQf/sTZG5Cx+PvmJzfMp875Fq+OHij7Q3zhlnq0ZEPRkjEGLCPKkLl0dRC NFd6KfC0cdE1lM0lUecM6lzUbbi8dJL0Keng1qHRqCGXoDuomLOGPH1Qj3VM pc0Zt6wvxmibRHxnapFwpqW6MUBLYeAOUVM3uUfwwI6SfVtdgi4gnrp4a68u TuHalb1pVZvDgV79fVsrrqB2nMQdr8/wbWHbeQf2xkf2xU2ByHP6hML9nLhT IEiWOgLHLRiKHzQ97sRkHP4i+mGXoFN4zd2Mo912wi7Ho1kGfiGG9a7Rq23h WU/tFle1Tp3drGtHcXVnutt+pvqTGoMf4R6zSFQJpfGdlzvD7uigack2+j7U MLtKBmXOH7n5PRIWqvsqsjZEoSbYV96BHtrbeO5rpYke7ppKPSU/fvMBKsI9 Wed8lMdT+tKapDoAUdOoS1AJKvrOoTlWeZZazI/3+R/r7xJ8ELP27bu1teVD 2rgoq80aNbu+T2zmY75l7QtyW1SvA52FeKDHVmnx1paxLDArtxcQl1MlLc46 7WqL7JWwdSTtCt2Mz7AWPzetW5iN5In3r03nvaEgMj88CkLvFHcY2zKT7Quo UYzYcW8gOhqPbDnuwplu03+5rBkqvoKGjaUppyIRNqukZVQ1NI6c7VqhZJM7 tPwIPRgczykcuuGBiKn/U9XmGFQuA5XzZ6HOX3UqH5Vx780zWiyg8/HD41+7 f/S+MhTqhEZkoFhPRMW1vSmvTb3kCe1wb+Xhvs8BXcXhDIDD7rVpggVqyE7c q7JwDCLVPTQXVLXul0V2sNrcAJk0VBaZixyqaOoNXTTDWTtcgr7Hr0QMdKAk ixaL0jlU7o/qN6lLmoYAmlrH3hPSMcCl/UeWbh1Zum3k89bRd9tGE7aOJk62 jnH5SBZzDhgq1Qe7rmu9OWhKuIAk5cosuz+pbEWw6p243+ppBU/ffEwUiJYG N4DXHdYGkb5/TyXQafsuVjAw24gm3p97s6YqsnLN2Gsw/qtHb2adTkd1vLhy tHrQ1Bzlf8Q+ZV+LItfcqJxKfG163JH1DdD64oC+Kh0nXhaSO3ajGuu9sQLV WMURqRxw018GKJReRnU2WvYNqmSn+/SfZYAbVHUEsKxx80+ozgYqQ4D8e1KG TNfPQ934zGjCtpHqjnHRCi07pS5Fy7QBY88Xp4zXmynCNXdkPKBvMY35V81b esO3sXe2RCTltmtX3x2zPXhBGJZ9uzRZWjU22RfrbOi9AH76/uQH6nYD0Hs4 +ulDzqrLIg+T7PNVw1VVyZV1iZ9+H5PykZApbdpLLxsOGLqSjQTKsuHONJPb RsTv1USR20DIPIYr4FNMBIyT/Vki17ALJ+37oXA4XcQRhX4yPU85ebmwcQlL n8QwoZ0/MSmySA/9meum6bgAfjJ62n5o5syqwSVIaL2/98nDmTiXlA3PnFmn 4YzOHJe2z5y5qcwVM2Pmaw2/mbsn/6KVTXAVkfaHXVhuopZ/4u8OIyQPJEzW LVI1OYmZ/+pU3aBzWdpZB28+SBtnqkeFZBEihPELu+kgbxTG285BqB8/WVpe AI4Xhp+zr5Z1qks9ZUu4XxlzgHATpR9yNt2/2v3Wip9kXhv+bdD58y+u7loe TWj4oHJhGtHm7V6FgmuawYxb6idSnR08ZjBw90Kj/wwGftt1SmcGAxHjW3D6 5/WybxcOTdxPqXVRmS4Qc3qZ/0x8TVxUyF3x7ccB2+9cyjSYYOzdN9p+Cc19 W7sWyidIN8xEtdnBH+Fva1/U9dkzKZi0gxECSoc7q2I/V4dLdYBF/Tba0RQu nDnxVcdKVNZn+g6vQ/ZoHWsPI55UE328dfHzPJN9z7bMPa/3996+Xbeadm3p m5pwwd69iX96gnJx44EDB09WFx7eiCwaGvx8/Od+WL/gUpTh1d0VhbtTp8af nEZzeefrwQ3olAEpReW4mijpSSfAW7hYfELzPFvtZtXQ1Acq3RmoZuxkWdBM sbxuPAqM27u1/4nXvmdzziP4i6I+lUbtmdrVeXKGHC6csu+csba/0Ddphooq uCM6iI2M3SrdgUisspqLm40CJkqfzVxapbF35tLd6rKZW8o+zpz54krKzJmJ vUYzhPu6vQJVYMrQwmMyVjq99hWo4cz3bkgV3uEU5n6noXV081MHpygebnpi WvvadP8iNA+UDZrWWaE9kP4THZSnEdLRNFBYPELOPEY7wZnHv5BU4FANYLlI 2fEpFfRGcQ+n4Zy12ljM8GXZfS5R1fbGMdzxbnYtxtSMZp9ybhea+5pad8xC 8ae0lKUMjV/tJaC5cWhpZCVSB+/NGil1RgCj5ancf8XD6hKnRp6PqOXRp44p +0HTefJzHLD4TNf7LEBSJn7G9qn0EbScaAVR+W+kdxUUOLlcMRLhe13W9Fbc MAPh1q56vHhQ3im5gsboidVHf/4jjxT1K/mI1WCj78+HClc3De6qyxgc1Cgk LzrcFKJ5ZOHhwgyNJrPGTagpp5ZdiWa56n/Ry1tqrEyDy6rtDoQRCooGb5WN 6E8NdHgdiuFMV+DDlGcxMrcZk1bt/tQ6upecjYboqn5pXf/k1YH2ZlSflX0L 51/mXSqM7fTyiePNiGXhxk5t0M4lIsL8iCVdgycL06Re+2rNkcj88fTjlGdL EfTnC8MrCsMnqodjRcoEMPCpbHAJmfNHmC7dyLysNipmkgAPsOYIYk9igLeN 7R0xREPcrdJu1Hxbhwb2AKcZnvxArd4tWlXUI4OO7JJlhxdR41WDy8sGraHp crB5KpuV/AsqjuSq5VQRIg7uZGkUfSqq81vU8fdVI45f+wyQ/O5sX8qTbtBJ eFKY8uSTrPP5SRtlh55J0O330u8R8s83jVc9HvrclVI7KVvy+UkqIqWde3/X iAEV+ssX8e1eZEcQBC6VJnaw0CR19mrKsw9zEVE8jqp4vHu8erex9WveT9jz KV17pw6Q9mpsWADfHuv02tnucjYMFeapssFTV6cqqzp4hwDJl8aqCvcuuTpe cXV8fHLgdOlmNMoPDQgPKAU6On4/vkamdiOHv/gA96m+8ZOjOTd5CgkVvu/q 1Fg7w1J+G1pLvgSOH/zUOah/cVx/aKT6wvjeHgTypHDsSenQp6bRT6+H9fv6 l9/XiJ+p+V3G1n38AqxJalm48bWdoHd+7xAXwHiAtCcvuKc0wgBP4xN1KQV1 u2vMQDj+I/Hk/eHNGiJFPm8dq65KxhlnZ3t+iSCRHX8T5xZQv0S6m8vnKXQ2 ZDS1t/0sIuq/915sXAwCDKkvyvjy8JM8GazsaxKSPSNOVQ+eap2qXK6NLLy0 62bhLuep4U8XrD5szA7HzXVvm+Pl92rTEDDU1YtZJ5GoLG1KpreOVlcltiBV wc9DZxzeYy4Axu7HG18efXKW+PP0FGR8Of5J/X8AtX+YQbb5LXtPrGr4l9ip +vuVf4gPiOo+Ij6X37nG19KQntHvu42v7UF7ZYnG1/5Aj15MNnYqCVeYxOmm KaDSXp68Ghgv7Z8qjbKBUbbpQ9z2F1NPChc5wmREgSf7+k/2DZ8cGqq4OFrx +3gF4PDxSKxC3aP6V4eXXATFxO5dq4DN9J8dDW+RdwboX+q04c99/SPkS4px 0/uJ31MKOqPG5wKDfRj/6QPV2Om00mDHX6dtre6abrB7913du2xqV4fLXUjG A72P29459eRCljUs1xX39OOpikLfeOA5otaBdq8ji8W/gULE8aJeturuk3uG hro+5LRoNKOe92JvxevwW693Vb2OGr86PEmR5UhuZyl329SuiYm58lDWxJ2s jjd2OiMjzBlsWZV2pvoOpBAjF4ix4sLh2Bmx8O+UAqwsUT2PnpaompFEMxEp dQl6g172KgS9IgR2K7LXJWYlGTn/b02YHH3Xj57L+g8kBAwkfe4qyzpWBtXt z7xr9WFcY1FvS1yrQdPqls0R5V+leD9Aq3iHFGnitqmJ1AuYx8j40fjW1vEz reMdU++5AZ6y06zDIx/O9FV30J+KkWtKvXHgnMEDOY/ouFU1LvqTYCkrzxef 7QqTXWpK6JQ6Hpkq6dj8Csqw+3Lyu67LJYaP0UavVCRH9Tl+7qrMOq2qONMu K5z6mLJed/rJfWXL8temO+hi9eXfrZglmZjqs6xZZD8rkJJzZCrIlkqg9n/8 x/AcVuBK3qSDaVPA38s747UZPiHImUDMZs3ML2cCyaZo6R9b+YF63TBvegWx s91rtd0Xr/x9qLo0+aYuMnn3zVFwhoL2toxSnc2Ap/6x63RZD480zc0OVNdB uxAt/723ddetql23hqYqqoaiFPicq8enXqQ86zRAa9WoT2UgDAdia6JOz28d glB7dB7i7u2a+lT1B08kT5yxZyajjK3XIRdwbjWF01Fahqo+5EhFikxZNTBZ vcsNKcl/S96zvAviIgTsrLo4cLZuwKh1YNvvU5uuLvpaEZra66ZAUf4dubxt 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 95quYlkc+H/bqQ28 "]]], "orcInstance" -> 140373448223744, "orcModuleId" -> 1, "targetMachineId" -> 140373447970304], 5481287872, 5481287664, 5481287744, 5481283584, "{\"PackedArray\"[\"Integer64\", TypeFramework`TypeLiteral[1, \ \"Integer64\"]], \"Integer64\", \"PackedArray\"[\"Integer64\", \ TypeFramework`TypeLiteral[1, \"Integer64\"]], \"Integer64\"} -> \"PackedArray\ \"[\"Integer64\", TypeFramework`TypeLiteral[1, \"Integer64\"]]"]; RandomAsynchronousCellularAutomaton[{rn_, 2, r_}, init_, {t_, ct_}] := NestList[ caEvaluateCompiled[Reverse[IntegerDigits[rn, 2, 2^(2 r + 1)]], r, #, ct] &, init, t] GraphicsRow[ ListLinePlot[ ParallelTable[ Mean[ Table[ Mean[ Last[ RandomAsynchronousCellularAutomaton[{#, 2, 2}, RandomChoice[{p, 1 - p} -> {1, 0}, 300], {200, 400}]]], 20]], {p, 0, 1, .05}], Filling -> Axis, FillingStyle -> LightOrange, Frame -> True, PlotTheme -> "Minimal", ImageSize -> 140] & /@ {4272826020, 4242057736, 4265795970}] |
In a perfect consensus rule, these would be step functions at —and one can expect that these results may get closer to that with larger numbers of cells and steps.
In an ordinary, synchronous cellular automaton, every cell is in effect updated at every step, and the graph of “causal relationships” between “updating events” forms a trivial grid. But in an asynchronous cellular automaton the graph is sparser—with a particular updating event being causally connected to the previous event that happened to update that cell.
But with the setup we have so far, this causal graph depends only on which cells are updated, not on what their colors might be. And with random updates, the causal graph will basically be like a “random meshing” of the spacetime structure of a system—so that for example for a cellular automaton with cyclic boundaries it becomes an approximation to a tube:
✕
randomOrderCAFunc[ruleRadius_, ruleNumber_, init_, eventCount_, func_] := func[evaluateSingleEvent[ruleRadius, ruleNumber, #] &, init, eventCount]; RandomOrderCA[args___] := randomOrderCAFunc[args, Nest]; RandomOrderCAList[args___] := randomOrderCAFunc[args, NestList]; findLastEvent[eventNumber_, position_, eventsIndex_] := Module[{}, Max[Select[Lookup[eventsIndex, position, {-Infinity}], # < eventNumber &]] ]; getCausalLinks[eventNumber_, position_, eventsIndex_, size_, ruleRadius_] := Module[{}, DeleteCases[ findLastEvent[eventNumber, #, eventsIndex] -> eventNumber & /@ Mod[Range[position - ruleRadius, position + ruleRadius], size, 1], -Infinity -> _] ]; RandomOrderCACausalGraph[ruleRadius_, ruleNumber_, init_, eventCount_, opts___] := Module[{eventsIndex, eventPositions}, eventsIndex = KeySort @ Map[ Last, GroupBy[ Thread[ (eventPositions = Reap[RandomOrderCA[ruleRadius, ruleNumber, init, eventCount]][[2, 1]]) -> Range[eventCount]], First], {2}]; Graph[ Range[eventCount], Catenate[getCausalLinks[#, eventPositions[[#]], eventsIndex, Length[init], ruleRadius] & /@ Range[eventCount]], EdgeStyle -> ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", "EdgeStyle"], VertexStyle -> ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", "VertexStyle"], opts] ] randomInit[size_, onesFraction_] := RandomChoice[{1 - onesFraction, onesFraction} -> {0, 1}, size]; evaluateSingleEvent[ruleRadius_, ruleNumber_, init_] := evaluateEventAtPlace[ruleRadius, ruleNumber, init, Sow[RandomInteger[{1, Length[init]}]]]; evaluateEventAtPlace[ruleRadius_, ruleNumber_, init_, center_] := Module[{input, newCenterValue}, input = cyclicTake[init, Range[center - ruleRadius, center + ruleRadius]]; newCenterValue = CellularAutomaton[{ruleNumber, 2, ruleRadius}, input][[ruleRadius + 1]]; ReplacePart[init, center -> newCenterValue] ]; cyclicTake[list_, indices_] := cyclicPart[list, #] & /@ indices; cyclicPart[list_, index_] := list[[Mod[index, Length[list], 1]]]; SeedRandom[0]; RandomOrderCACausalGraph[1, 51, randomInit[10, 0.5], 200] |
Note that this is just a causal graph for a “single thread of history”, associated with a particular sequence of updating events. We can also imagine constructing a multiway causal graph that records the causal relationships both within and between different possible threads of history.
Dynamic Connectivity
Just as we can consider asynchronous updates in ordinary cellular automata, we can also consider them for graph cellular automata. But once we’re considering asynchronous updates on graphs, we can go still further, and consider not just updating “values at nodes” of a graph, but also the graph itself. And in this case, we’re basically dealing with the so-called Wolfram models of our Physics Project.
As a kind of bridge to such models, let’s consider using them to represent a majority graph cellular automaton. We imagine setting up a hypergraph where all that exists is connectivity of the hypergraph, so “values” in the cellular automata have to be represented by connectivity structures—say with a 0 corresponding to a unary hyperedge, and a 1 corresponding to a ternary one (binary hyperedges are used to make “spatial” connections in the hypergraph).
With this setup, the majority rule becomes a hypergraph transformation rule:
✕
hypergraphConsensusRule = {{{c, n1}, {c, n2}, {c, n3}, {n1}, {n2}, {n3, n3, n3}} -> {{c, n1}, {c, n2}, {c, n3}, {n1}, {n2}, {n3}}, {{c, n1}, {c, n2}, {c, n3}, {n1, n1, n1}, {n2, n2, n2}, {n3}} -> {{c, n1}, {c, n2}, {c, n3}, {n1, n1, n1}, {n2, n2, n2}, {n3, n3, n3}}}; RulePlot[ResourceFunction["WolframModel"][hypergraphConsensusRule]] |
Running this from a particular initial hypergraph, we see consensus achieved in a few steps:
✕
exampleColoredState = {{-1, 2}, {-1, 5}, {-1, 3}, {-2, 1}, {-2, 5}, {-2, 3}, {-3, 1}, {-3, 4}, {-3, 3}, {-4, 5}, {-4, 2}, {-4, 1}, {-5, 5}, {-5, 3}, {-5, 2}, {-6, 4}, {-6, 1}, {-6, 2}, {1, 1, 1}, {2}, {3}, {4, 4, 4}, {5}}; hypergraphConsensusRule = {{{c, n1}, {c, n2}, {c, n3}, {n1}, {n2}, {n3, n3, n3}} -> {{c, n1}, {c, n2}, {c, n3}, {n1}, {n2}, {n3}}, {{c, n1}, {c, n2}, {c, n3}, {n1, n1, n1}, {n2, n2, n2}, {n3}} -> {{c, n1}, {c, n2}, {c, n3}, {n1, n1, n1}, {n2, n2, n2}, {n3, n3, n3}}}; SeedRandom[35363]; ResourceFunction["WolframModelPlot"][#, ImageSize -> 150] & /@ ResourceFunction["WolframModel"][hypergraphConsensusRule, exampleColoredState, <|"MaxEvents" -> 20|>, "EventOrderingFunction" -> "Random"]["StatesList"] |
Here is a slightly larger example, that again succeeds in achieving consensus:
✕
randomThreeNetwork[nodeCount_, connectionCount_, whiteDensity_] := Module[{ nodes, connectedTriples, connectivityEdges, whiteCount, colors, colorEdges}, nodes = Range @ nodeCount; connectedTriples = Table[RandomSample[nodes, 3], connectionCount]; connectivityEdges = Catenate @ MapIndexed[Thread[{-#2[[1]], #}] &, connectedTriples]; whiteCount = Round[whiteDensity nodeCount]; colors = RandomSample @ Join[Table[0, nodeCount - whiteCount], Table[1, whiteCount]]; colorEdges = MapIndexed[If[# == 0, {#2[[1]]}, {#2[[1]], #2[[1]], #2[[1]]}] &, colors]; Join[connectivityEdges, colorEdges] ] hypergraphConsensusRule = {{{c, n1}, {c, n2}, {c, n3}, {n1}, {n2}, {n3, n3, n3}} -> {{c, n1}, {c, n2}, {c, n3}, {n1}, {n2}, {n3}}, {{c, n1}, {c, n2}, {c, n3}, {n1, n1, n1}, {n2, n2, n2}, {n3}} -> {{c, n1}, {c, n2}, {c, n3}, {n1, n1, n1}, {n2, n2, n2}, {n3, n3, n3}}}; inet = BlockRandom[SeedRandom[455454]; randomThreeNetwork[25, 50, 0.4]]; BlockRandom[SeedRandom[223152]; ResourceFunction["WolframModelPlot"][#, ImageSize -> 150] & /@ ResourceFunction["WolframModel"][hypergraphConsensusRule, inet, <|"MaxEvents" -> 20|>, "EventOrderingFunction" -> "Random"][ "StatesList"]] |
The particular rules we’re using here move around the unary and ternary self-loop hyperedges, but do not affect the “backbone” of the hypergraph. And just as for our earlier examples with ordinary graphs, the simple majority rule doesn’t always succeed in achieving consensus.
But now that we have formulated everything in terms of hypergraphs, it’s straightforward to have rules that not only change “colors” but also change the underlying structure. As a very simple example, consider adding a “structural rearrangement” case to our rule:
✕
hypergraphConsensusRule2 = {{{c, n1}, {c, n2}, {c, n3}, {n1}, {n2}, {n3, n3, n3}} -> {{c, n1}, {c, n2}, {c, n3}, {n1}, {n2}, {n3}}, {{c, n1}, {c, n2}, {c, n3}, {n1, n1, n1}, {n2, n2, n2}, {n3}} -> {{c, n1}, {c, n2}, {c, n3}, {n1, n1, n1}, {n2, n2, n2}, {n3, n3, n3}}, {{c1, n11}, {c1, n12}, {c1, n13}, {c2, n11}, {c2, n22}, {c2, n23}} -> {{c1, n11}, {c1, n22}, {c1, n13}, {c2, n11}, {c2, n12}, {c2, n23}}}; RulePlot[ResourceFunction["WolframModel"][hypergraphConsensusRule2]] |
Now in addition to moving around “colors”, the rule continually restructures the whole hypergraph:
✕
(*randomThreeNetwork[nodeCount_, connectionCount_, whiteDensity_] := \ Module[{ nodes, connectedTriples, connectivityEdges, whiteCount, colors, \ colorEdges}, nodes = Range @ nodeCount; connectedTriples = Table[RandomSample[nodes, 3], connectionCount]; connectivityEdges = Catenate @ MapIndexed[Thread[{-#2\ \[LeftDoubleBracket]1\[RightDoubleBracket], #}] &, connectedTriples]; whiteCount = Round[whiteDensity nodeCount]; colors = RandomSample @ Join[Table[0, nodeCount - whiteCount], \ Table[1, whiteCount]]; colorEdges = MapIndexed[If[# \[Equal] 0, {#2\[LeftDoubleBracket]1\ \[RightDoubleBracket]}, {#2[[1]], #2[[1]], #2[[1]]}] &, colors]; Join[connectivityEdges, colorEdges] ]*) (*hypergraphConsensusRule2={{{c,n1},{c,n2},{c,n3},{n1},{n2},{n3,n3,n3}\ }->{{c,n1},{c,n2},{c,n3},{n1},{n2},{n3}},{{c,n1},{c,n2},{c,n3},{n1,n1,\ n1},{n2,n2,n2},{n3}}->{{c,n1},{c,n2},{c,n3},{n1,n1,n1},{n2,n2,n2},{n3,\ n3,n3}},{{c1,n11},{c1,n12},{c1,n13},{c2,n11},{c2,n22},{c2,n23}}->{{c1,\ n11},{c1,n22},{c1,n13},{c2,n11},{c2,n12},{c2,n23}}};*) (*inet=BlockRandom[SeedRandom[455454];randomThreeNetwork[25,50,0.4]];*) (*BlockRandom[SeedRandom[223152]; \ ResourceFunction["WolframModel"][hypergraphConsensusRule2, inet, \ <|"MaxEvents" -> 50|>, "EventOrderingFunction" -> \ "Random"]["StatesPlotsList",ImageSize\[Rule]120]];*) SetReplace`WolframModelEvolutionObject[ Association[ "Version" -> 2, "Rules" -> {{{c, n1}, {c, n2}, {c, n3}, {n1}, {n2}, { n3, n3, n3}} -> {{c, n1}, {c, n2}, {c, n3}, {n1}, {n2}, { n3}}, {{c, n1}, {c, n2}, {c, n3}, {n1, n1, n1}, {n2, n2, n2}, { n3}} -> {{c, n1}, {c, n2}, {c, n3}, {n1, n1, n1}, { n2, n2, n2}, {n3, n3, n3}}, {{c1, n11}, {c1, n12}, {c1, n13}, { c2, n11}, {c2, n22}, {c2, n23}} -> {{c1, n11}, {c1, n22}, { c1, n13}, {c2, n11}, {c2, n12}, {c2, n23}}}, "MaxCompleteGeneration" -> 0, "TerminationReason" -> "MaxEvents", "AtomLists" -> {{-1, 16}, {-1, 21}, {-1, 15}, {-2, 2}, {-2, 8}, {-2, 15}, {-3, 8}, {-3, 16}, {-3, 15}, {-4, 20}, {-4, 12}, {-4, 18}, {-5, 10}, {-5, 18}, {-5, 20}, {-6, 23}, {-6, 4}, {-6, 15}, {-7, 24}, {-7, 6}, {-7, 10}, {-8, 18}, {-8, 5}, {-8, 1}, {-9, 13}, {-9, 25}, {-9, 6}, {-10, 19}, {-10, 8}, {-10, 15}, {-11, 10}, {-11, 3}, {-11, 6}, {-12, 10}, {-12, 13}, {-12, 1}, {-13, 13}, {-13, 1}, {-13, 17}, {-14, 7}, {-14, 13}, {-14, 12}, {-15, 23}, {-15, 7}, {-15, 22}, {-16, 7}, {-16, 9}, {-16, 23}, {-17, 19}, {-17, 5}, {-17, 11}, {-18, 5}, {-18, 18}, {-18, 1}, {-19, 11}, {-19, 5}, {-19, 14}, {-20, 21}, {-20, 10}, {-20, 23}, {-21, 25}, {-21, 17}, {-21, 5}, {-22, 12}, {-22, 4}, {-22, 25}, {-23, 2}, {-23, 24}, {-23, 17}, {-24, 9}, {-24, 20}, {-24, 12}, {-25, 18}, {-25, 22}, {-25, 17}, {-26, 25}, {-26, 19}, {-26, 22}, {-27, 2}, {-27, 17}, {-27, 21}, {-28, 22}, {-28, 5}, {-28, 23}, {-29, 12}, {-29, 18}, {-29, 22}, {-30, 24}, {-30, 22}, {-30, 4}, {-31, 25}, {-31, 11}, {-31, 24}, {-32, 23}, {-32, 4}, {-32, 13}, {-33, 25}, {-33, 22}, {-33, 16}, {-34, 13}, {-34, 1}, {-34, 23}, {-35, 23}, {-35, 11}, {-35, 24}, {-36, 4}, {-36, 6}, {-36, 13}, {-37, 13}, {-37, 15}, {-37, 10}, {-38, 20}, {-38, 19}, {-38, 3}, {-39, 11}, {-39, 9}, {-39, 25}, {-40, 25}, {-40, 16}, {-40, 1}, {-41, 8}, {-41, 6}, {-41, 17}, {-42, 14}, {-42, 7}, {-42, 20}, {-43, 8}, {-43, 6}, {-43, 2}, {-44, 18}, {-44, 13}, {-44, 3}, {-45, 10}, {-45, 13}, {-45, 7}, {-46, 22}, {-46, 10}, {-46, 4}, {-47, 8}, {-47, 23}, {-47, 1}, {-48, 4}, {-48, 25}, {-48, 8}, {-49, 18}, {-49, 13}, {-49, 23}, {-50, 25}, {-50, 18}, {-50, 6}, {1, 1, 1}, {2, 2, 2}, {3}, {4}, {5}, {6, 6, 6}, { 7, 7, 7}, {8}, {9}, {10, 10, 10}, {11}, {12}, {13, 13, 13}, {14, 14, 14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22, 22, 22}, {23, 23, 23}, {24, 24, 24}, {25}, {-29, 22}, {-29, 23}, {-29, 18}, {-15, 22}, {-15, 12}, {-15, 7}, {-12, 13}, {-12, 17}, {-12, 10}, {-13, 13}, {-13, 1}, {-13, 1}, {-18, 5}, {-18, 1}, {-18, 1}, {-8, 5}, {-8, 18}, {-8, 18}, {-50, 6}, {-50, 13}, {-50, 25}, {-36, 6}, {-36, 18}, {-36, 4}, {-9, 25}, {-9, 11}, {-9, 6}, {-39, 25}, {-39, 13}, {-39, 9}, {-26, 25}, {-26, 22}, {-26, 22}, {-33, 25}, {-33, 19}, {-33, 16}, {-40, 25}, {-40, 6}, {-40, 1}, {-9, 25}, {-9, 16}, {-9, 11}, {-5, 18}, {-5, 23}, {-5, 20}, {-29, 18}, {-29, 10}, {-29, 22}, {-45, 13}, {-45, 4}, {-45, 7}, {-32, 13}, {-32, 10}, {-32, 23}, {-50, 25}, {-50, 4}, {-50, 6}, {-48, 25}, {-48, 13}, {-48, 8}, {-6, 15}, {-6, 13}, {-6, 23}, {-37, 15}, {-37, 4}, {-37, 10}, {-17, 19}, {-17, 25}, {-17, 5}, {-33, 19}, {-33, 11}, {-33, 16}, {-40, 25}, {-40, 11}, {-40, 1}, {-31, 25}, {-31, 6}, {-31, 24}, {-35, 23}, {-35, 9}, {-35, 24}, {-16, 23}, {-16, 11}, {-16, 7}, {-10, 15}, {-10, 23}, {-10, 19}, {-6, 15}, {-6, 8}, {-6, 13}, {-37, 15}, {-37, 8}, {-37, 4}, {-6, 15}, {-6, 10}, {-6, 13}, {-3, 8}, {-3, 6}, {-3, 16}, {-41, 8}, {-41, 15}, {-41, 17}, {-22, 4}, {-22, 18}, {-22, 12}, {-36, 4}, {-36, 25}, {-36, 6}, {-49, 18}, {-49, 20}, {-49, 23}, {-5, 18}, {-5, 13}, {-5, 23}, {-21, 17}, {-21, 22}, {-21, 25}, {-25, 17}, {-25, 5}, {-25, 18}, {-1, 21}, {-1, 10}, {-1, 16}, {-20, 21}, {-20, 15}, {-20, 23}, {-36, 6}, {-36, 8}, {-36, 4}, {-43, 6}, {-43, 25}, {-43, 2}, {-47, 23}, {-47, 15}, {-47, 1}, {-20, 23}, {-20, 8}, {-20, 21}, {-30, 4}, {-30, 7}, {-30, 24}, {-45, 4}, {-45, 22}, {-45, 13}, {-39, 13}, {-39, 23}, {-39, 9}, {-5, 13}, {-5, 25}, {-5, 18}, {-49, 18}, {-49, 20}, {-49, 20}, {-4, 18}, {-4, 23}, {-4, 12}, {-21, 22}, {-21, 10}, {-21, 17}, {-46, 22}, {-46, 25}, {-46, 4}, {-21, 10}, {-21, 24}, {-21, 22}, {-7, 10}, {-7, 17}, {-7, 6}, {-47, 23}, {-47, 12}, {-47, 1}, {-4, 23}, {-4, 15}, {-4, 18}, {-39, 13}, {-39, 22}, {-39, 23}, {-45, 13}, {-45, 9}, {-45, 4}, {-2, 2}, {-2, 17}, {-2, 8}, {-23, 2}, {-23, 15}, {-23, 24}, {-32, 13}, {-32, 25}, {-32, 10}, {-5, 13}, {-5, 23}, {-5, 18}, {-21, 24}, {-21, 7}, {-21, 10}, {-30, 24}, {-30, 22}, {-30, 4}, {-20, 8}, {-20, 13}, {-20, 23}, {-48, 8}, {-48, 21}, {-48, 25}, {-22, 18}, {-22, 17}, {-22, 4}, {-25, 18}, {-25, 12}, {-25, 5}, {-39, 22}, {-39, 4}, {-39, 23}, {-46, 22}, {-46, 13}, {-46, 25}, {-8, 18}, {-8, 23}, {-8, 5}, {-4, 18}, {-4, 18}, {-4, 15}, {-16, 23}, {-16, 1}, {-16, 11}, {-34, 23}, {-34, 7}, {-34, 13}, {-31, 6}, {-31, 10}, {-31, 25}, {-11, 6}, {-11, 24}, {-11, 3}, {-24, 20}, {-24, 14}, {-24, 9}, {-42, 20}, {-42, 12}, {-42, 7}, {-21, 10}, {-21, 18}, {-21, 7}, {-29, 10}, {-29, 24}, {-29, 22}, {-7, 6}, {-7, 16}, {-7, 10}, {-3, 6}, {-3, 17}, {-3, 8}, {-8, 23}, {-8, 11}, {-8, 5}, {-16, 23}, {-16, 18}, {-16, 1}, {-21, 10}, {-21, 6}, {-21, 18}, {-31, 10}, {-31, 7}, {-31, 25}, {-9, 25}, {-9, 5}, {-9, 11}, {-17, 25}, {-17, 16}, {-17, 19}, {-20, 23}, {-20, 11}, {-20, 8}, {-8, 23}, {-8, 13}, {-8, 5}, {-3, 8}, {-3, 4}, {-3, 17}, {-37, 8}, {-37, 6}, {-37, 15}, {-29, 10}, {-29, 7}, {-29, 24}, {-31, 10}, {-31, 22}, {-31, 25}, {-46, 13}, {-46, 23}, {-46, 22}, {-8, 13}, {-8, 25}, {-8, 5}, {-17, 16}, {-17, 10}, {-17, 25}, {-1, 16}, {-1, 19}, {-1, 21}}, "EventRuleIDs" -> {0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, "EventInputs" -> {{}, {87, 85, 86, 45, 43, 44}, {35, 36, 34, 37, 39, 38}, {52, 53, 54, 23, 24, 22}, {150, 149, 148, 107, 108, 106}, {26, 25, 27, 117, 115, 116}, {76, 77, 78, 97, 98, 99}, { 118, 119, 120, 200, 202, 201}, {14, 13, 15, 178, 177, 176}, {134, 133, 135, 96, 95, 94}, {196, 195, 194, 143, 142, 144}, {18, 17, 16, 110, 109, 111}, {49, 51, 50, 210, 209, 211}, {212, 213, 214, 91, 92, 93}, {103, 104, 105, 48, 47, 46}, {30, 29, 28, 236, 238, 237}, {239, 241, 240, 263, 264, 265}, {7, 9, 8, 121, 122, 123}, { 65, 66, 64, 199, 198, 197}, {145, 146, 147, 218, 220, 219}, {62, 63, 61, 75, 74, 73}, {2, 3, 1, 58, 59, 60}, {283, 282, 281, 128, 127, 129}, {140, 139, 141, 301, 300, 299}, {90, 89, 88, 225, 226, 224}, {204, 203, 205, 288, 289, 287}, {284, 286, 285, 12, 10, 11}, {291, 292, 290, 136, 137, 138}, {333, 334, 332, 21, 19, 20}, {308, 309, 310, 330, 331, 329}, {320, 322, 321, 319, 318, 317}, {4, 6, 5, 67, 69, 68}, {227, 229, 228, 323, 324, 325}, { 339, 340, 338, 316, 315, 314}, {312, 313, 311, 235, 234, 233}, { 279, 280, 278, 295, 293, 294}, {351, 350, 352, 335, 337, 336}, { 193, 192, 191, 349, 347, 348}, {257, 259, 258, 102, 101, 100}, { 252, 253, 251, 33, 31, 32}, {71, 72, 70, 126, 124, 125}, {370, 368, 369, 222, 221, 223}, {343, 342, 341, 273, 274, 272}, {393, 392, 394, 398, 400, 399}, {416, 418, 417, 405, 404, 406}, {215, 216, 217, 243, 244, 242}, {376, 375, 374, 428, 429, 430}, {427, 425, 426, 267, 268, 266}, {419, 421, 420, 437, 438, 439}, {390, 391, 389, 450, 449, 451}, {444, 445, 443, 298, 297, 296}}, "EventOutputs" -> {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175}, {176, 177, 178, 179, 180, 181}, {182, 183, 184, 185, 186, 187}, {188, 189, 190, 191, 192, 193}, {194, 195, 196, 197, 198, 199}, {200, 201, 202, 203, 204, 205}, {206, 207, 208, 209, 210, 211}, {212, 213, 214, 215, 216, 217}, {218, 219, 220, 221, 222, 223}, {224, 225, 226, 227, 228, 229}, {230, 231, 232, 233, 234, 235}, {236, 237, 238, 239, 240, 241}, {242, 243, 244, 245, 246, 247}, {248, 249, 250, 251, 252, 253}, {254, 255, 256, 257, 258, 259}, {260, 261, 262, 263, 264, 265}, {266, 267, 268, 269, 270, 271}, {272, 273, 274, 275, 276, 277}, {278, 279, 280, 281, 282, 283}, {284, 285, 286, 287, 288, 289}, {290, 291, 292, 293, 294, 295}, {296, 297, 298, 299, 300, 301}, {302, 303, 304, 305, 306, 307}, {308, 309, 310, 311, 312, 313}, {314, 315, 316, 317, 318, 319}, {320, 321, 322, 323, 324, 325}, {326, 327, 328, 329, 330, 331}, {332, 333, 334, 335, 336, 337}, {338, 339, 340, 341, 342, 343}, {344, 345, 346, 347, 348, 349}, {350, 351, 352, 353, 354, 355}, {356, 357, 358, 359, 360, 361}, {362, 363, 364, 365, 366, 367}, {368, 369, 370, 371, 372, 373}, {374, 375, 376, 377, 378, 379}, {380, 381, 382, 383, 384, 385}, {386, 387, 388, 389, 390, 391}, {392, 393, 394, 395, 396, 397}, {398, 399, 400, 401, 402, 403}, {404, 405, 406, 407, 408, 409}, {410, 411, 412, 413, 414, 415}, {416, 417, 418, 419, 420, 421}, {422, 423, 424, 425, 426, 427}, {428, 429, 430, 431, 432, 433}, {434, 435, 436, 437, 438, 439}, {440, 441, 442, 443, 444, 445}, {446, 447, 448, 449, 450, 451}, {452, 453, 454, 455, 456, 457}, {458, 459, 460, 461, 462, 463}, {464, 465, 466, 467, 468, 469}, {470, 471, 472, 473, 474, 475}}, "EventGenerations" -> {0, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 3, 2, 2, 4, 4, 2, 3, 5, 5, 1, 5, 4, 3, 3, 6, 6, 2, 4, 1, 5, 4, 7, 6, 3, 8, 5, 7, 9, 4}]]["StatesPlotsList", ImageSize -> 120] |
Ultimately this is something very close to our Physics Project. We can imagine encoding values in certain localized structures in our hypergraph—just as we imagine that particles (like photons or quarks) in physics correspond to something like “topological obstructions” in the hypergraph that represents physical space. And in these terms one can imagine formulating questions about consensus in terms of some kind of generalization of conservation laws for particles.
What’s Left to Figure Out
The problem of distributed consensus is in many ways a tantalizing one. The most obvious approach to it—with the simple majority rule—gets a fair distance, but has definite limitations. And as we’ve seen here, in specific, well-controlled situations there are much better rules—and setups—that can be used. But we don’t yet know robust, general, efficient solutions.
One might imagine that to find one would just take “inventing the right algorithm” or “writing the right program”. But I think it’s unlikely that this kind of traditional “engineering” approach will bear fruit. Instead, I think the most promising path forward is to try to “mine the computational universe” for appropriate rules, in the style suggested by A New Kind of Science. And I expect that the best rules will be ones that don’t have “readily human understandable” behavior, but instead “do their job” in surprising and perhaps elaborate ways that we would never anticipate.
How can we search for these rules? The most important challenge is to have a good definition of our objective with them. There’ll always be tradeoffs. How important is an occasional failure of consensus? How important are different features of the distribution of times to reach consensus? How much do we care about the complexity of the rules? And so on.
So given an objective, what’s the best way to actually conduct the search? My consistent experience in mining the computational universe has been that the best results come from the most straightforward strategies. More elaborate strategies tend to make implicit assumptions, that prevent the discovery of truly surprising or unexpected results.
A good start is just to do an exhaustive search. It’s important to be very careful in pruning it, lest one miss the “unexpected way” that a system can achieve some particular objective. Is it likely to be possible to “incrementally improve” rules, say with genetic algorithms? I’m not especially hopeful. Because to make serious use of what the computational universe has to offer, our rules are likely to need to show computational irreducibility—and this makes it essentially inevitable that the “landscape” of “nearby” rules will be irreducibly “rough”, making any computationally bounded incremental improvement unlikely to be successful.
Could we perhaps train a machine learning system to suggest useful rules? It may be possible to do some pruning of candidate rules this way, although inevitably there is some risk of missing the “unexpected rule”. And in general the presence of computational irreducibility makes it implausible that an incrementally trained machine learning system will be extremely successful.
One might have thought that something like exhaustive search could never find useful results, because the space of rules is in some sense just too big. But a key discovery from my explorations of the computational universe is that in fact there are surprisingly simple rules that can show rich and sophisticated behavior. And this makes it plausible that one could discover a good solution to the problem of distributed consensus just by appropriately searching the computational universe—and “mining” some rule that can then be used quite generally as a basis for all sorts of practical distributed consensus.
Some Historical Background
Investigations of what amounts to distributed consensus have a fairly long, if seemingly scattered history. As soon as even somewhat complex electromechanical and electronic systems were being built, the question arose of how to make the whole system behave in a reliable way even if some of its components were unreliable. The simplest answer was to have redundancy, and somehow to “take a vote”, and go with the “majority” decision. In the earliest computers (and later particularly in aerospace systems) such a vote was typically between copies of more-or-less complete systems.
But by the beginning of the 1950s there was increasing interest in moving the voting down to the level of smaller components. And in 1952 John von Neumann, in his “Probabilistic Logics and the Synthesis of Reliable Organisms from Unreliable Components”, began to give a mathematical structure for analyzing this. Central to his discussion was what he called the “majority organ”, which is essentially a component for computing the Boolean majority function:
von Neumann imagined building up everything (including the majority organ) from what he called “Sheffer organs”—or what we would now call Nand gates. And as an example of the need for redundancy he says “Consider a computing machine with 2500 vacuum tubes, each actuated on average every 5 microseconds. Assume a mean free path of 8 hours between errors is desired.” Somewhat mysteriously he then assumes the very high (even for the time) error rate
Fortunately for the history of computing von Neumann’s example error rate turned out to be very wide of the mark—and once vacuum tubes were replaced by solid-state devices the problem of component failures in computers more or less disappeared (though it reappears in modern thinking about molecular-scale computing). In communications systems (and, to a lesser extent, storage devices) errors were always still important, and this led by the 1960s to increasing work on error-correcting codes.
But perhaps because the transition to solid-state electronics happened more slowly in the Soviet Union interest in the problem of getting reliable results from unreliable components lasted much longer there. And while in the West, such issues tended to be thought of as matters of applied engineering, in the Soviet Union they were much more considered a matter of pure mathematics. (In the West, there was also in the 1950s the rather amorphous idea of “cybernetics”, which was initially considered ideologically inappropriate in the Soviet Union, but was later adopted there, and turned in a much more mathematical direction.)
But in addition to questions coming essentially from the construction of machines (or brains), there was an initially quite separate strand of questions coming from physics. A very basic observation in physics is that materials undergo so-called phase transitions. For example, as one heats up water, there is a definite temperature at which all the molecules “together decide” to make the transition from liquid to gas.
A somewhat more subtle version of the same kind of thing occurs in magnetic materials like iron. Below a certain temperature, electron spins associated with all the atoms in the material tend to line up. But in what direction? Somehow a “consensus direction” is selected—that defines the macroscopic direction of the magnetic field produced by the material. And in the 1920s the Ising model was suggested as a simple model for this.
But before getting to phase transitions, there was a more basic physics question of how microscopic discrete elements like atoms could in general lead to macroscopic phenomena. And a key part of this question had to do with understanding the motion of molecules and how this could lead to “thermodynamic equilibrium”. The whole story of the foundations of “statistical mechanics” got quite muddled (and I think it’s only quite recently, with computation-based ideas, that we’ve finally been able to properly sort it out). But particularly in the first few decades of the 1900s the key idea was thought to be ergodicity: essentially the notion that the equations of motion of molecules will lead them eventually to visit all possible states of a system, thereby, it was argued, making their behavior seem random.
It was difficult to establish ergodicity mathematically. But beginning around the 1930s this was a major emphasis of the field of dynamical systems theory. Meanwhile, there were also difficulties in understanding mathematically how phase transitions could occur. And one point of contact was that when there’s a phase transition, ergodicity effectively has to be broken: the spins in a magnet end up in a particular direction, and don’t visit all directions.
At the beginning of the 1960s there was a convergence in Moscow of a considerable number of top Soviet mathematicians (notably including Andrei Kolmogorov) who were variously working on statistical mechanics, ergodic theory, dynamical systems—and some of the mathematical sequelae of cybernetics. And one of the pieces of work that emerged was a paper in 1968 by a then-young math-competition-winning mathematician named Andrei Toom.
The (translated) title of the paper is “A Family of Uniform Nets of Formal Neurons”. The paper is cast in terms of formal probability theory and the study of Markov chains. But basically it’s a construction of what amounts to a probabilistic cellular automaton, and a proof that even though it’s probabilistic, certain aspects of its behavior are “non-ergodic” and effectively deterministic. (It’s notable that in 1963 Toom had done another construction: of what’s now called the Toom–Cook algorithm for fast multiplication of integers with many digits.)
In traditional statistical mechanics (which was somewhat distinct from ergodic theory) the original focus was on studying “equilibrium” systems, in which different possible configurations (say of the Ising model) occurred with particular weightings. But by the 1950s—especially in work at Los Alamos—the idea arose of sequentially “Monte Carlo” sampling these configurations on a computer. And in 1963 Roy Glauber suggested thinking of the actual dynamics of the Ising model in terms of sequential probabilistic updating of spins.
Meanwhile, somewhat separately, there was increasing study—particularly by American mathematicians such as Frank Spitzer—of the probability theory of collections of random walks, often referred to as “interacting particle systems”. And one of the main results was that as soon as nonzero probabilities were involved, ergodicity was typically found.
Apparently independent of these developments the Moscow group in 1969 produced a paper entitled “Modeling of Voting with Random Error”. It featured a calculation done on an “electronic computing machine” (“ЭВМ” in Russian) of the probabilistic evolution of a majority model (and quite likely the machine used was a base-3 Setun computer developed by the mathematician Sergei Sobolev):
The paper concluded that in 1D, the model was probably always ergodic, but in 2D, for sufficiently small noise level, it might not be.
In 1971 Roland Dobrushin (a student of Kolmogorov’s) connected the investigation of ergodicity in these networks with phase transitions in Ising models—which helped define the program of research at his “Laboratory of Multi-component Random Systems” at the “Institute for Problems of Information Transmission” that brought together the Soviet cybernetics tradition (with its work on things like neural nets, Markov chains and formal computability theory) with international work on mathematical physics and ergodic theory.
A typical product of this was the 1976 conference organized by Dobrushin (along with Toom and others) nominally entitled “Locally Interacting Systems and Their Application in Biology”—but actually with very little biology in sight, and steeped in sophisticated mathematics, about things like Markov fields, Gibbs measures and algorithmic unsolvability.
A key question that had emerged was whether a homogeneous array of probabilistic elements (i.e. a probabilistic cellular automaton) could consistently and deterministically store information, or whether inevitably there would be ergodicity that would destroy it.
In 1974 Toom showed that a multidimensional probabilistic cellular automaton could do this—essentially just using a majority rule on a non-symmetric neighborhood to generate a “global consensus state”, as we showed above. But the question still remained of whether anything similar was possible in 1D.
Phase transitions in traditional statistical physics don’t happen in 1D if microscopic reversibility is assumed—making it seem like it might be impossible to maintain multiple distinct global states. But in 1976 Boris Tsirelson pointed out that at least with a hierarchical arrangement of interactions one could in fact achieve long-range order in a probabilistic 1D system:
Soon thereafter Georgii Kurdyumov—having at first discussed the undecidability of ergodicity in the 1D case—then argued that there should be a pure cellular automaton that would work.
And in 1978, Peter Gacs, Georgii Kurdyumov and Leonid Levin (all of whom had been in the Kolmogorov orbit) wrote a short paper entitled “One-Dimensional Uniform Arrays That Wash Out Finite Islands” that introduced the “GKL rule” we discussed above. They didn’t show any actual pictures of the behavior of the system, but they gave a proof that in the deterministic case the rule leads to two distinct phases, corresponding to the two distinct consensus states. And then they showed the result of a simulation that suggested that even when a certain amount of noise was added the two consensus states would still be reached:
However, what had become known as the “positive probability conjecture” implied that there couldn’t in the end actually be non-ergodicity in the 1D case. But in 1983 Peter Gacs came up with what he claimed was a counterexample based on an elaborate construction described in many pages of pseudocode:
It took many years for the proof of this to clarify, with Gacs publishing a final version only in 2001.
Meanwhile, there’d been several other developments. Starting in 1982 my own discoveries about deterministic cellular automata had made 1D cellular automata much more prominent—and had made physicists aware of them. (As it happens, Gacs announced his 1983 result at a conference at Los Alamos I had organized, that I believe was the first ever to be devoted to cellular automata.)
Around the end of the 1980s there was then a burst of activity by several leading mathematical physicists devoted to applying methods from statistical mechanics (and especially from areas like directed percolation theory) to the analysis of probabilistic cellular automata. There was awareness of Toom’s work, and for example connections were made between PDEs (like the KPZ equation) and things like the average behavior of “domain walls” in the probabilistic Toom rule.
One can view the process of coming to consensus in a 1D cellular automaton as being like a “density classification” problem: if the initial density of 1s is above , classify as 1, otherwise classify as 0. And starting in the 1990s density classification in 1D (deterministic) cellular automata was used as a prime example of a place where algorithms might be discovered by genetic or other search techniques.
In a quite different direction, work on cryptographic protocols in the 1980s had highlighted various models for achieving consensus between agents, even in the presence of adversarial efforts. Meanwhile, there was increasing interest in formal models of parallel computation, their computational complexity, and their fault tolerance. And by the early 2000s there was work being done (notably by Nick Pippenger) on connections between these things and what was known about probabilistic cellular automata, and the possibility of deterministic computation in them.
And this pretty much takes us to the current time—and the new applications of distributed consensus in blockchain-like systems. And here it’s interesting to see the rather different intellectual lineages of two different efforts: Yilun Zhang at NKN coming from a statistical physics/computational neuroscience/information theory tradition, and Serguei Popov at Iota coming from probability theory and stochastic processes—as a great-grand-student of Kolmogorov.
Some Personal Notes
Of all the work I’ve done on cellular automata and related systems over the past more than forty years rather little has been devoted to the topics I’ve been discussing here. There are a couple of reasons for this. The most important is that my main interest has been in studying the remarkable richness and complexity that cellular automata and other very simple programs can generate—and in building a paradigm for thinking about this. Yet something like distributed consensus is at some level about getting rid of complexity rather than generating it. It’s about taking whatever complicated initial state there may be, and somehow reducing it to a “simple consensus”, where there’s none of that complexity.
Another point is that at least some of what we’ve discussed here has concerned probabilistic systems, which I’ve tended to ignore on the grounds that they obscure the fundamental phenomena of the computational universe. If one didn’t know that simple, deterministic rules could do complex things, one might imagine that would have to inject randomness from the outside to make this happen. But the fact is that even very simple, deterministic rules can produce highly complex behavior, that in fact often makes its own apparent randomness.
So that means there’s no need to “go outside the system”—and to introduce external randomness or probabilities. And in fact such probabilities tend to have the effect of hiding whatever complexity is intrinsically produced—even if they do “smooth out average behavior” to make things more accessible to traditional mathematical methods.
There are actually some new perspectives on this from our Physics Project. First, the project makes clear the crucial interplay between underlying computational irreducibility, and effectively probabilistic large-scale behavior that can be treated in computationally reducible ways. And second, the project suggests that instead of thinking about probabilities for different behavior, one should think about the whole multiway system of possible behaviors, and its overall properties.
It so happens that when I first became interested in the origins of complexity the first two kinds of models I thought about were spin systems (like the Ising model) and neural nets. But as I tried to simplify things I ended up inventing for myself what I soon found out were one-dimensional cellular automata. Much of my effort was then concentrated in doing experiments on these systems, and in developing theories and principles around the results I found.
But I also tried to do my homework on earlier work. Cellular automata had gone by many names. But leafing through the (then on paper) Science Citation Index I slowly began to piece together some of their history, and soon found things like the paper introducing the GKL rule. In my first long paper on cellular automata (entitled “Statistical Mechanics of Cellular Automata” and published in 1983) I have just a few paragraphs about “probabilistic rules”, discussing ergodicity and phase transitions, and referencing the GKL paper.
Over the years I accumulated five thick folders of copies of papers that I labeled as being about “Stochastic Cellular Automata”. And I also purchased books. And in writing this piece I was able to just pull off my shelf things like Dobrushin’s 1976 book. And in one of those manifestations of the smallness of the scientific world, when I looked in the front of my (apparently used) copy of this book yesterday, what should I see there but the signature of Frank Spitzer—who I had just been writing about!
When I was writing A New Kind of Science, both probabilistic cellular automata and what amounts to the problem of consensus did come up, and there are several mentions of such things in the book, notably in connection with my discussion of the “Origins of Discreteness”:
But these things were never a big emphasis of my work, and so it’s been interesting here to trace just how the methods I’ve developed can be applied to them, and to realize that—despite its slightly different presentation—the problem of distributed consensus is in many ways actually a quintessential question that can be addressed by the kind of science that’s derived from studying the computational universe.