有没有办法在netlogo中创建枚举?

时间:2018-06-01 14:04:01

标签: netlogo

我有一些netlogo代码,我想更具描述性。 所以而不是:

MOVE-TO ONE-OF PATCHES WITH [ PCOLOR = BLUE ]

它会说:

MOVE-TO ONE-OF PATCHES WITH [ WATER ]

在java中我会创建一个枚举来完成这个。我怎么能在Netlogo中做到这一点?

3 个答案:

答案 0 :(得分:3)

Alan的答案很好,但我也会考虑创建补丁变量而不是依赖补丁颜色的可能性。例如:

patches-own [ water? ]

如果你为每个水补丁设置为true,你可以说:

move-to one-of patches with [ water? ]

这样做的主要原因是您可能想要在某些时候更改水斑的颜色:例如,使它们变得稍暗或变浅,或者使用颜色暂时突出显示具有其他特征的斑块。

分离表示和程序语义通常是很好的做法。

实现此目的的另一种不同方法是在安装过程中使用水补丁创建代理集。例如,假设您将water-patches声明为全局变量,您可以这样做:

set water-patches patches with [ pcolor = blue ]

然后你可以这样做:

move-to one-of water-patches

如果更改修补程序的颜色,water-patches代理程序集不会受到影响。它也可能更快一些,因为你只构造一次而不是一遍又一遍地过滤所有补丁。

答案 1 :(得分:2)

to-report water ;patch proc
  report pcolor = blue
end

答案 2 :(得分:2)

艾伦的回答非常好,但这个问题向我提出了一个不同的概念。你真正的意思是补丁是蓝色的,因为它是水,但你是反过来编码它,以便颜色表明它的状态为水。如果你的模型的其他方面(例如旅行速度,作物类型)取决于它是否是水,那么你可以考虑不同的结构。

patches-own
[ water?
]

to setup
  ask patches
  [ set water? FALSE
    if random-float 1 < 0.2
    [ set water? TRUE
      set pcolor blue
    ]
  ]
end

在这种结构中,每个补丁都有一个真/假变量,表示它是水(如果为真)。然后,您可以直接使用ask patches with [water?] []等语句。您还可以设置一个全局变量来保存补丁的补丁集,然后生成ask water-patches []

之类的语句

如果您有多种类型的土地风格(例如水,沙,土壤,岩石......),那么您可能更容易找到颜色,因为您不希望所有这些都有单独的变量。尽管如此,你可以拥有一个土地风格的属性,并拥有ask patches with [ type = "water"]

的结构