二阶锥编程求解器
这Coneprog.
功能是二阶锥编程求解器,可找到最少的问题
受限制
F那X那B.那贝卡那磅, 和乌兰巴托向量,一种和AEQ.是矩阵。对于每一个人一世,矩阵一种sc(一世),向量D.sc(一世),B.sc(一世)和标量γ.(一世)是你创建的二阶圆锥约束Themondercone.
。
有关锥限制的更多详细信息,请参阅二阶锥约束。
解决了限制的二阶锥编程问题X
= coneprog(F
那Socconstraints.
)Socconstraints.
编码为
一种sc(一世)=socconstraints.a(i)
B.sc(一世)=socconstraints.b(i)
D.sc(一世)=socConstraints.d(我)
γ.(一世)=socconstraints.gamma(i)
为了建立一个有二阶锥约束的问题,创建一个二阶锥约束对象。
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
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'那'展示'那'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次迭代到达解决方案。
退出标志值1
和outputm.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-06 * 0.1118 0.3819 0.2184
约束具有非零对偶值,表明约束在解处是活跃的。
F
-系数向量系数矢量,指定为真实的矢量或真实数组。系数矢量表示目标函数f'* x
。符号假设F
是列向量,但可以使用行向量或数组。在内部,Coneprog.
转换F
到列向量f (:)
。
例子:f = [1,3,5,-6]
数据类型:双
Socconstraints.
-二阶锥约束ThemondrelConeConstraint.
对象二阶锥限制,指定为矢量ThemondrelConeConstraint.
对象。使用介绍这些对象Themondercone.
功能。
Socconstraints.
编码约束
阵列和等式之间的映射如下:
一种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.
-线性不平等约束线性不平等约束,指定为真正的矢量。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.
-线性等式约束线性平等约束,指定为真实矩阵。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 |
可行性公差约束,从标量出发 |
|
显示水平(见迭代显示):
|
|
允许的最大迭代次数,一个正整数。默认为 |
MaxTime. |
算法运行的最大时间数,正数或 |
|
终止公差对双重可行性,正标量。默认为 |
例子:Optimoptions('coneprog','显示','iter','maxtorations',100)
问题
-问题结构问题结构,指定为具有以下字段的结构。
字段名称 | 入口 |
---|---|
|
线性目标函数矢量F |
|
二阶锥限制的结构阵列 |
|
线性不等式约束的矩阵 |
|
线性不平等约束传染媒介 |
|
线性平等约束的矩阵 |
|
线性平等约束传染媒介 |
磅 |
下限矢量 |
乌兰巴托 |
上界向量 |
|
'coneprog' |
|
选择的选项优化选择 |
数据类型:塑造
fval.
-解处的目标函数值目标函数在解处的值,以实数返回。一般来说,fval.
=f'* x
。这fval.
时,输出为空ExitFlag.
值为-2,-3或-10。
ExitFlag.
- - -原因Coneprog.
停止原因Coneprog.
停止,返回整数。
价值 | 描述 |
---|---|
|
该功能融合到解决方案 |
|
超过的迭代次数 |
|
没有发现可行的点。 |
|
问题是无限的。 |
|
搜索方向变得太小。无法进一步进展。 |
|
问题在数字上不稳定。 |
输出
- 有关优化过程的信息有关优化过程的信息,作为具有这些字段的结构返回。
场地 | 描述 |
---|---|
算法 |
优化算法使用 |
双重可行性 |
最大的双重约束违规 |
二元间 |
二元间隙 |
迭代 |
迭代次数 |
信息 |
退出消息 |
PrimalFeasibility. |
最大限度的约束违规 |
这输出
字段双重可行性
那二元间
, 和PrimalFeasibility.
当ExitFlag.
值为-2,-3或-10。
为什么约束条件是
称为二阶锥限制?在3-D空间中考虑锥体,椭圆形横截面X-y平面上,与直径成正比Z.协调。这y坐标具有尺寸½,而且X坐标具有缩放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 = sqrt(x. ^ 2 + y. ^ 2/4);冲浪(x,y,z)视图(8,2)xlabel'X'ylabel'是'Zlabel.'Z'
这B.
和γ
争论移动锥体。这一种
和D.
参数旋转圆锥并改变其形状。
该算法采用内点法。有关详细信息,请参见二阶锥编程算法。
这优化Live Editor任务提供可视界面Coneprog.
。
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。