我的理解是一个链接代理集大致相当于一个边缘列表。在这种情况下,我有链接(其中 3 个品种,但我认为这无关紧要)有一个变量权重,可以是 0 到 1 之间的任何值。我想将每个链接代理集数据存储在它自己的邻接矩阵中在每个刻度的末尾。意思是,每个链接权重成为基于 end1 和 end2 海龟的行和列中的条目。我认为在这种情况下,实际的矩阵(矩阵扩展对象)将是最好的,因为这样很容易操作以输出到行为空间或其他任何东西。
有没有一种优雅的方式来做到这一点?
我的理解是一个链接代理集大致相当于一个边缘列表。在这种情况下,我有链接(其中 3 个品种,但我认为这无关紧要)有一个变量权重,可以是 0 到 1 之间的任何值。我想将每个链接代理集数据存储在它自己的邻接矩阵中在每个刻度的末尾。意思是,每个链接权重成为基于 end1 和 end2 海龟的行和列中的条目。我认为在这种情况下,实际的矩阵(矩阵扩展对象)将是最好的,因为这样很容易操作以输出到行为空间或其他任何东西。
有没有一种优雅的方式来做到这一点?
我能想到的最简单的方法是依靠海龟编号(尽管您可以为您的海龟和海龟who
使用其他标识符),所以我对此有点警惕。如果您对 python 或 R 感到满意,您最好只报告一个嵌套列表(类似于事后处理 - 您可以在这些或类似环境中将海龟跟踪为行/列名称。但是,这里有一个-NetLogo 方法可能适合您的需求:end1
end2
[[ 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 ]]
希望这能让你指出正确的方向!