Netlogo - Sandpile模型 - 更新计数 - 运行时错误

时间:2015-03-29 15:48:12

标签: netlogo

在每个滴答声中,我要求每个补丁更新其计数,具体取决于其8个邻居的数量。如果超过4个邻居的计数大于或等于1,则它们会更新1.如果超过4个邻居的计数小于或等于1,则补丁计数应设置为0.

当我运行代码时,我收到以下错误:

“> =运算符只能用于两个数字,两个字符串或两个相同类型的代理,但不能用于TRUE / FALSE和number.error,而补丁27 -22运行> =被调用通过程序GO“

调用程序SPREAD-ERRORS
to spread-errors ;; Errors spread prior to addition of random error
                 ;; This is dependent upon majority of neighbors with errors               
  ask patches [
    ifelse count neighbors with [n >= 1] > 4
    [update-n 1]
    [set n n = 0]
  ]  
end

1 个答案:

答案 0 :(得分:0)

您的意思是set n 0,而不是set n n = 0

但为什么set n n = 0实际上有效的NetLogo语法,以及它最终如何导致您收到错误消息?

嗯,n = 0是一个布尔表达式,其值为truefalse。然后,您将获取该值并将其存储在n中。效果就好像你写了:

ifelse n = 0 [ set n true ] [ set n false ]

运行此命令后,n保存一个布尔值。然后,下次n >= 1运行时,您会收到上面的错误消息,因为n不再是数字,也无法与1进行比较。