我想根据耕种类型将补丁的坐标存储在一个空列表中。现在我有一个名为 myland 的空列表,其中代理存储了他们附近的内容。
例如,我有番茄大豆和牛,中间还有一只乌龟。我有这个。
ask locals [set myland [plantation] of patches in-radius 5 with [plantation != "Cows"]]
这给我带来了用于农业的补丁列表,但现在我想知道这些补丁在该半径的哪个位置。
你会怎么做?
计划是给这些补丁涂上不同的颜色
我建议你不要这样做。那就是痛苦和疯狂。
不要将种植园字符串值存储在列表中,而是将补丁本身存储在主体集中。这将使其他一切变得更容易。
但首先,请记住 NetLogo 不是强类型的,并且大多数值都是不可变的。这意味着之前在变量中存在并不重要,当您分配新值时,旧值将被替换。因此,如果您随后使用“set”在其中放置其他内容,则将变量初始化为“空列表”并不重要。
现在回答你的问题。
如果您的目的是根据补丁变量的值对补丁进行着色,那么要求海龟找到补丁,然后对它们进行着色似乎效率较低
让斑块根据种植园价值自行着色会更简单。
考虑:
Let cow-color brown
Let wheat-color yellow
Let grass-color green
ask patches
[
Ifelse
( Plantation = "cows" )
[ Set pcolor cow-color ]
( Plantation = "wheat" )
[ Set pcolor wheat-color ]
;; Otherwise
[ Set pcolor grass-color ]
]
还值得注意的是,您的示例代码没有返回补丁列表。它从种植园变量返回一个字符串列表。
但是你的想法是正确的。通常最好将补丁或海龟本身存储在代理集中。它通常会让其他事情变得更容易。
您原来的示例可能是:
Ask locals
[
Set myland patches in-radius 5
;; Do all kinds of things with myland
]