主要内容

coneprog

二阶锥编程求解器

描述

coneprog函数是一个二阶锥编程求解器,它可以找到指定的问题的最小值

最小值 x f T x

受限于

一个 sc x b sc d sc T x γ 一个 x b Aeq x 说真的 x 乌兰巴托

fxb说真的,乌兰巴托是向量,并且一个而且Aeq矩阵。为每一个,矩阵一个sc),向量dsc),bsc)和标量γ)的二阶锥约束,您可以使用secondordercone

有关锥约束的详细信息,请参见二阶锥约束

例子

x= coneprog (fsocConstraints求解了约束条件下的二阶锥规划问题socConstraints编码为

  • 一个sc) =socConstraints(我)。一个

  • bsc) =socConstraints(我)。b

  • dsc) =socConstraints .d(我)

  • γ) =socConstraints(我)可以利用

例子

x= coneprog (fsocConstraints一个bAeq说真的解决了受不等式约束的问题* xb和等式约束Aeq*x = beq.集A = []而且B = []如果不存在不平等。

例子

x= coneprog (fsocConstraints一个bAeq说真的乌兰巴托定义一组设计变量的下界和上界,x所以解总是在这个范围内Lb≤x≤ub.集Aeq = []而且Beq = []如果等式不存在。

例子

x= coneprog (fsocConstraints一个bAeq说真的乌兰巴托选项所指定的优化选项的使用最小化选项.使用optimoptions设置这些选项。

例子

x= coneprog (问题求最小值问题中描述的结构问题

例子

xfval= coneprog(___还返回解处的目标函数值fvalf ' * x,使用以前语法中的任何输入参数组合。

例子

xfvalexitflag输出= coneprog(___另外返回一个值exitflag它描述了退出条件和结构输出其中包含关于优化过程的信息。

例子

xfvalexitflag输出λ= coneprog(___另外返回一个结构λ谁的域包含解的对偶变量x

例子

全部折叠

要使用二阶锥约束来设置问题,请创建一个二阶锥约束对象。

A = diag([1,1/2,0]);B = 0 (3,1);D = [0;0;1];Gamma = 0;socConstraints = seconddordercone (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)
找到最优解。
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 = 0 (3,1);D = [0;0;1];Gamma = -1;socConstraints(3) = seconddordercone (A,b,d,gamma);A = diag([3,0,1]);D = [0;1;0];socConstraints(2) = seconddordercone (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)
找到最优解。
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];Gamma = 0;socConstraints = seconddordercone (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求解器,设置显示选项“通路”

选项= optimoptions(“coneprog”“显示”“通路”);

创建一个二阶锥规划问题,并使用选项

Asc = diag([1,1/2,0]);B = 0 (3,1);D = [0;0;1];Gamma = 0;socConstraints = seconddordercone (Asc,b,d,gamma);F = [- 1,2,0];Aineq = [];Bineq = [];Aeq = [];Beq = []; lb = [-Inf,-Inf,0]; ub = [Inf,Inf,2]; [x,fval] = coneprog(f,socConstraints,Aineq,bineq,Aeq,beq,lb,ub,options)
Iter Fval原始Infeas双Infeas对偶缺口时间1 0.000000e+00 0.000000e+00 5.714286e-01 1.250000e-01 0.01 2 -7.558066e+00 0.000000e+00 7.151114e-02 1.564306e-02 0.02 3 -7.366973e+00 2.775558e-17 1.075440e-02 2.352525e-03 0.02 4 -8.243432e+00 1.387779e-17 5.191882e-05 1.135724e-05 0.02 5 -8.246067e+00 0.000000e+00 2.430813e-06 5.317403e-07 0.02 6 -8.246211e+00 1.387779e-17 6.154504e-09 1.346298e-09找到最优解。
x =3×10.4851 3.8806 2.0000
Fval = -8.2462

创建一个二阶锥规划问题的元素。为了节省时间和内存,请先创建索引最高的约束。

A = diag([1,2,0]);B = 0 (3,1);D = [0;0;1];Gamma = -1;socConstraints(3) = seconddordercone (A,b,d,gamma);A = diag([3,0,1]);D = [0;1;0];socConstraints(2) = seconddordercone (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]; options = optimoptions(“coneprog”“显示”“通路”);

用必需的字段创建问题结构,如问题

问题= struct(“f”f...“socConstraints”socConstraints,...“Aineq”[],“bineq”[],...“Aeq”[],“说真的”[],...“磅”[],乌兰巴托的[],...“规划求解”“coneprog”...“选项”、选择);

打电话解决问题coneprog

[x,fval] = coneprog(problem)
Iter Fval主Infeas双Infeas对偶缺口时间1 0.000000e+00 0.000000e+00 5.333333e-01 5.555556e-02 0.06 2 -9.696012e+00 5.551115e-17 7.631901e-02 7.949897e-03 0.07 3 -1.178942e+01 3.700743e-17 1.683078e-03 1.753206e-04 0.07 5 -1.295217e+01 9.251859e-18 8.994595e-04 9.369370e-05 0.07 7 -1.300753e+01 9.251859e-18 2.799942e-05 2.916606e-06 0.07 -1.300671e+01 9.251859e-18 2.799942e-05 2.916606e-06 0.07 -1.300671e+01 9.251859e-18 2.799942e-05 9.251859e-182.3.66136e-05 2.464725e-06 0.07 9 -1.300850e+01 9.251859e-18 8.222244e-06 8.564838e-07 0.07 10 -1.300843e+01 1.850372e-17 7.318333e-06 7.623264e-07 0.07 11 -1.300865e+01 9.251859e-18 2.636568e-06 2.746425e-07 0.07 12 -1.300892e+01 1.850372e-17 3.407939e-08 3.549936e-09 0.08 Optimal solution found.
x =3×10.4238 1.6477 2.3225
Fval = -13.0089

创建一个二阶锥规划问题。为了节省时间和内存,请先创建索引最高的约束。

A = diag([1,2,0]);B = 0 (3,1);D = [0;0;1];Gamma = -1;socConstraints(3) = seconddordercone (A,b,d,gamma);A = diag([3,0,1]);D = [0;1;0];socConstraints(2) = seconddordercone (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]; options = optimoptions(“coneprog”“显示”“通路”);A = [];B = [];Aeq = [];Beq = [];Lb = [];Ub = [];

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

[x,fval,exitflag,output] = coneprog(f,socConstraints,A,b,Aeq,beq,lb,ub,options)
Iter Fval主Infeas双Infeas对偶缺口时间1 0.000000e+00 0.000000e+00 5.333333e-01 5.555556e-02 0.03 2 -9.696012e+00 5.551115e-17 7.631901e-02 7.949897e-03 0.03 3 -1.178942e+01 3.700743e-17 1.683078e-03 1.753206e-04 0.03 5 -1.295217e+01 9.251859e-18 8.994595e-04 9.369370e-05 0.03 6 -1.295331e+01 9.251859e-18 4.748841e- 05 4.946709e-05 0.03 7 - 1.30073e +01 9.251859e-18 2.799942e-05 2.916606e-06 0.03 8 -1.300671e+01 9.251859e-18 2.799942e-05 9.251859e-182.3.66136e-05 2.464725e-06 0.03 9 -1.300850e+01 9.251859e-18 8.222244e-06 8.564838e-07 0.03 10 -1.300843e+01 1.850372e-17 7.318333e-06 7.623264e-07 0.03 11 -1.300865e+01 9.251859e-18 2.636568e-06 2.746425e-07 0.04 12 -1.300892e+01 1.850372e-17 3.407939e-08 3.549936e-09 0.04 Optimal solution found.
x =3×10.4238 1.6477 2.3225
Fval = -13.0089
Exitflag = 1
输出=带字段的结构:迭代:12 primal可行性:1.8504e-17 dual可行性:3.4079e-08 dualitygap: 3.5499e-09算法:'内点'线性求解器:'增强'消息:'找到最优解决方案。'
  • 迭代显示和输出结构都显示了这一点coneprog用了12次迭代才得到解决方案。

  • 退出标志值1output.message价值“找到了最佳解决方案。”表示该解决方案可靠。

  • 输出结构表明,不可行性倾向于通过解决过程减少,对偶差距也是如此。

  • 你可以复制fval乘以输出f ' * x

f ' * x
Ans = -13.0089

创建一个二阶锥规划问题。为了节省时间和内存,请先创建索引最高的约束。

A = diag([1,2,0]);B = 0 (3,1);D = [0;0;1];Gamma = -1;socConstraints(3) = seconddordercone (A,b,d,gamma);A = diag([3,0,1]);D = [0;1;0];socConstraints(2) = seconddordercone (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,exitflag,output,lambda] = coneprog(f,socConstraints);
找到最优解。

检查归来者λ结构。因为唯一的问题约束是锥约束,只检查socλ结构。

disp (lambda.soc)
1.0e-06 * 0.2109 0.7204 0.3662

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

输入参数

全部折叠

系数向量,指定为实向量或实数组。系数向量表示目标函数f ' * x.这个符号假设f是列向量,但也可以使用行向量或数组。在内部,coneprog转换f对列向量f (:)

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

数据类型:

二阶锥约束,指定为向量SecondOrderConeConstraint对象。属性创建这些对象secondordercone函数。

socConstraints编码约束

一个 sc x b sc d sc T x γ

其中数组与方程的映射如下:

  • 一个sc) =socConstraints.A(我)

  • bsc) =socConstraints.b(我)

  • dsc) =socConstraints.d(我)

  • γ) =socConstraints.gamma(我)

例子:Asc = diag([1 1/2 0]);BSC = 0 (3,1);DSC = [0;0;1];Gamma = -1;socConstraints = secondordercone(Asc,bsc,dsc,gamma);

数据类型:结构体

线性不等式约束,指定为实矩阵。一个是一个——- - - - - -N矩阵,不等式的数量,和N变量的数量(长度f).对于大问题,可以通过一个作为一个稀疏矩阵。

一个编码线性不等式

A*x <= b

在哪里x列向量是N变量x (:),b列向量是元素。

例如,考虑以下不等式:

x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30。

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

A = [1,2;3,4;5,6];B = [10;20;30];

例子:要指定x分量之和小于等于1,取A = ones(1,N)而且B = 1

数据类型:

线性不等式约束,指定为实向量。b是一个元素的相关向量一个矩阵。如果你通过了b作为行向量,解算器内部转换b对列向量b (:).对于大问题,可以通过b作为一个稀疏向量。

b编码线性不等式

A*x <= b

在哪里x列向量是N变量x (:),一个矩阵的大小——- - - - - -N

例如,考虑以下不等式:

x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30。

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

A = [1,2;3,4;5,6];B = [10;20;30];

例子:要指定x分量的和为1或更小,请使用A = ones(1,N)而且B = 1

数据类型:

线性等式约束,指定为实矩阵。Aeq是一个——- - - - - -N矩阵,等式的个数,和N变量的数量(长度f).对于大问题,可以通过Aeq作为一个稀疏矩阵。

Aeq编码线性等式

Aeq*x = beq

在哪里x列向量是N变量x (:),说真的列向量是元素。

例如,考虑以下等式:

x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20。

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

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

例子:要指定x分量的和为1,取Aeq = ones(1,N)而且Beq = 1

数据类型:

线性等式约束,指定为实向量。说真的是一个元素的相关向量Aeq矩阵。如果你通过了说真的作为行向量,解算器内部转换说真的对列向量说真的(:).对于大问题,可以通过说真的作为一个稀疏向量。

说真的编码线性等式

Aeq*x = beq

在哪里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 = ones(1,N)而且Beq = 1

数据类型:

下界,指定为实向量或实数组。如果的长度f等于的长度,然后指定

X (i) >= lb(i)对所有

如果数值(lb) <数值(f),然后指定

X (i) >= lb(i)1 <= I <= number (lb)

在这种情况下,求解器发出警告。

例子:要指定所有x分量都是正的,使用Lb = 0 (size(f))

数据类型:

上界,指定为实向量或实数组。如果的长度f等于的长度乌兰巴托,然后乌兰巴托指定

X (i) <= ub(i)对所有

如果Numel (ub) < Numel (f),然后乌兰巴托指定

X (i) <= ub(i)1 <= I <= numel(ub)

在这种情况下,求解器发出警告。

例子:指定所有x分量都小于1,使用Ub = ones(size(f))

数据类型:

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

选项 描述
ConstraintTolerance

可行性公差为约束,一个标量从0通过1ConstraintTolerance测量原始可行性公差。默认为1 e-6

显示

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

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

  • “通路”显示每次迭代的输出。

  • “关闭”“没有”不显示输出。

LinearSolver

迭代中求解某一步的算法:

  • “汽车”(默认)coneprog选择分步求解器。

    • 如果问题是稀疏的,则步进求解器是“prodchol”

    • 否则,步进求解器是“增强”

  • “增强”-增强形式步骤求解器。看到[1]

  • “正常”-标准形式步进求解器。看到[1]

  • “prodchol”-产品形式Cholesky步进求解器。看到[4]而且[5]

  • “舒尔”舒尔补法步进求解器。看到[2]

如果“汽车”表现不好,试试这些建议吧LinearSolver

  • 如果问题是稀疏的,尝试一下“正常”

  • 如果问题是一些密集的柱或大锥的稀疏,请尝试“prodchol”“舒尔”

  • 如果问题是密集的,使用“增强”

有关稀疏示例,请参见比较coneprog算法的速度

MaxIterations

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

看到公差和停止标准而且迭代和功能计数

MaxTime

算法运行的最大时间(以秒为单位),一个正数或.默认为,将禁用此停止条件。

OptimalityTolerance

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

例子:optimoptions(‘coneprog’,‘显示’,‘iter’,‘MaxIterations’,100)

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

字段名 条目

f

线性目标函数向量f

socConstraints

构造二阶锥约束数组

Aineq

线性不等式约束矩阵

bineq

线性不等式约束向量

Aeq

线性等式约束矩阵

说真的

线性等式约束的向量
下界向量
乌兰巴托 上界向量

解算器

“coneprog”

选项

创建的选项optimoptions

数据类型:结构体

输出参数

全部折叠

解,作为实向量或实数组返回。的大小x和的尺寸一样吗f.的x时,输出为空exitflag取值为-2,3.,或-10

目标函数在解处的值,作为实数返回。一般来说,fvalf ' * x.的fval时,输出为空exitflag取值为-2,3.,或-10

原因coneprog停止,以整数形式返回。

价值 描述

1

函数收敛为解x

0

超过迭代次数选项。米axIterations,或超过解决时间(以秒为单位)选项。MaxTime

-2

没有找到可行点。

3

这个问题是无界的。

7

搜索方向变得太小了。没有进一步的进展。

-10

这个问题在数值上不稳定。

提示

如果你得到退出标志07,或-10的值,尝试使用不同的值LinearSolver选择。

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

描述
算法

所使用的优化算法

dualfeasibility

双重约束违反的最大值

dualitygap

二元性的差距

迭代

迭代次数

消息

退出消息

primalfeasibility

约束违反的最大值

linearsolver 采用内部步进求解算法

输出字段dualfeasibilitydualitygap,primalfeasibility为空时,exitflag取值范围为-2、-3或-10。

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

描述
较低的

对应的下界

对应的上界乌兰巴托

ineqlin

线性不等式对应于一个而且b

eqlin

线性等式对应于Aeq而且说真的

soc 二阶锥约束对应于socConstraints

λ为空([])当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

乘以的不等式项λ字段是非负的。

更多关于

全部折叠

二阶锥约束

为什么是约束

一个 x b d T x γ

叫做二阶锥约束?考虑三维空间中的一个圆锥,其截面为椭圆x-y平面,与直径成正比z坐标。的y坐标的比例是1 / 2,而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];Gamma = 0;

画出圆锥体的边界。

[X,Y] = meshgrid(-2:0.1:2);Z =√(X。²+ y .²/4);surf(X,Y,Z) view(8,2) xlabel“x”ylabel“y”zlabel“z”

点为零的圆锥,垂直方向加宽。

b而且γ参数移动圆锥体。的一个而且d参数旋转圆锥体并改变其形状。

算法

该算法采用内点法。详细信息请参见二阶锥规划算法

选择功能

应用程序

优化活动编辑器任务提供了一个可视化界面coneprog

版本历史

R2020b中介绍

全部展开