我是 NetLogo 新手,我对以下代码有一些疑问:
people-own [
walker-type ;; can be "cautious", "adaptive" or "reckless"
walked-through-red?
own-profit
adaptive-threshold-time-gained
adaptive-threshold-time-gained-people-crossing
adaptive-gone-reckless
cooldown
]
Run Code Online (Sandbox Code Playgroud)
凭借面向对象的背景,我将其视为对象(品种)属性的某种枚举people。你可以清楚地看到,人分为三种类型:谨慎行走者、适应性行走者和鲁莽行走者。adaptive此外,以(等)开头的属性adaptive-threshold-time-gained仅在当前人为 时才有意义adaptive。
我希望有某种方式可以更优雅地表达这一点。在面向对象的编程语言中,您可以使用继承来创建三个子类(每个子类一个walker-type),但到目前为止我知道 NetLogo 中不存在这种情况。
推荐的表达方式是什么?
缺乏继承(也许是子品种)是 NetLogo 的一个严重限制,尽管最终它只是偶尔对我很重要。根据应用程序的不同,有几种可能的解决方法。
turtles如果您只想要一些不同的数据属性,并且相关类型是模拟中唯一的,则可以具有turtles-own共同特征,而breeds-own仅具有类型特定特征。
如果数据属性全部共享,但行为不同,您可以创建自己的代理集(在您的情况下,是 的子集people)并在每个代理集上调用不同的过程(或编写在测试上分支的过程member?)。不幸的是,如果创建任何新成员,则必须显式增强这些代理集,因此您会失去品种的“特殊代理集”功能。
嗯。