2

我将并行计算工具箱 (PCT) 与 MATLAB 2012b 中的 Simbiology 工具箱结合使用。当我使用远程工作人员池而不是本地工作人员池运行脚本时,我收到一条间歇性错误消息:

捕获std::exception的异常消息是:

vector::_M_range_check

Error using parallel_function (line 589)
Error in remote execution of remoteParallelFunction : RUNTIME_ERROR

Error in PSOFit (line 486)
                        parfor ns = 1:r.NumSwp

Error in PSOopt_driver (line 209)
        PSOFit(ObjFuncName,LB,UB,PSOopts);

当我注释掉对函数 sbiosimulate (用于模型评估的 SimBiology 函数)的调用时,不会发生错误。

我有几个想法:

  • 我引入了某种竞争条件,这会导致访问模型变量时出现问题(这在 MATLAB 中可能吗?)
  • simbiology 中的模型编译有时但并不总是与 PCT 兼容,而且我遇到了某种极端情况
  • 由于 sbiosimulate 评估已编译的 C++ 代码,因此对于某些输入,源中可能存在生成异常的错误

我知道这一点

4

1 回答 1

1

我是 SimBiology 的开发人员。我相信这是在 R2012a 版本中引入 SimBiology 的 C++ 代码的错误。当模拟结束而没有产生任何模拟结果时会触发该错误。当模型配置为仅报告特定时间(使用 OutputTimes 选项)并且模拟配置为在特定数量的实时后结束(使用 MaximumWallClock 选项)时,有时会发生这种情况。基本上,模拟在有机会记录第一个输出时间之前“超时”。

解决此问题的一种方法是始终在 OutputTimes 中包含时间 0。在评估 MaximumWallClock 标准之前,将始终记录此时间,以防止触发错误。我也在直接联系这个用户,并将在未来的版本中修复这个错误。

于 2013-02-03T14:11:07.440 回答