Académique Documents
Professionnel Documents
Culture Documents
Rapport
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 :
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
2
2. Evaluer la population intiale:
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
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
3
Méthode de croisement à deux
points :
popmut=mutation(popcrois,0.8,0.5);
4
6. Appliquer une méthode de séléction :
Entrés : pop - on crée une roulette biaisée ou Sortie : m éléments avec m < K
chaque I occupe une portion pi
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.
1. Programme princpale:
clear
clc
% 1/ initialiser notre population
dim=5;popsize=4;min=0;max=1;
pop=popInit(popsize,dim,min,max);
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
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
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
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);
2. La function popInit:
pop(:,:)=randi([min max],popsize,dim);
end
3. La function couples:
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:
[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:
[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