secondordercone

Создайте коническое ограничение второго порядка

Описание

secondordercone функция создает коническое ограничение второго порядка, представляющее неравенство

AxbdTxγ

из входных матриц ABD, и gamma.

пример

socConstraint = secondordercone(A,b,d,gamma) создает конический ограничительный объект socConstraint второго порядка.

Решите задачи с коническими ограничениями второго порядка при помощи coneprog функция. Чтобы представлять несколько конических ограничений, передайте массив этих ограничений к coneprog как показано в примере Несколько Конических Ограничений.

Примеры

свернуть все

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

A = diag([1,1/2,0]);
b = zeros(3,1);
d = [0;0;1];
gamma = 0;
socConstraints = secondordercone(A,b,d,gamma);

Создайте вектор целевой функции.

f = [-1,-2,0];

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

Aineq = [];
bineq = [];
Aeq = [];
beq = [];

Установите верхние и нижние границы на x(3).

lb = [-Inf,-Inf,0];
ub = [Inf,Inf,2];

Решите задачу при помощи coneprog функция.

[x,fval] = coneprog(f,socConstraints,Aineq,bineq,Aeq,beq,lb,ub)
Optimal solution found.
x = 3×1

    0.4851
    3.8806
    2.0000

fval = -8.2462

Компонент решения x(3) в его верхней границе. Коническое ограничение активно в решении:

norm(A*x-b) - d'*x % Near 0 when the constraint is active
ans = -2.5677e-08

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

A = diag([1,2,0]);
b = zeros(3,1);
d = [0;0;1];
gamma = -1;
socConstraints(3) = secondordercone(A,b,d,gamma);

A = diag([3,0,1]);
d = [0;1;0];
socConstraints(2) = secondordercone(A,b,d,gamma);

A = diag([0;1/2;1/2]);
d = [1;0;0];
socConstraints(1) = secondordercone(A,b,d,gamma);

Создайте линейный вектор целевой функции.

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

Решите задачу при помощи coneprog функция.

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

    0.4238
    1.6477
    2.3225

fval = -13.0089

Входные параметры

свернуть все

Линейный фактор конуса в виде действительной матрицы. Количество столбцов в A должен равняться числу элементов в d, и количество строк в A должен равняться числу элементов в b.

Пример: diag([1,1/2,0])

Типы данных: double

Центр конуса в виде вектора действительных чисел. Число элементов в b должен равняться количеству строк в A.

Пример: zeros(3,1)

Типы данных: double

Линейный связанный в виде вектора действительных чисел. Число элементов в d должен равняться количеству столбцов в A.

Пример: [0;0;1]

Типы данных: double

Связанный в виде действительного скаляра. Меньшие значения gamma соответствуйте более свободным ограничениям.

Пример 1

Типы данных: double

Выходные аргументы

свернуть все

Коническое ограничение второго порядка, возвращенное как SecondOrderConeConstraint объект. Используйте этот объект в качестве ограничения для coneprog решатель. Если вы имеете несколько конических ограничений, передаете вектор из ограничений к coneprog; смотрите Несколько Конических Ограничений.

Введенный в R2020b