• Aucun résultat trouvé

Voyageur de commerce (**)

N/A
N/A
Protected

Academic year: 2022

Partager "Voyageur de commerce (**)"

Copied!
3
0
0

Texte intégral

(1)

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 unalgorithme 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 denvilles repérées par leurs coordonnées0< x <1,0< y <1sur 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é dey.

• Enregistrer ces positions dans un fichier et les visualiser avec Gnuplot.

9

(2)

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 villesnavant 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 lui1. 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 pra- tique 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 ma- niè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)

3.2 Travail

• Définir une carte den10villes (comme précédemment).

• Définir une population initiale de np 10voyageurs dont les trajets seront définis par autant de vecteurs de taillen.

• É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

Références

Documents relatifs

Utiliser l’algorithme de Little pour trouver le chemin le plus court passant exactement une fois par les quatre villes A,B,C et D et revenant ` a la ville de

— On considère un produit cartésien de deux graphes, chacun d'eux ayant une chaîne pour arbre minimal On donne une condition suffisante pour qu'il existe dans ce graphe-produit un

- En entrée :  (la différence de coût entre 2 solutions successives), Température - En sortie : vrai ou faux (vrai=mouvement accepté).

Une solution na¨ıve au probl`eme pr´ec´edent est la suivante : on ´enum`ere tous les chemins possibles, pour chacun de ces chemins on calcule sa longueur, puis on choisit le chemin

Un voyageur veut visiter plusieurs villes fran¸ caises lors de son voyage... Le probl` eme du voyageur

Nous remarquons aussi que notre approche fournit des solutions avec un coût (longueur du chemin ) inférieur ou égale au coût des solutions obtenues par

Dans [HAR 84], il est proposé un algorithme de complexité O(n 3 ) qui construit un 2-couplage de poids maximal dans un graphe donné. Par le biais d’un léger artifice, cet

0/0 que de vait supporter son client était une garantie pour la maison Beaulieu et Julien en ce que le sieur Treullier se trou- vait par là obligé de mettre plus de circons-