matlab - 在 Matlab 中使用 parfor,结构随迭代变化
问题描述
我想用parfor
代替for
Matlab 重写以下循环。我希望您能帮助了解哪种方法是最好的。
关键是该行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
解决方案
我建议在循环之外设置所有不变的字段。在循环内部,您可以创建结构的“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
推荐阅读
- php - 如何根据上传的文件名找到 S3 对象键
- python - 将 pandas 间隔数据框减少为 12 个月 x 24 小时汇总值的表
- couchdb - 如何同时用范围约束一个键并用精确匹配约束另一个键?
- c - 如何优化我发送的套接字消息的大小,而不会丢失任何数据?
- hyperledger-fabric - 在排序阶段,多个事务被批处理在一起。排序和批处理是如何发生的?
- php - PhalconPHP - 如何返回单一类型的原始 SQL 语句结果
- hadoop - Hive 是否支持基于表达式的分区?
- python - 如何在 Django 的 DetailView 中拥有来自另一个模型的表单?
- excel - 根据由小时组成的数据绘制每个工作日的平均销售额
- c++ - 如何解决eclipse中cplex的目录问题?