二次规划
求解器用于与线性约束的二次目标函数。
quadprog发现最小用于通过指定的一个问题
H,一个和AEQ是矩阵,并F,b,贝格,磅,UB和X是矢量。
你可以通过F,磅和UB作为矢量或矩阵;看到矩阵参数。
二次规划优化函数
仅适用于基于求解的方法。对于这两个优化的讨论方法,请参阅首先选择基于问题或基于解决方案的方法。
找到最低的
受约束
在二次规划优化函数
语法,这个问题是最小化
,
在哪里
受线性约束。
要解决这个问题,首先输入系数矩阵。
H=[1-1;-12];f=[-2;-6];A=[11;-12;21];b=[2;2;3];
呼叫二次规划优化函数
。
[X,FVAL,exitflag,输出,λ=…quadprog(H,F,A,B);
最小发现满足的约束。优化完成是因为目标函数在可行方向上是不递减的,要在最优公差的取值范围内,且约束满足约束公差的取值范围内。
检查最后一点,函数值和出口标志。
x、 fval,退出标志
X =2×10.6667 1.3333
FVAL = -8.2222
exitflag = 1
出口旗1
意味着结果是局部最小值。因为H
是正定矩阵,这个问题是凸的,因此最小是一个全局最小值。
确认那个H
通过检查它的特征值是正定的。
eig (H)
ANS =2×10.3820 2.6180
找到最低的
受约束
在二次规划优化函数
语法,这个问题是最小化
,
在哪里
受线性约束。
要解决这个问题,首先输入系数矩阵。
H = [1 -1;1 2];f = [2;6);Aeq = [11];说真的= 0;
呼叫二次规划优化函数
,进入[]
用于输入一个
和b
。
[X,FVAL,exitflag,输出,λ=…quadprog(H,F,[],[],AEQ,BEQ);
最小发现满足的约束。优化完成是因为目标函数在可行方向上是不递减的,要在最优公差的取值范围内,且约束满足约束公差的取值范围内。
检查最后一点,函数值和出口标志。
x、 fval,退出标志
X =2×1-0.8000 0.8000
FVAL = -1.6000
exitflag = 1
出口旗1
意味着结果是局部最小值。因为H
是正定矩阵,这个问题是凸的,因此最小是一个全局最小值。
确认那个H
通过检查它的特征值是正定的。
eig (H)
ANS =2×10.3820 2.6180
找到X该二次表达式最小化
在哪里
, ,
受约束
, 。
要解决这个问题,首先输入系数。
H = [1,-1,1 -1,2,-2 1,-2,4]。F = [2; -3; 1];磅=零(3,1);UB =酮(大小(磅));AEQ =酮(1,3);BEQ = 1/2;
呼叫二次规划优化函数
,进入[]
用于输入一个
和b
。
x = quadprog (H f [] [], Aeq,说真的,磅,乌兰巴托)
最小发现满足的约束。优化完成是因为目标函数在可行方向上是不递减的,要在最优公差的取值范围内,且约束满足约束公差的取值范围内。
X =3×10.0000 0.5000 0.0000
设置选项以监视的进度二次规划优化函数
。
选项= optimoptions('quadprog','显示','ITER');
限定具有二次目标和线性不等式约束的问题。
H=[1-1;-12];f=[-2;-6];A=[11;-12;21];b=[2;2;3];
帮助撰写二次规划优化函数
函数调用,设置不必要的输入[]
。
AEQ = [];BEQ = [];磅= [];UB = [];X0 = [];
呼叫二次规划优化函数
要解决的问题。
x = quadprog (H f A、b Aeq,说真的,磅,乌兰巴托,x0,选项)
两害相害互补关系0 -8.884885e+00 3.2146e +00 1.071429e-01 1 -8.331868e+00 1.91041e -01 2 -8.212804e+00 1.676295e-03 5.587652e-05 1 - 009601e-02 3 -8.222204e+00 2.793826e-08 1 -08 1.809485e-05 4 - 8.2222e +00 3.064216e- 12 7.525735e-13满足约束条件。优化完成是因为目标函数在可行方向上是不递减的,要在最优公差的取值范围内,且约束满足约束公差的取值范围内。
X =2×10.6667 1.3333
问题2结构
创建一个问题
结构使用基于问题的优化工作流程。创建一个等价于。的优化问题二次规划线性约束。
x=最优值('X',2);objec=x(1)^2/2+x(2)^2-x(1)*x(2)-2*x(1)-6*x(2);prob=optimproblem('目的',目标);prob.Constraints.cons1问题约束=和(x)<=2;问题约束.cons2=-x(1)+2*x(2)<=2;问题约束.cons3=2*x(1)+x(2)<=3;
兑换探针
到问题
结构。
问题= prob2struct(概率);
解决使用问题二次规划优化函数
。
[X,FVAL] = quadprog(问题)
警告:您的黑森州不是对称的。复位H =(H + H')/ 2。
最小发现满足的约束。优化完成是因为目标函数在可行方向上是不递减的,要在最优公差的取值范围内,且约束满足约束公差的取值范围内。
X =2×10.6667 1.3333
FVAL = -8.2222
二次规划优化函数
目标函数值解决了二次规划,并返回解决方案和目标函数值两者。
H = [1,-1,1 -1,2,-2 1,-2,4]。F = [-7 -12 -15]。A = [1,1,1];B = 3;[X,FVAL] = quadprog(H,F,A,B)
最小发现满足的约束。优化完成是因为目标函数在可行方向上是不递减的,要在最优公差的取值范围内,且约束满足约束公差的取值范围内。
X =3×1-3.5714 2.9286 3.6429
fval=-47.1786年
检查返回的目标函数值是否与从二次规划优化函数
目标函数的定义。
fval2 = 1/2*x'*H*x + f'*x
fval2 = -47.1786
二次规划优化函数
优化流程要查看优化过程二次规划优化函数
,设置选项以显示一个迭代显示并返回四个输出。问题是,以尽量减少
从属于
,
在哪里
, 。
输入问题系数。
H = [2 1 -1 1 3 1/2 1/2 -1 5];F = [4; -7; 12];磅=零(3,1);UB =酮(3,1);
设置选项,以显示求解器的迭代进展。
选项= optimoptions('quadprog','显示','ITER');
呼叫二次规划优化函数
有四个输出。
[X FVAL,exitflag,输出] = quadprog(H,F,[],[],[],[],LB,UB,[],选项)
两害互补关系0 2.691769e+01 1.582123e+00 1.712849e+01 1.680424e +00 8.56424e -03 2 -5.451769e+00 0.000000e+00 4.282123e-06 2.710131e-02 3 -5.499997e+00 000000e+00 1.221903e-10 6.939689e-07 4 -5.500000e+00 0.000000e+00 5.842173e-14 3.469847e-10最小发现满足约束。优化完成是因为目标函数在可行方向上是不递减的,要在最优公差的取值范围内,且约束满足约束公差的取值范围内。
X =3×10.0000 1.0000 0.0000
fval=-5.5000
exitflag = 1
输出=同场的结构:消息: '...' 算法: '内点凸' firstorderopt:1.5921e-09 constrviolation:0次迭代:4 linearsolver: '密' cgiterations:[]
二次规划优化函数
拉格朗日乘子解决二次规划问题,并返回拉格朗日乘子。
H = [1,-1,1 -1,2,-2 1,-2,4]。F = [-7 -12 -15]。A = [1,1,1];B = 3;磅=零(3,1);[X,FVAL,exitflag,输出,λ= quadprog(H,F,A,B,[],[],磅);
最小发现满足的约束。优化完成是因为目标函数在可行方向上是不递减的,要在最优公差的取值范围内,且约束满足约束公差的取值范围内。
检验拉格朗日乘子结构拉姆达
。
DISP(拉姆达)
ineqlin:12.0000 eqlin:为0x1双]降低:[3X1双]上:[3X1双]
线性不等式约束具有的相关联的拉格朗日乘数12
。
显示与下限相关联的乘数。
显示(下兰姆达)
5.0000 0.0000 0.0000
只有第一部分lambda.lower
具有非零乘数。这通常意味着X
处于下限为零。确认通过显示的组件X
。
DISP(x)的
0.0000 1.5000 1.5000
H
-二次目标期限二次目标项,指定为对称实矩阵。H
表示表达式中的二次项二分之一* X '* H * X + F' * X
。如果H
不是对称的,二次规划优化函数
发出警告和用途对称版本(H + H')/ 2
相反。
如果二次矩阵H
是稀疏的,那么默认情况下“内点凸”
算法使用了稍微不同的算法比当H
是密集。一般来说,稀疏算法是大型,稀疏的问题更快,密算法是密集的或小的问题更快。欲了解更多信息,请参阅LinearSolver
选项描述和内点凸quadprog算法。
例:并[2,1; 1,3]
数据类型:双重的
F
-线性目标词线性目标术语,指定为实数向量。F
表示在表达式线性项二分之一* X '* H * X + F' * X
。
例:[1; 3; 2]
数据类型:双重的
一个
-线性不等式约束线性不等式约束,指定为实矩阵。一个
是一个中号
-由-ñ
矩阵,其中中号
是不平等的数量,和ñ
是变量的个数中的元素(数X0
). 对于大问题,通过一个
作为稀疏矩阵。
一个
编码中号
线性不等式
A*x<=b
,
在哪里X
是列向量ñ
变量x (:)
和b
是一个列向量中号
元素。
例如,指定
X1+ 2X2≤10
3X1+ 4X2≤20
五X1+ 6X2≤30,
输入以下约束:
A = [1,2; 3,4; 5,6];B = [10; 20; 30]。
例:要指定x组分总和为1或更小,使用一个= 1 (1,N)
和B = 1
。
数据类型:双重的
b
-线性不等式约束线性不等式约束,指定为实数向量。b
是一个中号
相关的 - 元素矢量一个
矩阵。如果您通过b
作为行向量,解算器在内部转换b
到列向量B(:)
。对于较大的问题,通过b
作为稀疏矢量。
b
编码中号
线性不等式
A*x<=b
,
在哪里X
是列向量ñ
变量x (:)
和一个
是大小的矩阵中号
-由-ñ
。
例如,指定
X1+ 2X2≤10
3X1+ 4X2≤20
五X1+ 6X2≤30,
输入以下约束:
A = [1,2; 3,4; 5,6];B = [10; 20; 30]。
例:要指定x组分总和为1或更小,使用一个= 1 (1,N)
和B = 1
。
数据类型:双重的
AEQ
-线性等式约束线性等式约束,指定为实矩阵。AEQ
是一个我
-由-ñ
矩阵,其中我
是相等的数目,并且ñ
是变量的个数中的元素(数X0
). 对于大问题,通过AEQ
作为稀疏矩阵。
AEQ
编码我
线性等式
AEQ * X = BEQ
,
在哪里X
是列向量ñ
变量x (:)
和贝格
是一个列向量我
元素。
例如,指定
X1+ 2X2+ 3X3= 10
2X1+ 4X2+X3=20,
输入以下约束:
AEQ = [1,2,3; 2,4,1];BEQ = [10; 20]。
例:要指定x分量的和为1,使用AEQ =酮(1,N)
和BEQ = 1
。
数据类型:双重的
贝格
-线性等式约束线性等式约束,指定为实向量。贝格
是一个我
相关的 - 元素矢量AEQ
矩阵。如果您通过贝格
作为行向量,解算器在内部转换贝格
到列向量说真的(:)
。对于较大的问题,通过贝格
作为稀疏矢量。
贝格
编码我
线性等式
AEQ * X = BEQ
,
在哪里X
是列向量ñ
变量x (:)
和AEQ
是大小的矩阵我
-由-ñ
。
例如,指定
X1+ 2X2+ 3X3= 10
2X1+ 4X2+X3=20,
输入以下约束:
AEQ = [1,2,3; 2,4,1];BEQ = [10; 20]。
例:要指定x分量的和为1,使用AEQ =酮(1,N)
和BEQ = 1
。
数据类型:双重的
磅
-下界下界,指定为实向量或实数组。如果元素的个数X0
等于磅
,然后磅
指定
X(ⅰ)> =磅(I)
对所有一世
。
如果纽梅尔(磅)<纽梅尔(x0)
,然后磅
指定
X(ⅰ)> =磅(I)
对于1 <= I <= numel(Ib)的
。
如果有较少的元素磅
比X0
,解算器发出警告。
例:要指定所有x分量都是正数,使用磅= 0(大小(x0))
。
数据类型:双重的
UB
-上限上限,指定为实向量或真正的数组。如果元素的个数X0
等于UB
,然后UB
指定
x (i) < =乌兰巴托(我)
对所有一世
。
如果numel(UB)
UB
指定
x (i) < =乌兰巴托(我)
对于1<=i<=numel(ub)
。
如果有较少的元素UB
比X0
,解算器发出警告。
例:要指定所有的X组件都小于1,使用UB =酮(尺寸(X0))
。
数据类型:双重的
X0
-初始点初始点,指定为实向量。长度X0
是行或列的数目H
。
X0
适用于“trust-region-reflective”
算法问题时只有绑定的限制。X0
也适用于“有源集”
算法。
X0
是“有源集”
算法。
如果没有指定X0
,二次规划优化函数
设置所有组件X0
在由边界限定的箱的内部的点。二次规划优化函数
忽略X0
对于“内点凸”
算法和“trust-region-reflective”
算法等式约束。
例:[1;2;1]
数据类型:双重的
选项
-优化选项optimoptions
|结构如optimset
回报优化选项,指定的输出optimoptions
或结构,如optimset
的回报。
有些选项是从缺席optimoptions
显示。这些选项出现在以下表中斜体字。有关详细信息,请参见查看选项。
所有的算法
算法 |
选择的算法:
该 |
诊断 | 显示关于要被最小化或解决的功能诊断信息。选择是 |
显示 |
显示器的水平(见迭代显示):
该
|
MaxIterations |
允许迭代的最大数量;一个正整数。
为了 |
OptimalityTolerance |
第一阶最优终止性;一个积极的标量。
看到公差和停止标准。 为了 |
StepTolerance |
关于终止宽容
为了 |
“trust-region-reflective”
仅限算法
FunctionTolerance |
函数值的终止公差;一个积极的标量。默认值取决于问题类型:使用的有界约束问题 为了 |
|
Hessian乘法函数,指定为函数句柄。对于大规模结构问题,此函数计算Hessian矩阵积 W = hmfun (Hinfo, Y) 在哪里 看到二次最小化的密集,结构黑森州为使用此选项的例子。 为了 |
MaxPCGIter | PCG(预处理共轭梯度)迭代的最大次数;正标量。默认值是 |
PrecondBandWidth | 预处理器为PCG的上限带宽;一个非负整数。默认, |
SubproblemAlgorithm |
确定如何计算迭代步骤。默认的, |
托尔普克 | 在PCG迭代终止性;一个积极的标量。默认值是 |
TypicalX |
典型 |
“内点凸”
仅限算法
“有源集”
仅限算法
ConstraintTolerance |
对约束违反的容忍;一个积极的标量。默认值为 为了 |
ObjectiveLimit |
一个标量的容限(停止条件)。如果目标函数值小于 |
问题
-结构问题问题结构,指定为与这些字段的结构:
|
在对称矩阵二分之一* X'* H * X |
|
向量线性项F'* X |
|
矩阵的线性不等式约束Aineq * x ≤bineq |
|
向量在线性不等式中的约束Aineq * x ≤bineq |
|
矩阵线性等式约束AEQ * X = BEQ |
|
向量线性等式约束AEQ * X = BEQ |
磅 |
下限的矢量 |
UB |
上界的矢量 |
|
初始点X |
|
'quadprog' |
|
使用创建的选项optimoptions 或优化应用 |
必填字段H
,F
,解算器
和选项
。在解决,二次规划优化函数
忽略中的任何字段问题
未列出的。
数据类型:结构
X
- 解决方案解决方案,返回作为一个真正的载体。X
是矢量,最大限度地减少二分之一* X '* H * X + F' * X
受所有边界和线性约束。X
可非凸问题的局部极小。对于凸问题,X
是全球最低。有关更多信息,请参见本地与全局最优解。
FVAL
-解的目标函数值在该解决方案的目标函数值,返回作为一个真正的标量。FVAL
是的价值二分之一* X '* H * X + F' * X
在解决方案X
。
exitflag
- 原因二次规划优化函数
停止原因二次规划优化函数
已停止,返回此表中描述的整数。
所有的算法 |
|
|
函数收敛到解 |
|
超过迭代次数 |
|
问题是不可行的。或者, |
|
问题是无限的。 |
|
|
|
步长为小于 |
|
检测到非凸问题。 |
|
无法计算步进方向。 |
|
|
|
找到本地最小值;最小值不唯一。 |
|
在目标函数的值更改为小于 |
|
当前的搜索方向是不是下降的方向。没有进一步的进展可以作出。 |
|
|
|
偶尔“有源集”
算法停止与出口标志0
当问题是,事实上,无界。设置较高的迭代限制也导致出口标志0
。
产量
- 关于优化过程的信息关于优化过程的信息,返回与这些领域的结构:
|
采取迭代次数 |
|
采用优化算法 |
|
总数PCG迭代( |
constrviolation |
最大约束函数 |
firstorderopt公司 |
衡量一阶最优的 |
线性溶剂 |
内部线性解算器的类型, |
信息 |
退出消息 |
拉姆达
- 拉格朗日乘子的解决方案“内点凸”
该“内点凸”
算法试图遵循严格的约束内的路径。它使用一个presolve模块以去除冗余和通过求解是直截了当的部件简化问题。
该算法具有一个稀疏Hessian矩阵不同的实施方式H
对于稠密矩阵。通常,稀疏实现对于大型的、稀疏的问题更快,而密集实现对于密集的或小的问题更快。有关更多信息,请参见内点凸quadprog算法。
“trust-region-reflective”
该“trust-region-reflective”
算法是一种基于内部反射牛顿法的子空间信赖域方法[一]。每次迭代包括使用预条件共轭梯度(PCG)的方法的大的线性系统的近似解。有关更多信息,请参见信赖域反射quadprog算法。
“有源集”
该“有源集”
算法是一种投影方法,类似于在[二]。算法规模不大;看到大规模与中型算法。有关更多信息,请参见激活集quadprog算法。
您可以使用二次规划优化的应用程序。输入optimtool
在MATLAB®命令行,并选择quadprog - 二次规划
求解。有关更多信息,请参见优化应用。
[1]科尔曼,T.F。和Y.李。“A反射牛顿法最小化二次函数除边界上的一些变量。”SIAM杂志上优化。卷。6,第4号,1996年,第1040至1058年。
[2]吉尔,P.E。,W.默里和M. H.赖特。实际的优化。伦敦:科学出版社,1981。
[3]古尔德,N.,和P. L. Toint。“预处理的二次规划。”数学规划。B辑,第100卷,2004年,第95-132页。
使用说明和限制:
二次规划优化函数
金宝app支持使用任一代码生成代码生成
功能或MATLAB编码器™应用程序。你一定有一个MATLAB编码器授权生成代码。
目标硬件必须支持标准的双精度浮点运算。金宝app你无法为单精度或定点运算代码。
二次规划优化函数
不支持金宝app问题
参数生成代码。
[X,FVAL] = quadprog(问题)% 不支持金宝app
所有二次规划优化函数
输入矩阵如一个
,AEQ
,磅
和UB
必须全面,不疏。您可以通过使用稀疏矩阵转换到全完整的
功能。
该磅
和UB
参数必须有相同的条目数为列的数H
或必须为空[]
。
对于涉及嵌入式处理器的高级代码优化,还需要一个嵌入式编码器®执照。
您必须包括选项二次规划优化函数
并使用optimoptions
。该方案必须包括算法
选项,设置为“有源集”
。
选项= optimoptions('quadprog','算法',“有源集”);[X,FVAL,exitflag] = quadprog(H,F,A,B,AEQ,BEQ,LB,UB,X0,选项);
代码生成支持这些选项:金宝app
算法
- 一定是“有源集”
ConstraintTolerance
MaxIterations
ObjectiveLimit
OptimalityTolerance
StepTolerance
生成的代码具有有限的错误检查选项。更新选项推荐的方法是使用optimoptions
,不是点符号。
opts=最佳选项('quadprog','算法',“有源集”);OPTS = optimoptions(OPTS,'MaxIterations',1E4);%推荐选择。中号axIterations = 1e4;% 不建议
不要从文件中加载选项。这样做会导致代码生成失败。相反,在代码中创建选项。
如果指定了不支持的选项,该选项通常代码生成过程中忽略。金宝app对于可靠的结果,仅指定支持的选项。金宝app
您单击对应于该MATLAB命令的链接:
在MATLAB命令窗口中输入命令,运行该命令。Web浏览器不支持MATLAB命令。金宝app
您还可以选择从下面的列表中的网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家/地区网站未针对您所在位置的访问进行优化。