YALMIP正在返回一个程序不可行的情况

时间:2013-12-11 21:30:45

标签: matlab mathematical-optimization convex-optimization

我在尝试使用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”代币。

非常感谢提前。

1 个答案:

答案 0 :(得分: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))));