2010-12-01 39 views
1

我試圖找到一個很好的解決方案與進化策略的30維最小化問題。現在我已經成功開發了一種簡單的(1,1)ES和一種步長的自適應(1,λ)ES。進化策略與個人步驟

下一步是創建一個(1,lambda)ES,每個維度具有單獨的步長。問題是我的MATLAB代碼還沒有工作。我測試的球的目標函數:

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

繪製的ES的結果與一個步長對一個個別stepsizes:

results

藍線是表現的ES具有單獨的步長,而紅色的ES具有一個步長。

爲(1,λ-)代碼ES具有多個stepsizes:

% 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(...)總是正數。因此,奧西格瑪的元素總是積極的。然後你的變化是奧西格瑪。蘭特(N,1)和蘭特(N,1)也總是正的。

你有沒有想過用randn(N,1)代替rand(N,1)?隨着單字符變化,我發現你的代碼優化而不是悲觀:-)。