使用Mathematica中的四维表模拟元胞自动机

时间:2011-07-08 02:28:40

标签: wolfram-mathematica cellular-automata

在书Modelling Cellular automata Simulations with mathematica中,作者使用以下代码来模拟二维点阵中的细胞自动机,

来自摩尔社区的更新规则是

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

其中N =北,E =东,S =南,W =西,NE =东北,SE =东南,SW =东南,NW =西北。这些参数代表了摩尔社区中最近的邻居的价值。要应用这些规则,请使用以下代码,

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}

我的问题是:通过使用如下的四维表?我还可以应用以下更新规则吗?

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}]];

2 个答案:

答案 0 :(得分:1)

使用mathematica建模细胞自动机模拟的书是在15年前编写的,因此建议查看Mathematica中的CellularAutomaton []函数。

函数CellularAutomaton []有点复杂,但是如果你想做2D Moore CA,你可以这样称呼这个函数:

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

上面的代码将执行的是调用函数func [],其中将moore邻域作为fn参数,用于initialMatrixVal中每个节点的“numIterations”次。

CellularAutomaton []函数假设周期性边界条件。

希望有所帮助!

答案 1 :(得分:1)

“使用mathematica建模细胞自动机模拟”一书的大部分代码都可以在Wolfram网站(library.wolfram.com?)中找到。如果您搜索作者的姓名,您将找到本书中涵盖的大多数主题的示例代码。

如果您有兴趣,请告诉我。本书中的大多数示例都可能有代码。

祝你好运!