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 回答