主要内容

密集结构Hessian线性方程的极小化

低记忆的Hessian乘法函数

fmincon内点而且trust-region-reflective算法,fminunc信赖域算法,可以解决Hessian密集但有结构的问题。对于这些问题,fmincon而且fminunc不计算H * Y在黑森H直接,因为形成H将内存密集型。相反,你必须提供fminconfminunc对于一个给定矩阵的函数Y和信息H,计算W = H * Y

在本例中,目标函数是非线性的,存在线性等式fmincon使用。该描述适用于信赖域反射算法;的fminunc信赖域算法是相似的。为内点算法,看到HessianMultiplyFcn选项黑森乘法函数.目标函数具有结构

f x f ˆ x - 1 2 x T V V T x

在哪里 V 是一个1000 × 2矩阵。的黑森 f 是密集的,但黑森 f ˆ 是稀疏的。如果黑森的 f ˆ H ˆ ,然后 H 的黑森人 f ,是

H H ˆ - V V T

以避免可能发生的过度内存使用 H 该例子直接提供了一个Hessian乘法函数,hmfleq1.当传递一个矩阵时,这个函数Y,使用稀疏矩阵Hinfo,对应于 H ˆ ,V计算黑森矩阵乘积

W = H*Y = (Hinfo - V*V')*Y。

在这个例子中,Hessian乘法函数需要 H ˆ ,V计算黑森矩阵乘积。V是一个常数,所以你可以捕获V在匿名函数句柄中。

然而, H ˆ 不是一个常数,必须在电流处计算x.你可以通过计算来做到这一点 H ˆ 在目标函数和回归中 H ˆ 作为Hinfo在第三个输出参数中。通过使用optimoptions设置HessianMultiplyFcn的句柄hmfleq1黑森乘法函数列在这里fmincon知道如何得到Hinfo值,并将其传递给Hessian乘法函数hmfleq1

步骤1:写入文件brownvv。m,计算目标函数、梯度和Hessian的稀疏部分。

通过的例子brownvvfmincon作为目标函数。的brownvv.m文件很长,这里没有列出。可以使用命令查看代码

类型brownvv

因为brownvv计算梯度和目标函数,示例(步骤3)使用optimoptions设置SpecifyObjectiveGradient选项真正的

步骤2:写一个函数,在给定矩阵Y的情况下计算H的hessian -矩阵乘积。2022世界杯八强谁会赢?

现在,定义一个函数hmfleq1使用Hinfo,计算在brownvv,V,你可以在一个匿名函数的函数句柄中捕获它,来计算Hessian矩阵乘积W在哪里W = H*Y = (Hinfo - V*V')*Y.这个函数必须有形式

W = hmfleq1 (Hinfo, Y)

第一个参数必须与目标函数返回的第三个参数相同brownvv.黑森乘法函数的第二个参数是矩阵Y(W = H * Y).

因为fmincon期望第二个参数Y用来形成黑森矩阵积,Y总是一个矩阵n行,n是问题的维数。的列数Y可能是不同的。最后,可以使用匿名函数的函数句柄进行捕获V,所以V可以是第三个参数hmfleq1.这一技术将在传递额外的参数.下面是该文件的清单hmfleq1.m

类型hmfleq1.m
BROWNVV目标的hessian -矩阵乘积函数W = hmfleq1(Hinfo,Y,V) %%的文档的例子。% W = hmfbx4(Hinfo,Y,V)计算W = (Hinfo-V*V')*Y %,其中Hinfo是由BROWNVV %计算的稀疏矩阵,V是一个2列矩阵。版权所有The MathWorks, Inc.W = Hinfo*Y - V*(V'*Y);

步骤3:调用具有起点和线性等式约束的非线性最小化例程。

加载问题参数,V,稀疏等式约束矩阵,Aeq而且说真的,从fleq1.mat,它在运行此示例时可用。使用optimoptions设置SpecifyObjectiveGradient选项真正的然后设置HessianMultiplyFcn的函数句柄hmfleq1.调用fmincon与目标函数brownvvV作为附加参数。查看运行此过程的代码:

类型runfleq1.m
runfleq1演示了具有线性%等式的FMINCON的' hesmult '选项。问题=负载(“fleq1”);% Get V, Aeq, beq V = problem.V;Aeq = problem.Aeq;说真的= problem.beq;n = 1000;%问题维度xstart = -ones(n,1);xstart (2:2: n, 1) = 1(长度(2:2:n), 1);%起始点选项= optimoptions(@fmincon,…“算法”、“trust-region-reflective’,…… 'SpecifyObjectiveGradient',true, ... 'HessianMultiplyFcn',@(Hinfo,Y)hmfleq1(Hinfo,Y,V),... 'Display','iter',... 'OptimalityTolerance',1e-9,... 'FunctionTolerance',1e-9); [x,fval,exitflag,output] = fmincon(@(x)brownvv(x,V),xstart,[],[],Aeq,beq,[],[], ... [],options);

要运行此代码,请输入

(fval、exitflag、输出,x) = runfleq1;
规范一阶迭代f (x)最优步CG-iterations 0 2297.63 1.41 e + 03 1 1084.59 1084.59 6.3903 578 1 2 100 578 3 3 1084.59 25 578 0 4 1084.59 - 6.25 578 0 5 1047.61 1.5625 240 0 6 761.592 3.125 62.4 2 7 8 746.478 1.5625 761.592 6.25 62.4 163 0 9 10 274.311 6.25 26.9 546.578 3.125 84.1 2 2 11 55.6193 - 11.6597 40 2 12 55.6193 25 40 3 13 14 0 22.2964 6.25 26.3 -49.516 -93.2772 - 1.5625 6.25 78 1 68 1 16 -207.204 3.125 86.5 1 17 18 -681.359 6.25 43.7 -434.162 6.25 70.7 1 2 19 -681.3596.25 43.7 4 20 -698.041 1.5625 191 0 21 -723.959 3.125 256 7 22 -751.33 0.78125 154 3 23 -793.974 1.5625 24.4 3 24 -823.069 0.562132 2.51937 6.11 326 -823.237 0.196753 0.486 3 27 -823.245 0.062202 0.386 3 28 -823.246 0.0199951 0.11 6 29 -823.246 0.00731333 0.0404 7 30 -823.246 0.00505883 0.0185 831 -823.246 0.00129326 0.00521 9 33 -823.246 0.000373314 0.00091 9本地最小可能。Fmincon停止是因为函数值相对于其初始值的最终变化小于函数公差值。

对于这种规模的问题,收敛速度很快,随着优化的进行,PCG迭代成本略有增加。在解处保持等式约束的可行性。

问题=负载(“fleq1”);得到V, Aeq, beqV = problem.V;Aeq = problem.Aeq;说真的= problem.beq;规范(Aeq * x-beq正)
ans = 1.9540 e-14

预处理

在这个例子中,fmincon不能使用H计算前置条件,因为H只有存在隐式。而不是Hfmincon使用Hinfo返回的第三个参数brownvv,计算一个预处理器。Hinfo是一个好的选择,因为它是一样的大小H和接近H在某种程度上。如果Hinfo我们的尺寸不一样吗Hfmincon将根据算法确定的对角伸缩矩阵计算一个预处理条件。通常,这不会执行得很好。

另请参阅

|

相关的话题

Baidu
map