二次规划
具有线性约束的二次目标函数求解器。
Quadprog为指定的问题找到一个最小值
H那一种,AEQ.矩阵,F那B.那说真的那磅那乌兰巴托,X是向量。
你可以通过F那磅,乌兰巴托作为载体或矩阵;看矩阵的参数.
注
二次规划优化函数
仅适用于基于求解器的方法。有关两种优化方法的讨论,请参阅首先选择基于问题或基于求解器的方法.
找到最少
受约束
在二次规划优化函数
语法,这个问题是为了最小化
那
在哪里
受线性约束。
要解决这个问题,首先输入系数矩阵。
H=[1-1-1 2]; f=[-2-6]; A=[1-1 2; 2 1]; b=[2;2.3];
调用二次规划优化函数
.
[x, fval exitflag、输出λ)=......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];beq = 0;
调用二次规划优化函数
,进入[]
的输入一种
和B.
.
[x, fval exitflag、输出λ)=......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];磅= 0 (3,1);乌兰巴托= 1(大小(磅));Aeq = 1(1、3);说真的= 1/2;
调用二次规划优化函数
,进入[]
的输入一种
和B.
.
X = QuadProg(H,F,[],[],AEQ,BEQ,LB,UB))
找到满足约束条件的最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
x =3×10.0000 0.5000 0.0000
设置监视进度的选项二次规划优化函数
.
选择= optimoptions ('quadprog'那“显示”那'iter');
用二次目标和线性不等式约束定义问题。
H=[1-1-1 2]; f=[-2-6]; A=[1-1 2; 2 1]; b=[2;2.3];
帮助编写二次规划优化函数
函数调用时,将不必要的输入设置为[]
.
Aeq = [];说真的= [];磅= [];乌兰巴托= [];x0 = [];
调用二次规划优化函数
解决问题。
X = QuadProg(H,F,A,B,AEQ,BEQ,LB,UB,X0,选项)
国际热核聚变实验堆原发感染-双感染互补性0-8.884885e+00 3.214286e+00 1.071429e-01 1.000000e+00 1-8.331868e+00 1.321041e-01 4.403472e-03 1.910489e-01 2-8.212804e+00 1.676295e-03 5.587652e-05 1.009601e-02 3-8.381476e-07 2.793826e-08 1.8094E-05 2-22.22737E-22发现最小值为0.5257E满足约束条件。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
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;
转换问题
到一个问题
结构体。
问题= prob2struct(概率);
使用方法解决问题二次规划优化函数
.
[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
二次规划优化函数
优化过程来看看优化过程二次规划优化函数
,设置选项以显示迭代显示并返回4个输出。问题是最小化
从属于
那
在哪里
那 .
输入问题系数。
H = [2 1 -1 1 3 1/2 -1 /2 5];f =(4、7、12);磅= 0 (3,1);乌兰巴托= 1 (3,1);
设置选项以显示求解器的迭代进度。
选择= optimoptions ('quadprog'那“显示”那'iter');
调用二次规划优化函数
有四个输出。
[x fval,退出,输出] = quadprog(h,f,[],[],[],[],LB,UB,[],选项)
ITER FVAL PRIMAL INFEAS双INFEAS互补0 2.691769E + 01 1.582123E + 00 1.712849C + 01 1.680447E + 00 1 -3.889430E + 00 0.0000000E + 00 8.5.971731C-01 2 -5.451769E + 00 0.0000000+00 4.282123E-06 2.710131E-02 3 -5.499997E + 00 0.0000000E + 00 1.221903E-10 6.939689E-07 4 -5.500000E + 00 0.000000E + 00 5.842173E-14 3.469847E -10 -10 -10最低限度约束。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
x =3×10.0000 1.0000 0.0000
fval=-5.5000
exitflag = 1
输出=结构与字段:消息:'...'算法:'Interion-point-convex'firstorderopt:1.5921E-09 Constrviolation:0迭代:4 linearsolver:'密集'cgiterations:[]
二次规划优化函数
拉格朗日乘客解决二次编程问题并返回拉格朗日乘法器。
H = [1,-1,1 -1,2,-2 1,-2,4];f = [7, -12; -15);一个= (1 1 1);b = 3;磅= 0 (3,1);[x, fval exitflag、输出λ)= quadprog (H f A、b[],[],磅);
找到满足约束条件的最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
检查拉格朗日乘子结构λ
.
disp(λ)
eqlin: [0x1 double] lower: [3x1 double] upper: [3x1 double]
线性不等式约束具有相关的拉格朗日乘法器12
.
显示与下界相关的乘数。
显示(λ下)
5.0000 0.0000 0.0000.
只有第一个组成部分lambda.lower.
有一个非零乘数。这通常意味着只有第一个组成部分X
处于零的下限。显示组件通过显示X
.
DISP(x)
0.0000 1.5000 1.5000
速度后续二次规划优化函数
调用,创建一个温暖的启动对象。
选择= optimoptions ('quadprog'那“算法”那“激活集”);X0 = [1 2 3];ws = optimwarmstart (x0,选项);
使用ws
.
H = [1,-1,1 -1,2,-2 1,-2,4];f = [7, -12; -15);一个= (1 1 1);b = 3;磅= 0 (3,1);抽搐(ws、fval exitflag、输出λ)= quadprog (H f A、b[],[],磅,[],ws);toc
找到满足约束条件的最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。运行时间为0.021717秒。
改变目标函数,再次解决问题。
f = (-10; -15; -20);抽搐(ws、fval exitflag、输出λ)= quadprog (H f A、b[],[],磅,[],ws);toc
找到满足约束条件的最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。经过时间为0.018485秒。
H
-二次目标词二次客观术语,指定为对称的真实矩阵。H
表示表达式的二次1/2 * x ' * H * x + f ' * x
.如果H
不对称的,二次规划优化函数
发出警告并使用对称版本(H + H ') / 2
相反
如果二次矩阵H
稀疏,然后默认情况下,“interior-point-convex”
算法使用的算法略有不同,当H
是密集。一般来说,稀疏算法在大的、稀疏的问题上更快,而密集算法在密集或小的问题上更快。有关更多信息,请参见linearsolver
选项描述和内部点凸Quadprog算法.
例子:(2, 1, 1, 3)
数据类型:双重的
F
-线性目标术语线性目标项,指定为实向量。F
表示表达式中的线性项1/2 * x ' * H * x + f ' * x
.
例子:[1; 3; 2]
数据类型:双重的
一种
-线性不等式约束线性不等式约束,指定为实矩阵。一种
是一个m
-借-N
矩阵,在哪里m
是不平等的数量,和N
是变量的数量(元素的数量x0
). 对于大问题,请通过一种
作为稀疏矩阵。
一种
编码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
是变量的数量(元素的数量x0
). 对于大问题,请通过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 = 1 (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 = 1 (1, N)
和Beq = 1
.
数据类型:双重的
磅
-下界下限,指定为真实的矢量或真实数组。如果元素的数量x0
等于中的元素数磅
,然后磅
指定
x(我)> =磅(我)
对全部一世
.
如果努美尔(磅)<努美尔(x0)
,然后磅
指定
x(我)> =磅(我)
为1 <= i <= numel(lb)
.
如果有更少的元素磅
比在x0
,解算器发出警告。
例子:要指定所有x组件是正的,请使用lb = zeros(size(x0))
.
数据类型:双重的
乌兰巴托
-上界上界,指定为实向量或实数组。如果元素的数量x0
等于中的元素数乌兰巴托
,然后乌兰巴托
指定
x(i)<= UB(i)
对全部一世
.
如果numel(Ub)
乌兰巴托
指定
x(i)<= UB(i)
为1<=i<=numel(ub)
.
如果有更少的元素乌兰巴托
比在x0
,解算器发出警告。
例子:要指定所有x分量都小于1,使用UB =α(大小(x0))
.
数据类型:双重的
x0
-初始点初始点,指定为实向量。的长度x0
的行数或列数H
.
x0
适用于'信任区域反光'
问题只有绑定约束时算法。x0
也适用于“激活集”
算法。
注
x0
是“激活集”
算法。
如果您未指定x0
那二次规划优化函数
设置所有组件x0
到由边界定义的框内部的一个点。二次规划优化函数
忽略了x0
对于“interior-point-convex”
算法和算法'信任区域反光'
具有等式约束的算法。
例子:[1;2.1]
数据类型:双重的
选择权
-优化选项优化选择
|结构,如optimset
回报的输出,指定为优化选项优化选择
或一个结构如optimset
返回。
某些选择缺席优化选择
显示。这些选项在下表中以斜体显示。有关详细信息,请参阅视图选项.
所有算法
算法 |
选择算法:
这 |
诊断 | 显示关于要最小化或解决的函数的诊断信息。的选择是 |
显示 |
显示水平(见迭代显示):
这
|
最大 |
允许的最大迭代次数;一个正整数。
为 |
OptimalityTolerance |
一阶最优性的终止耐受性;一个积极的标量。
看公差和停止标准. 为 |
StepTolerance. |
终止上公差
为 |
'信任区域反光'
算法只
FunctionTolerance |
函数值的终止容差;一个积极的标量。默认值取决于问题类型:绑定约束问题使用 为 |
|
Hessian乘法函数,指定为函数句柄。对于大规模结构化问题,此函数计算Hessian矩阵乘积 w = hmfun(hinfo,y) 在哪里 看稠密的结构化Hessian的二次极小化下面是使用此选项的示例。 为 |
MaxPCGIter | PCG(预条件共轭梯度)迭代的最大次数;一个积极的标量。默认值是 |
PrecondBandWidth | PCG预处理器的上带宽;一个非负整数。默认情况下, |
SubproblemAlgorithm |
确定如何计算迭代步骤。默认值, |
托尔普克 | PCG迭代的终止公差一个积极的标量。默认值是 |
TypicalX |
典型的 |
“interior-point-convex”
算法只
“激活集”
算法只
约束特许 |
对约束违规的宽容;一个积极的标量。默认值是 为 |
ObjectiveLimit |
宽度(停止标准)是标量。如果目标函数值下面 |
问题
-问题的结构问题结构,指定为具有以下字段的结构:
|
对称矩阵1/2 * x ' * H * x |
|
线性向量f ' * x |
|
线性不等式约束中的矩阵Aineq * X. ≤.bineq |
|
线性不平等约束的矢量Aineq * X. ≤.bineq |
|
线性等式约束下的矩阵Aeq * x =说真的 |
|
线性等式约束下的向量Aeq * x =说真的 |
磅 |
下限矢量 |
乌兰巴托 |
上界向量 |
|
初始点X |
|
'quadprog' |
|
使用创建的选项优化选择 或optimset |
必填字段是H
那F
那求解器
,选择权
.当解决,二次规划优化函数
忽略中的任何字段问题
除了列出的那些。
注
你不能用热开始问题
论点。
数据类型:塑造
ws
-热启动对象Optimwarmstart.
热启动对象,指定为使用的对象Optimwarmstart.
.暖启动对象包含起始点和选项,以及代码生成中用于内存大小的可选数据。看Warm Start最佳实践.
例子:ws = optimwarmstart (x0,选项)
X
- 解决方案解,返回实向量。X
是最小化的向量吗1/2 * x ' * H * x + f ' * x
服从所有的边界和线性约束。X
对于非凸问题,可以是局部最小值。对凸的问题,X
是全局最小值。有关更多信息,请参阅局部优化与全局优化.
wsout
—解决热启动对象quadprogwarmstart.
目的解决方案热启动对象,返回为quadprogwarmstart.
对象。解决点是wsout。X
.
您可以使用wsout
作为输入温暖的启动对象在随后的二次规划优化函数
呼叫
fval
-解的目标函数值解决方案的客观函数值,作为实际标量返回。fval
是值的价值1/2 * x ' * H * x + f ' * x
在解决方案X
.
ExitFlag.
- - -原因二次规划优化函数
停止原因二次规划优化函数
已停止,作为此表中描述的整数返回。
所有算法 |
|
|
功能融合到解决方案 |
|
超出迭代次数 |
|
问题是不可行的。或者,为 |
|
问题是无限的。 |
|
|
|
步长小于 |
|
检测到非凸问题。 |
|
无法计算步长方向。 |
|
|
|
局部最小值;最小值并不是唯一的。 |
|
目标函数值的变化小于 |
|
目前的搜索方向不是下降方向。不可能取得进一步进展。 |
|
|
|
注
偶尔,“激活集”
算法停止退出标志0.
事实上,这个问题是无界的。设置更高的迭代限制也会导致退出标志0.
.
输出
-优化流程信息关于优化过程的信息,作为带有以下字段的结构返回:
|
采取的迭代人数 |
|
优化算法 |
|
PCG迭代总数( |
CONSTRVIOMATION. |
最大约束函数 |
第一顺序选择 |
一阶最优性的衡量 |
线人 |
内部线性求解器的类型, |
信息 |
退出消息 |
λ
-解处的拉格朗日乘数“interior-point-convex”
这“interior-point-convex”
算法试图遵循严格在约束之内的路径。它使用一个预解决模块来消除冗余,并通过解决简单的组件来简化问题。
该算法对稀疏Hessian矩阵有不同的实现方式H
并且对于密集的基质。通常,稀疏的实施是大,稀疏问题的速度更快,密集的实现更快,密集或小问题更快。有关更多信息,请参阅内部点凸Quadprog算法.
'信任区域反光'
这'信任区域反光'
算法是基于内部反射牛顿方法的子空间信任区域方法[1].每次迭代都涉及到使用预条件共轭梯度(PCG)方法求解一个大线性系统的近似解。有关更多信息,请参阅trust-region-reflective quadprog算法.
“激活集”
这“激活集”
算法是一种投影方法,类似于所描述的方法[2].该算法不是大规模的;看大规模与中型算法.有关更多信息,请参阅主动集Quadprog算法.
温暖的启动对象维护来自先前解决的问题的活动约束列表。求解器通过尽可能多地运行最大的激活约束信息以解决当前问题。如果先前的问题与当前的问题太不同,则不会重复使用活动集信息。在这种情况下,求解器有效地执行冷启动以重建活动约束列表。
这优化活动编辑器任务为二次规划优化函数
.
[1]科尔曼,T. F.和Y. Li。使二次函数在某些变量有界的情况下最小的反射牛顿法SIAM优化学报.第6卷第4期,1996年,第1040-1058页。
吉尔,P. E., W.默里和M. H.赖特。实际的优化。伦敦:学术出版社,1981。
[3] Gould,N.和P. L. Toint。“预处理二次编程。”数学规划。B,Vol系列。100,2004,PP。95-132。
使用说明和限制:
二次规划优化函数
万博1manbetx支持使用codegen
(MATLAB编码器)函数或MATLAB®编码器™你一定有一个Matlab编码器生成代码的许可证。
目标硬件必须支持标准的双精度浮点计算。万博1manbetx不能为单精度或定点计算生成代码。
代码生成目标不使用与MATLAB解算器相同的数学内核库。因此,代码生成解决方案可能与解算器解决方案不同,特别是对于条件较差的问题。万博 尤文图斯
二次规划优化函数
不支持万博1manbetx问题
代码生成的参数。
[x, fval] = quadprog(问题)%不支持万博1manbetx
全部二次规划优化函数
输入矩阵如一种
那AEQ.
那磅
,乌兰巴托
必须充实,不能稀疏。您可以将稀疏矩阵转换为完整的满的
函数。
这磅
和乌兰巴托
参数必须具有与列数相同的条目H
或者必须是空的[]
.
对于涉及嵌入式处理器的高级代码优化,还需要一个嵌入式编码器®执照。
您必须包含以下选项二次规划优化函数
并使用优化选择
.选项必须包括算法
选项,设置为“激活集”
.
选择= optimoptions ('quadprog'那“算法”那“激活集”);[x, fval exitflag] = quadprog (H f A、b Aeq,说真的,磅,乌兰巴托,x0,选项);
代码生成支持这些选项:万博1manbetx
算法
——必须“激活集”
约束特许
最大
ObjectiveLimit
OptimalityTolerance
StepTolerance.
生成的代码对选项有有限的错误检查。更新选项的推荐方法是使用优化选择
,而不是点符号。
选择= optimoptions ('quadprog'那“算法”那“激活集”);选择= optimoptions(选择,'maxtations',1E4);% 受到推崇的opts.maxIterations = 1E4;% 不建议
不要从文件中加载选项。这样做可能会导致代码生成失败。相反,在代码中创建选项。
如果指定不受支持的选项,则该选项通常在代码生成期间被忽略。万博1manbetx为了得到可靠的结果,只指定受支持的选项。万博1manbetx
例如,看到为quadprog生成代码.
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区网站未针对您所在地的访问进行优化。