[编辑] 关于“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
这将大大加快速度。不过,f 的 Hessian 矩阵的问题仍然存在。[/编辑]
因此,我在尝试在 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”