【发布时间】:2021-12-20 10:58:42
【问题描述】:
以下可能是 Netlogo 的基本编程问题。 我想写一些通用的记者,我可以为他们应该报告的内容提供论据。假设以下程序:
turtles-own [
houses
cars
]
to setup
clear-all
create-turtles 10
reset-ticks
end
to go
ask turtles [
set houses houses + random 2
set cars cars + random 5
]
tick
end
我可以这样写一个关于房屋均值的记者:
to-report mean-houses
report mean [ houses ] of turtles
end
但我想要一个通用的报告器,我也可以用它来报告汽车的平均值,如下所示:
to-report means [ param ]
report mean [ param ] of turtles
end
但是这并没有按预期工作:
setup
repeat 15 [go]
show means houses
> ERROR: You can't use HOUSES in an observer context, because HOUSES is turtle-only.*
在这种情况下,如何让 Netlogo 评估 param 在海龟的上下文中?我熟悉如何在 R 中执行此操作(例如,通过 tidy evaluation 使用 {{ x }} 或早期的引用机制进行掩码),但不熟悉如何将其转换为 Netlogo。
【问题讨论】:
-
我无法重现您的问题。通过使用完全相同的代码,在命令中心以观察者身份运行
mean-houses不会给我任何错误,并报告海龟中houses的平均数量:observer> setup observer> repeat 15 [go] observer> show mean-houses observer: 8.8 -
@Matteo 很抱歉不清楚:
setup -> repeat 15 [go] -> show means houses。然后扩展:show means cars。目标:避免重复代码。 -
对不起,我认为是我误解了你的问题。老实说,我不确定有没有办法解决这个问题,或者至少我想不出一个办法。我会继续思考,但我也会问:让观察者运行这样一个过程是否有真正的优势,而观察者仍然需要指定感兴趣的变量?换句话说,与
mean [houses] of turtles相比,拥有means [houses]是否有真正的优势? ...除非这个使用mean的例子只是为了一个最小的例子,而你实际上在做的事情涉及更长的计算 -
这个例子主要是为了简单起见(但我也有这个确切的用例)。在我的真实模型中,我计算了三个不同数量的基尼系数——复制代码三次似乎非常冗长。
-
有道理。其实有一个变通方法,看答案
标签: netlogo