NetLogo-在列表中随机识别附近的海龟



我只想在其各自的沼泽地附近有海龟的地方得到特定重量的总和。我的方法是在一个权重列表和一个二进制变量列表之间开发一个乘积的和。我为每个补丁在邻域中创建了一个权重列表

Let weight_list [ 1 2 3 4 5 6 7 8]; weights of the moore neighborhood for specific patch

然后,我创建了一个带有二进制变量的列表(如果邻居补丁中有乌龟,则为1,否则为0),

ask patches with [  any?  turtles-here ]   [let turtle_present 1 ]
ask patches with [ not any? turtles-here]  [let turtle_present 0 ]
ask patches[ set binary_list  [ turtle_present ] of neighbors ]

我试图将这个binary_list与它们各自的权重相乘,得到总和,例如。sum (binary_list * weight_list)

我的问题是二进制列表是按随机顺序排序的。例如,如果我在附近有两只乌龟,列表可以显示[0101100000]或[00100100]。这种随机性不允许我与它们各自的权重相乘。这可能是一个愚蠢的问题,但我是NetLogo的相对新用户。我将感谢任何帮助,谢谢

绝对不是一个愚蠢的问题。处理代理的排序列表通常需要一点变通方法,而且并不总是特别直观。

如果对补丁进行排序,它们将从左上角开始排序,从左到右填充行。所以在你的weight-list中要考虑到这一点。由于我们不能像使用代理集那样要求列表执行操作,因此我们需要使用map对列表进行迭代,要求每个补丁报告其邻居。

有很多不同的方法可以做到这一点,但我的建议是写一个类似这样的记者:

to-report neighbor-list
  report map [[ifelse-value any? turtles-here [1][0]] of ?]
             sort neighbors
end

在这一点上,你可以简单地向补丁(或乌龟,因为它们可以直接访问"它们的"补丁的变量)询问它们的邻居列表,它会以一致的顺序向你发送一个1和0的列表。

最新更新