Voyageur de commerce (**)

publicité
Sujet 3
Voyageur de commerce (**)
Le problème du voyage de commerce est un problème algorithmique bien connu, et qui possède de
nombreuses applications. Il consiste en la recherche d’un trajet optimal permettant à un voyageur de
commerce de partir de chez lui, de parcourir plusieurs villes sans passer deux fois par la même ville et
de revenir chez lui en un temps ou une distance minimal. De nombreuses méthodes ont été développées
pour résoudre ce problème. Le présent projet de propose de mettre en oeuvre un algorithme génétique.
1
Génération de la feuille de route du voyageur
Dans un premier temps, il faut se définir un ensemble de villes à parcourir et les placer sur une carte.
Pour cela, on placera un ensemble de n villes repérées par leurs coordonnées 0 < x < 1, 0 < y < 1 sur
une carte à deux dimensions. On supposera que le temps de trajet entre deux villes est proportionnel
à la distance physique qui les sépare et que le voyageur habite la première des villes.
• Écrire un programme qui génère aléatoirement les positions de n villes. On pourra utiliser la
fonction rand du langage C. Les résultats seront stockés dans un tableau ordonné de x et un
tableau ordonné de y.
• Enregistrer ces positions dans un fichier et les visualiser avec Gnuplot.
9
Sujet 3. Voyageur de commerce (**)
2
Solution exacte
La seule solution (ou presque) pour trouver exactement le trajet minimal est de calculer la
distance associée à toutes les possibilités de trajet et de les comparer. Il s’agit cependant d’une
solution coûteuse qui ne peut être mise en oeuvre que pour un nombre de villes faible.
• Combien de trajets différents qui le font passer par un nombre de villes n avant de revenir chez
lui le voyageur peut-il parcourir ?
• Écrire un programme qui construit tous les trajets possibles, passant une seul fois par n  10
villes et le ramenant chez lui 1 . Chaque trajet sera représenté par un vecteur qui contient dans
!
l’ordre le numéro des villes parcourues (par ex. chemin = (3, 1, 4, 0, 2) correspondra au trajet
qui parcourt dans l’ordre les villes numéro 3, 1, 4, 0 puis 2).
• Écrire une fonction qui permet de calculer la distance parcourue lors d’un trajet. Pour chaque
trajet testé, mesurer et enregistrer la distance parcourue.
• Retenir le trajet le plus court et le visualiser avec gnuplot.
• En extrapolant le temps de calcul à des problèmes avec plus de villes, estimer le nombre maximal
de villes que cette méthode peut traiter en moins de quelque minutes.
3
Algorithme génétique
Lorsque le nombre de villes devient trop important, cette méthode ne peut plus être mise en pratique et il faut utiliser des méthodes alternatives et approchées. Un exemple est l’algorithme génétique.
3.1
principe
Les algorithmes génétiques partent d’une population d’individus initiale et la font évoluer de manière aléatoire avec des critères de reproduction, d’évolution et de sélection dont le but est d’obtenir,
génération après génération, des individus mieux adaptés aux contraintes extérieurs. Ici par exemple,
on peut voir le problème de la manière suivante :
– Population de départ : Un patron embauche un nombre initial de voyageurs et leur demande
de parcourir la même liste de villes. Ne connaissant pas le chemin le plus court, il laisse chaque
voyageur décider de son propre chemin. Au retour de tous les voyageurs, le patron fait un petit
bilan et avant de lancer une nouvelle tournée, il peut décider d’effectuer un certain nombre
d’aménagements.... De même, les voyageurs eux-mêmes peuvent décider de modifier leur trajet.
– Sélection : Le patron peut par exemple décider de licencier le voyageur le plus lent qui consomme
aussi le plus de carburant (voire plusieurs voyageurs)
– Mutation : De peur d’être les suivants sur la liste, les voyageurs peuvent décider d’essayer un
chemin légèrement différent de leur précédent (en intervertissant par exemple deux villes ou plus
tirées au hasard).
– Hybridation : Deux voyageurs peuvent aussi échanger des informations dans l’espoir d’améliorer leur temps de trajet.
– Reproduction : Un nouveau voyageur peut être embauché et formé par certains des anciens
(voire plusieurs).
Après ces étapes, les voyageurs re-partent en tournée. Quand il reviennent, le patron re-fait le point, et
le processus se répète ainsi un certain nombre de fois. Si les critères de sélection, mutation, hybridation,
reproduction sont définis correctement, les temps de trajet des voyageurs diminuent cycle après cycle
et convergent vers une solution que l’on espère être le chemin le plus court. Selon les critères, la
convergence est plus ou moins rapide.
1. À ce stade, il ne sera pas nécessaire de se préoccuper de rejeter les trajets qui correspondent à d’autres trajets
déjà testés, mais dans le sens inverse.
10
3.2
Travail
• Définir une carte de n  10 villes (comme précédemment).
• Définir une population initiale de np  10 voyageurs dont les trajets seront définis par autant
de vecteurs de taille n.
• Établir l’algorithme génétique suivant :
– Le plus mauvais voyageur est éliminé.
– Le meilleur voyageur conserve le même trajet.
– Une nouvelle population est obtenue en faisant muter la population restante en échangeant
deux villes de leur trajet choisies au hasard (un nouvel individu est aussi obtenu par la
mutation du meilleur voyageur.)
Avec ces règles, le nombre d’individus est conservé au fils des générations et le temps de parcours
devrait diminuer itération après itération.
• Tracer la distance minimale obtenue en fonction du nombre de générations utilisées.
• Comparer les résultats obtenus avec cette méthodes à ceux de la méthode exacte. Comparer les
temps de calcul.
• Tester l’effet du nombre d’individus initial sur le nombre d’itérations nécessaires à converger
vers un court trajet et sur le temps de calcul.
• Essayer de changer les critères d’évolution. On pourra par exemple tenter de :
– Obtenir des mutations plus efficaces en échangeant et en inversant l’ordre d’ensembles
aléatoires de 2 villes consécutives (par exemple les villes 3-4 avec les villes 7-8 en échangeant
3 avec 8 et 4 avec 7).
– Échanger plus de villes à chaque cycle
– Définir des règles d’hybridation entre des individus sélectionnés parmi tous les voyageurs...
– etc...
11
Téléchargement