主要内容

第二阶酮

创建二阶锥体约束

描述

第二阶酮函数创建代表不平等的二阶锥体约束

一个 Å X - b d t Å X - γ

从输入矩阵一个,,,,b,,,,d, 和伽玛

例子

Socconstraint= secondorderCone(一个,,,,b,,,,d,,,,伽玛创建二阶锥体约束对象Socconstraint

通过使用二阶锥体约束解决问题Coneprog功能。要表示多个锥体约束,请将这些约束的数组传递给Coneprog如示例所示几个圆锥约束

例子

全部收缩

要设置使用二阶锥体约束的问题,请创建二阶锥体约束对象。

a = diag([1,1/2,0]);b =零(3,1);d = [0; 0; 1];伽马= 0;socConstraints = secondorderCone(a,b,d,伽马);

创建目标函数向量。

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)
找到最佳解决方案。
x =3×10.4851 3.8806 2.0000
FVAL = -8.2462

解决方案组件x(3)处于上限。圆锥约束在解决方案上处于活动状态:

norm(a*x -b)-d'*x当约束处于活动状态时,%接近0
ANS = -2.5677E -08

要设置有几个二阶锥体约束的问题,请创建一个约束对象。为了节省时间和内存,请先创建最高的索引约束。

a = diag([1,2,0]);b =零(3,1);d = [0; 0; 1];伽马= -1;socconstraints(3)= secondorderCone(a,b,d,伽马);a = diag([3,0,1]);d = [0; 1; 0];socconstraints(2)= secondordercone(a,b,d,伽马);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)
找到最佳解决方案。
x =3×10.4238 1.6477 2.3225
FVAL = -13.0089

输入参数

全部收缩

锥的线性因子,指定为真基质。列中的数量一个必须等于d,以及行的数量一个必须等于b

例子:诊断([1,1/2,0])

数据类型:双倍的

锥体的中心,指定为真实向量。元素中的数量b必须等于行的数量一个

例子:零(3,1)

数据类型:双倍的

线性绑定,指定为真实向量。元素中的数量d必须等于列的数量一个

例子:[0; 0; 1]

数据类型:双倍的

绑定,指定为真实标量。较小的值伽玛对应于宽松的约束。

例子:-1

数据类型:双倍的

输出参数

全部收缩

二阶锥体约束,返回secondorderconectraint目的。使用此对象作为约束Coneprog求解器。如果您有多个锥体约束,请将约束的向量传递给Coneprog;看几个圆锥约束

在R2020b中引入