通过SeDuMi解决SDP(简单示例)

时间:2019-04-25 07:59:42

标签: matlab mathematical-optimization solver convex-optimization

我正在考虑以下半定性编程:

enter image description here

变量y = [y00; y10; y01; y20; y11; y02],因此尺寸为6。

我的MATLAB代码是

A1 = zeros(3,3); A2 = zeros(3,3); A3 = zeros(3,3); 
A4 = zeros(3,3); A5 = zeros(3,3); A6 = zeros(3,3); 
A0 = zeros(3,3);         %    F0
A1(1,1)=1;               %y00 F1
A2(1,2)=1; A2(2,1)=1;    %y10 F2
A3(1,3)=1; A3(3,1)=1;    %y01 F3
A4(2,2)=1;               %y20 F4
A5(2,3)=1; A5(3,2)=1;    %y11 F5
A6(3,3)=1;               %y02 F6

F0 = A0; 
F1 = A1; F2 = A2; F3 = A3; F4 = A4; F5 = A5; F6 = A6; 
c = [0;0;0;1;0;1]; btt = -c;  % object function
A = [0 0 1 0 0 0;
     0 0 0 0 2 0]; % Equality constraint A
b = [-1;-1]; delta = [10^-8;10^-8]; hatb = b-delta; 
At = -[vec(F1) vec(F2) vec(F3) vec(F4) vec(F5) vec(F6)]; Att = [-A;At]; 
ctt = [-hatb;vec(F0)]; 
K.l = size(A,1);
K.s = size(F0,1);
[x,y,info] = sedumi(Att,btt,ctt,K);
y

我阅读了以下教程:

https://www.ece.uvic.ca/~wslu/Talk/SeDuMi-Remarks.pdf(第7页的SDP)

请注意

  1. 在第9页上,我们要求Ay> = b。但是,我的约束之一是“ =”。所以我减去\ delta(非常小的数字),这样我就可以表示Ay> = b。
  2. 不等式约束可以表示为 y00 * A1 + y10 * A2 + ....> = 0
  3. 我得到的y非常小(仅y00 = 0.0287),并且y02不等于y02。 (与上面给出的答案不同)

我不确定我在哪里出错。请给我一些建议。

先谢谢了。

2 个答案:

答案 0 :(得分:2)

为什么减去一个小增量与将不等式转换为等式有什么关系?一个相等将是一个双面不平等(即两个相等将给出四个元素约束)

但是,此处的正确方法是使用K.f字段传达平等性。

更好的是,您的模型应解释为原始标准格式的表示形式,这意味着您仅应具有两个A矩阵来传达两个相等性。

也许您应该使用诸如YALMIP或CVX之类的建模工具来避免所有这些底层的细节,这些细节对于这些小琐碎的问题来说都是可怕的

答案 1 :(得分:0)

要继续使用前面的答案:例如,如果10x = 4,但是您需要将其置于不等式中,您还可以这样说: 10x <= 4和10x> = 4。

此外,我建议您改为查看以下内容: http://sedumi.ie.lehigh.edu/sedumi/files/sedumi-downloads/SeDuMi_Guide_11.pdf