NetLOGO:在行为空间中跨运行保存数据,以节省加载时间 [英] Netlogo: keep data across runs in behavior space to save loading time
问题描述
我的模型在设置时需要导入一定数量的补丁相关信息(通过import-world
),大约需要10秒。
使用行为空间时,这些时间加起来非常快,大大增加了运行实验所需的时间。
我需要缩短这段时间,因此我想设置一种方式,在启动行为空间时,import-world
命令仅在第一次运行时运行,而其他所有时间都可以避免。
如果可以这样做,我可以这样安排我的代码,每次启动行为空间时只需要这10秒一次。
但是,据我所知,行为空间只要求您在每次运行开始时运行setup
命令。
我也许能够想出一些方法来实现我想要的,但我只想到了一些看起来有点容易出错或编码风格不好的东西(例如,在安装时不使用,而是在代码结束时手动清除),逐个清除我想要清除的东西,这将允许我不清除导入的补丁数据,然后在安装时使用if
检查该数据是否已经存在,如果它存在,则不导入它)。
不过,我想听听有没有更好的方法来实现我的目标。
推荐答案
您的错误编码风格&想法是正确的在这种情况下,没有其他方法可以在清除其余模型数据的同时保持面片数据不变。clear-all
primitive非常清楚它在文档中的作用,因此您只需将其替换为除clear-patches
:
然后,您需要清除所有不是要保存的特殊数据的修补程序数据。结合了清除全局、清除勾号、清除海龟、清除补丁、清除绘制、清除所有绘图和清除输出的效果。
ask patches [ set pcolor 0 ]
,例如在模型运行中更改了pcolor
。您确实需要检查setup
上的一些条件,以查看是否需要加载补丁数据。不仅是第一次运行,而且因为您在BehaviorSpace中运行的每个线程都拥有它自己的世界,所以每个线程都需要运行您的数据导入命令。来自sixth item in the BehaviorSpace gotchas:
第六,每个并行运行都将有自己的世界供模型运行。如果并行运行被重新用于另一个重复,则BehaviorSpace不会自动清除这个世界,这种情况经常发生。这意味着,例如,如果您在一次运行中使用
ask patches [ set pcolor red ]
,而在下一次运行的设置命令中不使用clear-all
或clear-patches
,则补丁程序仍将全部为红色。通常,在每次运行之前使用clear-all
是最佳实践,但有时您可能不想这样做,例如从不更改运行到运行的文件加载数据。请小心处理未清除的任何数据。
我希望这会有帮助。
这篇关于NetLOGO:在行为空间中跨运行保存数据,以节省加载时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!