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

时间:2020-10-31 15:53:00

标签: netlogo

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

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

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

如果我在-> [if ...]之前添加括号,则错误变为 如果需要两个输入,则为true和为一个命令块。

现在,在设置过程中,我创建了leaders 0(将颜色设置为红色),并在代码的开头有一个leader(领导者繁殖),因为我不希望在第一个乌龟之前存在任何领导者到达食物补丁-41 -22。我仍然不知道如何确定哪只乌龟是第一个到达该补丁的人。有什么建议吗?

我尝试这样做是为了测试我是否可以在某个特定补丁上让一位关注者进行更改:

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

首先,我在运行过程中计算了4个红色关注者,但是代码指定了“一个”,这只会影响1个关注者。然后我将其修改为:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

因此,ask要求一个名为“跟随者”的海龟之一在外部代码块中进行所有操作。然后,随机选择的乌龟会检查贴片上是否有任何“跟随者”,坐标相对于其自身为-41 -22(相对,不是绝对)。如果有的话,那么随机选择的乌龟(不是指定补丁上的乌龟)会将其品种更改为首领。

您可能想要的是让补丁更改品种的追随者之一。看起来像这样:

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

相关问题