J'essaie de trouver une bonne solution avec une stratégie d'évolution pour un problème de minimisation 30 dimensions. Maintenant, j'ai développé avec succès un ES simple (1,1) et aussi un ES auto-adaptatif (1, lambda) avec une taille de pas.Stratégie d'évolution avec échelons individuels
L'étape suivante consiste à créer un ES (1, lambda) avec des échelons individuels par dimension. Le problème est que mon code MATLAB ne fonctionne pas encore. Je teste sur la fonction objectif sphère:
function f = sphere(x)
f = sum(x.^2);
end
Le tracé des résultats des ES avec un pas de progression par rapport à celui avec stepsizes individuels:
La ligne bleue est la performance de l'ES avec des tailles de pas individuels et le rouge est pour l'ES avec une taille de pas.
Le code pour la (1, lambda) ES avec plusieurs 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
-ce que quelqu'un voit le problème?