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



以下程序旨在从多只海龟中选择一只"赞助人",并将其颜色更改为白色。选择是基于海龟的财富的概率。

运行这段代码,特别是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)在错误的块中。现在,每次运行if [wealth]...时,i都会增加,但在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
]

最新更新