Netlogo:在这种情况下如何比较ID然后标记?

时间:2017-10-03 14:50:05

标签: netlogo flags

我想为ID最小的乌龟添加一个名为“min-id”的标志。我想把其他海龟标记为“not-min-id”。但是,以下示例语法有错误。错误消息如下。

“龟0跑步时出错>   由程序GO调用   按钮'go'“

调用

我可能需要你的建议。谢谢。

globals [ min-id not-min-id count-up ID ]

to go
  reset-ticks

  ask patch 0 0 
  [
    sprout 1 ;;This model needs to use sprout.
  ]

  ask (turtles-on patch 0 0)
  [
    set ID who
    setxy min-pxcor 0
    set heading 90
  ]

  if (count turtles > 0)
    [
      ask min-one-of turtles [who]
      [
        set min-id TRUE
      ]
  ]

  if (count turtles > 0)
    [
      ask (turtles-on patch 0 0)
      [
        if ID > min-one-of turtles [who] ;;This syntax has errors.
        [
          set not-min-id TRUE
        ]
      ]
  ]  

  ask (turtles-on patch 0 0) with [not-min-id]
  [
    set count-up count-up + 1
  ]

  if (count turtles > 0) [
    ask (turtles-on patch 0 0) with [min-id]
    [
      die
    ]

    tick
end

1 个答案:

答案 0 :(得分:2)

您的代码中存在一些混淆。根据你的描述,我相信你希望每只乌龟都有一个标志,表明它是否具有最小号码。这意味着你需要每只乌龟的旗帜。但是,您已将min-id设置为全局变量而不是turtle变量。此外,您只需要一次flag变量(也就是说,您需要min-id但不需要not-min-id)并将其设置为TRUE或FALSE。

替换

globals [ min-id not-min-id count-up ID ]

globals [ count-up ID ]
turtles-own [ min-id ]

并查看是否修复了它。同时将min-id初始化为FALSE,作为sprout

的一部分

说了这么多,我非常同意Alan,如果你在调试中使用who变量除了print语句之外的任何东西,你可能需要重新考虑你的代码。在您的情况下,具有最低who数字的乌龟有什么特别之处,让您想要跟踪它?你只是想要一个恰好位于特定位置的随机龟吗?然后在该位置选择一只随机龟,在不经过who的情况下执行TRUE / FALSE。