cf. 『Mathematica複雑系のシミュレーション』R.J.ゲイロード・P.R.ウェリン著
自己組織臨界性(self-organized critical) SOAにあるものは、わずかな系の変化(たとえば一粒の砂)が加わるだけで、激変に導びく連鎖反応を引き起こす。
例。地学(地震、火山爆発)、天文学(パルサーの自然周期の突然増加)、経済学(株式相場のうらぎ)、生態系(進化)、流体力学(乱流)
条件
ルールspread:
Sandpile[snd_, m_] :=
Module[{absorbBC, landscape, spread, rule, foreststeps},
absorbBC =
(Prepend[Append[Map[Prepend[Append[#, 0], 0] &, #],
Table[0, {Length[#] + 2}]],
Table[0, {Length[#] + 2}]]) &;
landscape = absorbBC[RandomInteger[{3, 4}, {snd, snd}]];
While[Max[landscape] < 5,
randx = RandomInteger[ {2, snd + 1}];
randy = RandomInteger[ {2, snd + 1}];
landscape[[randx, randy]]++
];
spread[r_, neighbors_] := Module[{t},
If[r == 0, 0,
t = Total[Floor[neighbors/5.0]];
If[r < 5, r + t, r - 4 + t]]
];
rule = {
{{_, n_, _}, {w_, c_, e_}, {_, s_, _}} :>
spread[c, {n, w, e, s}]};
foreststeps =
CellularAutomaton[rule, landscape, m]];
sandsteps = Sandpile[50, 100];
ListDensityPlot/@Take[sandsteps, {10,20,2}]
ListDensityPlot/@Take[sandsteps, {40,60,4}]
ListDensityPlot/@Take[sandsteps, {90,100,2}]