exponenta event banner

Преобразовать квадратичные зависимости в зависимости конуса второго порядка

В этом примере показано, как преобразовать квадратичное ограничение в форму ограничения конуса второго порядка. Квадратичное ограничение имеет вид

xTQx+2qTx+c≤0.

Коническое программирование второго порядка имеет ограничения вида

Asc (i) ⋅x-bsc (i) ≤dsc (i) ⋅x-γ (i).

Матрица Q должна быть симметричной и положительной полуопределенной для преобразования квадратичных ограничений. Пусть S - квадратный корень из Q, что означает Q = S * S = ST * S. Вычислить S можно с помощьюsqrtm. Предположим, что существует решение b уравнения STb = -q, которое всегда верно, когда Q является положительным определенным. Вычислить b с помощьюb = -S\q.

xTQx + 2qTx + c = xTSTSx-2 (STb) Tx + c = (Sx-b) T (Sx-b) - bTb+c=‖Sx-b‖2+c-bTb.

Следовательно, если bTb > c, то квадратичное ограничение эквивалентно коническому ограничению второго порядка с

  • Asc = S

  • bsc = b

  • dsc = 0

  • γ = -bTb-c

Числовой пример

Задание пятиэлементного вектора f представление целевой функции fTx.

f = [1;-2;3;-4;5];

Установка матрицы квадратичных ограничений Q как случайная положительная определенная матрица 5 на 5. Набор q в качестве случайного 5-элементного вектора и принять аддитивную константу c = -1.

rng default % For reproducibility
Q = randn(5) + 3*eye(5);
Q = (Q + Q')/2; % Make Q symmetric
q = randn(5,1);
c = -1;

Создание входных данных для coneprog, создайте матрицу S как квадратный корень из Q.

S = sqrtm(Q);

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

b = -S\q;
d = zeros(size(b));
gamma = -sqrt(b'*b-c);
sc = secondordercone(S,b,d,gamma);

Звонить coneprog для решения проблемы.

[x,fval] = coneprog(f,sc)
Optimal solution found.
x = 5×1

   -0.7194
    0.2669
   -0.6309
    0.2543
   -0.0904

fval = -4.6148

Сравнить этот результат с результатом, полученным при решении той же задачи с помощью fmincon. Запишите квадратичное ограничение, как описано в разделе Анонимные функции нелинейных ограничений.

x0 = randn(5,1); % Initial point for fmincon
nlc = @(x)x'*Q*x + 2*q'*x + c;
nlcon = @(x)deal(nlc(x),[]);
[xfmc,fvalfmc] = fmincon(@(x)f'*x,x0,[],[],[],[],[],[],nlcon)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
xfmc = 5×1

   -0.7196
    0.2672
   -0.6312
    0.2541
   -0.0902

fvalfmc = -4.6148

Эти два решения почти идентичны.

См. также

| |

Связанные темы