二次编程
具有线性约束的二次目标函数的求解器。
QuadProg查找最低限度的问题
H,一个, 和Aeq是矩阵,和f,b,贝基,磅,乌兰巴托, 和x是向量。
你可以通过f,磅, 和乌兰巴托向量或矩阵;看到矩阵论据.
二次规划优化函数
仅适用于基于求解器的方法。有关这两种优化方法的讨论,请参见首先选择基于问题或基于解决者的方法.
求最小值
受约束
在二次规划优化函数
语法,这个问题是为了最小化
,
在哪里
受线性约束。
要解决此问题,请首先输入系数矩阵。
H=[1-1;-12];f=[-2;-6];A=[11;-12;21];b=[2;2;3];
称呼二次规划优化函数
.
[x,fval,exitflag,output,lambda]=...quadprog(H,f,A,b);
找到满足约束的最小值。优化完成是因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
检查最后一个点、函数值和退出标志。
x fval exitflag
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 = [1 1];说真的= 0;
称呼二次规划优化函数
,进入[]
对于输入一个
和b
.
[x,fval,exitflag,output,lambda]=...quadprog (H f [] [], Aeq, beq);
找到满足约束的最小值。优化完成是因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
检查最后一个点、函数值和退出标志。
x fval exitflag
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];LB =零(3,1);UB =α(大小(LB));AEQ =那些(1,3);BEQ = 1/2;
称呼二次规划优化函数
,进入[]
对于输入一个
和b
.
x = quadprog (H f [] [], Aeq,说真的,磅,乌兰巴托)
找到满足约束的最小值。优化完成是因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
x=3×10.0000 0.5000 0.0000
设置监控进程的选项二次规划优化函数
.
选项=最佳选项(“quadprog”,“显示”,“通路”);
定义一个具有二次目标和线性不等式约束的问题。
H=[1-1;-12];f=[-2;-6];A=[11;-12;21];b=[2;2;3];
帮助编写二次规划优化函数
函数调用,设置不必要的输入[]
.
AEQ = [];beq = [];lb = [];UB = [];x0 = [];
称呼二次规划优化函数
来解决这个问题。
x = quadprog (H f A、b Aeq,说真的,磅,乌兰巴托,x0,选项)
Iter Fval Primal infas Dual infas complement 0 - 8.33488e +00 3.214286e+00 1.071429e-01 1.000000e+00 1 -8.331868e+00 1.321041e-01 4.40347e -03 1.910489e-01 2 -8.212804e+00 1.676295e-03 5.587652e-05 1.009601e-02 3 -8.222204e+00 8.381476e-07 2.793826e-08 1.809485e-05 4 -8.222204e+00 3.064216e-14 1.352696e-12 7.525735e-13满足约束条件。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
x=2×10.6667 1.3333
问题2结构
创建一个问题
使用具体问题具体分析优化工作流程.创建一个优化问题等价于线性约束的二次规划.
x=optimvar(“x”,2); 目标=x(1)^2/2+x(2)^2-x(1)*x(2)-2*x(1)-6*x(2);prob=优化问题(“目标”,objec);prob.Constraints.cons1=和(x)<=2;prob.Constraints.cons2=-x(1)+2*x(2)<=2;prob.Constraints.cons3=2*x(1)+x(2)<=3;
转变问题
到问题
结构。
问题=问题2结构(问题);
解决问题二次规划优化函数
.
[x,fval] = quadprog(问题)
警告:您的Hessian不对称。正在重置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);一个= (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=[21-1131/2-1115];f=[4;-7;12];lb=0(3,1);ub=1(3,1);
设置选项以显示求解器的迭代进度。
选项=最佳选项(“quadprog”,“显示”,“通路”);
称呼二次规划优化函数
有四个输出。
[x fval exitflag,输出]= quadprog (H, f ,[],[],[],[], 磅,乌兰巴托,[]选项)
Iter Fval Primal infas Dual infas complement 0 2.691769e+01 1.582123e+00 1.712849e+01 1.680447e+00 0.000000e+00 8.564246e-03 9.971731e-01 2 -5.451769e+00 0.000000e+00 4.282123e-06 2.710131e-02 3 -5.499997e+00 0.000000e+00 1.22193e -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
输出=结构体字段:消息:“……' algorithm: 'interior-point-凸' firstorderopt: 1.5921e-09 construct: 0 iterations: 4 linearsolver: 'dense' cgiterations: []
二次规划优化函数
拉格朗日乘数法解一个二次规划问题并返回拉格朗日乘数。
H=[1,-1,1-1,2,-21,-2,4];f=[-7;-12;-15];A=[1,1,1];b=3;lb=0(3,1);[x,fval,exitflag,output,lambda]=quadprog(H,f,A,b,[],lb);
找到满足约束的最小值。优化完成是因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
检查拉格朗日乘子结构lambda.
.
disp(lambda)
ineqlin:12.0000 eqlin:[0x1双精度]下限:[3x1双精度]上限:[3x1双精度]
线性不等式约束具有相应的拉格朗日乘子12.
.
显示与下限相关联的乘数。
显示(λ下)
5.0000 0.0000 0.0000
只有lambda.lower
具有非零乘数。这通常意味着只有x
在0的下界。通过显示组件来确认x
.
disp (x)
0.0000 1.5000 1.5000
H
- - - - - -二次目标项二次目标项,指定为对称实矩阵。H
表示表达式中的二次项1/2*x'*H*x+f'*x
.如果H
不是对称的,二次规划优化函数
发出警告并使用对称版本(H+H')/2
相反
如果二次矩阵H
是稀疏的,那么在默认情况下“内点凸”
算法使用略有不同的算法而非略有算法H
是密集的。通常,稀疏算法在大,稀疏问题上更快,密集算法在密集或小问题上更快。有关更多信息,请参阅LinearSolver
选项描述和interior-point-convex quadprog算法.
例子:[2,1;1,3]
数据类型:双
f
- - - - - -线性目标词线性目标术语,指定为真正的载体。f
表示表达式中的线性项1/2*x'*H*x+f'*x
.
例子:(1; 3; 2)
数据类型:双
一个
- - - - - -线性不平等约束线性不等式约束,指定为真实矩阵。一个
是一个米
-借-N
矩阵,在哪里米
是不等式的数目,并且N
是变量数(中的元素数)x0
).对于大问题,请通过一个
作为一个稀疏矩阵。
一个
编码米
线性不等式
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或更少,使用一个= 1 (1,N)
和b = 1
.
数据类型:双
b
- - - - - -线性不平等约束线性不等式约束,指定为实向量。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或更少,使用一个= 1 (1,N)
和b = 1
.
数据类型:双
Aeq
- - - - - -线性等式约束线性等式约束,指定为实矩阵。Aeq
是一个我
-借-N
矩阵,在哪里我
是相等数,并且N
是变量数(中的元素数)x0
).对于大问题,请通过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分量的和为1,使用Aeq=一(1,N)
和说真的= 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];说真的=(10、20);
例子:要指定x分量的和为1,使用Aeq=一(1,N)
和说真的= 1
.
数据类型:双
磅
- - - - - -下限下界,指定为实向量或实数组。如果元素的数量x0
等于中的元素数磅
然后磅
指定
x(i)>=磅(i)
对所有我
.
如果努美尔(磅)<努美尔(x0)
然后磅
指定
x(i)>=磅(i)
对于1 <= I <= numel(lb)
.
如果元素较少磅
比在x0
,解决方案发出警告。
例子:要指定所有x分量都是正数,请使用磅= 0(大小(x0))
.
数据类型:双
乌兰巴托
- - - - - -上限上界,指定为实向量或实数组。如果x0
等于中的元素数乌兰巴托
然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
对所有我
.
如果元素个数(乌兰巴托)<元素个数(x0)
然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
对于1<=i<=numel(ub)
.
如果元素较少乌兰巴托
比在x0
,解决方案发出警告。
例子:要指定所有x组件小于1,请使用乌兰巴托= 1(大小(x0))
.
数据类型:双
x0
- - - - - -初始点初始点,指定为实向量。的长度x0
是的行数或列数H
.
x0
适用于“trust-region-reflective”
当问题只有约束条件时的算法。x0
也适用于'active-set'
算法。
x0
是'active-set'
算法。
如果没有指定x0
,二次规划优化函数
集合x0
到边界所定义的方框内部的一个点。二次规划优化函数
忽视x0
对于“内点凸”
算法,对于“trust-region-reflective”
具有等式约束的算法。
例子:[1;2;1]
数据类型:双
选项
- - - - - -优化选项optimoptions
|结构,如优化集
返回优化选项,指定为optimoptions
或者一个结构优化集
的回报。
控件中缺少一些选项optimoptions
显示。下表中的这些选项以斜体显示。有关详细信息,请参阅查看选项.
所有的算法
算法 |
选择的算法:
的 |
诊断学 | 显示有关要最小化或解决的函数的诊断信息。选择是 |
陈列 |
显示级别(请参见迭代显示):
的
|
MaxIterations |
允许的最大迭代次数;一个正整数。
对于 |
最优法 |
一阶最优性的终止公差一个积极的标量。
看到公差和停止标准. 对于 |
StepTolerance |
终止宽容
对于 |
“trust-region-reflective”
仅算法
FunctionTolerance |
函数值的终止公差;一个积极的标量。默认值取决于问题类型:有界约束问题使用的问题类型 对于 |
|
Hessian乘法函数,指定为函数句柄。对于大规模结构化问题,此函数计算Hessian矩阵乘积 W = hmfun (Hinfo, Y) 在哪里 看到用密集,结构化的黑森州的二次最小化有关使用此选项的示例,请参见。 对于 |
MaxPCGIter | PCG(预处理共轭梯度)迭代的最大次数;正标量。默认值为 |
precondbandwidth. | PCG的前提者的上带宽;一个非负整数。默认情况下, |
子问题算法 |
确定如何计算迭代步骤。默认的, |
托尔普克 | PCG迭代的终止耐受;一个积极的标量。默认为 |
典型的 |
典型的 |
“内点凸”
仅算法
'active-set'
仅算法
ConstraintTolerance |
约束违背的容忍;一个积极的标量。默认值为 对于 |
客观限度 |
一个标量的公差(停止标准)。如果目标函数值小于 |
问题
- - - - - -问题结构问题结构,指定为具有这些字段的结构:
|
对称矩阵1/2*x'*H*x |
|
线性术语的矢量f'* x |
|
线性不等式约束下的矩阵Aineq * x ≤Bineq. |
|
线性不等式约束中的向量Aineq * x ≤Bineq. |
|
线性平等约束的矩阵Aeq*x=beq |
|
线性等式约束中的向量Aeq*x=beq |
磅 |
下界向量 |
乌兰巴托 |
上界向量 |
|
初始点x |
|
“quadprog” |
|
使用创建的选项optimoptions 或者优化应用程序 |
必需的字段有H
,f
,解算器
, 和选项
.解决时,二次规划优化函数
忽略中的任何字段问题
除了列出的人。
数据类型:结构体
x
——解决方案解决方案,作为真正的矢量返回。x
是最小化的向量1/2*x'*H*x+f'*x
受到所有界限和线性约束的影响。x
可以是非凸问题的局部极小值。对于凸问题,x
是全局最小值。有关详细信息,请参阅局部最优与全局最优.
未来值
-解的目标函数值目标函数在解处的值,作为实标量返回。未来值
的价值1/2*x'*H*x+f'*x
在解决方案x
.
exitflag
- 原因二次规划优化函数
停了下来原因二次规划优化函数
已停止,作为此表中描述的整数返回。
所有的算法 |
|
|
函数收敛到解 |
|
超过迭代次数 |
|
问题是不可行的。或者 |
|
问题是无限的。 |
|
|
|
步长小于 |
|
检测到非凸问题。 |
|
无法计算步骤方向。 |
|
|
|
找到本地最小值;最小值不唯一。 |
|
目标函数值的变化小于 |
|
目前的搜索方向不是下降的方向。无法进一步进展。 |
|
|
|
偶尔'active-set'
带有退出标志的算法暂停0
当问题实际上是无限的时候。设置更高的迭代限制也会导致退出标志0
.
输出
- 有关优化过程的信息有关优化过程的信息,作为具有这些字段的结构返回:
|
迭代次数 |
|
优化算法使用 |
|
PCG迭代总次数( |
constrviolation |
约束函数的最大值 |
第一顺序选择 |
一阶最优性的度量 |
线人 |
内部线性求解器的类型, |
消息 |
退出消息 |
lambda.
-解的拉格朗日乘子“内点凸”
的“内点凸”
算法试图遵循严格在约束内的路径。它使用预解决模块来消除冗余,并通过解决简单的组件来简化问题。
该算法对稀疏Hessian矩阵具有不同的实现H
对于一个密集矩阵。一般来说,稀疏实现在大的、稀疏的问题上更快,而密集实现在密集或小的问题上更快。有关更多信息,请参见interior-point-convex quadprog算法.
“trust-region-reflective”
的“trust-region-reflective”
算法是一种基于内反射牛顿法的子空间信赖域方法[1].每次迭代涉及使用预处理共轭梯度(PCG)的方法的大线性系统的近似解。有关更多信息,请参见信任区域反光Quadprog算法.
'active-set'
的'active-set'
算法是一种投影方法,类似于[2].算法不是大规模的;看到大规模与中型算法.有关更多信息,请参见激活集quadprog算法.
您可以使用优化应用程序进行二次编程。进入优化工具
在Matlab.®命令行,然后选择quadprog -二次规划
求解器。有关更多信息,请参见优化应用程序.
[1]科尔曼,T. F.和Y. Li。“一种最大限度地减少对某些变量界限的二次函数的反射牛顿方法。”暹罗优化杂志.卷。6,第4,1996号,第1040-1058页。
[2] Gill,P. E.,W.Murray和M. H. Wright。实际优化。伦敦:1981年学术出版社。
N. Gould和P. L. Toint。"二次规划的预处理"数学编程。系列丛书,Vol. 19, 2004, pp. 95-132。
使用说明和限制:
二次规划优化函数
金宝app支持使用Codegen.
功能或者MATLAB编码器™应用程序。你必须有一个MATLAB编码器生成代码的许可。
目标硬件必须支持标准的双精度浮点计算。不能为单精度金宝app或定点计算生成代码。
二次规划优化函数
不支持金宝app问题
用于代码生成的参数。
[x,fval] = quadprog(问题)%不支持金宝app
所有二次规划优化函数
输入矩阵,例如一个
,Aeq
,磅
, 和乌兰巴托
必须是完整的,而不是稀疏的。您可以使用完整的
函数。
的磅
和乌兰巴托
参数必须具有与中的列数相同的条目数H
或者必须是空的[]
.
对于涉及嵌入式处理器的高级代码优化,还需要一个嵌入式编码器®许可证。
您必须包括以下选项:二次规划优化函数
并使用optimoptions
.选项必须包括算法
选项,设置为'active-set'
.
选项=最佳选项(“quadprog”,“算法”,'active-set');[x,fval,ExitFlag] = Quadprog(H,F,A,B,AEQ,BEQ,LB,UB,X0,选项);
代码生成支持以下选项:金宝app
算法
-一定是'active-set'
ConstraintTolerance
MaxIterations
客观限度
最优法
StepTolerance
生成的代码有限错误检查选项。建议更新选项的方法是使用optimoptions
,而不是点符号。
opts=options(“quadprog”,“算法”,'active-set');选项=最佳选项(选项,“MaxIterations”1 e4);%推荐选择。米axIterations = 1e4;%不推荐
不要从文件加载选项。这样做可能会导致代码生成失败。相反,请在代码中创建选项。
如果指定了不受支持的选项,则在代码生成过程中通常会忽略该选项。要获得可靠的金宝app结果,请仅指定受支持的选项。
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
你也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区站点不适合您所在位置的访问。