私はMatlabの使用を学んでいる新入生です。おそらくループなしでより高速な方法があると誰か教えてください。各行に1、-1の2つの値のみを大きな疎行列の異なる位置に割り当てることです。
条件の MILP 問題の bimatrix または bibimatrix を構築する私のコード:
f^k_{ij} <= y_{ij} すべてのアーク (i,j) およびすべての k ~=r に対して。マルチコモディティフローモデルで。
単純なアプローチ:
バイマトリックス=[];
% 各行を作成し、bimatrix に追加します
newrow4= zeros(1,n*(n+1)^2);
for k=1:n
for i=0:n
for j=1: n
if j~=i
%change value of some positions to -1 and 1
newrow4(i*n^2+(j-1)*n+k)=1;
newrow4((n+1)*n^2+i*n+j)=-1;
% add to bimatrix
bimatrix=[bimatrix; newrow4];
% change newrow4 back to zeros row.
newrow4(i*n^2+(j-1)*n+k)=0;
newrow4((n+1)*n^2+i*n+j)=0;
end
end
end
end
また:
% 最初に大きな疎行列を生成します。
bibimatrix=zeros(n^3 ,n*(n+1)^2);
t=1;
for k=1:n
for i=0:n
for j=1: n
if j~=i
%Change 2 positions in each row to -1 and 1 in each row.
bibimatrix(t,i*n^2+(j-1)*n+k)=1;
bibimatrix(t,(n+1)*n^2+i*n+j)=-1;
t=t+1
end
end
end
end
上記のコードを Matlab で使用すると、n~12 のこの行列を生成するのに 3 秒以上かかります。より短い時間でより大きなマトリックスを生成する必要があります。
ありがとうございました。