Mathematica 9 is now available

Documentation / Mathematica / Mathematicaブック / Mathematicaを使った高等数学 / データの数値処理  /

3.8.6 セルオートマトン

セルオートマトンは配列中のセルの値が局所ルールによって離散的なステップで変更される多くのシステムを表現する便利な方法を提供する.

セルオートマトンの進化の生成

これは与えられたリストから始め,ルール304ステップ進化させる.

In[1]:= CellularAutomaton[30, {0, 0, 0, 1, 0, 0, 0}, 4]

Out[1]=

これはセルオートマトンの進化を表示する簡単な関数を定義する.

In[2]:= CAPlot[data_] := ListDensityPlot[Reverse[Max[data] - data],
AspectRatio -> Automatic, Mesh -> False, FrameTicks -> None]

これはルール30の進化をランダムな初期条件から始めて100ステップまで表示する.

In[3]:= CAPlot[CellularAutomaton[30, Table[Random[Integer], {250}],
100]]

Out[3]=

1次元のセルオートマトンにおける初期条件の指定方法

初期値の明示的なリストを与えると,CellularAutomatonはリスト中の要素を反復させることでシステムのすべてのセルに対応すると考える.

最後のセルの右近傍は始まりに当たる.

In[4]:= CellularAutomaton[30, {1, 0, 0, 0, 0}, 1]

Out[4]=

小さな「種」区域を安定した「背景」に重ねるように初期条件を設定すると便利なことがよくある.デフォルトは,CellularAutomatonは指定された進化ステップ数で作られるパターンの大きさをカバーするに足る背景を自動的に埋める.

これはルール301個の黒いセルを含む初期条件から進化する様子を示している.

In[5]:= CAPlot[CellularAutomaton[30, {{1}, 0}, 100]]

Out[5]=

これは{1,0,1,1}ブロックの繰返しからなる背景上で,ルール30{1,1}という種で構成される初期条件から進化する様子を示している.

In[6]:= CAPlot[CellularAutomaton[30, {{1, 1}, {1, 0, 1, 1}}, 100]]

Out[6]=

構造間の相互作用を研究する際は特に,特定のブロックが特定のオフセットで置かれているセルオートマトンの初期条件を指定したいことがある.

これはオフセットの黒いセルという初期条件を設定する.

In[7]:= CAPlot[CellularAutomaton[30,
{{{ {1}, {-40} }, {{1}, {40}}}, 0}, 100]]

Out[7]=

1次元のセルオートマトンのルール指定

最も単純な場合は,セルオートマトンは各セルにk個の可能な値あるいは""を許容し,各辺で最高rまでの近傍を含むルールを持つ."ルール番号" nの各桁の数字は各近傍の可能な設定において新たなセルが何色になるかを指定する.

これは単一の近傍を1ステップ進化させる.

In[8]:= CellularAutomaton[30, {1,1,0}, 1]

Out[8]=

これはのセルオートマトンの8つの可能な近傍である.

In[9]:= Table[IntegerDigits[i,2,3],{i,7,0,-1}]

Out[9]=

これは8つの近傍のそれぞれの中央セルの新たな色を示す.

In[10]:= Map[CellularAutomaton[30, #, 1][[2,2]]&, %]

Out[10]=

ルール30によると,このシーケンスは数302進法表現での各桁の数字に対応する.

In[11]:= FromDigits[%, 2]

Out[11]=

これはの一般ルールでルール番号921408を実行する.

In[12]:= CAPlot[CellularAutomaton[{921408, 3, 1}, {{1}, 0}, 100]]

Out[12]=

一般的なセルオートマトンのルールでは,ルール番号の各桁の数字が個のセルの可能な近傍が何色になるかを指定する.どの数字がどの近傍に当たるのかが知りたければ近傍中のセルを数字の桁とみなせばよい.のセルオートマトンでは数字はneig . k^2, k, 1によって近傍中の要素neigのリストから得られる.

totalistic」なセルオートマトンを考慮するとよいこともある.「totalistic」なセルオートマトンではセルの新たな値が近傍の値の合計のみに依存する.「totalistic」なセルオートマトンはルール番号あるいは各桁の数字が例えばneig . 1, 1, 1から得られるように,与えられた総和の値で近傍を参照する"コード"で指定することができる.

一般に,CellularAutomatonを使っていかなる重みのシーケンスを使ったルールでも指定することができる.これとはまた別の便利な点にk, 1, kがある.これはouter totalisticルールを与える.

これはコード番号867totalisticルールを実行する.

In[13]:= CAPlot[CellularAutomaton[{867, {3, 1}, 1}, {{1}, 0}, 100]]

Out[13]=

領域のルールはオフセットがからまでのすべてのセルを含む.時には特定のオフセットのセルだけを含むルールを考えると便利なことがある.そのような場合は,単一のrをオフセットのリストで置換するとよい.

任意のセルオートマトンルールはブール関数に対応すると考えることができる.最も単純な例として,AndまたはNorのような基本的なブール関数は2つの引数を取る.これはセルオートマトンのルールを使ってオフセット{{0}, {1}}であると指定することができる.より高次元のセルオートマトンを扱う上での互換性のために,例え1次元のセルオートマトンであってもオフセットは常にリストで与える点に注意のこと.

これはセルが2つの近傍ルール番号7の真理値表を生成する.このルールはブール関数Nandであることが分かる.

In[14]:= Map[CellularAutomaton[{7, 2, {{0}, {1}}}, #, 1][[2, 2]] &,
{{1, 1}, {1, 0}, {0, 1}, {0, 0}}]

Out[14]=

ルール番号はセルオートマトンルールの非常に簡潔な指定方法を提供する.しかし,各可能な近傍に適用すべき明示的関数を与えるルールを指定する方がより便利なことがある.

これはルールがモジュロ4の各近傍のすべての値を追加する追加的セルオートマトンを実行する.

In[15]:= CAPlot[CellularAutomaton[
{Mod[Apply[Plus, #], 4]&, {}, 1}, {{1}, 0}, 100]]

Out[15]=

この関数にはステップ数に等しい第2引数が与えられている.

In[16]:= CAPlot[CellularAutomaton[
{Mod[Apply[Plus, #] + #2, 4]&, {}, 1}, {{1}, 0}, 100]]

Out[16]=

関数でルールを指定する場合,セルの値は整数ではなくてもよい.

In[17]:= CAPlot[CellularAutomaton[
{Mod[1/2 Apply[Plus, #], 1] &, {}, 1}, {{1}, 0}, 100]]

Out[17]=

記号的にすることもできる.

In[18]:= Simplify[CellularAutomaton[{Mod[Apply[Plus, #], 2] &,
{}, 1}, {{a}, 0}, 2], a Element Integers]

Out[18]=

保存ステップの選択

これはルール305ステップ,最後のステップだけを保存して実行する.

In[19]:= CellularAutomaton[30, {{1}, 0}, 5, -1]

Out[19]=

これは最後の2ステップを保存する.

In[20]:= CellularAutomaton[30, {{1}, 0}, 5, -2]

Out[20]=

ステップ指定Takeを使ってリストから要素を取り出すのに似ている.違いは,セルオートマトンの初期条件がステップ0とみなされる点である. ... の形式のステップ指定はどれも追加リストに埋め込まれていなければならない.

セルオートマトンのステップ指定

これは100ステップ進化するが1つ置きのステップしか保存しない.

In[21]:= CAPlot[CellularAutomaton[30, {{1}, 0}, 100, {{1, -1, 2}}]]

Out[21]=

保存するステップとセルの選択

セルオートマトンの進化の過程でどのステップを保存するかを指定できるように,どのセルを保存するかも指定できる., , ... , blistのような初期条件を与えると,はどのセルを保存するかを指定するためにオフセットが0であると解釈される.

セルオートマトンのセル指定

これはすべてのステップを保存するがオフセットが左側に20より大きいセルは除去する.

In[22]:= CAPlot[CellularAutomaton[30, {{1}, 0}, 100,
{All, {-20, 100}}]]

Out[22]=

これは中央の列のセルだけを保存する.

In[23]:= CellularAutomaton[30, {{1}, 0}, 20, {All, {0}}]

Out[23]=

, , ... , blistのような初期条件を与えると,CellularAutomatonは常に,あたかも無限のセルがあるかのように効果的にセルオートマトンを行う., のようなを使うことで,CellularAutomatonからまでの特定のオフセットのセルだけを出力に含むように指示することができる.CellularAutomatonはデフォルトにより背景blistと同じままには決してならない値になるだけ十分に離れたセルを含む.

一般に,領域rのセルオートマトンのルールが与えられると,両側にr tの距離のセルは原則としてシステムの進化に影響される.Allとするとすべてのセルが含まれる.デフォルト設定のAutomaticの場合は値が事実上blistと同じ値に留まるセルはカットされる.

デフォルトにより,常に黒になるとは限らない部分のみが保存される.

In[24]:= CAPlot[CellularAutomaton[225, {{1}, 0}, 100]]

Out[24]=

Allにするとこの領域内でセルオートマトンに影響されるすべてのセルが含まれる.

In[25]:= CAPlot[CellularAutomaton[225, {{1}, 0}, 100, {All, All}]]

Out[25]=

CellularAutomatonは任意次数に直接一般化される.

高次元のルール指定

これは2次元9近傍コード797totalisticなルール指定である.

In[26]:= code797 = {797, {2, 1}, {1, 1}};

これは進化におけるステップ01を与える.

In[27]:= CellularAutomaton[code797, {{{1}}, 0}, 1]

Out[27]=

これは進化におけるステップ70を与える.

In[28]:= CAPlot[First[CellularAutomaton[code797, {{{1}}, 0},
70, -1]]]

Out[28]=

これは軸に沿ったスライスの全ステップを示す.

In[29]:= CAPlot[Map[First,
CellularAutomaton[code797, {{{1}}, 0}, 70,
{All, {0}, All}]]]

Out[29]=



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.