0

YALMIPを使用しようとすると問題が発生します。私は何かばかげたことをしていると思うので、誰かがそれが何であるかを指摘していただければ幸いです。

いくつかの SDP を解決しようとしています。目標を定義しない場合、YALMIP は解決策を返します (問題が実行可能であることを意味します)。しかし、目標を添付すると、YALMIP は問題が実行不可能であると返し、少し戸惑いました。

上記が発生する、私が調理できる最も単純なSDPのコードを次に示します。変数の宣言と制約の設定は次のとおりです。

y = sdpvar(6,1);
M = sdpvar(3,3);

C = [0,0,0,0,0,0; 0,0,0,0,0,0; -2,0,1.8,0,2,1; 0,0,0,0,0,0; 1,0,-1,0,-1.2,0;
     0,0,0,0,0,0;];

F = [C*y==0, y(6) == 1, M>=0];

F = [F,M(1,1) == y(1), M(2,1) == y(2), M(3,1) == y(3),...
     M(2,2) == y(4), M(3,2) == y(5), M(3,3) == y(6)];

今、YALMIPに実行可能な解決策を見つけるように頼むだけなら

solvesdp(F)

それは返す

info: 'Successfully solved (LMILAB)'
problem: 0

そしていくつかの実行可能な M と y (実際にそうであることを確認しました)。ただし、目的の「y(3) を最小化する」(または実際には y のエントリの任意の線形結合) を追加すると、

solvesdp(F,y(3))

問題が実行不可能であることを返します。

info: 'Infeasible problem (LMILAB)'
problem: 1

y と M は "NaN" トークンでいっぱいです。

よろしくお願いします。

4

1 に答える 1

2

LMILAB は YALMIP と一緒に使用しないでください。

http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Solvers.LMILAB

LMILAB のソルバーには多くの欠陥があり、ここで重要になるのは、ソルバーが不等式をサポートしていないという事実です。これを回避するために、YALMIP は両側不等式を追加し、LMILAB の数値手順を完全に破壊します。

SeDuMi、SDPT3、Mosek などのより一般的な (そして最新の) ソルバーをインストールします。

http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Category.SemidefiniteProgrammingSolver

ところで、追加の変数 y を重複して定義しています。それらを個別の決定変数として使用し、M との関係をエンコードする理由はありません。単にそれらを抽出するだけです。

y = M(find(tril(ones(3))));
于 2013-12-12T06:20:29.380 に答える