二阶锥规划求解器
的coneprog
函数是一个二阶锥规划求解器,它能找到指定问题的最小值
受约束
f,x,b,说真的,磅,UB.是载体,和一个和Aeq矩阵。为每一个我, 矩阵一个SC.(我),载体dSC.(我),bSC.(我)和标量γ(我)是在一个二阶锥约束中创建的secondordercone
.
有关圆锥约束的详细信息,请参见二阶锥约束.
求解了带约束条件的二阶锥规划问题x
= coneprog (f
,socConstraints
)socConstraints
编码为
一个SC.(我)=socConstraints.A(我)
bSC.(我)=socConstraints.b(我)
dSC.(我)=socconstraints.d(i)
γ(我)=socConstraints.gamma(我)
要建立一个带有二阶锥约束的问题,创建一个二阶锥约束对象。
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.
coneprog
解决方案过程产生了一个二阶锥规划问题。为了节省时间和内存,首先创建最高索引约束。
一个=诊断接头([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次迭代来获得解决方案。
退出标志值1
和output.message
价值找到最优解。
表明解决方案是可靠的。
的输出
结构表明,通过解决过程,不可行性倾向于减少,正如对偶差距。
你可以复制fval
输出乘以f ' * x
.
f ' * x
ANS = -13.0089.
coneprog
双变量产生了一个二阶锥规划问题。为了节省时间和内存,首先创建最高索引约束。
一个=诊断接头([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
- - - - - -系数向量系数向量,指定为实向量或实数组。系数向量表示目标函数f ' * x
.这个符号假设f
是一个列向量,但你可以使用行矢量或数组。在内部,coneprog
转换f
到列向量f (:)
.
例子:f =(1、3、5、6)
数据类型:双
socConstraints
- - - - - -二阶锥约束SecondOrderConeConstraint
对象二阶锥约束,指定为的向量SecondOrderConeConstraint
对象。属性创建这些对象secondordercone
函数。
socConstraints
编码的约束
其中,数组与方程的映射如下:
一个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
作为一个稀疏向量。
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
- - - - - -线性平等约束线性等式约束,指定为实矩阵。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))
.
数据类型:双
UB.
- - - - - -上界上界,指定为实向量或实数组。如果长度f
等于UB.
,然后UB.
指定
x(i)<= UB(i)
对全部我
.
如果numel(Ub)
UB.
指定
x(i)<= UB(i)
为1 <= I <= numel(ub)
.
在这种情况下,索盘发出警告。
例子:指定所有x分量小于1
,使用乌兰巴托= 1(大小(f))
.
数据类型:双
选项
- - - - - -优化选项optimoptions
的输出,指定为优化选项optimoptions
.
选项 | 描述 |
---|---|
约束特许 |
限制的可行性公差,标量 |
|
显示水平(见迭代显示):
|
LinearSolver |
用于解决迭代中一步的算法: 如果
有关稀疏示例,请参见比较coneprog算法的速度. |
|
允许的最大迭代次数,一个正整数。默认值是 |
MaxTime |
算法运行的最大时间(以秒为单位),正数或 |
|
对偶可行性的终止容限,一个正标量。默认值是 |
例子:optimoptions(‘coneprog’,‘显示’,‘iter’,‘MaxIterations’,100)
问题
- - - - - -问题的结构问题结构,指定为具有以下字段的结构。
字段名 | 条目 |
---|---|
|
线性目标函数向量f |
|
二阶锥限制的结构阵列 |
|
线性不等式约束矩阵 |
|
线性不等式约束的向量 |
|
线性平等约束的矩阵 |
|
线性等式约束的向量 |
磅 |
下界向量 |
UB. |
上限矢量 |
|
“coneprog” |
|
选择创建optimoptions |
数据类型:结构体
fval
-目标函数在解处的值解决方案的目标函数值,作为实数返回。一般来说,fval
=f ' * x
.的fval
时,输出为空exitflag
值是-2
,3.
,或者,10.
.
exitflag
- 原因coneprog
停了下来原因coneprog
已停止,返回为整数。
价值 | 描述 |
---|---|
|
这个函数收敛到一个解 |
|
超过了迭代次数 |
|
没有找到可行点。 |
|
这个问题没有边界。 |
|
搜索方向变小了。不可能取得进一步进展。 |
|
这个问题在数值上不稳定。 |
提示
如果你得到退出标志0
,-7
, 要么-10
,尝试使用不同的值LinearSolver
选择。
输出
- 有关优化过程的信息关于优化过程的信息,作为带有这些字段的结构返回。
场 | 描述 |
---|---|
算法 |
优化算法使用 |
dualfeasibility |
最大对偶约束违背 |
dualitygap |
二元间隙 |
迭代 |
的迭代次数 |
消息 |
退出消息 |
primalfeasibility |
最大违反约束 |
linearsolver |
内部步进求解算法使用 |
的输出
领域dualfeasibility
,dualitygap
,primalfeasibility
是空的exitflag
取值为-2、-3或-10。
为什么是约束
叫做二阶锥约束?考虑三维空间中具有椭圆截面的圆锥x-y平面,直径成比例z坐标。的y坐标的比例是1 / 2x坐标的比例是1。定义圆锥体内部(点为[0,0,0])的不等式是
在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
.
你点击一个链接对应于这个MATLAB命令:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。金宝app
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。