二次规划优化函数

二次编程

描述

具有线性约束的二次目标函数的求解器。

QuadProg查找最低限度的问题

x 1 2 x T H x + f T x 这样 一个 x b 一个 e x b e l b x u b

H一个, 和Aeq是矩阵,和fb贝基乌兰巴托, 和x是向量。

你可以通过f, 和乌兰巴托向量或矩阵;看到矩阵论据

笔记

二次规划优化函数仅适用于基于求解器的方法。有关这两种优化方法的讨论,请参见首先选择基于问题或基于解决者的方法

x= quadprog (Hf返回一个向量x那就最小化了1/2*x'*H*x+f'*x.输入H必须是正定的,才能使问题具有有限的最小值。如果H是正定的,那么解x=H\(-f)

例子

x= quadprog (Hf一个b最小化1/2*x'*H*x+f'*x受限制* xb.输入一个是一个双精度矩阵,并且b是一个双精度向量。

例子

x= quadprog (Hf一个bAeq贝基根据附加限制解决前面的问题Aeq*x=beqAeq是一个双精度矩阵,并且贝基是一个双精度向量。如果不存在不等式,则设置a = []b = []

例子

x= quadprog (Hf一个bAeq贝基乌兰巴托根据附加限制解决前面的问题x乌兰巴托.投入乌兰巴托向量是双精度的吗,对每个向量都有限制x组件。如果不存在等式,则设置Aeq = []beq=[]

笔记

如果出现问题的指定输入界限是不一致的,则输出xx0和输出未来值[]

二次规划优化函数重置的组件x0这就违反了界限x乌兰巴托到由边界定义的框的内部。二次规划优化函数不更改遵守边界的组件。

x= quadprog (Hf一个bAeq贝基乌兰巴托x0从向量开始解决前面的问题x0.如果不存在边界,则设置磅= []乌兰巴托= [].一些二次规划优化函数算法忽略x0;看到x0

笔记

x0'active-set'算法。

例子

x= quadprog (Hf一个bAeq贝基乌兰巴托x0选项使用中指定的优化选项解决上述问题选项.使用optimoptions创造选项.如果不想给出初始点,请设置x0 = []

例子

x= quadprog (问题返回的最小值问题,在那里问题是中描述的结构描述.创建问题通过使用优化应用导出问题;看到导出您的工作。或者,创建一个问题从一个优化问题通过使用问题2结构

例子

x未来值) = quadprog (___,对于任何输入变量,也会返回未来值,目标函数的值为x

fval = 0.5*x'*H*x + f'*x

例子

x未来值exitflag输出) = quadprog (___还返回exitflag的退出条件二次规划优化函数, 和输出,该结构包含有关优化的信息。

例子

x未来值exitflag输出lambda.) = quadprog (___还返回lambda.,一种结构,其场包含解的拉格朗日乘子x

例子

全部收缩

求最小值

f x 1 2 x 1 2 + x 2 2 - x 1 x 2 - 2 x 1 - 6 x 2

受约束

x 1 + x 2 2 - x 1 + 2 x 2 2 2 x 1 + x 2 3.

二次规划优化函数语法,这个问题是为了最小化

f x 1 2 x T H x + f T x

在哪里

H 1 - 1 - 1 2 f - 2 - 6

受线性约束。

要解决此问题,请首先输入系数矩阵。

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

求最小值

f x 1 2 x 1 2 + x 2 2 - x 1 x 2 - 2 x 1 - 6 x 2

受约束

x 1 + x 2 0

二次规划优化函数语法,这个问题是为了最小化

f x 1 2 x T H x + f T x

在哪里

H 1 - 1 - 1 2 f - 2 - 6

受线性约束。

要解决此问题,请首先输入系数矩阵。

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使二次表达式最小化

1 2 x T H x + f T x

在哪里

H 1 - 1 1 - 1 2 - 2 1 - 2 4 f 2 - 3. 1

受约束

0 x 1 x 1 / 2

要解决此问题,请首先输入系数。

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

创建一个问题使用具体问题具体分析优化工作流程.创建一个优化问题等价于线性约束的二次规划

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.

查看的优化过程二次规划优化函数,设置选项以显示迭代显示并返回四个输出。问题是最小化

1 2 x T H x + f T x

从属于

0 x 1

在哪里

H 2 1 - 1 1 3. 1 2 - 1 1 2 5 f 4 - 7 12.

输入问题系数。

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表示表达式中的二次项1/2*x'*H*x+f'*x.如果H不是对称的,二次规划优化函数发出警告并使用对称版本(H+H')/2相反

如果二次矩阵H是稀疏的,那么在默认情况下“内点凸”算法使用略有不同的算法而非略有算法H是密集的。通常,稀疏算法在大,稀疏问题上更快,密集算法在密集或小问题上更快。有关更多信息,请参阅LinearSolver选项描述和interior-point-convex quadprog算法

例子:[2,1;1,3]

数据类型:

线性目标术语,指定为真正的载体。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编码线性不等式

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是一个-借-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是的行数或列数H

x0适用于“trust-region-reflective”当问题只有约束条件时的算法。x0也适用于'active-set'算法。

笔记

x0'active-set'算法。

如果没有指定x0二次规划优化函数集合x0到边界所定义的方框内部的一个点。二次规划优化函数忽视x0对于“内点凸”算法,对于“trust-region-reflective”具有等式约束的算法。

例子:[1;2;1]

数据类型:

优化选项,指定为optimoptions或者一个结构优化集的回报。

控件中缺少一些选项optimoptions显示。下表中的这些选项以斜体显示。有关详细信息,请参阅查看选项

所有的算法

算法

选择的算法:

  • “内点凸”(默认)

  • “trust-region-reflective”

  • 'active-set'

“内点凸”算法只处理凸问题“trust-region-reflective”算法处理的问题只有界限或只有线性等式约束,而不是两者。的'active-set'该算法处理不确定问题,前提是H关于零空间Aeq是积极的semidefinite。有关详细信息,请参阅选择算法

诊断学

显示有关要最小化或解决的函数的诊断信息。选择是“上”或者“关”(默认)。

陈列

显示级别(请参见迭代显示):

  • “关”或者“没有”不显示任何输出。

  • “决赛”仅显示最终输出(默认值)。

“内点凸”'active-set'算法允许附加值:

  • “通路”指定迭代显示。

  • “iter-detailed”指定具有详细退出消息的迭代显示。

  • “最终详细说明”只显示带有详细退出消息的最终输出。

MaxIterations

允许的最大迭代次数;一个正整数。

  • 暂时“trust-region-reflective”等式约束问题,默认值为2 * (numberOfVariables - numberOfEqualities)

  • 'active-set'默认值为10 * (numberOfVariables + numberOfConstraints)

  • 对于所有其他算法和问题,默认值为200

对于优化集,选项名称为马克西特看见当前和旧选项名称表

最优法

一阶最优性的终止公差一个积极的标量。

  • 暂时“trust-region-reflective”等式约束问题,默认值为1e-6

  • 暂时“trust-region-reflective”边界约束问题,默认值为100 *每股收益, 关于2.2204e-14

  • 对于“内点凸”'active-set'算法,默认值为1e-8

看到公差和停止标准

对于优化集,选项名称为托尔芬看见当前和旧选项名称表

StepTolerance

终止宽容x;一个积极的标量。

  • 对于“trust-region-reflective”,默认值为100 *每股收益, 关于2.2204e-14

  • 对于“内点凸”,默认值为1 e-12

  • 对于'active-set',默认值为1e-8

对于优化集,选项名称为托克斯看见当前和旧选项名称表

“trust-region-reflective”仅算法

FunctionTolerance

函数值的终止公差;一个积极的标量。默认值取决于问题类型:有界约束问题使用的问题类型100 *每股收益,并使用线性等式约束问题1e-6看见公差和停止标准

对于优化集,选项名称为托尔芬看见当前和旧选项名称表

HessianMultiplyFcn

Hessian乘法函数,指定为函数句柄。对于大规模结构化问题,此函数计算Hessian矩阵乘积H*Y没有真正形成H.函数具有以下形式:

W = hmfun (Hinfo, Y)

在哪里h福(以及一些可能的附加参数)包含用于计算的矩阵H*Y

看到用密集,结构化的黑森州的二次最小化有关使用此选项的示例,请参见。

对于优化集,选项名称为赫斯穆特看见当前和旧选项名称表

MaxPCGIter

PCG(预处理共轭梯度)迭代的最大次数;正标量。默认值为马克斯(1楼(numberOfVariables / 2))对于有界约束问题。对于等式约束问题,二次规划优化函数忽视MaxPCGIter和使用MaxIterations限制PCG迭代的数量。有关更多信息,请参见预处理的共轭梯度法

precondbandwidth.

PCG的前提者的上带宽;一个非负整数。默认情况下,二次规划优化函数使用对角线预处理(较高带宽0).对于某些问题,增加带宽可以减少PCG迭代次数。设置precondbandwidth.Inf使用直接因子分解(Cholesky)而不是共轭梯度(CG)。直接因式分解在计算上比CG更昂贵,但在求解过程中产生了更好的质量。

子问题算法

确定如何计算迭代步骤。默认的,“重心”,比“因子化”看见信任区域反光Quadprog算法

托尔普克

PCG迭代的终止耐受;一个积极的标量。默认为0.1

典型的

典型的x价值观中的元素数典型的等于元素的个数x0,起点。默认值为的(numberOfVariables, 1)二次规划优化函数使用典型的内部用于缩放。典型的只有当x具有无限的组件,并且典型的无界组件的值超过1

“内点凸”仅算法

ConstraintTolerance

约束冲突的容差;正标量。默认值为1e-8

对于优化集,选项名称为托尔康看见当前和旧选项名称表

LinearSolver

算法中内部线性解算器的类型:

  • “汽车”(默认)-使用“稀疏”如果H矩阵稀疏和“密集”否则。

  • “稀疏”-使用稀疏线性代数。看到稀疏矩阵(MATLAB)。

  • “密集”- 使用密集的线性代数。

'active-set'仅算法

ConstraintTolerance

约束违背的容忍;一个积极的标量。默认值为1e-8

对于优化集,选项名称为托尔康看见当前和旧选项名称表

客观限度

一个标量的公差(停止标准)。如果目标函数值小于客观限度并且当前点是可行的,迭代停止,因为问题是无界的,可能是。默认值为-1e20

问题结构,指定为具有这些字段的结构:

H

对称矩阵1/2*x'*H*x

f

线性术语的矢量f'* x

艾奈克

线性不等式约束下的矩阵Aineq * xBineq.

Bineq.

线性不等式约束中的向量Aineq * xBineq.

Aeq

线性平等约束的矩阵Aeq*x=beq

贝基

线性等式约束中的向量Aeq*x=beq
下界向量
乌兰巴托 上界向量

x0

初始点x

解算器

“quadprog”

选项

使用创建的选项optimoptions或者优化应用程序

必需的字段有Hf解算器, 和选项.解决时,二次规划优化函数忽略中的任何字段问题除了列出的人。

数据类型:结构体

输出参数

全部收缩

解决方案,作为真正的矢量返回。x是最小化的向量1/2*x'*H*x+f'*x受到所有界限和线性约束的影响。x可以是非凸问题的局部极小值。对于凸问题,x是全局最小值。有关详细信息,请参阅局部最优与全局最优

目标函数在解处的值,作为实标量返回。未来值的价值1/2*x'*H*x+f'*x在解决方案x

原因二次规划优化函数已停止,作为此表中描述的整数返回。

所有的算法

1

函数收敛到解x

0

超过迭代次数options.MaxIterations

-2

问题是不可行的。或者“内点凸”,步长小于选项.阶跃公差,但限制没有得到满足。

-3

问题是无限的。

“内点凸”算法

2

步长小于选项.阶跃公差,约束条件得到满足。

-6

检测到非凸问题。

-8

无法计算步骤方向。

“trust-region-reflective”算法

4

找到本地最小值;最小值不唯一。

3.

目标函数值的变化小于选项。FunctionTolerance

-4

目前的搜索方向不是下降的方向。无法进一步进展。

'active-set'算法

-6

检测到非凸问题;投影H关于零空间Aeq不是正半定的。

笔记

偶尔'active-set'带有退出标志的算法暂停0当问题实际上是无限的时候。设置更高的迭代限制也会导致退出标志0

有关优化过程的信息,作为具有这些字段的结构返回:

迭代

迭代次数

算法

优化算法使用

cgiteration.

PCG迭代总次数(“trust-region-reflective”算法只)

constrviolation

约束函数的最大值

第一顺序选择

一阶最优性的度量

线人

内部线性求解器的类型,“密集”或者“稀疏”“内点凸”算法只)

消息

退出消息

解处的拉格朗日乘数,返回为具有以下字段的结构:

降低

下限

上限乌兰巴托

线性不等式

线性不等式

eqlin

线性等式

有关详细信息,请参阅拉格朗日乘法器结构

算法

全部收缩

“内点凸”

“内点凸”算法试图遵循严格在约束内的路径。它使用预解决模块来消除冗余,并通过解决简单的组件来简化问题。

该算法对稀疏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。

扩展能力

在R2006A之前介绍