Выходы YALMIP Невозможно для простого и выполнимого SDP

Я хочу определить, является ли данная матрица 3x3 положительно-полуопределенной или нет. Для этого я пишу следующий SDP в YALMIP

v=0.2;
a=sdpvar(1);
b=sdpvar(1);
M=[1 a -v/4 ; b 1 0 ; -v/4 0 0.25];
x=sdpvar(1);
optimize([M+x*eye(3)>=0],x,sdpsettings('solver','sedumi'))

Эта программа выдает ошибку "Обнаружено двойное невыполнимое, основное направление улучшения". Это происходит для любого значения v в интервале (0,1].

Учитывая, что эта проблема решаема, я диагонализировал матрицу напрямую, получив, что три собственных значения являются тремя корнями следующего многочлена

16*t^3 - 36*t^2 + (24 - 16*a*b - v^2)*t + (-4 + 4*a*b + v^2)

Вычисляя значения трех корней численно, я вижу, что три из них положительны при знаке (а) = знаке (b) (за исключением небольшой области в окрестности a, b = +-1), для любого значения v. Таким образом, SDP должен работать без проблем и выводить отрицательное значение x без дальнейших осложнений.

Чтобы сделать вещи более интересными, я запустил тот же код со следующей матрицей

M=[1 a v/4 ; b 1 0 ; v/4 0 0.25];

Эта матрица имеет те же собственные значения, что и предыдущая, и в этом случае программа выполняется без проблем, подтверждая, что матрица действительно является положительно-полуопределенной.

Мне очень любопытна природа этой проблемы, любая помощь будет очень признательна.

РЕДАКТИРОВАТЬ: я также попробовал решатель SDPT3, и результаты очень похожи. На самом деле, программа работает гладко для случая +v, но когда я ставлю знак минус, я получаю следующую ошибку

'Unknown problem in solver (Turn on 'debug' in sdpsettings) (Error using  & …'

Кроме того, когда я добавляю некоторые ограничения к переменным, т. Е. Я запускаю следующую команду

optimize([total+w*eye(3)>=0,-1<=a<=1,-1<=b<=1],w,sdpsettings('solver','sdpt3'))

Затем ошибка превращается в ошибку «Неразрешимая проблема».


person Alex    schedule 18.07.2016    source источник
comment
Без анализа кода/проблемы: вы попробовали другие доступные решатели список? SDPT3 должен быть прост в установке. Не имея большого опыта работы с SDP-решателями, я все же знаю, что они намного менее стабильны, чем классические линейные или квадратичные конусные решатели.   -  person sascha    schedule 20.07.2016
comment
Я попробовал SDPT3 с аналогичными результатами (работает без проблем для +v, «Неизвестная проблема в решателе» для -v). Я обновляю вопрос, чтобы включить эту информацию.   -  person Alex    schedule 21.07.2016


Ответы (1)


Поздний ответ, но тем не менее. Указанная вами матрица не является симметричной. Полуопределенное программирование — это оптимизация набора симметричных положительно-полуопределенных матриц.

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

person Johan Löfberg    schedule 13.09.2016
comment
Спасибо за ответ. Действительно, я (ошибочно) предположил, что YALMIP наложит ограничения на симметрию в матрице, чего не произошло. Когда эти ограничения накладываются вручную (или используется симметричная матрица), программа работает без проблем. - person Alex; 13.09.2016