主要内容

quadprog

二次规划

描述

解算器的二次目标函数线性约束。

quadprog发现问题规定的最低

最小值 x 1 2 x T H x + f T x 这样 { 一个 x b , 一个 e x = b e , l b x u b

H,一个,Aeq矩阵,f,b,说真的,,乌兰巴托,x是向量。

你可以通过f,,乌兰巴托向量或矩阵;看到矩阵的参数

请注意

quadprog仅适用于solver-based方法。两种优化方法的讨论,请参阅首先选择具体问题具体分析或Solver-Based方法

x= quadprog (H,f)返回一个向量x,最大限度地减少1/2 * x ' * H * x + f ' * x。输入H必须正定问题有一个有限的最低。如果H是正定的,那么解决方案x = H \ (f)

例子

x= quadprog (H,f,一个,b)最小化1/2 * x ' * H * x + f ' * x受到的限制* xb。输入一个是一个矩阵的双打,b是一个向量的双打。

例子

x= quadprog (H,f,一个,b,Aeq,说真的)解决了之前的问题受到额外的限制Aeq * x =说真的Aeq是一个矩阵的双打,说真的是一个向量的双打。如果不存在不平等,集一个= []b = []

例子

x= quadprog (H,f,一个,b,Aeq,说真的,,乌兰巴托)解决了之前的问题受到额外的限制x乌兰巴托。输入乌兰巴托向量的双打,每个限制x组件。如果不存在平等,集Aeq = []说真的= []

请注意

如果指定的输入范围不一致的问题,输出xx0和输出fval[]

quadprog重置的组件x0违反的界限x乌兰巴托盒子的内部定义的界限。quadprog不会改变组件的尊重。

x= quadprog (H,f,一个,b,Aeq,说真的,,乌兰巴托,x0)解决了之前的问题从向量x0。如果不存在边界,设置磅= []乌兰巴托= []。一些quadprog算法忽略x0;看到x0

请注意

x0需要理由吗“激活集”算法。

例子

x= quadprog (H,f,一个,b,Aeq,说真的,,乌兰巴托,x0,选项)解决了之前的问题使用优化选项中指定选项。使用optimoptions创建选项。如果你不想给一个初始点,集合x0 = []

例子

x= quadprog (问题)返回的最低标准问题描述的结构问题。创建问题使用点符号或结构结构体函数。另外,创建一个问题结构的OptimizationProblem对象的使用prob2struct

例子

(x,fval)= quadprog (___)对任何输入变量,也回报fval,目标函数的值x:

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

例子

(x,fval,exitflag,输出)= quadprog (___)同样的回报exitflag一个整数,描述的退出条件quadprog,输出,一个结构,其中包含的信息优化。

例子

(x,fval,exitflag,输出,λ)= quadprog (___)同样的回报λ,一个结构的字段包含的拉格朗日乘数法的解决方案x

例子

(wsout,fval,exitflag,输出,λ)= quadprog (H,f,一个,b,Aeq,说真的,,乌兰巴托,ws)开始quadprog在温暖的开始从数据对象ws,使用的选项ws。返回的参数wsout包含点的解决方案wsout.X。通过使用wsout作为初始热启动对象在随后的解算器调用,quadprog可以工作得更快。

例子

全部折叠

找到最低的

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

quadprog语法,这个问题是最小化

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);(1 = 1;1 - 2;2 1];b = [2;2;3);

调用quadprog

[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

找到最低的

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

quadprog语法,这个问题是最小化

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];说真的= 0;

调用quadprog,进入[]的输入一个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减少二次表达式

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];磅= 0 (3,1);乌兰巴托= 1(大小(磅));Aeq = 1 (1、3);说真的= 1/2;

调用quadprog,进入[]的输入一个b

x = quadprog (H f [] [], Aeq,说真的,磅,乌兰巴托)
最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =3×10.0000 0.5000 0.0000

选项设置为监控的进步quadprog

选择= optimoptions (“quadprog”,“显示”,“通路”);

定义一个二次目标和线性不等式约束问题。

H = [1 1;1 2];f = [2;6);(1 = 1;1 - 2;2 1];b = [2;2;3);

帮助写quadprog函数调用,设置不必要的输入[]

Aeq = [];说真的= [];磅= [];乌兰巴托= [];x0 = [];

调用quadprog来解决这个问题。

x = quadprog (H f A、b Aeq,说真的,磅,乌兰巴托,x0,选项)
Iter Fval原始Infeas双重Infeas互补0 -8.884885 1.071429 3.214286 e + e + 00 00 e-01 1.000000 e + 00 1 1.910489 -8.331868 1.321041 e + 00 e-01 4.403472 e 03 e-01 2 -8.212804 e + 00 1.676295 e 03 e-05 5.587652 2.793826 8.381476 -8.222204 1.009601 e-02 3 e + 00 e-07 e-08 1.809485 e-05 4 -8.222222 7.525735 1.352696 2.975398 e + 00 e-14 e-12 e-13最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =2×10.6667 - 1.3333

创建一个问题结构使用具体问题具体分析优化工作流程。相当于创建一个优化问题与线性约束二次规划

x = optimvar (“x”2);objec = x (1) ^ 2/2 + x (2) ^ 2 - x (1) * (2) - 2 * x (1) - 6 * x (2);概率= optimproblem (“目标”,objec);prob.Constraints。cons1 (x) =和< = 2;prob.Constraints。cons2 = - x (1) + 2 * x (2) < = 2;prob.Constraints。cons3 = 2 * x (1) + (2) < = 3;

转换概率到一个问题结构。

问题= prob2struct(概率);

解决问题用quadprog

[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);一个= (1 1 1);b = 3;[x, fval] = quadprog (H, f, A, b)
最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =3×1-3.5714 2.9286 3.6429
fval = -47.1786

检查返回的目标函数值匹配值的计算quadprog目标函数定义。

fval2 = 1/2 * x ' * H * x + f ' * x
fval2 = -47.1786

看到的优化过程quadprog,设置选项显示迭代显示和返回四个输出。问题是最小化

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 = [2 1 1 1 3 1/2 1 1/2 5];f = (4、7、12);磅= 0 (3,1);乌兰巴托= 1 (3,1);

设置选项显示迭代解算器的进展。

选择= optimoptions (“quadprog”,“显示”,“通路”);

调用quadprog有四个输出。

[x fval exitflag、输出]= quadprog (H f[]、[][],[],磅,乌兰巴托,[],选项)
Iter Fval原始Infeas双重Infeas互补0 2.691769 e + 01 1.582123 e + 00 1.712849 e + 01 1.680447 e + 00 1 -3.889430 9.971731 8.564246 0.000000 e + e + 00 00 e 03 e-01 2 -5.451769 2.710131 4.282123 0.000000 e + e + 00 00 e-06 e-02 3 -5.499997 0.000000 e + e + 00 00 1.221938平台以及6.939689 e-07 4 -5.500000 3.469847 5.842173 0.000000 e + e + 00 00 e-14平台以及最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =3×10.0000 1.0000 0.0000
fval = -5.5000
exitflag = 1
输出=结构体字段:消息:“……的算法:interior-point-convex firstorderopt: 1.5921 e-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(λ)
ineqlin: 12.0000 eqlin: [0 x1双]低:x1双[3]上:[3 x1双)

线性不等式约束的拉格朗日乘子相关12

显示相关乘数下界。

disp (lambda.lower)
5.0000 0.0000 0.0000

只有第一个组成部分lambda.lower有一个非零的乘数。这通常意味着只有第一个组成部分x下界的零。确认通过显示的组件x

disp (x)
0.0000 1.5000 1.5000

速度后续quadprog调用,创建一个热启动对象。

选择= 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代表的二次表达式1/2 * x ' * H * x + f ' * x。如果H不对称的,quadprog一个警告和使用使对称版本问题(H + H ') / 2代替。

如果二次矩阵H是稀疏的,那么在默认情况下,“interior-point-convex”算法使用了一个稍微不同的算法相比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 < =,

在哪里x的列向量N变量x (:),b是一个列向量元素。

例如,考虑这些不平等:

x1+ 2x2≤10
3x1+ 4x2≤20
5x1+ 6x2≤30日

输入以下命令来指定不等式约束条件。

= [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 < =,

在哪里x的列向量N变量x (:),一个是一个矩阵的大小——- - - - - -N

例如,考虑这些不平等:

x1+ 2x2≤10
3x1+ 4x2≤20
5x1+ 6x2≤30。

输入以下命令来指定不等式约束条件。

= [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 =说真的,

在哪里x的列向量N变量x (:),说真的是一个列向量元素。

例如,考虑这些不平等:

x1+ 2x2+ 3x3= 10
2x1+ 4x2+x3= 20,

输入以下命令来指定不等式约束条件。

Aeq = [1、2、3、2、4、1];说真的= (10、20);

例子:指定的x分量之和为1,使用Aeq = 1 (1, N)说真的= 1

数据类型:

线性等式约束,指定为一个真正的向量。说真的是一个元向量相关Aeq矩阵。如果你通过说真的作为一个行向量,解决内部转换说真的的列向量说真的(:)。对于大型问题,通过说真的作为一个稀疏的向量。

说真的编码线性等式

Aeq * x =说真的,

在哪里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 (1, N)说真的= 1

数据类型:

下界,指定为一个真正的向量或真正的数组。如果元素的数量x0等于元素的数量,然后指定

x(我)> =磅(我)对所有

如果元素个数(磅)<元素个数(x0),然后指定

x(我)> =磅(我)1我< < = =元素个数(磅)

如果有更少的元素比x0,解决者发出警告。

例子:指定,所有的x分量都是积极的,使用磅= 0(大小(x0))

数据类型:

上界,指定为一个真正的向量或真正的数组。如果元素的数量x0等于元素的数量乌兰巴托,然后乌兰巴托指定

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

如果元素个数(乌兰巴托)<元素个数(x0),然后乌兰巴托指定

x (i) < =乌兰巴托(我)1我< < = =元素个数(乌兰巴托)

如果乌兰巴托有更少的元素比x0,解决者发出警告。

例子:指定所有的x分量都小于1,使用乌兰巴托= 1(大小(x0))

数据类型:

初始点,指定为一个真正的向量。的长度x0行或列的数量吗H

x0适用于“trust-region-reflective”算法时只有绑定约束的问题。x0也适用于“激活集”算法。

请注意

x0需要理由吗“激活集”算法。

如果你不指定x0,quadprog集的所有组件x0一个点在盒子的内部定义的界限。quadprog忽略了x0“interior-point-convex”算法和“trust-region-reflective”算法具有等式约束的。

例子:(1,2,1)

数据类型:

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

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

所有的算法

算法

选择的算法:

  • “interior-point-convex”(默认)

  • “trust-region-reflective”

  • “激活集”

“interior-point-convex”算法处理只凸问题。的“trust-region-reflective”算法处理边界或线性等式约束问题,但不能两者兼得。的“激活集”提供的投影算法处理不确定问题H上的零空间Aeq是半正定。有关详细信息,请参见选择算法

诊断

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

显示

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

  • “关闭”“没有”显示没有输出。

  • “最后一次”只显示最终的输出(默认)。

“interior-point-convex”“激活集”算法允许额外的值:

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

  • “iter-detailed”指定一个迭代显示详细退出消息。

  • 最后详细的只显示最终的输出详细退出消息。

MaxIterations

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

  • 对于一个“trust-region-reflective”约束问题,默认值是2 * (numberOfVariables - numberOfEqualities)

  • “激活集”有一个默认的10 * (numberOfVariables + numberOfConstraints)

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

optimset选项名称麦克斯特。看到当前和遗留选项名称

OptimalityTolerance

在一阶最优性终止宽容;一个积极的标量。

  • 对于一个“trust-region-reflective”约束问题,默认值是1 e-6

  • 对于一个“trust-region-reflective”bound-constrained问题,默认值是100 *每股收益,大约2.2204 e-14

  • “interior-point-convex”“激活集”算法,默认值是1 e-8

看到公差和停止条件

optimset选项名称TolFun。看到当前和遗留选项名称

StepTolerance

终止上公差x;一个积极的标量。

  • “trust-region-reflective”默认值是100 *每股收益,大约2.2204 e-14

  • “interior-point-convex”默认值是1 e-12

  • “激活集”默认值是1 e-8

optimset选项名称TolX。看到当前和遗留选项名称

“trust-region-reflective”算法只

FunctionTolerance

终止公差函数值;一个积极的标量。默认值取决于问题类型:bound-constrained使用问题100 *每股收益,使用和线性约束问题1 e-6。看到公差和停止条件

optimset选项名称TolFun。看到当前和遗留选项名称

HessianMultiplyFcn

黑森乘法函数,指定为一个函数处理。大规模的结构性问题,这个函数计算海赛矩阵产品H * Y没有真正形成H。函数的形式

W = hmfun (Hinfo, Y)

在哪里Hinfo(和潜在的一些额外的参数)包含用于计算的矩阵H * Y

看到二次最小化密集,结构化的麻绳例如,使用此选项。

optimset选项名称HessMult。看到当前和遗留选项名称

MaxPCGIter

最大数量的首选条件共轭梯度迭代;一个积极的标量。默认值是马克斯(1楼(numberOfVariables / 2))bound-constrained问题。对于约束问题,quadprog忽略了MaxPCGIter并使用MaxIterations限制PCG迭代的数量。有关更多信息,请参见预处理共轭梯度法

PrecondBandWidth

PCG上带宽预调节器;一个非负整数。默认情况下,quadprog使用对角预处理(上游带宽0)。对于一些问题,增加带宽减少了PCG迭代的数量。设置PrecondBandWidth使用直接分解(柯列斯基)而非共轭梯度(CG)。直接分解比CG计算更贵,但质量更好一步生成解决方案。

SubproblemAlgorithm

确定迭代步骤是如何计算的。默认的,“重心”,但不准确的步骤需要一个速度更快“分解”。看到trust-region-reflective quadprog算法

TolPCG

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

TypicalX

典型的x值。元素的数量TypicalX等于元素的数量x0的起点。默认值是的(numberOfVariables, 1)quadprog使用TypicalX内部扩展。TypicalX只有当有影响吗x有无限的组件,当一个TypicalX值超过一个无界的组件1

“interior-point-convex”算法只

ConstraintTolerance

公差约束违反;一个积极的标量。默认值是1 e-8

optimset选项名称TolCon。看到当前和遗留选项名称

LinearSolver

类型的内部线性规划求解算法:

  • “汽车”(默认)——使用“稀疏”如果H矩阵是稀疏的,“密集”否则。

  • “稀疏”——使用稀疏线性代数。看到稀疏矩阵

  • “密集”——使用稠密线性代数。

“激活集”算法只

ConstraintTolerance

公差约束违反;一个积极的标量。默认值是1 e-8

optimset选项名称TolCon。看到当前和遗留选项名称

ObjectiveLimit

宽容(停止准则)是一个标量。如果目标函数值ObjectiveLimit和当前的点是可行的,迭代停止,因为问题是无界的,大概。默认值是1 e20

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

H

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

f

向量的线性项f ' * x

Aineq

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

bineq

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

Aeq

矩阵在线性等式约束Aeq * x =说真的

说真的

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

x0

初始点x

解算器

“quadprog”

选项

选择使用optimoptionsoptimset

所需的字段H,f,解算器,选项。当解决,quadprog忽略任何领域问题以外的上市。

请注意

你不能使用热启动问题论点。

数据类型:结构体

热启动对象,指定为一个对象创建的使用optimwarmstart。热启动对象包含起点和选项,以及可选的数据生成代码的内存大小。看到热启动的最佳实践

例子:ws = optimwarmstart (x0,选项)

输出参数

全部折叠

解决方案,作为一个真正的返回向量。x向量最小化1/2 * x ' * H * x + f ' * x主体范围和线性约束。x可以是一个局部最小值为非凸问题。对凸的问题,x是一个全球最低。有关更多信息,请参见本地和全球最适条件

溶液热启动对象,作为一个返回QuadprogWarmStart对象。解决方案是wsout.X

您可以使用wsout作为输入对象在随后的热启动quadprog调用。

目标函数值的解决方案,作为一个真正的标量返回。fval的值是1/2 * x ' * H * x + f ' * x在解决方案x

原因quadprog停了下来,作为一个整数返回表中描述的一样。

所有的算法

1

聚合函数的解决方案x

0

迭代次数超过options.MaxIterations

2

问题是不可行的。或者,为“interior-point-convex”,步长小于options.StepTolerance,但约束不满足。

3

问题是无限的。

“interior-point-convex”算法

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

的一阶最优性

linearsolver

类型的内部线性规划求解,“密集”“稀疏”(“interior-point-convex”算法只)

消息

退出消息

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

较低的

下界

上界乌兰巴托

ineqlin

线性不等式

eqlin

线性等式

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

算法

全部折叠

“interior-point-convex”

“interior-point-convex”算法试图遵循路径内严格限制。它使用一个presolve模块删除冗余和简化问题,解决简单的组件。

稀疏的海赛矩阵的算法具有不同的实现H和稠密矩阵。一般来说,大型稀疏实现更快,稀疏的问题,实现更快的在密集或小问题。有关更多信息,请参见interior-point-convex quadprog算法

“trust-region-reflective”

“trust-region-reflective”子空间算法是一种基于interior-reflective牛顿方法中描述的信赖域方法[1]。每个迭代都包括近似解大型线性系统使用条件共轭梯度法(PCG)。有关更多信息,请参见trust-region-reflective quadprog算法

“激活集”

“激活集”算法是一个投影方法,类似于一个描述[2]。这个算法不是大规模;看到大型和中型的算法。有关更多信息,请参见激活集quadprog算法

温暖的开始

热启动对象保持一个积极约束列表前解决问题。在解算器携带尽可能多的有效约束信息来解决当前的问题。如果前面的问题是不同的,没有激活集信息重用。在这种情况下,解算器有效地执行一个冷启动为了重建活动限制的列表。

选择功能

应用程序

优化住编辑任务提供了一个可视化界面quadprog

引用

[1]科尔曼,t·F。李,y。“反射牛顿方法,减少二次函数一些变量的界限。”暹罗杂志上优化。第四卷。6日,1996年,页1040 - 1058。

吉尔[2],p E。,W. Murray, and M. H. Wright.实际的优化。伦敦:学术出版社,1981年。

[3]古尔德,N。,P. L. Toint. “Preprocessing for quadratic programming.”数学规划。系列B卷。100年,2004年,页95 - 132。

扩展功能

之前介绍过的R2006a