Professional Documents
Culture Documents
Algorithme Génétique
introduisant l’âge
des individus
ALGORITHME GENETIQUE
ANNEE 2002-2003
ISTASE 3
1
UTILISATION DE L’AGE DANS UN ALGORITHME
GENETIQUE
SOMMAIRE
INTRODUCTION
II – EXPLICATION DU PROGRAMME
CONCLUSION
2
INTRODUCTION
3
I – OBJECTIFS ET PARAMETRES
Nous avons Npop chromosomes qui sont codés avec une suite de 0
et de 1 et qui ont tous le même nombre de bits.
Les paramètres et les choix pour les différentes étapes sont les
suivants.
1- Evaluation.
4
Cette probabilité Prob_selec (j) est la probabilité d’être sélectionné.
Elle est égale à l’évaluation de l’individu par la fonction f_eval dans le cas
où le poids de l’âge est de 1.
2- Population initiale.
3- Sélection.
4- Croisement.
5
formons 2 enfants en échangeant une partie des chromosomes. Les
enfants ont 1 ans à leur création.
Pour ce qui est de l’âge : nous décidons que l’âge des individus intervient
sur la sélection des couples. Nous avons plusieurs possibilités qui s’offrent
à nous. Par contre, nous décidons que l’âge n’intervienne pas sur le
croisement. Le croisement se fait donc de la même manière pour tous les
individus sélectionnés parmi les reproducteurs.
Nous obtenons une population intermédiaire. L’âge des parents est
augmenté de 1. Et celui des enfants est de 1 an.
5- Mutation.
6- Test de convergence.
6
II – EXPLICATION DU PROGRAMME
function p=f_eval(x,age,coeff)
7
k = coeff;
x = round(rand(Npop_init,sum(bit)));
3- sélection :
indice_repr=[];
% taille est donc le nombre d'individus dans la population
taille = size(pop_ordon,2);
q = zeros(nb,1);
for i= 1:nb_repr
% on affecte à chaque individu un coeffcient aléatoire
for j= 1:nb
q(j) = 1+round(rand(1)*(taille-1));
end
% on trouve l'indice de l'individu qui a la plus petite
valeur
temp = find(pop_ordon==min(pop_ordon(q)));
% on prend la premier indice trouvé, et on retient cet
individu
8
indice_repr(i) = temp(1);
end
4- Le croisement
Croisement simple:
enf1=[];
enf2=[];
% taille du chromosome qui est celle du parent
taille = size(par1,2);
% point de croisement aléatoire
point = 1 + round(rand(1)*(size(par1,2)-2));
mutation :
if (ind(p)==0)
ind(p)=1;
else
ind(p)=0;
9
end
ind_mut=ind;
6- Fonction principale
%-------------------------------------------------------------
%
% Les fonctions utilisées sont :
% f_f : conversion d'un individu décimale en binaire
% b_f : conversion d'un individu binaire en décimale
% gen_pop_init : generation de la population initiale
% f_eval : evaluation de la population en fonction des
% génotypes et des ages
% crois_s : fonction qui génère 2 enfants par croisement
% simple
% select_tournoi : fonction de sélection tournoi d'individus
% mut_s : fonction qui effectue une mutation aléatoire
%
% La population est un tableau x de dimensions Npop * 18 car
% les Npop individus sont codés sur 18 bits
% x_dec est population où chaque individu est codé en un
% couple de décimaux : 2 paramètres
%
%
%-------------------------------------------------------------
close all;
clear all;
10
l'évaluation du génotype sur
l'évaluation globale
%% k est entre 0 et 1, (1-k) est donc
le poids de l'âge
x = gen_pop_init(Npop, bit)
% conversion de x en decimal
x_dec = b_f(d,x,bit);
% evaluation par f des Npop individus et tri
phenotype = f_eval(x_dec,age,coeff);
% invividus classés par ordre
pop_ordon = sort(phenotype);
%tab_eval est le tableau des moyennes des évaluations
tab_eval(compteur) = sum(pop_ordon)/size(pop_ordon,2);
% sélection des Npop/2 meileurs individus
reproducteur = pop_ordon(1:round(Npop/2));
11
individus dans x
ind(i) = temp_ind(1);
end
clear tmp;
clear x_dec;
i = 1;
x_dec = b_f(d,x,bit)
% tableau des reproducteurs et des enfants crées dans
cette génération
reproducteur2 = f_eval(x_dec,age,coeff);
% recherche du parent par1
ind_par = find( f_eval(x_dec,age,coeff) ==
reproducteur2(indice_repr(i)));
[par1, bit2] = f_b(d,x_dec(:,ind_par),prec);
% recherche du parent par2
ind_par = find( f_eval(x_dec,age,coeff) ==
reproducteur2(indice_repr(i+1)));
[par2, bit2] = f_b(d,x_dec(:,ind_par),prec);
% création des enfants et mise à jour des tableaux x
(pour la population) et age
12
[enf1, enf2] = crois_s(par1, par2)
x(size(x,1)+1,:)= enf1;
age(size(age)+1)=1;
x(size(x,1)+1,:)= enf2;
age(size(age)+1)=1;
i = i+2;
end
plot(tab_eval,'Color','red','LineWidth',2);
title('Evaluation en fonction des générations','color','red');
xlabel('Indice de la Génération','color','blue');
ylabel('Evaluation','color','blue');
13
nb_var= size(d,1);
nb_ex=size(x,1);
for i=1:nb_var
pas=(d(i,2)-d(i,1))/(2^bit(i)-1);
x_dec(i,:)=(d(i,1)+pas*(sum((ones(nb_ex,1)*2.^(bit(i)-1:-
1:0)).*x(:,n:bit(i)+n-1),2)))';
n=n+bit(i);
end
x_bin = [];
for i = 1:size(d,1)
if x_dec(i,:)>=d(i,1) & x_dec(i,:)<=d(i,2);
n= 0 ;
nbval = (d(i,2)-d(i,1))/p(i)+1;
if (nbval>=1)
while (nbval>pow2(n))
n=n+1;
end
bit(i)=n;
pas = (d(i,2)-d(i,1))/(2^n-1);
x_dec2(i,:) = (x_dec(i,:)-d(i,1))./pas;
x_bin = [x_bin rem(floor(x_dec2(i,:)' * pow2(1-
bit(i):0)),2)];
else
disp ('erreur sur les dimension de définition');
end
else
disp ('la valeur est extérieure au domaine');
end
end
14
Conclusion
15
(essentiellement) et la mutation ont parfois un effet inverse à celui de la
sélection. Le croisement et la mutation se font de manière aléatoire de tel
sorte qu’ils vont à l’encontre de l’évolution souhaitée : les enfants ont une
évaluation élevée. La mutation peut contribuer à l’augmentation ou la
diminution de l’évaluation par f_eval. Le croisement a plus d’influence car
il agit sur plus de bits.
16