2016-06-24 4 views
0

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の機能を変更することによって行われるかもしれないと思っていたが、まず私はそれを行うことが許されているかどうかわからない、第二に私は非常に危険なことがあります恐れている。

+0

強力なMIPソルバーはこれをはるかに高速に実行します。 –

+0

@ErwinKalvelagen強力なMIPではどういう意味ですか?どちらを使うべきですか? – Patapunfate

+0

私はより強いソルバーを意味しました。それは、同じ問題を解決できるソルバーですが、より速いです。現在利用可能な最速のソルバーには、Cplex、Gurobi、Xpressが含まれていると私は確信しています。それらの一部または全部にMatlabインターフェイスがあります。 –

答えて

0

これは効果的に行うのが非常に難しいです。 タイマーオブジェクトを使用して値を監視できます。しかし、あなたは固有のMatlab関数を使用しており、外部関数を実行していないので、tictocwhile loopに入れてを実行し、tocの値をあなたの制限と照合してbreakあなたのコードif tocが上限を超えています。

+0

ありがとうございます。コメントでErwin Kalvelagenから提供された提案のために、私はMILPを扱う別の計算ツールに移りましたが、前に記録したフリーズを記録しませんでしたが、選択した選択肢としてあなたの答えをマークしました。どうもありがとうございました – Patapunfate

関連する問題