如何在netlogo中存储要还原的网络上下文?

时间:2015-02-23 15:10:03

标签: netlogo

我试图在杀死一只乌龟之后恢复海龟的初始(回到它的第一个状态)背景。 我一直在尝试http://ccl.northwestern.edu/netlogo/docs/nw.html的解决方案,但不知何故它不起作用。 以下是我的代码

to cycle
    if Measure = "Efficiency of network" 
      [ ;store node and link
        nw:set-context turtles with [ shape = "circle" ]  links with [ color = blue ]
        show map sort nw:get-context
        set old-turtles item 0 nw:get-context
        show old-turtles
        set old-links item 1 nw:get-context
        show old-links  
        ;start process
        process-performance     
      ]
end

to process-performance

  if NumberOfNodes = 1 
  [file-open "1node.txt"  
    while [not file-at-end?]
    [
      ;calculate initial performance value
      set initial nw:mean-path-length
      show initial

      let nodeseq read-from-string (word "[" file-read-line "]")
      show item 0 nodeseq
      ask turtle (item 0 nodeseq) [ die ]
      update-plots

      ;calculate new performance value
      set final nw:mean-path-length
      show final
      set result (1 - (final / initial)) * 100
      show result

      nw:set-context old-turtles old-links
      show map sort nw:get-context

    ]    
    file-close
]
end

我一直在netlogo的文档中使用“nw:set-context old-turtles old-links”但似乎有意改变了我在“old-turtles old-links”中存储的原始海龟和链接上下文无论我怎么存储它们。我在想是否[die]函数改变了存储的代理集?当我杀死节点时,老乌龟和旧链接的大小逐渐变小。我没有将新的背景存储在旧乌龟和旧链接中。

或者有没有其他方法可以存储旧的代理集和链接并恢复到原来的网络结构?

感谢您阅读。

1 个答案:

答案 0 :(得分:1)

杀死一只乌龟确实将它从所有代理集中移除,因此恢复上下文不会将其恢复。您可以尝试从上下文中删除乌龟而不是将其删除。你可以隐藏乌龟及其链接来重现杀死它的视觉效果。这将是:

...
let target-turtle turtle (item 0 nodeseq)
ask target-turtle [
  hide-turtle
  ask my-links [ hide-link ]
]
nw:with-context (remove turtle (item 0 nodeseq) old-turtles) old-links [
  update-plots

  ;calculate new performance value
  set final nw:mean-path-length
  show final
  set result (1 - (final / initial)) * 100
  show result
]
...

这样,为了计算的目的,将乌龟从上下文中移除,但不会被杀死,因此会记住它的结构信息。 nw:with-context处理为您存储和恢复上下文,但是如果没有它,此代码也可以正常工作(您只需自己恢复上下文)。