-1

書籍Modeling Cellular automata Simulations with mathematicaで、著者は次のコードを使用して、2 次元格子でセル オートマトンをシミュレートしています。

Moore Neighborhood からの更新ルールは次のとおりです。

update[site, N, E, S, W, NE, SE, SW, NW]

ここで、N = 北、E = 東、S = 南、W = 西、NE = 北東、SE = 南東、SW = 南東、NW = 北西。これらの引数は、Moor Neighbourhood の最も近い隣人の値を表します。これらのルールを適用するには、以下のコードを使用します。

Moore[func_, lat_]:= MapThread[func,Map[RotateRight[lat,#]&,
{{0,0},{1,0},{0,-1},{-1,0},{0,1},
{1,-1},{-1,-1},{-1,1},{1,1}}],2]

次のような表の場合 (本の 144 ページ)

pasture= Table[Floor[Random[]+(preyDensity+predDensity)]*
Floor[1+Random[]+predDensity/(preyDensity+predDensity)],{n},{n}]/. 
2:>{RND,Random[Integer, {1,3}],Random[Integer,{1,5}]}

RND:= Random[Integer, {1,4}]

彼は次の更新ルールを使用しています

update[{_,0,0},_,_,_,_,_,_,_,_]  := {RND, 3,5}

私の質問は: 次のような 4 次元のテーブルを使用して? 次の更新ルールも適用できますか?

InitialMatrix[x_, y_, age_, disease_] :=
  ReplacePart[
    Table[3, {x}, {y}, {age}, {disease}], {{_, _, 1, _} -> 
  0, {_, _, 2, 1} -> 
  Floor[dogpopulation*0.2/cellsno], {_, _, 2, 3} -> 
  Floor[dogpopulation*0.05/cellsno], {_, _, 3, 1} -> 
  Floor[dogpopulation*0.58/cellsno], {_, _, 3, 3} -> 
  Floor[dogpopulation*0.15/cellsno]}] /. 
  3 :> If[RandomReal[] > 0.2, 0, RandomInteger[{1, 2}]];


update[{{x_,0,0},{y_,z_,w_},{a_,b_,c_}},_,_,_,_,_,_,_,_] :=
                                            {{x-1,0,0},{y+z,0,w},{a,b,c}}

これは、テーブルを使用してセル オートマトンを操作する方法の例です。私はそのようなことをすることができますか?それとも私が間違っていますか?

テーブルを編集する

テーブルを以下のコードに変更すると、上記の更新ルールを使用できますか?

MyMatrix[x_, y_, age_, disease_] :=
  Table[0, {x}, {y}] /. 
    0 :> ReplacePart[
      Table[3, {age}, {disease}], {{1, _} -> 0, {2, 1} -> 
    Floor[dogpopulation*0.2/cellsno], {2, 3} -> 
    Floor[dogpopulation*0.05/cellsno], {3, 1} -> 
    Floor[dogpopulation*0.58/cellsno], {3, 3} -> 
    Floor[dogpopulation*0.15/cellsno]}] /. 
   3 :> If[RandomReal[] > 0.2, 0, RandomInteger[{1, 2}]];
4

2 に答える 2

1

数学によるセルオートマトンシミュレーションのモデリングという本は15年以上前に書かれたので、MathematicaのCellularAutomaton[]関数を調べることをお勧めします。

CellularAutomaton []関数は少し複雑ですが、2D Moore CAを実行する場合は、次のように関数を呼び出します。

CellualrAutomaton [{func [#]&、{}、{1,1}}、initialMatrixVal、numIterations];

上記のコードが行うことは、関数func []を呼び出すことです。ムーア近傍を、「numIterations」回のinitialMatrixVal内のすべてのノードのfnパラメーターとして使用します。

CellularAutomaton []関数は、周期境界条件を想定しています。

お役に立てば幸いです。

于 2011-07-11T00:35:37.603 に答える
1

「数学によるセルオートマトンシミュレーションのモデリング」という本のコードのほとんどは、WolframのWebサイト(library.wolfram.com?)にあります。著者の名前を検索すると、本で取り上げられているほとんどのトピックのサンプルコードが見つかります。

この本のほとんどの例のコードを持っていると思います。興味があれば教えてください。

幸運を!

于 2011-07-11T00:40:29.087 に答える