Jason Cawley
Wolfram Science Group
Phoenix, AZ USA
Registered: Aug 2003
Posts: 712 |
Welcome.
I'm afraid what you have said so far is not remotely clear enough to address your question. I'll guess about what you are trying to do and then you can correct me if I am wrong.
I get that you have a space of rules that depend on a six cell neighborhood. I presume by "2 by 3" you mean this is a 1D system that depends on nearest neighbors and the current and previous step in time. In the Mathematica scheme of things, that means a k=2, r=1, s=2 CellularAutomaton. S being an optional fourth argument to the first argument of the CellularAutomaton function, allowing dependence on prior steps in time.
When you say "rule shape", I assume you mean some sort of pattern satisfied by different slices through the whole space of such rules. The whole space is 2^2^6 rules, which is about 1.8x10^19 rules all told. Clearly that is far too large a space to look at them all, so whatever you do you will be sampling. Any large subset of that large a space will have its own variety rather than one specific complexity class etc.
So that other people have some idea what we are talking about, here are a few lines of Mathematica for looking at these -
numrules = 2^(2^6);
With[{rule = RandomInteger[numrules - 1]}, ArrayPlot[CellularAutomaton[{rule, 2, 1, 2}, {{{1}, {1}}, 0}, {{-1, 100}, All}], PlotLabel -> rule]]
That evolves a random one of these from the simple initial condition of 2 steps of {1} in a field of 0s, for 100 steps. Notice the form of the last argument, with the steps to be returned starting at -1 - that let's us see the whole initial condition as the first 2 lines.
From random initial conditions you would instead use -
With[{rule = RandomInteger[numrules - 1], randominit = Table[RandomInteger[{0, 1}, 100], {2}]}, ArrayPlot[CellularAutomaton[{rule, 2, 1, 2}, randominit, {{-1, 100}, All}], PlotLabel -> rule]]
One additional test or display method I like to use is to see the time series you get by treating 1s as +1 and 0s as -1 and totaling across each line of the array, as Wolfram does in his stock model. The idea is that class 2 behavior shows up very clearly in such a "reduced mapping", and one can see the sort of "noise" the system gives. Here is a way to do that in Mathematica terms -
series[table_]:= (# - First[#]) &[Total /@ (table /. (0 -> -1))]
With[{rule = RandomInteger[{0, numrules - 1}], randominit = RandomInteger[{0, 1}, 100]}, Row[{ArrayPlot[ Take[#, -100], PixelConstrained -> 3, PlotLabel -> rule], ListLinePlot[series[#], ImageSize -> 300]}]& [ CellularAutomaton[{rule, 2, 1, 2}, randominit, {{-1, 200}, All}] ] ]
Where I've taken only the last 100 steps for the ArrayPlot, to keep the image similar in size to the time series representation.
Just as a side note, these are funky, I like them. Most seem to do complicated things, with a smattering of class 2s.
Report this post to a moderator | IP: Logged
|