Решите SDP с помощью SeDuMi (простой пример)

Я рассматриваю следующее полуопределенное программирование:

введите здесь описание изображения

Переменная у = [y00 ; у10 ; у01 ; у20 ; у11 ; 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 (SDP из стр.7)

Обратите внимание, что

  1. На стр.9 требуется Ay>=b. Однако одним из моих ограничений является «=». Поэтому я вычитаю \delta (очень маленькое число), чтобы сформулировать Ay>=b.
  2. Ограничение неравенства можно сформулировать как y00*A1 + y10*A2 + ....>= 0
  3. Полученные значения y очень малы (всего y00=0,0287), а y02 не равно y02. (Не то же самое, что ответ, данный выше)

Я не уверен, где я делаю ошибку. Пожалуйста, дайте мне несколько предложений.

Заранее спасибо.


person sleeve chen    schedule 25.04.2019    source источник


Ответы (2)


Почему вычитание небольшой дельты связано с преобразованием неравенства в равенство? Равенство будет двусторонним неравенством (т.е. два равенства дадут четыре поэлементных ограничения)

Однако правильным способом здесь было бы использование поля K.f для передачи равенств.

Более того, ваша модель должна интерпретироваться как представление первичной стандартной формы, то есть у вас должно быть только две матрицы A для передачи двух равенств.

Возможно, вам следует использовать инструмент моделирования, такой как YALMIP или CVX, чтобы избежать всех этих низкоуровневых мелких деталей, которые ужасны для всего, кроме этих маленьких тривиальных проблем.

person Johan Löfberg    schedule 26.04.2019

В продолжение предыдущего ответа: например, если 10x = 4, но вам нужно поместить это в неравенство, вы также можете сказать, что: 10x ‹= 4 и 10x >= 4.

Кроме того, я предлагаю вам взглянуть на это: http://sedumi.ie.lehigh.edu/sedumi/files/sedumi-downloads/SeDuMi_Guide_11.pdf

person Luis Herrera    schedule 30.11.2019