我试图在杀死一只乌龟之后恢复海龟的初始(回到它的第一个状态)背景。 我一直在尝试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]函数改变了存储的代理集?当我杀死节点时,老乌龟和旧链接的大小逐渐变小。我没有将新的背景存储在旧乌龟和旧链接中。
或者有没有其他方法可以存储旧的代理集和链接并恢复到原来的网络结构?
感谢您阅读。
答案 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
处理为您存储和恢复上下文,但是如果没有它,此代码也可以正常工作(您只需自己恢复上下文)。