matrix - NetLogo:如何导入2列邻接表来创建图形?

标签 matrix netlogo

我有一个txt文件,其中存储了所需图形的定向链接。第一列和第二列表示节点的ID:“1 122”表示节点1和节点122之间存在链接。

1 122
1 2
2 1
2 1000
...

我的问题:

a) 是否可以将这样的 txt 文件导入 NetLogo 并用它创建图表?

b) 文件已超过 100,000 行。这会导致问题吗?

谢谢!

最佳答案

这实际上非常简单!

turtles-own [ node-id ]

to import-graph [ filename ]
  file-open filename
  while [ not file-at-end? ] [
    let source get-or-create-node file-read
    let target get-or-create-node file-read
    ask source [ create-link-to target ]
  ]
end

to-report get-or-create-node [ id ]
  let nodes turtles with [ node-id = id ]
  if not any? nodes [
    crt 1 [ set node-id id set nodes turtle-set self ]
  ]
  report one-of nodes
end

file-read实际从文件中读取数字的工作。

这种方法的一个缺点是它必须搜索所有海龟才能找到具有特定 ID 的海龟。当加载具有大量节点的图表时,这可能会很慢。在这些情况下,您可以使用 table扩展以维护将节点 ID 映射到海龟的表。

请注意,对于图形和网络文件的几种常见格式,您可以使用 network扩展名来导入文件。 NetLogo 的下一版本将支持更多文件类型(尽管不是您这里的文件类型)。

至于 100,000:这是相当大的,不是因为文件的大小,而是因为如果每行有一个链接,则模型中有 100,000 个链接。移动海龟可能会很慢,但查询网络(例如使用网络扩展)应该仍然相当快。

关于matrix - NetLogo:如何导入2列邻接表来创建图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29376002/

相关文章:

netlogo - 如何根据NetLogo中的Switch显示/隐藏链接

python - 每行的 Bin 元素 - NumPy 的矢量化 2D Bincount

ios - 在一系列操作中处理相关的 NSMutable 数组

c++ - 维度变大时出现矩阵计算错误

math - FastICA和盲信号分离数学题

java - 为什么 headless (headless) NetLogo 模拟在高端计算机集群上的运行速度比在台式机上慢?

algorithm - 热衷于寻找网格上最近的自由点

intersection - NetLogo的两个代理集操作

绘制海龟与能量的关系图

netlogo - 如何从社区打开 netlogo 模型?