0

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

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

4

1 回答 1

1

我能想到的最简单的方法是依靠海龟编号(尽管您可以为您的海龟和海龟who使用其他标识符),所以我对此有点警惕。如果您对 python 或 R 感到满意,您最好只报告一个嵌套列表(类似于事后处理 - 您可以在这些或类似环境中将海龟跟踪为行/列名称。但是,这里有一个-NetLogo 方法可能适合您的需求:end1end2[[ weight turtle i turtle j ] ... ]

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后保持矩阵中的位置相同:go

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 ]]

希望这能让你指出正确的方向!

于 2022-01-23T20:17:12.443 回答