性能与计算Hessian

时间:2014-12-20 11:49:23

标签: performance matlab mathematical-optimization hessian-matrix quadprog

[edit]解决了关于“f”的部分。这是我做的: 而不是使用:

X = (F * W' - Y);
f = X' * X;

我现在正在使用:

X = F*W;
A = X'*F*W;
B = -2*X'*Y;
Y1 = Y'*Y;
f = A + B + Y1

这将大大加快速度。然而,Hessian of f的问题仍然存在。 [/编辑]

所以,我正在尝试使用二次优化问题进行一些严重的性能“问题”,我在Matlab中尝试解决这个问题。问题不在于优化本身,而在于目标函数和Hessian的计算。现在它看起来像这样(F和Y根本不是随机的,并且会有真实数据,也不是必然的无约束,因为那时解决方案当然是(F'F)^ - 1 * F'* Y ):

W_a = sym('w_a_%d', [1 96]);
W_b = sym('w_b_%d', [1 96]);

for i = 1:96
    W(1,2*(i-1)+1) = W_a(1,i);
    W(1,2*i) = W_b(1,i);
end
F = rand(10000,192);
Y = rand(10000,1);
q = [];
for i = 1:192
    q = [q sum(-Y(:).*F(:,i))];
end
q = 2*q;
q = double(q);

X = (F * W' - Y);
f = X' * X;

H = hessian(f);
H = double(H);

A=[]; b=[];
Aeq=[]; beq=[];
lb=[]; ub=[];
options=optimset('Algorithm', 'active-set', 'Display', 'off');
[xsol,~,exitflag,output]=quadprog(H, q, A, b, Aeq, beq, lb, ub, [], options);

事情是:计算f和H就像永远一样。

我并不认为有很多方法可以显着提高速度,因为Matlab针对这样的东西进行了优化。但也许有人知道一些开放式许可软件,这几乎和Matlab一样快,所以我可以在更快的机器上计算f和H(不幸的是没有Matlab许可证......)然后让Matlab进行优化。

现在我有点迷失:/

非常感谢您提前。甚至一些关键字也可以帮助我,比如“寻找软件xy”

1 个答案:

答案 0 :(得分:1)

如果您关注速度,使用符号方法通常是错误的方法(特别是对于大型系统或者如果您需要重复运行某些东西)。你需要用数字计算你的Hessian。 MathWorks FileExchange上有一个很好的实用工具,可以为您执行此操作:the DERIVESTsuite。它包括一个数字hessian函数。您需要根据f制定X