2

30次元の最小化問題の進化戦略で良い解決策を見つけようとしています. これで、単純な (1,1) ES と、1 ステップ サイズの自己適応型 (1,lambda) ES の開発に成功しました。

次のステップは、次元ごとに個別のステップサイズを持つ (1,lambda) ES を作成することです。問題は、MATLAB コードがまだ機能しないことです。私は球の目的関数をテストしています:

function f = sphere(x)
    f = sum(x.^2);
end

1 つのステップ サイズの ES と個々のステップ サイズの ES のプロットされた結果:

結果

青い線は個々のステップ サイズでの ES のパフォーマンスで、赤い線は 1 つのステップ サイズでの ES のパフォーマンスです。

複数のステップサイズを持つ (1,lambda) ES のコード:

% Strategy parameters
tau = 1 / sqrt(2 * sqrt(N));
tau_prime = 1 / sqrt(2 * N);
lambda = 10;

% Initialize
xp = (ub - lb) .* rand(N, 1) + lb;
sigmap = (ub - lb) / (3 * sqrt(N));
fp = feval(fitnessfct, xp');
evalcount = 1;

% Evolution cycle
while evalcount <= stopeval

    % Generate offsprings and evaluate
    for i = 1 : lambda
        rand_scalar = randn();

        for j = 1 : N
            Osigma(j,i) = sigmap(j) .* exp(tau_prime * rand_scalar + tau * randn());
        end

        O(:,i) = xp + Osigma(:,i) .* rand(N,1);
        fo(i) = feval(fitnessfct, O(:,i)');
    end

    evalcount = evalcount + lambda;

    % Select best
    [~, sortindex] = sort(fo);
    xp = O(:,sortindex(1));
    fp = fo(sortindex(1));
    sigmap = Osigma(:,sortindex(1));
end

誰も問題を見ませんか?

4

1 に答える 1

0

あなたのミューテーションには偏りがあります。パラメーターを増やすことはできますが、減らすことはできません。sigmap は、(スケーリングされた) 上限から下限を引いたベクトルで、すべて正です。exp(...) は常に正です。したがって、Osigma の要素は常にポジティブです。次に、変更は Osigma .* rand(N,1) であり、rand(N,1) も常に正です。

おそらく、rand(N,1) の代わりに randn(N,1) を使用するつもりでしたか? その1文字の変更により、コードが悲観するのではなく最適化されていることがわかります:-)。

于 2011-02-05T22:28:48.900 に答える