Graph 如何在不使用外部文件的情况下保存和恢复海龟和链接

Graph 如何在不使用外部文件的情况下保存和恢复海龟和链接,graph,netlogo,Graph,Netlogo,我需要保存所有的海龟和链接,这样,如果我对图形拓扑做了一些修改,我以后就可以恢复它了。目前,我使用的方法是通过外部文件加载/保存: to save-graph nw:save-graphml "mygraph.graphml" end to load-graph ask turtles [ die ] nw:load-graphml "mygraph.graphml" end 但它非常慢,特别是对于大型图形。我试图简单地将海龟和链接分配给其他变量: globals [saved-

我需要保存所有的海龟和链接,这样,如果我对图形拓扑做了一些修改,我以后就可以恢复它了。目前,我使用的方法是通过外部文件加载/保存:

to save-graph
  nw:save-graphml "mygraph.graphml"
end

to load-graph
  ask turtles [ die ]
  nw:load-graphml "mygraph.graphml"
end
但它非常慢,特别是对于大型图形。我试图简单地将海龟和链接分配给其他变量:

globals [saved-turtles saved-links]

to save-graph
  set saved-turtles turtles
  set saved-links links
end

to load-graph
  set turtles saved-turtles
  set links saved-links
end
但它说我不能简单地这样分配海龟和链接:


它突出了我设置海龟和链接的路线。有没有不使用外部文件的方法呢?

这种方法在很大程度上取决于您的目标以及两种版本的图表之间的差异。几乎可以肯定的是,save/load graphml过程并不是最好的,而且不可能“保留”所有海龟及其所有属性的链接并在以后恢复它们。。。agentset是非常大的数据结构,引用的是真实的代理,而不是真实的代理本身(据我所知),因此,如果您稍后更改代理,那么agentset变量中关于它的信息在此之后就没有多大价值了

如果图形版本之间的差异很小,并且此图形非常大,那么最好向turtles和链接添加一些新属性(例如,版本)以告知元素所属的版本(例如,0:old、1:new、2:both)并且有一种由您编程的方法,可以轻松快速地恢复以前的状态。这样,您永远不会删除旧元素,只会将其隐藏到新状态,并保留状态之间的真正差异


在以前的NetLogo项目中,我在一些操作中使用了类似的方法来管理大图,效果很好。希望这能对你有所帮助。

海龟
不是一个正常变量。我知道如何填充它的唯一方法是使用命令,例如
createturtle
sprout
;我可能会存储海龟的所有属性,然后使用这些属性重新创建它们,以执行您想要的操作,但是使用nw扩展更简单。但是,graphml格式会占用大量空间,解析graphml文件也不重要。我想知道另一个nw:load和save命令是否更好。可能有一种方法可以在没有文件的情况下保存死海龟,但我认为您必须等到某个开发人员路过(他们路过)。您想只恢复海龟和链接,还是只恢复完整的模型状态就足够了?如果是,您可以检查
导出世界
导入世界
原语。它也会存储在外部数据文件中,但最终会比nw sotarge选项更快?只是一个想法。我不能自己测试这个程序,因为我没有安装NL,但是你试过使用品种而不是全球品种吗?