问题描述
我的模型在设置时需要导入一定数量的补丁相关信息(通过 import-world
),这需要大约 10 秒的时间。
使用行为空间时,这些秒数加起来非常快,大大增加了运行实验所需的时间。
我需要缩短这个时间,所以我想设置一些东西,当启动 Behavior Space 时,import-world
命令仅在第一次运行时运行,而所有的其他时候可以避免。
如果有可能的话,我可以这样安排我的代码,每次启动 Behavior Space 时只需要 10 秒一次。
但是,据我所知,行为空间只要求您在每次运行开始时运行 setup
命令。
我也许能够想出一些方法来实现我想要的,但我只想到了看起来有点容易出错或编码风格不好的东西(例如,在设置时不使用 clear-all
,而是清除“手动”,在我的代码末尾,将我想要清除的内容一一列出,这将允许我不清除导入的补丁数据,然后使用 if
设置以检查该数据是否已经存在,如果存在则不要导入它)。
但是,我想听听这里是否有更好的方法来实现我的目标。
解决方法
在这种情况下,您的“糟糕的编码风格”想法是正确的,没有其他方法可以在清除其余模型数据的同时保持补丁数据完好无损。 clear-all
primitive 在文档中非常清楚它的作用,因此您只需要将其替换为除 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 中运行的每个线程都有自己的“世界”,所以每个线程都需要运行你的数据导入命令。来自sixth item in the BehaviorSpace gotchas:
第六,每个并行运行都会有自己的世界供模型运行。如果并行运行被重新用于另一个重复,这个世界不会被 BehaviorSpace 自动清除,这种情况经常发生。这意味着,例如,如果您在一次运行中执行 ask patches [ set pcolor red ]
并且在下一次运行的设置命令中不使用 clear-all
或 clear-patches
,那么补丁仍然是红色的。通常,在每次运行之前使用 clear-all
是最佳做法,但有时您可能不希望这样做,例如从不会更改运行到运行的文件中加载数据。请注意未清除的任何数据。
希望能帮到你。