使用具有 link 权重的 link 代理集在 NetLogo 中创建邻接矩阵

Using a link agentset that has link weights to create an adjacency matrix in NetLogo

我的理解是link agentset大致相当于一个边列表。在这种情况下,我有 links(其中 3 个品种,但我认为这是无关紧要的)有一个变量,重量,可以是 0 到 1 之间的任何地方。我想存储每个 link agentset 数据在它自己的邻接矩阵中在每个 tick 结束时。意思是,每个 link 权重成为基于 end1 和 end2 海龟的行和列中的条目。我认为实际矩阵(矩阵扩展对象)在这种情况下是最好的,因为这样很容易操作以输出到行为空间或其他任何地方。

有没有优雅的方法来做到这一点?

我能想到的最简单的方法依赖于海龟 who 数字(尽管你可以为你的 end1end2 海龟使用一些其他标识符),所以我我有点担心它。如果您对 python 或 R 感到满意,您可能最好只报告一个嵌套列表(类似于 [[ weight turtle i turtle j ] ... ] 并在事后处理 - 您可以在其中任何一个中将海龟作为行/列名称进行跟踪或类似的环境。但是,这里有一种 in-NetLogo 方法可能适合您的需要:

extensions [ matrix ]
globals [ matrix-list ]
links-own [ weight ]

to setup 
  ca
  ask n-of 5 patches [ sprout 1 ]
  ask turtles [    
    create-links-to n-of 2 other turtles [
      set weight precision random-float 1 3
      set color weight * 100
    ]
  ]
  set matrix-list ( list report-matrix )
  reset-ticks
end

to go
  ask links [ 
    set weight precision ( weight + random-float 0.2 - 0.1 ) 3 
    if weight < 0 [ set weight 0 ]
    if weight > 1 [ set weight 1 ]
  ]
  set matrix-list lput report-matrix matrix-list
  tick
end

to-report report-matrix
  let n-cr count turtles
  let new-mat matrix:make-constant n-cr n-cr -1
  ask links [
    let from-t [who] of end1
    let to-t [who] of end2
    matrix:set new-mat from-t to-t weight    
  ]
  report new-mat 
end

setup 构建一个玩具世界并将第一个矩阵存储在 matrix-list 中 - 类似于:

observer> print matrix:pretty-print-text last matrix-list
[[    -1  0.606  0.337     -1     -1 ]
 [    -1     -1     -1  0.478  0.271 ]
 [    -1     -1     -1  0.129  0.493 ]
 [    -1  0.897     -1     -1  0.076 ]
 [ 0.817  0.714     -1     -1     -1 ]]

go 的每个 运行 随机改变每个 link 的权重,但在 运行 宁 [=20= 之后保持矩阵中的位置不变]一次:

observer> print matrix:pretty-print-text last matrix-list
[[    -1  0.692  0.284     -1     -1 ]
 [    -1     -1     -1  0.503  0.367 ]
 [    -1     -1     -1  0.123  0.571 ]
 [    -1  0.856     -1     -1      0 ]
 [ 0.756  0.761     -1     -1     -1 ]]

两次:

[[    -1  0.753  0.275     -1     -1 ]
 [    -1     -1     -1   0.51   0.35 ]
 [    -1     -1     -1  0.111  0.497 ]
 [    -1   0.95     -1     -1  0.039 ]
 [ 0.852  0.845     -1     -1     -1 ]]

希望这能让您指明正确的方向!