NetLogo中的子品种

时间:2014-09-17 11:57:46

标签: 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
]

在OO背景下,我将此视为某种对象属性的枚举(people品种)。你可以清楚地看到,有三种类型的人:谨慎的步行者,自适应步行者和鲁莽的步行者。此外,以adaptiveadaptive-threshold-time-gained等)开头的属性仅在当前人为adaptive时才有意义。

我希望有一些方法可以更优雅地表达这一点。在OO编程语言中,您将使用继承来创建三个子类(每个walker-type一个),但到目前为止,我知道在NetLogo中不存在。

推荐表达方式是什么?

1 个答案:

答案 0 :(得分:3)

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

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

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

  3. 第h