В этом примере показано, как преобразовать квадратичное ограничение в форму ограничения конуса второго порядка. Квадратичное ограничение имеет вид
Коническое программирование второго порядка имеет ограничения вида
⋅x-γ (i).
Матрица должна быть симметричной и положительной полуопределенной для преобразования квадратичных ограничений. Пусть - квадратный корень из , что означает = ST * S. Вычислить S можно с помощьюsqrtm. Предположим, что существует решение уравнения -q, которое всегда верно, Q является положительным определенным. b с помощьюb = -S\q.
bTb+c=‖Sx-b‖2+c-bTb.
Следовательно, если c, то квадратичное ограничение эквивалентно коническому ограничению второго порядка с
S
b
0
bTb-c
Задание пятиэлементного вектора f представление целевой функции .
f = [1;-2;3;-4;5];
Установка матрицы квадратичных ограничений Q как случайная положительная определенная матрица 5 на 5. Набор q в качестве случайного 5-элементного вектора и принять аддитивную константу -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
Эти два решения почти идентичны.
coneprog | quadprog | secondordercone