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

Netlogo - Sandpile Model - update count - runtime Error

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

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

"The >= operator can only be used on two numbers, two strings, or two agents of the same type, but not on a TRUE/FALSE and a number.error while patch 27 -22 running >= called by procedure SPREAD-ERRORS called by procedure 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 进行比较。