MATLAB使用GA函数,卡在obj.displayOutput

遗传算法寻优时,计算迟迟不产生下一代计算结果,点暂停显示停在 remoteparfor.m文件的128行 obj.displayOutput();
是什么原因呢

该回答引用GPT与博主@晓码自在合作编写:
从您的描述,此问题很有可能是由于MATLAB的并行计算导致的。当您使用parfor循环进行并行化计算时,如果某个worker节点的计算任务过重或节点出现问题,会导致整个parfor循环卡在等待该节点的计算结果上,出现暂停的情况。
要解决此问题,有几种方法:

  1. 增加parfor的Timeout参数,限制每个节点的最大计算时间。超时后将舍弃该节点的计算结果,继续后续流程。代码如:
matlab
parfor (i = 1:100, 'Timeout', 60)  % 设置最大计算时间60do_some_thing;
end

  1. 减小并行度,限制使用的最大worker节点数。这可以避免单个节点的计算过重导致整体延迟。代码如:
matlab 
maxNumCompThreads(4);   % 设置最大4个worker节点
parfor (i = 1:100)  
   do_some_thing; 
end

  1. 在parfor循环外先检查环境,如果检测到某个节点有问题,则不使用该节点进行并行计算。代码如:
matlab
pool = parcluster;                  % 检查并行环境
if strcmp(pool.ResourceManager,'local') && pool.NumWorkers > 1
   if ~isempty(checknode(pool,2))  % 检查节点2是否正常
       pool.NumWorkers = 3;        % 不使用节点2,只用3个节点进行并行
   end
end
parfor (i = 1:100, 'Pool', pool)  
   do_some_thing;
end

  1. 如果parfor循环内的代码存在问题,导致某些迭代耗时过长,也会触发此问题。需要检查parfor内部代码,对耗时操作进行优化。

希望上述方法能帮助您解决MATLAB parfor并行计算出现暂停的问题。