所以我正在尝试优化2组参数,第一组scheme.The的每个轴必须在左右飞轮之间的增量上进行优化,而组2对于另一轴是相同的
目前,我使用fmincon并并行运行,每个轴的左右飞轮作为代价函数的模拟是两个输出之间的误差。
基本代码如下所示
for Axle = 1:2
...
fmincon(CostFunc,InitialValues, lb,ub)
endCostFunc是这样的
fob = CostFunc(...)
parfor FlyWheel = 1:2
FlyWheelOutput(FlyWheel) = simulation(...)
end
fob = FlyWheelOutput(1) - FlyWheelOutput(2)因此,不是4个内核,而是只使用2个内核,使得代码比理想情况下更慢。所以问题是,你知道如何克服这种僵局吗?
发布于 2021-10-07 06:00:19
如果我的理解是正确的,那么您的代码实际上具有以下基本结构:
for Axle = 1:2
...
% fmincon(Costfunc, ...)
parfor FlyWheel = 1:2
FlyWheelOutput(FlyWheel) = simulation(...)
end
% end fmincon
end你可以使用potentially speed up processing by moving parfor to the outer loop instead.
parfor Axle = 1:2
...
% fmincon(Costfunc, ...)
for FlyWheel = 1:2
FlyWheelOutput(FlyWheel) = simulation(...)
end
% end fmincon
end虽然我不能保证您会同时使用所有4个CPU核心,而不是2个,但这可能会更快,因为您在循环外执行一次parfor,而不是在一个循环内执行两次。
如果运行时仍然存在问题,请考虑使用built-in profiling tool找出代码的哪一部分最慢,然后从那里进行优化。
https://stackoverflow.com/questions/69471973
复制相似问题