Я пытаюсь решить программу конуса в Matlab, вызывая MOSEK, изменяя границу на одном из ограничений.Оптимизация в параллельном режиме в Matlab с помощью Mosek
Я хотел бы сделать это параллельно, чтобы воспользоваться всеми ядрами, которые у меня есть. Вот пример, иллюстрирующий мою точку зрения.
testBounds=[0.1, 0.15, 0.2, 0.25, 0.3];
clear prob;
[r, res] = mosekopt('symbcon');
prob.c = [0 0 0 1 1 1];
% Specify the non-conic part of the problem.
prob.a = sparse([1 1 2 0 0 0]);
prob.buc = 1;
prob.blx = [0 0 0 -inf -inf -inf];
prob.bux = inf*ones(6,1);
% Specify the cones.
prob.cones.type = [res.symbcon.MSK_CT_QUAD, res.symbcon.MSK_CT_RQUAD];
prob.cones.sub = [4, 1, 2, 5, 6, 3];
prob.cones.subptr = [1, 4];
for i=1:5
% Specify the changing bound
prob.blc = testBounds(i);
% Optimize the problem.
[r,res]=mosekopt('minimize',prob);
% Display the primal solution.
res.sol.itr.xx'
end
Я пытался сделать это с parfor, но это не допускается. К сожалению, в документации MOSEK нет подробных сведений о параметризации. Как я могу выполнить вышеупомянутое параллельно?
Ваш код не работает, 'prob' должен быть широковещательной переменной, поскольку он создается вне цикла и не индексируется, но изменяется, что возможно только для сокращений и разрезанных переменных. Parfor также позволяет создавать переменные, но они только временны и не видны снаружи или для других итераций. – Daniel