В настоящее время я использую fmincon для минимизации функции логарифмического правдоподобия в отношении матрицы 18 * 18.Хотя в небольших задачах алгоритм очень быстрый, на текущую настройку уходит около 2 часов - поскольку я повторяю эту проблему минимизации, выполнение кода может занять до 2 недель.
Существует ли бесплатная основанная на matlab альтернатива fmincon, которая повышает скорость при таких специфических проблемах?(Дорогостоящие решения обсуждаются здесь , нематлабные решения здесь .) Или мне нужно вызвать, например, скрипт на python из matlab?
Функция, которую я хочу минимизировать:
function [L] = logL(A, U, Sigma_e, T, lags)
% A - parameters to optimize w.r.t
logL = 0;
for t = 1 : T - lags
logL(t, 1) = 0.5*(log(det(A * diag(Sigma_e(t,:)) * A' ) ) + ...
U(t,:) * (A * diag(Sigma_e(t,:)) * A' )^(-1) * U(t,:)' );
end
L = sum(logL);
и вызывая ее следующим образом:
Options = optimset('Algorithm', 'active-set', 'Display', 'off', 'Hessian','bfgs', ...
'DerivativeCheck','on','Diagnostics','off','GradObj','off','LargeScale','off');
A = fmincon( @(A0)logL(A0, U, Sigma_e, T, lags), A0 , [], [] , [] , [] , [] , [] , [], Options);
(я пробовал разные алгоритмы fmincon без особых улучшений).Обратите внимание, T довольно большой ~ 3000.A и A0 - матрицы 18 * 18, Sigma_e - T * 18, U - T * 18
.