netlogo 错误无法在长度为 x 的列表中找到元素 x

netlogo error cannot find element x in list of length x

下面的程序旨在 select 一只 "patron" 海龟中的一只 "patron" 并将它们的颜色更改为白色。 selection 是基于海龟财富的概率。

运行 这段代码,特别是行 item i ranking-in-radius 我收到类似这样的错误消息:“cannot find element 43 in list...(shows list of turtles' wealth)... which is only of length 43.” 我知道我收到此错误是因为列表从 0 开始,因此 43 个元素的列表从 0 到 42,但我不明白为什么我编写的代码不正确。我的 i0 开始,如果 i 不是 < 比查询的海龟数量(即应该在 42 停止)。谁能提出解决方案?谢谢!

to choose-patron
  let i 0
  let patrons-in-radius count turtles in-radius radius with [wealth >= 80]
  let ranking-in-radius sort-by > [wealth] of turtles in-radius radius with  [wealth >= 80]
  let total-wealth-in-radius sum [wealth] of turtles in-radius radius with [wealth >= 80]
  while [i < (patrons-in-radius)][
    ask turtles in-radius radius with [wealth >= 80] [
      if [wealth] of self = item i ranking-in-radius [   
        if random 100 < ((wealth / total-wealth-in-radius) * 100) [
          set color white
          if any? turtles in-radius radius with [color = white] [stop]
      ]
      set i (i + 1)
    ]
  ]
]
end

您的 set i (i + 1) 似乎在错误的区块中。现在 i 每次你的 if [wealth]... 运行时都会增加,但你应该只在 while [i < (patrons-in-radius)] 块的末尾增加 i

尝试使用以下代码替换您的 while 语句:

  while [ i < (patrons-in-radius) ] [
    ask turtles in-radius radius with [ wealth >= 80 ] [
      if [ wealth ] of self = item i ranking-in-radius [   
        if random 100 < ( (wealth / total-wealth-in-radius) * 100) [
          set color white
          if any? turtles in-radius radius with [color = white] [
            stop
          ]
        ]
      ]
    ]
    set i i + 1
  ]