主要内容

最小化茂密的结构化的麻绳,线性等式

黑森乘法函数降低内存

fmincon内点trust-region-reflective算法,fminunc信赖域算法,可以解决问题,黑森密集但结构。对于这些问题,fminconfminunc不计算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 直接提供了黑森乘法函数的例子中,hmfleq1。这个函数,当通过一个矩阵Y,使用稀疏矩阵Hinfo,对应于 H ˆ ,V计算海赛矩阵产品

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

在这个例子中,黑森乘法函数需要 H ˆ ,V计算海赛矩阵产品。V是一个常数,所以你可以捕获V在一个函数中处理一个匿名函数。

然而, H ˆ 不是一个常数,必须在当前计算吗x。你可以通过计算 H ˆ 在目标函数并返回 H ˆ 作为Hinfo在第三输出参数。通过使用optimoptions设置HessianMultiplyFcn选择一个句柄hmfleq1黑森乘法函数列在这里,fmincon知道的Hinfo目标函数的值并将其传递给黑森乘法函数hmfleq1

步骤1:brownvv写一个文件。m计算目标函数梯度,稀疏的黑森的一部分。

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

类型brownvv

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

第二步:编写一个函数来计算海赛矩阵产品H矩阵Y。下载188bet金宝搏

现在,定义一个函数hmfleq1使用Hinfo,这是计算brownvv,V,您可以捕获在一个函数中处理一个匿名函数,计算海赛矩阵产品W在哪里W = H * Y = (Hinfo Y - V *) *。这个函数必须有形式

W = hmfleq1 (Hinfo, Y)

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

因为fmincon预计第二个参数Y用于形成海赛矩阵产品,Y总是一个矩阵n行,n的维数问题。列的数量Y可能是不同的。最后,您可以使用一个函数处理一个匿名函数来捕获V,所以V第三个参数可以吗hmfleq1。这一技术是更详细地描述传递额外的参数。这是一个文件的清单hmfleq1.m

类型hmfleq1.m
函数W = hmfleq1 (Hinfo Y V) % hmfleq1海赛矩阵乘积函数BROWNVV目标。%的文档的例子。% W = hmfbx4 (Hinfo Y V)计算W = (Hinfo-V * V”) * Y % Hinfo是稀疏矩阵计算BROWNVV %和V是一个2列矩阵。% 1984 - 2008版权MathWorks公司W = Hinfo * Y - V * (V ' * Y);

步骤3:调用一个非线性最小化程序与一个起点和线性等式约束。

负载参数的问题,V稀疏矩阵等式约束,Aeq说真的,从fleq1.mat当您运行这个例子,可用。使用optimoptions设置SpecifyObjectiveGradient选项真正的和设置HessianMultiplyFcn选择一个函数处理指向hmfleq1。调用fmincon与目标函数brownvvV作为一个额外的参数。查看代码,运行这个程序:

类型runfleq1.m
函数(fval、exitflag、输出,x) = runfleq1 % runfleq1演示了“HessMult”选项与线性FMINCON %平等。问题=负载(“fleq1”);% V, Aeq,说真的V = problem.V;Aeq = problem.Aeq;说真的= problem.beq;n = 1000;%的问题维度xstart =的(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 20 -698.041 1.5625 -681.359 6.25 43.7 191 0 21 -723.959 - 3.125 256 7 22 -751.33 - 0.78125 154 3 23 24 -820.831 2.51937 6.11 -793.974 1.5625 24.4 3 3 25 26 -823.237 0.196753 0.486 -823.069 0.562132 2.87 3 3 27 -823.245 0.0621202 0.386 28 29 -823.246 0.00731333 0.0404 -823.246 0.0199951 0.11 6 7 30 31 -823.246 0.00126471 0.00268 -823.246 0.00505883 0.0185 8 9 32 33 -823.246 0.000373314 0.00091 -823.246 0.00149326 0.00521 9 9局部最小值。fmincon停止是因为最后的函数值的变化相对于其初始值小于公差的值函数。

收敛是这个尺寸的问题快速PCG迭代优化进展成本小幅增加。等式约束的可行性是维护的解决方案。

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

预处理

在这个例子中,fmincon不能使用H计算预调节器,因为H只有存在隐式。而不是H,fmincon使用Hinfo,第三个参数返回brownvv计算预调节器。Hinfo是一个很好的选择,因为它是相同的尺寸吗H和接近H在某种程度上。如果Hinfo没有相同的尺寸吗H,fmincon将计算预调节器基于一些对角缩放矩阵确定的算法。通常,这将不执行。

另请参阅

|

相关的话题