首页 > 解决方案 > Netlogo:在行为空间中跨运行保存数据以节省加载时间

问题描述

我的模型在设置时需要导入一定数量的补丁相关信息(通过import-world),大约需要 10 秒。使用行为空间时,这些秒数加起来非常快,大大增加了运行实验所需的时间。

我需要缩短这段时间,所以我想以一种方式进行设置,即在启动 Behavior Space 时,该import-world命令仅在第一次运行时运行,而其他所有时间都可以避免。

如果这样的事情是可能的,我可以安排我的代码,这样每次启动 Behavior Space 时只需要这 10 秒。

但是,据我所知,行为空间只要求您setup在每次运行开始时运行一个命令。

我也许可以想出一些方法来实现我想要的,但我只考虑那些看起来有点容易出错或编码风格不好的东西(例如,clear-all在设置时不使用,但在结束时“手动”清除)我的代码,我要清除的东西一一清除,这将允许我清除导入的补丁数据,然后if在设置时使用检查该数据是否已经存在,如果存在则不要导入它)。但是,我想知道是否有更好的方法来实现我的目标。

标签: netlogobehaviorspace

解决方案


在这种情况下,您的“糟糕的编码风格”想法是正确的,没有其他方法可以在清除其余模型数据的同时保持补丁数据完整。该clear-all原语非常清楚它在文档中的作用,因此您只需将其替换为除以下之外的所有组件命令clear-patches

结合了 clear-globals、clear-ticks、clear-turtles、clear-patches、clear-drawing、clear-all-plots 和 clear-output 的效果。

然后您需要清除所有不是您要保存的“特殊”数据的补丁数据。 ask patches [ set pcolor 0 ],例如,如果pcolor在模型运行中更改。

您确实需要检查一些条件setup以查看是否需要加载补丁数据。不仅是第一次运行,而且因为您在 BehaviorSpace 中运行的每个线程都有自己的“世界”,所以每个线程都需要运行您的数据导入命令。从BehaviorSpace gotchas 中的第六项开始

第六,每次并行运行都会有自己的世界供模型运行。如果并行运行被重新用于另一个重复,那么这个世界不会被 BehaviorSpace 自动清除,这种情况经常发生。这意味着,例如,如果您在一次运行中使用或在下一次运行的设置命令中ask patches [ set pcolor red ]不使用,那么补丁仍然是红色的。通常在每次运行之前使用是最佳实践,但有时您可能不希望这样做,例如从不会更改运行到运行的文件中加载数据。请注意任何未清除的数据。clear-allclear-patchesclear-all

我希望这会有所帮助。


推荐阅读