NetLogo 中的子品种

aoc*_*via 4 netlogo

我是 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 中不存在这种情况。

推荐的表达方式是什么?

Ala*_*lan 5

缺乏继承(也许是子品种)是 NetLogo 的一个严重限制,尽管最终它只是偶尔对我很重要。根据应用程序的不同,有几种可能的解决方法。

  1. turtles如果您只想要一些不同的数据属性,并且相关类型是模拟中唯一的,则可以具有turtles-own共同特征,而breeds-own仅具有类型特定特征。

  2. 如果数据属性全部共享,但行为不同,您可以创建自己的代理集(在您的情况下,是 的子集people)并在每个代理集上调用不同的过程(或编写在测试上分支的过程member?)。不幸的是,如果创建任何新成员,则必须显式增强这些代理集,因此您会失去品种的“特殊代理集”功能。

嗯。