主要内容

二次最小化,结构化的黑森

利用结构化的黑森州

Quadprog信任区域反射方法可以解决黑森密集但结构结构的大问题。对于这些问题,Quadprog不计算h*y与黑森州H直接,就像稀疏的信任区域反射问题一样H,因为形成H将是记忆密集型的。相反,您必须提供Quadprog具有给定矩阵的函数y和有关的信息H,计算w=h*y

在此示例中,Hessian矩阵H有结构h = b + a*a'在哪里b是一个稀疏的512 x-512对称矩阵,并且一个是由许多密集柱组成的512 x-10稀疏矩阵。为了避免通过使用的过度记忆使用情况H直接是因为H是密集的,该示例提供了Hessian倍增功能,QPBox4Mult。此功能,当通过矩阵时y,使用稀疏的矩阵一个b计算Hessian Matrix产品w = h*y =(b + a*a')*y

在本示例的第一部分中,矩阵一个b需要提供到Hessian倍增功能QPBox4Mult。您可以将一个矩阵作为第一个参数将Quadprog,将传递给Hessian倍增功能。您可以使用嵌套函数来提供第二矩阵的值。

示例的第二部分显示了如何拧紧TOLPCG公差以补偿近似预处理,而不是精确H矩阵。

步骤1:确定将H的哪一部分传递给QuadProg作为第一个参数。

任何一个一个或者b可以作为第一个论点传递给Quadprog。示例选择通过b作为第一个论点,因为这会导致更好的预处理(请参阅预处理)。

quadprog(b,f,[],[],[],[],[],l,u,xstart,options)

步骤2:编写一个功能来计算H. Hessian-Matrix产品。下载188bet金宝搏

现在,定义一个函数runqpbox4

  • 包含嵌套功能QPBox4Mult使用一个b计算Hessian Matrix产品w, 在哪里w = h*y =(b + a*a')*y。嵌套功能必须具有表单

    w = qpbox4mult(hinfo,y,...)

    前两个参数Hinfoy是必须的。

  • qpbox4.mat

  • 用途最佳选择设置Hessianmultiplyfcn函数处理指向的选项QPBox4Mult

  • 呼叫Quadprogb作为第一个论点。

嵌套功能的第一个参数QPBox4Mult必须与第一个论点相同Quadprog,在这种情况下是矩阵B。

第二个论点QPBox4Mult是矩阵y(的w = h*y)。因为Quadprog期望y用于形成Hessian Matrix产品,y总是一个矩阵n行,哪里n是问题中的维度数。列中的数量y可以变化。功能QPBox4Mult被嵌套以使矩阵的值一个来自外部功能。优化工具箱™软件包括runqpbox4.m文件。

函数[FVAL,EXITFLAG,输出,X] = RunQPbox4%RunQPbox4演示了具有界限的四元中的hessianmultiplyfcn'选项。问题= load('qpbox4');%获取Xstart,u,l,b,a,f xstart = argears.xstart;u = Quards.u;l = QUACDER.L;B = Quarder.B;a =问题f = Quards.f;mtxmpy = @qpbox4mult;qpbox4mult嵌套函数%选择算法和hessianmultiplyfcn选项= optimoptions(@quadprog,'algorithm','trust-region-refrofection','hessianmultiplyflyfcn',mtxmpy); % Pass B to qpbox4mult via the H argument. Also, B will be used in % computing a preconditioner for PCG. [x, fval, exitflag, output] = quadprog(B,f,[],[],[],[],l,u,xstart,options); function W = qpbox4mult(B,Y) %QPBOX4MULT Hessian matrix product with dense structured Hessian. % W = qpbox4mult(B,Y) computes W = (B + A*A')*Y where % INPUT: % B - sparse square matrix (512 by 512) % Y - vector (or matrix) to be multiplied by B + A'*A. % VARIABLES from outer function runqpbox4: % A - sparse matrix with 512 rows and 10 columns. % % OUTPUT: % W - The product (B + A*A')*Y. % % Order multiplies to avoid forming A*A', % which is large and dense W = B*Y + A*(A'*Y); end end

步骤3:以起点调用二次最小化例程。

调用最小化的二次例程runqpbox4, 进入

[FVAL,EXITFLAG,输出] = RunQPbox4;

运行前面的代码。然后显示FVAL,,,,出口,,,,output.iterations, 和输出

FVAL,EXITFLAG,output.Iteriations,output.Cgiterations fval = -1.0538e+03 ExitFlag = 3 Ans = 18 Ans = 30

在18次迭代(总共30个PCG迭代)之后,该功能值降低到

FVAL FVAL = -1.0538E+003

一阶最优性是

output.firstorderopt ans = 0.0043

预处理

有时Quadprog不能用H计算预处理,因为H只有隐式存在。反而,Quadprog用途b,论点通过而不是H,计算预处理。b是一个不错的选择,因为它的大小与H和近似H在某种程度上。如果bH,,,,Quadprog将根据根据算法确定的一些对角度缩放矩阵来计算预处理。通常,这不会表现不佳。

因为预处理比H明确可用,调整TOLPCG可能需要参数到较小的值。此示例与上一个示例相同,但减少了TOLPCG从默认为0.1到0.01。

功能[FVAL,EXITFLAG,输出,X] = RunQPbox4Prec%runqpbox4prec演示了具有界限的四元中的“ hessianmultiplyfcn”选项。问题=负载('qpbox4');%获得XSTART,U,L,B,A,FXstart = Quards.xstart;u = Quards.u;l = QUACDER.L;B = Quarder.B;a =问题f = Quards.f;mtxmpy = @qpbox4mult;%函数处理qpbox4mult嵌套功能%选择算法,HessianMultiplyFCN选项,并覆盖TOLPCG选项options = optimoptions(@quadprog,'算法',,,,“信任区域反射”,,,,...'Hessianmultiplyfcn',mtxmpy,'tolpcg',0.01);%通过h参数将b传递给qpbox4mult。另外,b将在%计算PCG的预处理。%a作为“选项”之后的附加参数传递[x,fval,exitflag,output] = quadprog(b,f,[],[],[],[],[],[l,u,u,xstart,options);功能w = qpbox4mult(b,y)%QPBox4Mult Hessian矩阵产品,具有密度结构化Hessian。%w = qpbox4mult(b,y)计算w =(b + a*a')*y在其中% 输入:%b-稀疏方形矩阵(512 x 512)%y -vector(或矩阵)将乘以b + a'*a。来自外部函数runqpbox4prec的%变量:%A-稀疏矩阵,带有512行和10列。% 输出:%W-产品(B + A*A')*y。%订单乘以乘以避免形成A*a',百分比大且密集w = b*y + a*(a'*y);结尾结尾

现在,输入

[FVAL,EXITFLAG,输出] = RunQPBox4Prec;

运行前面的代码。在18次迭代和50个PCG迭代之后,该函数值具有与5个有效数字相同的值

FVAL FVAL = -1.0538E+003

一阶最优性基本相同。

output.firstorderopt ans = 0.0043

笔记

减少TOLPCG太多可以大大增加PCG迭代的数量。

相关话题