Matlab并行:停止ode集成警告';无法满足集成公差';

Matlab并行:停止ode集成警告';无法满足集成公差';,matlab,parallel-processing,integration,Matlab,Parallel Processing,Integration,我正在并行运行一个优化,这意味着对使用parpool的不同工人进行优化 为了确定成本函数值,必须对函数进行数值积分,这是由ode15s完成的 优化的目标是找到最佳参数,这些参数用于此数值积分函数中 不幸的是,优化器必须评估(并因此集成)参数,这可能会导致以下警告: 警告:t=8.190397e+01时出现故障。如果不将步长减小到时间t时允许的最小值(2.273737e-13)以下,则无法满足集成公差 每当出现此警告时,我都希望停止集成(因为它需要很长时间),并为成本函数指定一个非常高的值 我试图

我正在并行运行一个优化,这意味着对使用parpool的不同工人进行优化

为了确定成本函数值,必须对函数进行数值积分,这是由ode15s完成的

优化的目标是找到最佳参数,这些参数用于此数值积分函数中

不幸的是,优化器必须评估(并因此集成)参数,这可能会导致以下警告:

警告:t=8.190397e+01时出现故障。如果不将步长减小到时间t时允许的最小值(2.273737e-13)以下,则无法满足集成公差

每当出现此警告时,我都希望停止集成(因为它需要很长时间),并为成本函数指定一个非常高的值

我试图通过使用OutputFcn(每个成功的集成步骤后,Matlab都会调用OutputFcn)来实现这一点。在这个OutputFcn中,我检查最后一个警告(通过Matlabs函数lastwarn),并将其与上面的警告进行比较

我观察到,现在的问题是,有时,很少,在没有警告发生的情况下取消集成

我假设是这样的,因为我并行运行,lastwarn有时会捕获一个发生在另一个工人身上的警告

有人知道如何实现正确的行为吗

例如,如果我在用lastwarn检查最后一个警告时能够以某种方式获得工作者ID,这会有所帮助,但它不在其中……但我愿意接受任何关于如何正确中止集成的建议

提前谢谢


编辑:我用一个不同的脚本运行了几个测试,以调查matlabs函数lastwarn是否捕捉到了其他工作人员身上的警告——似乎情况并非如此。因此,非预期流产的原因一定是其他原因,因此这个问题似乎已经过时。

您是在
parfor
中调用优化例程,还是使用
UseParallel
选项作为优化例程之一?UseParallel选项(在粒子群优化中)为了更好地理解,对于不了解粒子群的人来说:涉及大量的“粒子”(相空间中的点),必须对每个粒子的成本进行评估。然后,优化将粒子移动到另一个希望更好的点。成本评估步骤是并行的,这意味着一些粒子的成本评估发生在一个工人身上,其他粒子的成本评估发生在另一个工人身上……以此类推。嗯,如果没有一些简单的自足代码来重现问题,这可能很难诊断。我用不同的脚本运行了几次测试,以调查matlabs函数lastwarn是否捕捉到了其他工作人员身上的警告-似乎情况并非如此。因此,非故意堕胎的原因肯定是其他原因,因此这个问题似乎已经过时了。谢谢你考虑这个问题