主要内容

Coneprog.

二阶锥编程求解器

描述

Coneprog.功能是二阶锥编程求解器,可找到最少的问题

最小值 X F T. X

受限制

一种 sc 一世 X - B. sc 一世 D. sc T. 一世 X - γ. 一世 一种 X B. AEQ. X = 贝卡 X 乌兰巴托

FXB.贝卡, 和乌兰巴托向量,一种AEQ.是矩阵。对于每一个人一世,矩阵一种sc一世),向量D.sc一世),B.sc一世)和标量γ.一世)是你创建的二阶圆锥约束Themondercone.

有关锥限制的更多详细信息,请参阅二阶锥约束

例子

X= coneprog(FSocconstraints.解决了限制的二阶锥编程问题Socconstraints.编码为

  • 一种sc一世)=socconstraints.a(i)

  • B.sc一世)=socconstraints.b(i)

  • D.sc一世)=socConstraints.d(我)

  • γ.一世)=socconstraints.gamma(i)

例子

X= coneprog(FSocconstraints.一种B.AEQ.贝卡解决问题而受不平等约束的问题斧头B.和平等约束Aeq * x =说真的。放一个= []b = []如果没有不等式。

例子

X= coneprog(FSocconstraints.一种B.AEQ.贝卡乌兰巴托在设计变量上定义一组下限和上限,X这样解决方案总是在范围内lb≤x≤ub。放AEQ = []beq = []如果不存在平等。

例子

X= coneprog(FSocconstraints.一种B.AEQ.贝卡乌兰巴托选项使用指定的优化选项最小化选项。用优化选择设置这些选项。

例子

X= coneprog(问题找到最低限度问题,描述的结构问题

例子

[Xfval.] = coneprog(___还返回解决方案的目标函数值fval.=f'* x,使用先前语法中的任何输入参数组合。

例子

[Xfval.ExitFlag.输出] = coneprog(___另外返回一个值ExitFlag.它描述了退出条件和结构输出包含有关优化过程的信息。

例子

[Xfval.ExitFlag.输出lambda.] = coneprog(___另外,返回一个结构lambda.其字段包含解决方案的双变量X

例子

全部收缩

为了建立一个有二阶锥约束的问题,创建一个二阶锥约束对象。

a = diag([1,1 / 2,0]);b = 0 (3,1);d = [0, 0, 1];伽玛= 0;socconstraints = redongordercone(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,anineq,bineq,aeq,beq,lb,Ub)
找到最优解。
x =3×10.4851 3.8806 2.0000
fval = -8.2462.

解决方案组件x(3)在它的上限。锥形约束在解决方案中是有效的:

常态(a * x-b) -  d'* x当约束激活时,接近0
ans = -2.5677e-08

为了建立一个有多个二阶锥约束的问题,创建一个约束对象数组。要保存时间和内存,请先创建最高索引约束。

一个=诊断接头([1 2 0]);b = 0 (3,1);d = [0, 0, 1];γ= 1;socConstraints (3) = secondordercone (A, b, d,γ);一个=诊断接头([0,1]);d = (0, 1, 0);socConstraints (2) = secondordercone (A, b, d,γ);一个=诊断接头([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

指定客观函数向量和单个二阶锥约束。

f = [-4; -9; -2];asc = diag([1,4,0​​]);B = [0; 0; 0];d = [0, 0, 1];伽玛= 0;socconstraints = redongordercone(ASC,B,D,Gamma);

指定线性不等式约束。

a = [1/4,1 / 9,1];B = 5;

解决这个问题。

[x, fval] = coneprog (f, socConstraints, A, b)
找到最优解。
x =3×13.2304 0.6398 4.1213
fval = -26.9225.

观察迭代的Coneprog.求解器,设置显示选择'iter'

选项= Optimoptions('coneprog''展示''iter');

创建二阶锥编程问题并使用它解决选项

asc = diag([1,1 / 2,0]);b = 0 (3,1);d = [0, 0, 1];伽玛= 0;socconstraints = redongordercone(ASC,B,D,Gamma);f = [-1,-2,0];Aineq = [];bineq = [];Aeq = [];说真的= []; lb = [-Inf,-Inf,0]; ub = [Inf,Inf,2]; [x,fval] = coneprog(f,socConstraints,Aineq,bineq,Aeq,beq,lb,ub,options)
Iter Fval最原始的infas双infas双性间隔时间1 0.000000e+00 0.000000e+00 5.714286e-01 1.250000e-01 0.02 2 -7.558066e+00 0.000000e+00 7.151114e-02 1.154306e -02 0.03 3 -7.366973e+00 0.000000e+00 1.07540e -02 2.352525e-03 0.03 4 -8.243432e+00 0.000000e+00 5.191882e-05 1.135724e-05 0.03 5 -8.246067e+00 1.387779e-17 2.430813e-06 5.317403e-070.03 6 -8.246211e+00 0.000000e+00 6.154504e-09 1.346298e-09 0.04找到最优解。
x =3×10.4851 3.8806 2.0000
fval = -8.2462.

创建二阶锥编程问题的元素。要保存时间和内存,请先创建最高索引约束。

一个=诊断接头([1 2 0]);b = 0 (3,1);d = [0, 0, 1];γ= 1;socConstraints (3) = secondordercone (A, b, d,γ);一个=诊断接头([0,1]);d = (0, 1, 0);socConstraints (2) = secondordercone (A, b, d,γ);一个=诊断接头([0;1/2;1/2]);d = (1, 0, 0); socConstraints(1) = secondordercone(A,b,d,gamma); f = [-1;-2;-4]; options = optimoptions('coneprog''展示''iter');

使用所需的字段创建问题结构,如下所述问题

问题= struct(“f”,F,'socconstraints',socconstraints,“Aineq”,[],'bineq',[],'aeq',[],'beq',[],'磅',[],'UB',[],'求解''coneprog''选项'、选择);

打电话解决问题Coneprog.

[x,fval] = coneprog(问题)
ITER FVAL PRIMAL INFEAS双INFEA二元间隙时间1 0.000000E + 00 0.00000000 + 00 5.555556C-02 0.22 2 -9.696012E + 00 1.850372E-17 7.631901C-02 7.949897E-03 0.25 3 -1.178942E+01 9.251859E-18 1.261803E-02 1.314378E-03 0.25 4 -1.294426E + 01 1.850372C-17 1.683078E-03 1.753206C-04 1.753206C-04 0.25 5 -1295217E + 01 1.850372C-17 8.994595E-04 9.369370E-05 0.25 6 -1.295331C + 01 1.850372E-17 4.748841C-04 4.946709C-05 0.25 7 -1300753E + 01 9.251859C-18 2.799942C-05 2.916606C-05 2.916606C-05 2.916606E-06 0.25 8 -1300671C + 01 9.251859E-18 2.366136e-05 2.464725e-06 0.25 9 -1.300850e+01 1.850372e-17 8.187205e-06 8.528338e-07 0.26 10 -1.300843e+01 4.625929e-18 7.326330e-06 7.631594e-07 0.26 11 -1.300862e+01 9.251859e-18 2.707005e-06 2.819797e-07 0.26 12 -1.300892e+01 0.000000e+00 9.204457e-08 9.587976e-09 0.26 Optimal solution found.
x =3×10.4238 1.6477 2.3225
fval = -13.0089

创建二阶锥编程问题。要保存时间和内存,请先创建最高索引约束。

一个=诊断接头([1 2 0]);b = 0 (3,1);d = [0, 0, 1];γ= 1;socConstraints (3) = secondordercone (A, b, d,γ);一个=诊断接头([0,1]);d = (0, 1, 0);socConstraints (2) = secondordercone (A, b, d,γ);一个=诊断接头([0;1/2;1/2]);d = (1, 0, 0); socConstraints(1) = secondordercone(A,b,d,gamma); f = [-1;-2;-4]; options = optimoptions('coneprog''展示''iter');一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];

解决问题,请求有关解决方案过程的信息。

[x,fval,出口,输出] = coneprog(f,socconstraints,b,aeq,beq,lb,Ub,选项)
ITER FVAL PRIMAL INFEAS双INFEA二元间隙时间1 0.000000E + 00 0.000000E + 00 5.333333E-02 0.63 2 -9.696012E + 00 1.850372E-17 7.631901C-02 7.949897E-03 0.69 3 -1.178942E+01 9.251859E-18 1.261803E-02 1.314378E-03 0.69 4 -1.294426E + 01 1.850372C-17 1.683078E-03 1.753206C-04 1.753206C-04 0.69 5 -1295217E + 01 1.850372E-17 8.994595E-04 9.369370E-05 0.69 6 -1.295331C + 01 1.850372E-17 4.748841C-04 4.946709E-05 0.70 7 -1300753E + 01 9.251859E-18 2.799942C-05 2.916606C-05 2.916606C-05 2.916606C-06 0.70 8 -1300671E + 01 9.251859E-18 2.366136e-05 2.464725e-06 0.70 9 -1.300850e+01 1.850372e-17 8.187205e-06 8.528338e-07 0.70 10 -1.300843e+01 4.625929e-18 7.326330e-06 7.631594e-07 0.70 11 -1.300862e+01 9.251859e-18 2.707005e-06 2.819797e-07 0.70 12 -1.300892e+01 0.000000e+00 9.204457e-08 9.587976e-09 0.70 Optimal solution found.
x =3×10.4238 1.6477 2.3225
fval = -13.0089
EXITFLAG = 1
输出=结构与字段:迭代:12 PrimalFeasibility:0 Dualfeasibily:9.2045E-08 DualityGap:9.5880E-09算法:'内部点'消息:'找到最佳解决方案'。
  • 迭代显示器和输出结构都显示出来Coneprog.使用12次迭代到达解决方案。

  • 退出标志值1outputm.message.价值'找到最佳解决方案。表明解决方案是可靠的。

  • 输出结构表明,通过溶液过程倾向于降低缺点,二重性间隙也是如此。

  • 你可以重现fval.通过乘法输出f'* x

f'* x
ans = -13.0089

创建二阶锥编程问题。要保存时间和内存,请先创建最高索引约束。

一个=诊断接头([1 2 0]);b = 0 (3,1);d = [0, 0, 1];γ= 1;socConstraints (3) = secondordercone (A, b, d,γ);一个=诊断接头([0,1]);d = (0, 1, 0);socConstraints (2) = secondordercone (A, b, d,γ);一个=诊断接头([0;1/2;1/2]);d = (1, 0, 0); socConstraints(1) = secondordercone(A,b,d,gamma); f = [-1;-2;-4];

要解决问题,需要在解决方案中加上所有其他变量Coneprog.输出. .

[x, fval exitflag、输出λ)= coneprog (f, socConstraints);
找到最优解。

检查退回lambda.结构体。因为唯一的问题约束是锥限制,所以只检查SOC.字段lambda.结构体。

disp(lambda.soc)
1.0E-06 * 0.1118 0.3819 0.2184

约束具有非零对偶值,表明约束在解处是活跃的。

输入参数

全部收缩

系数矢量,指定为真实的矢量或真实数组。系数矢量表示目标函数f'* x。符号假设F是列向量,但可以使用行向量或数组。在内部,Coneprog.转换F到列向量f (:)

例子:f = [1,3,5,-6]

数据类型:

二阶锥限制,指定为矢量ThemondrelConeConstraint.对象。使用介绍这些对象Themondercone.功能。

Socconstraints.编码约束

一种 sc 一世 X - B. sc 一世 D. sc T. 一世 X - γ. 一世

阵列和等式之间的映射如下:

  • 一种sc一世)=socconstraints.a(i)

  • B.sc一世)=socconstraints.b(i)

  • D.sc一世)=socConstraints.d(我)

  • γ.一世)=socconstraints.gamma(i)

例子:asc = diag([1 1/2 0]);BSC =零(3,1);dsc = [0; 0; 1];γ= 1;socconstraints = redongordercone(ASC,BSC,DSC,伽玛);

数据类型:塑造

线性不等式约束,指定为真实矩阵。一种是一个m-经过-N.矩阵,其中m是不平等的数量,而且N.变量的个数(长度F)。对于大问题,通过一种作为稀疏矩阵。

一种编码m线性不等式

a * x <= b

在哪里X是栏矢量N.变量X(:), 和B.是一个列向量m元素。

例如,考虑这些不等式:

X1+ 2X2≤10
3.X1+ 4X2≤20
5.X1+ 6X2≤30。

输入以下约束指定不等式。

= [1, 2, 3, 4, 5, 6);b =(10、20、30);

例子:要指定x分量之和为1或更小,取a = =(1,n)B = 1

数据类型:

线性不平等约束,指定为真正的矢量。B.是一个m-元素向量与一种矩阵。如果你通过了B.作为一排矢量,求解器内部转换B.到列向量B(:)。对于大问题,通过B.作为稀疏的矢量。

B.编码m线性不等式

a * x <= b

在哪里X是栏矢量N.变量X(:), 和一种是大小的矩阵m-经过-N.

例如,考虑这些不等式:

X1+ 2X2≤10
3.X1+ 4X2≤20
5.X1+ 6X2≤30。

输入以下约束指定不等式。

= [1, 2, 3, 4, 5, 6);b =(10、20、30);

例子:指定x组件总和为1或更少,使用a = =(1,n)B = 1

数据类型:

线性平等约束,指定为真实矩阵。AEQ.是一个-经过-N.矩阵,其中是等号的数目,和N.变量的个数(长度F)。对于大问题,通过AEQ.作为稀疏矩阵。

AEQ.编码线性平等

Aeq * x =说真的

在哪里X是栏矢量N.变量X(:), 和贝卡是一个列向量元素。

例如,考虑以下等式:

X1+ 2X2+ 3X3.= 10.
2X1+ 4X2+X3.= 20。

通过输入以下约束来指定等式。

AEQ = [1,2,3; 2,4,1];Beq = [10; 20];

例子:要指定x分量和为1,取AEQ = ONE(1,N)Beq = 1

数据类型:

线性等式约束,指定为实向量。贝卡是一个-元素向量与AEQ.矩阵。如果你通过了贝卡作为一排矢量,求解器内部转换贝卡到列向量说真的(:)。对于大问题,通过贝卡作为稀疏的矢量。

贝卡编码线性平等

Aeq * x =说真的

在哪里X是栏矢量N.变量X(:), 和AEQ.是大小的矩阵-经过-N.

例如,考虑以下等式:

X1+ 2X2+ 3X3.= 10.
2X1+ 4X2+X3.= 20。

通过输入以下约束来指定等式。

AEQ = [1,2,3; 2,4,1];Beq = [10; 20];

例子:指定x组件总和为1,使用AEQ = ONE(1,N)Beq = 1

数据类型:

下限,指定为真实的矢量或真实数组。如果长度F等于的长度, 然后指定

x(i)> = lb(i)对所有一世

如果numel(lb), 然后指定

x(i)> = lb(i)为了1 <= i <= numel(lb)

在这种情况下,解算器会发出一个警告。

例子:指定所有X组件都是正的,使用LB =零(尺寸(f))

数据类型:

上限,指定为真实的矢量或真实数组。如果长度F等于的长度乌兰巴托, 然后乌兰巴托指定

x (i) < =乌兰巴托(我)对所有一世

如果元素个数(乌兰巴托)<元素个数(f), 然后乌兰巴托指定

x (i) < =乌兰巴托(我)为了1 <= I <= numel(ub)

在这种情况下,解算器会发出一个警告。

例子:指定所有X组件少于1, 用UB =α(大小(f))

数据类型:

的输出,指定为优化选项优化选择

选项 描述
ConstraintTolerance

可行性公差约束,从标量出发0.通过1ConstraintTolerance测量原始可行性容忍度。默认为1 e-6

显示

显示水平(见迭代显示):

  • “最后一次”(默认)仅显示最终输出。

  • 'iter'在每次迭代时显示输出。

  • “关闭”或者'没有任何'显示无输出。

最大

允许的最大迭代次数,一个正整数。默认为200.

公差和停止标准迭代和函数计数

MaxTime.

算法运行的最大时间数,正数或INF.。默认为INF.,禁用此停止标准。

OptimalityTolerance

终止公差对双重可行性,正标量。默认为1 e-6

例子:Optimoptions('coneprog','显示','iter','maxtorations',100)

问题结构,指定为具有以下字段的结构。

字段名称 入口

F

线性目标函数矢量F

Socconstraints.

二阶锥限制的结构阵列

Aineq.

线性不等式约束的矩阵

bineq

线性不平等约束传染媒介

AEQ.

线性平等约束的矩阵

贝卡

线性平等约束传染媒介
下限矢量
乌兰巴托 上界向量

解算器

'coneprog'

选项

选择的选项优化选择

数据类型:塑造

输出参数

全部收缩

解决方案,返回真正的矢量或真实数组。的大小X大小是一样的吗F。这X时,输出为空ExitFlag.值为-2,-3或-10。

目标函数在解处的值,以实数返回。一般来说,fval.=f'* x。这fval.时,输出为空ExitFlag.值为-2,-3或-10。

原因Coneprog.停止,返回整数。

价值 描述

1

该功能融合到解决方案X

0.

超过的迭代次数选项。maxIterations,或超出秒数的解决时间options.maxtime.

-2

没有发现可行的点。

-3

问题是无限的。

-7

搜索方向变得太小。无法进一步进展。

-10年

问题在数字上不稳定。

有关优化过程的信息,作为具有这些字段的结构返回。

场地 描述
算法

优化算法使用

双重可行性

最大的双重约束违规

二元间

二元间隙

迭代

迭代次数

信息

退出消息

PrimalFeasibility.

最大限度的约束违规

输出字段双重可行性二元间, 和PrimalFeasibility.ExitFlag.值为-2,-3或-10。

解决方案的双重变量,作为带有这些字段的结构返回。

场地 描述
降低

对应的下限

上限对应乌兰巴托

ineqlin.

线性不等式对应于一种B.

eqlin.

线性等式对应AEQ.贝卡

SOC. 对应的二阶锥限制Socconstraints.

lambda.字段是空的ExitFlag.值为-2,-3或-10。

拉格朗日乘法器(双变量)是以下拉格朗日的一部分,在解决方案中是静止(零梯度)的一部分:

F T. X + σ. 一世 λ. SOC. 一世 D. SOC. T. 一世 X - γ 一世 - 一种 SOC. 一世 X - B. SOC. 一世 + λ. ineqlin. T. B. - 一种 X + λ. eqlin. T. AEQ. X - 贝卡 + λ. T. 乌兰巴托 - X + λ. 降低 T. X -

不等式项乘以lambda.字段是非负面的。

更多关于

全部收缩

二阶锥约束

为什么约束条件是

一种 X - B. D. T. X - γ.

称为二阶锥限制?在3-D空间中考虑锥体,椭圆形横截面X-y平面上,与直径成正比Z.协调。这y坐标具有尺寸½,而且X坐标具有缩放1.在[0,0,0]的情况下,不平等定义了这种锥体的内部

X 2 + y 2 4. Z.

在里面Coneprog.语法,这个锥体具有以下参数。

a = diag([1 1/2 0]);B = [0; 0; 0];d = [0, 0, 1];伽玛= 0;

绘制锥的边界。

[x,y] = meshgrid(-2:0.1:2);z = sqrt(x. ^ 2 + y. ^ 2/4);冲浪(x,y,z)视图(8,2)xlabel'X'ylabel'是'Zlabel.'Z'

锥形点为零,垂直方向扩大。

B.γ争论移动锥体。这一种D.参数旋转圆锥并改变其形状。

算法

该算法采用内点法。有关详细信息,请参见二阶锥编程算法

替代功能

应用程序

优化Live Editor任务提供可视界面Coneprog.

在R2020B中介绍