3

こんばんは、

Matlabのlinprog関数に問題があります。次のメッセージが表示されます。

実行不可能なために終了します。制約行列のすべてゼロの行には、対応する右側のエントリにゼロがありません。

ヘルプによると、これは、Aeqにゼロでいっぱいの行(たとえば、行i)が少なくともあるが、beq(i)がゼロに等しくないことを意味します。

私は自分のマトリックスをチェックしました:

checkmat=full(sum(abs(Aeq')))';
checkmat=horzcat(checkmat,beq);

for i=1:length(checkmat)
   if (checkmat(i,1)==0 && checkmat(i,2)~=0) || (checkmat(i,2)==0 && checkmat(i,1)~=0)
      i
   end
end

でも大丈夫そうです。それがどこから来るのか誰かが考えていますか?情報が足りない場合は、喜んで収集させていただきます。

4

1 に答える 1

1

によって使用されるデフォルトの内点法linprogは、実際の反復が始まる前にいくつかの前処理ステップを実行します。したがって、Aeqの対応する要素がbeqゼロ以外のすべてゼロの行が含まれていない可能性がありますが、これは前処理後に発生する可能性があります。

linprog別のアルゴリズム(useoptimset('LargeScale', 'off')および/または)を使用して実行してみてoptimset('LargeScale', 'off', 'Simplex', 'on')、その場合の出力を確認することができます。

ただし、等式制約を満たすことは不可能であると思われるため、すべての場合に「実行不可能な問題」の終了フラグが表示されると思います。

Matlabで利用可能な線形計画法アルゴリズムとその前処理ステップの詳細。

于 2012-12-22T17:28:45.623 に答える