主要内容

coneprog

二阶锥规划求解器

描述

coneprog函数是一个二阶锥规划求解器,它能找到指定问题的最小值

x f T x

受约束

一个 SC. x - b SC. ≤. d SC. T x - γ 一个 x ≤. b Aeq x 说真的 ≤. x ≤. UB.

fxb说真的,UB.是载体,和一个Aeq矩阵。为每一个, 矩阵一个SC.),载体dSC.),bSC.)和标量γ)是在一个二阶锥约束中创建的secondordercone

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

例子

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

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

  • bSC.)=socConstraints.b(我)

  • dSC.)=socconstraints.d(i)

  • γ)=socConstraints.gamma(我)

例子

x= coneprog (fsocConstraints一个bAeq说真的求解受不等式约束的问题* x≤.b和等式约束aeq * x = beq.集a = []B = []如果没有不等式。

例子

x= coneprog (fsocConstraints一个bAeq说真的UB.定义一组设计变量的上下限,x所以解总是在这个范围内Lb≤x≤ub.集Aeq = []说真的= []如果没有平等性存在。

例子

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

例子

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

例子

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

例子

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

例子

xfvalexitflag输出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 = [];说真的= [];

设置上下限x (3)

磅=(负负0);乌兰巴托=(正,正无穷,2);

用……来解决问题coneprog函数。

[x, fval] = coneprog (f socConstraints Aineq、bineq Aeq,说真的,磅,乌兰巴托)
找到最佳解决方案。
X =3×10.4851 3.8806 2.0000
fval = -8.2462

解决方案组件x (3)在它的上界。在求解处锥约束是主动的:

规范(*取向)- d ' * x约束激活时近0°
ans = -2.5677 e-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 =诊断接头((1,4,0));b = (0, 0, 0);d = [0, 0, 1];γ= 0;socConstraints = secondordercone (Asc, b, d,γ);

指定一个线性不等式约束。

一个=[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 =诊断接头([1,1/2,0]);b = 0 (3,1);d = [0, 0, 1];γ= 0;socConstraints = secondordercone (Asc, b, d,γ);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 Iter Fval Primal infas Dual infas Dual Gap Time 1 0.000000e+00 0.000000e+00 5.714286e-01 1.250000e-01 0.06 2 -7.558066e+00 0.000000e+00 7.151114e-02 1.64306e -02 0.14 3 -7.366973e+00 0.000000e+00 1.075440e-02 2.352525e-03 0.14 4 -8.243432e+00 0.000000e+00 5.191888e -05 1.135724e-05 0.15 5 -8.246067e+00 1.387779e +00 5.714286e-01 5.317403e-07找到了最优解。
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”“显示”“通路”);

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

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

通过呼叫来解决问题coneprog

[x, fval] = coneprog(问题)
Iter Fval Primal Infeas Dual Infeas Dual Gap Time 1 0.000000e+00 0.000000e+00 5.333333e-01 5.555556e-02 0.25 2 -9.696012e+00 1.850372e-17 7.631901e-02 0.28 3 -1.178942e+01 9.251859e-18 1.261803e- 03 0.28 4 -1.294426e+01 1.850372e-17 1.683078e-03 1.753206e-04 0.29 5 -1.295217e+01 1.850372e-17 8.994595e-04 9.369370e-050.29 7 -1.300753e+01 9.251859e-18 2.366136e-05 2.46476e -06 0.29 9 -1.300850e+01 1.850372e-17 8.187205e-06 8.528338e-07 0.30 11 - 1.300852 e+01 9.251859e-18 2.79994e -05 2.916606e-06找到最优解。
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”“显示”“通路”);一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];

解决问题,询问有关解决过程的信息。

[x, fval exitflag、输出]= coneprog (f socConstraints A、b Aeq,说真的,磅,乌兰巴托,选项)
ITER FVAL PRIMAL INFEAS双INFEA二元间隙时间1 0.000000E + 00 0.000000E + 00 5.333333E-01 5.555556C-02 0.0.0404 2 -9.696012E + 00 1.850372E-17 7.631901C-02 7.949897E-03 0.07 3 -11178942E+01 9.251859E-18 1.261803E-02 1.314378E-03 0.07 4 -1.294426E + 01 1.85037226E + 01 1.850372C-17 1.683078C-03 1.753206E-04 1.753206C-04 0.07 5 -1295217E + 01 1.85037217E + 01 1.850372C-17 8.994595E-04 9.369370E-05 0.08 6 -1.295331C + 01 1.850372E-17 4.748841C-04 4.948841E-05 0.08 7 -1300753E + 01 9.251859C-18 2.799942C-05 2.916606C-05 2.916606C-06 2.916606C-06 0.08 8 -1300671E + 01 9.251859E-18 2.366136e-05 2.464725e-06 0.08 9 -1.300850e+01 1.850372e-17 8.187205e-06 8.528338e-07 0.08 10 -1.300843e+01 4.625929e-18 7.326330e-06 7.631594e-07 0.08 11 -1.300862e+01 9.251859e-18 2.707005e-06 2.819797e-07 0.08 12 -1.300892e+01 0.000000e+00 9.204457e-08 9.587976e-09 0.08 Optimal solution found.
X =3×10.4238 1.6477 2.3225
fval = -13.0089.
exitflag = 1
输出=结构体字段:迭代:12 primalfeasibility: 0 dualfeasibility: 9.2045e-08 dualitygap: 9.5880e-09 algorithm: 'interior-point' linearsolver: 'augmented' message: 'Optimal solution found.'
  • 迭代显示器和输出结构都显示出来coneprog使用12次迭代来获得解决方案。

  • 退出标志值1output.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-05 * 0.0570 0.1946 0.0618

约束具有非零双值,指示在解决方案处有效的约束。

输入参数

全部折叠

系数向量,指定为实向量或实数组。系数向量表示目标函数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(i)

  • γ)=socConstraints.gamma(我)

例子:Asc = diag([1 1/2 0]);二元同步通信= 0 (3,1);dsc = [0, 0, 1];γ= 1;socConstraints = secondordercone (Asc, bsc、dsc、伽马);

数据类型:结构体

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

一个编码线性不平等

A * x < =

在哪里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 = =(1,n)b = 1

数据类型:

线性不等式约束,指定为实向量。b是一个- 与...相关的矢量一个矩阵。如果你通过b作为行向量,求解器内部转换b到列向量b (:).对于大问题,不予考虑b作为一个稀疏向量。

b编码线性不平等

A * x < =

在哪里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 = =(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];说真的=(10、20);

例子:指定X-Components Sum为1,请执行Aeq = 1 (1, N)说真的= 1

数据类型:

线性平等约束,指定为真正的矢量。说真的是一个- 与...相关的矢量Aeq矩阵。如果你通过说真的作为行向量,求解器内部转换说真的到列向量Beq(:).对于大问题,不予考虑说真的作为一个稀疏向量。

说真的编码线性等式

aeq * x = beq

在哪里x是栏矢量N变量x (:),Aeq矩阵的大小是多少——- - - - - -N

例如,考虑以下平等:

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

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

Aeq =[1、2、3、2、4、1];说真的=(10、20);

例子:要指定x分量的和为1,使用Aeq = 1 (1, N)说真的= 1

数据类型:

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

x(我)> =磅(我)对全部

如果元素个数(磅)<元素个数(f),然后指定

x(我)> =磅(我)1 <= I <= numel(lb)

在这种情况下,索盘发出警告。

例子:要指定所有x分量都是正数,请使用磅= 0(大小(f))

数据类型:

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

x(i)<= UB(i)对全部

如果numel(Ub),然后UB.指定

x(i)<= UB(i)1 <= I <= numel(ub)

在这种情况下,索盘发出警告。

例子:指定所有x分量小于1,使用乌兰巴托= 1(大小(f))

数据类型:

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

选项 描述
约束特许

限制的可行性公差,标量0通过1约束特许测量原始可行性公差。默认值是1E-6

展示

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

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

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

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

LinearSolver

用于解决迭代中一步的算法:

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

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

    • 否则,步进解算器为“增强”

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

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

  • “prodchol”- 产品形式巧克力步骤求解器。看到[4][5]

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

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

  • 如果问题稀疏,请尝试“正常”

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

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

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

MaxIterations

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

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

MaxTime

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

最优法

对偶可行性的终止容限,一个正标量。默认值是1E-6

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

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

字段名 条目

f

线性目标函数向量f

socConstraints

二阶锥限制的结构阵列

Aineq

线性不等式约束矩阵

Bineq.

线性不等式约束的向量

Aeq

线性平等约束的矩阵

说真的

线性等式约束的向量
下界向量
UB. 上限矢量

求解器

“coneprog”

选项

选择创建optimoptions

数据类型:结构体

输出参数

全部折叠

解,返回实向量或实数组。的大小x与大小相同f.的x时,输出为空exitflag值是-2,3.,或者,10.

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

原因coneprog已停止,返回为整数。

价值 描述

1

这个函数收敛到一个解x

0

超过了迭代次数options.maxIterations.,或超过解决时间(秒)选项。MaxTime

-2

没有找到可行点。

3

这个问题没有边界。

-7

搜索方向变小了。不可能取得进一步进展。

-10

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

提示

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

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

描述
算法

优化算法使用

dualfeasibility

最大对偶约束违背

dualitygap

二元间隙

迭代

的迭代次数

消息

退出消息

primalfeasibility

最大违反约束

linearsolver 内部步进求解算法使用

输出领域dualfeasibilitydualitygap,primalfeasibility是空的exitflag取值为-2、-3或-10。

解决方案的双变量作为与这些字段的结构返回。

描述
较低的

下界对应于

上界对应于UB.

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 UB. - x + λ 较低的 T x -

乘法的不等式术语lambda.字段是负的。

更多关于

全部折叠

二阶锥约束

为什么是约束

一个 x - b ≤. d T x - γ

叫做二阶锥约束?考虑三维空间中具有椭圆截面的圆锥x-y平面,直径成比例z坐标。的y坐标的比例是1 / 2x坐标的比例是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 =√X。^ 2 + y ^ 2/4);冲浪(X, Y, Z)视图(8,2)包含“x”ylabel.“y”zlabel“z”

圆锥的点在零,在垂直方向变宽。

b伽玛参数移动圆锥。的一个d争论旋转锥体并改变其形状。

算法

该算法使用内部点方法。有关详细信息,请参阅二阶锥规划算法

选择功能

应用程序

优化活动编辑器任务为coneprog

兼容性的考虑

展开全部

行为在R2021a中改变

介绍了R2020b