2010-12-01 7 views
1

私は、30次元最小化問題の進化戦略で良い解を見つけようとしています。今私は、成功した簡単な(1,1)ESと自己適応型(1、ラムダ)ESをワンステップサイズで開発しました。個々のステップサイズの進化戦略

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

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

ザ・個々のステップサイズとの1対1つのステップサイズでESの結果をプロットした:青い線はパフォーマンスです

results

ESの個々のステップサイズを示し、赤はESの1ステップサイズを示します。複数のステップサイズと

(1、ラムダ)のコード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 

誰もが問題を見ていますか?

答えて

0

あなたの突然変異にはバイアスがあります。パラメータを増やすことはできますが、減らすことはできません。 sigmapは、(スケールされた)上下限から下限までのベクトルです:すべて正です。 exp(...)は常に正です。したがって、Osigmaの要素は常に正です。 Osigma。* rand(N、1)、rand(N、1)も常に正です。

おそらく、rand(N、1)の代わりにrandn(N、1)を使用することを意味しましたか?その1文字の変更で、私はあなたのコードがペシムイズするのではなく、最適化していることがわかりました。

関連する問題