Netlogo:保持数据跨运行行为 space 以节省加载时间

Netlogo: keep data across runs in behavior space to save loading time

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

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

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

但是,据我所知,行为 Space 只要求您在每个 运行 的开头提供一个 setup 命令 运行。

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

在这种情况下,您的“错误编码风格”想法是正确的,没有其他方法可以在清除其余模型数据的同时保持补丁数据完好无损。 clear-all primitive 非常清楚它在文档中的作用,所以你只需要用 clear-patches:

之外的所有组件命令替换它

Combines the effects of clear-globals, clear-ticks, clear-turtles, clear-patches, clear-drawing, clear-all-plots, and clear-output.

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

您确实需要在 setup 上检查一些条件,以查看是否有必要加载补丁数据。不仅仅是第一个 运行,而是因为您 运行 在 BehaviorSpace 中的每个线程都有自己的“世界”,所以每个线程都需要 运行 您的数据导入命令。来自 sixth item in the BehaviorSpace gotchas:

Sixth, each parallel run will get its own world for the model to run in. This world is not cleared automatically by BehaviorSpace if a parallel run gets re-used for another repetition, which happens quite frequently. This means, for example, if you do ask patches [ set pcolor red ] in one run and do not use clear-all or clear-patches in the setup commands of the next run, then the patches will all still be red. In general using clear-all before each run would be a best practice, but there are times when you might not want to, such as loading data from a file that doesn’t change run-to-run. Just be careful with whatever data is not cleared out.

希望对您有所帮助。