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



在每一次勾选时,我都会要求每个补丁根据其8个邻居的计数来更新其计数。如果多于4个邻居的计数大于或等于1,则它们更新1。如果多于4个邻居的计数小于或等于1,则补丁计数应设置为0。

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

">=运算符只能用于两个数字、两个字符串或两个相同类型的代理,但不能用于TRUE/FALSE和一个数字。当补丁27-22运行>=时,由过程SPREAD-ERRORS调用,由过程GO调用。"

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

您指的是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进行比较。

最新更新