netlogo - Netlogo:在行为空间中跨运行保存数据以节省加载时间
问题描述
我的模型在设置时需要导入一定数量的补丁相关信息(通过import-world
),大约需要 10 秒。使用行为空间时,这些秒数加起来非常快,大大增加了运行实验所需的时间。
我需要缩短这段时间,所以我想以一种方式进行设置,即在启动 Behavior Space 时,该import-world
命令仅在第一次运行时运行,而其他所有时间都可以避免。
如果这样的事情是可能的,我可以安排我的代码,这样每次启动 Behavior Space 时只需要这 10 秒。
但是,据我所知,行为空间只要求您setup
在每次运行开始时运行一个命令。
我也许可以想出一些方法来实现我想要的,但我只考虑那些看起来有点容易出错或编码风格不好的东西(例如,clear-all
在设置时不使用,但在结束时“手动”清除)我的代码,我要清除的东西一一清除,这将允许我不清除导入的补丁数据,然后if
在设置时使用检查该数据是否已经存在,如果存在则不要导入它)。但是,我想知道是否有更好的方法来实现我的目标。
解决方案
在这种情况下,您的“糟糕的编码风格”想法是正确的,没有其他方法可以在清除其余模型数据的同时保持补丁数据完整。该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-all
clear-patches
clear-all
我希望这会有所帮助。
推荐阅读
- react-native-navigation - 如何使用 react-native-navigation 在 iOS 上增加滑动区域?
- python - 如何使用 pytesseract 改进结果
- javascript - 使用按钮控制 iframe 宽度
- .net - 如何使 Entity Framework Core DbSet Take 和 Skip 采用 long 类型,而不是 int(我有超过 40 亿行)
- python - Python 输出未在 Visual Studio Code 中一次显示
- .net-core - 我设置了任何 CORS 设置,但在我的 ASP.NET Core 5 Web API 中不起作用
- php - 在所有控制器上应用会话检查后未显示登录页面
- heroku - 如何将heroku托管与godaddy域连接
- mips - 在 MIPS 中替换 %hi 和 %lo
- r - 正确指定“逻辑条件”(在 R 中)