Vous êtes sur la page 1sur 10

République Algérienne Démocratique et Populaire

Université Constantine 2 Abdelhamid Mehri

Rapport

Conception D’un Algoritheme Génétique

Supervisé par :
Dr. Bediab Esma

Rédigé par :
 Aouina Naoufel Abdennour
 Boulkrar Allal Alaa Eddine

Date:02/12/2019

1
Conception D’un Algorithme Genetique :

Les étapes à suivre pour créer notre algorithme :

1) Créer la population intiale.

2) Evaluer la population intiale.

3) Choisir les parents qui vont faire le croisement

4) Appliquer une méthode de croisement (croisement à deux point).

5) Appliquer une méthode de mutation ( méthode de modification aléatoire).

6) Appliquer une méthode de séléction (méthode de roulette biaisée).

7) Evaluation la nouvelle population.

1. Créer la population initial :

La population initial est sous forme d’une

matrice avec N = 5 colonnes et K lignes.

Dans cette matrice et dans chaque ligne on

trouve la représentation
binaire des individu, ou les
1 0 0 0 1
individu x sont entre [0,31].
0 1 0 1 0

1 1 1 1 1

1 0 1 0 1

1 1 0 0 0

0 0 0 1 0

 Donc on va définir une fonction qui va faire l’initialisation:


Pop=popInit(popsize,dim,min,max)
Entré = (taille pop) + nbr de variaton ‘n=5’ + val min + val max.
Sortie = une matrice de valeur entre [0,31] de taille (popsize*5).

2
2. Evaluer la population intiale:

 On va définir une fonctin qui evalue une population :

1 0 0 1 0

Méthode d’évaluation :
Sorties : un vecteur de valeur.
0 1 0 0 0
- Fonction d’évaluation de la
18 8 21 3
population initiale.
1 0 1 0 1

=> E=evalu(pop)
0 0 0 1 1

3. Choisir les parents qui vont faire le croisement:

 On va définir une fonction qui détermine les couples de croisement ‘parents’


Entré = matrice ‘pop’.
Sortie = un vecteur d’indice.

1 0 0 1 0

{1,4} et {2,3}
0 1 0 0 0
cpl=couples(pop); Le ‘1’ individu avec ‘4’
individu et le ‘2’ individu
1 0 1 0 1
avec ‘3’ individu

0 0 0 1 1

4. Appliquer une méthode de croisement :

 On va définir une fonction qui s’occupe de croisement

3
Méthode de croisement à deux
points :

- selon une probabilité de


croisement on choisit deux Sortie : deux vecteurs
Entrés : deux vecteurs points ou on va croisé les
‘un couple p1 et p2’ élements entre ces deux point ‘un couple f1 et f2’
pour chaque couple.

[f1,f2]=croisement(p1,p2); f1,f2 les filse de p1,p2

5. Appliquer une méthode de mutation :

 On va définir une fonction qui s’occupe de la mutation

Méthode de mutation aléatoire :

- Selon une probabilité on choisit un


élément a mutés.
Entrés : la matrice ‘pop a
muter’ + les probabiliter - Selon une probabilité on choisit une
de mutation de gene et partie de l’élément pour changer sa Sortie :une matrice ‘pop muter’
indiv. valuer.

popmut=mutation(popcrois,0.8,0.5);

Exp: D’un seule individu

4
6. Appliquer une méthode de séléction :

Méthode de roulette biasé :

- pour chaque chromosome on


calcule le degré d’adaptation.

Entrés : pop - on crée une roulette biaisée ou Sortie : m éléments avec m < K
chaque I occupe une portion pi

- pour déterminer les descendants


d’une génération de taille n, il faut n
tirages.

7. Appliquer une méthode d’évaluation :

 Evaluer la nouvelle pop et trouver le meilleur individu


On a besoin d’une function qui a comme:

Méthode d’évaluation :
Entrés : une matrice qui Entrés :un vecteur qui contient
contient notre nouvelle - L’application de la fonction de le meilleur individu.
population. fitness f(x) = x.

Le pseudo code de notre vision pour l’application de l’algorithme génétic :

1. Programme princpale:

clear
clc
% 1/ initialiser notre population
dim=5;popsize=4;min=0;max=1;
pop=popInit(popsize,dim,min,max);

% 2/ évaluer notre population initiale

e_pop=evalu(pop)

valm=0;
for i=1:popsize

5
if valm<e_pop(i)
valm=e_pop(i);
m_ind=pop(i,:);
end
end

g=1;

tab_ind(1,g)=0;
while g<=40

% 3/ déterminer les couples parent


cpl=couples(pop);
% 4/ faire le croisement
i=1;
while i<(popsize)

p1=pop(cpl(i),:); %parant 1
p2=pop(cpl(i+1),:); %parant 2
[f1,f2]=croisement(p1,p2); % f1,f2 les filse de p1,p2
newpop1(i,:)=f1;
newpop1(i+1,:)=f2;
i=i+2;
end

popcrois=newpop1;

% 5/ faire la mutation
popmut=mutation(popcrois,0.8,0.5);
newpop=popmut;

e_pop=evalu(newpop)

% 6/ faire la séléction par la roulette


pop2=pop;
for i=1:4
pop2(popsize+i,:)=newpop(i,:);
end

6
pop2;

for i=1:popsize*2
val(1,i)=fitnsse(pop2(i,:));
end

for i=1:popsize*2
val(2,i)=(val(1,i)/sum(val(1,:)));
end
val;

v=0;
for i=1:8
v1=val(2,i);
tab(i)=v+v1;
v=tab(i);
end
tab;
for i=1:popsize % tourner la roulette 4 fois
pb=rand;
ok=0;k=1;
while k<=popsize*2 && ok==0
diff=pb-tab(k);
if diff>0
k=k+1;
else
ok=1;

end
end
k;
pop3(i,:)=pop2(k,:); % garder l'indv cheoisi par la roult
end

% 7/ évaluation 'trouver le meilleur inividu '


e_pop=evalu(pop3)

for max=1:popsize
if valm < e_pop(max) % garder l'individu qui a le max des sommes de
ces gene
valm=e_pop(max);

7
m_ind=pop3(max,:);
end
end
tab_ind(1,g)=fitnsse(m_ind);

pop=pop3; % tableau de meiller individu


g=g+1;
end

tab_ind(1,g)=fitnsse(m_ind) % tableau de meiller individu

2. La function popInit:

function [pop]= popInit(popsize,dim,min,max)

pop(:,:)=randi([min max],popsize,dim);

end

3. La function couples:

function [cpl]= couples(pop)


[popsize,dim]=size(pop);
cpl=randperm(popsize);
end

4. La function croisement: a 2 point

function [f1,f2]=croisement(p1,p2)

lt=length(p1);

pos1=randi((lt-1)/2);

pos2=randi([pos1+2,lt]);

f1=p2;f2=p1;

f1(pos1+1:pos2-1)=p1(pos1+1:pos2-1);

f2(pos1+1:pos2-1)=p2(pos1+1:pos2-1);

end

8
5. La function mutation:

function [popmut]= mutation(pop,pmIndv,pmGen)

[popsize,dim]=size(pop);

for i=1:popsize

if rand>pmIndv

popmut(i,:)=pop(i,:);

else

for j=1:dim

if rand>pmGen

popmut(i,j)=pop(i,j);

else

if pop(i,j)==0

popmut(i,j)=1;

else

popmut(i,j)=0;

end

end

end

end

end

9
6. La function evalu:

function [perm]=evalu(m)

for i=1:size(m)

perm(i)=fitnsse(m(i,:));

end

end

7. La function fitnsse:

function fit= fitnsse(indiv)

[l,c]=size(indiv);

string='';

for i=1:c

s=indiv(1,i);

s=num2str(s);

string=[string s];

end

fit=bin2dec(string);

end

10

Vous aimerez peut-être aussi