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

Netlogo: How to compare the ID and then flag in this case?

我想为 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

您的代码有些混乱。根据您的描述,我相信您希望每只乌龟都有一个标志,表明它是否拥有最少的人数。这意味着您需要为每只海龟准备一面旗帜。但是,您已将 min-id 设置为全局变量而不是 turtle 变量。此外,您只需要标志变量一次(也就是说,您需要 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 变量用于除打印语句之外的任何内容,您可能需要重新考虑您的代码。在您的案例中,who 编号最小的乌龟有什么特别之处让您想跟踪它?你只是想要一只恰好在特定位置的随机乌龟吗?然后 select 在该位置的随机乌龟执行 TRUE/FALSE 而无需经过 who.