我正在使用带有Parpool的CloudCentre群集,优化运行直到突然挂起。代码并不总是悬挂,但是9/10次。疑似死锁,但我确保了每个工人都有它所需的文件。在它挂起之后,我可以用CTR-C退出,但我必须重新启动服务器,以便再次获得优化运行,否则它挂起了等待池准备就绪。
init code.
c = parpool (“AttachedFiles”,{“OptimiseModel.m”那'deceasing_amplitude_01.mat'那'armmodelv2.slx'那'mapdata.m'那“sim_model_test.m”那'slprj'});
Mpisettings(“DeadlockDetection”那'上')
Mpisettings(“MessageLogging”那'上')
Mpisettings(“MessageLoggingDestination”那“CommandWindow”)
我的obj函数优化模型运行的simulink模型与通过的值从粒子群算法万博1manbetx
如果init == true
思敏= MapData;
init = false;
结尾
simOut = sim(思);
rmse = simout.get(“rmse”);
每个工人都有自己的SIMIN副本,init东西是一个黑客,以便通过客户实例进行评估,以便在inclictleswarm algo的开头发生一次。(不知道为什么)
SPMD.
模型= load_system (“ArmModelV2”);
set_param(型号,“SimulationCommand”那“停止”)
set_param(型号,'fastrestart'那'上');
set_param(型号,'simulationmode'那“加速器”);
set_param(型号,“AccelVerboseBuild”那'上')
simin = mapdata();
结尾
~~~~~~~~~~~~
有趣= @ (x) OptimiseModel (init、MCV_B x (1), (2) x (3) x (4) x (5), VMO_B, x (6), x (7), x (8), MCV_T, x (9), x (10), x (11),......
x(12),x(13),Vmo_t,x(14),x(15),x(16),x(17),x(18),x(19),x(20),x(21),x(22),x(23),x(24),x(25),x(26),x(27));
选择= optimoptions ('particleswarm'那'使用指平行',真的,'undervectorized'假的,“PlotFcn”那'pswplotbestf');
[x,rmse_best] = particleswarm(fun,27,lb,Ub,选项);
一切看起来都很好,直到worker突然停止运行obj函数,代码挂在这里,这是remoteparfor的一部分:
而isempty(r)
断言(obj.numintvalsincontroller> 0,......
'屏幕中的内部错误 - 无法检索间隔。);
r = q.poll(1,TimeUnitseconds);
obj.displayoutput();
为什么?有谁能够帮我?如果需要,可以提供更多代码(我没有包括最多的是无关紧要的 - 至少我认为是这样的)。关于进一步调试战略的任何建议也会很棒。
谢谢很多!
编辑代码在串行工作