列表中的NetLogo-随机性,用于识别邻居中的海龟

时间:2014-10-06 04:03:27

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

我的问题是binary_list按随机顺序排序。例如。如果我在附近有2只海龟,则列表可以显示[01100000]或[01000100]。这种随机性不允许我乘以各自的权重。这可能是一个愚蠢的问题,但我是NetLogo的新用户。我将不胜感激任何帮助,谢谢

1 个答案:

答案 0 :(得分:1)

绝对不是一个愚蠢的问题。使用已排序的代理列表通常需要一些解决方法,并且它并不总是特别直观。

如果您对补丁进行排序,它们将从左上角排序,从左到右填充行。因此,请考虑您的weight-list。由于我们不能要求列表像使用代理集那样执行操作,因此我们需要使用map遍历列表,并要求每个补丁报告其邻居。

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

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

此时你可以简单地询问一个补丁(或者一只乌龟,因为他们可以直接访问'他们的'补丁的变量)作为他们的邻居列表,它会以一致的顺序发送一个1和0的列表