在特定补丁处更改 1 只海龟的海龟品种

Changing Turtle Breed for 1 turtle at specific patch

我正在努力让第一只到达特定斑块(食物来源 1)的海龟成为新品种(领导者)。这是我到目前为止尝试过的...

ask one-of followers
  if followers-at -41 -22
    set breed [leaders]]

这给了我错误:询问预期的 2 个输入,一个代理或代理集和一个命令块。

如果我在 if --> [if...] 前加一个括号,错误就变成了 IF 需要两个输入,一个 true false 和一个命令块。

现在我在设置过程中有 create-leaders 0 [set color red],在代码的开头有一个 leader [leaders breed],因为我不希望在第一只乌龟到达食物补丁 -41 -22。我仍然不知道如何确定哪只乌龟是第一个到达该补丁的。有什么建议吗?

我试过这个来测试我是否可以让一个特定补丁的追随者改变:

to recruit 
  ask followers-at -41 -22
    [ask one-of followers
      [set color red]]
end

首先,在 运行 的过程中,我计算了 4 个红色追随者,但代码指定了“one-of”,它应该只影响 1 个追随者。然后我修改为:

to recruit 
  ask followers-at -41 -22
    [ask one-of followers]
      [set breed [ leaders ]
end

它似乎没有正确的括号数量,但这是我没有收到“错误无右括号”消息的唯一方法。相反,我得到“询问预期的 2 个输入,一个代理或代理集和一个命令块。”

这就是括号的工作方式(请注意,间距对于语法并不重要,但我对其进行了结构化,以便您可以看到代码块的开始和结束位置)。我还添加了一个 any?:

ask one-of followers
[ if any? followers-at -41 -22
  [ set breed leaders
  ]
]

因此,ask 要求一只名为 'followers' 的海龟完成外部代码块中的所有操作。随机选择的乌龟然后检查在距自身坐标 -41 -22 的补丁上是否有任何 'followers'(相对的,不是绝对的)。如果有,则随机选择的海龟(不是指定补丁上的海龟)将其品种更改为领导者。

您可能想要的是在补丁更改品种上拥有一名追随者。看起来像:

if any? followers-on patch -41 -22
[ ask one-of followers-on patch -41 -22
  [ set breed leaders
  ]
]

所以我把turtles-at(相对)位置改成turtles-on(绝对)位置,同时也去了相关补丁上的海龟。

为了效率(所以一组海龟只创建一次而不是两次),调试(所以你不会不小心在两个地方有不同的坐标),一个更好的方法来做同样的代码是:

let potential-leaders followers-on patch -41 -22
if any? potential-leaders
[ ask one-of potential-leaders
  [ set breed leaders
  ]
]

至于是否是第一个,你需要做的就是检查你的条件中没有任何现有的领导者(例如not any? leaders