我想在Matlab中使用parfor
代替for
来重写以下循环。我希望您能帮助您理解哪种是最好的方法。
关键是result=gurobi(model)
行需要一个结构作为输入并分割一个结构。结构model
的两个字段随迭代而变化。我想我应该以某种方式预分配由model
子结构组成的结构100
,但是我不能做得更多,感谢您的帮助。
注意:此循环中使用的所有变量都在其他位置创建。我没有在代码中包含那部分。
L=zeros(100,1)
for b=1:100
model.A=[Aineq; Aeq];
model.rhs=[bineq;beq];
model.sense=[repmat('<', size(Aineq,1),1); repmat('=', size(Aeq,1),1)];
model.Q=Qsub{b}; %VARYING WITH b
model.obj=csub{b}; %VARYING WITH b
model.vtype=type;
model.lb=total_lb;
model.ub=total_ub;
result=gurobi(model);
L(b)=(result.objval+alphasub{b})*B;
end
答案 0 :(得分:3)
我建议在循环之外设置所有不变字段。在循环内部,您可以创建结构的“ local_model”副本并插入任何变化的字段。这将允许您使用parfor循环。
尝试类似以下内容:
model.A=[Aineq; Aeq];
model.rhs=[bineq;beq];
model.sense=[repmat('<', size(Aineq,1),1); repmat('=', size(Aeq,1),1)];
model.vtype=type;
model.lb=total_lb;
model.ub=total_ub;
L=zeros(100,1)
parfor b=1:100
local_model = model;
local_model.Q=Qsub{b}; %VARYING WITH b
local_model.obj=csub{b}; %VARYING WITH b
result=gurobi(local_model);
L(b)=(result.objval+alphasub{b})*B;
end