我想得到特定权重的总和,只有在各自的摩尔附近存在龟的斑块中。我的方法是在权重列表和二进制变量列表之间开发一系列乘积。我为每个补丁创建了一个邻域权重列表
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的新用户。我将不胜感激任何帮助,谢谢
答案 0 :(得分:1)
绝对不是一个愚蠢的问题。使用已排序的代理列表通常需要一些解决方法,并且它并不总是特别直观。
如果您对补丁进行排序,它们将从左上角排序,从左到右填充行。因此,请考虑您的weight-list
。由于我们不能要求列表像使用代理集那样执行操作,因此我们需要使用map
遍历列表,并要求每个补丁报告其邻居。
有很多不同的方法可以做到这一点,但我的建议是按照这样的方式写一个记者:
to-report neighbor-list
report map [[ifelse-value any? turtles-here [1][0]] of ?]
sort neighbors
end
此时你可以简单地询问一个补丁(或者一只乌龟,因为他们可以直接访问'他们的'补丁的变量)作为他们的邻居列表,它会以一致的顺序发送一个1和0的列表