如何创建与代理集的比较列表?

问题描述 投票:0回答:1

我的模型中的代理(称为农场)具有对等点(它们有链接的农场的代理集)。每个农场都有一个称为旋转的属性,它是 0 到 1 之间的值列表(所有农场的长度相同)。我想为每个农场创建一个属性,其中包含给定农场与其所有同行之间的相似性分数列表(基于欧几里得距离),基于它们的轮换。

因此,

farms-own [
 peers
 rotation
 similarity
]

旋转由外部数据集填充。现在,我当前必须定义相似性的代码如下:

ask farms [
 let x []
 ask [peers] of myself [
  let y (map * [rotation] of self [rotation] of myself)
  set x lput ((reduce + y) ^ 0.5) x
 ]
 set similarity x
]

注意:x 变量是规避节点无法为农场设置属性这一事实的一种方法。

此代码目前还不起作用。对于每个场,相似性应该具有与对等点数量相同的长度,但事实并非如此(事实上,其长度在滴答之间变化,即使对等点是在设置阶段定义的并且之后不会更改)。知道这里出了什么问题吗?

此外,如果有人提示如何解决所提出的问题是随机的,因此相似性分数不能根据其顺序分配给具体的对等点(用于以后的操作),欢迎他们。但我对此有一些想法,所以上面的问题优先。

list netlogo similarity
1个回答
1
投票

如果您的程序被观察者调用,则

ask [peers] of myself
会导致问题。如果您想询问当前树的对等点,您可以简单地询问:

ask turtles [
 let x []
; ask [peers] of myself [
  ask peers [
  let y (map * [rotation] of self [rotation] of myself)
  set x lput ((reduce + y) ^ 0.5) x
 ]
 set similarity x
]
© www.soinside.com 2019 - 2024. All rights reserved.