二次规划优化函数

描述

求解器用于与线性约束的二次目标函数。

quadprog发现最小用于通过指定的一个问题

X 1 2 X Ť H X + F Ť X 这样 { 一个 X b 一个 Ë q X = b Ë q b X ü b

H一个AEQ是矩阵,并Fb贝格UBX是矢量。

你可以通过FUB作为矢量或矩阵;看到矩阵参数

注意

二次规划优化函数仅适用于基于求解的方法。对于这两个优化的讨论方法,请参阅首先选择基于问题或基于解决方案的方法

X= quadprog (HF返回一个向量X这会使二分之一* X '* H * X + F' * X。输入H问题要有一个有限的最小值,必须是正定的。如果H是正定的,然后将溶液x=H(-f)

X= quadprog (HF一个b最小化二分之一* X '* H * X + F' * X受限制斧头b。输入一个是一个双倍矩阵,并且b是一个双精度向量。

X= quadprog (HF一个bAEQ贝格在附加限制条件下解决上述问题AEQ * X = BEQAEQ是一个双倍矩阵,并且贝格是一个双精度向量。如果不存在不平等,设置A = []b = []

X= quadprog (HF一个bAEQ贝格UB在附加限制条件下解决上述问题XUB。该输入UB双打的载体,并限制拥有的每X零件。如果不存在平等,设置AEQ = []BEQ = []

注意

如果有问题的指定的输入边界不一致时,输出XX0和输出FVAL[]

二次规划优化函数重置的组件X0违反边界XUB由边界限定的箱的内部。二次规划优化函数不会更改尊重边界组件。

X= quadprog (HF一个bAEQ贝格UBX0从向量开始解决前面的问题X0。如果没有边界存在,设置磅= []UB = []。一些二次规划优化函数算法忽略X0;看到X0

注意

X0“有源集”算法。

X= quadprog (HF一个bAEQ贝格UBX0选项使用中指定的优化选项解决前面的问题选项。采用optimoptions去创造选项. 如果不想给出初始点,请设置X0 = []

X= quadprog (问题返回的最小值问题,其中问题是在描述。创建问题通过优化应用程序导出的问题;看到导出您的工作. 或者,创建问题结构来自OptimizationProblem使用对象问题2结构

[XFVAL] = quadprog(___,对于任何输入变量,也回报FVAL中,目标函数的值X

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

[XFVALexitflag产量] = quadprog(___也回报exitflag,描述的退出条件的整数二次规划优化函数产量,包含优化信息的结构。

[XFVALexitflag产量拉姆达] = quadprog(___也回报拉姆达,其场包含解的拉格朗日乘子的结构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 Ť H X + F Ť 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,输出,λ=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

找到最低的

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 Ť H X + F Ť X

在哪里

H = [ 1 - 1 - 1 2 ] F = [ - 2 - 6 ]

受线性约束。

要解决这个问题,首先输入系数矩阵。

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

1 2 X Ť H X + F Ť 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];磅=零(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

创建一个问题结构使用基于问题的优化工作流程。创建一个等价于。的优化问题二次规划线性约束

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

要查看优化过程二次规划优化函数,设置选项以显示一个迭代显示并返回四个输出。问题是,以尽量减少

1 2 X Ť H X + F Ť X

从属于

0 X 1

在哪里

H = [ 2 1 - 1 1 3 1 2 - 1 1 2 ] F = [ 4 - 7 12 ]

输入问题系数。

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表示表达式中的二次项二分之一* X '* H * X + F' * X。如果H不是对称的,二次规划优化函数发出警告和用途对称版本(H + H')/ 2相反。

如果二次矩阵H是稀疏的,那么默认情况下“内点凸”算法使用了稍微不同的算法比当H是密集。一般来说,稀疏算法是大型,稀疏的问题更快,密算法是密集的或小的问题更快。欲了解更多信息,请参阅LinearSolver选项描述和内点凸quadprog算法

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

数据类型:双重的

线性目标术语,指定为实数向量。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编码中号线性不等式

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是一个-由-ñ矩阵,其中是相等的数目,并且ñ是变量的个数中的元素(数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))

数据类型:双重的

上限,指定为实向量或真正的数组。如果元素的个数X0等于UB,然后UB指定

x (i) < =乌兰巴托(我)对所有一世

如果numel(UB),然后UB指定

x (i) < =乌兰巴托(我)对于1<=i<=numel(ub)

如果有较少的元素UBX0,解算器发出警告。

例:要指定所有的X组件都小于1,使用UB =酮(尺寸(X0))

数据类型:双重的

初始点,指定为实向量。长度X0是行或列的数目H

X0适用于“trust-region-reflective”算法问题时只有绑定的限制。X0也适用于“有源集”算法。

注意

X0“有源集”算法。

如果没有指定X0二次规划优化函数设置所有组件X0在由边界限定的箱的内部的点。二次规划优化函数忽略X0对于“内点凸”算法和“trust-region-reflective”算法等式约束。

例:[1;2;1]

数据类型:双重的

优化选项,指定的输出optimoptions或结构,如optimset的回报。

有些选项是从缺席optimoptions显示。这些选项出现在以下表中斜体字。有关详细信息,请参见查看选项

所有的算法

算法

选择的算法:

  • “内点凸”(默认)

  • “trust-region-reflective”

  • “有源集”

“内点凸”算法只处理凸问题。该“trust-region-reflective”算法处理,只有边界或只有线性等式约束,但不是这两个问题。该“有源集”算法处理规定的投影不定的问题H到的零空间AEQ半正定。有关详细信息,请参见选择算法

诊断

显示关于要被最小化或解决的功能诊断信息。选择是'上'要么“关”(默认)。

显示

显示器的水平(见迭代显示):

  • “关”要么'没有'显示没有输出。

  • '最后'仅显示最终输出(默认)。

“内点凸”“有源集”算法允许附加值:

  • 'ITER'指定的迭代显示。

  • 'ITER-详述'指定与一个详细的退出消息迭代显示。

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

MaxIterations

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

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

  • “有源集”有一个缺省10 * (numberOfVariables + numberOfConstraints)

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

为了optimset,选项名称为MAXITER. 见当前和旧式选项名表

OptimalityTolerance

第一阶最优终止性;一个积极的标量。

  • 为一个“trust-region-reflective”等式约束问题,默认值为1E-6

  • 为一个“trust-region-reflective”结合的约束问题,默认值是100 *每股收益, 关于2.2204e-14号

  • 为了“内点凸”“有源集”算法中,默认值是1E-8

看到公差和停止标准

为了optimset,选项名称为TolFun. 见当前和旧式选项名表

StepTolerance

关于终止宽容X;一个积极的标量。

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

  • 为了“内点凸”,默认值是1 e-12

  • 为了“有源集”,默认值是1E-8

为了optimset,选项名称为TolX. 见当前和旧式选项名表

“trust-region-reflective”仅限算法

FunctionTolerance

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

为了optimset,选项名称为TolFun. 见当前和旧式选项名表

HessianMultiplyFcn

Hessian乘法函数,指定为函数句柄。对于大规模结构问题,此函数计算Hessian矩阵积H*Y公司实际上不形成H。该函数的形式

W = hmfun (Hinfo, Y)

在哪里HINFO(可能还有一些额外的参数)包含用于计算的矩阵H*Y公司

看到二次最小化的密集,结构黑森州为使用此选项的例子。

为了optimset,选项名称为黑斯穆尔特. 见当前和旧式选项名表

MaxPCGIter

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

PrecondBandWidth

预处理器为PCG的上限带宽;一个非负整数。默认,二次规划优化函数使用对角线预处理(较高带宽0)。对于一些问题,增加带宽减少PCG迭代次数。设置PrecondBandWidth天道酬勤使用直接分解(乔列斯基),而不是共轭梯度(CG)。直接因式分解在计算上比CG更昂贵,但产生对溶液质量更好的步骤。

SubproblemAlgorithm

确定如何计算迭代步骤。默认的,“重心”,比“因式分解”. 见信赖域反射quadprog算法

托尔普克

在PCG迭代终止性;一个积极的标量。默认值是0.1

TypicalX

典型X值。元素的数量TypicalX等于元素的数目X0,起点。默认值为酮(numberOfVariables,1)二次规划优化函数使用TypicalX内部缩放。TypicalX只有当X具有无限的组件,并且当TypicalX对于未受限制的分量的值超过1

“内点凸”仅限算法

ConstraintTolerance

对约束冲突的容忍;正标量。默认值是1E-8

为了optimset,选项名称为托尔肯. 见当前和旧式选项名表

LinearSolver

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

  • '汽车'(默认)-使用'稀疏'如果H矩阵是稀疏矩阵和'稠密'除此以外。

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

  • '稠密'- 使用稠密线性代数。

“有源集”仅限算法

ConstraintTolerance

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

为了optimset,选项名称为托尔肯. 见当前和旧式选项名表

ObjectiveLimit

一个标量的容限(停止条件)。如果目标函数值小于ObjectiveLimit和当前点是可行的,迭代停止,因为这个问题是无界的,大概。默认值为-1e20级

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

H

在对称矩阵二分之一* X'* H * X

F

向量线性项F'* X

Aineq

矩阵的线性不等式约束Aineq * xbineq

bineq

向量在线性不等式中的约束Aineq * xbineq

AEQ

矩阵线性等式约束AEQ * X = BEQ

贝格

向量线性等式约束AEQ * X = BEQ
下限的矢量
UB 上界的矢量

X0

初始点X

解算器

'quadprog'

选项

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

必填字段HF解算器选项。在解决,二次规划优化函数忽略中的任何字段问题未列出的。

数据类型:结构

输出参数

全部收缩

解决方案,返回作为一个真正的载体。X是矢量,最大限度地减少二分之一* X '* H * X + F' * X受所有边界和线性约束。X可非凸问题的局部极小。对于凸问题,X是全球最低。有关更多信息,请参见本地与全局最优解

在该解决方案的目标函数值,返回作为一个真正的标量。FVAL是的价值二分之一* X '* H * X + F' * X在解决方案X

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

所有的算法

1

函数收敛到解X

0

超过迭代次数options.MaxIterations

-2

问题是不可行的。或者,“内点凸”中,步长是小于options.StepTolerance,但限制条件并没有得到满足。

-3

问题是无限的。

“内点凸”算法

2

步长为小于options.StepTolerance,约束被满足。

-6

检测到非凸问题。

-8

无法计算步进方向。

“trust-region-reflective”算法

4

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

3

在目标函数的值更改为小于options.FunctionTolerance

-4

当前的搜索方向是不是下降的方向。没有进一步的进展可以作出。

“有源集”算法

-6

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

注意

偶尔“有源集”算法停止与出口标志0当问题是,事实上,无界。设置较高的迭代限制也导致出口标志0

关于优化过程的信息,返回与这些领域的结构:

迭代

采取迭代次数

算法

采用优化算法

cgiterations

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

constrviolation

最大约束函数

firstorderopt公司

衡量一阶最优的

线性溶剂

内部线性解算器的类型,'稠密'要么'稀疏'“内点凸”算法只)

信息

退出消息

拉格朗日乘数在解决方案,返回结构与这些字段:

降低

下界

上限UB

线性不等式

线性不等式

秋林

线性等式

有关详细信息,请参见拉格朗日乘子结构

算法

全部收缩

“内点凸”

“内点凸”算法试图遵循严格的约束内的路径。它使用一个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页。

扩展功能

R2006a前推出