ChatGPTでMATLAB用の最急降下法の学習係数最適化プログラムを生成した

ChatGPTでMATLAB用の最急降下法の学習係数最適化プログラムを生成した。

合ってるかは不明。


% 3変数のラインサーチのサンプルコード(gradを使用しない)

% 目的関数(Rosenbrock関数)
fun = @(x) 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2 + 100*(x(3) - x(2)^2)^2 + (1 - x(2))^2;

% 初期解
x0 = [0, 0, 0];

% 学習率の初期値
alpha = 1;

% 勾配の初期値
g0 = compute_gradient(fun, x0);

% ラインサーチのパラメータ
c1 = 1e-4;
c2 = 0.9;
max_iter = 100;
tol = 1e-6;

% ラインサーチ
for iter = 1:max_iter
    % ステップサイズの更新
    x_new = x0 - alpha * g0;
    
    % 目的関数の評価
    f_new = fun(x_new);
    
    % ワルフ条件のチェック
    if f_new > fun(x0) + c1 * alpha * dot(g0, g0')
        alpha = alpha * c2;
    else
        break;
    end
end

% 新しい解の計算
x_new = x0 - alpha * g0;

% 勾配の計算
g_new = compute_gradient(fun, x_new);

% 勾配ノルムが収束した場合、解を更新
if norm(g_new) < tol
    x0 = x_new;
    g0 = g_new;
end

% 勾配を計算する関数
function g = compute_gradient(fun, x)
    eps = 1e-8;
    g = zeros(size(x));
    for i = 1:length(x)
        e = zeros(size(x));
        e(i) = eps;
        g(i) = (fun(x + e) - fun(x - e)) / (2 * eps);
    end
end

コメント

タイトルとURLをコピーしました