matlab fmincon并行优化



所以我尝试优化2个设置参数,每个轴一个。第一组必须优化左右飞轮之间的delta,而第二组对于另一个轴是相同的

目前我正在使用fmincon并并行运行每个轴的左右飞轮的模拟,因为成本函数是两个输出之间的误差。

基本代码是这样的

for Axle = 1:2
...
fmincon(CostFunc,InitialValues, lb,ub)
end

CostFunc是这样的

fob = CostFunc(...)
parfor FlyWheel = 1:2
FlyWheelOutput(FlyWheel) = simulation(...)
end
fob = FlyWheelOutput(1) - FlyWheelOutput(2)

所以我只使用了2个内核,而不是4个内核,这使得代码比理想情况下要慢。所以问题是你知道如何克服这个僵局吗?

基本方案

如果我的理解是正确的,你的代码有效地有这样的基本结构:

for Axle = 1:2
...
% fmincon(Costfunc, ...)
parfor FlyWheel = 1:2
FlyWheelOutput(FlyWheel) = simulation(...)
end
% end fmincon
end

您可以通过将parfor移到外循环来加快处理速度。

parfor Axle = 1:2
...
% fmincon(Costfunc, ...)
for FlyWheel = 1:2
FlyWheelOutput(FlyWheel) = simulation(...)
end
% end fmincon
end

虽然我不能保证您将同时使用所有4个CPU内核而不是2个,但这可能更快,因为您在循环外执行一次parfor,而不是在循环内执行两次。


如果运行时仍然是一个问题,请考虑使用内置的分析工具来找出代码的哪一部分最慢,然后从那里进行优化。

最新更新