Vous êtes sur la page 1sur 89

AIDE A LA DECISION

PAR
ALGORITHMES GENETIQUES
IGA 2012-2013
N. ALAA Laboratoire LAMAI
FSTM
I Introduction & Motivation


Linformatique dcisionnelle (data mining), mais aussi l'conomie,
la sociologie, la planification, la logistique, lautomatique, le
traitement de signal, la conception optimale, les sciences de
lingnieur, ect , sont couramment confrontes au problme
classique daide la dcision et de l'optimisation.
"L'conomie d'intention scientifique" s'est mme fait une spcialit
de la rsolution de ce type de problme.


les ingnieurs et les gestionnaires utilisent frquemment des
formalisations de leurs problmes de dcision grce des
graphiques, des arbres de dcision, des tableaux, etc., et sont
conduits dvelopper des mthodes et des critres qui
permettent la fois de calculer les meilleurs choix et de justifier la
manire dont ils ont t obtenus.
Ces mthodes sont fondes sur des modles formaliss et les
dcisions sont prises en utilisant des rsultats de la
programmation mathmatique, encore appele thorie du
contrle, cest--dire un ensemble de mthodes du calcul des
optimums de fonctions cot.
Le problme une fois formalis scrit:

Trouver U* tel que

F(U*)=Min{ F(U), pour U dans U
ad
}
Ou bien
F(U*)=Max{ F(U), pour U dans U
ad
}


F sappelle fonction cot
U
ad
sont les contraintes

Quelques exemples de problmes de
dcision

1. Lancement dun nouveau produit

Une socit industrielle doit dcider de lancer elle-mme
un nouveau produit mis au point par son service
dtudes ou den vendre le brevet une autre socit.
Une dcision intermdiaire consiste fabriquer et lancer
ce produit une chelle exprimentale et de dcider
ensuite den dvelopper lexploitation ou den cder le
brevet.
Lincertitude porte sur le march accessible un certain
cot dexploitation et de publicit, et la capacit de
conserver ce march aprs que la concurrence a imit le
produit. Les consquences sont les profits nets futurs.

2. Traitement dune maladie

Face des symptmes prcis, un mdecin reste incertain quant au
stade dvolution de la maladie (les alas sont les diffrents stades
possibles).
un stade peu dvelopp, un premier traitement est efficace
90%; un deuxime stade, il nest plus efficace qu 50%, mais un
second traitement lest 80% alors quil aurait des effets
secondaires trs graves au premier stade; enfin, un troisime
stade, il ny a plus rien faire.
Dans ce problme, les consquences sont la gurison ou le dcs
du patient, les cots de traitement et danalyse sont ngligeables; en
revanche, le temps est un facteur important sur lvolution de la
maladie.
La dcision de procder des analyses plus pousses avant de
commencer un traitement peut donc tre fatale.
Les dcisions ont donc deux composantes:
analyses (oui ou non),
type de traitement (premier, deuxime, aucun).





3. Problme de gestion de production

Une entreprise marocaine spcialise dans la fabrication
de cbles de rseaux de deux types diffrents qui
ncessitent les mmes produits A,B,C.
Le stocke disponible est: 18 T de A, 8T de B et 14T de C.
(T=tonnes).
Pour le premier type:1 rouleau de 100m ncessite 1T de
A,1T de B et 2T de C.
Pour le second type:1 rouleau de 100m ncessite 3T de
A,1T de B et 1T de C.
Le premier type a un profit de 2000dh par rouleau et le
second type de 3000dh par rouleau.
Problme: Combien de rouleau de 100m doit fabriquer
cette entreprise pour faire le plus grand bnfice
possible?

Formalisme:
On notera par:
a= nombre de rouleau de 100m du type 1
b= nombre de rouleau de 100m du type 2

le bnfice que va raliser lentreprise en vendant a du type 1 et b du type 2 est:
y=2000*a+3000*b
Les contraintes sont:
1) la matire A est utilise pour la fabrication de 100m : dans le type1 avec une
quantit de 1T et dans le type 2 avec une quantit de 3T, mais le stocke ne
dpasse pas 18T. Cela scrira donc:
a+3*b <=18

2) la matire B est utilise pour la fabrication de 100m: dans le type1 avec une
quantit de 1T et dans le type 2 avec une quantit 1T, mais le stocke ne dpasse
pas 8T cela scrira donc:
a+b<=8
3) la matire C est utilise pour la fabrication de 100m: dans le type1 avec une
quantit de 2T et dans le type 2 avec une quantit de 1T, mais le stocke ne
dpasse pas 14T cela scrira donc:
2*a+b<=14
4) il faut ajouter aussi que: a>=0 et b>=0 car il se sont des entiers.
On dfinit alors la fonction f que nous devons maximiser:
function y=f(a,b)
G1= 18-a-3*b;
G2= 8-a-b;
G3= 14-2*a-b;
if (G1>=0)&(G2>=0)&(G3>=0)&(a>=0)&(b>=0)
y=2000*a+3000*b;
else y=0;
end
end

La bonne gestion de production de cette entreprise
passe donc par la rsolution du problme:

Trouver U*=(a*,b*) tel que f(U*)= Max(f(a,b) )

4. Problme de gestion de commande
Une entreprise marocaine
spcialise dans la
distribution de produits. Elle
dispose de deux entrepts E1
et E2. Les stockes disponibles
sont:
800 units entreposs E1 et
700 units entreposs E2.
Deux clients A,B commandent
350 et 600 units
respectivement. Le cot de
transport partir de chaque
entrept jusque chez A, B
sont donns en fonction du
tableau suivant:

Problme: Comment
lentreprise va rpartir la
commande pour que le cot
soit minimum?

Entrept

client Cot de
transport
par unit
E1 A 8 dh
E1 B 12 dh
E2 A 10 dh
E2 B 13 dh
Dune manire gnrale, Une entreprise
spcialise dans la distribution, elle dispose de
m entrepts E1,...,Em. Le stocke disponible est
si dans chaque Ei i=1,...,m. Des clients A1,..,An
demandent les quantits D
1
,...D
n
. Le cot
unitaire de livraison de chaque entrept Ei vers
le clients Aj est Cij.
Comment rpartir la commande pour que le cot
soit minimum?

formalisme:

a= nombre dunit de lentrept E1 vers le client A
b= nombre dunit de lentrept E1 vers le client B
c= nombre dunit de lentrept E2 vers le client A
d= nombre dunit de lentrept E2 vers le client B

le cot de transport est donc:
C= 8a + 12b+ 10c + 13d
les contraintes sont:
a + b <=800 800-a-b>=0
a + c =350 donc c=350 a et c>=0 350-a>=0
c + d<= 700
b + d = 600 donc d=600 b et d>=0 600-b>=0

Donc nous dduisons:

1) c=350 a , d=600 b et c + d<= 700 -250+a+b<=0
2) c=350 a , d=600 b et C= 8a + 12b+ 10c + 13d
C= 11300 - 2*a b
Par suite la fonction cot devient:
C= 11300 - 2*a b
Les contraintes sont donc:

G1= 800-a-b>=0
G2= -250 + a+b>=0
G3= 350 a>=0
G4 = 600 b>=0

La bonne dcision pour la gestion de commande
de cette entreprise passe donc par la rsolution
du problme:
Trouver U*=(a*,b*) tel que F(U*)= Min(F(a,b) )
Puis dduire: c*=350-a* et d*=600-b*

On dfinit alors la fonction F que nous devons minimiser:
function y=F(x)
G1= 800-x(1)-x(2);
G2= -250 + x(1)+x(2);
G3= 350 x(1) ;
G4 = 600 x(2);

if (G1>=0)&(G2>=0)&(G3>=0)&(G4>=0)
y=11300-2*x(1)-x(2);
else y= 11300;
end
end

On dfinit aussi les bornes pour x(1) et x(2):
La valeur maximal que peux prendre x(1) est: G3>=0 donne x(1)<=350.
La valeur maximal que peux prendre x(2) est: G4>=0 donne x(2)<=600.
La valeur minimal est obtenue par G2>=0: donne x(1), x(2)>=250
donc on prendra pour les deux bornes [200,800].
5. Gestion dune parfumerie

Une entreprise spcialise dans la fabrication de 4 sortes de
parfums D1,D2,D3,D4 par un mlange spcifique de 4 ingrdients
A,B,C,D selon le tableau suivant:


substance
Ingrdient
A
Ingrdient
B
Ingrdient
C

Ingrdient
D
Cot par
flacon de
1dcl
D1 20% 10% 25% 45% 25dh
D2 20% 40% 15% 25% 35dh
D3

D4
10%

15%
20%

15%
25%

20%
45%

50%
50dh

45dh
Lentreprise dispose dun stocke de 1litre
de A, 4 litres de B, de 2.5 litres de C et 2.5
litres de D. Elle veut produire 100 flacons
de 1dcl de son parfum dont au moins une
dizaine de chacun. Quelles quantits de
chaque parfum D1,D2,D3 et D4 doit elle
fabriquer pour que son cot soit minimale.
Aider cette entreprise prendre la bonne
dcision.
formalisme:

x(1)= nombre de flacon de la substance D1
x(2)= nombre de flacon de la substance D2
x(3)= nombre de flacon de la substance D3
x(4)= nombre de flacon de la substance D4
le cot de fabrication est donc:
C= 25*x(1) + 35*x(2)+ 50*x(3) + 45*x(4)
les contraintes sont:
x(1) + x(2) + x(3) +x(4)=100
0.2x(1) + 0.2x(2) + 0.1x(3)+0.15*x(4) <=10
0.1x(1) + 0.4x(2) + 0.2x(3)+0.15*x(4) <=40
0.25x(1) + 0.15x(2) + 0.25x(3)+0.2*x(4) <=25
0.45x(1) + 0.25x(2) + 0.45x(3)+0.5*x(4) <=25
x(1),x(2),x(3),x(4)>=10
En remplaant x(4) en fonction de
x(1),..,x(3) , le cot de fabrication est donc:
C=4500- 20*x(1) -10 *x(2)+ 5*x(3)

les contraintes sont:

15+0.05x(1) + 0.05x(2) - 0.05x(3) <=10
15-0.05x(1) + 0.25x(2) - 0.05x(3) <=40
20+0.05x(1) - 0.05x(2) + 0.05x(3) <=25
50-0.05x(1) - 0.25x(2) - 0.05x(3) <=25
10<=x(1),x(2),x(3)<=100
On dfinit alors la fonction F que nous devons
minimiser:
function y=F(x)
G1= -5+0.05*x(1) + 0.05*x(2) -0.05*x(3) ;
G2= 25+0.05*x(1) - 0.25*x(2) + 0.05*x(3);
G3= 5 -0.05*x(1) + 0.05*x(2) - 0.05*x(3) ;
G4= -25+0.05x(1) +0.25x(2) +0.05x(3) ;
G5= (100>=x(1)>=10) & (100>=x(2)>=10) &
(100>=x(3)>=10);

if (G1>=0)&(G2>=0)&(G3>=0)&(G4>=0)&(G5)
y= 4500- 20*x(1) -10 *x(2)+ 5*x(3) ;
else y= 10000;
end
end
6. Le problme de recouvrement
On a m rgions et n villes, dans
chaque rgion on peut construire une
installation. Le cot de construction
dune installation dans la rgion i m
est fi. Soit aij = 1 si est seulement si
linstallation dans la rgion i peut servir
la ville j. On doit minimiser le cot de
construction des installations sous une
contrainte: chaque ville doit tre servit
par au moins une installation
construite. Les variables sont xi {0,
1}, dfinies pour chaque rgion i,
indiquent si linstallation i doit tre
construite ou pas.









Le problme de dcision scrit dans ce cas:









Un voyageur de commerce doit
visiter n villes donnes en
passant par chaque ville
exactement une fois. Il
commence par une ville
quelconque et termine en
retournant la ville de dpart.
Les distances entre les villes
sont connues. Quel chemin
faut-il choisir afin de minimiser
la distance parcourue ? La
notion de distance peut-tre
remplace par d'autres notions
comme le temps qu'il met ou
l'argent qu'il dpense : dans tous
les cas, on parle de cot.
7. le problme du voyageur de commerce (PVC)
Historique

19ime sicle
Les premires approches par Sir William Rowan Hamilton et Thomas
Penyngton Kirkman. Hamilton en a fait un jeu : Hamilton's Icosian game.
Les joueurs devaient raliser une tourne passant par 20 points en
utilisant uniquement les connections prdfinies.
annes 1930
Le PVC est trait plus en profondeur par Karl Menger Harvard. Il est
ensuite dvelopp Princeton par les mathmaticiens Hassler Whitney
et Merril Flood.
1954
Solution du PVC pour 49 villes par Dantzig, Fulkerson et Johnson.
1975
Solution pour 100 villes par Camerini, Fratta and Maffioli
1987
Solution pour 532, puis 2392 villes par Padberg et Rinaldi
1998
Solution pour les 13 509 villes des Etats-Unis.
2001
Solution pour les 15 112 villes d'Allemagne par Applegate, Bixby,
Chvtal et Cook des universits de Rice et Princeton.


Intrt

Le PVC fournit un exemple d'tude d'un problme NP-complets dont
les mthodes de rsolution peuvent s'appliquer d'autres problmes
rels discrets.

Nanmoins, il a aussi des applications directes, notamment dans:

les transports et la logistique: Par exemple, trouver le chemin le
plus court pour les bus de ramassage scolaire.

Planification: Par exemple, trouver lemploie du temps optimal
dans un tablissement denseignement sachant que nous disposons
dun nombre de locaux des disponibilit des professeurs et dune
charge horaire, ect

l'industrie: Par exemple, trouver la plus courte distance que devra
parcourir le bras mcanique d'une machine pour percer les trous d'un
circuit imprim (les trous reprsentent les villes).


1 2 ......
(1) (2)...... ( )
n
n
o
o o o
| |
=
|
\ .
Formalisme:

A partir d'une matrice C=(C(i,j)) o C(i,j) reprsente le cot du
dplacement entre la ville i et la ville j (1<=i,j<=n) , il faut trouver
une permutation :





qui minimise la somme des cots:



Exemple: n=5



( ) ( (1), (2)) ( (2), (3)) ........ ( ( 1), ( )) ( ( ), (1)) F C C C n n C n o o o o o o o o o = + + + +




0 5 7 3 5
5 0 200 8 9
7 200 0 2 3
5 9 4 0 1
5 9 3 1 0
C
| |
|
|
|
=
|
|
|
\ .
Complexit
Ce problme est un reprsentant de la classe des problmes NP-complets.
Une approche trs nave du problme consisterait dterminer toutes les
permutations et de calculer la fonction cot associe, et prendre le plus
court chemin.
On se heurte cependant une difficult de taille : leur nombre.
Il est alors impensable de pouvoir les tester toutes pour trouver la meilleure.
Un calcul rapide de la complexit montre qu'elle est en (n-1)!/2 o n est le
nombre de villes. En supposant que le temps pour valuer un trajet est de
1micro seconde, le tableau1 suivant montre l'explosion combinatoire du
PVC:
1. Les mthodes purement analytiques ont largement fait
leurs preuves. Elles souffrent toutefois d'une faiblesse
rdhibitoire : rgularit de la fonction cot et la
rsolution de lquation dEuler associe:
Si F est drivable, U* est caractris par:
Gradient(F(U*))=0
Mais dans la pratique cette quation est:
- difficile interprter: minimum local ou globale.
- difficile rsoudre: Gradient(F(U*))=0 est une
quation ou systme non linaire.

2. Les mthodes numriques exactes classiques ne sont
utilises que si la rsolution se fait en un temps
raisonnable la difficult ne vient pas de la complexit
du problme mais de la taille excessive de l'espace des
solutions.
METHODES DE RESOLUTION
Exemple:
function y=f2(x1,x2)
y= 20 + x1.^2+x2.^2-10*(cos(2*pi*x1)+cos(2*pi*x2));
end
Sur [-5,5]x [-5,5] cette fonction admet plusieurs minimas locaux. Comment
dterminer le minimum globale?
Programme MATLAB.
Ecrire le scipt trace3D.m

x=[-5:0.1:5];
[X,Y] = meshgrid(-5:.1:5);
Z = f2(X,Y);

surf(X,Y,Z,'FaceColor','interp',...
'EdgeColor','none',...
'FaceLighting','phong')
camlight left

C'est pourquoi, des heuristiques approches ont t essayes
pour la rsolution de tout un tas de problmes o la recherche
systmatique n'est pas possible. Ces heuristiques doivent tre peu
coteuses en temps machine et doivent permettre de trouver une
solution pas trop mauvaise.

Ainsi sont ns beaucoup d'algorithmes comme:
le recuit simul,
la mthode tabou,
les approches min-max, alpha-beta
les algorithmes gntiques.

Nous nous intresserons essentiellement ces derniers.

Ce sont des techniques de recherches alatoires qui ne requirent
aucune hypothse particulire sur la fonction cot et explore
lespace sans tirer partie des proprits de la fonction cot.



Evolution et Algorithmes gntiques:

Dans la nature, les tres vivants croissent et
interagissent les uns avec les autres.
Chaque individu est caractris par un gnotype
indpendant de lenvironnement o il vit.
Les oprateurs gntiques fonctionnent au niveau
gnotypique tandis que le mcanisme de slection
opre au niveau phnotypique:

le phnotype dun individu est lensemble des traits
caractristiques dun individu, par exemple (couleurs
des yeux) alors que

le gnotype est le codage de ces traits en gnes.

Les algorithmes gntiques sont la base des
algorithmes doptimisation stochastiques, mais peuvent
galement servir pour lapprentissage automatique.



C'est au dbut des annes 1960 que John Holland
de l'Universit du Michigan a commenc
s'intresser ce qui allait devenir les algorithmes
gntiques. Ses travaux ont trouv un premier
aboutissement en 1975 avec la publication de son
livre: Adaptation in Natural and Artificial System.

Holland poursuivait un double objectif :

1) amliorer la comprhension des processus naturels
d'adaptation,
2) concevoir des systmes artificiels possdant des
proprits similaires aux systmes naturels.

L'ide fondamentale est la suivante:

Comme nous lavons mentionn prcdemment, les
algorithmes gntiques s'attachent simuler le
processus de slection naturelle dans un
environnement hostile li au problme rsoudre, en
s'inspirant des thories de l'volution :

Dans chaque environnement, seules les espces les
mieux adaptes survivent au cours du temps, les
autres tant condamnes disparatre.

Au sein de chaque espce, le renouvellement des
populations est essentiellement d aux meilleurs
individus de l'espce.
L'originalit des travaux de Holland repose
en particulier sur le fait qu'il n'a pas
considr les seules mutations comme
source d'volution mais aussi et surtout
les phnomnes de croisement
(crossover) : c'est en croisant les solutions
potentielles existant au sein du pool
gntique que l'on peut se rapprocher de
l'optimum.

Ce modle servira de base aux
recherches ultrieures et sera plus
particulirement repris par Goldberg qui
publiera en 1989, un ouvrage de
vulgarisation des algorithmes gntiques,
et ajouta la thorie des algorithmes
gntiques les ides suivantes :
1) un individu est li un environnement par
son code d'ADN.
2) une solution est lie un problme par
son indice de qualit.
Ceci a permis lutilisation des AG dans le
cadre de rsolution de problmes
concrets, et de mieux faire connatre ces
derniers ce qui a marqu le dbut dun
nouvel intrt pour ces techniques.
Ces mthodes sont des puissants outils
qui peuvent tre utiliss pour lanalyse de
situation dans plusieurs domaines:
informatique, aide la dcision, conomie,
finance ect...

Nous donnons ici une prsentation simple
de ces nouveaux outils. Notre but est de:
1) vous expliquer les mcanismes gnraux
des AG.
2) vous faire dcouvrir les usages et les
potentialits de ces nouvelles mthodes.
3) nous dveloppons ensemble un petit
logiciel sous (MATLAB), qui permet de
simuler et rsoudre le problme du (PVC).
4) nous rsolvons des problmes concrets
en informatique, finance, problmes
inverses, contrle, ect..

II Principes
Les algorithmes gntiques sont des
algorithmes d'optimisation s'appuyant sur
des techniques drives de la gntique
et de l'volution naturelle:
croisements, mutations, slection.

Ces algorithmes utilisent un vocabulaire
similaire celui de la gntique.


Les algorithmes gntiques diffrent des algorithmes
classiques doptimisation et de recherche
essentiellement en quatre points fondamentaux :
1. Les algorithmes gntiques utilisent un codage des
lments de lespace de recherche et non pas les
lments eux-mmes.
2. Les algorithmes gntiques recherchent une solution
partir dune population de points et non pas partir
dun seul point.
3. Les algorithmes gntiques nimposent aucune
rgularit sur la fonction tudie (continuit,
drivabilit, convexit). Cest un des gros atouts des
algorithmes gntiques.
4. Les algorithmes gntiques ne sont pas dterministes,
ils utilisent des rgles de transition probabilistes.


Un algorithme gntique recherche le ou les extremas d'une fonction
dfinie sur un espace de donnes.
Pour l'utiliser, on doit disposer des cinq lments suivants:


1) Un principe de codage de l'lment de population. Cette tape associe
chacun des points de l'espace d'tat une structure de donnes. Elle se
place gnralement aprs une phase de modlisation du problme trait.
La qualit du codage des donnes conditionne le succs des algorithmes
gntiques.
Les codages binaires ont t trs utiliss l'origine. Les codages rels
sont dsormais largement utiliss, notamment dans les domaines
applicatifs pour l'optimisation de problmes variables relles.


2) Un mcanisme de gnration de la population initiale. Ce mcanisme doit
tre capable de produire une population d'individus non homogne qui
servira de base pour les gnrations futures. Le choix de la population
initiale est important car il peut rendre plus ou moins rapide la
convergence vers l'optimum global. Dans le cas o l'on ne connat rien du
problme rsoudre, il est essentiel que la population initiale soit rpartie
sur tout le domaine de recherche.

3) Une fonction optimiser. Celle-ci retourne une valeur
de IR+ appele fitness ou fonction d'valuation de
l'individu.

4) Des oprateurs permettant de diversifier la population
au cours des gnrations et d'explorer l'espace d'tat.
L'oprateur de croisement recompose les gnes
d'individus existant dans la population, l'oprateur de
mutation a pour but de garantir l'exploration de
l'espace d'tats.

5) Des paramtres de dimensionnement : taille de la
population, nombre total de gnrations ou critre
d'arrt, probabilits d'application des oprateurs de
croisement et de mutation.


Le principe gnral du fonctionnement
d'un algorithme gntique est reprsent
sur la figure ci-dessous:

on commence par gnrer une population d'individus de faon
alatoire.
Pour passer d'une gnration k la gnration k+1, les trois
oprations suivantes sont rptes pour tous les lments de la
population k.
Des couples de parents P1 et P2 sont slectionns en fonction de
leurs adaptations. L'oprateur de croisement leur est appliqu avec
une probabilit Pc (gnralement autour de 0.6) et gnre des
couples d'enfants E1 et E2.
D'autres lments P sont slectionns en fonction de leur
adaptation. L'oprateur de mutation leur est appliqu avec la
probabilit Pm (Pm est gnralement trs infrieur Pc) et gnre
des individus muts E. Le niveau d'adaptation des enfants (E1,E2)
et des individus muts E sont ensuite valus avant insertion dans
la nouvelle population.
Diffrents critres d'arrt de l'algorithme peuvent tre choisis :
- Le nombre de gnrations que l'on souhaite excuter peut
tre fix a priori. C'est ce que l'on est tent de faire lorsque l'on doit
trouver une solution dans un temps limit.
- L'algorithme peut tre arrt lorsque la population n'volue
plus ou plus suffisamment rapidement.

III Description dtaille

III-1 Gnration alatoire de la population initiale
Le choix de la population initiale d'individus conditionne
fortement la rapidit de l'algorithme. Si la position de
l'optimum dans l'espace d'tat est totalement inconnue, il
est naturel de gnrer alatoirement des individus en
faisant des tirages uniformes dans chacun des domaines
associs aux composantes de l'espace d'tat en veillant
ce que les individus produits respectent les contraintes.
Si par contre, des informations a priori sur le problme
sont disponibles, il parait bien videmment naturel de
gnrer les individus dans un sous-domaine particulier
afin d'acclrer la convergence.
Dans l'hypothse o la gestion des contraintes ne peut
se faire directement, les contraintes sont gnralement
incluses dans le critre optimiser sous forme de
pnalits. Il est clair qu'il vaut mieux, lorsque c'est
possible ne gnrer que des lments de population
respectant les contraintes.
II-2 Codage et population initiale

Il existe trois principaux type de codage : binaire, gray ou rel. Nous
pouvons facilement passer dun codage lautre (voir Michalewicz
(1992)).

Certains auteurs nhsitent pas faire le parallle avec la biologie et
parlent de gnotype en ce qui concerne la reprsentation binaire dun
individu, et de phnotype pour ce qui est de sa valeur relle
correspondante dans lespace de recherche.

Rappelons que la transformation la plus simple (fonction de dcodage
d) dune chane binaire A en nombre entier x sopre par la rgle
suivante :




videmment, la fonction d sera modifie selon le problme. Ainsi si
nous cherchons maximiser une fonction f : [0;1] [0;1] une mthode
possible serait la suivante (la taille du chromosome dpendant bien
videmment de la prcision voulue) :
{ }
l
i
i=1
3 2 1 0
x = d(A) = a 2
ainsi le chromosonne A= 1,0,1,1 vaut
1*2 0*2 1*2 1*2 11
l i
+ + + =

l
i
i=1
x = d(A) = a 2
i











{ }
16
i=1
16
d( 1,1,....,1 ) = 2 0, 999992 1
i
=

Pour une prcision au cinquime chiffre aprs la virgule nous prenons alors l =
16 puisque



Une autre faon de faire est de choisir d telle que :







La prcision est vrifie puisque :







{ }
1
1
i=1
17
16
2
x=d( ) =
2 1
131071
avec l=16, 2 1 131071 et d( 1,1,....,1 ) 1
131071
l i l
i
l
A a

+

= = =

14
d( 0, 0,...0,1,0) 0,0000152589. =
Code de Gray

Le code de Gray, galement appel binaire rflchi, est un type
de codage binaire permettant de ne modifier qu'un seul bit la fois
quand un nombre est augment d'une unit. Le nom du code vient
de l'ingnieur amricain Frank Gray qui dposa un brevet sur ce
code en 1947.








Pour passer d'une ligne la suivante, on inverse le bit le
plus droite possible conduisant un nombre nouveau.
Le nom de code binaire rflchi vient d'une mthode
de construction plus pratique pour choisir quel bit
inverser quand on passe d'un nombre au suivant:

On choisit un code de dpart :
zro est cod 0 et un est cod 1.
Puis, chaque fois qu'on a besoin d'un bit
supplmentaire, on symtrise les nombres dj obtenus
(comme une rflexion dans un miroir).
Enfin, on rajoute un 0 au dbut des anciens
nombres, et un 1 au dbut des nouveaux nombres.
Exemple :



Sous MATLAB:
1) dec2bin : Convertir un entier dcimal une chane
binaire.
dec2bin(D) renvoie la reprsentation binaire de D en
tant que chane. D doit tre un entier non
ngatif infrieur 2^52.

dec2bin(D,l) produit une reprsentation binaire d'au
moins l bits.

Exemple:
dec2bin (23) retourne: 10111
dec2bin(23,8) retourne 00010111
bin2dec: Convertir la chane binaire en entier
dcimal.
X = bin2dec(B) interprte la chane B binaire
et renvoie l'X nombre quivalent dcimal.
Principaux espaces sont convertis en zros.

Exemple:
bin2dec ('010111 ') renvoie 23
bin2dec ('010 111 ') renvoie galement 23
bin2dec (' 010 111 ') renvoie galement 23



convertion des rels en chaine de code binaire:

% la conversion du rel au binaire avec np chiffres avant la virgule et nm chiffre aprs la
virgule.
% donne galement la partie restante

function [b,rest]=real2bin(n,np,nm)
i=1;
for j=np-1:-1:0
pwr=2^j;
bit=floor(n/pwr);
n=n-bit*pwr;
b(i)=bit;
i=i+1;
end
%partie restante
for j=-1:-1:-nm
pwr=2^j;
bit=floor(n/pwr);
n=n-bit*pwr;
b(i)=bit;
i=i+1;
end
rest=n;
convertion de chaine binaire en rel:
% convertir chromosome chrom en rel entre a et b
% cest la fonction dcodage de tout lheure

function s=bin2real(chrom,a,b)
nb = size(chrom,2); % nombre de colonne dans le chrom
maxchrom=2^nb -1; % valeur maximal
% conversion
for j=1:nb
D(j)=2^(nb-j);
r(j)=chrom(j)*D(j);
end
%
tot=sum(r);
%
s=a+tot*(b-a)/maxchrom;

Gnration de population initiale par codage binaire:

On va crire un script ranpop.m qui permet la gnration
dune population de taille N au hasard, chaque individu
contient exactement n chromosomes (un individu ici est un
trajet possible, un chromosome est un entier entre 1 et N)
puis coder chaque chromosome sur 8 bits:

Consulter laide matlab concernant la fonction rand:
rand(n,m)= permet de gnrer alatoirement une matrice
de n lignes et m colonnes de nombres entre [0,1].
randi([n,m],k) = permet de gnrer k entiers entre n et m
randn(n,m)= permet de gnrer alatoirement une matrice n
lignes et m colonnes vec des pseudo nombre.
randperm(n)= permet de gnrer alatoirement une
permutation de [1,2,,n].

Dans notre cas cest la fonction randperm qui sera utilise, ainsi la fonction
qui va permettre de gnrer N permutation de [1,..,n] est la suivante:
on va stoker ces permutations dans le tableau pop o chaque ligne est une
permutation possible et leur reprsentation binaire dans le tableau popbn:

function [pop,popbn]=ranpop(n,N)
pop=[ ];
for i=1:N
pop=[pop;randperm(n)];
end

for i=1:N
for j=1:n
popbn(i,j)={dec2bin(pop(i,j),8)};
end
end
end

Excuter cette fonction puis faire des essais en faisant varier n et N.

Gnration par codage binaire:
Dans notre problme un individu de la population est un
circuit (cest--dire une permutation de (1,2,..,n)), 1,2,..,n
sont les numros des villes, ce sont les chromosomes
qui constituent lindividu.
Ecrivons un script ranpop.m qui permet la gnration
dune population compose de N individus, tirs au
hasard, chaque individu contient exactement n
chromosomes:

function pop=ranpop(n,N)
pop=[ ];
for i=1:N
pop=[pop;randperm(n)];
end
end

L individu ni est obtenue en tapant pop(i,:).
III-2 Principes de slection


La slection permet d'identifier statistiquement
les meilleurs individus d'une population et
d'liminer les mauvais.

On trouve dans la littrature un nombre
important de principes de slection plus ou
moins adapts aux problmes qu'ils traitent.

Dans le cas de notre problme, nous adoptons
le principe de slection suivant:

Roue de la fortune:

Le principe de la Roue de fortune consiste associer chaque
individu pop(i,:) (1<=i<=N) une probabilit de reproduction
proportionnelle sa fitness:
prb(i)=f(pop(i,:))/sum(f(pop(i,:));

On attribue ensuite chaque individu pop(i,:) un segment L(i) de
taille prb(i) et de reporter ces segments bouts bouts dans lintervalle
[0,1].

Les individus sont donc reprs par un segments particuliers de
longeur prb(i).

On tire ensuite u uniformment dans [0,1], u=rand(1,1), et on test:

Si u appartient L(i) alors pop(i,:) est slectionn sinon pop(i,:)
est limin

On reproduit N fois ce tirage, on dtermine ainsi N nouveaux individus
grce ce tirage.
la fonction cumsum permet de calculer les
sommes cumule: C=cumsum(A)
Si A est une matrice, cumsum (A) donne la
somme cumule de toutes les entres de A
les colonnes sont prises:
1) C=cumsum([5 4 9 2.1 6 9 5 1.6])
C=[5. 9. 18. 20.1 26.1 35.1 40.1 41.7]

2) C = cumsum([1,2,3;4,5,6])
C=[1,2,3;5,7,9]
Le programme sous MATLAB scrira ainsi, si nous notons
par:
scores = fitness des individus
peres = vecteurs des indices des individus slectionnes

Prenons lexemple o ce scores est par exemple:

scores=[5 4 9 2.1 6 9 5 1.6];
N=length(scores);
% on dtermine les probabilits correspondantes
prb=cumsum(scores)/sum(scores);

% Tester la fonction find en executant plusieurs fois:
u=rand(1,1), find(prb>u)
min(find(prb>u))


% on slectionne par un tirage au hasard
N individus qui ralisent un bon score:
on prend le premier indice qui ralise
cela
peres=[ ];
for i=1:N
u=rand(1,1);
peres=[peres, min(find(prb>u))]
end

Les oprations de croisements et de mutation
sappliqueront donc cette nouvelle population, cest pour
cela quil faut au fait crer ds ce stade des pres et
mes mres, ainsi le programme prcdent devient:

function [peres,meres]=selection(scores)
N=length(scores);
prb=cumsum(scores)/sum(scores);
peres =[ ];
meres=[ ];
for i=1:N/2
u=rand(1,1);
peres=[peres,min(find(prb>u))] ;
u=rand(1,1);
meres= [meres,min(find(prb>u))] ;
end
end
III-3 Croisement pour les problmes discrets:
Classiquement le croisement associ au codage par
chanes de bits est le croisement dcoupage de
chromosomes (slicing crossover). Pour effectuer ce type
de croisement sur des chromosomes constitus de M
gnes, on tire alatoirement une position dans chacun
des parents. On change ensuite les deux sous-chanes
terminales de chacun des deux chromosomes, ce qui
produit deux enfants C1 et C2 (voir figure ).
La fonction qui permet dchanger les deux sous-chanes
terminales de chacun des deux chromosomes est:

function [bfils,bfille]=croise(bpere,bmere,I)
nb=length(bpere);
bfils = bpere;
bfille= bmere;
for i=I+1:nb
bfille(i)=bpere(i);
bfils(i)=bmere(i);
end
end
La fonction qui permet de faire le croisement selon un tirage
alatoire est la suivante:

function newpop=croisement(pop,peres,meres,pc)
newpop=[ ];
m=size(pop,1);
for i=1:m/2
u=rand(1,1);
if (u<pc)
pere=pop(peres(i),:); mere=pop(meres(i),:);
% leurs reprsentation gnotypique
bpere=dec2bin(pere,8); bmere=dec2bin(mere,8);
% tirage au hasard pour appliquer le croisement
nb=length(bpere); I=randi([2,nb-1]);
for j=1:size(bpere,1)
[bfils(j,:),bfille(j,:)]=croise(bpere(j,:),bmere(j,:),I);
end
% leurs reprsentation phnotypique
fils=bin2dec(bfils); fille=bin2dec(bfille);
newpop(i,:)=fils'; newpop(i+m/2,:)=fille';
end
end
Pour notre problme ce type de croisement ne peut tre
appliquer car il peut donner naissance une nouvelle
population fils et fille qui ne sont pas forcement des
permutation de [1,..,n].
Pour remdier ce problme on propose dautres types
de croisement et qui gardent cette caractristique de la
population:
a) croisement par composition:
si per1 et per2 sont deux permutations de [1,..,n] alors
leurs compositions per1(per2) ou per2(per1) sont encore
des permutations de [1,..,n].
La fonction qui permet de faire le croisement par
composition selon un tirage alatoire (sous probabilit
pc) est la suivante:

function newpop=croisement(pop,peres,meres,pc)

N=size(pop,1); n=size(pop,2);
for i=1:N/2
pere(i,:) =pop(peres(i),:); % tableau 1xn
mere(i,:)=pop(meres(i),:); % tableau 1xn
end
newpop=pop;
for i=1:N/2
u=rand(1,1);
if (u<pc)
I=randi([1,N/2]);
per1=pere(I,:); mer1=mere(I,:);
fils=per1(mer1); fille=mer1(per1);
newpop(i,:)=fils; newpop(i+N/2,:)=fille;
end
end
end
b) croisement par hybridation:
si per1=[i
1
,i
2
,,i
n
] et mer1=[j
1
,j
2
,,j
n
] sont
deux permutations de [1,..,n] alors on tire
au hasard un indice dhybridation k dans
[1,..,n] puis on gnre:
un fils = [i
1
,..i
k
, (n-k) lments de [1,2,..n] diffrents
de i
1
,..i
k
]
une fille= [j
1
,..j
k
, (n-k) lments de [1,2,..n] diffrents
de j
1
,..j
k
]
la fonction qui permet de faire le
croisement par hybridation selon un tirage
alatoire (sous probabilit pc) est:

function newpop=croisementpp(pop,peres,meres,pc)

N=size(pop,1); n=size(pop,2);
for i=1:N/2
pere(i,:)=pop(peres(i),:); % tableau 1xn
mere(i,:)=pop(meres(i),:);% tableau 1xn
end
newpop=pop;
for i=1:N/2
u=rand(1,1);
if (u<pc)
p1=pere(i,:);
m1=mere(i,:);
fils=[ ]; fille=[ ];
k=randi([2,n-1]);
fils(1:k)=p1(1:k);
fille(1:k)=m1(1:k);
fils(k+1:n) =setdiff(m1(1:n),fils);
fille(k+1:n)=setdiff(p1(1:n),fille);
newpop(i,:)=fils; newpop(i+N/2,:)=fille;
end
end
end
III-4 Mutation pour les problmes discrets:
Classiquement l'oprateur de mutation consiste gnralement tirer
alatoirement un gne dans le chromosome et le remplacer par
une valeur alatoire. Si la notion de distance existe, cette valeur
peut tre choisie dans le voisinage de la valeur initiale.



La fonction mutation classique pour les problmes
discrets est la suivante:

function newpop=mutation(pop,pm)
N=size(pop,1); n=size(pop,2);
newpop=pop;
for i=1:N
u=rand(1,1);
if (u<pm)
popibn=dec2bin(pop(i,:),8);
nb=length(popibn); I=randi([1,nb]);
if (popibn(I)==0)
popibn(I)=1;
else popibn(I)=0;
end
pop(i,:) =bin2dec(popibn);
end
end
L aussi ce type de mutation ne peux marcher pour notre problme
car la nouvelle population contiendra des individus qui ne sont pas
forcement des permutations de [1,2,..,n]. Pour remdier cela on va
considrer:

function newpop=mutation(pop,pm)
m=size(pop,1); n=size(pop,2);
newpop=pop;
for i=1:m
u=rand(1,1);
if (u<pm) % sous proba pm
I=randi([1,n-1]);
per=pop(i,:);
perm=per;
perm(I)=per(I+1); perm(I+1)=per(I);
pop(i,:)=perm;
end
end
end
Autre mutation base sur le changement de la place de deux n de ville
tirs alatoirement:

function newpop=mutation(pop,pm)
N=size(pop,1); n=size(pop,2);
newpop=pop;
for i=1:N
u=rand(1,1);
if (u<pm) % sous proba pm
I=randi([1,n]);
J=randi([1,n]);
perm=pop(i,:);
perm(I)=pop(i,J); perm(J)=pop(i,I);
pop(i,:)=perm;
end
end


Ces types de mutation modifie normment la fonction dadaptation,
on prfre souvent utiliser la mutation flip qui consiste permuter les
chromosomes de numros (I,I+1,K,K+1) :

function newpop=mutation_flip(pop,pm)
m=size(pop,1); n=size(pop,2);
newpop=pop;
for i=1:m
u=rand(1,1);
if (u<pm) % sous proba pm
k=randi([1,n-1]); l=randi([k,n-1]);
per=pop(i,:);
perm=per;
perm(I)=per(l+1); perm(I+1)=per(I); pop(i,:)=perm;
per=pop(i,:);
perm=per;
perm(k)=per(k+1); perm(k+1)=per(k); pop(i,:)=perm;

end
end
end
Il faut deux autres sous programmes:

Vectorisation de la fonction f:

Notre fonction ici est le cot pour un circuit not per:

function s=f(per,C,n)
s=C(per(n),per(1));
for i=1:n-1
s=s + C(per(i),per(i+1));
end
end

La fonction fitnesse est le score de tout les individus de la population:

function scores=fitnesse(pop,C,n);
N=size(pop,1); n=size(pop,2);
scores=zeros(1,N);
for i=1:N
scores(i)= 1./(1+ f(pop(i,:),C,n) );
end
end
Graphe de l'historique de convergence:
Ce graphe est indispensable pour suivre lvolution de
la convergence de gnration en gnration

function graphe(g, scores)
% Graphe du meilleure score et du score moyen
% Arguments d'entres:
% g : numros de la gnration
% scores : scores de la gnration
M=max(scores);
m=mean(scores);
plot(g,M,'r*',g,m,'g*');
IV. Programme Principale dun premier AG
Le programme principale AG_PVC1.m pour
notre problme du voyageur de commerce
a donc la structure suivante:
%********************************************%
%######### Paramtres ##########%

% les fonctions suivantes sont dans le mme rpertoire:
% f.m, fitnesse.m, croise.m, mutation_flip.m, croisementpp.m
% selection.m, ranpop.m, graphe.m
% rsolution du problme de voyageur de commerce%
% %%% par Algorithme Gntique %%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all;
% n=nombre de ville
n=8;
% N= nombre d'individu dans chaque population
N=1500;
% C=cot entre les ville c'est un tableau n*n
C=[ 0 240 300 650 700 450 95 74;...
240 0 150 450 530 220 89 94;...
300 150 0 300 360 560 70 130;...
650 450 530 0 60 210 90 709;....
750 530 300 60 0 220 67 256;....
450 220 560 210 220 0 34 90;
550 120 960 210 220 140 0 380;
350 420 260 234100 220 120 0];
% gnrer alatoirement une gnration initiale
pop=ranpop(n,N);
% nombre de generations
nbgen=50;
% Boucle sur les gnrations

for g=1:nbgen

% valuation
scores = fitnesse(pop,C,n);

% graphe

graphe(g,scores);

% selection
[peres,meres]=selection(scores);

% Croisements
pop=croisementpp(pop,peres,meres,pc);

% Mutations
pop=mutation_flip(pop,pm);

end
% Affichage lgendes graphe

legend('Meilleur individu','Individu moyen');
title('Historique de convergence');
xlabel('Generation');
ylabel('Scores');

% Dtermination du meilleur individu

scores = fitnesse(pop,C,n);
[M,I] = max(scores);
disp(['Meilleur itinraire :'],pop(I,:))
disp (['cot du voyage : ',num2str(-1 +(1/M))])
%******************************************************%
V. Elitisme
Durant les gnrations, aprs croisement et mutation, on
risque de perdre le meilleure individu de la population
courante. Il est donc prfrable de le garder durant la
gense, pour cela on procde par litisme (garder llite)
de la manire suivante:
aprs croisement on obtient une nouvelle population:
newpop=croisement(pop,peres,meres,pc);
on obtient alors une nouvelle population constitue par
les anciens individus et les nouveaux individus:
popp=[pop;newpop];
on applique cette nouvelle population loprateur de
mutation:
popp=mutation(popp,pm);
on procde alors par trier, dans cette population double
obtenue poppp, les meilleurs individus:
pop=NewP(popp);

On peut procder autrement:
aprs croisement on obtient une nouvelle
population:
newpop=croisement(pop,peres,meres,pc);
on applique cette nouvelle population
loprateur de mutation:
newpop=mutation(newpop,pm);
on obtient alors une nouvelle population
constitue par les anciens individus et les
nouveaux individus croiss et muts:
popp=[pop;newpop];
on procde alors par trier, dans cette population
double obtenue poppp, les meilleurs individus:
pop=NewP(popp);

La fonction de tris Newpop est la suivante:

function pop=NewP(popp,C,n)
M=size(popp,1);
N=M/2;
pop=zeros(N,n);
scores=zeros(1,M);
scores=fitnesse(popp,C,n);

for i=1:N
[m,j]=max(scores);
pop(i,:)=popp(j,:);
scores(j)=-1e10;
end
end
VI. rsolution finale du problme de voyageur de commerce par
Algorithme Gntique

clear all;
% n=nombre de ville
n=8;
% N= nombre d'individu dans chaque population
N=2000;
%
pc=0.6; pm=0.01;
% C=cot entre les ville c'est une matrice n*n
C=[ 0 240 300 650 700 450 95 74;...
240 0 150 450 530 220 89 94;...
300 150 0 300 360 560 70 130;...
650 450 530 0 60 210 90 709;....
750 530 300 60 0 220 67 256;....
450 220 560 210 220 0 34 90 156;
550 120 960 210 220 140 0 380;
350 420 260 234100 220 120 0];
% gnrer alatoirement une gnration initiale
[pop,popbn]=randpop_perm(n,N);
% nombre de generations
nbgen=50;
% Boucle sur les gnrations
hold on;
for g=1:nbgen
% valuation
scores = fitnesse(pop,C,n);
% graphe
graphe(g,scores);
% selection
[peres,meres]=selection(scores);
% Croisements
newpop=croisement(pop,peres,meres,pc);
% Mutations
newpop=mutation(newpop,pm);
% elitisme
popp=[pop;newpop];
pop=NewP(popp,C,n)
end
% Affichage lgendes graphe

legend('Meilleur individu','Individu moyen');
title('Historique de convergence');
xlabel('Generation');
ylabel('Scores');

% Dtermination du meilleur individu

scores = fitnesse(pop,C,n);
[M,I] = max(scores);
disp(['Meilleur itinraire :', num2str (pop(I,:) ) ])
disp (['Valeur du cot : ',num2str(-1 +1/M)])
%******************************************************%
Autre mutation base sur le changement de la place de deux n de ville
tirs alatoirement:

function newpop=mutation(pop,pm)
m=size(pop,1); n=size(pop,2);
newpop=pop;
for i=1:m
u=rand(1,1);
if (u<pm) % sous proba pm
I=randi([1,n]);
J=randi([1,n]);
perm=pop(i,:);
perm(I)=pop(i,J); perm(J)=pop(i,I);
pop(i,:)=perm;
end
end



Programme
voir le dossier
D:\Algorithe_Genetique_IGA-5ILM\AG-chapitreIII\AG2-PVC