3

我试图让白海龟在 8 个空的相邻空间之一中创建黄海龟。如果没有可用空间,乌龟应该什么也不会产生。注意:白海龟保持白色,并产生能够繁殖自己以及其他黄海龟的黄海龟。总之,最后我想用黄色海龟填充黑色空间。

breed [ cells cell ]
cells-own [ n ]

to setup
  clear-all
  set-default-shape cells "square"
  ask patches [ if pycor = min-pycor [sprout-cells 1]]
  ask cells [ ifelse random 10 < 2 [set color white] [set color yellow]]

谢谢回复。

我将解释我正在尝试做的事情:

  1. 白色方块代表“干细胞”,它们能够自我繁殖并产生另一种类型的细胞(例如 TA 细胞),因此,最初每个白色细胞将在其上方或在其上方的一个角处产生另一个细胞。
  2. 在第二步中,每个 TA 单元在其周围的任何空白空间中随机生成其他单元。
  3. 第三,干细胞(白色方块)重复步骤 1,同时 TA 细胞填充它们周围的空白空间之一。细胞(干细胞和 TA 细胞)一旦周围没有空白空间(当 8 个邻居已经被填满),就会停止产生新细胞。
  4. 在最后阶段,所有的黑色空间都应该用 TA 细胞填充。最后一行的黄色方块基本上什么都不做。

再次感谢您的帮助。

  reset-ticks
end

to go
  ask cells
    [ set n count neighbors with [pcolor = yellow] ]
  ask cells
    [ if n >= 1
      [ set color yellow] ]
  tick
  ;ask cells 
  ;[if ticks = 10
    ;[set color yellow]]
end
4

1 回答 1

2

你到底想做什么对我来说并不完全清楚。我将采用可能的解释,但无论我的解释是否正确,您都应该尝试澄清您的问题。

试图理解你的代码,在我看来和之间有一些patches混淆turtles。在您的go程序中,cells如果他们有黄色邻居,您会要求变黄。我认为您想要的是黄色方块出现在与黄色方块相邻的补丁上。您尝试填充的空白补丁上还没有任何补丁cells,因此ask cells在这里变黄对您没有帮助。

如果您真的想坚持使用cell代理,保持当前setup程序,您可以执行以下操作:

to go
  ask patches with [not any? turtles-here] [
    if any? neighbors with [any? turtles-here] [
      sprout-cells 1 [
        set color yellow
      ]
    ]
  ]
end

(如果你希望你的细胞只从下向上生长,你应该通过右键单击视图并选择关闭视图设置中的换行Edit...

现在,一种完全不同的方法,如果你想要的只是某种元胞自动机,那可能会更简单,那就是放弃代理,只使用补丁。这会给你类似的东西:

to setup
  clear-all
  ask patches [
    if pycor = min-pycor [
      ifelse random 10 < 2 
        [set pcolor white]
        [set pcolor yellow]  
    ]
  ]
  reset-ticks
end

to go
  ask patches with [pcolor = black] [
    if any? neighbors with [pcolor = yellow or pcolor = white] [
      set pcolor yellow
    ]
  ]
  tick
end

两种方法都有效。第一个在视觉上更令人愉悦。第二个稍微简单一些,因为你根本不需要海龟。这取决于你最终想要做什么。

于 2012-11-05T17:54:41.360 回答