【问题标题】:Using parfor in Matlab with struct varying across iteration在 Matlab 中使用 parfor,结构随迭代变化
【发布时间】:2018-11-17 05:56:29
【问题描述】:

我想在 Matlab 中使用 parfor 代替 for 重写以下循环。我希望您能帮助了解哪种方法是最好的继续。

关键是result=gurobi(model) 行需要一个结构作为输入并拆分一个结构。结构model 的两个字段因迭代而异。我想我应该以某种方式预先分配一个由100 子结构组成的结构model,但我不能走得更远,我会感谢你的帮助。

注意:此循环中使用的所有变量都是在其他地方创建的。我没有包含那部分代码。

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我建议将所有不变的字段设置在循环之外。在循环内部,您可以创建结构的“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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多