Vous êtes sur la page 1sur 34

MASTER I INFORMATIQUE 2005/2006 LIU Y INAN

Rapport de Mmoire Application des Algorithmes Gntiques au Problme du Voyageur de Commerce

Encadrants : M. Nakechbandi J. Boukachour

U NIVERSIT DU H AVRE

Table des matires


1 2 Introduction Problme de Voyageur de Commerce 2.1 2.2 2.3 2.4 3 Thoriquement . . . . . . . . . . . . . . . . . . . . . . . . . . . Pratiquement . . . . . . . . . . . . . . . . . . . . . . . . . . . . Complexit du Problme . . . . . . . . . . . . . . . . . . . . . . Intrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 6 6 7 7 8 9 9 9 9 9 10 11 11 11 11 12 13 1

Algorithme Gntique 3.1 3.2 3.3 La Cration de la Population Initiale . . . . . . . . . . . . . . . . Lvaluation des Individus . . . . . . . . . . . . . . . . . . . . . La Cration de Nouveaux Individus . . . . . . . . . . . . . . . . 3.3.1 Les Selections . . . . . . . . . . . . . . . . . . . . . . . 3.3.1.1 3.3.1.2 3.3.1.3 3.3.1.4 3.3.2 La Selection par Roulette . . . . . . . . . . . . La Selection par Rang . . . . . . . . . . . . . . La Selection par Tournoi . . . . . . . . . . . . Llitisme . . . . . . . . . . . . . . . . . . . .

Les Croisements . . . . . . . . . . . . . . . . . . . . . . 3.3.2.1 3.3.2.2 3.3.2.3 Le Croisement CPA . . . . . . . . . . . . . . . Le Croisement 1X . . . . . . . . . . . . . . . . Le Croisement MPX . . . . . . . . . . . . . . .

Master I 2005/2006

TABLE DES MATIRES

3.3.2.4 3.3.2.5 3.3.3 3.3.4 3.3.5 4

Le Croisement OX . . . . . . . . . . . . . . . . Le Croisement CX . . . . . . . . . . . . . . . .

14 15 15 16 16 18 18 18 20 21 21 21 22 25 25 26 26 27 29 30 32

La Mutation . . . . . . . . . . . . . . . . . . . . . . . . . LInsertion des Nouveaux Individus dans la Population . . Ritration du processus . . . . . . . . . . . . . . . . . .

Application de lAG au PVC 4.1 4.2 LObjectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les Statistics sur les Paramtres de LAG . . . . . . . . . . . . .

5 6

Conclusion Rfrences 6.1 6.2 Site Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

A LInterface Graphiique B Codage des Oprateurs B.1 Codage de Selection Par Roulette . . . . . . . . . . . . . . . . . . B.2 Codage de Selection Par Rang . . . . . . . . . . . . . . . . . . . B.3 Codage de Selection Par Tournoi . . . . . . . . . . . . . . . . . . B.4 Codage de Croisement CPA . . . . . . . . . . . . . . . . . . . . B.5 Codage de Croisement 1X . . . . . . . . . . . . . . . . . . . . . B.6 Codage de Croisement MPX . . . . . . . . . . . . . . . . . . . . B.7 Codage de Croisement OX . . . . . . . . . . . . . . . . . . . . .

Master I 2005/2006

TABLE DES MATIRES

Rsum
Le problme du voyageur de commerce tant combinatoire (le nombre de solutions est de lordre n !, n nombre de villes), le but du projet est dappliquer des algorithmes gntiques pour trouver le meilleur circuit de cot minimal. La mise en oeuvre de cet algorithme consiste particulirement intgrer des nouveaux oprateurs de slection et de croisement gntique.

Master I 2005/2006

Remerciements
Je tiens remercier : M. Nakechbandi et M. Boukachour pour leur encadrement et leur nombreuses explications du sujet.

Master I 2005/2006

Chapitre 1 Introduction
Les algorithmes gntiques ont t invents par Jonh Holland dans les annes 60. Repris notamment par Golberg dans les annes 70,Le principe des algorithmes gntiques sinspire directement des lois de la slection naturelle, dcrites par Darwin. cette technique connait aujourdhui un franc succs. On lutilise dans la rsolution de problmes complexes, ncessitant des temps de calcul levs. Les algorithmes gntiques sont des algorithmes doptimisation sappuyant sur des techniques drives de la gntique et des mcanismes dvolution de la nature : croisements, mutations, slections, etc... Ils appartiennent la classe des algorithmes volutionnaires. Les applications des AG sont multiples : traitement dimage (alignement de photos satellites, reconnaissance de suspects...), optimisation demplois du temps, optimisation de design, apprentissage des rseaux de neurones [Renders, 1995], etc. Le but de ce projet est dappliquer lalgorithme gntique au problme de voyageur de commerce, la mise en uvre de cet algorithme consiste particulirement intgrer des nouveaux oprateurs de slection et de croisement gntique.

Master I 2005/2006

Chapitre 2 Problme de Voyageur de Commerce


2.1 Thoriquement

soit un graphe G = (S, A) , problme est de trouver une parcours qui passe par tous les sommets une et une seule fois et qui soit de poids minimal. En general, on travaille sur un graphe complet.

2.2

Pratiquement

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 an de minimiser la distance parcourue ? La notion de distance

Master I 2005/2006

CHAPITRE 2. PROBLME DE VOYAGEUR DE COMMERCE

peut-tre remplace par dautres notions comme le temps quil met ou largent quil dpense : dans tous les cas, on parle de cot.

2.3

Complexit du Problme

La complexit du problme crot comme la factorielle du nombre de villes. Si lon considre des permutations simples, il existe 3 628 000 permutations de 10 villes. Pour 100 villes, on passe 10 puissance 158. La complexit du problme crot de manire plus que polynomiale (problme dit NP). n 5 10 15 20 25 Nombre de possibilits Temps de calcul 12 micro-seconde 181440 deuxime de seconde 43 milliards dizaine dheures 15 60.10 milliers dannes 21 310.10 milliards dannes

2.4

Intrt

Le PVC fournit un exemple dtude dun problme NP-complets dont les mthodes de rsolution peuvent sappliquer dautres problmes de mathmatiques discrte. 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 ou, dans lindustrie, pour trouver la plus courte distance que devra parcourir le bras mcanique dune machine pour percer les trous dun circuit imprim (les trous reprsentent les villes).

Master I 2005/2006

Chapitre 3 Algorithme Gntique


Les algorithmes gntiques sinspirent de lvolution des espces dans leur cadre naturel. Les espces sadaptent leur cadre de vie qui peut voluer, les individus de chaque espce se reproduisent, crant ainsi de nouveaux individus, certains subissent des modications de leur ADN, certains disparaissent .... Un algorithme gntique va reproduire ce modle dvolution dans le but de trouver des solutions pour un problme donn. 1. Une population sera un ensemble dindividus. 2. Un individu sera une rponse un problme donn, quelle soit ou non une solution valide du problme. 3. Un gne sera une partie dune rponse au problme, donc dun individu. 4. Une gnration est une itration de notre algorithme. Un algorithme gntique va faire voluer une population dans le but damliorer les individus. Le droulement dun algorithme gntique peut tre dcoup en cinq parties : 1. La cration de la population initiale. 2. Lvaluation des individus. 3. La cration de nouveaux individus. 4. Linsertion des nouveaux individus dans la population. 5. Ritration du processus.

Master I 2005/2006

CHAPITRE 3. ALGORITHME GNTIQUE

3.1

La Cration de la Population Initiale

La population initiale sera cre de manire alatoire condition que chaque individus dans la populations cre soit une solution du problme. La taille de la population initiale doit tre raisonnablement grande en tenant compte la fois de la qualit des solutions trouves et du temps dexcution de notre algorithme.

3.2

Lvaluation des Individus

Aprs avoir cr la population initiale, nous attribuons une valeur dadaptation ou une note chaque individu selon leur performance par rapport le cot de distance totale. Il faudrait donc crer une fonction dvalution pour valuer la qualit de chaque individu.

3.3

La Cration de Nouveaux Individus

Une fois que nous avons ni dvaluer nos individus, nous allons crer de nouveaux individus qui seront la nouvelle gnration de notre population, et nous esperons que certain entre eux seront de meilleurs solutions notre problme. Dans notre programme, nous allons utiliser des diffrents oprateurs pour cer notre nouvelle gnration.

3.3.1
3.3.1.1

Les Selections
La Selection par Roulette

Les parents sont slectionns en fonction de leur performance. Meilleur est le rsultat cod par un chromosome, plus grandes sont ses chances dtre slectionn. Il faut imaginer une sorte de roulette de casino sur laquelle sont placs tous les chromosomes de la population, la place accorde chacun des chromosomes tant en relation avec sa valeur dadaptation. Ensuite, la bille est lance et sarrte sur un chromosome. Les meilleurs chromosomes peuvent ainsi tre tirs plusieurs fois et les plus mauvais ne jamais tre slectionns. Cela peut tre simul par lalgorithme suivant :

Master I 2005/2006

CHAPITRE 3. ALGORITHME GNTIQUE

F IG . 3.1 Schma dune roulette

1. On calcule la somme S1 de toutes les fonctions dvaluation dune population. 2. On gnre un nombre r entre 0 et S1. 3. On calcule ensuite une somme S2 des valuations en sarrtant ds que r est dpass. 4. Le dernier chromosome dont la fonction dvaluation vient dtre ajoute est slectionn. 3.3.1.2 La Selection par Rang

La slection prcdente rencontre des problmes lorsque la valeur dadaptation des chromosomes varient normment. Si la meilleure fonction dvaluation dun chromosome reprsente 90% de la roulette alors les autres chromosomes auront trs peu de chance dtre slectionns et on arriverait une stagnation de lvolution. La slection par rang trie dabord la population par leur scores. Ensuite, chaque chromosome se voit associ un rang en fonction de sa position. Ainsi le plus mauvais chromosome aura le rang 1, le suivant 2, et ainsi de suite jusquau meilleur chromosome qui aura le rang N. La slection par rang dun chromosome est la mme que par roulette, mais les proportions sont en relation avec le rang plutt quavec la valeur de lvaluation. Le tableau suivant fournit un exemple de slection par rang. Avec cette mthode de slection, tous les chromosomes ont une chance dtre slectionns. Cependant, elle conduit une convergence plus lente vers la bonne solution. Ceci est d au fait que les meilleurs chromosomes ne diffrent pas normment des plus mauvais.

Master I 2005/2006

10

CHAPITRE 3. ALGORITHME GNTIQUE

Chromosomes Probabilits initiales Rang Probabilits nales

1 89% 6 29%

2 5% 5 24%

3 1% 1 5%

4 4% 4 19%

5 3% 3 14%

6 2% 2 9%

Total 100% 21 9%

TAB . 3.1 Exemple de slection par rang pour 6 chromosomes.

3.3.1.3

La Selection par Tournoi

Sur une population de m chromosomes, on forme m paires de chromosomes. Dans les paramtres de lAG, on dtermine une probabilit de victoire du plus fort. Cette probabilit reprsente la chance qua le meilleur chromosome de chaque paire dtre slectionn. Cette probabilit doit tre grande (entre 70% et 100%). A partir des m paires, on dtermine ainsi m individus pour la reproduction. 3.3.1.4 Llitisme

A la cration dune nouvelle population, il y a de grandes chances que les meilleurs chromosomes soient perdus aprs les oprations dhybridation et de mutation. Pour viter cela, on utilise la mthode dlitisme. Elle consiste copier un ou plusieurs des meilleurs chromosomes dans la nouvelle gnration. Ensuite, on gnre le reste de la population selon lalgorithme de reproduction usuel. Cette mthode amliore considrablement les algorithmes gntiques, car elle permet de ne pas perdre les meilleurs solutions.

3.3.2
3.3.2.1

Les Croisements
Le Croisement CPA

Cest une mthode qui sagit un croisement en deux points. Nous suivons la mthode suivante : 1. On choisi alatoirement deux points de dcoupe. 2. On interverti, entre les deux parcours, les parties qui se trouvent entre ces deux points. 3. On supprime, lextrieur des points de coupe, les villes qui sont dj places entre les points de coupe. Master I 2005/2006 11

CHAPITRE 3. ALGORITHME GNTIQUE

4. On recense les villes qui napparaissent pas dans chacun des deux parcours. 5. On remplit alatoirement les trous dans chaque parcours.

3.3.2.2

Le Croisement 1X

Il est dsigne par le sigle 1X(ou 1 rappelle quil sagit dun croisement en 1 point, X symbolise les croisements ; en toute rigueur, il faudrait le designer par 1OX pour croisement dordre a 1 point). Il commence comme loprateur simple a un point par une recopie du dbut du pere(resp. de la mere) et il complte la n du chromosome avec les valeurs numriques manquantes dans lordre de la mere (resp. du pere). En echangeant debut et n dans la description de ce croisement, on peut obtenir un autre ls et une autre lle selon un principe similaire ; ceci peut permettre, par exemple, de garder les deux meilleurs enfants obtenus, ce qui amliore la qualit de ce croisement. le tableau illustre les tapes du croisement 1X. p1 = (123|456789) p2 = (452|187693)

e1 = (123|8xxxxx)

e2 = (456|7xxxxx)

e1 = (123|87xxxx)

e2 = (456|78xxxx)

e1 = (123|876xxx) Master I 2005/2006

e2 = (456|789xxx) 12

CHAPITRE 3. ALGORITHME GNTIQUE

e1 = (123|8769xx)

e2 = (456|7891xx)

e1 = (123|87694x)

e2 = (456|78912x)

e1 = (123|876945) 3.3.2.3 Le Croisement MPX

e2 = (456|789123)

Le PMX fut propos par Goldberg et Lingle [GL85]. Le but tait de construire un enfant par choix de sous squences dun ordonnancement dun des parents et de prserver lordre et la position dautant de lots que possible des autres parents. La sous squence de lordonnancement est slectionne par choix de deux points de coupure alatoire, lesquels servent de frontire pour lopration de remplacement. Considrons par exemple les deux parents : p1 = (123|4567|89) p2 = (452|1876|93)

Ces deux parents vont produire deux enfants. Premirement, les segments compris entre les points de coupures sont changs : e1 = (xxx|1876|xx) e2 = (xxx|4567|xx)

Lchange dfnit ainsi une srie de permutations pour les autres lots : 1 4, 8 5, 7 6, 6 7. Certaines positions de lots sont donc inchanges. e1 = (x23|1876|x9) e2 = (xx2|4567|93)

Les deux enfants obtenus sont donc toujours viables (pas deux fois le mme lot dans le vecteur) et on vite ainsi lutilisation dun oprateur de rparation. Finalement, le premier x du vecteur enfant e1 est remplac par 4 en raison de la permutation 1 4. De la mme manire, on ralise les permutations pour les autres x. Les vecteurs enfants naux sont donc : Master I 2005/2006 13

CHAPITRE 3. ALGORITHME GNTIQUE

e1 = (423|1876|59)

e2 = (182|4567|93)

Comme nous venons de le voir, cet algorithme prsente lavantage de fournir des ordonnancements viables. Or, dans cet exemple, nous considrons uniquement des lots positifs (placement en marche avant). Nous avons donc modi lalgorithme standard pour prendre en compte les deux sens de placement des lots : le placement en marche arrire et le placement en marche avant. 3.3.2.4 Le Croisement OX

Le crossover OX, propos par Davis [Dav85a], construit un enfant par choix de sous-squences dun ordonnancement dun des parents et prserve lordre relatif des lots des autres parents. Par exemple, soit deux parents p1 = (123|4567|89) p2 = (452|1876|93)

Ces deux parents vont produire deux enfants. Premirement, les segments entre points de coupures sont copis. e1 = (xxx|1876|xx) e2 = (xxx|4567|xx)

Ensuite, il suft de partir du point de coupure dun des parents, les lots de lautre parent sont copis dans le mme ordre, omettant les symboles dj prsents. Lorsque lon atteint la n du vecteur, on continue depuis le premier emplacement de la chane. La squence de lots issue du second parent est donc : 93218 Cette squence est place dans le premier enfant. Le point de dpart est la seconde coupure. e1 = (218|4567|93) De la mme manire, on obtient le deuxime enfant : e2 = (345|1876|92) Dans ce cas aussi, les enfants sont toujours viables. Master I 2005/2006 14

CHAPITRE 3. ALGORITHME GNTIQUE

3.3.2.5

Le Croisement CX

Le crossover CX, propos par Oliver [OSH87], engendre un enfant dans tous les cas tel que chaque lot provient dun des parents. p1 = (123456789) p2 = (412876935)

Lenfant engendr est obtenu en prenant le premier lot du premier parent e1 = (1xxxxxxxx) e2 = (4xxxxxxxx)

Ensuite, chaque lot doit tre pris dans un des parents, la mme position. Il ny a pas de choix possible. Le prochain lot considrer est le lot 4. e1 = (1xx4xxxxx) e2 = (4xx8xxxxx)

Le lot 4, dans le parent p1, implique le lot 8 dans le parent p2. e1 = (1xx4xxx8x) e2 = (4xx8xxx3x)

On continue ainsi jusqu la n du cycle et on obtient : e1 = (1234xxx8x) e2 = (4128xxx3x)

On complte alors en changeant les lots restants des deux parents, on obtient : e1 = (123476985) e2 = (412856739)

3.3.3

La Mutation

La mutation gnre des erreurs de recopie, an de crer un nouvel individu qui nexistait pas auparavant. Le but est dviter lAG de converger vers des extrema locaux de la fonction et de permettre de crer des lments originaux. Si elle gnre un individu plus faible lindividu est limin. La probabilit de mutation reprsente la frquence laquelle les gnes dun chromosome sont muts. Master I 2005/2006 15

CHAPITRE 3. ALGORITHME GNTIQUE

Sil ny a pas de mutation, le ls est insr dans la nouvelle population sans changement. Si la mutation est applique, une partie du chromosome est change. La mutation est prvue pour viter au AG de senliser dans des optima locaux. Mais si elle est trop frquente, le AG est orient vers une recherche alatoire de la bonne solution. Gnralement, La mthode de mutation consiste en une permutation de deux villes. Nous sommes certains que les individus muts auront toujours la forme dune solution potentielle car nous ne changeons que lordre des ville. Par exemple : {A,B,C,D,E,F,G,H,I,J} pourra tre mut en {A,B,H,D,E,F,G,C,I,J}.

3.3.4

LInsertion des Nouveaux Individus dans la Population

Une fois que nous avons cr de nouveaux individus que ce soit par croisement ou par mutation, il nous faut slectionner ceux qui vont continuer participer ld lamlioration de notre population. Une mthode relativement efcace consiste insrer les nouveaux individus dans la population, trier cette population selon le score(la valeur dadaptation) de ses membres, et ne conserver que les N meilleurs individus. Ici, dans notre programme, nous allons considrer que N soit la taille de la population.

3.3.5

Ritration du processus

Au fait, nous ferons les quatre tapes prsdentes en incrementant le nombre de gnration, tant que le nombre de gnration est infrieur au nombre maximum de gnration. Et le nombre maximum de gnration peut tre x avec un nombre assez grand selon le problme rsoudre. Une fois le nombre maximum de gnrations atteint, vous obtenez une population de solutions. Mais rien ne vous dit que la solution thorique optimale aura t trouve. Les solutions se rapprochent des bonnes solutions, mais sans plus. Ce nest pas une mthode exacte.

Master I 2005/2006

16

CHAPITRE 3. ALGORITHME GNTIQUE

F IG . 3.2 Schma du fonctionnement de lalgorithme gntique

Master I 2005/2006

17

Chapitre 4 Application de lAG au PVC


4.1 LObjectif

Lobjectif de ce projet est dintgrer lalgorithme gntique avec les nouveaux oprateurs de selection et de croisement dans un ensemble des algorithmes qui peuvent tous tre utilises rsoudre le problme de voyageur de commerce sous une interface graphique dans laquelle on pourra paramtriser et lancer lalgorithme gntique.

4.2

Les Statistics sur les Paramtres de LAG

Comme il y a plusieurs types de loprapteur, et des paramtres, nous prfrons bien savoir quelle est la diffrences de lun et lautre doprateur, et des choix de paramtre pour un rsultat obtenu. Jai donc ralis une statistique qui sest bas sur le mme problme(le mme plan des villes) et sest stabilis sur vight fois de tests en utilisant exactement les mme paramtres et les mme oprateurs. An de voir la performance et lfcacit de chaque algorithme, jai galement fait une statistique avec la distance nale et le temps dexcution sur le mme problme.

Master I 2005/2006

18

CHAPITRE 4. APPLICATION DE LAG AU PVC

TAB . 4.1 Tableau de Statistique sur les Paramtres de lAG Nombre de Croisement Probabilit Selection Probabilit Villes de Croisede Mutament tion 20 CPA 100% Roulette 0.1 20 CPA 60% Roulette 0.1 20 CPA 100% Roulette 0.02 20 CPA 100% Roulette 0.2 20 1X 100% Roulette 0.1 20 OX 100% Roulette 0.1 20 CPA 100% Rang 0.1 20 CPA 100% Tounoi 0.1

Distance Moyenne 121.4 99.5 151.0 102.2 101.9 36.7 133.0 193.2

Ecart Type 2253 2136 2248 2244 2159 2068 2289 2322

TAB . 4.2 Application des Algorithmes diffrents Algorithmes 20 Villes 50 Villes 100 Villes Distance Temps(ms) Distance Temps(ms) Distance Temps(ms) PPV 2371 0 3475 0 4607 0 Insertion 2025 0 3512 0 4695 10 2 change 1978 0 3107 0 4098 10 Prim 2326 11 3678 70 5288 531 llastique 1975 3054 3073 45015 4652 580735 Recuit 1978 2056 3054 140 4213 541 Algo D 4315 0 8156 20 11916 40 AG 1941 1232 3013 3956 5913 17696

Master I 2005/2006

19

Chapitre 5 Conclusion
Lintrt de ce projet a t pour moi, la mise en uvre de lalgorithme gntique qui est largement utilis dans la recherche scientique. Aprs avoir plusieurs tests du programme, jai dcouvert deux points o je me suis tromp dessus : 1. Premirement, javait pens que plus le nombre de population est grand, plus on a la chance de trouver la meillieur solution, cependant cette ide nest pas correcte. En effet, surtout pour le grand nombre de villes, par exemple 200 villes, comme le nombre de population est trs grand, le temps dexcution est dj archilong, et en mme temps, la distance ne baisse pas rapidement non plus du fait que on tombe dans une population trs large, et on na pas de grande chance de slectionner les meilleur parents an de produire la nouvelle gnration. Par consquent, quand le nombre maximum de gnration atteint, on ne trouve pas une bonne solution que lon a prvue. 2. En fait, le deuxime point est quil me reste, dans le programme, un problme que je narrive pas r soudre, cest que lorsque le nombre de villes est pass 200, le rsultat de lAG est peu prs deux fois plus grand que celui de lalgorithme Plus Proche Voisin. Au dpart, javais pens que le nombre maximum de gnration ntait pas assez grand, puis jai mis linnie pour le nombre maximum de gnration, et jai galement incrment le nombre de stagnation, la solution(distance) a t amliore 45%(par exemple solution ancienne : 18560, solution actuelle : 10506), mais en tout cas, la solution nest jamais infrieur 10000, du coup la solution de plus proche voisin est 6750.

Master I 2005/2006

20

Chapitre 6 Rfrences
6.1 Site Web

Algorithme gntique : http://sis.univ-tln.fr/~tollari/TER/AlgoGen1/ node5.html Chiffrement volutionniste : http://www.revue-eti.net/document.php? id=858 Rsolution de problme Voyageur de commerce : http://wwwsi.supelec. fr/yb/projets/algogen/VoydeCom/VoyDeCom.html LAlgorithme gntique : http://www.chez.com/produ/badro/ LesAlgorithmes gntiques : http://khayyam.developpez.com/articles/ algo/genetic/#L3.1.3

6.2

Documents

Thse de Doctorat de lUniversit du Havre : TheseJeanPhilippeVacher.pdf (367 pages) Algorihthmes de Graphe : chap3_lacomme.pdf (27 pages)

Master I 2005/2006

21

Annexe A LInterface Graphiique

F IG . A.1 Linterface avant le lancement des algorithmes

Master I 2005/2006

22

ANNEXE A. LINTERFACE GRAPHIIQUE

F IG . A.2 Linterface

Master I 2005/2006

23

ANNEXE A. LINTERFACE GRAPHIIQUE

F IG . A.3 Linterface

Master I 2005/2006

24

Annexe B Codage des Oprateurs


B.1 Codage de Selection Par Roulette

public int[] selectionParRoulette(){ int[] parents = new int[2]; double sommeTotale = moyenneScore()*size(); double bille = genAleatoire.nextDouble()*sommeTotale; double somme=0.0; int indice = 0; for(int i=0; i<2; i++){ somme = 0.0; while(somme < bille){ indice = genAleatoire.nextInt(size()); somme = somme + individuAt(indice).getScore(); } parents[i] = indice; }

Master I 2005/2006

25

ANNEXE B. CODAGE DES OPRATEURS

return parents; }

B.2

Codage de Selection Par Rang

public int[] selectionParRang(){ int[] parents = new int[2]; int RangTotal = 0; for(int i=0; i<size(); i++){ RangTotal = RangTotal + i; } int bille = genAleatoire.nextInt(RangTotal); int rang, indice = 0; for(int i=0; i<2; i++){ rang = 0; while(rang < bille){ indice = genAleatoire.nextInt(size()); rang = rang + indice; } parents[i] = size()-indice-1; } return parents; }

B.3

Codage de Selection Par Tournoi

public int[] selectionParTournoi(){

Master I 2005/2006

26

ANNEXE B. CODAGE DES OPRATEURS

int[] parents = new int[2]; int partenaire; parents[0] = genAleatoire.nextInt(nbMaxIndividus); parents[1] = genAleatoire.nextInt(nbMaxIndividus); partenaire = genAleatoire.nextInt(nbMaxIndividus); if(individuAt(parents[0]).getScore()<individuAt(partenaire).getScore() ) parents[0] = partenaire; partenaire = genAleatoire.nextInt(nbMaxIndividus); if(individuAt(parents[1]).getScore()<individuAt(partenaire).getScore()) parents[1] = partenaire; return parents; }

B.4

Codage de Croisement CPA

public Individu[] croisementCPA (Individu partenaire){ Individu[] fils = new Individu[2]; int[] parcoursFils0 = new int[nbVilles]; int[] parcoursFils1 = new int[nbVilles]; Vector villesAPlacerFils0; Vector villesAPlacerFils1; int inf, sup; villesAPlacerFils0 = new Vector(nbVilles); villesAPlacerFils1 = new Vector(nbVilles); for(int i=0; i<nbVilles; i++){ villesAPlacerFils0.addElement(parcours[i]); villesAPlacerFils1.addElement(partenaire.getPoint(i)); parcoursFils0[i]=-1; parcoursFils1[i]=-1; }

Master I 2005/2006

27

ANNEXE B. CODAGE DES OPRATEURS

inf = random.nextInt(nbVilles); sup = inf + random.nextInt(nbVilles - inf); for (int i=inf ; i < sup ; i++){ parcoursFils0[i] = parcours[i]; villesAPlacerFils0.removeElement((Object)parcours[i]); parcoursFils1[i] = partenaire.getPoint(i); villesAPlacerFils1.removeElement((Object)partenaire.getPoint(i)); } for (int i=0; i < nbVilles ; i++){ if(i == inf) i = sup; if(villesAPlacerFils0.contains(partenaire.getPoint(i))){ parcoursFils0[i] = partenaire.getPoint(i); villesAPlacerFils0.removeElement((Object)partenaire.getPoint(i)); } if(villesAPlacerFils1.contains(parcours[i])){ parcoursFils1[i] = parcours[i]; villesAPlacerFils1.removeElement(parcours[i]); } } int temp; for (int i=0; i < nbVilles; i++){ if(i == inf) i = sup; if(parcoursFils0[i] == -1){ temp = random.nextInt(villesAPlacerFils0.size()); parcoursFils0[i] = (Integer)villesAPlacerFils0.elementAt(temp); villesAPlacerFils0.removeElementAt(temp); } if(parcoursFils1[i] == -1){ temp = random.nextInt(villesAPlacerFils1.size()); parcoursFils1[i] = (Integer)villesAPlacerFils1.elementAt(temp); villesAPlacerFils1.removeElementAt(temp); } } Master I 2005/2006 28

ANNEXE B. CODAGE DES OPRATEURS

fils[0] = new Individu(parcoursFils0); fils[1] = new Individu(parcoursFils1); return fils; }

B.5

Codage de Croisement 1X

public Individu[] croisement1X (Individu partenaire){ Individu[] fils = new Individu[2]; int[] enfant1 = new int[nbVilles]; int[] enfant2 = new int[nbVilles]; int posDecoupage = random.nextInt(nbVilles); for(int i=0; i < posDecoupage; i++){ enfant1[i] = parcours[i]; enfant2[i] = partenaire.getPoint(i); } int pos=posDecoupage; while(pos<nbVilles){ for(int i=0; i<nbVilles; i++){ if(!exist(parcours,posDecoupage,partenaire.getPoint(i))){ enfant1[pos] = partenaire.getPoint(i); pos++; } } } pos=posDecoupage; while(pos<nbVilles){ for(int i=0; i<nbVilles; i++){ if(!exist(partenaire.parcours,posDecoupage,parcours[i])){ enfant2[pos] = parcours[i]; pos++; } Master I 2005/2006 29

ANNEXE B. CODAGE DES OPRATEURS

} } fils[0] = new Individu(enfant1); fils[1] = new Individu(enfant2); return fils; }

B.6

Codage de Croisement MPX

public Individu[] croisementMPX (Individu partenaire){ Individu[] fils = new Individu[2]; int[] enfant1 = new int[nbVilles]; int[] enfant2 = new int[nbVilles]; int posInf = random.nextInt(nbVilles/2); int posSup = posInf + random.nextInt(nbVilles - posInf); for(int i=0; i<nbVilles; i++){ enfant1[i] = -1; enfant2[i] = -1; } for(int i=posInf; i<posSup; i++){ enfant1[i] = parcours[i]; enfant2[i] = partenaire.getPoint(i); } // pour creer lenfant 1 for(int i=0; i<posInf; i++){ if(!exist(enfant1,posSup,partenaire.getPoint(i))){ enfant1[i] = partenaire.getPoint(i); } else if(!exist(enfant1,posSup,parcours[i])){ enfant1[i] = parcours[i]; } else{ for(int j=posInf; j<posSup; j++){ if(!exist(enfant1,posSup,partenaire.getPoint(j))){ Master I 2005/2006 30

ANNEXE B. CODAGE DES OPRATEURS

enfant1[i] = partenaire.getPoint(j); j = posSup; } } } } for(int i=posSup; i<nbVilles; i++){ if(!exist(enfant1,i,partenaire.getPoint(i))){ enfant1[i] = partenaire.getPoint(i); } else if(!exist(enfant1,i,parcours[i])){ enfant1[i] = parcours[i]; } else{ for(int j=posInf; j<posSup; j++){ if(!exist(enfant1,i,partenaire.getPoint(j))){ enfant1[i] = partenaire.getPoint(j); j = posSup; } } } }

// pour creer lenfant 2 for(int i=0; i<posInf; i++){ if(!exist(enfant2,posSup,parcours[i])){ enfant2[i] = parcours[i]; } else if(!exist(enfant2,posSup,partenaire.getPoint(i))){ enfant2[i] = partenaire.getPoint(i); } else{ for(int j=posInf; j<posSup; j++){ if(!exist(enfant2,posSup,parcours[j])){ enfant2[i] = parcours[j]; j = posSup; } } } Master I 2005/2006 31

ANNEXE B. CODAGE DES OPRATEURS

} for(int i=posSup; i<nbVilles; i++){ if(!exist(enfant2,i,parcours[i])){ enfant2[i] = parcours[i]; } else if(!exist(enfant2,i,partenaire.getPoint(i))){ enfant2[i] = partenaire.getPoint(i); } else{ for(int j=posInf; j<posSup; j++){ if(!exist(enfant2,i,parcours[j])){ enfant2[i] = parcours[j]; j = posSup; } } } } fils[0] = new Individu(enfant1); fils[1] = new Individu(enfant2); return fils; }

B.7

Codage de Croisement OX

public Individu[] croisementOX (Individu partenaire){ Individu[] fils = new Individu[2]; int[] enfant1 = new int[nbVilles]; int[] enfant2 = new int[nbVilles]; int posInf = random.nextInt(nbVilles/2); int posSup = posInf + random.nextInt(nbVilles - posInf); for(int i=0; i<nbVilles; i++){ enfant1[i] = -1; enfant2[i] = -1; } for(int i=posInf; i<posSup; i++){ Master I 2005/2006 32

ANNEXE B. CODAGE DES OPRATEURS

enfant1[i] = parcours[i]; enfant2[i] = partenaire.getPoint(i); } for(int i = 0; i < nbVilles-posSup+posInf; i++){ for(int j = 0; j < nbVilles; j++){ if(!exist(enfant1,nbVilles,partenaire.getPoint((posSup+j)%nbVilles))){ enfant1[(posSup+i)%nbVilles] = partenaire.getPoint((posSup+j)%nbVilles); j = nbVilles; } } for(int j = 0; j < nbVilles; j++){ if(!exist(enfant2,nbVilles,parcours[(posSup+j)%nbVilles])){ enfant2[(posSup+i)%nbVilles] = parcours[(posSup+j)%nbVilles]; j = nbVilles; } } }

fils[0] = new Individu(enfant1); fils[1] = new Individu(enfant2); return fils; }

Master I 2005/2006

33