2017-02-14 47 views
0

以下過程旨在從多個海龜中選擇一個「顧客」並將其顏色更改爲白色。基於海龜的財富,選擇是概率性的。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,但我不明白爲什麼我寫的代碼不正確。我的i開始於0,如果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 

回答

0

看起來您的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 
    ] 
相關問題