我有一个关于不同代理同步的问题。
所以我有一个与 BaseAgent 类共享的上下文,正如教程所建议的那样,我们在同一上下文中拥有超过 1 个代理类型。然后我还有 4 个代理类,它们是基本代理类的子类。对于它们中的每一个,我都有必要的可序列化代理包,并且在我的模型类中,我还为它们中的每一个提供了特定的包接收器和提供者。
所有这些代理共享形式的离散空间投影:
repast::SharedDiscreteSpace<BaseAgentClass, repast::WrapAroundBorders, repast::SimpleAdder< BaseAgentClass > >* discreteSpace;
我的 4 种代理类型中有 3 种可以移动,我已经实施了它们的移动。但是,它们可以从一个进程移动到另一个进程,我需要使用 RepastHPC 教程 HPC:D03,步骤 02:Agents Moving in Space 中介绍的 4 个同步语句。
然而问题是我不确定如何实际同步它们,因为代理需要它们的特定提供者、接收者和可序列化包才能正确复制到其他进程中。我尝试执行以下操作:
discreteGridSpace->balance();
repast::RepastProcess::instance()->synchronizeAgentStatus<BaseAgentClass, SpecificAgentPackage, SpecificAgentPackageProvider, SpecificAgentPackageReceiver>(context, *specificAgentProvider, *specificAgentProvider, *specificAgentReceiver);
repast::RepastProcess::instance()->synchronizeProjectionInfo<BaseAgentClass, SpecificAgentPackage, SpecificAgentPackageProvider, SpecificAgentPackageReceiver>(context, *specificAgentProvider, *specificAgentProvider, *specificAgentReceiver);
repast::RepastProcess::instance()->synchronizeAgentStates< SpecificAgentPackage, SpecificAgentPackageProvider, SpecificAgentPackageReceiver >(* specificAgentProvider, * specificAgentReceiver);
但是,运行时出现以下错误:
===================================================================================
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
= PID 3224 RUNNING AT Aleksandars-MBP
= EXIT CODE: 11
= CLEANING UP REMAINING PROCESSES
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Segmentation fault: 11 (signal 11)
This typically refers to a problem with your application.
Please see the FAQ page for debugging suggestions
所以我不确定如何实际同步每个特定代理类型的代理,因为它们都与 BaseAgentClass 共享相同的上下文和空间投影。
提前感谢您的帮助!