Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Chapitre 1 : Définition du PVC  Un voyageur de commerce doit arriver à un ensemble de villes v. Ce passage doit être dans un seul sens et en plus de traverser chaque ville exactement une seule fois. Et il ne faut pas oublier que le voyageur part d’une ville quelconque vers les autres villes sans repasser deux fois par la même ville et de revenir enfin à la même ville de départ. Les distances entre les villes sont connues. Afin de réduire la distance parcourue entre les villes quelle route faut-il sélectionner. Et la notion de distance se présente dans la notion de coût. On peut représenter le problème étudié par un simple graphe complet comportant 5sommets. Chaque sommet modélise une ville, une arête entre 2 sommets représente la route entre 2 villes et il nous reste que les distances entre les villes. C’est le poids qui permet de modéliser ces distances. Le temps de parcours des villes qu’on appelle le coût. Figure 1: Exemple de graphe complet à 5 sommets. Historique de PVC  Le problème de voyageur de commerce a été innové en premier lieu en le 19ème siècle par les mathématiciens Sir William Rowan Hamilton et Thomas Penyngton Kirkman.Sir Hamilton a fait un jeu.cet dernière se manifeste d’une tournée de 20 points. En deuxième lieu, en 1930, le problème de voyageur de commerce a été détaillé de plus par Sir Karl Menger à Harvard. Il est ensuite développé à Princeton par les mathématiciens Hassler Whitney et Merril Flood ainsi Menger et Whitney sont concentrés sur les perfectionnements du PVC. En 1954, Dantzig, Fulkerson et Johnson ont résoudront cet problème comportant 49 villes par la méthode du cutting-plane. Ensuite, Camerini, Fratta and Maffioli sont trouvent une solution pour 100 villes en 1975.Après cette solution, Padberg et Rinaldi ont trouvent d’autre solutions pour 532. Puis 2392 villes dans l’année 1987. Et parmi les dernières solutions trouvées, une solution pour les 13 509 villes des Etats-Unis en 1998.Finalement, Applegate, Bixby, Chvàtal et Cook des universités de Rice et Princeton dénoncent une solution pour les 15 112 villes d'Allemagne. Représentation du problème  Le problème de voyageur de commerce peut être modélisé à l’aide d’un graphe constitué d’un ensemble de sommets et d’un ensemble d’arêtes. Chaque sommet représente une ville, une arête symbolise le passage d’une ville à une autre, et on lui associe un poids pouvant représenter une distance, un temps de parcours ou encore un coût. Ci-contre, un exemple de graphe à 5 sommets. Figure 2: Exemple de graphe complet à 5 sommets. Résoudre le problème du voyageur de commerce revient à trouver dans ce graphe un cycle passant par tous les sommets une unique fois (un tel cycle est) dit « hamiltonien »  et qui soit de longueur minimale. Pour le graphe ci-contre, une solution à ce problème serait le cycle et , correspondant à une distance totale de 19. Cette solution est optimale, il n'en existe pas de meilleure. Comme il existe une arête entre chaque paire de sommets, on dit que ce graphe est « complet ». Pour tout graphe, une matrice de poids peut être établie. En lignes figurent les sommets d'origine des arêtes et en colonnes les sommets de destination ; le poids sur chaque arête apparaît à l’intersection de la ligne et de la colonne correspondantes. Pour notre exemple, cette matrice est la suivante : [1] Figure 3: Matrice du graphe complet précédent à 5 sommets Dans cet exemple, le graphe est « non orienté », c’est-à-dire qu’une arête peut être parcourue indifféremment dans les deux sens, cela explique que la matrice soit symétrique. Cette symétrie n’est pas forcément respectée dans le cas d’un graphe orienté. Il existe alors deux catégories de problèmes : le cas symétrique (le poids de l’arc du sommet X vers Y est égal au poids de l’arc du sommet Y vers X) et le cas asymétrique (le poids de l’arc du sommet X vers Y peut être différent du poids de l’arc du sommet Y vers X). Modélisation mathématique  Un représentant de commerce doit rendre visite à n clients ,,…, en partant d’une ville et revenir à son point de départ .Il connait des distances qui séparent le dépôt de chacun de ces clients, ainsi que la distance entre deux clients quelconque et . [2] Dans quel ordre doit –il rendre visite à ses clients pour que la distance totale soit minimale ? Ce problème revient à chercher un cycle hamiltonien de longueur totale minimale dans le graphe complet G construit sur l’ensemble des sommets, les arêtes étant munies des langueurs  . Lorsque le point d’arrivée est différent du point de départ, le problème revient à rechercher une chaîne hamiltonienne de langueur totale minimale. Définition des ensembles et des indices On met au point les ensembles et les indices :  : Graphe complet  : Ensemble de sommets : Ensemble des sous-graphes de 2 à n-1 sommets : Ensemble des arcs reliant les clients vers : Client visité en amont, : Client visité en aval, Les variables et les constantes utilisées : Variable binaire déterminant si le client vers le client est visité. : Distance entre le client vers le client Fonction objectif  Le grand objectif du voyageur de commerce est de minimiser la distance totale parcourue, donc le problème peut résolue en utilisant la fonction suivante : Méthodes de résolution  Il existe deux grandes catégories de méthodes de résolution : les méthodes exactes et les méthodes approchées. Les méthodes exactes permettent d’obtenir une solution optimale à chaque fois, mais le temps de calcul peut être long si le problème est compliqué à résoudre. Les méthodes approchées, encore appelées heuristiques, permettent quant à elles d’obtenir rapidement une solution approchée, mais qui n'est donc pas toujours optimale. Ci-dessous un schéma explicatif de la méthode de résolution. Figure 4 : Méthodes de résolution du PVC. Méthodes exactes Pour le problème du voyageur de commerce, l’une des méthodes exactes les plus classiques et les plus performantes reste la Procédure par Séparation et Evaluation (PSE). Cette méthode repose sur le parcours d’un arbre de recherche. Dans un chemin de cet arbre, le premier nœud représente la ville de départ, son successeur la deuxième ville visitée, puis la troisième ville visitée, etc. À chaque étape de l’algorithme, on crée autant de nœuds qu’il reste de villes à visiter. À chaque nœud, le choix consiste à sélectionner la prochaine ville à visiter parmi les villes restantes. Ainsi, voici l’arbre de recherche pour l’exemple présenté ci-dessus : Dans le cas du problème du voyageur de commerce, la fonction objectif à minimiser est la longueur du cycle. La réduction de l’espace de recherche repose sur l’utilisation de bornes inférieures et supérieures. Rappelons que : une borne inférieure est une estimation par défaut de la fonction objectif. Autrement dit, c’est une valeur qui est nécessairement inférieure à la valeur de la meilleure solution possible. Dans notre cas, s’il y a un graphe avec N sommets à traverser, le cycle hamiltonien passera obligatoirement par N arêtes. Ainsi, pour avoir une borne inférieure assez intuitive, il suffit d’additionner le poids des N arêtes possédant les plus petits poids. Même si cette solution a de forts risques de ne pas être réalisable, la valeur de la fonction objectif ne pourra pas être plus petite. une borne supérieure est une estimation par excès de la fonction objectif. Autrement dit, la meilleure solution a nécessairement une valeur plus petite. Dans notre cas, un cycle hamiltonien quelconque dans le graphe fournit une borne supérieure. Le principe de réduction de l'arbre de recherche consiste à couper l’exploration de l’arbre à la hauteur de certains nœuds. Où faut-il couper l'arbre de recherche ? Supposons que la borne supérieure soit fournie par un algorithme approché – que nous détaillerons plus loin. On examine les nœuds sur les différentes branches, en partant du sommet, pour déterminer une borne inférieure correspondant à chacun des nœuds visités. Pour un nœud donné, on calcule cette borne inférieure en additionnant la somme des poids des arêtes déjà sélectionnées dans le cycle avec la somme des x plus petits poids parmi les arêtes restantes, x étant le nombre d’arêtes manquantes dans le cycle en cours de construction. À partir d’un nœud et de sa borne inférieure, les solutions descendantes de ce nœud ne pourront pas avoir une valeur plus petite que cette borne inférieure. Si jamais, à un nœud donné, la valeur de la borne inférieure excède la valeur de la borne supérieure, alors il est inutile d’explorer les nœuds en dessous de celui-ci. Enfin, la valeur de la borne supérieure peut être actualisée lorsqu’est trouvée une solution réalisable qui possède une valeur plus petite. Ce système de calcul de bornes demande un faible coût en temps de calcul et permet d’augmenter la rapidité de la PSE, puisqu’elle coupe les branches inutiles à explorer. Les chercheurs ont mis au point différentes techniques pour diminuer la taille de l’arbre et augmenter la rapidité de la PSE. Certaines sont basées sur le choix de l’ordre de visite des villes. Ainsi, une stratégie de recherche qui fonctionne bien pour fixer l’ordre de visite des villes est la règle du plus proche voisin : au nœud correspondant à une ville donnée, la recherche du prochain nœud, c’est-à-dire de la prochaine ville à visiter, commencera par le nœud le plus proche de celui considéré. Elles peuvent aussi reposer sur une évaluation à chaque nœud, ou encore sur des propriétés du problème qui permettent de tirer des conclusions au sujet de certaines villes ou sur des sous-ensembles de villes. C'est une telle démarche qui a été utilisée pour la niveau expert de l'applet. Méthodes approchées Dans le cas d’un nombre de villes si grand que même les meilleures méthodes exactes nécessitent un temps beaucoup trop long de résolution, des méthodes approchées, ou algorithmes d’approximation, sont utilisées. Elles permettent d’obtenir en un temps très rapide de bonnes solutions, pas nécessairement optimales, mais d’une qualité suffisante. Étant donné que le problème du voyageur de commerce a été, et continue à être largement étudié du fait de sa complexité et du nombre important de problèmes dérivés, il existe de nombreux algorithmes d’approximation. Chacun a ses avantages et ses inconvénients. La méthode retenue ne sera pas le même selon que l'on privilégie le temps de calcul, la qualité de la solution, ou encore le choix entre plusieurs solutions. Une famille de méthodes est celle des algorithmes gloutons definition, dont l'un des plus connus est la méthode par insertion. L’idée est la suivante : le parcours du voyageur de commerce est construit pas à pas en y insérant de nouvelles villes. À un instant donné de l’algorithme, un certain cycle de villes a été construit. L’étape suivante consiste à insérer une ville supplémentaire dans le cycle de manière optimale, c'est-à-dire qu’elle augmente au minimum la longueur totale du cycle. À l’étape initiale de l’algorithme, le parcours de voyageur est composé de deux villes, la ville de départ et celle qui en est la plus proche. L’algorithme se termine lorsque toutes les villes à visiter ont été insérées. Cependant, même si l’insertion d’une ville dans le cycle est optimale et rapide à calculer, la solution finale n’est pas nécessairement optimale, mais elle est obtenue rapidement. L’algorithme du plus proche voisin, qui peut lui aussi être considéré comme un algorithme glouton, est également simple. La première étape repose sur le choix aléatoire d’une première ville, et les étapes suivantes consistent à se déplacer de ville en ville en appliquant la règle du plus proche voisin, c'est-à-dire en sélectionnant la prochaine ville telle que le poids entre la ville courante et la prochaine ville soit minimal, et ce, jusqu’à avoir visité toutes les villes. Il faut enfin revenir à la première ville choisie, pour obtenir un cycle. La méthode de l'élastique n’est pas facile à mettre en œuvre, mais l’idée reste simple. Comme son nom l’indique, elle repose sur un élastique dont la propriété est de s’étirer tout en gardant une force l’empêchant de se détendre. Pour comprendre le principe, il suffit d’imaginer que les villes sont des points fixes distants les uns des autres en fonction des poids. Il s'agit de placer un élastique au milieu des villes et d'étirer celui-ci jusqu’à ce qu’il passe par tous ces points fixes, tout en essayant de le détendre le moins possible. L’algorithme de descente locale definition donne aussi rapidement de bons résultats. Son principe est le suivant : après la construction d’une solution initiale par l’utilisation d’un algorithme glouton, un opérateur de voisinage est appliqué à cette solution pour obtenir plusieurs nouvelles solutions voisines. Cet opérateur de voisinage consiste à modifier une solution selon une règle bien définie. Parmi cet ensemble de nouvelles solutions, l’algorithme va choisir la meilleure, celle qui a le cycle de plus petite longueur. Enfin, soit cette solution sélectionnée est meilleure que la précédente, et l’algorithme recommence à appliquer l’opérateur de voisinage sur cette nouvelle solution sélectionnée, soit la solution est moins bonne que la précédente et l’algorithme se termine. Il existe de nombreux opérateurs de voisinage d’efficacités variées. Un exemple simple est l’échange de deux villes dans le cycle. Pour obtenir l’ensemble de nouvelles solutions à partir d’une solution, il suffit de tester l’échange de chaque ville avec toutes les autres dans le cycle. Par exemple, avec une solution 1-2-3-4, en appliquant cet opérateur de voisinage, les solutions testées seraient : 2-1-3-4 (permuter 1 et 2), 3-2-1-4 (permuter 1 et 3), 4-2-3-1 (permuter 1 et 4), 1-3-2-4 (permuter 2 et 3), 1-4-3-2 (permuter 2 et 4), et 1-2-4-3 (permuter 3 et 4). L’algorithme du recuit simulé definition, inspiré du processus de refroidissement et réchauffement d’un métal pour minimiser son énergie, peut être utilisé pour améliorer l’algorithme de descente locale. En effet, ce dernier algorithme se termine assez rapidement, puisqu’il n’autorise à explorer que les solutions améliorant les précédentes. Dans l’algorithme du recuit simulé, l’exploration de solutions autorise à explorer les solutions de moins bonne qualité. Au lieu de s’arrêter dès que la solution ne peut plus être améliorée par l’opérateur de voisinage, le recuit simulé continue l'exploration en prenant la meilleure solution parmi l’ensemble calculé, même si celle-ci est moins bonne que la solution précédente. Le critère d’arrêt est donc différent, il va dépendre du temps et de la dégradation de la solution, évaluée comme la différence de la longueur du cycle de la solution précédente et de la nouvelle solution sélectionnée. À chaque dégradation, l’algorithme s’arrête avec une probabilité dépendant de cette dégradation — plus la dégradation est grande, plus la probabilité de continuer diminue — et du temps ou du nombre d’itérations de l’algorithme — plus ce nombre est grand, plus la probabilité de continuer diminue elle aussi. La recherche tabou definition, très utilisée pour de nombreux problèmes, est encore une amélioration de la descente locale. Elle converge vite vers une bonne solution. Le principe est similaire : à partir d’une solution, appelée solution courante, l’algorithme explore d’autres solutions en appliquant un opérateur de voisinage. La sélection d'une solution à partir de la solution courante doit être la meilleure parmi son voisinage. À chaque choix d'une solution parmi un voisinage, la solution choisie est stockée dans une liste tabou. Cette liste contient donc un certain nombre de solutions choisies précédemment. Le temps que la solution reste dans la liste dépend de la longueur maximale de cette liste, que l'on aura fixée au préalable. À chaque sélection, la nouvelle solution choisie ne doit pas appartenir à cette liste tabou. Contrairement à une simple descente locale, la solution sélectionnée peut être de moins bonne qualité que la solution courante, ce qui permet d'éviter d'être rapidement bloqué sur une solution et de continuer à en explorer d’autres. Après un certain nombre d'itérations, la meilleure solution trouvée, parmi toutes celles qui ont été explorées, est retournée par l’algorithme. Le nombre d'itérations maximal doit lui aussi être défini préalablement. Il existe encore de nombreuses améliorations des algorithmes présentés ici, ainsi que des hybridations (mélanges d’algorithmes) proposées dans le but de rendre leur résolution plus performante. Enfin, il existe d’autres méthodes approchées, fondées sur des principes totalement différents. Nous évoquerons deux d'entre elles, assez innovantes et intéressantes puisqu’elles s’inspirent de phénomènes naturels : les algorithmes génétiques et les algorithmes de colonies de fourmis. Algorithme génétique Les premiers algorithmes génétiques definition ont fait leur apparition vers les années 1970. L’idée d’un algorithme génétique est tirée de la théorie darwinienne de l'évolution. Chaque groupe d’individus (animaux, espèces végétales...), appelé aussi population, donne lieu à une génération suivante par reproduction sexuelle. Cette génération consiste à croiser les individus entre eux pour donner des descendants possédant les caractères des deux parents. En plus de ce croisement, des mutations de caractères interviennent aléatoirement dans la génération de la population suivante. Puis, cette nouvelle population subit une sélection, métaphore de la sélection naturelle : seuls les individus les mieux adaptés à l’environnement survivent. Enfin, à son tour, cette population donnera lieu par le même processus à une nouvelle population, qui sera encore plus performante dans son environnement. Pour développer un algorithme génétique, les individus sont des solutions, la sélection se fait grâce à leur qualité (évaluée à travers la fonction objectif), les croisements entre deux solutions sont faits à l’aide d’opérateurs de croisement, etc. Pour en savoir plus sur ces algorithmes, vous pouvez écouter le podcast Quand des algorithmes s'inspirent de la théorie de l'évolution... autre document Interstices Nous allons décrire un tel algorithme pour le problème du voyageur de commerce. Dans un premier temps, il faut initialiser une population, c’est-à-dire construire un nombre important d’individus, chaque individu correspondant à une solution. La première étape consiste donc à définir le codage d’un individu : comment l’individu peut représenter une solution. Pour cela, il existe deux types de codages : direct et indirect. Pour le codage direct, l’individu représente directement la solution du problème à résoudre. Par exemple, dans notre cas, un individu peut être représenté par la liste ordonnée de numéros des villes à visiter. C'est ce codage que nous utiliserons. Par contre, dans le codage indirect, l’individu n’exprime pas directement la solution, mais plutôt une manière de construire cette solution. Pour initialiser une population, on peut lancer plusieurs fois un algorithme glouton, avec des paramètres différents pour obtenir des solutions différentes. Puis, pendant un certain nombre d’itérations, les étapes suivantes sont exécutées : Tout d’abord, chaque individu est évalué. Pour cela, on calcule la valeur de la fonction objectif, c’est-à-dire la longueur du cycle parcouru par le voyageur de commerce. Puis, une étape de sélection est appliquée. Cette étape permet d’éliminer les moins bons individus et de garder uniquement les meilleurs en fonction de leur évaluation. Il existe plusieurs méthodes de sélection. Une sélection par rang ne fait pas intervenir le hasard, contrairement à la roulette, car elle choisit les n meilleurs individus de la population. Chaque individu a ainsi une probabilité de sélection dépendant de son évaluation, avec une plus forte probabilité pour les meilleurs individus. L’étape suivante consiste à croiser les individus précédemment sélectionnés pour obtenir une nouvelle population. Deux parents sont donc choisis pour appliquer un opérateur de croisement afin d’obtenir un descendant (nouvel individu). Il existe de nombreuses techniques de croisement ; dans le cas présent, nous utiliserons le « crossover en un point ». Cet opérateur consiste à recopier une partie du parent 1 et une partie du parent 2 pour obtenir un nouvel individu. Le point de séparation des parents est appelé point de croisement. Il faut cependant faire attention à ne pas visiter plusieurs fois la même ville (on ne recopie pas les villes déjà visitées), et à ne pas oublier de ville (on rajoute à la fin les villes non prises en compte). Voici un exemple avec 8 villes et un point de croisement juste après la troisième ville :