我有一个模型来跟踪羊的能量水平,我把羊定义为一个品种。我设置了一个监视器来计算羊的平均能量水平,但需要考虑如果在某个时候没有羊会发生什么。我试了很多变体,最简单的是:
ifelse (any? sheep) ["NA"] [mean [energy] of sheep]
不幸的是,我一直得到错误
记者。
我可以通过在代码中创建一个新的全局变量和报告器来解决这个问题,但这似乎有点浪费。是我做错了什么,还是在界面上的监视器中可以完成哪种计算有限制?如果有,这些限制总结在哪里?
三步回答:
ifelse
与ifelse-value
的差异
你得到一个语法错误,因为一个监视器期望一个报告,但ifelse
是处理命令。ifelse
的报告版本为ifelse-value
。如果您在示例中将ifelse
更改为ifelse-value
,您将看到不再出现任何语法错误。但是,您还将看到,如果您这样做并在具有energy
的绵羊开始模型时,监视器将显示NA
—参见下一点。
正确使用any?
发生这种情况是因为您使用any?
的另一种方式。如您所见,如果代理集不为空,any?
报告为true。这意味着以下报告符:
ifelse-value (any? sheep) ["NA"] [mean [energy] of sheep]
当模型中有羊时,将报告"NA"
,因为这是第一个报告块。
开关:
ifelse-value (any? sheep) [mean [energy] of sheep] ["NA"]
你就得到了你想要的。就像英语里说的:"如果有羊,做计算,否则不适用"。
在任何情况下,这都可以完成工作,但这是多余的-参见下一点。
监视器可以做什么
监视器能够处理一些报告程序的运行时错误。你可以简单地把mean [energy] of sheep
放在你的显示器上,当没有羊的时候,它会自动显示N/A
,而不需要你处理这种情况。