在Matlab中使用parfor,其结构在迭代中会有所不同

时间:2018-11-16 20:52:48

标签: matlab

我想在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

1 个答案:

答案 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