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

时间:2015-03-31 18:38:29

标签: matrix netlogo

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

1 122
1 2
2 1
2 1000
...

我的问题:

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

实际上这很简单!

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个链接。移动海龟可能会很慢,但查询网络(例如使用网络扩展)应该仍然相当快。