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
是一个布尔表达式,其值为 true
或 false
。然后,您将获取该值并将其存储在 n 中。效果就好像你写了:
ifelse n = 0 [ set n true ] [ set n false ]
此命令运行后,n 保存一个布尔值。然后下一次 n >= 1
运行时,您会收到上面的错误消息,因为 n 不再是数字并且无法与 1 进行比较。
在每个滴答声中,我要求每个补丁根据其 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
是一个布尔表达式,其值为 true
或 false
。然后,您将获取该值并将其存储在 n 中。效果就好像你写了:
ifelse n = 0 [ set n true ] [ set n false ]
此命令运行后,n 保存一个布尔值。然后下一次 n >= 1
运行时,您会收到上面的错误消息,因为 n 不再是数字并且无法与 1 进行比较。