Algorithme génétique

publicité
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
ALGORITHMES GENETIQUES
I- Introduction aux Algorithme Génétique :
1. Historique :
Au 19ème siècle , Charles Darwin observa les phénomènes naturels et fit les
constatations suivantes :
- l'évolution n'agit pas directement sur les êtres vivants ; elle opère en réalité sur les
chromosomes contenus dans leur ADN.
- l'évolution a deux composantes : la sélection et la reproduction.
- la sélection garantit une reproduction plus fréquente des chromosomes les plus forts.
- la reproduction est la phase durant laquelle s'effectue l'évolution.
Dans les années 60s, John H. Holland expliqua comment ajouter de l'intelligence
dans un programme informatique avec les croisements (échangeant le matériel
génétique) et la mutation (source de la diversité génétique).
Il formalisa ensuite les principes fondamentaux des algorithmes génétiques :
- la capacité de représentations élémentaires, comme les chaînes de bits, à coder des
structures complexes.
- le pouvoir de transformations élémentaires à améliorer de telles structures.
Et récemment, David E. Goldberg ajouta à la théorie des algorithmes génétiques les
idées suivantes :
- un individu est lié à un environnement par son code d'ADN.
- une solution est liée à un problème par son indice de qualité.
2. Terminologie :
 Les chromosomes : sont les éléments à partir desquels sont élaborés les
solutions (mutation et croisement génétiques).
 La population : (génération) est l'ensemble des chromosomes.
 La reproduction : est l'étape de combinaison des chromosomes.
3. Applications :
Les applications des AG sont multiples :
- optimisation de fonctions numériques difficiles (discontinues…)
- traitement d’image (alignement de photos satellites, reconnaissance de suspects…)
- optimisation d’emplois du temps, optimisation de design, contrôle de systèmes
industriels [Beasley, 1993a]
- apprentissage des réseaux de neurones [Renders, 1995], etc.
-Les AG peuvent être utilisés pour contrôler un système évoluant dans le temps
(chaîne de production, centrale nucléaire…) car la population peut s’adapter à des
conditions changeantes. Ils peuvent aussi servir à déterminer la configuration
d’énergie minimale d’une molécule.
MAISON
1
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
-Les AG sont également utilisés pour optimiser des réseaux (câbles, fibres optiques,
mais aussi eau, gaz…),
-des antennes [Reineix, 1997]… Ils peuvent être utilisés pour trouver les paramètres
d’un modèle petit-signal à partir des mesures expérimentales [Menozzi, 1997]
4. Principe :
Pour utiliser les techniques génétiques il faut faire deux opérations :
1-Une fonction de codage de données en entrée sous forme d’une séquence de bits.
2-Trouver une fonction U(x) pour pouvoir calculer l’adaptation d’une séquence de bits
x.
Après trouver ces deux fonctions on peut appliquer l’AG :
1- Générer aléatoirement quelques séquences de bits pour composer la soupe initiale.
2- Mesurer l’adaptation de chacune des séquences présentes.
3- Reproduction des séquences en fonction de son adaptation.
4- Faire l’opération de croisement aléatoirement de quelque paire de séquences, et ce
sera :
o une séquence est composée de la 1ere partie de la 1ere séquence et de la 2nd partie
de la 2nd séquence.
o et une séquence est composée de la 2nd partie de la 1ere séquence et de la 1ere
partie de la 2nd séquence.
5- Faire l’opération de mutation d’un bit choisi aléatoirement dans une ou plusieurs
séquences.
6- Retour à l’étape 2 (mesurer l’adaptation à nouveau).
5. But :
Les AG ont deux objectifs principaux :
 Expliciter les théories sur les adaptations des systèmes naturels.
 Résoudre des problèmes dont les AG sont particulièrement adaptées. Les AG
présentent à la fois robustesse et adaptation. C'est à dire qu'ils ont la capacité
d'évoluer (fitness) dans le but d'une recherche satisfaisante. Mais ils sont aussi
capables d'être attirés par des solutions et d'y rester.
II- les opérateurs :
1 - Codage binaire et réel des variables :
Pour résoudre un problème il faut d’abord coder les paramètres, un gène Correspond
à une variable d’optimisation Xi, et un ensemble de gène correspond à un chromosome
un individu à un ou plusieurs chromosomes et une population c’est un ensemble des
individus.
MAISON
2
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
Dans l’informatique nous utilisons un codage binaire (0 et 1), par exemple un gène
est un entier long (32 bits ).
Les cinq niveaux d’organisation schéma du codage de variable d’optimisation Xi de
notre AG
Un des avantages du codage binaire est que l’on peut facilement coder les objets :
réels, des entiers, des chaînes de caractères …etc.
Pour résoudre il nous faut un espace de recherche fini :
0 ‹ gi ‹ gmax i =1 a n
avec :gmax = 2**32 –1=4294967295 valeurs discrètes.
Chaque gène est codé par 32 bits.
Les formules de codage et de décodage sont :
gi =( xi-ximin / ximax-xmin ) gmax.
xi= ximin + ( ximax-ximin )gi / gmax
Contrairement au codage binaire, dans le codage réel il n’y a pas d’opération de
conversion vers le réel et le binaire, et alors l’AG soit plus dépendant du problème,
chacune des composantes correspond à une inconnue du problème. Et pour l’insertion
des chromosomes soient :
 Par l’insertion des chromosomes directement dans la population de la
génération suivante.
Par "l’élitisme " : c’est l’insertion du meilleur chromosome dans la population de la
génération suivante et de compléter l’individu par des chromosomes d’uns manière
traditionnelle.
 Par "la population sans double " : c’est l’insertion du chromosome dans la
population de la génération suivent à condition qu’il soit différent de tous les
chromosomes de la nouvelle génération.
MAISON
3
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
2 - Sélection :
Fig.1 : Représentation schématique du fonctionnement de l’AG
Il y’ a plusieurs méthodes de sélection, citons quelques-unes :
A/ Roulette de casino :
C’est la sélection naturelle la plus employée pour l’AG binaire. Chaque
chromosome occupe un secteur de roulette dont l’angle est proportionnel à son indice
de qualité. Un chromosome est considéré comme bon aura un indice de qualité élevé,
un large secteur de roulette et alors il aura plus de chance d’être sélectionné.
B/ " N/2 –élitisme " :
Les individus sont tries selon leur fonction d’adaptation, seul la moitié supérieure de
la population correspondant aux meilleurs composants est sélectionnée, nous avons
constates que la pression de sélection est trop forte, il est important de maintenir une
diversité de gènes pour les utilise dans la population suivante et avoir des populations
nouvelles quant on les combine.
C/ "par tournoi " :
Choisir aléatoirement deux individus et on compare leur fonction d’adaptation
(combattre) et on accepte la plus adapte pour accéder à la génération intermédiaire, et
on répète cette opération jusqu'à remplir la génération intermédiaire (N/2 composants).
Les individus qui gagnent à chaque fois on peut les copier plusieurs fois ce qui
favorisera la pérennité de leurs gènes.
MAISON
4
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
3 - Croisement :
Le phénomène de croisement est une propriété naturelle de l’ADN, et c’est
analogiquement qu’on fait les opérations de croisement dans les AG.
A / croisement binaire :
A-1 / " croisement en un point " :
On choisit au hasard un point de croisement, pour chaque couple (fig. 2). Notons que
le croisement s’effectue directement au niveau binaire, et non pas au niveau des gènes.
Un chromosome peut donc être coupé au milieu d’un gène.
Fig. 2 : représentation schématique du croisement en 1 point. Les chromosomes sont
bien sûr généralement beaucoup plus longs.
A-2 / " croisement en deux points " :
On choisit au hasard deux points de croisement (Fig. 3). Par la suite, nous avons
utilisé cet opérateur car il est généralement considéré comme plus efficace que le
précédent [Beasley, 1993b]. Néanmoins nous n’avons pas constaté de différence
notable dans la convergence de l’algorithme.
Fig. 3: représentation schématique du croisement en 2 points.
Notons que d’autres formes de croisement existent, du croisement en k points jusqu’au cas
limite du croisement uniforme.
B / Croisement réel :
Le croisement réel ne se différencie du croisement binaire que par la nature des
éléments qu'il altère : ce ne sont plus des bits qui sont échangés à droite du point de
croisement, mais des variables réelles.
MAISON
5
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
C / Croisement arithmétique :
Le croisement arithmétique est propre à la représentation réelle. Il s'applique à une
paire de chromosomes et se résume à une moyenne pondérée des variables des deux
parents. Soient [ai, bi, ci] et [aj, bj, cj] deux parents, et p un poids appartenant à
l'intervalle [0, 1],
alors les enfants sont [pai + (1-p)aj, pbi + (1-p)bj, pci + (1 - p)cj] ...
Si nous considérons que p est un pourcentage, et que i et j sont nos deux parents,
alors l'enfant i est constitué à p% du parent i et à (100-p)% du parent j, et
réciproquement pour l'enfant j.
4 - Mutation :
Nous définissons une mutation comme étant l’inversion d’un bit dans un
chromosome (Fig.4). Cela revient à modifier aléatoirement la valeur d’un paramètre
du dispositif. Les mutations jouent le rôle de bruit et empêchent l’évolution de se figer.
Elles permettent d’assurer une recherche aussi bien globale que locale, selon le poids
et le nombre des bits mutés. De plus, elles garantissent mathématiquement que
l’optimum global peut être atteint.
Fig. 4 : représentation schématique d’une mutation dans un chromosome.
D’autre part, une population trop petite peut s’homogénéiser à cause des erreurs
stochastiques : les gènes favorisés par le hasard peuvent se répandre au détriment des
autres. Cet autre mécanisme de l’évolution, qui existe même en l’absence de sélection,
est connu sous le nom de dérive génétique. Du point de vue du dispositif, cela signifie
que l’on risque alors d’aboutir à des dispositifs qui ne seront pas forcément optimaux.
Les mutations permettent de contrebalancer cet effet en introduisant constamment de
nouveaux gènes dans la population [Beasley, 1993b].
Comment réaliser notre opérateur mutation ? De nombreuses méthodes existent.
Souvent la probabilité de mutation pm par bit et par génération est fixée entre 0,001 et
0,01. On peut prendre également pm=1/l où l est le nombre de bits composant un
chromosome. Il est possible d’associer une probabilité différente de chaque gène. Et
ces probabilités peuvent être fixes ou évoluer dans le temps.
MAISON
6
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
Fig. 5 : principe de l’auto-adaptation. A chaque variable est associée sa propre
probabilité de mutation, qui est elle-même soumise au processus d’évolution.
L’individu possède donc un second chromosome codant ces probabilités.
Après divers essais, ils ont abouti à la méthode d’auto-adaptation des probabilités de
mutation [Bäck, 1992]. Si dans un environnement stable il est préférable d’avoir un
taux de mutation faible, la survie d’une espèce dans un environnement subissant une
évolution rapide nécessite un taux de mutation élevé permettant une adaptation rapide.
Les taux de mutation d’une espèce dépendent donc de leur environnement [Wills,
1991].
Pour prendre en compte cette formulation biologique et l’adapter à notre cas, ils
ont introduit dans chaque individu (dispositif) un second chromosome (ensemble de
paramètres) dont les gènes (paramètres) représentent les probabilités de mutation de
chaque gène du premier chromosome (Fig. 4 ). Ce second chromosome est géré de
façon identique au premier, c’est-à-dire qu’il est lui-même soumis aux opérateurs
génétiques (croisement et mutation). Cela revient à fixer les probabilités assurant la
modification des valeurs des paramètres du composant en fonction des valeurs d’un
ensemble d’autres paramètres (les probabilités de mutation).
Lors de la genèse, les probabilités de mutation sont posées égales à 0,1 (valeur qui a
paru la meilleure après plusieurs essais). Au cours du déroulement de l’algorithme, les
gènes et les individus ayant des probabilités de mutation trop élevées ont tendance à
disparaître. De même, les gènes ayant des probabilités de mutation trop faibles ne
peuvent pas évoluer favorablement et tendent à être supplantés. Les probabilités de
mutation dépendent donc du gène considéré et de la taille de la population. De plus,
elles évoluent au cours du temps. Il y a donc auto-adaptation des probabilités de
mutation.
A / Mutation binaire :
La mutation binaire s'applique à un seul chromosome. Un bit du chromosome est tiré
au hasard. Sa valeur est alors inversée.
MAISON
7
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
Il existe une variante où plusieurs bits peuvent muter au sein d'un même
chromosome. Un test sous le taux de mutation est effectué non plus pour le
chromosome mais pour chacun de ses bits : en cas de succès, un nouveau bit tiré au
hasard remplace l'ancien.
B / Mutation réelle :
La mutation réelle ne se différencie de la mutation binaire que par la nature de
l'élément qu'elle altère : ce n'est plus un bit qui est inversé, mais une variable réelle qui
est de nouveau tirée au hasard sur son intervalle de définition.
C/ mutation non uniforme :
La mutation non uniforme possède la particularité de retirer les éléments qu'elle
altère dans un intervalle de définition variable et de plus en plus petit. Plus nous
avançons dans les générations, moins la mutation n'écarte les éléments de la zone de
convergence. Cette mutation adaptative offre un bon équilibre entre l'exploration du
domaine de recherche et un affinement des individus.
Le coefficient d'atténuation de l'intervalle est un paramètre de cet opérateur.
III - Exemples d’application des AG :
UTILISATION DE L’AGE DANS UN ALGORITHME GENETIQUE
Nous construisons un algorithme génétique binaire qui permet de sélectionner des individus
en utilisant l’âge.
1 – Introduction :
Nous souhaitons modifier une population initiale en prenant en compte le génotype
des individus et leur âge, qui n’a pas de lien direct avec le génotype.
2 - Objectifs des paramètres :
Nous avons une population d’individus, assimilables à des chromosomes, évolués
suivant une fonction unidimensionnelle : la fonction f_eval.
Nous souhaitons obtenir un ensemble de chromosomes ou individus qui minimise la
fonction d’évaluation f_eval. Celle-ci reste la même quelque soit la génération et
s’applique à tous les chromosomes.
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.
MAISON
8
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
A/ Evaluation :
La fonction d’évaluation est une fonction qui dépend de 2 paramètres indépendants.
L’évaluation f_eval est la même pour chaque génération et pour chaque individu.
Le 1er paramètre est évaluation et il dépend uniquement du génotype de l’individu.
X= [x1 x2]
  2 * PI 

evaluation  20  x1. * sin  
 * x1  x2. * sin 4 * PI * x2
 3 

et :
Le 2e paramètres Prob_selec dépend uniquement de l’âge. C’est un coefficient de
probabilité de sélection. Nous choisissons que la probabilité d’être sélectionné d’un
individu augmente avec l’âge. Ainsi, nous favorisons les individus âgés. L’âge de
chaque individu se trouve dans le tableau age.
Pc( j ) 
age( j )
Npop
 age(i )
i 1
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.
F_eval est une combinaison de évaluation et de Prob_selec. Nous choisissons de
faire intervenir ces 2 facteurs de la même manière et de manière linéaire. Ainsi, nous
avons des coefficients pondérés. Coeff et (1-coeff) sont les poids respectifs de
évaluation et de Prob_selec dans le résultat de f_eval(x). Chaque individu de la
population est évalué indépendamment des autres.
F_eval(x) = coeff * évaluation(x) + (1-coeff) * Pc(x)
B/ Population initiale :
La population initiale est composé de Npop individus du même âge : 1 an. Ils
entrent dans le boucle sélection croisement mutation. Les individus sont codés en
binaire. Leurs bits sont groupés tel que le montre le vecteur bit.
C/ Sélection :
Nous sélectionnons les groupes de reproducteurs en fonction de 2 critères :
1- leur évaluation par la fonction évaluation,
2- leur âge qui se trouve dans un tableau age.
L’influence de l’âge sur la sélection peut se faire de plusieurs manières. On peut
favoriser ou défavoriser les jeunes, les adultes ou les vieux plus ou moins strictement.
La seule contrainte étant que la sélection ne choisisse pas toujours les mêmes
individus. Le type de sélection choisie s’inspire de la sélection tournoi.
MAISON
9
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
D/ Croisement :
Le croisement s’opère en 2 étapes :
1- sélection de C couples de reproducteurs qui deviendront parents.
2- croisement des parents et formation de 2 enfants par couple.
Chaque couple génère 2 enfants par la méthode de croisement simple. Nous
choisissons un point de croisement pour les 2 parents, et nous 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.
E/ Mutation :
Nous effectuons une mutation sur les individus. Cette mutation affecte tous les
individus de la même manière. Nous pourrions choisir de faire en sorte qu’elle dépend
de l’âge. Cette mutation consiste à changer un bit donné pour chaque individu. Nous
changeons le 0 en 1 et vice versa pour le point de mutation qui varie d’un individu à
l’autre et qui est choisi des manières aléatoires. On sait que cette mutation n’affecte
pas l’âge des Npop individus.
F/ Test de convergence :
Nous effectuons un test de convergence. Nous décidons de prendre un test de
convergence simple. Nous avons un nombre Gmax de générations totales et la boucle
s’arrête quand il est atteint.
Fig.6 : Test de convergence.
MAISON
10
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
3 – Explication du programme :
Nous expliquons les différentes étapes de l’algorithme avec le code commenté.
A/ Définition de la fonction d’évaluation :
La fonction d’évaluation est donnée par :
function p=f_eval(x,age,coeff)
 évaluation en fonction du génotype.
evaluation = 20+x(1,:).*sin(2*pi*x(1,:)./3)+x(2,:).*sin(4*pi*x(2,:)) ;
 somme des ages de tous les individus.
S_age = sum(age) ;
 probabilité d'être sélectionné qui dépend de l'age.
Prob_selec = age./S_age ;
 k coeffcient de l'impact de l'évaluation et de l'age entre 0 et 1.
k = coeff ;
 le résultat p de f_eval dépend des coefficients pondérés k et (1-k).
p = k * evaluation + (1-k) * Prob_selec ;
B/ Définition de la population initiale :
Npop_init est le nombre d’individus ou chromosomes que nous souhaitons obtenir
dans la population initiale et bit est le nombre de bits des chromosomes.
Génération d'une population :
function x = Gen_Pop_Init(Npop_init, bit)
x = round(rand(Npop_init,sum(bit)));
C/ sélection :
choix des indices de futurs individus parents parmi les reproducteurs.
function [indice_repr] = select_tournoi(pop_ordon, nb_repr, nb)
indice_repr=[];
 taille est donc le nombre d'individus dans la population.
taille = size(pop_ordon,2);
q = zeros(nb,1);
MAISON
11
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
 on affecte à chaque individu un cœfficient aléatoire.
for i= 1:nb_repr
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.
indice_repr(i) = temp(1);
end
D/ Le croisement :
Nous choisissons un croisement simple des parents pour obtenir les enfants.
Croisement simple:
function [enf1, enf2] = crois_s(par1, par2)
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));
 les enfants sont générés par croisement simple.
for i = 1 : taille
if i <= point
enf1(i) = par1(i);
enf2(i) = par2(i);
else
enf1(i) = par2(i);
enf2(i) = par1(i);
end
end
E- La mutation. La mutation simple consiste en l’inversion d’un bit :
Fonction qui effectue la mutation sur l'individu 'ind' et qui renvoie 'ind_mut',
l'individu muté
MAISON
12
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
function ind_mut = mut_s(ind)
 taille du tableau.
a = size(ind,2);
 point de mutation.
p = 1+round(rand(1)*(a-2));
if (ind(p)==0)
ind(p)=1;
else
ind(p)=0;
end
ind_mut=ind;
F / Programme principale :
CREATION D'UN ALOGORITHME GENETIQUE UTILISANT L'AGE DES
INDIVIDUS
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 : génération de la population initiale
f_eval : évaluation 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;
 Nombre d'individus de la Population.
Npop = 10 ;
 Nombre d'itérations maximale, c'est aussi le nombre de générations parcourues.
Gmax = 20;
 Nombre de bits qui codent chacun de2 paramètres, le chromosome est codé sur
18 bits, Bit [a b] signifie que a bits codent le 1er paramètre et b bits le second.
bit = [10 8];
MAISON
13
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
 k coefficient du poids de l'évaluation du génotype sur l'évaluation globale , k est
entre 0 et 1, (1-k) est donc le poids de l'âge.
coeff= 0.6;
 Précision souhaitée sur chaque paramètre.
prec = [0.01 0.01];
 Probabilité de mutation.
pm = 0.05;
 Matrice des limites de variation de paramètres d .
d = [-2 8; 4 6];
 Variable qui compte le nombre de générations parcourues, compteur < Gmax .
compteur = 1;
 Vecteur des ages initiaux des Npop individus.
age=ones(1,Npop);
 ------------- création de la population initiale ---------------------------------x = gen_pop_init(Npop, bit)
Figure(1)
plot(x ,'Color','red','LineWidth',2);
title(‘la population initiale,'color','red');
xlabel('Npop ,'color','blue');
ylabel('1','color','blue');
 ------------ boucle principale de modification de la population ------------Boucle principal qui effectue les modifications sur la population
while (compteur < Gmax)
 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);
MAISON
14
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
 sélection des Npop/2 meileurs individus.
reproducteur = pop_ordon(1:round(Npop/2));
 variable temporaire, tableau d'indices.
clear temp_ind ;
 boucle qui parcourt le tableau des meilleurs éléments triés .
for i = 1:size(reproducteur,2)
 individus ayant l'évaluation reproducteur(i).
temp_ind = find( f_eval(x_dec,age,coeff) == reproducteur(i));
 ind est le tableau des indices des meilleurs individus dans x .
ind(i) = temp_ind(1);
end
clear tmp;
 matrice des reproducteurs qui contient size(ind,2) reproducteurs.
x = x(ind,:) ;
 matrice des ages associées aux reproducteurs .
age = age(ind);
 ---------- sélection des parents potentiels parmi les reproducteurs --------- nombre de représentants (parents) souhaités, size(ind,2) = nombre de
reproducteurs
nb_repr = Npop-size(ind,2);
nb = 2;
 tableau des indices des futurs parents potentiels après la sélection tournoi .
[indice_repr] = select_tournoi(reproducteur, nb_repr, nb);
 ------------ Croisement des individus parents pour créer des enfants -----clear x_dec;
i = 1;
 indice_repr est le tableau des indices des représentants les parents dans la
population x.
while i < size(indice_repr,2)
x_dec = b_f(d,x,bit)
 tableau des reproducteurs et des enfants crées dans cette génération.
MAISON
15
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
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.
[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
 -------------- Mutation sur les individus de la population intermédiaire -- Nombre de couples à générer .
couple = round(pm*18*size(x,1));
for i = 1:couple
 id est l'indice de l'individu qui subit la mutation.
id = 1+round(rand(1)*(size(x,1)-1));
ind_mut = mut_s(x(id,:));
end
clear ind, ind_par, bit2;
 Compteur du nombre de générations.
compteur = compteur+1
end
 ---------------- affichage de la population finale ------------------------------disp('la matrice représentant la population finale est :');
x,
Figure(2)
plot(x,'Color','red','LineWidth',2);
title(‘la population finale,'color','red');
MAISON
16
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
 ------------ Tracé des Evaluations de la population en fonction de la
génération
Figure(3)
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');
G- La fonction B_f et la fonction F_b :
 fonction de conversion du binaire au décimal de l'individu binaire .
function x_dec = b_f(d,x,bit)
n=1;
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
 fonction de conversion du décimal au binaire de l'individu binaire .
function [x_bin, bit] = f_b(d,x_dec,p)
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
MAISON
17
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
H- Exemple d’exécution du programme :
Fig.7 : création de la population initiale
Fig. 8 : affichage de la population final
Avec la fonction d’évaluation choisie, on a cherché à trouver le minimum global
de cette dernière tout en évaluant l’âge de la population.
Parmi le résultats trouvés on trouve l’évolution ci-dessous concernent la moyenne
des individus.
MAISON
18
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
Fig.9 : la moyenne des individus.
4 – Conclusion :
Nous avons réalisé un AG faisant intervenir l’âge des individus. L’âge n’intervient
que dans les phases de sélection mais on pourrait le faire intervenir dans les phases de
mutation et de croisement.
Nous remarquons, au cours de l’exécution du programme, que celui-ci ne converge
par toujours vers une valeur minimale. Ceci est dû au croisement et à la mutation. En
effet, l’A.G. est décomposable en 4 étapes :
 sélection des reproducteurs,
 sélection des parents,
 croisement,
 mutation.
Les 2 premières étapes font intervenir l’évaluation (la fonction f_eval) et tendent, par
le processus de choix des minima, à faire baisser la somme des évaluations des
individus de la population. Mais le croisement (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.
MAISON
19
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
Ainsi, cet algorithme ne garantit pas la minimisation de l’évaluation. L’évaluation
peut aussi converger vers une valeur qui n’est pas la plus faible qu’elle aie atteinte : le
processus d’évolution est alors bloqué.
Il y a donc l’intervention de phénomènes stochastiques, englobés dans des règles de
fonctionnement de l’algorithme génétique.
IV- Les problèmes de l’algorithme génétique :
1 –Le codage :
L’un des problèmes les plus importants est le codage des données :
 c’est difficile de trouvée un bon codage adaptée à la structure du problème.
 L’application de la fonction de décodage lords l’évaluation de la fitness est
coûteuse en temps de calcul.
 Les opérateurs de croisement et mutation ne tiennent aucun compte de la
structure du problème.
2- La dominance :
La domination d’un chromosome provoque la disparition rapide de certains élément
de la population, mais la méthode des AG présente plusieurs solutions contrairement a
d’autres algorithmes comme recuit simulé qui présent une seule solution, alors il faut
éliminer les chromosomes et laisser le meilleur (le mieux adapté).
3- Le croisement :
L’un des problèmes des AG c’est la position de codage, par exemple : une propriété
importante est codée dans une chaîne de 8 bits par le 1er et le 8th bit, dans ce cas tout
croisement peut ce faire facilement mais si le codage est fait entre le 1er et le 2nd bit le
croisement sera presque insensible.
C’est de ça ou vient l’idée de réorganisé les bits dans un chromosome de façon à
crée des blocs stables.
4-Les chromosomes haploïdes et diploïdes :
Un chromosome haploïde a une chaîne de bits et un chromosome diploïde a deux
chaînes de bits.
Un chromosome haploïde est beaucoup utilise par rapport au chromosome diploïde,
ce dernier n’est efficace que lorsque la fonction de fitness varie en fonction du nombre
de génération de l’AG f(c, n) (ou n est le numéro de génération de l’A.G.) au lieu
d’être simplement en fonction de c, mais les organismes vivants les plus évolués ont
des chromosomes diploïdes.
Les chromosomes diploïdes ont des grandes capacités a mémoriser par
l’intermédiaire de gènes récessifs.
MAISON
20
Université de Jijel / Institut d’Ingénieur / Département d’Electronique / Mini projet « Algorithme génétique »
V- Conclusion :
Les algorithmes génétiques peuvent être utilisés en tant que méthode de recherche
combinatoire incluant, des propriétés base sur le parallélisme et l’exploration, des
heuristiques de recherche intéressante basées sur des principes d’auto-organisation.
Les algorithmes génétiques peuvent constituer une alternative intéressante lorsque
les méthodes d’optimisation traditionnelles (méthode "grimpeur ", méthodes
analytiques telle que les moindres-carrés) ne parviennent pas à fournir efficacement
des résultats fiables.
Cependant, comme nous l’avons souvent souligne au cours de ce mini-projet, la
plupart des mises en œuvre courantes des AG nécessitent un environnement (le
processus ou un modèle de processus) suffisamment tolérant pour laisser à
l’algorithme le "droit a l’erreur "
Ceci implique que l’environnement doit permettre l’essai et l’évaluation de
solutions-condidates médiocres.
L’algorithme génétique employé seul constitue un mécanisme de recherche souvent
"trop aveugle " alors il peut rendu plus efficace si on le combine avec des méthodes de
recherche traditionnelles, habituellement plus locales (régulateur classique, régulateur
flou ou un système de commande neuronal).
MAISON
21
Téléchargement