Matlabコードを反復ループで実行し、反復ごとに乱数をサンプリングして関数intlinprog
を使用します。私の問題は、私がintlinprog
関数に提供する大量のデータと、その変数の一部に割り当てる確率的な値のために、繰り返しの中にはかなり時間がかかることです。行の実行に時間がかかりすぎると、Matlab break iterationが発生する
私のコードは、多かれ少なかれ、このようなものです:
rounds = 1E3;
Total_PF = zeros(rounds,4893);
for i=1:rounds
i
cT = zeros (4894,1);
cT(4894,1) = 1;
xint = linspace(1,4893,4893);
xint = xint';
AT = rand(4,4894);
beT = ones(4,1);
lb = zeros(4894,1);
ub = ones (4894,1);
ub(4894,1) = Inf;
[x] = intlinprog(cT,xint,AT,beT,[],[],lb,ub);
Total_PF(i,:)= (x(1:length(x)-1)');
エンド
今、私が提供最小限の実施例では、すべての繰り返しが非常に高速ですが、私の実際のコードでは、時々intlinprog
がかかります本当に長い時間(私は数時間を意味します)、1回の反復を行います。
したがって、intlinprog
の行が実行されている間に、intlinprog
を壊す方法はありますか?私はそれがmatlabの機能を変更することによって行われるかもしれないと思っていたが、まず私はそれを行うことが許されているかどうかわからない、第二に私は非常に危険なことがあります恐れている。
強力なMIPソルバーはこれをはるかに高速に実行します。 –
@ErwinKalvelagen強力なMIPではどういう意味ですか?どちらを使うべきですか? – Patapunfate
私はより強いソルバーを意味しました。それは、同じ問題を解決できるソルバーですが、より速いです。現在利用可能な最速のソルバーには、Cplex、Gurobi、Xpressが含まれていると私は確信しています。それらの一部または全部にMatlabインターフェイスがあります。 –