NetLogo rnd:按turtle变量加权的n-of

NetLogo rnd:按turtle变量加权的n-of,netlogo,Netlogo,我正在尝试创建一个生成器,它使用(更正的)Barabasi-Albert算法在NetLogo中优先连接网络。有两个参数:节点数(最终)和每个节点添加的边数。网络扩展有一个版本,但仅限于每个节点添加一条边的情况 简化完整模型: extensions [rnd] to makeNW-BA clear-all let new-edges 4 let popn 25 create-turtles new-edges [ setxy random-xcor random-ycor ]

我正在尝试创建一个生成器,它使用(更正的)Barabasi-Albert算法在NetLogo中优先连接网络。有两个参数:节点数(最终)和每个节点添加的边数。网络扩展有一个版本,但仅限于每个节点添加一条边的情况

简化完整模型:

extensions [rnd]

to makeNW-BA
  clear-all
  let new-edges 4
  let popn 25
  create-turtles new-edges [ setxy random-xcor random-ycor ]
  ask turtles [ create-links-with other turtles with [not link-neighbor? myself] ]
  repeat popn - count turtles
  [ let targets rnd:weighted-n-of new-edges turtles [ count my-links ]
    create-turtles 1
    [ setxy random-xcor random-ycor
      create-links-with targets
    ]
  ]
end
当观察者运行asm\u proceduremakenwba\u setprocedurevariable\u 11时,
let targets rnd:weighted-n度海龟[计算我的链接]
这行代码正在创建一个java错误
(ClassCastException)。这是我第一次使用
rnd
扩展,所以我不知道问题是我的编码,还是实际上有一个bug导致了java错误

更新


我现在已经为degree设置了一个turtles自己的变量(即计算我的链接),并尝试执行
let targets rnd:weighted-n-of new edges turtles[degree]
。这会得到一个NetLogo错误,即观测者在没有指定哪个turtle的情况下不能访问turtle变量。但是,尝试添加self的
没有帮助。

这会产生所需的网络吗

let targets rnd:weighted-n-of new-edges turtles [ [count my-links] of ? ]
当新的eges设置为4时,我很难看到它。当我将其设置为1时,它似乎是一个优先连接网络。
看起来(让上帝的声音不同意我的观点)[rnd:weighted-n-of]设计用于处理列表,并且其中有一个隐藏的foreach或map,这导致在给定代理集时在施法时出错

不是回答,而是猜测。它一定是个虫子。我的问题是,‘它是netlogo、Java还是扩展中的一个?’它可能不是Java,因为它给了我同样的错误@Nicolas Payette写的,可能是他熟悉的,因为它导致了一个java错误而不是netlogo错误,所以我在rnd扩展中报告它可能是一个bug。但它也可能是我构建代码的方式,例如,如果它以某种方式自引用。@King Ink有正确的解决方案,但它给出Java异常的事实确实是Rnd扩展中的一个bug。看。哦,在西北延伸部分没有一个功能齐全的Barabási–Albert发电机,看。做得很好。我尝试了
[count my links]of?
,但也产生了一个错误。这打破了与
n-of
的并行语法,因此可能是一个bug,但它确实可以工作。至少是一个文档问题。
rnd
扩展原语设计用于列表和代理集,但它使用“列表”语法(即带有
的报告者任务)。我本来希望它不是这样,但这不容易做到。有关讨论,请参阅。修复语法的建议:。欢迎发表意见!