【问题标题】:Changing Turtle Breed for 1 turtle at specific patch在特定补丁中更改 1 只海龟的海龟品种
【发布时间】:2020-10-31 15:53:00
【问题描述】:

我试图让第一只乌龟到达特定的补丁(食物来源 1)成为一个新品种(领导者)。这是我迄今为止尝试过的......

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

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

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

现在我在设置过程中有 create-leaders 0 [set color red],并且在代码的开头有一个leader [leadersbreed],因为我不希望在第一个海龟之前存在任何领导者到达食物补丁 -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 个输入,一个代理或代理集和一个命令块。”

【问题讨论】:

    标签: netlogo


    【解决方案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

    【讨论】:

      最近更新 更多