【问题标题】:Cellular automaton and Random movements元胞自动机和随机运动
【发布时间】:2011-07-25 10:38:36
【问题描述】:

如何在我的元胞自动机模型中进行随机运动?例如,如果一个单元格中的元素远多于两个或更多相邻单元格,我想随机选择几个邻居来给出一些元素。我尝试了所有出现在我脑海中的代码,但我的问题是在 Mathematica 中,我必须确保在同一时间一个元素从一个单元格中存在并且正在前往另一个单元格。我想用条件来做,但我不知道怎么做。谁能帮帮我?

编辑:我目前使用的代码

我的实际代码非常复杂,所以我将尝试告诉你我用更简单的元胞自动机做了什么。我想在摩尔社区取得成功。我的元胞自动机中的每个单元都有不止一个个体(或没有个体)。我想在我的细胞之间进行随机运动。我做不到,所以我尝试了以下代码,并在我的元胞自动机中使用它,如下所示。

w[i_, j_] := 
  If[(i - 4) > j, -1, If[(i - 4) == j, 0, If[(j - 4) > i, 1, 0]]];


dogs[p, p1, p2,p3,p4,p5,p6,p7,p8]:=newp &[
  newp = w[p, p1] + w[p, p2] + w[p, p3] + w[p, p4] + w[p, p5] + 
    w[p, p6] + w[p, p7] + w[p, p8]]

这段代码正在做动作,但不是我想要的,因为如果一个单元格中有 0 个个体,它的邻居都是 5 个,那么最后它有 8 个,它的邻居有 4 个,但我不希望这样,因为我不希望其中人数较少的单元格最终拥有比其邻居更多的单元格。我希望他们所有人都有接近的价值观,并且仍然有动作。我不知道如何在 Mathematica 中做到这一点。

【问题讨论】:

  • 您的问题很笼统,相当于要求全面实施。请向我们展示您到目前为止所做的尝试。
  • 好的,我会用我到目前为止所做的来编辑我的问题。
  • 我试图清理你的问题的写作,但你提供的描述太模糊了,我很难做到这一点。您没有定义您使用的任何术语。你细胞的“元素”是什么?什么是“从细胞中生活”,你的“我的细胞之间的运动”是什么?请注意,所列代码的第二部分不是正确的 Mathematica 语句,因此请更正。您能否添加图纸或图表来更好地解释您的问题?鉴于措辞不佳,我很想投票结束这个问题。
  • @Sjoerd C. de Vries 我的单元格之间的移动是指我想从一个单元格中取出一个元素并随机分配给另一个元素。例如,如果一个单元格中有 5 个元素,其中一个邻居有 1 个,那么我想给它一个。所以第一个单元格将有 4 个,第二个单元格有 2 个。但我想检查单元格及其所有邻居并随机选择一个单元格来给出一个元素
  • 您是否正在尝试对运输问题进行建模?

标签: wolfram-mathematica cellular-automata


【解决方案1】:

元胞自动机并不是特别复杂,所以我的第一个建议是弄清楚你想要什么。然后,我建议您将经典转换规则与您介绍的“随机”方面分开。

例如,这是我对康威生命游戏的实现:

 (* We abbreviate 'nbhd' for neighborhood *)
 getNbhd[A_, i_, j_] := A[[i - 1 ;; i + 1, j - 1 ;; j + 1]];

 evaluateCell[A_, i_, j_] :=
   Module[{nbhd, cell = A[[i, j]], numNeighbors},

    (* no man's land edge strategy *)
    If[i == 1 || j == 1 || i == Length[A] || j == Length[A[[1]]],
       Return[0]];

    nbhd = getNbhd[A, i, j];
    numNeighbors = Apply[Plus, Flatten[nbhd]];

    If[cell == 1 && (numNeighbors - 1 < 2 || numNeighbors - 1 > 3),
      Return[0]];
    If[cell == 0 && numNeighbors == 3, Return[1]];
     Return[cell];
  ];

 evaluateAll[A_] := Table[evaluateCell[A, i, j],
    {i, 1, Length[A]}, {j, 1, Length[A[[1]]]}];

执行evaluateAll后,您可以在矩阵中搜索“孤独”单元格并随意移动它们。

有关代码如何工作的更多信息,并查看实际代码示例,请参阅my blog post on Conway's Life。它包括一个带有完整实现和大量示例的 Mathematica 笔记本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多