Matlabのparfor
代わりにを使用して次のループを書き直したいと思いfor
ます。どちらが最善の方法であるかを理解していただきたいと思います。
重要なことは、行result=gurobi(model)
が入力として構造を必要とし、構造を分割することです。構造の2つのフィールドは、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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加