WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Techniques hybrides de recherche exacte et approchée: application à  des problèmes de transport

( Télécharger le fichier original )
par Boris BONTOUX
Université d'Avignon et des pays de Vaucluse - Doctorat spécialité informatique 2008
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

     

    ACADÉMIE D'AIX-MARSEILLE

    UNIVERSITÉ D'AVIGNON ET DES PAYS DE VAUCLUSE

    THÈSE

    présentée à l'Université d'Avignon et des Pays de Vaucluse
    pour obtenir le diplôme de DOCTORAT

    SPÉCIALITÉ : Informatique
    École Doctorale 166 <<Information, Structures, Systèmes»
    Laboratoire d'Informatique (EA 4128)

    Techniques hybrides de recherche exacte et

    approchée : application à des problèmes de transport

    par

     

    Boris BONTOUX

    Soutenue publiquement le 08 décembre 2008 devant un jury composé de :

     

    M.

    Marc SEVAUX

    Professeur, Université de Bretagne-Sud, Lorient

    Rapporteur

    M.

    Emmanuel NERON

    Professeur, Université de Tours, Tours

    Rapporteur

    Mme

    Françoise DAUMAS

    Ingénieur, D2A, Aix-en-Provence

    Examinatrice

    M.

    Frederic SEMET

    Professeur, LAGIS, Ecole Centrale Lille

    Examinateur

    M.

    Eric BOURREAU

    Maître de Conférences, LIRMM, Montpellier

    Examinateur

    M.

    Philippe MICHELON

    Professeur, LIA, Avignon

    Examinateur

    M.

    Christian ARTIGUES

    Chargé de Recherches, LAAS-CNRS, Toulouse

    Directeur de thèse

    M.

    Dominique FEILLET

    Professeur, Ecole des Mines de Saint-Etienne, Gardanne

    Directeur de thèse

    Laboratoire d'Informatique d'Avignon École Doctorale 166

    Laboratoire d'Informatique

    <<Information, Structures, Systèmes»

    Université d'Av gnon

    À Angélique et Nathanael, mes amours

    Remerciements

    Je tiens tout d'abord à remercier la Region Provence-Aples-Côte d'Azur, pour le financement de cette thèse, ainsi que la societe Daumas Autheman et Associes, qui m'ont permis d'obtenir ce financement.

    Ensuite, je souhaite remercier Renato De Mori et Marc El-Bèze qui en tant que directeurs du Laboratoire m'ont accueilli au sein du Laboratoire Informatique d'Avignon, ainsi que tous les membres du LIA avec qui j'ai passe de très bons moments et de très bonnes soirees.

    Je tiens aussi à remercier tous les membres passes et presents de l'equipe de Recherche Operationnelle que j'ai pu rencontrer : Audrey et sa petite merveille Lisa, Andrea et son accent si chantant et si depaysant, Mireille et sa vie si trepidante, Diego, Rodrigo, Philippe, Dominique Quadri et la dernière arrivee, Claire. . .

    Je voudrais egalement saluer l'ensemble des membres du jury et en particulier, Emmanuel Neron et Marc Sevaux, rapporteurs de cette thèse, pour avoir eu la patience de lire ce memoire.

    Un grand merci à Christian Artigues, pour m'avoir attire à l'IUP, puis m'avoir fait decouvrir la Recherche Operationnelle. Sans lui, je n'aurais jamais eu l'envie de faire un doctorat. Son encadrement m'a beaucoup apporte. . .

    Un grand merci à Dominique Feillet, co-encadrant de cette thèse, qui m'a pousse dans la recherche. Ses conseils ont ete d'une valeur inestimable, il m'a permis d'avoir le courage de finir ce doctorat. Je tiens en particulier à souligner la qualite de son encadrement, ainsi que ses qualites humaines.

    Je remercie egalement Eric Bourreau pour son aide precieuse pour un sujet que je maîtrisais peu, Philippe Refalo pour son aide pour l'utilisation d'Ilog, Thierry Garaix « Titi » dont la thèse et les discussions m'ont beaucoup inspire, Jeremie Osmont « Jey » pour son aide miraculeuse en temps de crise (ce qui arriva très souvent) et Olivier Liess « Kaoru » pour ses competences inegalees en programmation.

    Je remercie mes nombreux collègues de bureau de m'avoir si bien supporte et en particulier Cedric « Krusty » pour ses petites attentions (merci encore pour ces croissants le matin!) et sa mauvaise humeur si drôle.

    Je remercie mes parents, Gilles et Bab, pour leur soutien, leurs encouragements et

    leurs relectures.

    Enfin, je ne pouvais pas finir ces remerciements sans remercier ma femme, Angélique, et mon fils, Nathanaël, mes amours de tous les jours. Vous m'avez été tous deux d'une grande aide tout au long de cette thèse. Vous retrouver tous les soirs était mon rayon de soleil et un des mes vrais bonheurs. Je suis désolé de vous avoir un peu délaissés en fin de doctorat. Ce mémoire vous est donc dédié.

    Résumé

    Nous nous intéressons dans cette thèse aux possibilités d'hybridation entre les méthodes exactes et les méthodes heuristiques afin de pouvoir tirer avantage de chacune des deux approches : optimalité de la résolution exacte, caractère moins déterministe et rapidité de la composante heuristique. Dans l'objectif de résoudre des problèmes NPdifficiles de taille relativement importante tels que les problèmes de transports, nous nous intéressons dans les deux dernières parties de ce mémoire à la conception de méthodes incomplètes basées sur ces hybridations.

    Dans la première partie, nous allons nous intéresser aux méthodes de résolution par recherche arborescente. Nous introduisons une nouvelle approche pour la gestion des décisions de branchement, que nous appelons Dynamic Learning Search (DLS). Cette méthode définit de manière dynamique des règles de priorité pour la sélection des variables à chaque noeud et l'ordre des valeurs sur lesquelles brancher. Ces règles sont conçues dans une optique de généricité, de manière à pouvoir utiliser la méthode indépendamment du problème traité. Le principe général est de tenir compte par une technique d'apprentissage de l'impact qu'ont eu les décisions de branchement dans les parties déjà explorées de l'arbre. Nous évaluons l'efficacité de la méthode proposée sur deux problèmes classiques : un problème d'optimisation combinatoire et un problème à satisfaction de contraintes.

    La deuxième partie de ce mémoire traite des recherches à grand voisinage. Nous présentons un nouvel opérateur de voisinage, qui détermine par un algorithme de programmation dynamique la sous-séquence optimale d'un chemin dans un graphe. Nous montrons que cet opérateur est tout particulièrement destiné à des problèmes de tournées pour lesquels tous les noeuds ne nécessitent pas d'être visités. Nous appelons cette classe de problème les Problèmes de Tournées avec Couverture Partielle et présentons quelques problèmes faisant partie de cette classe. Les chapitres 3 et 4 montrent, à travers des tests expérimentaux conséquents, l'efficacité de l'opérateur que nous proposons en appliquant cette recherche à voisinage large sur deux problèmes, respectivement le Problème de l'Acheteur Itinérant (TPP) et le Problème de Voyageur de Commerce Généralisé (GTSP). Nous montrons alors que cet opérateur peut être combiné de manière efficace avec des métaheuristiques classiques, telles que des algorithmes génétiques ou des algorithmes d'Optimisation par Colonies de Fourmis.

    Enfin, la troisième partie présente des méthodes heuristiques basées sur un algorithme de Génération de Colonnes. Ces méthodes sont appliquées sur un problème

    complexe : le problème de Tournées de Véhicules avec Contraintes de Chargement à Deux Dimensions (2L-VRP). Nous montrons une partie des possibilités qu'il existe afin de modifier une méthode a priori exacte en une méthode heuristique et nous évaluons ces possibilités à l'aide de tests expérimentaux.

    Table des matières

    Introduction Générale 10

    I Favoriser l'obtention rapide de solutions dans les méthodes de recherche arborescente 15

    1 Dynamic Learning Search : une méthode par apprentissage 19

    1.1 Introduction 19

    1.2 État de l'art des recherches arborescentes 20

    1.2.1 Méthode de parcours de l'arbre de recherche 21

    1.2.2 Méthode de structuration de l'arbre de recherche 22

    1.2.3 Parcours réduit de l'arbre 22

    1.2.4 Ordre dynamique 24

    1.2.5 Apprentissage : look-back 26

    1.2.6 Métaheuristiques combinées à la recherche arborescente 27

    1.3 Dynamic Learning Search : une méthode par apprentissage 28

    1.4 Learning : une méthode basée sur un apprentissage 29

    1.4.1 Sondage 29

    1.4.2 Apprentissage 30

    1.4.3 Prévision 32

    1.4.4 Remise en question 32

    1.5 Dynamic : un ordre dynamique de choix des variables et de sélection des

    valeurs 33

    1.6 Search: un schéma de recherche adapté à la méthode 34

    1.7 Algorithme général de la méthode 34

    1.8 Méthode Dynamic Learning Search : critères de sélection 34

    1.8.1 Problèmes de Satisfaction des Contraintes 35

    1.8.2 Problèmes d'Optimisation Combinatoire 38

    1.8.3 Méthode commune aux deux types de problèmes 39

    1.9 Résultats expérimentaux 40

    1.9.1 Application au problème du Voyageur de Commerce 40

    1.9.2 Application au problème d'Emploi du Temps de Garde d'Infir-

    mières 41
    1.9.3 Application à des problèmes de Satisfaction de Contraintes aca-

    démiques 43

    1.10 Conclusion et perspectives

    II Utiliser des méthodes exactes au sein des métaheuristiques : méthodes

    de grands voisinages

    2 La recherche à grand voisinage : un nouvel opérateur

    47

    49
    53

     

    2.1

    Introduction à la recherche locale

    53

     
     

    2.1.1 Bases de la recherche locale

    53

     
     

    2.1.2 Principales classes de recherches locales

    54

     
     

    2.1.3 Recherche locale à voisinage variable

    55

     
     

    2.1.4 Algorithmes utiisant de la recherche locale

    55

     

    2.2

    Recherche à grand voisinage

    57

     
     

    2.2.1 Notations et définitions de la recherche à grand voisinage . . . .

    58

     

    2.3

    Classe des problèmes considérés : Problèmes de Tournées avec Couver-

     
     
     

    ture Partielle

    59

     
     

    2.3.1 Problèmes de Tournées avec Gains

    60

     
     

    2.3.2 Autres variantes de Problèmes de Tournées à Couverture Partielle

    61

     
     

    2.3.3 Complexité des Problèmes de Tournées avec Couverture Partielle

    62

     
     

    2.3.4 Quelques opérateurs de recherche locale pour les Problèmes de

     
     
     

    Tournées avec Couverture Partielle

    62

     

    2.4

    Dropstar : une nouvelle structure de grand voisinage

    64

     
     

    2.4.1 Des opérateurs existants : drop, l-ConsecutiveDrop

    64

     
     

    2.4.2 L'opérateur de grand voisinage : Dropstar

    69

     
     

    2.4.3 Plus court chemin avec contraintes de ressources (SPPRC) . . . .

    71

     
     

    2.4.4 Résolution par un algorithme de programmation dynamique . .

    71

     

    2.5

    Perspectives : variantes possibles de la procédure Dropstar

    74

    3

    Application au Problème de l'Acheteur Itinérant

    77

     

    3.1

    Introduction au problème de l'Acheteur Itinérant

    78

     

    3.2

    Notre algorithme : le DMD-ATA

    81

     
     

    3.2.1 Fourmis Parallèles

    81

     
     

    3.2.2 Fourmis Anamorphiques

    82

     
     

    3.2.3 Plans Multi-Dimensionnels

    83

     
     

    3.2.4 Dynamique

    83

     

    3.3

    Opérateurs de recherche locale

    84

     
     

    3.3.1 Procédures de recherches locales basiques

    85

     
     

    3.3.2 Application de l'opérateur Dropstar

    85

     
     

    3.3.3 Intégration de la recherche locale dans l'algorithme DMD-ATA .

    89

     

    3.4

    Résultats expérimentaux

    89

     

    3.5

    Conclusion

    93

    4

    Application au Problème du Voyageur de Commerce Généralisé

    95

     

    4.1

    Introduction au Problème du Voyageur de Commerce Généralisé . . . .

    96

     

    4.2

    État de l'art

    96

     

    4.3

    Algorithme mémétique

    98

    4.3.1 Composants basiques de l'algorithme 98

    4.3.2 Croisement 100

    4.3.3 Implémentation détaillée de l'opérateur de croisement 103

    4.3.4 Heuristiques de recherche locale 106

    4.4 Résultats expérimentaux 108

    4.5 Conclusion et perspectives 112

    III Tronquer les méthodes exactes : méthode de Branch & Price heuristique 121

    5 Application au problème de Tournées de Véhicules avec Contraintes de Chargement 125

    5.1 Préambule : Intérêt du problème 126

    5.2 Problèmes de calcul de tournées de véhicules 127

    5.2.1 Du problème du Voyageur de Commerce au problème de Tour-

    nées de Véhicules 127

    5.2.2 Le 2L-VRP parmi les problèmes de Tournées de Véhicules . . . 128

    5.3 État de l'art 128

    5.3.1 Résolution du 2L-VRP 128

    5.3.2 Algorithmes de chargement 131

    5.4 Modèle classique du problème du 2|RO|L-VRP 132

    5.5 Génération de colonnes 134

    5.5.1 Modélisation d'un ESPPRC 138

    5.5.2 Résolution par programmation dynamique 139

    5.6 Notre approche : un schéma de Branch & Price 141

    5.6.1 Méthode de séparation 142

    5.6.2 Initialisation de 1 pour la génération de colonnes 143

    5.6.3 Remontées de colonnes 143

    5.6.4 Problème esclave : ESPPRC 144

    5.6.5 Problème de chargement séquentiel à deux dimensions 147

    5.7 Deux approches différentes pour la réalisabilité du chargement 153

    5.7.1 Vérification de la réalisabilité a posteriori 153

    5.7.2 Construction de routes réalisables dans le sous-problème 155

    5.8 Branch & Price heuristique 159

    5.8.1 Problème esclave heuristique 159

    5.8.2 Gestion des colonnes 160

    5.8.3 Méthode de séparation 160

    5.9 Résultats expérimentaux 161

    5.9.1 Paramètres retenus 161

    5.9.2 Classes d'instances 161

    5.9.3 Analyses des résultats 162

    5.10 Conclusions et perspectives 165

    Conclusion et perspectives 171

    Liste des illustrations 175

    Liste des tableaux 177

    Bibliographie 179

    Introduction Générale

    La recherche opérationnelle s'attache à étudier des problèmes d'optimisation combinatoire dont la résolution constitue un véritable challenge. Il s'agit de trouver une affectation de valeurs à un certain nombre de variables tout en respectant un ensemble de contraintes donné. Parmi les paradigmes de résolution, la programmation par contraintes est particulièrement adaptée pour étudier la réalisabilité d'un problème de satisfaction de contraintes, tandis que la programmation linéaire en nombres entiers s'inscrit davantage dans le cadre de la recherche d'un extremum d'une fonction linéaire. Cependant, ces approches partagent une procédure de résolution commune qui consiste en l'énumération implicite de l'ensemble des solutions du problème. Il s'agit alors de parcourir l'espace de recherche et d'en extraire une solution admissible (problèmes de satisfaction de contraintes) ou optimale (problèmes d'optimisation combinatoire) ou de prouver qu'il n'en existe pas. Le schéma classique consiste en une recherche arborescente qui évalue à chaque noeud la solution partielle courante et l'étend si possible en affectant une valeur à une variable non encore instanciée.

    Les problèmes combinatoires difficiles ont depuis longtemps attiré l'attention des chercheurs. On peut citer Garey et Johnson (1979) qui ont approfondi les bases des concepts de problèmes NP-difficiles et ont montré que de nombreux problèmes n'avaient que peu de possibilités d'être résolus efficacement par des méthodes exactes. Ces méthodes exactes permettent d'obtenir une ou plusieurs solutions dont l'optimalité est garantie. Cependant, dans certaines situations, il est nécessaire de disposer d'une solution de bonne qualité (c'est-à-dire assez proche de l'optimale) dans un contexte de ressources (temps de calcul et/ou mémoire) limitées. Dans ce cas, l'optimalité de la solution n'est pas garantie, ni même l'écart avec la valeur optimale. Néanmoins, le temps nécessaire pour obtenir cette solution est beaucoup plus faible que dans le cas d'une méthode exacte. Ce type de méthodes, dites heuristiques, est particulièrement utile pour les problèmes nécessitant une solution en temps limité ou pour résoudre des problèmes difficiles.

    Ces méthodes approchées peuvent se classer en différentes catégories:

    - Constructives (algorithmes gloutons),

    - Recherche locale (algorithmes de descente, recherche à grand voisinage, ...), - Métaheuristiques (recuit simulé, recherche Tabou,...),

    - Évolutionnaires (algorithmes génétiques, algorithmes d'optimisation par colonies de fourmis, algorithmes mémétiques,...).

    L'intuition qui est à la base des travaux menés sur la plupart des méthodes heuristiques réside dans le fait que dans la majorité des problèmes d'optimisation combinatoire, les bonnes solutions sembleraient partager des « structures» communes, ou du moins, se trouver dans de mêmes régions de l'espace de recherche. Ainsi, l'idée de la recherche locale est d'atteindre les solutions optimales d'un problème en modifiant itérativement les bonnes solutions, trouvées par exemple par des méthodes gloutonnes.

    Dans cette thèse, nous nous intéressons aux possibilités d'hybridation entre les méthodes exactes et les méthodes heuristiques afin de pouvoir tirer avantage de chacune des deux approches : systématicité et optimalité de la résolution exacte, caractère moins déterministe et rapidité de la composante heuristique. Dans l'objectif de résoudre des problèmes NP-difficiles de taille relativement importante tels que les problèmes de transports, nous nous intéressons dans les deux dernières parties de ce mémoire à la conception de méthodes incomplètes basées sur ces hybridations. Ce mémoire se situe dans la lignée des travaux de recherche menés précédemment au sein de l'équipe de Recherche Opérationnelle du Laboratoire Informatique d'Avignon sur l'hybridation entre recherche exacte et recherche heuristique (Demassey, 2003; Oliva, 2004; Palpant, 2005).

    Ce mémoire est composé de trois parties, qui soulèvent les questions suivantes :

    - Comment favoriser l'obtention rapide de solutions dans les méthodes de recherche arborescente sans perdre la complétude de la recherche?

    - Comment utiliser des méthodes exactes au détriment de la propriété de complétude au sein des métaheuristiques?

    - Comment obtenir de bonnes solutions à partir des méthodes exactes?

    Dans la première partie de ce mémoire, nous nous intéressons aux méthodes de résolution par recherche arborescente. Nous introduisons une nouvelle approche pour la gestion des décisions de branchement, appelée Dynamic Learning Search (DLS). Cette méthode définit de manière dynamique des règles de priorité pour la sélection des variables à chaque noeud et l'ordre des valeurs sur lesquelles brancher. Nous mettons en particulier l'accent sur le caractère générique de la méthode, c'est-à-dire sa capacité à s'appliquer à tout type de problème, sans information extérieure sur la structure du problème. Le principe général de la méthode est de tenir compte par une technique d'apprentissage de l'impact qu'ont eu les décisions de branchement dans les parties déjà explorées de l'arbre. Le but est de favoriser l'obtention rapide de solutions dans les méthodes de recherche arborescente. Nos travaux s'appuient en partie sur les travaux de plusieurs autres chercheurs (Harvey et Ginsberg, 1995; Hooker, 2000; Fischetti et Lodi, 2003; Refalo, 2004). Nous évaluons l'efficacité de la méthode proposée sur plusieurs problèmes classiques comprenant des problèmes d'optimisation combinatoire et des problèmes de satisfaction de contraintes. Nous montrons que notre méthode propose des résultats en moyenne meilleurs que les méthodes par défaut d'un solver commercial.

    Dans la deuxième partie de ce mémoire, nous proposons d'utiliser des méthodes exactes au sein de métaheuristiques. Pour cela, nous nous intéressons à une classe des problèmes de tournées de véhicules. Ces problèmes constituent l'une des classes les

    plus étudiées de la recherche opérationnelle, en particulier puisqu'elle comprend le fameux Problème du Voyageur de Commerce. Le Problème du Voyageur de Commerce (Traveling Salesman Problem ou TSP) a été étudié dès le 19ème siècle par les mathématiciens Hamilton et Kirkman. En 1972, Karp (1972) a montré que le problème du voyageur de commerce, entre autres, est NP-complet. Nos recherches nous ont amenés à nous focaliser sur une sous catégorie de problèmes de tournées de véhicules que nous nommons Problèmes de Tournées avec Couverture Partielle, pour lesquels la visite de l'ensemble des sommets du graphe n'est pas obligatoire. Après une présentation d'opérateurs de voisinage classiques adaptés à cette famille de problèmes, nous présentons un nouvel opérateur de voisinage, Dropstar, qui détermine par un algorithme de programmation dynamique, la sous-séquence optimale d'un chemin dans un graphe. Nous montrons que cet opérateur est tout particulièrement destiné à des problèmes de tournées pour lesquels tous les noeuds ne nécessitent pas d'être visités. Les chapitres 3 et 4 montrent, à travers des tests expérimentaux conséquents, l'efficacité de l'opérateur que nous proposons sur deux problèmes, respectivement le Problème de l'Acheteur Itinérant (TPP) et le Problème de Voyageur de Commerce Généralisé (GTSP). Nous montrons alors que cet opérateur de grand voisinage basé sur une méthode exacte peut être combiné de manière efficace avec des métaheuristiques classiques, telles que des algorithmes génétiques ou des algorithmes d'Optimisation par Colonies de Fourmis.

    Dans la troisième partie du mémoire, nous nous intéressons aux méthodes de résolution exactes tronquées. Nous appliquons la méthode que nous proposons sur le problème de Tournées de Véhicules avec Contraintes de Chargement en Deux Dimensions (Vehicule Routing Problem with Two-Dimensional Loading Constrains ou 2L-VRP). Nous proposons de résoudre ce problème à l'aide d'une procédure de type Branch & Price, c'est-à-dire une procédure de résolution de type Branch & Bound utilisant une méthode de génération de colonnes pour le calcul de bornes. Nous présentons dans un premier temps un schéma classique de résolution par Branch & Price. De par la complexité des contraintes de chargement, le problème esclave de la génération de colonnes n'est pas résolu de manière exacte. Notre travail s'est donc porté sur les moyens dont nous disposions afin d'accélérer la résolution. Nous montrons ainsi dans ce chapitre une partie des possibilités qu'il existe afin de tronquer une méthode a priori exacte pour la rendre heuristique. Enfin, nous évaluons ces possibilités à l'aide de tests expérimentaux. Nous montrons que les méthodes que nous proposons, sans être de mauvaises qualités, ne dépassent pas les résultats des meilleurs algorithmes.

    Pour chacune des parties, une validation expérimentale a été réalisée sur divers problèmes académiques ou applicatifs. Les résultats obtenus montrent l'intérêt des méthodes proposées et laissent entrevoir les nombreuses perspectives ouvertes par ce type d'hybridation.

    Les travaux présentés sont issus de la collaboration entre le Laboratoire Informatique d'Avignon et la société Daumas Autheman et Associés 1. Daumas Autheman et Associés est une société de service et d'ingénierie informatique créée en 1988, spécialisée dans l'informatique avancée, en particulier dans l'optimisation de ressources et

    1. http :// www.daumas-autheman.com

    gestion de l'expertise métier. Le problème d'Emploi du Temps de Garde d'Infirmières du chapitre 1, ainsi que le problèmes de Tournées de Véhicules avec Contraintes de Chargement du chapitre 5 sont des problèmes issus de la collaboration avec cette société. Les travaux de recherche ont été financés conjointement par Daumas Autheman et Associés et par le Conseil Régional de Provence-Alpes-Côte d'Azur.

    Les travaux présentés dans ce mémoire ont fait l'objet des publications suivantes :

    B. Bontoux et D. Feillet, 2006. Résolution heuristique du problème de l'acheteur itinérant. Dans les actes de 7ème congrès de la société Française de Recherche Opérationnelle et d'Aide à la Décision (ROADEF 2006). CDROM.

    B. Bontoux, D. Feillet, et C. Artigues, 2007a. Une méthode dynamique de parcours
    d'arbre de recherche : Dynamic Coperative Search. Dans les actes de 8ème congrès de la
    société Française de Recherche Opérationnelle et d'Aide à la Décision (ROADEF 2007)
    , 99-100.

    B. Bontoux, D. Feillet, et C. Artigues, 2007b. Large neighborhood search for variants of TSP. Dans les actes de The Seventh Metaheuristics International Conference (MIC 2007), Montréal, Canada. CDROM.

    B. Bontoux, D. Feillet, C. Artigues, et E. Bourreau, 2007c. Dynamic cooperative search for constraint satisfaction and combinatorial optimization: application to a rostering problem. Dans P. Baptiste, G. Kendall, A. Munier-Kordon, et F. Sourd (Eds.), 3rd Multidisciplinary International Conference on Scheduling: Theory and Application (MISTA 2007), Paris, France, 557-560.

    B. Bontoux et D. Feillet, 2008. Ant colony optimization for the traveling purchaser problem. Computers & Operations Research 35, 628-637.

    B. Bontoux, C. Artigues, et D. Feillet, 2008a. Algorithme mémétique avec un opérateur de croisement à voisinage large pour le problème du voyageur de commerce généralisé. Dans les actes de 9ème congrès de la société Française de Recherche Opérationnelle et d'Aide à la Décision (ROADEF 2008), Clermont-Ferrand, 79-80.

    B. Bontoux, C. Artigues, et D. Feillet, 2008b. A memetic algorithm with a large neighborhood crossover operator for the Generalized Traveling Salesman Problem. Meta-heuristics for Logistics and Vehicle Routing, EU/ME, the European Chapter on Metaheuristics, Université de Technologie de Troyes, France.

    B. Bontoux, C. Artigues, et D. Feillet, February 2008c. Memetic algorithm with a large neighborhood crossover operator for the Generalized Traveling Salesman Problem. LAAS report, Université de Toulouse, LAAS-CNRS, Toulouse, France.

    Première partie

    Favoriser l'obtention rapide de

    solutions dans les méthodes de

    recherche arborescente

    1 Dynamic Learning Search : une méthode par apprentissage 19

    1.1 Introduction 19

    1.2 État de l'art des recherches arborescentes 20

    1.2.1 Méthode de parcours de l'arbre de recherche 21

    1.2.2 Méthode de structuration de l'arbre de recherche 22

    1.2.3 Parcours réduit de l'arbre 22

    1.2.4 Ordre dynamique 24

    1.2.5 Apprentissage : look-back 26

    1.2.6 Métaheuristiques combinées à la recherche arborescente 27

    1.3 Dynamic Learning Search : une méthode par apprentissage 28

    1.4 Learning : une méthode basée sur un apprentissage 29

    1.4.1 Sondage 29

    1.4.2 Apprentissage 30

    1.4.3 Prévision 32

    1.4.4 Remise en question 32

    1.5 Dynamic : un ordre dynamique de choix des variables et de sélection des

    valeurs 33

    1.6 Search: un schéma de recherche adapté à la méthode 34

    1.7 Algorithme général de la méthode 34

    1.8 Méthode Dynamic Learning Search : critères de sélection 34

    1.8.1 Problèmes de Satisfaction des Contraintes 35

    1.8.2 Problèmes d'Optimisation Combinatoire 38

    1.8.3 Méthode commune aux deux types de problèmes 39

    1.9 Résultats expérimentaux 40

    1.9.1 Application au problème du Voyageur de Commerce 40

    1.9.2 Application au problème d'Emploi du Temps de Garde d'Infirmières 41
    1.9.3 Application à des problèmes de Satisfaction de Contraintes aca-

    démiques 43

    1.10 Conclusion et perspectives 47

    Chapitre 1

    Dynamic Learning Search: une

    méthode par apprentissage

    1.1 Introduction

    La plupart des méthodes de résolution exacte utilisées en optimisation combinatoire s'appuient sur une énumération intelligente des solutions (Branch & Bound, Programmation par contraintes, Programmation dynamique ...). Cette énumération consiste en règle générale en la construction d'un arbre de recherche, au cours de laquelle la création d'un fils pour un noeud correspond à une prise de décision: typiquement fixer une valeur à une variable. L'exploration complète d'un tel arbre peut s'avérer très coûteuse en temps. Il est donc classique de fixer une limite de temps, rendant ainsi l'exploration incomplète. Si cette limite de temps est atteinte avant la fin de l'exploration complète de l'arbre de recherche, on retourne la meilleure solution trouvée (dans le cas où une ou plusieurs solutions ont été trouvées). Un défaut connu de cette approche est que l'exploration peut se faire dans un premier temps sur un sous-arbre qui ne contient pas ou peu de solution intéressante et ainsi utiliser tout le temps alloué à n'explorer que ce sous-arbre. Cette situation conduit à retourner une mauvaise solution (ou aucune solution). On a donc tout intérêt à mettre en place des techniques favorisant l'exploration en priorité de parties de l'espace de recherche contenant de bonnes solutions. Il s'agit de gérer au mieux la prise de décision à la fois en ce qui concerne la construction de l'arbre et le parcours des noeuds créés, et ce dès le début de l'arbre. La méthode que nous proposons, Dynamic Learning Search a été conçue dans le but de diriger l'exploration de l'arbre de recherche vers les parties de l'espace des solutions contenant les meilleures solutions. Notre objectif est de proposer une méthode générique, de manière à pouvoir l'utiliser indépendamment du type de problème traité : problèmes d'optimisation combinatoire ou problèmes de satisfaction de contraintes. La méthode DLS définit de manière dynamique à chaque noeud de l'arbre des règles de priorité pour la sélection de la variable sur laquelle brancher et de l'ordre dans lequel les différentes valeurs pour chaque variable sont explorées. Ces ordres sont déduits des caractéristiques des sous-arbres obtenus jusqu'ici lors de branchements concernant la même variable.

    1.2 État de l'art des recherches arborescentes

    Les performances d'une recherche arborescente varient de façon significative selon les stratégies de branchement retenues, c'est-à-dire l'ordre selon lequel les variables seront choisies, ainsi que l'ordre dans lequel les valeurs pour cette variable seront instanciées. On peut noter que ces stratégie dépendent en partie de la nature du problème et de l'espace des solutions : dans le cas où le problème n'a qu'une solution ou très peu de solutions, on cherche généralement à trouver une de ces solutions le plus rapidement possible; dans le cas où le problème n'est pas résoluble, on cherche à ce que l'arbre de recherche soit le plus petit possible afin de prouver l'absence de solution de manière relativement rapide; enfin, dans le cas pour lequel le problème possède un nombre de solutions très important, on cherche généralement la meilleure de ces solutions (selon un objectif donné). On voit donc qu'une méthode efficace pour un type de problème peut être inefficace pour un autre type de problème.

    Puisque toutes les variables d'un problème doivent être instanciées pour obtenir une solution, une réduction de la taille de l'arbre de recherche peut être obtenue en choisissant en premier la variable qui contraint le plus l'espace de recherche. Ce choix est souvent implémenté en choisissant en premier la variable ayant le plus petit domaine (dom). Pour départager les variables jugées équivalentes par l'heuristique du plus petit domaine, on choisit la variable qui appartient au plus grand nombre de contraintes (on définit le degré d'une variable comme le nombre de contraintes dans lesquelles apparaît une variable). On peut aussi appliquer une combinaison de ces deux critères (dom/deg, (Smith et Grant, 1998)) (plus petit domaine divisé par le degré de la variable). Il a été montré par Haralick et Elliot (1980) que le fait de calculer des mises à jour des domaines et du degré des variables à chaque noeud permet de prendre de meilleures décisions lors de l'exploration (dom/ddeg). En suivant cette politique, on essaie de contraindre au maximum les variables et ainsi limiter la taille de l'arbre. Concernant le choix de l'ordre dans lequel les valeurs sont instanciées, ce choix ne semble pas important dans le cas où le problème ne possède pas de solution. Cependant, dans le cas contraire, on pourra atteindre plus rapidement une solution si l'on choisit la valeur qui tend à maximiser le nombre de possibilités pour les choix futurs. Enfin, il est facile de se rendre compte que le choix des variables qui sont au sommet de l'arbre est prépondérant. On a donc intérêt à choisir les premières variables sur lesquelles brancher avec précaution.

    L'idée d'accélérer l'exploration de l'arbre de recherche n'est pas nouvelle. Plusieurs techniques ont été proposées ces dernières années; ces techniques peuvent être basées sur :

    - un parcours réduit de l'arbre de recherche,

    - une politique de branchement sur l'ordre des valeurs, - une politique de branchement sur l'ordre des variables, - une combinaison des techniques précédentes.

    Les paragraphes qui suivent offrent une présentation de certaines de ces techniques.

    1.2.1 Méthode de parcours de l'arbre de recherche

    La plupart des méthodes de parcours d'un arbre de recherche sont connues depuis déjà plusieurs années. La différence entre deux stratégies de recherche réside principalement dans la taille de l'arbre de recherche généré et donc dans le temps de résolution du problème traité. Les stratégies appliquées sont la plupart du temps différentes selon la nature du problème. On distingue les problèmes d'optimisation combinatoire avec une fonction objectif et un nombre généralement important de solutions et les problèmes de satisfaction de contraintes pour lesquels on ne cherche la plupart du temps qu'une seule solution.

    On peut citer différentes stratégies de recherche (pour plus de détails, voir (Hooker, 2000)). Pour les méthodes de parcours de l'arbre de recherche, on peut citer, entre autres, les politiques suivantes :

    Depth-first: la méthode depth-first search est une méthode couramment utilisée. Elle consiste en une exploration en profondeur de l'arbre de recherche. Les variables sont fixées une à une itérativement, jusqu'à obtenir une solution ou jusqu'à ce qu'une variable ait un domaine vide. Lorsque c'est le cas, on revient sur la dernière décision qui a été prise et on prend une autre décision, si cela est possible. Dans le cas contraire, on remonte plus haut dans les décisions prises. Cette technique est appelée Backtrack. Lorsque le nombre de solutions est important, cette méthode permet de trouver très rapidement une solution. Cette méthode est très classique dans l'implémentation d'un Branch and Bound. En terme d'occupation mémoire, cette méthode est la plus intéressante.

    Best bound first: on choisit parmi les noeuds restant à traiter celui qui a la plus petite borne inférieure. Cette borne peut être calculée par exemple, par relaxation de contraintes, par une méthode heuristique, ... Ce choix est efficace lorsque les bornes calculées sont de bonne qualité. Elle présente par contre l'inconvénient de traiter des noeuds successifs très différents (valeurs et variables différentes) et donc de ne présenter que peu d'incrémentalité dans les calculs, notamment les calculs de bornes inférieures. De plus, cette méthode n'est applicable que lorsqu'une borne est calculable, ce qui peut ne pas être le cas pour certains problèmes de satisfaction de contraintes, dans lesquels il n'y a pas de fonction objectif.

    Breadth-first: cette méthode est la méthode opposée à la méthode depth-first search. Elle consiste à explorer l'arbre en largeur. Le parcours en largeur correspond à un parcours par niveau de noeuds de l'arbre. Un niveau est un ensemble de noeuds ou de feuilles situés à la même distance du noeud racine. Ce type de parcours est rarement utilisé, du fait de l'occupation mémoire trop importante.

    Les méthodes présentées ci-dessus décrivent des politiques d'exploration de l'arbre de recherche. Une fois l'arbre créé, elles permettent d'ordonner une liste de noeuds à traiter. Elles ne modifient en aucun cas la structure propre de l'arbre. Néanmoins, deux politiques de parcours d'arbre de recherche peuvent donner des résultats différents en terme de rapidité d'exécution et en terme d'occupation mémoire. En effet, on peut associer à ces méthodes des calculs de bornes qui pourront amener à la troncature de sous-espaces de l'arbre de recherche (par exemple, lorsque la borne inférieure calculée

    à un noeud est supérieure à la borne supérieure). Ainsi, si la structure de l'arbre n'est pas modifiée, les espaces explorés de l'arbre peuvent être modifiés par les schémas d'exploration.

    1.2.2 Méthode de structuration de l'arbre de recherche

    Lorsqu'on construit un arbre de recherche, la structure proprement dite de celui-ci sera en grande partie déterminée par les choix concernant les politiques de séparation. Une fois que la variable sur laquelle on veut brancher a été déterminée, on doit choisir la politique en ce qui concerne la séparation du domaine de cette variable. Classiquement, on choisit de créer un noeud par valeur possible du domaine de la variable. Cela conduit à des arbres de recherche dont la structure est assez large. On peut aussi appliquer une politique de séparation binaire : on crée d'un côté un noeud pour lequel la variable est fixée à une valeur, de l'autre côté, un noeud pour lequel la variable est différente de cette valeur. Éxcepté pour le cas des problèmes à variables binaires, le problème d'une telle politique réside dans la création d'un arbre fortement déséquilibré (l'affectation d'une variable à une valeur a beaucoup plus de conséquences que l'interdiction de cette valeur). La stratégie equal split consiste quant à elle à séparer les domaines des variables en deux sous-domaines de taille égale. L'intérêt de cette méthode est principalement de créer un arbre équilibré. Quelle que soit la politique de séparation du domaine des variables, une fois les noeuds créés, la politique de choix de l'ordre de traitement des noeuds ainsi créés reste elle-aussi à déterminer.

    1.2.3 Parcours réduit de l'arbre

    Dans le cadre de la résolution d'un problème d'optimisation combinatoire par une méthode exacte, on peut chercher à obtenir rapidement de bonnes solutions dans un temps limité. Un des moyens pour y arriver est de transformer la méthode exacte en une méthode heuristique. Cela passe la plupart du temps par une exploration incomplète de l'arbre de recherche. Un des moyens les plus simples est de ne pas traiter l'ensemble des noeuds en attente. Un ordre de priorité pour le traitement des noeuds en attente est appliqué et on choisit de ne traiter qu'un certain nombre de noeuds parmi l'ensemble des noeuds. On restreint donc la recherche à un sous-espace de l'espace original, par exemple en ne choisissant que les valeurs les plus prometteuses pour chaque variable lors de l'exploration. Fondamentalement, dans ces méthodes, on peut considérer que les noeuds non traités sont des noeuds restant en attente en fin de résolution. Idéalement, on pourrait donc conserver l'exactitude de la méthode en continuant le traitement des noeuds jusqu'au bout (au prix de temps de résolution beaucoup plus important).

    Beam Search (Ow et Morton, 1988) est sûrement l'alternative la plus connue pour tronquer une exploration. Cette approche est basée sur une exploration en largeur de l'arbre de recherche. On utilise une fonction heuristique pour estimer l'intérêt de chaque noeud examiné. A chaque niveau de l'arbre, on garde seulement les w noeuds les plus prometteurs dans l'ensemble des noeuds ouverts, qui est l'ensemble de noeuds à

    partir desquels la recherche peut continuer. Le terme w est appelé la profondeur Beam. On voit facilement que plus w est grand, plus le nombre de noeuds explorés sera important. Ainsi, lorsqu'on augmente w, on s'approche de la solution qui aurait été trouvée par une exploration exacte. En règle générale, l'efficacité de cette approche dépend de la qualité des bornes inférieures et supérieures. De plus, tant que w est petit, cette méthode n'est pas complète.

    Limited Discrepancy Search ou LDS , méthode proposée par Harvey et Ginsberg (1995), dérive d'une recherche en profondeur classique, mais peut être combinée avec des règles de sélection de variables et de valeurs. L'idée principale de cette méthode est de limiter la recherche aux branches qui ont au plus z déviations (discrepancies). Une déviation est définie comme une décision contraire par rapport à une heuristique qui indique le meilleur noeud fils pour chaque noeud. Une déviation apparaît à chaque fois que le noeud fils choisi dans une branche n'est pas le meilleur noeud. Par exemple, si l'on considère les branches avec z = 0 déviation, l'arbre ne comportera qu'une seule branche : à chaque étape, la recherche doit suivre la branche qui mène au meilleur noeud. Plus on augmente z, plus la méthode s'approche d'une résolution exacte. Néanmoins, cette méthode est par définition assez dépendante de la qualité de l'heuristique choisie, qui détermine à chaque noeud la direction à prendre.

    La méthode Branch & Greed a été présentée par Sourd et Chretienne (1999) (voir par exemple (Néron et al., 2008) pour un article récent sur cette méthode). Cette méthode consiste à guider un arbre de recherche incomplet à l'aide d'un algorithme glouton. Comme pour Beam Search ou pour LDS, on peut paramétrer l'algorithme grâce à une valeur, notée ici k, afin que plus ou moins de feuilles soient visitées. L'algorithme parcourt alors l'arbre de recherche en partant du noeud racine et suit une branche jusqu'à trouver une feuille. Considérons une itération de l'algorithme. A l'étape l, la profondeur du noeud courant noté N, est égale à l. Pour déterminer le noeud fils de la prochaine étape, l'algorithme considère l'ensemble des noeuds fils de N dont la profondeur est égale à l + k. Chacun de ces noeuds correspond à une solution partielle et, pour chaque solution partielle, on construit une solution réalisable en utilisant l'algorithme glouton suivant : on choisit le meilleur noeud fils jusqu'à ce qu'on arrive à une feuille. Cet algorithme glouton correspond à suivre la branche qui ne comporte aucune déviation. Notons Nbest la meilleure solution trouvée durant cette étape. Le noeud successeur de N dans l'algorithme de Branch & Greed est le noeud qui permet d'atteindre le noeud Nbest. La profondeur de ce noeud est donc l + 1 et la procédure de Branch and Greed continue avec ce noeud. La qualité de l'algorithme glouton et l'heuristique choisie pour mesurer les déviations déterminent en grande partie l'efficacité de la méthode.

    Les méthodes décrites ci-dessus présentent toutes l'intérêt de dépendre d'un seul paramètre, qui détermine le niveau de complétude de la résolution. En effet, si ce paramètre est fixé à une grande valeur, les résolutions seront de type exactes. Ces méthodes, bien que pouvant s'avérer très efficaces, présentent néanmoins un défaut principal : leur réussite est fortement dépendante de l'efficacité des heuristiques retenues. Dans le cas d'une heuristique peu efficace, les déviations ne sont pas significatives. On remarque donc que ces méthodes doivent être adaptées au problème traité, pour se montrer le plus efficace possible.

    1.2.4 Ordre dynamique

    Plusieurs travaux ont déjà développé l'idée d'utiliser un ordre dynamique dans le choix des variables ou des valeurs. La plupart de ces méthodes intègrent un processus de mémorisation, appelé look back.

    Frost et Dechter (1994) ont présenté une nouvelle heuristique d'ordre de choix de valeurs pour les variables, appelée sticking value. L'idée principale est de garder en mémoire la valeur assignée à une variable durant la phase de remontée dans l'arbre, et de sélectionner cette valeur, si elle est consistante, la prochaine fois que cette variable devra être instanciée durant une phase de remontée. Leur intuition est que si cette valeur a été un succès à un moment donné, cela peut être utile de la choisir plus tard dans la recherche, afin d'accélérer la résolution. Les résultats obtenus montrent que cet algorithme offre de bonnes améliorations des performances, en réduisant de manière significative les temps d'utilisation du CPU, surtout lorsque les domaines des variables sont de tailles réduites.

    YIELDS (A yet improved limited discrepancy search) (Karoui et al., 2007) est une méthode exact qui résout des problèmes de satisfaction de contraintes. YIELDS est une version améliorée de Limited Discrepancy Search qui intègre de la propagation de contraintes et de l'apprentissage d'ordre de variables. Le schéma d'apprentissage, qui est la contribution principale de cette méthode, est basé sur les échecs rencontrés durant la recherche, dans le but d'augmenter l'efficacité de l'heuristique de sélection des variables. Un des objectifs de YIELDS est de trouver une amélioration au principal défaut de LDS, celui d'être un algorithme redondant, c'est-à-dire que des mêmes parcours peuvent être faits un nombre important de fois. Avec la méthode LDS, l'ordre de traitement des variables n'est déterminé que par une heuristique et n'est pas modifié par la méthode. Cela signifie que lorsque LDS est relancé en augmentant le nombre de déviations autorisées, on doit instancier plusieurs fois la même variable initiale. Or, si on suppose que cette variable est la cause d'échecs, il n'est pas nécessaire de développer sa branche à nouveau. Pour éviter ce genre de situation, un poids est associé à chaque variable. Ce poids est fixé initialement à 0. Durant la résolution de l'algorithme, le poids associé à la variable est incrémenté à chaque fois que la variable en question est en échec à cause de la limite sur le nombre de déviations autorisées : même si le domaine de cette variable est non vide, on ne peut choisir aucune de ses valeurs sans augmenter le nombre de déviations. Dans les itérations suivantes, cette variable sera privilégiée et placée en priorité dans la branche. Cette technique permet d'éviter la situation d'inconsistances causées par cette variable. En introduisant la notion de poids, le but est de corriger l'heuristique de choix dans les variables afin de guider ce choix vers les variables très contraintes. En effet, ce sont ces variables en particulier qui influent sur la qualité de la recherche de solutions. Afin d'accélérer le processus, les sous-problèmes difficiles et/ou inconsistants sont placés en haut de l'arbre de recherche. Cette méthode s'applique surtout aux problèmes de satisfaction de contraintes.

    Refalo (2004) a proposé une stratégie de recherche générale appliquée à de la programmation par contraintes, basée sur les impacts. L'impact de l'affection de la variable xi à la valeur a est défini de la manière suivante : I(xi = a) = 1 - Paprès/PavantP

    est défini comme une estimation de la taille de l'arbre de recherche. L'estimation retenue dans l'article est le produit cartésien des domaines de l'ensemble des variables. Plusieurs stratégies de choix de variables sont proposées. Afin de réduire l'arbre de recherche, la variable ayant l'impact le plus important est choisie en premier. Le branchement se fera alors sur la valeur de la variable ayant le plus petit impact. Afin que les décisions prises au début de l'arbre de recherche soient les plus judicieuses possibles, la méthode propose une initialisation des impacts en calculant une approximation des impacts. Celle-ci sera remplacée par la suite par les impacts effectifs. Des stratégies de redémarrage sont ensuite appliquées en cours de résolution, lorsque les impacts deviennent de plus en plus précis.

    Levasseur etal. (2007) proposent une extension de cette méthode pour les problèmes de Weighted Contraint Satisfaction. L'impact est alors défini comme étant une estimation de la capacité de l'affectation de la variable a à la valeur i à être présente dans des solutions optimales. Des méthodes de descentes gloutonnes permettent d'augmenter le nombre de solutions rapidement, afin de rendre les impacts plus précis. La sélection des variables est dans un premier temps basée sur une heuristique qui choisit la variable ayant le plus petit rapport de la taille du domaine sur le degré futur, celui-ci étant défini comme le nombre de contraintes portant sur la variable qui ont au moins une variable non affectée.

    Zanarini et Pesant (2007) proposent une heuristique centrée sur les contraintes qui guide l'exploration de l'espace de recherche vers les sous-espaces qui semblent contenir un grand nombre de solutions. Ils proposent de nouvelles heuristiques de recherche basées sur le dénombrement de solutions pour chaque contrainte. De plus, ils proposent des algorithmes pour évaluer le nombre de solutions pour deux familles de contraintes : les contraintes de dénombrement d'occurrence et les contraintes d'ordonnancement. Leur intuition est qu'une contrainte avec peu de solutions correspond à un sous-espace critique du problème.

    Boussemart et al. (2004) présentent une heuristique d'ordre dynamique sur les variables, appelée dom/wdeg, qui guide la recherche vers des espaces inconsistants des problèmes de Satisfaction de Contraintes. Cette heuristique générique exploite les informations sur des états précédents de la recherche. Un poids est associé à chaque contrainte. Ce poids est incrémenté dès que la contrainte associée est violée durant la recherche.

    Récemment, Balafoutis et Stergiou (2008) ont proposé une méthode qui utilise l'information des poids des contraintes pour d'une part, établir un ordre de traitement sur les variables, et d'autre part, trier efficacement la liste de révision des méthodes basées sur l'arc-consistance. Ils montrent que les heuristiques proposées, quand elles sont utilisées en même temps qu'une heuristique de sélection de variable qui suit la politique «first fail », se montrent très efficaces en réduisant la taille de l'arbre de recherche par une recherche centrée sur les variables les plus significatives.

    Les méthodes existantes peuvent soulever certaines difficultés. Certaines sont plus génériques que d'autres et nécessitent une adaptation au problème pour se montrer les plus efficaces. Elles sont pour la plupart dépendantes de la nature du problème; elles sont soit adaptées à des problèmes d'optimisation combinatoire, soit à des problèmes

    de satisfaction de contraintes.

    1.2.5 Apprentissage : look-back

    Dans le cadre des problèmes de satisfaction de contraintes classiques, le Backtracking (voir la section 1.2.1 pour une définition) souffre fréquemment d'un phénomène de « trashing >>, qui se traduit par le fait de redécouvrir de manière répétitive les mêmes échecs et les mêmes instanciations partielles durant la recherche.

    Les procédures dynamiques d'amélioration de parcours de l'arbre sont les schémas du type « look-ahead>> (sélection de variables et de valeurs) et « look-back>> (Backjumping, apprentissage, Nogood Recording). Le raisonnement du Backtrack conclut au rejet d'un certain nombre de choix combinatoires; le Nogood Recording (Schiex et Verfaillie, 1994) consiste à mémoriser ces choix afin de ne plus les reproduire. Ainsi, plusieurs techniques d'apprentissage des échecs ont été proposées.

    Le Backjumping a été proposé par Gaschnig (1979). Supposons qu'un échec est rencontré sur la variable xi. La technique de Backtrack classique revient sur la dernière variable instanciée xi_1. Si une autre valeur est possible pour xi_1 mais qu'aucune contrainte ne porte sur les variables xi et xi_1, alors la variable xi_1 ne peut être la source de l'échec rencontré sur xi. Ainsi, on retrouve nécessairement un échec sur la variable xi pour chaque valeur instanciée de xi_1. Gaschnig (1979) propose d'améliorer ce processus en identifiant la variable coupable de l'échec et en effectuant le retour dans l'arbre sur cette variable. L'identification est basée sur la notion d'ensemble en conflit. Un ensemble en conflit est une instanciation d'un sous-ensemble de variables ne laissant aucune possibilité pour une certaine variable non encore instanciée. Une instanciation partielle qui n'apparaît dans aucune solution est un « NoGood >> (Doyle, 1979).

    Ginsberg (1993) a proposé un nouvel algorithme pour résoudre les problèmes de satisfaction de contraintes. Cet algorithme, appelé Dynamic Backtracking peut être vu comme une amélioration du principe de Backjumping, de Graph Based Backjumping (Dechter, 1990) et de la méthode Conflict Directed Backjumping algorithms (Prosser, 1993) . La méthode Conflict Directed Backjumping enregistre à chaque étape de la recherche et pour chaque variable xi, l'ensemble des variables assignées qui a conduit à une réduction de domaine de xi. De tels ensembles sont appelés des ensembles de conflits. Dynamic Backtracking enregistre le même type d'informations, mais à un niveau plus fin. À chaque étape de la recherche, pour chaque variable xi et pour chaque valeur j qui a été supprimée du domaine courant de xi, l'algorithme enregistre l'ensemble des variables assignées précédemment qui sont responsables de cette élimination. Ces ensembles sont appelés des explications d'élimination. L'ensemble en conflit d'une variable est alors défini comme l'union des explications d'élimination des valeurs de cette variable.

    Chvátal (1997) a présenté une méthode exhaustive pour la résolution de problèmes linéaires en variables binaires, Resolution Search. Cette méthode se démarque des procédures arborescentes classiques par une exploration originale de l'espace de recherche, censée permettre de rendre la résolution du problème moins largement dépendante de

    la stratégie de branchement invoquée. Celle-ci, à l'instar des procédés de backtracking intelligents, est basée sur le principe d'apprentissage qui consiste à identifier et mémoriser les raisons des échecs qui surviennent tout au long de la recherche. Lorsqu'un échec est détecté au cours de l'exploration de l'espace de recherche, l'ensemble des variables, dont l'instanciation est responsable de l'échec, est déterminé à partir de la configuration partielle courante. Interdire pour la suite de la recherche cette instanciation partielle revient à générer une contrainte additionnelle au problème, appelée Nogood, afin de couper la recherche en amont du noeud considéré. Resolution Search propose un schéma original de gestion de ces nogoods. Celui-ci permet de limiter l'espace mémoire et le temps de traitement des nogoods. De plus, il permet d'indiquer rapidement comment poursuivre la recherche à la suite d'un échec, tout en assurant la convergence de l'algorithme. Demassey (2003) a appliqué cette méthode sur le problème d'Ordonnancement de Projet à Contraintes de Ressources (RCPSP). Palpant (2005) a proposé une utilisation de cette approche pour la résolution du problème des Queens_n2.

    1.2.6 Métaheuristiques combinées à la recherche arborescente

    Frenc et al. (2001) proposent une méthode hybride qui combine un algorithme génétique et un Branch & Bound pour un problème de MAX-SAT. Les algorithmes génétiques appartiennent à la famille des métaheuristiques; ils utilisent la notion de sélection naturelle et l'appliquent à une population de solutions potentielles au problème donné. Il y a trois aspects dans les algorithmes génétiques : la sélection, le croisement et la mutation (voir le chapitre 4 pour plus de détails sur les algorithmes génétiques). Dans cette configuration, chaque élément de chromosome correspond à une variable binaire de l'instance du problème. L'hybridation proposée dans cet article montre de meilleurs résultats que l'utilisation seule d'un Branch and Bound ou d'un algorithme génétique.

    Pessan et al. (2007) présentent une méthode d'hybridation entre une approche de Branch & Bound et un algorithme génétique. Leur idée est d'utiliser l'algorithme génétique pour améliorer la borne supérieure et ainsi accélérer la résolution par Branch & Bound, tandis que l'algorithme génétique utilise les noeuds non instanciés de la méthode de Branch & Bound afin de réduire l'espace de recherche. Les deux méthodes sont utilisées en parallèle et collaborent ensemble.

    D'autres métaheuristiques sont basées sur la coopération. On peut citer notamment les algorithmes d'Optimisation par Colonie de Fourmis (Dorigo et al., 1991) dans lesquels des fourmis construisent des solutions et déposent des quantités de phéromone dépendant de la qualité des solutions trouvées (voir le chapitre 3 pour plus de détails sur les algorithmes d'Optimisation par Colonie de Fourmis). Cette phéromone est ensuite utilisée par les fourmis afin de les diriger vers un espace de recherche. Un processus d'évaporation permet de ne garder qu'un ensemble de solutions jugées intéressantes. Khichane et al. (2008) proposent une méthode qui utilise un langage de programmation par contraintes pour décrire un problème et remplace la procédure de recherche arborescente par une recherche par Optimisation par Colonie de Fourmis. Chaque fourmi construit une affection ne violant aucune contrainte, cette affectation

    pouvant être partielle. La qualité des affectations construites dépend du nombre de variables affectées.

    La plupart des métaheuristiques sont utilisées davantage pour des problèmes d'optimisation combinatoire pour lesquels le nombre de solutions est important. En effet, ces métaheuristiques étant pour certaines basées sur la coopération entre les solutions, le nombre de solutions détermine en partie l'efficacité de la méthode.

    1.3 Dynamic Learning Search: une méthode par apprentissage

    La plupart des méthodes de résolution exactes utilisées en optimisation combinatoire s'appuient sur une énumération intelligente des solutions (Branch and Bound, Programmation par contraintes, Programmation dynamique, ...). Cette énumération revient généralement à construire un arbre de recherche, pour lequel un certain nombre de décisions sont prises à chaque noeud.

    La construction d'un arbre dépend de trois niveaux de décisions:

    Le schéma d'exploration : ce schéma détermine la manière dont va se dérouler l'exploration de l'arbre (on peut citer par exemple Depth First Search, Breadth First Search, Back Jumping, ...). Ces schémas ne modifient pas la structure principale de l'arbre. Par contre, par des mécanismes de coupes (Branch & Bound, Branch & Cut) et/ou de calculs de bornes, l'exploration de certaines parties de l'arbre peut être tronquée, ces parties étant différentes selon les schémas d'exploration retenus.

    Le schéma de recherche: L'arbre est structuré par les schémas de recherche. Cette structure est déterminée par la politique de choix des variables, ainsi que par la politique de séparation du domaine des variables (arbre binaire, un noeud-fils par valeur possible, equal-split, ...). Ces schémas de structure ont un impact important sur les performances du parcours de l'arbre de recherche (en terme de rapidité de temps de calcul et d'occupation mémoire). Les schémas les plus connus pour les politiques de choix de variables sont l'ordre lexicographique, MinDom, ou encore Dom/DDeg.

    Le schéma de complétude : à partir de ce schéma, on détermine la complétude de l'algorithme, c'est-à-dire le fait de choisir entre une exploration complète (et donc une résolution exacte) et une exploration tronquée (et une résolution approchée). Dans le cas où l'on souhaite une résolution approchée, on peut par exemple choisir de ne pas tester toutes les valeurs d'une variable, les valeurs à tester pouvant être déterminées par des heuristiques (politique de type Limited Discrepancy Search).

    La méthode Dynamic Learning Search détermine un schéma structurel de l'arbre de recherche, mais aussi un schéma d'exploration de cet arbre. De plus, cette méthode est facilement adaptable dans le cas où l'on voudrait une méthode exacte ou heuristique.

    La méthode Dynamic Learning Search (DLS) est conçue dans l'objectif de diriger la recherche vers les parties de l'espace des solutions contenant les meilleures solutions. Cette méthode se veut générique, de manière à pouvoir être utilisée indépendamment du problème traité. La méthode DLS se greffe sur un parcours en profondeur et définit de manière dynamique à chaque noeud de l'arbre des règles de priorité pour la sélection de la variable sur laquelle brancher et pour l'ordre dans lequel les différentes valeurs possibles pour chaque variable sont explorées. Ces ordres sont déduits des caractéristiques des sous-arbres obtenus jusque là lors de branchements concernant la même variable. Ainsi, lors de l'exploration, à chaque fermeture de sous-arbre (c'est-à-dire lorsque la branche issue de la dernière valeur d'une variable vient d'être explorée), le poids associé à la variable et l'ordre des valeurs à instancier pour cette variable sont mis à jour. Ces mises à jour peuvent dépendre de différents critères : qualité de la meilleure solution trouvée dans le sous-arbre considéré, nombre de coupes effectuées (dans le cas d'un Branch and Bound), moyenne des solutions... En pratique, les critères retenus dépendent principalement de la nature du problème : optimisation combinatoire ou satisfaction de contraintes.

    Le fonctionnement d'une recherche arborescente semble le même que ce soit pour un problème d'optimisation combinatoire ou pour un problème de satisfaction de contraintes. A chaque noeud de l'arbre de recherche, des décisions sont prises. Ces décisions concernent la plupart du temps la diminution du domaine d'une variable. La méthode DLS est donc conçue dans l'optique de pouvoir s'appliquer assez aisément sur ces deux types de problèmes, avec toutefois une adaptation de la fonction d'évaluation qui permet de déterminer les règles de priorité pour la sélection des variables et l'ordre dans lequel les différentes valeurs possibles pour la variable sont explorées.

    Les sections suivantes vont détailler les trois aspects de la méthode DLS : Dynamic, Learning et Search.

    1.4 Learning : une méthode basée sur un apprentissage

    La phase de Learning se décompose en plusieurs sous-parties : le sondage, l'apprentissage, la prévision et la remise en question.

    1.4.1 Sondage

    Le sondage représente la phase de démarrage de notre méthode. On sait que les décisions prises au sommet de l'arbre de recherche sont primordiales pour l'efficacité de la résolution. Il existe donc des méthodes génériques afin de choisir le plus judicieusement possible les variables. Ces méthodes sont basées sur l'idée que les variables les plus intéressantes à choisir au début de la résolution sont les variables les plus contraintes et les plus contraignantes. On peut donc choisir les variables ayant le plus petit domaine, le plus fort degré de connexité ou une combinaison des deux

    précédents critères. Mais, il existe des problèmes oü ces critères ne suffisent pas à déterminer quelles variables choisir, par exemple, lorsque toutes les variables ont le même domaine. Un choix pertinent de variables est alors complexe.

    Dans un souci de généricité, notre méthode se base sur une phase de sondage. Le sondage permet de prendre connaissance rapidement de l'arbre de recherche, il consiste en un apprentissage rapide et non exhaustif. Le sondage peut être totalement aléatoire ou dirigé vers un espace de recherche précis, notamment en fixant certaines variables à des valeurs. Une des principales difficultés est de déterminer le temps à passer dans cette phase. En effet, le fait de passer beaucoup de temps dans la phase de sondage comporte deux risques principaux. Premièrement, si le problème est facilement résoluble, la phase de sondage peut s'avérer plus longue que la résolution proprement dite. Deuxièmement, on peut risquer d'accorder une confiance trop importante au sondage et de ne pas remettre en question par la suite les informations apportées lors du sondage. Le temps accordé à la phase de sondage est donc un paramètre important. Une fois la phase de sondage terminée, les fonctions d'évaluation permettent d'attribuer des poids initiaux aux variables, ainsi qu'aux valeurs appartenant aux domaines des variables. Ces poids serviront dans la suite de la résolution afin de déterminer des ordres de branchement.

    Un cas pratique de sondage est le suivant. Pour un problème de satisfaction de contraintes, une variable est choisie aléatoirement, puis une valeur du domaine de cette variable est choisie aléatoirement. Un algorithme de filtrage est appliqué. On réitère ce procédé jusqu'à obtenir un conflit (une variable dont le domaine a été réduit au domaine nul). On évalue alors les sous-arbres fermés et on relance la résolution. Dans le cas d'un sondage dirigé, lorsque la fonction d'évaluation semble nous indiquer qu'un espace de l'arbre de recherche est intéressant, on peut alors intensifier le sondage aux abords de cet espace de l'arbre de recherche.

    1.4.2 Apprentissage

    Dans un schéma d'exploration classique d'un arbre de recherche, lorsqu'on arrive à une feuille qui n'est pas une solution (c'est-à-dire lorsque des variables ont leur domaine vide ou lorsqu'un calcul de borne inférieure permet d'arrêter l'exploration), on effectue un Backtrack qui consiste à remettre en cause la dernière décision prise. On prend alors une nouvelle décision, si cela est possible. Dans le cas contraire, on remonte dans la liste des décisions prises. Un des gros inconvénients de cette méthode est d'oublier tout ce qui a été appris lors de l'exploration qui a mené à un échec, et ne garder en mémoire que le fait que les décisions n'étaient pas bonnes. En effet, lors d'un Backtrack, lorsqu'une valeur d'une variable a mené à un échec (ou à une solution dans le cas d'un problème d'optimisation combinatoire), on choisit la plupart du temps une autre valeur pour cette même variable. Or, parmi toutes les décisions prises qui mènent à des échecs, certaines ont pu être mauvaises et d'autres très mauvaises.

    A travers la phase d'apprentissage, la méthode Dynamic Learning Search tente de tirer des enseignements des erreurs passées, afin de diriger la recherche vers un es-

    pace qui soit le plus prometteur possible (voir la section 1.2.5 pour plus de détails sur d'autres techniques basées sur l'apprentissage). Les techniques existantes se basent en général sur les « NoGood ». Elles mémorisent ainsi les causes d'échec et tentent de ne plus commettre les mêmes échecs. La méthode DLS tente quant à elle de retenir les bonnes décisions et de les reproduire.

    La phase d'apprentissage est donc une des phases les plus importantes de notre méthode. Durant cette phase, on va évaluer la qualité d'un sous-arbre, c'est-à-dire d'un es-pace de solution. De cette évaluation découlera une affectation de poids aux variables, ainsi qu'aux valeurs appartenant aux domaines des variables. Ces affectations permettront un ordonnancement parmi les variables non fixées sur lesquelles brancher, ainsi que l'ordre dans lequel leurs valeurs seront explorées.

    La qualité d'un sous-arbre dépend de plusieurs paramètres. En particulier, on peut facilement se rendre compte que la fonction d'évaluation pour un problème de satisfaction de contraintes n'est pas la même que pour un problème d'optimisation combinatoire. Dans le cas d'un problème de satisfaction de contraintes, on cherche à obtenir une seule solution complète, c'est-à-dire que l'ensemble des variables du problème soient instanciées. On peut donc estimer que, plus le nombre de variables instanciées dans un espace de solution est important, plus les décisions prises correspondantes semblent prometteuses. La profondeur d'un sous-arbre (déterminée par le cardinal des variables instanciées) semble une fonction d`évaluation pertinente pour un problème de satisfaction de contraintes (voir la section 1.8.1 pour plus de détails). Dans le cas d'un problème d'optimisation combinatoire, la meilleure solution en terme d'objectif contenue dans le sous-arbre semble être une fonction d'évaluation judicieuse (voir la section 1.8.2 pour plus de détails). En effet, si dans un sous-arbre, il existe une solution de très bonne qualité, on peut supposer que la solution optimale sera proche en terme d'assignation valeur/variable de cette solution (on retrouve ce principe dans certains opérateurs de recherche locale). On peut aussi considérer comme des critères pertinents, des critères prenant en compte la diminution des domaines par les algorithmes de filtrage, ou encore le nombre de coupes effectuées dans un sous-arbre. En effet, on peut avoir intérêt à retenir les affections de valeurs à des variables qui ont permis de couper de manière importante l'arbre de recherche.

    On peut remarquer néanmoins que ces critères sont des critères uniquement « positifs ». En effet, dans le cas d'un problème à satisfaction de contraintes, on peut obtenir deux sous-arbres dont les profondeurs maximales sont égales et pouvant pourtant présenter un intérêt différent. On peut imaginer qu'un des deux sous-arbres soit beaucoup moins large que l'autre (à cause par exemple des algorithmes de filtrage). Le temps passé à explorer ce sous-arbre aura donc été beaucoup plus court. On aura tout intérêt à mémoriser des critères « négatifs » afin de départager des éventuelles égalités entre deux sous-arbres.

    Les fonctions d'évaluation proposées précédemment ne concernaient qu'un critère maximum (profondeur maximale, meilleure solution, ...). On pourra chercher aussi à mémoriser la qualité globale d'un sous-arbre en observant d'autres critères : moyenne du critère sur l'ensemble du sous-arbre, médiane, écart-type, etc. Le critère retenu ici

    est un critère maximum.

    Le besoin d'adapter la méthode à la spécificité du problème (problème de satisfaction de contraintes ou d'optimisation combinatoire) n'apparaît que dans la fonction d'évaluation. On peut néanmoins imaginer avoir un panel de fonctions d'évaluations à appliquer et ainsi pouvoir déterminer le type de problèmes en fonction de quelles évaluations ont été les plus efficaces. Par ce biais, il n'est plus indispensable de connaître dans quelle catégorie de problèmes la méthode est appliquée.

    1.4.3 Prévision

    L'apprentissage, par la fonction d'évaluation, permet de diriger la recherche vers des sous-espaces qui semblent prometteurs. Lorsqu'on branche sur une variable et sur une valeur, les pondérations associées à cette valeur et à cette variable nous donnent une prévision de la qualité espérée du sous-arbre qui va être parcouru.

    L'apprentissage peut être un apprentissage supervisé. Un des moyens pour cela est de comparer la qualité d'un sous-arbre déterminée par la fonction d'évaluation et la qualité de ce même sous-arbre prévue par les pondérations lors de la phase d'apprentissage. Dans le cas où ces valeurs seraient trop éloignées, cela pourrait éventuellement indiquer que la fonction d'évaluation est inadaptée. Il peut être alors intéressant d'envisager une mise à jour des informations qui prenne en compte les différences entre ce qui était prévu et ce qui est avéré.

    1.4.4 Remise en question

    La phase de sondage permet de diriger la recherche au sommet de l'arbre. Cependant, il semble intéressant de ne pas se fier durant toute l'exploration aux informations récupérées uniquement lors de la phase de sondage. Pour cela, on peut mettre en place un phénomène d'évaporation de l'information. Au fur et à mesure de l'exploration de l'arbre de recherche, les informations apportées par la phase de sondage risquent de s'avérer de moins en moins pertinentes, le phénomène d'évaporation permettrait alors d'oublier ces informations.

    Concrètement, cela se traduit par une décrémentation de l'ensemble des pondérations associées aux variables et aux valeurs, après chaque branchement. La phase d'apprentissage prend alors plus d'importance au fur et à mesure de l'exploration par rapport à la phase de sondage. Un autre moyen de remettre en question les différents apprentissages est d'appliquer des processus de redémarrage. On peut imaginer re-passer par une phase de sondage, avec certaines décisions fixées et donc accentuer le sondage dans un espace de recherche qui semble prometteur.

    L'aspect Learning de la méthode permet donc, lorsqu'un sous-arbre est complété de déterminer la qualité de ce sous-arbre par le biais d'une fonction d'évaluation. La section suivante présente la façon dont sont utilisées les pondérations associées aux variables et aux valeurs déterminées par la fonction d'évaluation.

    1.5. Dynamic : un ordre dynamique de choix des variables et de sélection des valeurs

    1.5 Dynamic : un ordre dynamique de choix des variables et de sélection des valeurs

    La phase d'apprentissage permet de déterminer la qualité d'un sous-arbre : une fonction d'évaluation renvoie une valeur (ou plusieurs valeurs) quant a la qualité estimée de ce sous-arbre. Ainsi, une pondération va être associée a chaque décision qui correspond a l'obtention de ce sous-arbre. La mise a jour des pondérations se passe de la manière suivante : lorsqu'un sous-arbre est complété, on regarde toutes les décisions qui ont été prises pour amener a ce sous-arbre et la pondération associée a ce sousarbre va remplacer les pondérations précédentes, dans le cas où elle est de meilleure qualité. Prenons un exemple concret : lors de l'exploration de l'arbre de recherche, une pondération de valeur n avait été associée a la variable xi. Si par la suite, la fonction d'évaluation renvoie une pondération égale a m (avec m < n), alors la pondération associée a la variable xi sera dorénavant m. D'autres choix de mises a jour sont envisageables, tels que la moyenne de l'ancienne pondération et de la nouvelle, ou encore la somme.

    Ces pondérations permettent d'ordonner le choix de sélection des variables. Lors de l'exploration, quand le choix concernant la prochaine variable se pose, la méthode DLS choisit la variable non-instanciée possédant la plus faible pondération. Puis, la valeur sur laquelle brancher est ensuite choisie en fonction des pondérations de l'ensemble des valeurs du domaine de la variable. La phase d'apprentissage a indiqué que cette valeur pour cette variable semblait conduire vers des espaces de recherches intéressants. Donc, la recherche est intensifiée dans les sous-arbres correspondant a ce couple variablevaleur.

    Une fois que le sous-arbre a été exploré et que les algorithmes de filtrage ont été appliqués, les pondérations sont de nouveau mises a jour a l'aide de la fonction d'évaluation.

    Les fonctions d'évaluation présentées proposent une pondération pour un couple valeur-variable. A partir de ces pondérations, il faut déterminer une pondération associée a une variable. Pour cela, il est possible de faire la moyenne des pondérations associées aux valeurs du domaine de la variable. On branchera sur la variable ayant la plus petite moyenne en priorité, afin de limiter la taille de l'arbre de recherche. D'autres pondérations sont néanmoins envisageables.

    La phase d'apprentissage permet de déterminer des pondérations qui servent a déterminer un ordre pour les variables, ainsi que pour chaque variable, l'ordre dans lequel ses valeurs vont être sélectionnées. Une question importante est de savoir quand a lieu la mise a jour des pondérations.

    1.6 Search: un schéma de recherche adapté à la méthode

    La méthode DLS se base sur une recherche en profondeur. Une fois qu'une variable a été choisie, on choisit une valeur (selon les règles déterminées par les pondérations), puis on applique des algorithmes de filtrage (propagation de contraintes ou calcul de bornes inférieures). S'il reste des variables non instanciées, on réitère le processus.

    Lorsque l'exploration d'un sous-arbre est complète, c'est-à-dire que toutes les valeurs d'une variable ont été instanciées, la fonction d'évaluation est appelée, afin d'obtenir des pondérations pour les valeurs instanciées, ainsi que pour la variable instanciée. Le fait de mettre les pondérations à jour uniquement lorsque le sous-arbre est complété permet d'assurer d'une part la complétude de la méthode, d'autre part la non-répétition de solutions.

    Néanmoins, on peut imaginer ne pas visiter le sous-arbre dans son intégralité. Une phase de sondage pour chaque sous-arbre avec des informations de plus en plus complètes au fur et à mesure de la descente dans l'arbre de recherche permettrait d'envisager une méthode efficace applicable dans des temps limités.

    De même, on peut appliquer une méthode de type Limited Discrepancy Search afin de limiter le nombre de valeurs instanciées pour chaque variable.

    Enfin, lorsqu'il faut choisir la prochaine variable à instancier, on peut limiter le choix aux variables appartenant au voisinage des variables déjà instanciées (le voisinage d'une variable xi étant défini comme l'ensemble des variables qui partagent une contrainte avec xi). Cela permet une certaine continuité dans le parcours de l'arbre de recherche.

    1.7 Algorithme général de la méthode

    Par la suite, nous utiliserons les notations suivantes : Soit la variable i pour i allant de 1 à n. On note Di le domaine de la variable i. Soit pi,j la valeur de la pondération associée à la jeme valeur de la variable i, mini (respectivement maxi) la valeur minimum (respectivement maximum) des pondérations des valeurs de la variable i.

    L'algorithme de la méthode DLS est le suivant :

    1.8 Méthode Dynamic Learning Search: critères de sélection

    La plupart des méthodes existantes consistent à définir des priorités de branchement sur les variables ou sur les valeurs. La méthode que nous proposons consiste, quant à elle, à définir dynamiquement des politiques de priorités de branchement sur les variables, ainsi que sur les valeurs que peuvent prendre les variables. N'étant pas basée sur des critères heuristiques, cette méthode se veut surtout générique. En effet, dans

    Algorithme 1 : Algorithme général de DLS

    1 Phase Sondage;

    2 tant que critère d'arrêt non atteint faire

    3

     

    Construction d'arbres aléatoires : choix aléatoire d'une variable, choix aléatoire d'une valeur dans son domaine;

    4 Mises à jour des pondérations en fonction des arbres aléatoires obtenus par le biais de la fonction d'évaluation;

    5 tant que critère d'arrêt non atteint faire

    6 Sélectionner la variable k selon les pondérations;

    7

    8

    9

    10

    Trier les valeurs j avec j ? Dk selon les pondérations;

    Branchement et propagation des contraintes et/ou calcul d'une borne inférieure;

    Mise à jour des pondérations sur les valeurs et sur les variables au cours de la recherche dès qu'un sous-arbre est complété (ou une partie du sous-arbre visitée dans le cas d'une méthode non complète);

    Phase d'évaporation;

    un premier temps, sa seule dépendance au problème est la nécessité de différencier les problèmes d'optimisation combinatoires aux problèmes de satisfaction de contraintes.

    En s'inspirant des principes énoncés précédemment, notre méthode propose des politiques de branchement pour les valeurs et pour les variables.

    1.8.1 Problèmes de Satisfaction des Contraintes

    Dans le cadre de l'application de la méthode DLS aux problèmes de Satisfaction de Contraintes, plusieurs possibilités se sont présentées à nous pour les choix des valeurs, ainsi que pour le choix des variables.

    Choix de sélection des valeurs

    Dans un problème de Satisfaction de Contraintes, la réponse classique au problème est de type « oui >> ou « non >> (existence ou non d'une solution). Le cas où on recherche l'ensemble des solutions n'est pas abordé ici. La qualité des solutions trouvées ne peut donc pas être un critère pour le calcul des pondérations liées aux valeurs ou aux variables.

    Lorsque l'on cherche à résoudre un problème de satisfaction de contraintes, une solution correspond à l'instanciation de l'ensemble des variables. La feuille dans l'arbre de recherche qui correspond à cette solution a donc une profondeur égale au nombre de variables du problème. On comprend alors que lorsqu'une solution existe, la feuille correspondante se situera dans un sous-arbre de profondeur importante. On va donc

    chercher à se diriger dans de tels sous-arbres. Le critère de pondérations pour la politique de branchement sur les valeurs est donc le suivant : pour chaque valeur de chaque variable, on garde en mémoire le maximum des profondeurs maximales des sous-arbres engendrés. La profondeur correspond dans notre cas au nombre de variables instanciées. On ne différenciera pas le cas des variables instanciées lors de la phase de propagation des contraintes, des variables instanciées lors de la séparation. La pondération associée au choix de cette valeur est donc mise à jour chaque fois que le choix de cette valeur engendre un sous-arbre d'une profondeur plus importante que tous les sous-arbres engendrés précédemment dans l'arbre par cette valeur.

    Comme on cherche à se diriger vers les sous-arbres de plus grande profondeur, on va donc choisir pour chaque variable la valeur ayant la pondération la plus importante.

    La moyenne de la profondeur du sous-arbre engendré ne nous a pas semblé être un bon critère de sélection. En effet, une valeur qui amènerait à un sous-arbre ayant un chemin de grande profondeur et un grand nombre de chemins de petites profondeurs aurait une moyenne de profondeur de sous-arbre assez faible et serait donc pénalisée alors que cette valeur peut s'avérer très intéressante, puisqu'elle a amené à un chemin de grande profondeur.

    Choix de sélection des variables

    On a vu que le choix des variables était primordial pour la taille de l'arbre de recherche. Plusieurs choix sur l'ordre de sélection des variables sont possibles, certains tirent parti des pondérations calculées pour le choix des valeurs, d'autres sont plus génériques et utilisés de façon assez répandue. Les choix suivants sont des choix classiques de la littérature.

    - Première variable non instanciée : on choisit parmi les variables non instanciées la première variable dans un ordre lexicographique.

    - Plus petit domaine : on choisit en priorité parmi les variables non instanciées la variable qui possède le plus petit domaine. Ce domaine peut être calculé en phase initiale de la résolution du problème ou de manière dynamique à chaque noeud.

    - Plus petit regret minimum : ce choix renvoie la variable avec la plus petite différence entre la plus petite valeur possible et la prochaine plus petite valeur possible. Ce choix est basé sur le principe de regret. Le regret est défini comme la différence entre ce qu'aurait été la meilleure décision possible dans un scénario et la décision actuelle. Dans un problème des satisfaction de contraintes, on peut définir le regret minimum comme la différence entre les deux plus petites valeurs du domaine d'une variable.

    - Plus petit regret maximum: ce choix renvoie la variable avec la plus petite différence entre la plus grande valeur possible et la prochaine plus grande valeur possible.

    - Plus fort degré : on choisit la variable ayant le degré futur le plus important, le degré étant défini pour une variable comme le nombre de contraintes portant sur celle-ci et ayant au moins une variable non affectée.

    - Plus petit domaine divisé par le plus fort degré (MinDom/Deg) : on choisit la variable ayant le plus petit rapport entre la taille de son domaine et le degré de cette variable.

    Pour les choix des variables qui utilisent les pondérations sur les variables, nous avons proposé les ordres suivants :

    - Profondeur maximale : on choisit parmi les variables non instanciées la variable qui a parmi ses valeurs celle qui a amené au sous-arbre le plus profond. Ce choix ne nous semble pas cohérent. En effet, lors de la fermeture d'un sous-arbre de profondeur n (où n est maximal), toutes les variables instanciées ont une de leurs valeurs qui a une pondération égale à n. Selon le critère « Profondeur maximale » pour le choix de la variable, toutes les variables auraient la même pondération et il faudrait donc choisir parmi toutes ces variables. Ce choix pourrait alors se faire de manière aléatoire ou lexicographique, mais ne profiterait pas des informations apportées par les pondérations sur les valeurs.

    - Moyenne maximale : ce critère propose de choisir la variable ayant la moyenne de pondération de ses valeurs la plus importante. Par ce principe, on cherche à brancher en priorité sur les variables qui ont amené à des sous-arbres de taille importante. Ce critère est en opposition avec certains principes proposés auparavant (Haralick et Elliot, 1980).

    - Moyenne minimale : ce critère propose de choisir la variable ayant la moyenne de pondération de ses valeurs la moins importante. On dirige donc la recherche vers les variables les plus contraintes. Ce critère est proche de la philosophie de la méthode First Fail.

    - Plus petit écart aux extrêmes : ce critère part du principe que les variables les plus intéressantes sont les variables dont les valeurs ont amené à des sous-arbres soit de toute petite profondeur (ces variables réduisent la taille de l'arbre de recherche) soit de grande profondeur. On cherche donc à choisir en priorité les variables dont les pondérations sur les valeurs sont le plus proches possibles des extrêmes. On branchera donc sur la variable qui minimise l'équation (1.1).

    1

    |Di| ? minimum(n - pi,j, pi,j) (1.1)

    j?Di

    n représente le nombre de variables (et donc une borne supérieure de la profondeur maximale de l'arbre de recherche).

    Pour ne pas privilégier les variables dont le domaine initial est restreint, cette somme est divisée par le nombre de valeurs du domaine (|Di|).

    On peut remarquer que si l'on enlève le premier terme du minimum, on cherche alors la variable qui minimise

    1

    |Di| ? (n - pi,j) (1.2)

    j?Di

    ce qui est équivalent à rechercher la variable qui maximise

    1

    |Di| ? (pi,j) (1.3)

    j?Di

    Ce critère correspond alors à une constante prêt au critère de choix de Moyenne maximale. De manière équivalente, si l'on enlève le deuxième terme, on cherche alors la variable qui minimise

    1

    |Di| ? (pi,j) (1.4)

    j?Di

    ce qui correspond au critère de choix de Moyenne minimale.

    Les critères de pondérations retenus pour les choix des valeurs (et donc certains des critères de choix des variables qui dépendent des pondérations) ne sont pas adaptés pour les problèmes d'optimisation combinatoire.

    1.8.2 Problèmes d'Optimisation Combinatoire

    Dans le cadre de problèmes d'optimisation combinatoire, plusieurs possibilités se sont présentées à nous pour les choix des valeurs, ainsi que pour le choix des variables.

    Choix des Valeurs

    Dans un problème d'optimisation combinatoire, on cherche à minimiser (ou maxi-miser) un objectif. Par la suite, nous considérerons uniquement le cas où l'on cherche à minimiser un objectif.

    La qualité des solutions trouvées peut donc être un critère pertinent pour le calcul des pondérations liées aux valeurs ou aux variables. Pour chaque valeur de chaque variable, on garde en mémoire le coût de la meilleur solution trouvée par cette affectation variable - valeur.

    De manière équivalente aux problèmes de satisfaction de contraintes, la moyenne des coûts des solutions ne nous a pas semblé être un bon critère de sélection. En effet, une valeur qui amènerait à un sous-arbre très déséquilibré (de très bonne qualité d'un côté et de très mauvaise qualité d'un autre côté) aurait une moyenne de coût des solutions de sous-arbre assez élevée, alors que cette valeur peut s'avérer très intéressante.

    Comme on cherche à se diriger vers les sous-arbres contenant les feuilles de coûts les plus faibles, on va donc choisir pour chaque variable, la valeur ayant la pondération la moins importante.

    Choix des variables

    On a vu que le choix des variables était primordial pour la taille de l'arbre de recherche. Comme pour les problèmes de satisfaction de contraintes, un certain nombre de choix sur les variables sont possibles :

    - Plus petit domaine,

    - Plus petit regret minimum (le regret est calculé généralement par rapport à la valeur de la fonction objectif),

    - Plus petit regret maximum,

    - Plus fort degré,

    Pour les choix des variables qui utilisent les pondérations sur les variables, nous avons proposé les possibilités suivantes (pour plus de détails, voir la section 1.8.1) :

    - Moyenne maximale,

    - Moyenne minimale,

    - Plus petit écart aux extrêmes.

    On remarque que les heuristiques de critères de choix sur les valeurs doivent être adaptées en fonction du type de problème sur lequel on veut appliquer notre méthode.

    Néanmoins, on retrouve, pour l'heuristique de choix sur les valeurs à brancher, de grandes ressemblances entre les problèmes de satisfaction de contraintes et les problèmes d'optimisation combinatoire.

    La question que nous nous sommes posé est de savoir si une heuristique de choix sur les valeurs peut être identique pour les deux types de problèmes.

    1.8.3 Méthode commune aux deux types de problèmes

    On constate que les heuristiques proposées, en ce qui concerne les choix des valeurs sur lesquelles brancher, sont fortement dépendantes du type de problème. Dans la section suivante, nous proposons une heuristique de choix de valeur qui ne dépend pas du type de problème étudié.

    Choix des valeurs

    Rappelons le principe général de fonctionnement d'un Branch & Bound dans le cas d'un problème d'optimisation combinatoire. On choisit une variable parmi les variables non instanciées. On crée autant de noeuds fils que le nombre de valeurs de la variable. Pour chaque valeur, on calcule une borne inférieure (par résolution d'une relaxation spécifique, de programmation linéaire, etc.). Si cette borne inférieure est supérieure à la plus petite borne supérieure connue, on arrête l'exploration du sous-arbre engendré par cette valeur et on passe à une autre valeur. Dans le cas contraire, il existe deux possibilités : soit on est à une feuille et dans ce cas, on met à jour la borne supérieure, soit on continue l'exploration de l'arbre de recherche. On peut remarquer que cette méthode est fortement dépendante de l'efficacité du calcul de la borne inférieure.

    On peut remarquer une analogie entre la coupe effectuée dans l'arbre lorsque la borne inférieure est supérieure à la borne supérieure avec les retraits des valeurs d'un domaine d'une variable suite à une propagation de contraintes dans un problème de satisfaction de contraintes. En effet, lorsqu'une valeur est supprimée d'un domaine, cela revient à dire que l'instanciation de cette valeur est impossible, puisqu'elle violerait un certain nombre de contraintes. Lorsqu'un sous-arbre est fermé pour une valeur dans

    un Branch & Bound, cela revient à dire que cette valeur viole la contrainte qui assure que les bornes inférieures doivent être inférieures à la plus petite borne supérieure.

    Une heuristique de critère de choix pour les valeurs est donc la suivante. Pour chaque valeur, on garde en mémoire le nombre de fois où l'arbre est coupé (ou que la valeur est supprimée du domaine de la variable dans le cas du problème de satisfaction de contraintes). On triera les pondérations sur les valeurs par ordre croissant afin de diriger la recherche dans l'arbre vers les meilleures solutions (ou vers les espaces de recherche étant supposés contenir une solution). Néanmoins, on se rend compte que ce critère n'est pas assez précis. En effet, ce critère ne tient pas compte du nombre de fois où la valeur en question a été choisie. Le critère retenu est donc le suivant. On cherche la valeur qui minimise:

    nombre de fois où la valeur a mené à un échec (1.5)

    nombre de fois où la valeur a été choisie

    Ce critère est adapté aux deux types de problèmes et permet dans un cas comme dans l'autre de diriger la recherche vers un espace de solutions de qualité.

    Choix des variables

    L'ensemble des heuristiques proposées pour le choix concernant les variables dans le cas de problèmes d'optimisation combinatoire ou de problèmes de satisfaction de contraintes sont adaptées à l'heuristique de critère de choix pour les valeurs que nous avons proposée ci-dessus.

    1.9 Résultats expérimentaux

    Les sections suivantes présentent l'application de notre méthode sur plusieurs problèmes : un problème d'optimisation combinatoire (le problème du Voyageur de Commerce), un problème de satisfaction de contraintes pratique (le problème d'Emploi du Temps de Garde d'Infirmières) et plusieurs problèmes de satisfaction de contraintes (le problème du Sac-à-dos Multidimensionnel, le problème du Carré Magique et le problème de Coloration de Graphes).

    1.9.1 Application au problème du Voyageur de Commerce

    La première application de notre méthode se fait dans le cadre d'un problème d'optimisation combinatoire. Le problème choisi est le problème du Voyageur de Commerce. Ce problème présente l'avantage de fournir rapidement un nombre important de solutions. Le but du problème est de trouver un circuit de longueur minimal passant par n villes. Chaque ville doit être visitée une et une seule fois.

    Nous utilisons un schéma de branchement naïf dans lequel chaque noeud est associé à une ville i et chaque noeud fils correspond à la ville j visitée immédiatement après i. Nous associons alors un poids wij à chaque arc (i, j) égal à la valeur de la meilleure solution trouvée dans l'ensemble des sous-arbres explorés. Ce poids est mis à jour à chaque fois qu'une solution de coût inférieur est trouvée pour le même arc (i, j). Le schéma de branchement consiste à choisir les arcs candidats dans l'ordre croissant des poids. Le schéma ainsi présenté décrit une politique de branchement fixe sur les variables (chaque noeud du niveau k correspond à fixer une valeur à la variable xk indiquant quel arc est emprunté à la position k) tandis que l'ordre des valeurs est déterminé par la méthode DLS. Les poids associés aux arcs sont initialisés par une phase d'apprentissage. Cette phase consiste en une génération aléatoire de chemins dans l'arbre de recherche. Le nombre de chemins aléatoires est fixé à n2, où n est le nombre de ville. Les résultats montrent une réduction importante de la taille de l'arbre de recherche, ainsi que du temps d'exécution, comparé à une méthode de Profondeur en Premier (Depth First Search).

    Le tableau 1.1 présente nos résultats sur un ensemble de 60 instances de problème de Voyageur de Commerce. Les instances utilisées sont des instances générées aléatoirement avec un nombre de villes allant de 10 à 22. Les villes sont situées aléatoirement dans un carré de 100 par 100. 5 instances sont générées par nombre de villes. Les instances de Problème de Voyageur de Commerce sur lesquelles notre méthode est appliquée sont des instances de très petites tailles par rapport à l'état de l'art (les dernières méthodes par séparation et génération de coupes sont capables de résoudre des instances de très grandes tailles, comme une instance comprenant les 24978 villes de Suède), mais permettent d'évaluer notre méthode. Les résultats présentent le temps d'exécution moyen (en secondes) et le nombre de noeuds, sur l'ensemble des instances.

     

    Depth First Search

    DLS

    DLS avec apprentissage

    Nombre de noeuds Temps exécution (in sec)

    6,089,428

    57

    4,790,007

    45

    3,258,450

    30

    TABLE 1.1 - Résultats expérimentaux pour plusieurs méthodes appliquées au problème du Voyageur de Commerce

    1.9.2 Application au problème d'Emploi du Temps de Garde d'Infirmières

    Notre méthode a été ensuite appliquée à un problème issu d'une application pratique. Ce problème est un problème de rotation de personnel avec contraintes, connu sous le nom de problème d'emploi du temps pour les gardes d'infirmières ou Nurse Rostering Problem (voir (Cheang et al., 2003) pour plus de détails sur ces problèmes). Ce problème est un problème de satisfaction de contraintes dont le but est de satisfaire les contraintes de compétences tout en assurant que les employés ayant plusieurs compétences soient employés pour chacune de leurs compétences d'une manière équilibrée. Le problème d'emploi du temps pour les gardes d'infirmières est un problème NPdifficile (Osogami et Imai, 2000). Le problème étudié est un problème concret, proposé

    dans le cadre d'un partenariat avec Daumas Autheman et Associés, qui concerne une rotation de personnel dans une entreprise de déchargement de ferries.

    Soit n le nombre d'employés. Xijk est l'activité de l'employé i, le jour j et semaine k, avec i = 1, . . . , n, j = 1, . . . , 7, k = 1, . . . , l. Xijk est égal à 0 quand l'employé ne travaille pas. S = 1, . . . , t est l'ensemble des activités considérées. Soit Ci c S pour i = 1, . . . , n, l'ensemble des activités que l'employé i est capable d'exécuter. Emjk est le nombre d'employés requis pour l'activité m au jour j et semaine k. Les contraintes sont les suivantes :

    |{Xijk|Xijk = m}| = Emjk j = 1, .. . ,7 k = 1, ... , l m = 1, .. . , t (1.6)

    |{Xijk|Xijk = 0}| = 2 i = 1, . . . , n k = 1, . . . , l (1.7)

    |{Xi6k|Xi6k = 0}| = r i = 1, .. . , n k = 1, .. . , l (1.8)

    |{Xi7k|Xi7k = 0}| = r i = 1, .. . , n k = 1, .. . , l (1.9)

    b 5

    |Ci|c = |{Xijk|Xijk = m}| = [ 5

    |Ci|1 m E Ci i = 1, .. . , n k = 1, .. . , l (1.10)

    Xijk E Ci i = 1, ... , n j = 1, ... ,7 k = 1, ... , l (1.11)

    Les contraintes (1.6) assurent que, pour chaque période de temps, le nombre d'employés assignés à l'activité m est égal au nombre requis d'employés. Les contraintes (1.7) assurent que chaque employé est en repos au moins deux jours par semaine. Les contraintes (1.8) et (1.9) assurent que le nombre de samedis et dimanches vaqués est supérieur à r (où r est une donnée du problème). Enfin, la contrainte (1.10) indique que si un employé possède plusieurs compétences, il doit être employé pour chacune de ses compétences (5 étant le nombre moyen de jours travaillés par semaine).

    Nous avons implémenté une version préliminaire de la méthode DLS telle que décrite dans la section 1.3 et nous avons comparé notre méthode avec des politiques (goals) proposées par le solver commercial ILOG Solver.

    Le tableau 1.2 montre nos résultats sur un ensemble de 25 instances générées aléatoirement sur un horizon de temps allant de 4 à 75 semaines et un nombre d'employés égal à 5. Les résultats présentent la moyenne des temps d'exécution (en secondes) pour obtenir une solution. La limite de temps est fixée à 600 secondes. Notre méthode est comparée avec deux politiques par défaut dans ILOG Solver. Les colonnes ILOG Solver et DLS correspondent à la politique de choix des valeurs : plus petite valeur possible pour la colonne ILOG Solver et plus grande pondération pour la méthode DLS. Les lignes correspondent à la politique de choix des variables : Première Variable Non Bornée ou First Unbound qui choisit en premier la première variable non bornée, Plus Petit Domaine ou dom qui choisit en premier la variable non bornée avec le plus petit domaine) (ces deux méthodes sont des politiques par défaut dans ILOG Solver), puis les politiques présentées dans la section 1.8.1), Moyenne maximale, Moyenne minimale, Plus petit écart aux extrêmes.

    La lecture des résultats nous permet de comparer l'efficacité des choix dans les variables. Il semble évident que la politique de choix de variable ayant la plus grande

     

    Ilog Solver

    DLS

    First unbound

    94 s

    117 s

    Plus petit domaine

    52 s

    24,34 s

    Moyenne minimale

     

    0,75 s

    Moyenne maximale

     

    130,28 s

    Écart aux extrêmes

     

    3,98 s

    TABLE 1.2 - Résultats expérimentaux pour plusieurs méthodes appliquées au problème d'emploi du temps pour les gardes d'infirmières

    moyenne des pondérations n'est pas une politique efficace ici. En appliquant cette politique, les résultats sont plus mauvais que dans les politiques par défaut d'ILOG Solver. On peut remarquer que cette politique va a l'encontre de la politique de « First Fail >>. En choisissant la variable qui a la plus petite moyenne des pondérations, les variables instanciées ont tendance à couper rapidement l'arbre de recherche. Ces résultats montrent ainsi que la politique de « First Fail>> semble la plus efficace. En conclusion, les résultats montrent que la méthode DLS est jusqu'à 50 fois plus rapide que les politiques par défaut d'ILOG Solver.

    1.9.3 Application à des problèmes de Satisfaction de Contraintes académiques

    Pour mesurer l'efficacité de notre méthode, nous l'évaluons sur trois jeux de problèmes académiques. Le premier est un ensemble d'instances du problème de sac-àdos multidimensionnel (Multiknapsack Problem, voir (Kellerer et al., 2004) pour plus de détails). Généralement, l'objectif du Multiknapsack Problem est de maximiser la valeur des objets emportés. Dans les instances choisies, le problème est transformé en un problème de satisfaction de contraintes, pour lequel une seule solution doit être trouvée. Pour cela, une contrainte est ajoutée : la valeur de l'objectif doit être supérieure à une valeur donnée. Le problème est modélisé par un ensemble de contraintes linéaires portant sur des variables binaires. Ces problèmes sont généralement complexes pour des solvers basés sur de la propagation de contraintes. 6 problèmes sont issus d'une bibliothèque d'instances de Recherche Opérationnelle1 pour lesquels la fonction objectif est contrainte à prendre la valeur optimale. Ces problèmes ont entre 6 et 11 contraintes et le nombre de variables est compris entre 15 et 50.

    Le second jeu de problèmes est le problème du Carré Magique (voir le livre de Descombes (2000) pour une vision historique de ce problème). Le problème consiste à remplir une matrice de taille n par n de telle sorte que toutes les cases contiennent une valeur différente et que les sommes sur chaque ligne, sur chaque colonne et sur les deux diagonales soient les mêmes.

    Enfin, le troisième jeu de problèmes est le problème de Coloration de Graphes (voir le livre de Jensen et Toft (1995) pour plus de détails sur ce problème). Les instances

    1. Les instances sont disponibles sur le site http :// mscmga.ms.ic.ac.uk/jeb/orlib/mdmkpinfo.html

    sont issues d'une bibliothèque d'instances2. Afin de mesurer plus efficacement notre méthode dans le temps imparti, nous limitons la taille des instances à k. Pour cela, nous ne prenons en considération que les k premiers noeuds du graphe. Ainsi, nous réduisons le temps de calcul, ce qui nous permet de comparer notre méthode avec les méthodes du solver ILOG Solver. On peut noter que les instances ainsi construites sont de petites tailles. De plus, les méthodes que nous proposons ne sont pas comparables en terme de qualité et de temps d'exécution aux méthodes dédiées à ce problème.

    Toutes les expérimentations ont été faites sur un AMD 64 X2 3800, 1 Go de RAM, en utilisant ILOG Solver 6.0. Les tableaux 1.3, 1.4 et 1.5 présentent les temps d'exécution en secondes et le temps a été limité à 1500 secondes. Le nombre de points de choix est présenté afin de montrer une mesure de la taille de l'arbre de recherche.

    Pour tous les problèmes qui suivent, le critère d'évaluation du sous-arbre qui a été retenu est la profondeur maximale du sous-arbre. La mise à jour des pondérations suit le principe du maximum. Ainsi, une pondération associée à un couple variable-valeur est mise à jour dès qu'une profondeur de taille plus importante est trouvée dans un sous-arbre issu du même couple variable-valeur. La mise à jour consiste en un remplacement de l'ancienne pondération par la nouvelle pondération. Pour chaque variable, la valeur choisie en premier est celle ayant la pondération la plus important. Enfin, la phase de sondage consiste la construction de K chemins aléatoires, où K est égal à la somme de la cardinalité des domaines des variables. Ce choix permet de ne pas passer un temps trop important dans la phase de sondage.

    Le tableau 1.3 présente les résultats sur les instances du problème de sac-à-dos multidimensionnel. Nous comparons plusieurs méthodes : la méthode « Aléatoire » choisit aléatoirement la variable à instancier parmi les variables non instanciées ainsi que la valeur à instancier, la méthode « MinDomainSize » choisit en premier la variable de plus petit domaine et la plus petite valeur du domaine, la méthode DLS est la méthode telle que présentée précédemment et la méthode DLS avec sondage est la méthode présentée précédemment, initialisée par la phase de sondage. Pour les deux dernières méthodes, le choix de la valeur pour chaque variable est la valeur ayant la plus grande pondération.

    Les en-têtes des colonnes sont les suivants :

    - Problemes : numéro de l'instance,

    - Random : temps d'exécution en secondes (CPU) et nombre de points de choix (Pts Ch.) pour la méthode « Aléatoire »,

    - MinDomainSize : temps d'exécution en secondes (CPU) et nombre de points de

    choix (Pts Ch.) pour la méthode de choix de la variable ayant le plus domaine,
    - DLS : temps d'exécution en secondes (CPU) et nombre de points de choix (Pts

    Ch.) pour la méthode DLS,

    - DLS et sondage : temps d'exécution en secondes (CPU) et nombre de points de choix (Pts Ch.) pour la méthode DLS, combiné avec la phase de sondage.

    Les résultats présentés dans le tableau 1.3 montrent l'intérêt de notre méthode cou-

    2. Les instances sont disponibles sur le site http :// mat.gsia.cmu.edu/COLOR/instances.html

    Problemes

    Random CPU Pts Ch.

    Min domain Size CPU Pts Ch.

    DLS

    CPU Pts Ch.

    DLS et sondage
    CPU Pts Ch.

    Mknap1-0

    0.02

    2

    0.01

    2

    0.02

    2

    0.03

    2

    Mknap1-2

    0.02

    10

    0.02

    37

    0.05

    15

    0.06

    26

    Mknap1-3

    0.03

    408

    0.03

    384

    0.06

    344

    0.07

    186

    Mknap1-4

    0.55

    11485

    0.66

    16946

    0.44

    8781

    0.18

    411

    mknap1-5

    48.91

    1031516

    3.33

    99002

    1.7

    36951

    0.74

    6251

    mknap1-6

    >1500

     

    340.53

    21532775

    328.21

    21532762

    50.46

    1021984

    TABLE 1.3 - Résultats expérimentaux, instances de Sac-à-dos Multidimensionnel

    plée avec une phase d'initialisation par sondage. La méthode « Aléatoire » ne permet pas de résoudre l'instance mknap1-6 dans le temps imparti. La stratégie du plus petit domaine est ici peu efficace, puisque toutes les variables ont le même domaine. On re-marque que la méthode DLS sans phase de sondage est légèrement plus rapide que la méthode du plus petit domaine. Par contre, couplée avec la phase de sondage, la méthode DLS est plus rapide que les autres méthodes, montrant ainsi clairement l'intérêt d'une phase de sondage.

    Le tableau 1.4 présente les résultats sur les instances du problème de sac-à-dos multidimensionnel. Les méthodes comparées sont les mêmes que pour le problème du sacà-dos multidimensionnel. Les en-têtes des colonnes sont les suivants :

    - Taille : taille du carré,

    - Random : temps d'exécution en secondes (CPU) et nombre de points de choix (Pts Ch.) pour la méthode « Aléatoire »,

    - MinDomainSize : temps d'exécution en secondes (CPU) et nombre de points de

    choix (Pts Ch.) pour la méthode de choix de la variable ayant le plus domaine,
    - DLS : temps d'exécution en secondes (CPU) et nombre de points de choix (Pts

    Ch.) pour la méthode DLS,

    - DLS et sondage : temps d'exécution en secondes (CPU) et nombre de points de choix (Pts Ch.) pour la méthode DLS, combiné avec la phase de sondage.

    Taille

    Random CPU Pts Ch.

    Min domain Size CPU Pts Ch.

    DLS

    CPU Pts Ch.

    DLS et sondage
    CPU Pts Ch.

    5

    6

    7

    8

    9

    10

    0.08

    12.2 301.17 >1500 >1500 >1500

    291 348174 7283952

    0.03

    1.52 >1500 >1500 >1500 >1500

    895

    143726

    0.05
    34.27
    2.3
    48.68
    >1500
    >1500

    148 951426 40310 748758

    0.13 0.16 0.11 9.7 11.47 25.14

    4286
    9178
    8261
    148233
    225244
    484541

    TABLE 1.4 - Résultats expérimentaux, instances de Carré Magique

    Les conclusions que l'on peut tirer à la lecture des résultats présentés dans le tableau 1.3 sont similaires à celles pour le problème de sac-à-dos multidimensionnel. Pour les instances de taille supérieure à 7, la méthode « Aléatoire » et la méthode de choix du

    plus petit domaine ne trouvent aucune solution dans le temps imparti. La méthode DLS sans phase de sondage est un peu plus rapide et efficace que la méthode de choix du plus petit domaine, mais ne permet pas de résoudre l'ensemble des instances. En ce qui concerne la méthode DLS avec phase de sondage, on peut remarquer que les temps d'exécution sont légèrement plus longs pour les instances de petite taille. Cela est dû au temps requis par la phase de sondage. Néanmoins, la phase de sondage semble important dans la méthode DLS car elle permet à la méthode de résoudre l'ensemble des instances dans le temps imparti.

    Le tableau 1.5 présente les résultats sur le problème de Coloration de Graphes. Ce problème est un problème particulier. L'objectif étant de minimiser le nombre chromatique (c'est-à-dire le nombre de couleurs différentes utilisées), on peut voir ce problème comme un problème d'optimisation combinatoire. Cependant, on peut le voir comme un problème de satisfaction de contraintes : existe-t-il une solution à ce problème telle que le nombre chromatique soit inférieur à C ? Ainsi, les pondérations qui déterminent les priorités de branchement ne sont pas calculées pour la variable à minimiser, représentant le nombre chromatique. Nous comparons dans ce tableau plusieurs méthodes : la méthode « Aléatoire », la méthode « MinDomainSize », la méthode DLS avec plusieurs critères de choix pour les variables (moyenne des pondérations mini-male, moyenne des pondérations maximales et écarts aux extrêmes, présentées dans la section 1.8.1). Pour ce problème, la méthode DLS est toujours couplée avec la phase de sondage.

    Les en-têtes des colonnes sont les suivants :

    - Problèmes : nom de l'instance,

    - k : limite fixée à la taille de l'instance,

    - Random : temps d'exécution en secondes (CPU) pour la méthode « Aléatoire », - MinDomainSize : temps d'exécution en secondes (CPU) pour la méthode de choix de la variable ayant le plus domaine,

    - Moy Min. : temps d'exécution en secondes (CPU) pour la méthode DLS avec le
    critère de plus petite moyenne des pondérations pour sélectionner les variables,

    - Moy Max. : temps d'exécution en secondes (CPU) pour la méthode DLS avec le critère de plus grande moyenne des pondérations pour sélectionner les variables,

    - Ecart Min : temps d'exécution en secondes (CPU) pour la méthode DLS avec le critère de plus petit écart des pondérations aux extrêmes pour sélectionner les variables,

    Les résultats présentés dans le tableau 1.5 montrent l'efficacité de la plus petite moyenne des pondérations comme critère de choix pour les variables. Ce critère, qui suit la politique de « First Fail », est le plus efficace pour les instances choisies. La méthode « Aléatoire » et la méthode de choix de la variable ayant le plus domaine ne permettent pas de résoudre l'ensemble des instances. La méthode DLS avec le critère de plus petit écart des pondérations aux extrêmes propose des solutions de bonnes qualités, comparables à la méthode par défaut d'ILOG Solver, sans toutefois la surpasser.

    1.10. Conclusion et perspectives

    Problèmes

    k

    Random

    CPU

    MinDomain

    CPU

    Moy. Min

    CPU

    Moy. Max

    CPU

    Ecart Min.

    CPU

    fpsol2.i.2.col

    12

    171.41

    245.33

    32.18

    513.65

    87.51

    fpsol2.i.2.col

    13

    >1500

    >1500

    412.46

    >1500

    748.09

    fpsol2.i.3.col

    11

    14.94

    19.16

    8.76

    32.47

    13.68

    fpsol2.i.3.col

    12

    169.94

    184.21

    39.57

    247.74

    121.17

    fpsol2.i.3.col

    13

    >1500

    >1500

    284.15

    >1500

    687.25

    le450-25b.col

    41

    612.05

    568.94

    121.67

    >1500

    435.62

    zeroin.i.2.col

    12

    171.68

    144.28

    61.32

    784.36

    135.24

    zeroin.i.2.col

    13

    >1500

    >1500

    841.27

    >1500

    >1500

    inithx.i.1.col

    12

    174.69

    237.2

    47.52

    894.25

    216.58

    inithx.i.2.col

    12

    177.04

    254.91

    89.16

    876.14

    237.81

    inithx.i.3.col

    12

    173.29

    246.24

    35.41

    854.62

    241.83

    inithx.i.3.col

    13

    >1500

    >1500

    212.59

    >1500

    984.21

    jean.col

    37

    179.6

    249.73

    94.52

    676.59

    254.73

    TABLE 1.5 - Résultats expérimentaux, instances de Coloration de Graphes

    1.10 Conclusion et perspectives

    Dans cette première partie, nous nous avons introduit une nouvelle approche pour la gestion des décisions de branchement, que nous avons appelée Dynamic Learning Search. Cette approche, basée sur des techniques d'apprentissage, présente l'intérêt de chercher à diriger la recherche vers des sous-espaces prometteurs en définissant dynamiquement des politiques de priorités de branchement sur les variables, ainsi que sur les valeurs que peuvent prendre les variables. Nous avons montré qu'une phase de sondage, permettant d'avoir un aperçu de l'arbre de recherche, pouvait s'avérer intéressante afin d'initialiser la recherche. Enfin, nous avons montré qu'il était possible d'appliquer cette approche aussi bien sur des problèmes de satisfaction de contraintes que sur des problèmes d'optimisation combinatoire. Les tests expérimentaux ont montré que notre méthode était plus efficace que les méthodes génériques par défaut du solver commercial ILOG. La méthode que nous proposons est évidemment moins efficace que les heuristiques dédiées aux problèmes d'optimisation combinatoire ou aux problèmes de satisfaction de contraintes. Néanmoins, dans l'optique d'une approche générique, la méthode que nous proposons semble prometteuse.

    Nous pensons cependant que d'autres critères permettant de définir la qualité d'un sous-arbre d'une recherche arborescente peuvent être proposés. Ces critères devront être génériques pour permettre une application aussi bien dans le cas de problèmes de satisfaction de contraintes que dans celui de problèmes d'optimisation combinatoire.

    Deuxième partie

    Utiliser des méthodes exactes au

    sein des métaheuristiques :

    méthodes de grands voisinages

    2

    La recherche à grand voisinage : un nouvel opérateur

    53

     

    2.1

    Introduction à la recherche locale

    53

     
     

    2.1.1 Bases de la recherche locale

    53

     
     

    2.1.2 Principales classes de recherches locales

    54

     
     

    2.1.3 Recherche locale à voisinage variable

    55

     
     

    2.1.4 Algorithmes utiisant de la recherche locale

    55

     

    2.2

    Recherche à grand voisinage

    57

     
     

    2.2.1 Notations et définitions de la recherche à grand voisinage . . . .

    58

     

    2.3

    Classe des problèmes considérés : Problèmes de Tournées avec Couver-

     
     
     

    ture Partielle

    59

     
     

    2.3.1 Problèmes de Tournées avec Gains

    60

     
     

    2.3.2 Autres variantes de Problèmes de Tournées à Couverture Partielle

    61

     
     

    2.3.3 Complexité des Problèmes de Tournées avec Couverture Partielle

    62

     
     

    2.3.4 Quelques opérateurs de recherche locale pour les Problèmes de

     
     
     

    Tournées avec Couverture Partielle

    62

     

    2.4

    Dropstar : une nouvelle structure de grand voisinage

    64

     
     

    2.4.1 Des opérateurs existants : drop, l-ConsecutiveDrop

    64

     
     

    2.4.2 L'opérateur de grand voisinage : Dropstar

    69

     
     

    2.4.3 Plus court chemin avec contraintes de ressources (SPPRC) . . . .

    71

     
     

    2.4.4 Résolution par un algorithme de programmation dynamique . .

    71

     

    2.5

    Perspectives : variantes possibles de la procédure Dropstar

    74

    3

    Application au Problème de l'Acheteur Itinérant

    77

     

    3.1

    Introduction au problème de l'Acheteur Itinérant

    78

     

    3.2

    Notre algorithme : le DMD-ATA

    81

     
     

    3.2.1 Fourmis Parallèles

    81

     
     

    3.2.2 Fourmis Anamorphiques

    82

     
     

    3.2.3 Plans Multi-Dimensionnels

    83

     
     

    3.2.4 Dynamique

    83

     

    3.3

    Opérateurs de recherche locale

    84

     
     

    3.3.1 Procédures de recherches locales basiques

    3.3.2 Application de l'opérateur Dropstar

    3.3.3 Intégration de la recherche locale dans l'algorithme DMD-ATA

    85
    85
    89

     

    3.4

    Résultats expérimentaux

    89

     

    3.5

    Conclusion

    93

    4

    Application au Problème du Voyageur de Commerce Généralisé

    95

     

    4.1

    Introduction au Problème du Voyageur de Commerce Généralisé . . . .

    96

     

    4.2

    État de l'art

    96

     

    4.3

    Algorithme mémétique

    98

     
     

    4.3.1 Composants basiques de l'algorithme

    98

     
     

    4.3.2 Croisement

    100

     
     

    4.3.3 Implémentation détaillée de l'opérateur de croisement

    103

     
     

    4.3.4 Heuristiques de recherche locale

    106

     

    4.4

    Résultats expérimentaux

    108

     

    4.5

    Conclusion et perspectives

    112

    Chapitre 2

    La recherche à grand voisinage : un

    nouvel opérateur

    2.1 Introduction à la recherche locale

    Un nombre important de problèmes d'optimisation d'intérêts pratiquessont difficilement résolus de manière exacte dans des temps de calcul raisonnables. Ainsi, une approche pratique pour résoudre de tels problèmes est d'employer des algorithmes heuristiques (ou d'approximation) qui peuvent être capables de trouver des solutions quasi optimales dans des temps de calcul raisonnables. La littérature dédiée aux algorithmes heuristiques distingue fréquemment deux classes d'algorithmes : les algorithmes constructifs et les algorithmes d'amélioration. Un algorithme de construction construit une solution à partir de rien en assignant des valeurs à une ou plusieurs variables de décisions itérativement. Un algorithme d'amélioration démarre généralement à partir d'une solution réalisable et essaie itérativement d'obtenir de meilleures solutions. Les algorithmes de recherche à voisinage (appelés aussi algorithmes de recherche locale) sont une vaste classe d'algorithmes d'amélioration pour lesquels à chaque itération une meilleure solution est trouvée en explorant le voisinage de la solution courante.

    2.1.1 Bases de la recherche locale

    Le principe de la recherche locale est le suivant : l'algorithme débute avec une solution initiale réalisable. Sur cette solution initiale, on applique une série de modifications locales (définissant un voisinage de la solution courante), tant que celles-ci améliorent la qualité de l'objectif. Malheureusement, en appliquant ce principe, rien ne garantit d'atteindre la ou les solutions optimales. La recherche peut se retrouver bloquée dans un optimum local relativement au voisinage considéré et s'arrêter, faute d'amélioration possible. On voit donc que la qualité des solutions finales dépend en grande partie de

    la complexité et de la diversité des transformations permises par les opérateurs de recherche locale. Un des principaux problèmes est donc de faire un compromis entre le temps de calcul nécessaire pour explorer l'intégralité d'un espace de recherche défini par le voisinage et sa taille.

    On définit l'espace de recherche comme l'espace dans lequel la recherche locale s'effectue. Cet espace peut correspondre à l'espace des solutions réalisables du problème étudié. Chaque point de l'espace correspond ainsi à une solution satisfaisant l'ensemble des contraintes associées au problème.

    À chaque itération, l'ensemble des modifications que l'on se permet d'effectuer sur la solution courante S définit un nouvel ensemble de solutions. Ce nouvel ensemble de solutions est appelé le voisinage de S ou N(S). Pour un même problème, il existe un grand nombre d'opérateurs de voisinages possibles et intéressants.

    Les bases de la recherche locale peuvent être définies ainsi. Soient : - f() la fonction qu'on l'on souhaite maximiser,

    - S la solution courante,

    - S* la meilleure solution connue,

    - f* la valeur de la meilleure solution connue,

    - N(S) le voisinage de S.

    La procédure de recherche locale est la suivante :

    7

    8

    9

    Algorithme 2 : Algorithme d'une recherche locale simple de plus grande pente

    1 Initialisation: Construire une solution de départ S0;

    2 S* = S0;

    3 S = S0;

    4 f* = f(S0);

    5 tant que l'optimum local n'a pas été atteint faire

    6 S = argmaxSI?N(S)(f(S0));

    si f(S) > f* alors

    f* = f(S); S* = S;

    2.1.2 Principales classes de recherches locales Recherche locale simple ou méthode de descente

    La plus simple de toutes les approches de recherches locales consiste à construire une unique solution initiale et à l'améliorer en utilisant une unique structure de voisinage jusqu'à ce qu'un optimum local soit atteint, arrêtant ainsi la recherche. Il y a cependant deux variantes de cette approche :

    - meilleure amélioration : on parcourt l'intégralité de l'espace de recherche défini
    par la structure de voisinage et on choisit S* tel que S* = argmaxSl?N(S)(f(S')),

    2.1. Introduction à la recherche locale

    - première amélioration: on parcourt l'espace de recherche et on met à jour la solu-

    tion courante dès qu'une solution S' est trouvée, définie telle que f(S') > f(S).

    Hansen et Mladenovi'c (2006) ont étudié l'impact de ces variantes pour le problème de Voyageur de Commerce. Ils ont montré que l'efficacité de ces différentes versions dépendait en grande partie du choix dans les solutions initiales. La version de la meilleure amélioration, qui semble la plus attirante car plus prometteuse dans l'amélioration des solutions, donnait dans leurs résultats expérimentaux des résultats significativement plus mauvais que la version de la première amélioration.

    Recherche locale à départs multiples

    La recherche locale à départs multiples est une simple extension du schéma de la recherche locale simple. Plusieurs solutions générées (par exemple aléatoirement) sont utilisées comme solutions initiales de la recherche locale. L'exploration des voisinages à partir de ces solutions initiales permet d'obtenir plusieurs optima locaux. Parmi ces optima locaux, le meilleur est sélectionné puis retenu comme solution de la résolution heuristique.

    2.1.3 Recherche locale à voisinage variable

    La recherche à voisinage variable a été introduite par Mladenovi'c et Hansen (1997). Cette recherche utilise à la place d'une seule structure de voisinage, plusieurs structures appliquées dans un ordre prédéfini. Depuis son introduction, la recherche à voisinage variable a vu le développement d'un nombre important de variantes de diverses complexités. La plus simple d'entre elles, la descente à voisinage variable (Variable Neighborhood Descent) (voir Hansen et al. (2006b) pour plus de détails), est la version multivoisinage de la recherche locale simple. La procédure de la descente à voisinage variable est la suivante : on applique sur une solution initiale un opérateur de recherche locale en utilisant la première structure de voisinage, jusqu'à ce qu'un optimum local soit atteint; la recherche locale continue alors, en utilisant une deuxième structure de voisinage jusqu'à ce qu'un optimum local (par rapport à cette structure) soit atteint. Une fois que cet optimum local est atteint, on utilise une autre structure de voisinage, et ainsi de suite, de manière répétitive. Au bout d'un certain nombre d'itérations, la descente à voisinage variable s'arrête, une fois qu'elle a atteint une solution qui est un optimum local pour chacune des structures de voisinages considérées. On peut cependant remarquer que l'ordre dans lequel sont appliquées les structures de voisinage peut avoir un impact sur la qualité de la solution finale.

    2.1.4 Algorithmes utilisant de la recherche locale

    L'utilisation de la recherche locale en conjonction avec d'autres méthodes est une procédure très efficace. On peut citer un certain nombre d'hybridations de méthodes avec de la recherche locale.

    Algorithmes de branchement et séparation

    La recherche locale peut être couplée avec une procédure de branchement et séparation (Toth et Vigo, 2001; Haouari et Ladhari, 2003; Danna, 2003; Prescott-Gagnon et al., 2007; Baptiste et al., 2008). Danna (2003) utilise la recherche locale dans une procédure de résolution par génération de colonnes. Lorsqu'une solution entière est trouvée, la recherche locale est utilisée pour améliorer la solution et ainsi générer de nouvelles colonnes. Danna et al. (2005) proposent aussi une méthode appelée RINS (Relaxation Induced Neighborhood Search), qui utilise la recherche locale pour explorer un sousespace qui est à la fois le voisinage de la solution entière et le voisinage de la solution de la relaxation continue. Toth et Vigo (2001) utilisent la recherche locale pour le calcul de bornes inférieures, en résolvant de manière heuristique le dual de la relaxation linaire. Baptiste et al. (2008) utilisent une procédure de recherche locale afin d'améliorer la borne supérieure. Prescott-Gagnon et al. (2007) proposent une méthode hybride entre recherche locale et résolution par génération de colonnes, dans laquelle une version heuristique de génération de colonnes est utilisée pour la résolution du problème restreint.

    Métaheuristiques

    La recherche tabou (Tabu Search ou TS) est une métaheuristique présentée par Glover (1989). L'idée de la recherche tabou consiste à explorer le voisinage d'une solution par un opérateur de recherche locale et à choisir la solution dans ce voisinage qui minimise la fonction objectif (dans le cas d'un problème de minimisation). On autorise cependant à choisir une solution qui augmente la valeur de la fonction objectif afin de sortir d'un minimum local. Pour ne pas retomber dans ce minimum local, on garde en mémoire dans une liste tabou les dernières positions explorées dont on interdit la visite. Pour plus de détails sur la recherche tabou, nous conseillons au lecteur l'ouvrage de Glover et Laguna (1997).

    Le recuit simulé (simulated annealing ou SA) est une métaheuristique probabiliste, inspirée d'un processus utilisé en métallurgie, proposée par Kirkpatrick et al. (1983). Par analogie avec le processus physique, la fonction à minimiser est l'énergie du système. On introduit également un paramètre fictif, la température du système. À chaque itération de l'algorithme, on applique un opérateur de recherche locale sur une solution. Cette modification entraîne une variation de l'énergie du système. Si cette variation fait baisser l'énergie du système, elle est appliquée à la solution courante. Sinon, elle est acceptée avec une certaine probabilité dépendant de la température. En diminuant progressivement la température (et ainsi la probabilité d'accepter des solutions détériorantes), on tend à minimiser l'énergie du système.

    2.2. Recherche à grand voisinage

    Algorithmes évolutionnaires

    Les métaheuristiques basées sur des algorithmes évolutionnaires sont souvent couplées avec de la recherche locale. Pour les algorithmes génétiques (voir le chapitre 4 pour plus de détails), la recherche locale est souvent utilisée pour l'amélioration des solutions et l'intensification de la recherche (Tsai et al., 2004; Snyder et Daskin, 2006; Hart et al., 2005; Silberholz et Golden, 2007). On trouve aussi de nombreux algorithmes couplant des algorithmes d'optimisation par Colonie de Fourmis (voir le chapitre 3 pour plus de détails) et de la recherche locale (Dorigo et al., 1996; Dorigo et Stutzle, 2004; Bell et McMullen, 2004; Bontoux et Feillet, 2008; Donati et al., 2008). La recherche locale est alors utilisée pour améliorer les solutions trouvées par les fourmis. Les algorithmes mémétiques ont été proposés par Moscato et Norman (1992) et (Moscato et Cotta, 2005) et peuvent être décrits comme une stratégie de recherche dans laquelle une population d'agents coopèrent, couplée avec de la recherche locale (voir la section 4.3 pour plus de détails sur ces algorithmes).

    Algorithmes basés sur de la programmation par contraintes

    Plusieurs méthodes proposent une coopération entre la programmation par contraintes et la recherche locale (Prestwich, 2008; Pisinger et Ropke, 2007; Benoist et al., 2007; Hansen et al., 2006a; Shaw, 1998). Shaw (1998) propose une technique, appelée LNS (Large Neighborhood Search) qui emploie des opérateurs de recherche locale et utilise une recherche arborescente à base de propagation de contraintes afin d'évaluer le coût et la réalisabilité des mouvements des opérateurs de recherches locales. Prestwich (2008) utilise le même principe en proposant la méthode FCNS (Forward checking Colouration Neihbourhood Search) pour un problème de coloration de graphes. Benoist et al. (2007) propose une méthode, appelée Branch & Move qui applique de la recherche locale sur des contraintes maîtresses d'un problème.

    Actuellement, l'hybridation de la recherche locale avec d'autres méthodes semble proposer les algorithmes les plus performants pour de nombreux problèmes.

    2.2 Recherche à grand voisinage

    Dans ce chapitre, on s'intéresse plus particulièrement aux algorithmes de recherche à voisinage pour lesquels la taille du voisinage est très importante par rapport à la taille de l'instance du problème considéré. Pour des instances de très grandes tailles, il est impossible, dans des temps de calcul raisonnables, de parcourir énumérativement l'ensemble des solutions définies par de tels voisinages, et il faut soit explorer un sous-ensemble du voisinage, soit développer un algorithme efficace pour l'exploration du voisinage.

    Une des principales difficultés dans la création d'une approche par recherche locale est le choix de la structure de voisinage, c'est-à-dire la façon dont le voisinage est

    défini. Ce choix détermine de façon très importante si la recherche locale donnera des solutions de très bonne qualité ou des solutions qui représentent des optima locaux de mauvaise qualité. Il est évident que plus le voisinage est de taille importante, plus les solutions renvoyées par la recherche locale seront de bonne qualité et la solution finale proche de l'optimum. Malheureusement, en augmentant la taille du voisinage, on augmente aussi le temps de calcul nécessaire pour explorer ce voisinage. Comme la recherche locale est généralement appliquée à partir de plusieurs solutions initiales, de longs temps d'exécutions par itération restreignent le nombre d'appels à la recherche locale par unité de temps. Pour cette raison, un voisinage de taille importante n'amène pas nécessairement à une heuristique efficace, sauf s'il est possible d'explorer ce voisinage de manière particulièrement efficace.

    Certaines méthodes largement utilisées en recherche opérationnelle peuvent être vues comme des techniques de recherche à grand voisinage. Par exemple, si l'algorithme du simplexe utilisé pour résoudre les programmes linéaires peut être vu comme un algorithme de recherche locale, alors la génération de colonnes peut être vue comme une méthode de recherche à grand voisinage. De manière équivalente, les techniques d'augmentation utilisées pour la résolution de nombreux problèmes de flots dans les réseaux peuvent être classées parmi les méthodes de recherche à grand voisinage.

    Ahuja et al. (2002) ont classé les méthodes de recherche à grand voisinage dans trois classes non-exclusives. La première catégorie des algorithmes de recherche locale représente les méthodes à profondeur variable. Ces algorithmes se concentrent sur des voisinages de taille exponentielle et effectuent une exploration partielle de ces voisinages, en utilisant des heuristiques. La deuxième catégorie est composée des algorithmes d'améliorations de flots dans les réseaux. Ces méthodes de recherche à voisinage utilisent les techniques de flots dans les réseaux pour trouver des solutions voisines améliorantes. Enfin, la troisième catégorie se compose de structures de voisinages pour problèmes NP-difficiles dont certaines sous-classes peuvent être résolues en temps polynomial. Selon cette classification, l'opérateur de voisinage que nous proposons appartient à la catégorie des algorithmes d'améliorations de flots dans les réseaux, basés sur des calculs de plus courts chemins.

    2.2.1 Notations et définitions de la recherche à grand voisinage

    Nous allons maintenant introduire de manière plus formelle les concepts de problème d'optimisation combinatoire et de voisinage. Soit E = 1,2, . . . , m un ensemble fini. On note |S| la cardinalité d'un ensemble S. Soit F ç 2E, où 2E représente l'ensemble des sous-ensembles de E. Les éléments de F sont appelés des solutions réalisables. Soit f la fonction appelée fonction objectif. Une instance d'un problème d'optimisation combinatoire est représentée ainsi :

    Minimiserf(S) : S E F

    Une structure de voisinage est définie par la fonction N : F 2E. Pour chaque S F

    est associé un sous-ensemble N(S) de E. Cet ensemble N(S) est appelé le voisinage de

    la solution S, et on pose que S ? N(S). Une solution S* ? F est appelée optimum local relativement à la fonction de voisinage N si f(S*) < f(S) quel que soit S ? N(S). Le voisinage défini par N(S) est dit de taille exponentielle si |N(s)| augmente exponentiellement lorsque m augmente.

    Les techniques faisant appel à de tels voisinages sont appelées des algorithmes de recherche à grand voisinage. Pour deux solutions S et T, on appelle S - T l'ensemble des éléments qui apparaissent dans S, mais qui n'apparaissent pas dans T. On peut alors définir la distance d(S, T) égale à |S - T| + |T - S|, qui représente le nombre d'éléments de E qui apparaissent dans S ou dans T mais qui n'apparaissent pas dans les deux solutions (de nombreuses autres distances, permettant de mesurer la différence entre une paire de solutions pour des algorithmes génétiques, ont été présentées par Sevaux et Sörensen (2005)).

    On peut donc définir un voisinage de distance k de la manière suivante : Nk(S) = T ? F : d(S; T) = k. On peut facilement remarquer que Nm(S) = F et donc, se rendre compte qu'explorer un voisinage de distance k peut être difficile lorsque k augmente. Cela est typiquement la situation lorsque k n'est pas fixé. Dans ce cas, trouver la meilleure solution (ou une solution meilleure que la solution actuelle) dans un tel voisinage est NP-difficile, si le problème original est NP-difficile.

    2.3 Classe des problèmes considérés : Problèmes de Tournées avec Couverture Partielle

    Le Problème du Voyageur de Commerce, ou Traveling Salesman Problem (TSP), est un problème qui est largement étudié depuis le 20ème siècle. L'objectif de ce problème est de visiter un ensemble donné de villes, en minimisant la distance totale parcourue. La première publication sur la résolution du TSP est attribuée à Menger (1932), dans laquelle il considère une variation appelée das Botenproblem ou the Messenger Problem. La résolution de ce problème sous sa forme originale est aujourd'hui encore un challenge très concurrentiel en optimisation combinatoire. David Applegate, Robert Bixby, Vasek Chvátal et William Cook ont développé dans les années 1990 la méthode Concorde 1, basée sur une méthode de séparation et de coupes (séparation et génération de coupes) qui permet de résoudre optimalement des instances de très grande taille (plusieurs milliers de villes). Cet intérêt pour ce problème a poussé la communauté scientifique à proposer un grand nombre d'extensions ou de variantes du TSP. Un ouvrage récent est consacré au problème du Voyageur de Commerce et à ses variations (Gutin et Punnen, 2002).

    Les premières extensions du TSP portent sur la considération de transport de marchandises récoltées durant la tournée, puis ramenées à un dépôt. À ce problème initial furent ajoutées des contraintes de temps durant lesquels la récupération des marchandises pouvait avoir lieu (Problème du Voyageur de Commerce avec Fenêtre de Temps ou Traveling Salesman with Time Windows), des contraintes de capacités (Problème du

    1. http :// www-neos.mcs.anl.gov

    Voyageur de Commerce avec Contraintes de Capacité ou Capacitated Traveling Salesman Problem). À tous ces problèmes fut ajoutée la possibilité d'utiliser plusieurs véhicules. Ces problèmes sont connus sous le nom de problèmes de calcul de tournées de véhicules ou Vehicle Routing Problem (VRP). Pour plus de détails sur les problèmes de tournées de véhicules, nous conseillons au lecteur le livre de Toth et Vigo (2002).

    Le voisinage que nous présentons à travers deux exemples dans les chapitres suivants peut s'appliquer à des variantes du TSP pour lesquelles la visite de l'ensemble des sommets du graphe n'est pas obligatoire. La classe de problèmes la plus étudiée parmi les problèmes présentant cette caractéristique est la classe des Problèmes de Tournées avec Gains (voir (Feillet et al., 2005) pour plus de détails sur cette classe de problèmes). Nous nommons par souci de simplicité cette classe de problèmes les Problèmes de Tournées avec Couverture Partielle (Partial Covering Routing Problems). Ces problèmes sont définis comme des problèmes dont les solutions ne visitent pas nécessairement l'ensemble des noeuds.

    L'ensemble de ces problèmes présente une particularité dans sa structure : l'ensemble des noeuds du graphe ne doit pas être nécessairement visité. Cette différence avec un certain nombre d'extensions du problème du Voyageur de Commerce implique d'avoir des solutions de taille variable. De plus, on peut remarquer une difficulté supplémentaire dans la résolution du problème : une fois que les villes à visiter sont choisies, il reste à déterminer l'ordre dans lequel elles seront visitées, ce qui se ramène dans la plupart des cas à un TSP de taille réduite.

    2.3.1 Problèmes de Tournées avec Gains

    La classe des problèmes de Tournées avec Gains est une extension bien connue du problème du Voyageur de Commerce. Ces problèmes sont généralement définis de la façon suivante. Soit G = (V, A) un graphe orienté avec V = {v1, . . . , vn} un ensemble de sommets pour lequel v1 est le dépôt. On note cij le coût de l'arc (vi, vj). On associe à chaque sommet vi un gain supposé positif.

    On peut voir cette classe de problèmes comme un Problème de Voyageur de Commerce bicritère avec deux objectifs contraires : d'une part, minimiser la distance parcourue (avec le droit de ne pas visiter l'ensemble des sommets) et d'autre part, maximiser la somme des gains collectés auprès des sommets desservis.

    Dans le cas du problème du Voyageur de Commerce avec Gains, on trouve trois variantes dont l'objectif ne comporte qu'un critère :

    - Orienteering Problem (Golden et al., 1987) : l'objectif consiste à maximiser le gain

    sous la contrainte que la distance soit inférieure à une longueur maximale,

    - Prize-collecting Traveling Salesman Problem (Balas, 1989) : l'objectif consiste à mini-

    miser la distance parcourue sous la contrainte que le gain récolté soit supérieur à

    un montant minimal,

    - Profitable Tour Problem (Dell'Amico et al., 1995) : l'objectif est de minimiser la différence entre la somme des distances parcourues et la somme des gains récoltés.

    Le problème du Voyageur de Commerce avec Gains a été étudié dans quelques cas sous sa forme bicritère : Keller (1985) , Bérubé et al. (2008).

    On retrouve ces problèmes sous d'autres noms :

    - Selective TSP (Laporte et Martello, 1990; Gendreau et al., 1998),

    - Maximum Collection Problem (Kataoka et Morito, 1988),

    - Traveling Salesman Subtour Problem (Gensch, 1978),

    - Traveling Salesman Subset-Tour Problem with One additional Constraint (Mittenthal et Noon, 1992),

    - Cardinality Constrained Circuit Problem (Bauer et al., 1998),

    - Score Orienteering Problem (Kataoka et al., 1998),

    - Multiobjective Vending Vroblem (Keller et Goodchild, 1988),

    - Resource Constrained Traveling Salesman Problem (Pekny et Miller, 1990), - . . .

    Dans le cas où l'utilisation de plusieurs véhicules est autorisée, on trouve aussi trois variantes mono-critères:

    - Team Orienteering Problem (Chao et al., 1996) : l'objectif est de maximiser les gains collectés sous contrainte de ne pas dépasser une longueur maximale de distance pour chaque route,

    - Prize-collecting VRP (Tang et Wang, 2006) : l'objectif est de minimiser la distance totale parcourue sous contrainte que le gain total récolté soit supérieur à un montant minimum et en respectant des contraintes de capacités sur les véhicules,

    - Profitable VRP (Archetti et al., 2007) : l'objectif est de minimiser la différence entre la somme des distances parcourues et la somme des gains récoltés sous contrainte de capacité des véhicules.

    2.3.2 Autres variantes de Problèmes de Tournées à Couverture Partielle

    On trouve d'autres variantes du problème du Voyageur de Commerce relativement proches des problèmes présentés :

    - Traveling Purchaser Problem (Ramesh, 1981) : dans ce problème, les villes sont remplacées par des marchés. Chaque marché fournit un sous-ensemble de produits. Le prix de vente de chaque produit est connu et les prix des produits sont dépendants du marché à partir duquel ils sont achetés. L'objectif consiste à trouver un tour qui part d'un dépôt, connectant un sous-ensemble de marchés, de telle sorte que l'ensemble des produits soit acheté et que la somme des coûts de transport et des coûts d'achat des produits soit minimisée (voir le chapitre 3 pour plus de détails sur ce problème).

    - Covering Tour Problem (Gendreau et al., 1997) : dans ce problème, un ensemble T de sommets doit être visité et un ensemble W de sommets doit être couvert. L'objectif est de trouver un cycle hamiltonien de longueur minimale qui visite l'ensemble des sommets de T de telle sorte que chaque sommet de W ait une distance inférieure à une longueur prédéterminée avec au moins un sommet du cycle.

    - Generalized Traveling Salesman Problem (Henry-Labordere, 1969) : dans ce problème, les sommets appartiennent à des groupes. L'objectif est de construire un tour qui visite exactement une fois chaque groupe tout en minimisant les coûts de transport (voir le chapitre 4 pour plus de détails sur ce problème).

    2.3.3 Complexité des Problèmes de Tournées avec Couverture Partielle

    L'ensemble des problèmes présentés, aussi bien dans leurs versions mono-véhicule que dans les versions avec une flotte de véhicules, sont NP-difficiles. Ceci est généralement facile à prouver : dans la plupart des cas, on peut se ramener à un problème de type Voyageur de Commerce qui est NP-difficile au sens fort.

    2.3.4 Quelques opérateurs de recherche locale pour les Problèmes de Tournées avec Couverture Partielle

    Il existe un certain nombre d'opérateurs de recherche locale, utilisés entre autres pour les problèmes de Tournées avec Gains. On peut classer les opérateurs de recherche locale en deux sous catégories:

    - sans changement des sommets visités : ces opérateurs modifient l'ordre de visite des sommets dans un tour dans le cas où un seul véhicule est disponible (2-opt (Croes, 1958), heuristique de Lin et Kernighan (1973), ...) ou changent l'affection des sommets entre les tournées (croisement (Montané et Galvão, 2006), échange (Tan et al., 2001), repositionnement (Montané et Galvão, 2006), ...);

    - avec changement des sommets visités : ces opérateurs tirent partie du fait que l'ensemble des sommets n'est pas visité (insertion d'un sommet -ou d'une chaîne de sommets- dans la tournée (Riera-Ledesma et Salazar-González, 2005), suppression d'un sommet (Pisinger et Ropke, 2007) ou d'une chaîne de sommets (RieraLedesma et Salazar-González, 2005)).

    Nous nous sommes intéressés plus particulièrement à cette dernière catégorie de voisinages. Les quelques exemples qui suivent (figures 2.1-2.5) présentent un aperçu d'opérateurs connus.

    9

    6

    8

    5

    2

    10

    3

    7

    0 4 1

    2

    1

    3

    0

    4

    5

    6

    FIGURE 2.1 - Exemple de solution initiale

    FIGURE 2.2 - Application d'un échange entre les sommets 2 et 6

    1

    2

    3

    0

    4

    5

    6

    FIGURE 2.3 - Application de l'opérateur insertion

    Chapitre 2. La recherche à grand voisinage : un nouvel opérateur

    2

    3

    0

    4

    5

    1

    6

    6

    1

    2

    3

    0

    4

    5

    FIGURE 2.4 - Application de l'opérateur suppression

    FIGURE 2.5 - Application d'un 2-opt entre les sommets 2 et 5 : le chemin entre ces sommets est inversé

    2.4 Dropstar : une nouvelle structure de grand voisinage

    2.4.1 Des opérateurs existants : drop, l-ConsecutiveDrop

    Afin de présenter l'intérêt du nouvel opérateur de voisinage que nous proposons, nous nous appuierons sur un exemple simpliste du problème de Tour avec Profits (Profitable Tour Problem ou PTP). On définit le Profitable Tour Problem de la manière suivante. Soit G = (V, E) un graphe non orienté avec V = {v1, . . . , vn} un ensemble de sommets pour lequel v1 est le dépôt. On note cij le coût de l'arc (vi, vj). On associe à chaque sommet vi un gain supposé positif. L'objectif est de minimiser la différence entre la somme des distances parcourues et la somme des gains récoltés. Les chiffres situés sur les sommets de la figure 2.6 représentent le gain associé à chaque sommet et les chiffres situés sur les arcs, la distance entre deux sommets. Dans le cas où toutes les villes ne doivent pas être visitées, comme c'est le cas ici, on peut appliquer la procédure DROP utilisée par de nombreux chercheurs sur ces classes de problèmes (Ramesh et Brown, 1991; Mittenthal et Noon, 1992; Voß, 1996). Cet opérateur retire un sommet d'une solution initiale dans le cas où ce retrait permettrait de diminuer le coût de la fonction objectif.

    Posons la solution initiale (Fig. 2.7), de coût égal à --1. Lorsqu'on applique la procédure DROP, la seule suppression qui permet de diminuer le coût de la fonction objectif est la suppression du sommet 4. On a alors la solution 0 1 2 3 0 de coût égal à --2, présentée dans la figure 2.8. Le but étant de minimiser la fonction objectif, on se rend compte que cette solution est un optimum local relativement à la procédure DROP. En effet, si l'on se limite à la suppression d'une seule ville de cette solution, on ne peut améliorer la solution courante.

    Devant la limitation de la taille de l'espace de recherche défini par ce voisinage, Riera-Ledesma et Salazar-González (2005) ont proposé une extension de ce voisinage qu'ils ont appliquée au problème de l'Acheteur Itinérant. Ils ont nommé ce nouveau voisinage : l-ConsecutiveDrop. Ce voisinage peut se retrouver sous des formes similaires pour ces classes de problèmes (Keller, 1989; Renaud et Boctor, 1998b; Hachicha et al., 2000; Dell'Amico et al., 1998). Ce voisinage essaie de réduire la longueur d'un cycle initial en supprimant l sommets consécutifs. Si on applique cette procédure à la solution présentée dans la figure 2.8, en choisissant l = 2, on améliore la solution courante en obtenant la solution présentée dans la figure 2.9, de coût égal à --4. Cette solution aurait aussi pu être obtenue en supprimant dans un premier temps les sommets 1 et 2 de la solution initiale (la solution ainsi obtenue serait 0 3 4 0 de coût égal à -3), puis en supprimant de cette solution le sommet 4.

    Néanmoins, cette procédure présente des limitations. Considérons l'exemple présenté dans la figure 2.10. Nous posons alors la solution initiale 0 1 2 3 4 5 0 de coût égal à --1 présentée dans la figure 2.11. Si on applique la procédure l-ConsecutiveDrop, on peut voir que cette solution initiale est un optimum local pour l fixé à 4.

    En diminuant la valeur de l (l est alors égal à 3), on améliore la solution courante en obtenant la solution 0 4 5 0 de coût égal à --2 présentée dans la figure 2.12. Cette solution est de plus un optimum local relativement à la procédure l-ConsecutiveDrop. Cependant, on peut remarquer qu'en appliquant en premier lieu une procédure 2- ConsecutiveDrop, on aurait obtenu la solution optimale 0 3 4 5 0 de coût égal à --19, présentée dans la figure 2.13. On se rend compte ainsi que la valeur de l est déterminante dans l'efficacité de la procédure et que la limitation à la suppression de sommets consécutifs peut être un frein à l'efficacité de cette procédure.

    10

    10

    10

    24

    10

    10

    13

    FIGURE 2.6 - Exemple de Profitable Tour Problem

    10

    10

    10

    24

    10

    13

    FIGURE 2.7 - Exemple de Profitable Tour Problem : Solution initiale

    10

    10

    10

    0

    24

    10

    4

    13

    FIGURE 2.8 - Exemple de Profitable Tour Problem : Solution après un Drop

    9

    1

    9

    2

    10

    3 24

    0

    10

    4

    13

    FIGURE 2.9 - Exemple de Profitable Tour Problem : Solution après un 2-ConsecutiveDrop

    10

    10

    10

    10

    18

    18

    10

    23

    10

    10

    5

    4

    FIGURE 2.10 - Autre exemple de Profitable Tour Problem

    10

    10

    10

    23

    10

    10

    10

    4

    18

    18

    5

    FIGURE 2.11 - Autre exemple Profitable Tour Problem : Solution initiale

    1

    1

    1

    2

    18

    18

    3 23

    0

    10

    5

    4

    10

    FIGURE 2.12 - Exemple de Profitable Tour Problem : Solution après un 3-ConsecutiveDrop

    1

    1

    1

    2

    10

     

    23

     

    10

     
     
     

    10

    10

    18

    18

    FIGURE 2.13 - Exemple de Profitable Tour Problem: Solution optimale

    2.4.2 L'opérateur de grand voisinage : Dropstar

    La procédure Dropstar définit un opérateur de grand voisinage. Il est basé sur le sous-problème suivant : trouver une sous-séquence optimale à partir d'une séquence initiale donnée. Cet opérateur détermine ainsi l'ensemble optimal des sommets (consécutifs ou non) à supprimer d'une séquence.

    On peut penser que la calcul de la sous-séquence optimale est coûteux. En effet, la recherche d'une sous-séquence optimale peut être un problème NP-difficile, comme

    nous le verrons par exemple dans le chapitre 3. Cette recherche est ici effectuée par le biais d'un algorithme de programmation dynamique récursif.

    On construit un graphe selon la procédure suivante. Comme exemple de solution initiale, nous reprenons la solution présentée dans la figure 2.8. Un sommet est créé pour chaque ville de la séquence, le premier sommet de la séquence est dupliqué et placé en fin de séquence. Des arcs sont ensuite ajoutés entre chaque sommet et les sommets qui le suivent dans la séquence initiale (cf. Fig. 2.14). La procédure dropstar consiste alors à trouver le plus court chemin dans le graphe entre le premier sommet et le dernier sommet, en respectant certaines contraintes de ressources. Le coût du chemin est alors égal à la somme des coûts des distances, à laquelle on peut avoir à ajouter le coût des ressources (par exemple, les coûts d'achat des produits dans le cas du problème de l'Acheteur Itinérant).

    0 1 2 3 0

    9 9 24

    10

    14

    10

    10

    10

    0

    10

    10

    10

    10

    FIGURE 2.14 - Graphe résultant de la procédure Dropstar, appliqué sur la solution de la figure 2.8

    La complexité de la recherche d'une sous-séquence optimale dépend en partie de la présence ou non de ressources. Dans le cas par exemple du Problème de Tour avec Profits, en l'absence de ressource, la recherche d'une sous-séquence optimale et donc d'un plus court chemin est polynomiale. Par contre, la consommation en cours de chemin des ressources disponibles en quantités limitées peut rendre le problème NP-difficile (voir par exemple le chapitre 3 pour plus de détails).

    L'algorithme de programmation dynamique que nous utilisons pour trouver le plus court chemin dans le graphe est inspiré de l'algorithme développé par Feillet et al. (2004) pour le Problème du Plus Court Chemin Élémentaire avec Contraires de Res-sources. Cet algorithme est une extension du célèbre algorithme de Bellman (1957).

    Un important travail est à effectuer afin d'accélérer cette procédure pour la rendre applicable pour les instances de taille importante. Ce travail porte essentiellement sur les conditions de dominances et sur l'analyse des solutions initiales, afin d'essayer de réduire la taille du graphe sur lequel appliquer la procédure Dropstar.

    2.4.3 Plus court chemin avec contraintes de ressources (SPPRC)

    Le problème de Plus Court Chemin entre deux sommets dans des graphes est connu depuis longtemps. Dijkstra (1971) a proposé un algorithme qui s'applique pour le cas de graphes pondérés avec des poids positifs, Bellman (1957) pour le cas généralisé. Les algorithmes proposés sont dans les deux cas des algorithmes polynomiaux. Le fait de rajouter des contraintes de ressources (Shortest Path Problem with Resource Constraints) rend le problème NP-difficile. L'ajout de la contrainte d'élémentarité (Elementary Shortest Path Problem with Resource Constraints) rend le problème NP-difficile au sens fort. En effet, ce problème est alors une réduction du problème de Sequencing Within Intervals (Dror, 1994).

    2.4.4 Résolution par un algorithme de programmation dynamique

    L'algorithme 3 part du premier sommet du graphe et construit itérativement des chemins vers le dernier sommet du graphe. La construction se fait par extension de chemins partiels. Un chemin partiel a pour origine le premier sommet du graphe et pour destination terminale un sommet quelconque de la séquence. L'extension d'un chemin partiel cp se fait par l'ajout d'un arc sortant de l'extrémité terminale de cp et la consommation de ressources. Dans le cas où un nouveau chemin partiel viole une contrainte de ressource, il est rejeté. Dans le cas contraire, on compare le chemin partiel avec la liste de chemins partiels mémorisés pour cette extrémité. Si des chemins partiels sont dominés, ils sont rejetés. On note ch(w) la consommation de la ressource w par le chemin partiel ch.

    Les figures 2.15, 2.16, 2.17 et 2.18 présentent le déroulement de la programmation dynamique appliquée au graphe de la figure 2.14. Les chiffres sur les arcs représentent le coût des arcs, les chiffres à côté des sommets représentent le gain associé à chaque sommet. Enfin, entre crochets, se trouvent les coûts des chemins partiels (on rappelle que le coût d'une solution est égal à la différence entre la somme des coûts des distances parcourues et la somme des gains récupérés). Si le chiffre est barré, cela veut dire que le chemin partiel est dominé.

    stop;

    fin

    fin

    fin

    fin

    fin

    fin

    Algorithme 3 : Algorithme de programmation dynamique

    Données : G : un graphe; W : le nombre de ressources; CH : une liste de chemins partiels non traités; chi : la liste des chemins partiels d'extrémité terminale i

    1 Initialisation: CH ? chemin partiel réduit à {0} ;

    2 tant que CH =6 0 faire

    3 prendre ch E CH;

    etch := extrémité de ch;

    domine := faux;

    pour chaque chemin partiel ch' E chetch faire

    si ch(w) = ch'(w), ?w = 0, . . . ,W alors

    chetch := chetch \ {ch'};

    sinon

    si ch'(w) = ch(w), ?w = 0, ... ,W alors

    domine := vrai;

    si domine = faux alors

    chetch := chetch U {ch};

    pour chaque arc (etch, i) faire

    ch' := l'extension de ch par (vetch, vi); si ch' est valide alors

    CH := CH U {ch'};

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25 fin

    0

    10

    14

    0 10 1 2 3 0

    9 9 24

    [1] (0, 1) [5] (0, 2) [-14] (0, 3) [0] (0, 0)

    FIGURE 2.15 - Extension depuis le sommet 0

    Règle de dominance

    On note la relation de dominance entre les chemins ch1 et ch2, ch1 < ch2 pour signifier que ch1 domine ch2. Une règle de dominance doit permettre d'éliminer le chemin

    10

    14

    0 1 10 2 3 0

    9 9 24

    [1] (0, 1) [5](0, 2) [-14](0, 3) [0](0, 1)

    [2](0, 1, 2) [ 8](0, 1, 3) [11](0, 1, 0)

    FIGURE 2.16 - Extension depuis le sommet 1

    14

    0 1 2 10 3 0

    9 9 24

    [0](0, 0)
    [16](0, 1, 2, 3)

    [1](0, 1) [2](0, 1, 2) [-14](0, 3)

    [ 11](0, 1, 2, 3)

    FIGURE 2.17 - Extension depuis le sommet 2

    0 1 2 3 10 0

    9 9 24

    [1](0, 1) [2](0, 1, 2) [-14](0, 3) [0](0, 0)

    [-4] (0,3,0)

    FIGURE 2.18 - Extension depuis le sommet 3

    dominé en étant certain de pouvoir toujours atteindre la solution optimale. La relation de dominance est basée sur deux règles suivantes :

    - Un chemin réalisable, qui respecte les contraintes de ressources, atteignant le sommet final de la séquence, domine tous les chemins partiels atteignant le sommet final avec un coût supérieur,

    - Un chemin ch1 domine un chemin ch2 s'il existe une extension de ch1 dominant extension(ch2) pour toute extension extension(ch2) de ch2.

    La relation de dominance est transitive. La propriété de transitivité permet de limiter le nombre de chemins partiels mémorisés. Sans règle de dominance, l'algorithme de programmation dynamique construit toutes les solutions réalisables. On a donc tout intérêt à utiliser des règles de dominances fortes, permettant de limiter le nombre de solutions explorées. Il faut par contre éviter des procédures trop coûteuses en temps de calcul, ces procédures étant appelées un nombre exponentiel de fois.

    Taille du voisinage

    Le voisinage défini par la procédure Dropstar est de très grande taille. En effet, si la solution sur laquelle est appliquée la procédure est de longueur ñ (ñ est le nombre de sommets visités), alors la taille du voisinage est égale à 2ñ, puisqu'on cherche la sousséquence optimale de cette séquence et que par conséquent, chaque élément présent dans la séquence peut appartenir ou ne pas appartenir à la sous-séquence optimale.

    Complexité de la procédure

    La procédure Dropstar peut être une procédure très coûteuse en temps. Pour chaque sommet de la séquence, on mémorise une liste de labels, correspondant à des chemins partiels. La taille maximum de cette liste est égale à 2m, où m est le nombre de ressources binaires. Chaque ressource peut être consommée ou non, ce qui mène à 2m états différents. Le nombre de sommets de la séquence est égal à ñ (avec ñ n). Le nombre maximum de chemins partiels durant la procédure dropstar est donc égal à ñ * 2m.

    Chaque chemin partiel est étendu vers ñ villes. Ce nouveau chemin partiel est inséré dans la liste des chemins partiels associée à la ville vers lequel le chemin partiel est étendu (le nombre maximum de chemins partiels dans cette liste est de 2m). L'insertion consiste à comparer le nouveau chemin partiel avec ceux déjà présents dans la liste. La complexité de chaque comparaison est en O(m). Le coût d'insertion d'un nouveau chemin partiel dans une liste est donc O(m2m) et le coût d'extension d'un chemin partiel O(ñm2m). La procédure Dropstar a donc une complexité en O(ñ2m22m). De manière évidente, cette complexité peut être réduite significativement en appliquant des règles de dominances efficaces.

    2.5 Perspectives : variantes possibles de la procédure Dropstar

    La procédure Dropstar est une procédure exacte qui détermine la sous-séquence optimale à partir d'une séquence initiale. Cette procédure peut donc s'appliquer à l'ensemble des problèmes de type Tournées de Véhicules ou Problème de Voyageur de Commerce, pour lesquels la visite de l'ensemble des sommets du graphe n'est pas obligatoire. Nous avons nommé cette classe de problèmes les Problèmes de Tournées avec Couverture Partielle.

    La procédure Dropstar est une procédure exacte. Cette exactitude est coûteuse en temps de calcul de par sa complexité. Il est néanmoins possible de rendre cette méthode heuristique, en résolvant de manière approchée le sous-problème de Plus Court Chemin avec Contraintes de Ressources. Cela peut se faire par exemple en limitant la taille des chemins partiels mémorisés pour chaque sommet de la séquence.

    Une des limites de cette procédure réside dans le fait que l'ordre initial est respecté; une ville située avant une autre ville dans la séquence initiale, sera encore située avant

    2.5. Perspectives : variantes possibles de la procédure Dropstar

    dans la sous-séquence, si aucune des deux villes n'est supprimée par la procédure. On peut cependant étendre cette procédure à l'insertion d'un ou de plusieurs sommets et ainsi passer outre cette limitation. La méthode de Meilleure Insertion de groupes présentée dans la section 4.3.4 permet par exemple de déterminer la meilleure position d'un groupe dans une séquence. On pourrait de la même façon trouver la meilleure position d'insertion de sommets non visités.

    Les deux chapitres qui suivent présentent l'application de la procédure Dropstar pour deux problèmes : le problème de l'Acheteur Itinérant (Traveling Purchaser Problem ou TPP) pour lequel l'opérateur est utilisé pour améliorer les solutions trouvées par un algorithme d'optimisation par Colonie de Fourmis et le problème du Voyageur de Commerce Généralisé (Generalized Traveling Salesman Problem ou GTSP) pour lequel la procédure Dropstar est utilisé comme élément clé d'un algorithme mémétique.

    Chapitre 3

    Application au Problème de

    8
    3
    7

    1
    4

    6

    7

    8 3

    5 7 9

    7

    9

    8

    0

    6

    3

    9

    4

    10

    4

    3

    2

    7

    5

    2

    1

    l'Acheteur Itinérant

    3.1 Introduction au problème de l'Acheteur Itinérant

    Le problème de l'Acheteur Itinérant (Traveling Purchaser Problem ou TPP) est une généralisation du problème du Voyageur de Commerce, introduite pour la première fois par Ramesh (1981). Dans le problème du Voyageur de Commerce, l'objectif est de trouver le tour de longueur minimale qui passe par m villes données. Chaque ville doit être visitée une et une seule fois. Dans le problème de l'Acheteur Itinérant, les villes représentent des marchés. Chaque marché fournit un sous-ensemble de produits. Le prix de vente de chaque produit est connu et les prix des produits dépendent du marché à partir duquel ils sont achetés. Le problème de l'Acheteur Itinérant consiste à trouver un tour qui part d'un dépôt, connectant un sous-ensemble de marchés, de telle sorte que l'ensemble des produits soit acheté et que la somme des coûts de transport et des coûts d'achats des produits soit minimisée.

    Ce problème apparaît dans plusieurs contextes industriels, comme par exemple, dans l'achat de parties de matériels pour des usines (Pearn et Chien, 1998). L'ordonnancement de n tâches sur une machine à m états peut aussi se modéliser comme un TPP, comme cela a été proposé par Ong (1982). Les marchés, produits, coûts de transport et coûts d'achats, représentent respectivement les états des machines, les tâches, les temps de préparation et les temps d'utilisation.

    Le TPP peut être décrit de la façon suivante (Singh et Oudheusden, 1997). Posons G = (V, A) un graphe complet. Considérons V = {v0, . . . , vm} où v0 est le dépôt et v1, . . . , vm sont les marchés. P = {p1, .. . , pn} est l'ensemble des produits. Chaque produit pk E P est disponible dans un ensemble de marchés Vk C V. Les coûts de transport sont notés cij > 0 quels que soient (vi, vj) E A. Les coûts d'achats des produits sont notés ski = 0 quels que soient pk E P et vi E Vk. Un tour réalisable est un tour comprenant le dépôt et un sous-ensemble des marchés, vérifiant la contrainte que tous les produits sont achetés. Les produits sont achetés au plus petit coût disponible parmi les marchés visités. L'objectif est de trouver un tour réalisable qui minimise la somme des coûts de transport et des coûts d'achats des produits.

    Le TPP est NP-difficile, puisque le cas particulier pour lequel chaque marché ne vend qu'un produit ne pouvant être acheté dans aucun autre marché est un problème de Voyageur de Commerce. Dans ce cas, chaque marché doit être visité et le problème revient à trouver le tour hamiltonien qui minimise les coûts de transport.

    Dans un souci de simplicité, on suppose que les coûts de transport sont symétriques (cij = cji quels que soient (vi, vj) E A) et que les inégalités triangulaires sont respectées.

    Soit Xik = 1 si le produit pk est acheté à partir du marché vi et Xik = 0 dans le cas contraire. Soit Yij = 1 si le marché vj suit immédiatement le marché vi dans le tour et Yij = 0 dans le cas contraire. Le problème de l'Acheteur Itinérant peut être modélisé de la manière suivante :

    3.1. Introduction au problème de l'Acheteur Itinérant

    minimiser ? ? skiXik + ? ? cijYij (3.1)

    pkEP viEVk viEV vjEV

    sujet à

    ? Xik = 1 (pk E P), (3.2)

    viEVk

    Xik ? Yij (pk E P, vi E Vk), (3.3)

    vjEV

    Xik ? Yji (pk E P, vi E Vk), (3.4)

    vjEV

    G.S.E.C. (3.5)

    Xik E {0,1} (pk E P, vi E Vk),

    Yij E {0,1} (vi, vj E V)

    La fonction objectif 3.1 représente la somme des coûts de transport et des coûts d'achats des produits. La contrainte 3.2 oblige à ce que l'ensemble des produits soit acheté. Les contraintes 3.3 et 3.4 assurent que seuls les marchés présents dans la solution sont considérés pour l'achat des produits. Les contraintes 3.5 représentent les contraintes sur les sous-tours (Generalized Subtour Elimination Constraints), présentés notamment par Fischetti et al. (1995, 1997). Elles assurent que les marchés sélectionnés sont connectés avec le dépôt dans un tour unique.

    Les premiers travaux concernant la résolution du TPP ont été proposés par Ramesh (1981), qui a présenté un algorithme basé sur une procédure de recherche lexicographique, qui pouvait être déclinée en résolution exacte ou heuristique. La plupart des travaux sur la résolution du TPP proposent des solutions du problème avec des méthodes heuristiques. On peut mentionner les travaux de Golden et al. (1981) qui ont basé leur heuristique sur une stratégie d'économie : Generalized Saving Heuristic (GSH). Leur heuristique a été modifiée par Ong (1982) qui a proposé un Tour Reduction Heuristic basé sur la suppression de marchés à partir d'un tour complet, visitant l'ensemble des marchés. Pearn et Chien (1998) ont suggéré quelques améliorations pour ces heuristiques et ont proposé une autre heuristique, Commodity Adding Heuristic, qui part du principe que l'ensemble des produits est disponible dans chaque marché. Récemment, Teeninga et Volgenant (2004) ont décrit des procédures de pré-traitement des données qui peuvent être ajoutées à des heuristiques déjà existantes. Les résultats expérimentaux ont montré l'efficacité de leurs procédures sur la plupart des heuristiques citées auparavant, en permettant des diminutions dans les temps de calcul pour la résolution du problème.

    Depuis une dizaine d'années, des heuristiques plus évoluées et des approches par métaheuristiques ont été proposées. Voß (1996) a présenté une approche métaheuristique basée sur de la recherche tabou dynamique et recuit simulé. Il proposa deux stratégies dynamiques pour la gestion de la liste tabou : Reverse Elimination Method et Cancellation Sequence Method. Boctor et al. (2003) ont aussi proposé plusieurs algorithmes

    efficaces basés sur de la recherche tabou. Ces heuristiques sont comparées avec des méthodes de résolution exacte sur des instances avec un nombre de marchés allant jusqu'à 200 et un nombre de produits allant jusqu'à 200. Riera-Ledesma et Salazar-González (2005) ont obtenu les meilleurs résultats à ce jour, avec une stratégie heuristique consistant en un échange de k marchés au lieu d'un échange classique d'un seul marché.

    En plus de ces recherches pour résoudre le TPP de manière heuristique, des méthodes exactes ont été développées par Ramesh (1981), Singh et Oudheusden (1997) et Laporte et al. (2003). Ces derniers ont proposé une méthode de résolution par séparation et génération de coupes qui a permis de résoudre de manière exacte des problèmes contenant jusqu'à 250 marchés et 200 produits, avec des solutions dont le nombre de marchés visités reste réduit. Pour les instances de tailles plus importantes, les temps de calcul nécessaires s'avèrent trop long.

    Nous proposons de résoudre le TPP avec une optimisation par Colonie de Fourmis (Ant Colony Optimization ou ACO), introduite par Dorigo et al. (1991) (voir aussi (Dorigo et al., 1996)). Inspirée par le comportement des fourmis pour la recherche de nourriture dans la nature, l'optimisation par Colonie de Fourmis est un algorithme de recherche basé sur des agents coopératifs. Les fourmis communiquent en utilisant une substance chimique appelée phéromone. Quand une fourmi se déplace, elle dépose une quantité de phéromone que les autres fourmis peuvent suivre. Quand une fourmi trouve une trace de phéromone, elle peut décider de la suivre ou de l'ignorer. Si elle suit cette trace, sa propre phéromone renforce la trace existante, et l'augmentation de phéromone augmente la probabilité que la prochaine fourmi suive cette trace. Ainsi, l'attractivité du chemin augmente avec le nombre de fourmis qui l'empruntent. De plus, une fourmi qui emprunte une route courte pour aller à la source de nourriture, reviendra au nid rapidement et donc, déposera deux fois de la phéromone sur son chemin. Au fur et à mesure que le nombre de fourmis empruntant les routes courtes augmente, la phéromone s'accumule davantage sur les chemins courts et les chemins longs sont délaissés. L'évaporation de la phéromone dans l'air accentue ce phénomène en diminuant l'utilisation de chemins longs.

    L'optimisation par Colonie de Fourmis a été utilisée avec succès pour un nombre important de problèmes d'optimisation combinatoire : problème du Voyageur de Commerce ou Traveling Salesman Problem (Dorigo et al., 1991), problème de Tournées de Véhicules ou Vehicle Routing Problem (Bell et McMullen, 2004), problème de Couverture d'Ensemble ou Set Covering Problem (Lessing et al., 2004) ou encore problème de Coloration de Graphe ou Graph Coloring Problem (Costa et Hertz, 1997). Pourtant, à notre connaissance, cette métaheuristique n'a jamais été utilisée pour résoudre le TPP. Une étude complète sur l'optimisation par Colonie de Fourmis a été développée dans le livre de Dorigo et Stutzle (2004).

    Faisant partie des métaheuristiques, l'optimisation par Colonie de Fourmis fournit un schéma de solution générique. Néanmoins, ce schéma a besoin d'être adapté au cas spécifique de chaque problème afin d'accroître son efficacité. Le schéma de notre algorithme s'appuie sur une implémentation efficace de l'optimisation par Colonie de Fourmis. Dans le but de préserver la diversité des solutions, les opérateurs de recherche

    locale sont utilisés pour intensifier la recherche. Ce schéma est appelé l'algorithme de Fourmis Anamorphiques Parallèles sur Plans Multi-Dimensionnels Dynamiques (Dynamic Multi-Dimensional Anamorphic Traveling Ants, ou plus simplement l'algorithme DMD-ATA.

    Le schéma du DMD-ATA est décrit dans la section 3.2. La section 3.3 présente en-suite les opérateurs de recherche locale utilisés. L'efficacité de notre algorithme est évaluée dans la section 3.4. Nous comparons notre algorithme avec la procédure de recherche locale (Local Search algorithm ou LS) de Riera-Ledesma et Salazar-González (2005). Les résultats montrent l'efficacité de notre algorithme, qui a permis de trouver un ensemble de nouvelles meilleures solutions connues.

    3.2 Notre algorithme : le DMD-ATA

    L'algorithme DMD-ATA propose une implémentation originale de l'algorithme d'optimisation par Colonie de Fourmis. Il reprend entre autres des améliorations proposées précédemment dans la littérature pour l'optimisation par Colonie de Fourmis.

    Dans nos travaux, une fourmi est un agent qui se déplace de marché en marché sur un graphe de TPP. Les fourmis ont tendance à préférer les marchés connectés par des arcs sur lesquels il y a une grosse quantité de phéromone et qui sont aussi prometteurs selon un critère heuristique. Quand une fourmi a acheté tous les produits, elle ne retourne pas au dépôt immédiatement. Elle a la possibilité de visiter quelques marchés supplémentaires tandis que la probabilité de retourner au dépôt augmente. Quand une fourmi a fini son tour, elle dépose sur les arcs faisant partie de son tour une quantité de phéromone proportionnelle à la qualité du tour. De plus, si une fourmi a amélioré la meilleure solution trouvée jusqu'ici, la solution correspondante est stockée. L'évaporation de la phéromone est implémentée en introduisant un coefficient d'évaporation : à chaque itération, la quantité de phéromone présente sur chaque arc est réduite de 0.1%.

    Les prochaines sections décrivent respectivement les différents composants de l'algorithme DMD-ATA : TA (Fourmis Parallèlles ou Traveling Ants), A (Anamorphiques), MD (plans Multi-Dimensionnels) et D (Dynamiques).

    3.2.1 Fourmis Parallèles

    Dans l'implémentation originale de l'algorithme d'optimisation par Colonie de Fourmis, chaque fois qu'une fourmi rentre au dépôt, une nouvelle fourmi en part. Pour résumer, le Traveling Ants correspond au fait que les fourmis travaillent en parallèle. L'idée est d'avoir un ensemble de fourmis, cherchant en parallèle de bonnes solutions pour le TPP et communiquant par le biais de la phéromone. Chaque fourmi construit une solution du TPP de manière itérative : on ajoute un nouveau marché à sa solution partielle en exploitant les informations acquises par les expériences et un critère heuristique. L'expérience est modélisée sous la forme de la phéromone déposée par les fourmis sur les arcs du TPP.

    Quand une fourmi rentre au dépôt, une quantité de phéromone est déposée sur les arcs qui ont été visités par la fourmi. La quantité de phéromone déposée dépend de la qualité de la solution trouvée par la fourmi. Ce dépôt a posteriori de phéromone permet d'éviter le dépôt de phéromone sur des arcs appartenant à des tours de mauvaise qualité, puisque la phéromone n'est déposée que lorsque la fourmi rentre au dépôt, et donc que la qualité de la solution est connue. Au stade initial de la résolution, la quantité de phéromone est la même pour tous les arcs.

    Une fois que la fourmi rentre au dépôt, elle commence un nouveau tour. Comme les chemins qu'elles empruntent ont des longueurs différentes (en terme de nombre de marchés), les fourmis ne sont pas synchronisées. Ce traitement permet un meilleur contrôle sur les fourmis et des mises à jour des phéromones plus précises.

    3.2.2 Fourmis Anamorphiques

    La composante Anamorphique correspond à l'utilisation de fourmis différentes les unes des autres. Chaque fourmi est définie par un ensemble de paramètres.

    - Indépendance (d) : ce paramètre indique la possibilité de la fourmi à suivre son

    propre chemin, c'est-à-dire être moins guidée par la phéromone.

    - Affinité (a) : ce paramètre indique l'attraction de la fourmi vers la phéromone

    - Paresse (s) : ce paramètre accentue la minimisation des distances plutôt que des coûts d'achats.

    - Avidité (v) : ce paramètre accentue la minimisation des coûts d'achats plutôt que des distances.

    Chaque fourmi est initialement définie avec des valeurs aléatoires pour les paramètres d, a, s, v. Ces paramètres agissent dans le calcul de la probabilité pij d'atteindre un marché vj à partir d'un marché vi :

    ~~ 1 ~s( 1 )v)d

    fiij = (ôij)a j E Ni

    cij Aj

    fiij

    pij =

    ?

    vkENi

    fiik

    ôij est la quantité de phéromone entre les marchés vi et vj et Aj est le coût actualisé de produits pour le marché vj. Le coût Aj correspond à la somme des coûts d'achats des produits pour le marché vj pour les produits qui n'ont pas été encore achetés dans le tour, moins l'économie réalisée en achetant des produits dans le marché vj à un prix plus faible que le prix payé. Initialement, à cette somme était ajouté le coût maximum pour chaque produit non disponible dans le marché vj et indisponible dans le tour partiel. Ce calcul était un bon moyen pour comparer l'intérêt de chaque marché. Cependant, la somme des coûts maximum pour les produits indisponibles dans le marché vj et indisponibles dans le tour partiel avait tendance à minimiser l'impact de l'économie réalisée en achetant à un prix inférieur des produits déjà achetés. Ainsi, cette somme a

    été supprimée de la formule. Cette formule permet d'utiliser deux informations : l'intérêt du marché vj selon la distance entre vi et vj et l'intérêt du marché vj selon les prix des produits qui y sont vendus. Ni représente l'ensemble des marchés possibles à partir de vi, c'est-à-dire l'ensemble des marchés non visités dans le tour partiel. Le critère heuristique présenté est le résultat d'expérimentations.

    3.2.3 Plans Multi-Dimensionnels

    Un inconvénient bien connu pour les algorithmes d'optimisation à Colonie de Fourmis (Dorigo et al., 1996) est le risque que la phéromone se concentre en grande quantité sur seulement quelques arcs, allant jusqu'à interdire de nombreux arcs qui pourraient appartenir à des solutions optimales ou presque optimales. Afin d'éviter ce phénomène, une composante Multi-Dimensional a été ajoutée : 30 étages de phéromone sont exploités en parallèle. Chaque fourmi est influencée par un seul étage de phéromone, sur lequel elle dépose sa phéromone. Le nombre de fourmis par étage reste constant tout au long de la résolution. Néanmoins, la composante dynamique décrite ci-dessous joue sur le nombre d'étages et permet la fusion entre plusieurs étages.

    3.2.4 Dynamique

    Dans le but d'utiliser efficacement les composantes précédentes, des paramètres dynamiques ont été inclus. Premièrement, les caractéristiques d'une fourmi peuvent évoluer tout au long de la résolution du problème. Quand le coût de la solution d'une fourmi dépasse la valeur de la meilleure solution trouvée d'un coefficient fixé, la fourmi est supprimée, avant même son retour au dépôt. Ce coefficient est donné par 1.5 + (nombre de produits + nombre de marchés)/100. Cette formule propose un bon compromis entre la suppression de fourmis qui ont tendance à trouver de mauvaises solutions et la préservation de la diversité quand les instances sont importantes. Quand une fourmi est supprimée, elle perd un point et repart du dépôt. Chaque fourmi reçoit initialement 10 points. Quand une fourmi a épuisé son stock de points, elle est définitivement supprimée et une nouvelle fourmi est créée. Cette nouvelle fourmi est définie comme un clone de la fourmi ayant trouvé la meilleure solution connue, avec de légères variations dans ses paramètres (d, a, s, v), afin d'éviter une convergence trop rapide vers un ensemble de fourmis identiques. Le nombre de points est augmenté de 50 quand une fourmi améliore la meilleure solution connue. De cette façon, les meilleures fourmis sont préservées, et les fourmis visitant des espaces de recherche peu intéressants sont supprimées.

    Deuxièmement, une amélioration pour l'aspect Multi-Dimensional est d'avoir un nombre variable d'étages. Chaque fois qu'une fourmi est supprimée, l'étage où elle se trouve perd un point. Le stock de points est ramené à sa valeur initiale, 100, quand une fourmi de cet étage améliore la meilleure solution connue. Quand un étage de phéromone a épuisé son stock de points, cet étage est supprimé. Cela permet de concentrer l'effort de recherche sur les étages les plus prometteurs. Néanmoins, le processus

    de suppression des étages est arrêté lorsque le nombre d'étages est égal à 10, afin de préserver une diversité dans les solutions. À ce moment-là, au lieu d'être supprimés, les étages sont fusionnés avec l'étage de phéromone sur lequel la meilleure solution connue a été trouvée. La fusion consiste en l'addition des quantités de phéromones pour chaque arc. On peut noter que lorsqu'un étage est supprimé, les fourmis évoluant sur cet étage sont aussi supprimées. La figure 4 présente l'algorithme de la procédure DMD-ATA.

    Algorithme 4 : Algorithme DMD-ATA

    1 Initialisation: Calculer une première solution réalisable et en mémoriser le coût;

    2 tant que la limite de temps n'est pas dépassée faire

    3 pour chaque étage de phéromone k faire

    pour chaque chaque fourmi j sur chaque étage k faire

    Déplacer j vers le prochain marché;

    si j retourne au dépôt alors

    Ajouter de la phéromone sur la route de j selon la qualité de la solution trouvée;

    si j a trouvé une meilleure solution que la meilleure solution connue alors Mémoriser j;

    Relancer j; sinon

    si j n'est pas efficace alors

    Supprimer j;

    Enlever un point de j;

    si j a épuisé son stock de points alors

    Supprimer j et cloner la meilleure fourmi actuelle;

    Relancer j;

    Évaporer la phéromone sur l'étage k;

    si l'étage k a épuisé son stock de points alors

    si il y a plus de 10 étages de phéromone alors Supprimer k;

    sinon

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

     

    Fusionner k avec le meilleur étage;

    3.3 Opérateurs de recherche locale

    L'optimisation par Colonie de Fourmis a besoin de coopérer avec une recherche locale afin d'être efficace. Nous explorons le voisinage de solutions avec plusieurs procédures de recherche locale. Nous décrivons dans un premier temps ces procédures, avant de détailler la manière dont elles sont combinées.

    3.3.1 Procédures de recherches locales basiques 2-opt

    Cette procédure est bien connue dans le contexte du TSP (Lin, 1965). Cette procédure consiste à choisir deux marchés dans le tour et à permuter la circulation entre ces deux marchés si cela améliore la solution. La complexité de cette procédure est O(m2). Pour le TPP, la procédure réoptimise la séquence de marchés visités, sans modifier l'ensemble des marchés non visités.

    Simplification

    Durant la construction du tour, certains produits peuvent être achetés dans un premier temps dans un marché vi, puis finalement être achetés dans un marché visité par la suite, si ces produits sont disponibles à un plus faible coût. Quand le tour est terminé, certains marchés peuvent être toujours présents dans le tour, alors qu'aucun produit n'y est acheté. La procédure simplification supprime ces marchés du tour.

    Insertion

    La procédure insertion (voir (Riera-Ledesma et Salazar-González, 2005) pour plus de détails) tente d'insérer des marchés non visités dans le tour. Une insertion est effectuée chaque fois que l'économie réalisée sur les coûts d'achats des produits dépasse l'augmentation de coûts de transport. La complexité de cette procédure est O(m2 × n).

    Suppression

    La procédure suppression (voir la procédure drop proposée par (Riera-Ledesma et Salazar-González, 2005)) est la procédure symétrique de l'insertion. Un marché est supprimé du tour, à partir du moment où la diminution des coûts de transport dépasse l'augmentation des coûts d'achats des produits. La complexité de cette procédure est

    O(m2 × n).

    3.3.2 Application de l'opérateur Dropstar

    La procédure dropstar, présentée plus en détail dans le chapitre 2, est une sorte d'extension de la procédure k-drop proposée par Riera-Ledesma et Salazar-González (2005). Dans cette procédure, k marchés consécutifs sont supprimés du tour. Avec la procédure dropstar, nous proposons de déterminer l'ensemble optimal de marchés, consécutifs ou non, qui doivent être supprimés d'une solution. Ainsi, en gardant l'ordre original du tour, la procédure dropstar en extrait la sous-séquence optimale (voir la section 2.4.2 pour une vision plus générale de la procédure Dropstar).

    Cette extension permet d'agrandir considerablement la taille du voisinage. Cependant, trouver la meilleure solution voisine est un problème NP-difficile comme cela est montre ci-dessous.

    Nous definissons maintenant le concept de sous-sequence. Soit S = (i1, . . . , ik) une sequence, solution realisable du problème de l'Acheteur Itinerant et S' = (i'1, ... , i'l) une autre sequence, solution realisable du problème de l'Acheteur Itinerant. On considère que S' est une sous-sequence de la sequence S si S' ? S et que quel que soit i' m et i' n appartenant à S' tel que i' m precède in', alors i' m precède i' n dans S.

    Propriete 1 Trouver la meilleure sous-séquence S' d'une séquence S est un problème NPdifficile.

    Demonstration. Pour montrer que le problème de recherche d'une sous-sequence optimale (ou PRSS) est NP-difficile, montrons que le problème decisionnel de recherche d'une sous-sequence (ou PRSS-dec) est NP-complet. Par rapport au PRSS, le PRSS-dec cherche une solution de valeur inferieure à un objectif donne, plutôt qu'une solution de coût optimal. Il est possible de verifier en temps polynomial si une solution du problème decisionnel est realisable et si le coût de cette solution est inferieur à un objectif donne. Le PRSS-dec appartient donc à la classe NP. Pour montrer que ce problème est NP-complet, nous proposons une reduction du problème decisionnel de Couverture d'Ensemble (ou PCE-dec) vers le PRSS-dec.

    Considerons une instance du PCE-dec. Soit X un ensemble. Soit F une famille de sous-ensembles de X, avec ?f?F f = X. L'objectif du PCE-dec est de trouver un sous-ensemble F' de F (F' ? F) tel que ?f?F' f = X et |F'| = Q.

    Construisons une instance du problème de l'Acheteur Itinerant : on definit G = (V, A) un graphe complet. On note V = {v0, ... , vm} où v0 est le depôt et v1, . . . , vm sont les marches. À chaque f ? F, on associe une ville vi. Les coûts de transport sont notes cij = 1 quels que soient vi, vj ? V\{v0} et civ0 = 0 pour tout vi ? V\{v0}. P = {p1, . . . , pn} est l'ensemble des produits. Chaque produit pk est un element de X. Chaque produit pk ? P est disponible dans un ensemble de marches Vk ? V et les coûts d'achats des produits sk,i est egal à 0 quels que soient pk ? X et vi ? Vk.

    Construisons la solution realisable S du problème de l'Acheteur Itinerant qui visite l'ensemble des sommets.

    Montrons que resoudre une instance du PCE-dec où le nombre d'ensembles doit être inferieur à Q revient alors à savoir s'il existe une sous-sequence S' de S, telle que le coût de S' soit inferieur à Q.

    Supposons qu'il existe une sous-sequence realisable S' de coût inferieur à Q. Le coût des produits etant nul, le nombre de marches de S' est donc inferieur ou egal à Q. On peut donc en deduire qu'il existe une solution F' au PCE-dec, telle que chaque sous-ensemble f de F' correspond à un marche de S'. Le nombre de sous-ensemble f est donc inferieur à Q.

    Supposons maintenant qu'il existe une solution F' au PCE-dec. La solution S' où chaque
    marche de S est un element f de F' est une solution du PRSS-dec correspondant. La

    réponse aux deux problèmes de décision est donc identique.

    Précisons que la réduction se fait en temps polynomial et rappelons que le problème décisionnel de Couverture Minimale est NP-complet (Garey et Johnson, 1979). Finalement, ceci permet de conclure que la recherche d'une sous-séquence optimale appartient à la classe des problèmes NP-difficiles. ~

    Nous calculons la sous-séquence optimale à l'aide d'un algorithme de programmation dynamique (voir la section 2.4.4 pour plus de détails sur cet algorithme) appliqué sur un graphe obtenu à partir du tour original. Ce graphe est construit de la façon suivante. Un noeud est ajouté pour chaque marché visité dans le tour. Deux noeuds sont ajoutés, afin de dupliquer le dépôt en début et en fin de tour. Des arcs sont ensuite construits entre chaque marché et les marchés situés à la suite dans le tour. (cf. Fig. 3.1). La procédure consiste alors à trouver le plus court chemin dans le graphe entre les deux copies du dépôt, avec la contrainte que tous les produits soient achetés. Le coût du chemin est égal à la somme des coûts de transport et des coûts d'achats des produits.

    0 4 2 7 3 10 0

    FIGURE 3.1 - Exemple d'un tour et du graphe résultant utilisé par la procédure dropstar

    Dans l'objectif d'accélérer la résolution de la procédure dropstar, la construction du graphe est légèrement modifiée. Quand un marché vi présent dans le tour est le seul marché à proposer un certain produit parmi les marchés du tour, ce marché doit être dans toute sous-séquence valide. Ainsi, les arcs entre deux noeuds situés de part et d'autre de vi ne peuvent être empruntés. De tels arcs sont alors supprimés du graphe (cf. Fig. 3.2).

    L'algorithme de programmation dynamique que nous avons utilisé pour trouver le plus court chemin dans le graphe est inspiré de l'algorithme développé par Feillet et al. (2004) pour le Problème du Plus Court Chemin Élémentaire avec Contraintes de Ressources et est présenté plus en détails dans la section 2.4.4 dans le chapitre 2. Dans ce problème, des labels correspondent à des chemins partiels. Afin de limiter le nombre de labels, nous proposons d'appliquer des règles de dominance.

    Dans ce qui suit, nous notons L = (C, P1, . . . , Pn) un label correspondant à un chemin partiel, pour lequel C représente le coût du chemin partiel, comprenant les coûts de transport et les coûts d'achats des produits, Pj le coût d'achat du produit pj. Pj est

    0 4 2 7 3 10 0

    FIGURE 3.2 - Exemple d'un tour et du graphe résultant pour lequel le marché 7 doit appartenir au tour

    fixé à zéro quand le produit p1 n'a pas été encore acheté dans le chemin partiel. Un label L1 domine un label L2, ce qui est noté L1 < L2, quand les deux chemins partiels représentés par ces labels mènent au même noeud et que l'on peut être certain que n'importe quelle extension de L1 serait de coût plus faible que l'extension identique pour L2. Dans ce cas, le label L2 peut être alors supprimé.

    Un point important à prendre en considération lorsque deux labels sont comparés est qu'ils n'ont pas nécessairement acheté les produits au même prix. Ainsi, les économies potentielles sur les coûts d'achats qui peuvent être obtenues en étendant les labels sont différentes pour les deux labels comparés. Nous limitons la comparaison de labels dans le cas pour lequel les deux labels L1 et L2 mènent au même marché et que tous les produits achetés par le label L2 sont aussi achetés par le label L1. Nous appelons alors S1 l'ensemble de produits achetés par le label L1 et S C S1 l'ensemble de produits achetés par le label L2. Dans ce cas, pour chaque produit p1 E S, une simple borne supérieure sur le montant additionnel d'économies sur le coût d'achat de p1 qui peut être attendu par le label L2 comparé au label L1 est égal à max(0, P2 1 -- P11 ). Une condition suffisante

    pour obtenir la dominance L1 < L2 est alors

    C2 -- ? max(0, P2 1 -- P1 1 ) = C1

    p1ES

    En effet, cette condition assure que les économies potentielles sur les coûts d'achats des produits pour le label L2 ne peuvent pas contrebalancer la différence actuelle des coûts.

    Cette condition peut être renforcée en prenant en considération les coûts d'achats des produits qui ont été achetés seulement par le label L1. Dans cette optique, nous introduisons le coût potentiel c0 ik d'un produit pk dans le marché vi. Ce coût est égal au coût d'achat minimum du produit pk dans les marchés situés à la suite du marché vi dans le tour courant. Avec cette notation, une condition de dominance renforcée peut être établie telle que : L1 < L2 si

    C2 -- ? max(0, P2 1 -- P11 ) + ? max(c0 i1, P11 ) = C1

    p1ES p1ES1\S

    Le nouveau terme de cette condition représente le coût d'achat minimal pour le label L2 des produits qui ne sont actuellement achetés que par le label L1.

    3.3.3 Intégration de la recherche locale dans l'algorithme DMD-ATA

    Au vu de la complexité de certaines des procédures de recherches locales présentées, nous ne pouvons pas toutes les appliquer à chaque fois qu'une fourmi revient au dépôt. Par conséquent, seules les procédures 2-opt, insertion, simplification et suppression sont appliquées, dans cet ordre, lors du retour au dépôt de chaque fourmi. Chaque procédure, ainsi que la séquence dans son intégralité, est répétée tant que des améliorations sur le coût de la solution sont obtenues.

    La procédure dropstar est appliquée uniquement lorsque la différence entre le coût de la solution courante et la meilleure solution connue est inférieure à 10% et que ces deux solutions ont un degré de différence assez important. Cette différence est évaluée à l'aide de la mesure suivante :

    diff(S, S*) = |(S ? S*)\(S n S*)|

    |S ? S*|

    pour laquelle S et S* sont respectivement l'ensemble des marchés visités par la solution
    courante et par la meilleure solution connue. On considère que les deux solutions ont

    un degré de différence assez important lorsque diff = 2 3, ce qui signifie que les deux solutions ont moins de la moitié de leurs marchés en commun.

    Par cette condition supplémentaire, nous accentuons l'exploration du voisinage de bonnes solutions qui diffèrent de manière significative de la meilleure solution connue. Ceci permet d'éviter la répétition d'une intensification excessive dans la même région de l'espace de solutions.

    3.4 Résultats expérimentaux

    Cette section évalue les performances de notre algorithme. Nous utilisons les instances symétriques euclidiennes sans capacité proposées par Riera-Ledesma et SalazarGonzález (2005). Ces instances vont de m = 50 à 350 marchés et de n = 50 à 200 produits. Cinq instances sont générées pour chaque combinaison du nombre de marchés et du nombre de produits, ce qui amène à un ensemble de 140 instances. Les solutions optimales sont connues pour 89 instances, par l'approche par séparation et génération de coupes proposée par Laporte et al. (Laporte et al., 2003). En ce qui concerne les 51 instances restantes, la valeur de la meilleure solution connue est fournie par l'algorithme LS de Riera-Ledesma et Salazar-González (2005). Les expérimentations sont exécutées en C++ sur un PC Pentium IV 2 Ghz et 1 Go de mémoire vive sous Linux/Debian.

    Tous les paramètres présentés dans ce chapitre (par exemple, le nombre de niveaux de phéromone) ont été sélectionnés par des expériences préliminaires.

    Nous comparons plusieurs variantes de notre algorithme avec l'algorithme de recherche locale (Local Search (LS)) proposé par Riera-Ledesma et Salazar-González (2005) lorsque les solutions optimales ne sont pas connues et avec l'approche par séparation et

    génération de coupes proposée par Laporte et al. (2003) lorsque leur algorithme fournit les solutions optimales. Les résultats sont présentés dans les tableaux 3.1 et 3.2, respectivement pour les instances pour lesquelles la solution optimale est connue et celles où la solution optimale n'est pas connue. Les algorithmes sont :

    - LS : algorithme Local Search proposé par Riera-Ledesma et Salazar-González (2005).

    - IN (Improved Neighborhood) : une approche par construction stochastique simple, améliorée par nos opérateurs de recherche locale. La construction consiste à choisir aléatoirement un marché pour lequel au moins un nouveau produit peut être acheté, puis l'insérer dans le tour courant avec une approche de plus faible insertion, jusqu'à ce que tous les produits soient achetés, et ainsi obtenir une solution réalisable. Des marchés choisis aléatoirement sont ensuite ajoutés à la solution. Le nombre de marchés à ajouter est un nombre aléatoire compris entre 0 et 4. La procédure se termine avec des séquences d'insertion, suppression, dropstar et 2-opt, jusqu'à ce qu'aucune amélioration ne puisse être obtenue. Une nouvelle solution est alors générée. L'algorithme s'arrête lorsqu'il a atteint une limite de temps fixée à 300 secondes.

    - DMD-ATA-LS : notre algorithme sans la procédure Dropstar, avec une limite de temps fixée à 300 secondes.

    - DMD-ATA-300 : notre algorithme, avec une limite de temps fixée à 300 secondes. - DMD-ATA : les résultats moyens de notre algorithme pour cinq essais, avec une limite de temps fixée à 3600 secondes.

    Les en-têtes de colonnes et des lignes sont les suivants :

    - m : nombre de marchés dans les instances,

    - n : nombre de produits dans les instances,

    - %gap : écart exprimé en pourcentage entre la solution optimale (Table 3.1) ou la meilleure solution connue (Tableau 3.2) et la solution renvoyée par l'algorithme DMD-ATA,

    - CPU : Temps en secondes pour finir l'algorithme (LS) ou pour trouver la meilleure solution,

    - #best : nombre d'instances sur 89 pour lesquelles la solution optimale connue a été trouvée (Tableau 3.1),

    - #improved : nombre d'instances sur 51 pour lesquelles la meilleure solution connue a été atteinte ou améliorée (Tableau 3.2).

    Dans le tableau 3.2, le temps CPU pour l'algorithme LS n'est pas disponible.

    Les tableaux 3.3 et 3.4 présentent les instances pour lesquelles la meilleure solution connue (fournie par Riera-Ledesma et Salazar-González (2005)) a été améliorée par l'algorithme DMD-ATA (avec 5 essais). La première colonne des tableaux est le nom de l'instance.

    La première conclusion qui peut être tirée à la lecture de ces tableaux est que l'algorithme DMD-ATA est compétitif lorsqu'on le compare avec les meilleures méthodes connues, notamment la méthode LS de Riera-Ledesma et Salazar-González (2005). Sur de petites instances, l'algorithme DMD-ATA est parfois moins performant que la méthode LS. Sur les instances de tailles plus importantes, notre algorithme se montre plus efficace en terme de qualité de la solution que la méthode LS et améliore 48 instances

    m n

    Methodes #best

    50 100 150 200 250 50 100 150 200

    %Gap 0.07 0.14 0.03 0.32 0.06 0.07 0.24 0.10 0.08 82/89

    LS CPU 3 10 14 19 25 5 13 20 21

    %Gap 0.00 0.08 5.4 2.13 2.1 0.15 0.3 3.51 4.13 62/89

    IN CPU 5 30 93 71 76 12 44 73 90

    DMD-ATA-LS %Gap 0.00 0.00 0.21 0.36 0.51 0.05 0.03 0.34 0.35 75/89

    CPU 4 22 60 97 123 36 73 60 51

    DMD-ATA-300%Gap 0.00 0.01 0.13 0.03 0.39 0.05 0.15 0.00 0.12 79/89

    CPU 5 6 75 66 97 20 53 31 81

    DMD-ATA %Gap 0.00 0.00 0.08 0.02 0.01 0.00 0.05 0.00 0.03 86.50/89

    CPU 2 20 172 232 154 37 154 96 165

    TABLE 3.1 - Résultats expérimentaux, instances fermées

    m n

    Methodes 50 100 150 200 #improved

    200 250 300 350

    %Gap 2.05 6.00 6.66 10.99 0.78 5.43 8.77 8.04 14/51

    IN CPU 9 100 88 111 104 85 98 59

    DMD-ATA-LS %Gap 0.88 1.61 1.30 1.22 -0.29 1.00 1.49 1.37 32/51

    CPU 53 88 165 125 80 124 127 105

    DMD-ATA-300%Gap 0.56 1.30 2.08 1.25 -1.16 0.23 1.77 2.46 34/51

    CPU 105 83 134 160 61 106 172 105

    DMD-ATA %Gap -0.30 -0.33 -0.38 -0.75 -1.27 -0.49 -0.31 -0.09 48/51

    CPU 973 470 834 651 133 394 515 909

    TABLE 3.2 - Résultats expérimentaux, instances ouvertes

    sur 51 pour lesquelles les solutions optimales ne sont toujours pas connues. Cependant, on peut noter que notre algorithme se montre plus coûteux en temps de calcul que LS. En effet celui-ci est basé sur une descente stratégique et converge donc rapidement vers un optimum local.

    La comparaison entre la méthode DMD-ATA-300 et la méthode DMD-ATA est intéressante pour un point en particulier. Sur les instances de grandes tailles, la méthode DMD-ATA s'avère beaucoup plus efficace en un heure qu'en 300 secondes. La raison pour cela semble être qu'une partie importante du temps de calcul est consommée par les opérateurs de recherche locale et donc que la limite de 300 secondes ne semble pas être un temps assez conséquent pour tirer entièrement avantage du composant d'optimisation par Colonies de Fourmis.

    Les résultats présentés dans le tableau 3.1 et les tableaux 3.3 et 3.4 sont les moyennes des résultats sur cinq essais, afin de montrer l'efficacité et la robustesse de l'algorithme. Les résultats sont très proches d'un essai à l'autre.

    D'autres conclusions peuvent être déduites à partir des comparaisons entre l'algorithme DMD-ATA et l'algorithme Improved Neighborhood. Les résultats montrent que

    Instance

    DMD-ATA

    LS

    CPU

    %gap

    EEuclideo.200.150.4

    2419

    2426

    1216,92

    -0,29

    EEuclideo.200.200.4

    2344

    2353

    527,03

    -0,38

    EEuclideo.250.100.1

    1301

    1309

    33,84

    -0,61

    EEuclideo.250.100.4

    1673

    1677

    10,23

    -0,24

    EEuclideo.250.100.5

    1641

    1648

    550,24

    -0,42

    EEuclideo.250.150.4

    1836

    1840

    45,24

    -0,22

    EEuclideo.250.150.5

    1531

    1539

    21,1

    -0,52

    EEuclideo.250.200.2

    2785

    2787

    1137,65

    -0,07

    EEuclideo.250.200.3

    1924

    1934

    281,88

    -0,52

    EEuclideo.250.200.4

    2116

    2128

    83,83

    -0,56

    EEuclideo.250.200.5

    1797

    1807

    930,03

    -0,55

    EEuclideo.300.50.1

    1477

    1483

    160,00

    -0,40

    EEuclideo.300.50.2

    813

    816

    116,01

    -0,37

    EEuclideo.300.50.3

    1117

    1123

    20,00

    -0,53

    EEuclideo.300.50.4

    1176

    1183

    2,11

    -0,59

    EEuclideo.300.50.5

    1257

    1262

    276,00

    -0,40

    EEuclideo.300.100.1

    1035

    1040

    55,54

    -0,48

    EEuclideo.300.100.2

    1179

    1184

    617,22

    -0,42

    EEuclideo.300.100.3

    1498

    1507

    103,42

    -0,60

    EEuclideo.300.100.4

    1749

    1759

    312,16

    -0,57

    EEuclideo.300.100.5

    1774

    1781

    2,74

    -0,39

    EEuclideo.300.150.1

    1457

    1459

    756,71

    -0,14

    EEuclideo.300.150.2

    1656

    1667

    483,32

    -0,66

    EEuclideo.300.150.3

    2485

    2492

    663,24

    -0,28

    TABLE 3.3 - Résultats expérimentaux, instances ouvertes améliorées (1)

    les opérateurs de recherche locale que nous proposons sont assez performants tant que les instances sont de tailles modérées. Néanmoins, l'intérêt de coupler de l'optimisation par Colonie de Fourmis avec de la recherche locale est évident pour les instances de plus grandes tailles. Cela démontre que le schéma d'optimisation par Colonies de Fourmis permet de diriger la recherche vers de bonnes régions de l'espace de solutions.

    Enfin, la comparaison entre l'algorithme DMD-ATA-300 et l'algorithme DMD-ATALS montre que la procédure Dropstar apporte un avantage considérable à notre méthode. Elle permet de résoudre 4 instances à l'optimum qui n'étaient pas résolubles sans cette procédure. De plus, la procédure permet d'améliorer les meilleures solutions connues de 34 instances, alors que la méthode DMD-ATA-LS (sans la procédure Drops-tar) n'en améliorait que 32 dans le même temps imparti. Comme on peut le constater à la lecture des temps de calcul, la procédure Dropstar nécessite un temps de calcul raisonnable et fournit une exploration intensive d'une nouvelle définition de voisinage, qui n'était pas exploré par les autres procédures de recherche locale.

     
     
     
     

    3.5. Conclusion

     
     
     
     
     

    Instance

    DMD-ATA

    LS

    CPU

    %gap

    EEuclideo.300.150.4

    1801

    1809

    95,93

    -0,44

    EEuclideo.300.150.5

    1816

    1825

    309,25

    -0,49

    EEuclideo.300.200.2

    1791

    1798

    1918,52

    -0,39

    EEuclideo.300.200.3

    2442

    2450

    2852,05

    -0,33

    EEuclideo.300.200.4

    1815

    1829

    2946,79

    -0,77

    EEuclideo.350.50.1

    723

    727

    46,04

    -0,55

    EEuclideo.350.50.2

    736

    739

    25,71

    -0,41

    EEuclideo.350.50.3

    942

    946

    6,00

    -0,42

    EEuclideo.350.50.4

    805

    809

    379,39

    -0,49

    EEuclideo.350.50.5

    1125

    1230

    26,35

    -8,54

    EEuclideo.350.100.1

    1317

    1321

    1698,48

    -0,30

    EEuclideo.350.100.2

    962

    965

    155,48

    -0,31

    EEuclideo.350.100.3

    796

    804

    839,65

    -1,00

    EEuclideo.350.100.4

    1059

    1065

    13,94

    -0,56

    EEuclideo.350.100.5

    1566

    1576

    464,86

    -0,63

    EEuclideo.350.150.1

    1457

    1459

    1986,42

    -0,14

    EEuclideo.350.150.2

    1315

    1322

    159,12

    -0,53

    EEuclideo.350.150.3

    2553

    2566

    257,69

    -0,51

    EEuclideo.350.150.4

    1239

    1248

    595,85

    -0,72

    EEuclideo.350.150.5

    2288

    2297

    8,93

    -0,39

    EEuclideo.350.200.1

    1503

    1505

    1033,39

    -0,13

    EEuclideo.350.200.2

    1374

    1377

    3085,09

    -0,22

    EEuclideo.350.200.3

    1873

    1889

    368,66

    -0,85

    EEuclideo.350.200.5

    2336

    2347

    2385,65

    -0,47

    TABLE 3.4 - Résultats expérimentaux, instances ouvertes améliorées (2)

    3.5 Conclusion

    Nous avons proposé un nouvel algorithme pour la solution du problème de l'Acheteur Itinérant. Cet algorithme consiste en l'hybridation d'une méthode d'optimisation à Colonie de Fourmis avec des procédures de recherche locale. Notre approche a été la suivante. L'algorithme d'optimisation par Colonie de Fourmis est essentiellement dédié à mener la recherche vers des régions intéressantes de l'espace de solutions. La recherche locale est alors utilisée pour explorer intensivement ces régions. Ainsi, l'algorithme d'optimisation par Colonie de Fourmis est modifié de façon à garantir un important degré de diversité. Nous appelons Fourmis Anamorphiques Parallèles sur Plans Multi-Dimensionnels Dynamiques (Dynamic Multi-Dimensional Anamorphic Traveling Ants ou DMD-ATA) l'algorithme résultant de cette hybridation. En ce qui concerne les opérateurs de recherche locale, nous utilisons l'opérateur de grand voisinage Dropstar, introduit dans le chapitre 2. À notre connaissance, un tel opérateur n'a jamais été proposé pour le problème de l'Acheteur Itinérant, ni pour d'autres problèmes de Tournées de Véhicules. L'utilisation couplée de l'optimisation par Colonie de Fourmis et d'un opérateur de recherche à grand voisinage semble efficace, puisqu'elle permet d'améliorer

    les meilleures solutions connues pour un nombre important d'instances.

    10

    Groupe 0 8 Groupe 3

    Groupe 2 Groupe 1

    3

    0

    6

    7

    2

    1

    13

    Groupe 4

    9

    4

    5

    12

    11

    Chapitre 4

    Application au Problème du

    Voyageur de Commerce Généralisé

    4.1 Introduction au Problème du Voyageur de Commerce Généralisé

    Nous proposons une solution pour le problème du Voyageur de Commerce Généralisé (Generalized Traveling Salesman Problem ou GTSP) basée sur un algorithme mémétique (dans notre cas, un algorithme génétique combiné avec de la recherche locale, voir (Hart et al., 2005) ou (Moscato et Cotta, 2005) pour plus de détails). Le problème du Voyageur de Commerce Généralisé est une généralisation du classique problème du Voyageur de Commerce (Traveling Salesman Problem ou TSP). Ma principale contribution réside dans l'opérateur de croisement basé sur l'exploration d'un voisinage étendu autour de l'individu père et de l'individu mère.

    Le GTSP peut être décrit de la façon suivante. Soit G = (V, E) un graphe complet non orienté, V = {v1, . . . , vn} un ensemble de villes, W = {W1, . . . , Wm} un ensemble de groupes, avec 0 < m = n. Chaque ville vi E V appartient à un et un seul groupe (les groupes sont disjoints deux à deux, i.e. pour i =6 j, Wi fl Wj = 0 et W1 U ... U Wm = V). Les coûts de transports sont notés cij pour (vi, vj) E V. L'objectif est de construire un tour qui visite exactement une fois chaque groupe tout en minimisant la somme des coûts de transport. Dans notre travail, nous n'avons considéré que le cas pour lequel les matrices de coûts sont symétriques (cij = cji), mais l'algorithme peut être facilement généralisé pour les cas asymétriques. En particulier, l'opérateur de croisement peut être aussi bien appliqué pour les cas symétriques que pour les cas asymétriques.

    Le GTSP est un problème NP-difficile au sens fort, puisque ce problème est une généralisation du TSP. En effet, le cas spécial dans lequel m = n (une ville par groupe) est un problème de Voyageur de Commerce : le problème est de trouver un tour qui visite chaque ville en minimisant les coûts de transports.

    Dans la section 4.2, nous présentons un état de l'art sur le GTSP. La section 4.3 présente un nouvel algorithme mémétique développé pour la résolution du GTSP. La principale caractéristique de cet algorithme réside dans la procédure de croisement basée sur une recherche à grand voisinage (voir (Ahuja et al., 2002) pour un travail récent sur les recherches à grand voisinage). La section 4.4 évalue expérimentalement notre algorithme à l'aide de benchmarks issus de la librairie GTSPLIB (Reinelt, 1991).

    4.2 État de l'art

    Le GTSP fut introduit en premier par Srivastava et al. (1969) et Henry-Labordere (1969), qui ont proposé chacun une résolution par un algorithme de programmation dynamique. Laporte et Nobert (1984) et Laporte et al. (1984) ont proposé une approche par programmation en nombres entiers afin de résoudre le GTSP de manière exacte. Plus récemment, Fischetti et al. (1997) ont proposé une résolution efficace basée sur une procédure de séparation et génération de coupes, qui a permis de fournir des résultats optimaux pour des instances contenant jusqu'à 442 noeuds.

    4.2. État de l'art

    Plusieurs travaux ont été menés pour transformer le GTSP en TSP (Lien et al., 1993; Noon et Bean, 1993; Dimitrijevic et Saric, 1997; Laporte et Semet, 1999; Ben-Arieh et al., 2003). Certaines des instances de TSP issues de ces transformations ont un nombre similaire de noeuds comparé au nombre de noeuds de l'instance de GTSP initiale. De plus, certaines transformations de GTSP en TSP (Noon et Bean, 1993) ont une propriété importante : une solution optimale du TSP créé peut être transformée en une solution optimale du GTSP. Malheureusement, une solution réalisable non optimale pour le TSP créé peut ne pas être réalisable pour le GTSP. De plus, certaines heuristiques très efficaces pour le TSP ont eu des résultats peu convaincants pour le GTSP (Slavík, 1997; Dror et Haouari, 2000)

    Deux algorithmes d'approximations ont été proposés pour le GTSP. Slavík (1997) a présenté une approximation en 3p/2, pour laquelle p est le nombre de villes dans le plus grand groupe (p = max (|Vm|)). Cependant, la borne dans le pire cas peut être de

    i=1,...,m

    piètre qualité, la borne supérieure de p étant égale au nombre de noeuds. Garg et Konjevod (2000) ont proposé un algorithme d'approximation pour le problème d'arbre de Steiner, amenant à un algorithme d'approximation en O(log2(|V|) log log(|V|)) log(m)) pour le GTSP. Dans les deux cas, les inégalités triangulaires doivent être respectées.

    Noon et Bean (1991) ont proposé plusieurs heuristiques, en particulier une adaptation de l'heuristique du plus proche voisin utilisée pour le TSP. Des adaptations similaires ont été proposées par Fischetti et al. (1997), telles que la plus lointaine insertion, la plus proche insertion ou encore l'insertion à plus faible coût. Plus récemment, Renaud et Boctor (1998a) ont proposé l'heuristique GI3 (Generalized Initialization, Insertion and Improvement), qui est une généralisation de l'heuristique I3, présentée dans (Renaud et al., 1996). Cette heuristique se déroule en trois phases : une phase d'initialisation du-rant laquelle on construit un tour qui peut ne pas être valide, une phase d'insertion qui complète les tours incomplets en insérant au plus faible coût les villes provenant de groupes non visités et une phase d'amélioration qui utilise des modifications de voisinages de type 2-opt et 3-opt, appelées ici G2-opt et G3-opt. Cet article présente aussi l'algorithme ST (pour Shortest Tour). Cet algorithme détermine la séquence de villes de plus petit coût qui visite les groupes dans un ordre fixé. Ils montrent que ce problème peut être résolu en un temps polynomial.

    Snyder et Daskin (2006) ont proposé récemment une résolution par un algorithme génétique utilisant un encodage par clé aléatoire, encodage qui assure que les solutions construites par croisement ou mutation sont des solutions valides. Cet algorithme génétique est couplé avec des améliorations par recherche locale, définissant un algorithme mémétique, une procédure d'échange et un voisinage de type 2-opt (voir (Moscato et Cotta, 2005) pour plus de détails sur les algorithmes mémétiques). Leurs résultats expérimentaux montrent que leur algorithme est performant, que ce soit en terme de qualité de solution ou de temps de calcul. Un algorithme basé sur l'optimisation par essaims particulaires a été récemment présenté par Shi et al. (2007). Une procédure pour supprimer les croisements dans les tours a été utilisée pour accélérer la vitesse de convergence, appuyée par deux techniques de recherche locale. Malgré cela, les résultats présentés ne parviennent pas à dépasser les meilleures heuristiques connues.

    Enfin, Silberholz et Golden (2007) ont proposé un algorithme génétique avec plusieurs nouvelles techniques, entre autres, des populations initiales isolées, ainsi qu'une nouvelle procédure de reproduction, basé sur l'opérateur de croisement ordonné pour le TSP. Cette nouvelle procédure est appelée mrOX, pour croisement ordonné de rotation modifié (modified rotational ordered crossover). Les procédures d'améliorations locales associées à cet opérateur de croisement, définissant un algorithme mémétique, ont permis d'obtenir de très bons résultats sur de nouvelles instances de taille importante et de dépasser les autres solutions heuristiques en ce qui concerne la qualité des solutions obtenues. L'algorithme proposé par Silberholz et Golden (2007) peut être considéré comme l'algorithme le plus compétitif publié à ce jour.

    4.3 Algorithme mémétique

    Un algorithme génétique (Genetic Algorithm ou GA) est une technique de recherche utilisée pour trouver des solutions approchées à différents types de problèmes d'optimisation (voir par exemple (Winter et al., 1995; Vose, 1998; Man et al., 1999) pour plus de détails). Les algorithmes génétiques font partie des métaheuristiques et sont une classe particulière des algorithmes évolutionnaires, qui utilisent des techniques inspirées de la biologie telles que la mutation, les croisements ou la sélection naturelle. Les algorithmes génétiques maintiennent un nombre important de solutions tout au long de la résolution du problème. L'ensemble des solutions mémorisées est appelé la population. Chaque solution est appelé un individu ou un chromosome. Un individu représente donc une version encodée d'une solution. À chaque itération d'un algorithme génétique, une nouvelle population est générée en utilisant un certain nombre d'opérateurs : la reproduction, la sélection et la mutation.

    Les algorithmes génétiques couplés avec des techniques de recherche locale sont classés comme des algorithmes mémétiques, tels qu'ils ont été présentés par Moscato et Norman (1992) et (Moscato et Cotta, 2005) (voir par exemple (Hart et al., 2005; Sörensen et Sevaux, 2006) pour plus de détails sur des les algorithmes mémétiques). Dans cette section, nous présentons un algorithme mémétique. Nous insistons en particulier sur l'opérateur de croisement, qui est notre principale contribution. Afin d'évaluer plus facilement l'impact de cet opérateur, nous avons volontairement développé une implémentation standard pour le reste de l'algorithme mémétique.

    4.3.1 Composants basiques de l'algorithme Individus

    Chaque individu (une solution du problème) est représenté par une liste ordonnée de groupes, dans laquelle le premier et le dernier groupe sont identiques. À partir de cette liste, on peut déterminer un tour des villes optimal, correspondant à cet ordre de visite des groupes. Le coût de l'individu est le coût du tour des villes. Ce coût est obtenu en utilisant l'algorithme ST (Shortest Tour) développé par Renaud et Boctor (1998a).

    Le principe de l'algorithme Shortest Tour est le suivant. Une succession de groupes définit une séquence d'ensembles de villes, dans laquelle les villes d'un groupe ne peuvent être atteintes que par des villes appartenant à un groupe précédent. En représentant les villes par des noeuds, nous obtenons un graphe orienté acyclique. L'ensemble des chemins du graphe ainsi construit et dont le sommet de départ est confondu avec le sommet d'arrivée, correspond alors à l'ensemble des solutions respectant l'ordre défini par la séquence de groupes. La meilleure de ces solutions est le plus court chemin du graphe. Le calcul d'un plus court chemin dans un graphe acyclique peut être effectué en un temps polynomial à l'aide d'une simple récurrence. Dans le cas du GTSP, le plus court chemin doit être calculé pour chaque ville du groupe de départ en ajoutant la contrainte que le chemin commence et finit par la ville considérée. Le tour des villes optimal est le meilleur tour parmi ces solutions. Cette procédure n'est pas très coûteuse en temps de calcul, ce qui nous permet de l'appeler régulièrement (la complexité de cet algorithme est en O(n3/m3), voir (Renaud et Boctor, 1998a) pour plus de détails).

    Population initiale

    La population initiale contient N individus. Les individus sont générés à l'aide de listes de groupes construites aléatoirement. L'algorithme ST est appliqué afin de déterminer le tour des villes optimal, ainsi que le coût de chaque individu. Afin de limiter les symétries, le groupe de départ (et d'arrivée) est fixé pour tous les individus. Dans le but de réduire le temps de calcul requis par la procédure ST, le groupe qui contient le moins de villes est choisi pour être le premier et le dernier groupe de la liste pour chacun des individus.

    Renouvellement de la population

    À chaque génération, deux individus sont choisis aléatoirement par sélection proportionnelle à l'adaptation (Roulette Wheel selection) et appairés à l'aide de l'opérateur de croisement. Ces deux parents donnent naissance à deux enfants. Cette opération est répétée k fois. Les 2 * k nouveaux individus sont alors ajoutés à la population et seuls les N meilleurs individus sont gardés. Ainsi, la taille de la population reste constante dans le temps.

    Mutation

    Une procédure de mutation est appliquée afin de diversifier la population. Chaque individu de la population a une probabilité u d'être sélectionné pour la procédure de mutation. Dans nos expérimentations, nous avons fixé u = 0.05 (ce pourcentage arbitraire a été choisi car il est utilisé dans plusieurs articles, par exemple dans (Silberholz et Golden, 2007)). La mutation consiste à échanger la place de deux groupes choisis aléatoirement puis d'appliquer l'algorithme Shortest Tour pour calculer le tour optimal de villes, ainsi que le nouveau coût de l'individu.

    Critère d'arrêt

    L'algorithme s'arrête lorsque N1 générations ont été calculées ou lorsqu'aucune amélioration n'a eu lieu durant N2 générations.

    Algorithme Mémétique

    La figure 5 présente une vue synthétique de notre algorithme.

    Algorithme 5 : Algorithme de l'algorithme mémétique

    1 Initialisation: Construire aléatoirement une population initiale de N individus;

    2 tant que le nombre d'itérations est plus petit que N1 et qu'il y a eu une amélioration depuis moins de N2 itérations faire

    3 pour chaque i = 0 à k faire

    4

    5

    6

    7

    8

    9

    Choisir deux individus aléatoirement;

    Construire deux nouveaux individus par croisement;

    Appliquer de la recherche locale sur les deux individus;

    Ajouter les 2 * k nouveaux individus à la population; Garder les N meilleurs individus dans la population;

    Appliquer une mutation avec une probabilité u à chaque individu de la population;

    4.3.2 Croisement

    Le croisement est une procédure importante dans un algorithme génétique ou dans un algorithme mémétique. Cet opérateur permet de construire de nouvelles solutions à partir de solutions existantes et joue un rôle important pour la diversification des solutions.

    Le croisement (appelé aussi la reproduction) est l'équivalent de la rencontre de deux parents, produisant deux enfants. Ces enfants portent une ressemblance à chacun de leurs parents. De nombreux opérateurs de croisement ont été proposés : croisement de préservation maximale (maximal preservative crossover ou MPX) proposé par Mühlenbein et al. (1988), croisement ordonné de rotation modifié (modified rotational ordered crossover ou mrOX) proposé par Silberholz et Golden (2007). Une comparaison de différents opérateurs de croisements utilisés pour le problème du Voyageur de Commerce a été présentée par Tsai et al. (2004).

    La procédure de croisement que nous proposons ici est une application de la procédure dropstar, présentée dans le chapitre 2. On peut aussi noter que cet opérateur a été inspiré d'un algorithme proposé par Prins (2004), appliqué à un problème de Tournées de Véhicules.

    Soient Wi 1, .. . , Wi m et vi1, . . . , vim respectivement le tour des groupes et le tour des villes d'un individu, appelé le père. Soient Wj 1, . . . , Wj m et vj1, . . . , vjm respectivement le tour des groupes et le tour des villes d'un autre individu de la population, appelé la mère. Un nouvel individu - un enfant - est construit de la manière décrite ci-dessous. On peut noter qu'une fois qu'un individu fils a été construit, le rôle des deux parents est inversé et qu'un deuxième enfant est obtenu en utilisant le même procédé.

    Chaque ville de la mère est insérée itérativement dans la séquence de villes du père. L'ordre dans lequel les villes sont insérées est l'ordre déterminé par le tour des villes de la mère, c'est-à-dire que la première ville insérée est la première ville dans le tour des villes de la mère. Nous déterminons la position d'insertion d'une ville vjk de la façon suivante : nous considérons chaque position d'insertion de vjk entre les villes vil et vil+1 du père de telle sorte que Wi l =6 Wj k et Wi l+1 =6 Wj k (évitant ainsi que deux groupes identiques ne se suivent); parmi ces possibilités, on choisit celle minimisant le coût d'insertion ciljk + cjkil+1 - cilil+1.

    Une fois que chaque ville de la mère est insérée, nous en déduisons un tour des groupes dans lequel chaque groupe apparaît deux fois. Nous appelons cette séquence la séquence maître. Dans (Dauzère-Pérès et Sevaux, 2004), une séquence maître d'un problème d'ordonnancement est définie comme une séquence contenant au moins une séquence optimale. Nous cherchons alors la sous-séquence optimale réalisable, c'est-àdire pour laquelle chaque groupe est visité une et une seule fois.

    Cette recherche est effectuée par le biais d'un algorithme de programmation dynamique récursif (voir le chapitre 2 pour plus de détails), appliqué à un graphe obtenu à partir du tour contenant chaque groupe en double. Ce graphe est construit selon la procédure suivante. Un sommet est créé pour chaque ville de chaque groupe, pour chaque apparition du groupe. Un arc est ajouté pour chaque paire de noeuds issus de groupe de différentes positions dans la séquence, dans la direction de la séquence (cf. Fig. 4.1 pour une vision agrégée du graphe et Fig. 4.2 pour un extrait du graphe complet). Nous définissons par la suite plusieurs réductions de graphe (voir section 4.3.3). L'objectif est de trouver le plus court chemin dans le graphe entre les groupes situés aux deux extrémités, avec la contrainte que tous les groupes doivent être visités exactement une fois et que la solution doit être un cycle.

    Avant d'expliquer plus en détails l'algorithme de programmation dynamique, illustrons le comportement de cet opérateur de croisement sur un exemple simple. Considérons un ensemble de groupe W = {W1, . . . , W5}. Les tours de groupes du père et de la mère sont :

    père : W4 W3 W1 W5 W2 W4
    mère : W4 W1 W3 W5 W2 W4

    La procédure d'insertion définit une séquence maître de groupes de la forme:

    enfant: W4 W1 W3 W1 W5 W2 W3 W2 W5 W4

    dans laquelle les groupes issus du père sont soulignés et les positions d'insertion sont définies en utilisant les tours des villes des individus.

    Le graphe représenté par les figures 4.1 et 4.2 est alors défini implicitement. À partir de ce graphe, l'algorithme de programmation dynamique détermine un tour des villes optimal, à partir duquel on déduit une séquence de groupes, définissant ainsi un nouvel individu. L'implémentation de cet algorithme est détaillé dans la section 4.3.3.

    W4 W1 W3 W1 W5 W2 W3 W2 W5 W4

    FIGURE 4.1 - Exemple d'un croisement et du graphe résultant utilisé par la procédure dropstar : vue avec agrégation des sommets en groupes

    groupe W1

    V12

    V5

    groupe W3

    V11

    V8

    V9

    groupe W1

    V12

    V5

    FIGURE 4.2 - Exemple d'un croisement et du graphe résultant utilisé par la procédure dropstar : vue détaillée

    Le principal avantage de cet opérateur est de s'étendre sur un très grand espace de solutions. En effet, le nombre de sous-séquences de groupes de la séquence maître est égal à 2mm est le nombre de groupes. De plus, pour une sous-séquence donnée, le nombre de tours de villes est en O((n/m)m) (on peut facilement se rendre compte que l'espace le plus large est obtenu lorsque chaque groupe a la même taille (le même nombre de villes) n/m). Ainsi, la solution définie par cet opérateur de croisement est la meilleure parmi O(2m * (n/m)m). Selon nous, cela permet une diversification importante et des populations de bonne qualité. Cependant, le prix à payer est un important coût de complexité comparé aux opérateurs de croisement classiques. L'objectif de ce travail est d'évaluer si ce prix est digne d'intérêt.

    Devant la complexité de la procédure de croisement, un important travail a été effectué afin d'accélérer cette procédure pour la rendre applicable dans le cas d'instances de taille importante.

    4.3.3 Implémentation détaillée de l'opérateur de croisement

    Algorithme de programmation dynamique

    L'algorithme de programmation dynamique utilisé pour trouver le plus court chemin dans le graphe est celui présenté dans le chapitre 2. L'algorithme commence avec des chemins partiels initiaux associés à chaque noeud du premier groupe. Les chemins partiels sont ensuite étendus itérativement avec la contrainte que chaque groupe doit être visité exactement une fois. Cette contrainte est traitée comme la contrainte d'élémentarité du chemin, présentée par Feillet et al. (2004). Le graphe étant acyclique, l'extension des chemins partiels dans l'ordre topologique des noeuds fournit le chemin optimal.

    Dans ce qui suit, nous notons L = (C, ä1, .. . , äm) un label correspondant à un chemin partiel, pour lequel C représente le coût de transport du chemin partiel et äi E {0, 1} indique si le groupe Wi est présent dans le chemin ou non. L'extension d'un label à travers un arc est réalisable quand äi = 0 pour le groupe Wi de la ville de destination, excepté lorsque ce groupe est le dernier groupe de la séquence. Dans ce cas, les conditions de réalisabilité sont que la ville de destination est la première ville du label et que äi = 1 pour 1 i m.

    Un label L1 domine un label L2, ce qui est noté L1 < L2, lorsque ces deux labels mènent au même noeud et que l'on peut être sûr que n'importe quelle extension de L1 est de coût moindre que l'extension identique pour L2. Ici, L1 < L2 quand C1 C2,

    ä1 i ä2 i pour 1 i m et que les premières et dernières villes de deux labels sont
    identiques. Dans ce cas, L2 peut être supprimé.

    Bornes inférieures

    À chaque fois qu'un label L = (C, 51, . . . , 5m) est étendu vers une ville, on calcule une borne inférieure sur le coût de n'importe quel chemin pouvant être obtenu à partir de ce label. Cette borne inférieure est comparée avec une borne supérieure initialement définie par le coût de l'individu père. Cette borne supérieure est valide, puisque le tour des villes du père existe dans le graphe. La borne supérieure est mise à jour à chaque fois qu'une nouvelle meilleure solution est trouvée par l'algorithme. Lorsque la borne inférieure n'est pas inférieure à la borne supérieure, le label L est supprimé.

    La borne inférieure LB(L) est donnée par la formule suivante :

    LB(L)=C+ ? Clj

    {1=j=m,5j=0}

    pour laquelle l est la position dans la séquence maître du groupe vers lequel L vient d'être étendu et Clj est le coût minimal induit pour la visite future du groupe Wj.

    Clj est calculé comme le coût minimum de l'arc parmi les arcs dont :

    1. la destination est une des villes de la dernière occurrence du groupe Wj dans la séquence maître,

    2. l'origine est une des villes situés entre le groupe en position l (incluse) et la dernière occurrence du groupe Wj dans la séquence maître.

    Les valeurs Clj sont calculées dans une phase de prétraitement, dès que la séquence maître est fixée, pour chaque position l de la séquence et pour chaque groupe Wj. La complexité de ce calcul est en O(nm).

    On peut noter qu'il peut arriver que la dernière occurrence de Wj précède la position l. Dans ce cas, Clj est fixé à une grande valeur et le label est automatiquement supprimé si 5j = 0, puisque le groupe Wj est inaccessible.

    Réduction du graphe

    Le graphe construit à partir de la séquence maître peut être réduit. Puisque chaque groupe doit être visité, aucun arc n'est autorisé à passer au-dessus de toutes les occurrences d'un groupe. De plus, deux occurrences d'un même groupe n'ont pas à être connectées. Enfin, un groupe situé à la position j dans la séquence maître ne doit être connecté qu'avec la première occurrence de chaque groupe, dans le cas où les deux occurrences seraient situées après la position j. En effet, dans ce cas, toute extension possible à partir de la deuxième occurrence du groupe est aussi possible à partir de la première occurrence du groupe. La figure 4.3 présente le graphe obtenu à partir de l'exemple présenté par la figure 4.1 une fois ces règles appliquées.

    W4 W1 W3 W1 W5 W2 W3 W2 W5 W4

    FIGURE 4.3 - Exemple d'un croisement et du graphe résultant réduit utilisé par la procédure dropstar : vue avec agrégation des sommets en groupes

    Accélérations heuristiques

    La procédure de croisement peut être une procédure très coûteuse en temps. Dans le but d'accélérer sa résolution, nous proposons deux accélérations heuristiques.

    Limitation de la taille des listes de chemins partiels Pendant la déroulement de l'algorithme de programmation dynamique, une liste de chemins partiels est associée à chaque ville. Malgré les règles de dominances, ces listes peuvent être de taille relativement importante. Le but ici est de limiter leur taille. Une limite unique est fixée (100 dans nos expérimentations). Un règle d'évaluation est définie afin de déterminer quels chemins partiels doivent être supprimés lorsque la taille de la liste dépasse la limite. L'évaluation eval(L) d'un label L = (C, ö1, . . . , öm) est :

    ?{1=j=m} C1j ? Clj

    {1=j=m,öj=0}

    pour laquelle UB0 est le coût de l'individu père et l est la position du chemin partiel dans la séquence maître. Cette formule cherche à équilibrer le coût actuel d'un chemin partiel et une évaluation du coût d'extension (tel que proposée dans la section 4.3.3). Les deux termes sont normalisés afin que l'évaluation d'un chemin partiel initial et du chemin partiel correspondant au tour des villes de l'individu père aient une valeur identique UB0.

    UB0

    eval(L) = C +

    Réduction des groupes Le but ici est de limiter la taille du graphe, en supprimant des villes de différents groupes. Une mesure est définie afin d'évaluer l'attrait d'une ville. Les villes les moins attractives sont supprimées de chaque groupe de la séquence maître. La mesure quantifiant l'intérêt de la ville vk du groupe à la position l de la séquence est :

    eval(k, l) = ?

    vi?-(l) ?

    vj?+(l)

    cik + ckj - cij

    où -(l) (respectivement, +(l)) est l'ensemble des villes appartenant aux deux groupes précédant (respectivement suivant) la position l dans la séquence maître. Cette mesure indique une tendance du coût d'insertion de la ville vk dans une solution. En se basant sur cette mesure, la taille maximale d'un groupe Wi est fixée ) [|Wi|p1, où p est

    un paramètre (0.8 dans nos expérimentations). On peut noter qu'avec cette formule, le pourcentage de villes supprimées d'un groupe augmente avec la taille du groupe.

    Complexité de la procédure de croisement

    Il est intéressant de noter que l'algorithme n'atteint pas une complexité en temps polynomiale. L'objectif de cette section est d'apporter plus de précisions quant à la complexité. Dans cette analyse, nous ne prenons pas en compte les deux accélérations heuristiques décrites ci-dessus.

    Un état est défini pour chaque noeud du graphe et pour chaque valeur des ressources {ä1, . . . , äm}. Le graphe contient 2n villes. Les ressources äi sont binaires. Ainsi, le nombre d'état est O(n2m). Le label associé à un état est étendu vers un maximum de n autres états. Chaque nouveau label est inséré dans une liste de labels de taille maxi-male 2m. L'insertion consiste en une comparaison avec chaque autre label de la liste. Chaque comparaison a une complexité en O(m). Le coût de l'insertion d'un nouveau label dans une liste est donc O(m2m) et le coût d'extension d'un label O(nm2m).

    On peut donc en déduire que la complexité dans le pire cas de notre algorithme est O(n2m22m). Évidemment, on peut espérer que le nombre d'opérations soit réduit de manière significative en pratique. On peut aussi noter qu'en limitant la taille des listes des labels, la complexité devient O(n2m).

    4.3.4 Heuristiques de recherche locale

    Un appel de chacune des procédures d'amélioration classiques présentées ci-après nous permet d'obtenir un tour de coût inférieur ou égal au tour auquel on applique la procédure. Lorsqu'un nouvel individu est généré, chaque heuristique de recherche locale est appelée itérativement tant que le coût de la solution est amélioré.

    2-opt

    Cette procédure est classique lorsqu'on étudie le TSP (voir (Lin, 1965) pour plus de détails). Elle consiste à choisir deux villes du tour et à permuter la circulation entre ces deux villes en vue d'améliorer la solution. La complexité de cette procédure est O(m2) où m est le nombre de groupes. La procédure 2-opt est répétée tant que des améliorations sont obtenues. Ensuite, la séquence de groupe correspondant au tour des villes courant est extraite et l'algorithme ST est appliqué.

    3-opt

    De manière similaire au 2-opt, le 3-opt (présenté aussi dans (Lin, 1965)) choisit trois villes au lieu de deux, et modifie le chemin entre ces trois villes. La complexité de la pro-

    cédure est O(m3). Une fois encore, la procédure est répétée tant que des améliorations sont obtenues et le calcul est terminé par l'appel de l'algorithme ST.

    Lin-Kernighan

    Nous utilisons de plus l'heuristique proposée par Lin et Kernighan (1973), disponible sur le site de Concorde1. L'algorithme Lin-Kernighan est une des meilleures heuristiques disponibles pour le problème du Voyageur de Commerce. Il est basé entre autres sur une généralisation des procédures 2-opt et 3-opt. Cette procédure est appliquée chaque fois qu'une nouvelle meilleure solution est trouvée et lors de la génération de nouveaux individus, avec une probabilité égale à 0.50.

    Meilleure insertion de groupe

    L'opérateur de Meilleure Insertion de groupe (ou Move) considère la séquence de groupe d'un individu, sélectionne un groupe et détermine la meilleure position de ce groupe dans la séquence. L'opérateur de Meilleure Insertion de groupe est appliqué une fois pour chaque groupe. Afin de déterminer la meilleure position pour un groupe donnée Wi, une séquence maître est créée, pour laquelle Wi est dans un premier temps supprimé, puis inséré à nouveau entre chaque paire de groupes. L'algorithme de programmation dynamique présenté dans les sections 4.3.2 et 4.3.3 est ensuite appliqué afin de trouver le meilleur tour des villes réalisable.

    L'opérateur de Meilleur Insertion de groupe peut être illustré avec l'exemple suivant. Soit W4 W3 W1 W5 W2 W4 le tour des groupes d'un individu. En appliquant l'opérateur sur le groupe W1, on obtient la séquence maître W4 W1 W3 W1 W5 W1 W2 W1 W4. Le meilleur tour des villes est ensuite calculé sur le graphe correspondant (cf. Fig. 4.4).

    W4 W1 W3 W1 W5

    W1 W2 W1 W4

    FIGURE 4.4 - Exemple de l'opérateur Move et du graphe réduit correspondant : vue agrégée en terme de groupes

    Le voisinage défini par l'opérateur de Meilleure Insertion de groupe a une taille en O(m(n/m)m) (cette taille est calculée de manière similaire aux calculs présentés dans la section 4.3.2 pour l'opérateur de croisement). Dans l'algorithme de programmation dynamique, un label L est défini par une paire (C, 5i). Le nombre d'états est ainsi O(n) et la complexité de la procédure est O(nm).

    1. http :// www.tsp.gatech.edu/concorde/DOC/index.html

    Contrôle des opérateurs de recherche locale

    L'appel des opérateurs présentés précédemment est contrôlé de la manière suivante. Quand un nouvel individu est introduit dans la population pendant la phase initiale, les opérateurs 2-opt, 3-opt et Lin-Kernighan sont appliqués successivement, dans cet ordre.

    Quand un nouvel individu enfant est calculé avec l'opérateur de croisement, un des deux schémas de recherche local suivants est appliqué, avec une probabilité égale à 0.5 : - application de 2-opt, 3-opt et Move, dans cet ordre,

    - application de Lin-Kernighan.

    4.4 Résultats expérimentaux

    L'algorithme a été codé en C++ et exécuté sur un Pentium IV 2.00 Ghz. Les instances utilisées proviennent de la librairie GTSPLIB2 qui propose un ensemble de 65 instances. Parmi ces instances, nous avons sélectionné 54 instances utilisées dans plusieurs articles (Fischetti et al., 1997; Renaud et Boctor, 1998a; Snyder et Daskin, 2006; Silberholz et Golden, 2007) afin de pouvoir nous comparer à d'autres algorithmes.

    Fischetti et al. (1997) ont proposé un algorithme de séparation et génération de coupes pour résoudre le GTSP. Dans leur article, ils ont créé des instances pour le GTSP en appliquant un partitionnement déterministe à 65 instances de TSP issues de la libraire TSPLIB. Pour une instance donnée, le nombre de groupes est fixé à m = [n/5i. Ensuite, m centres sont déterminés en considérant les m noeuds les plus éloignés les uns des autres. Les groupes sont finalement obtenus en affectant chaque noeud à son centre le plus proche. La méthode qu'ils ont développée a permis d'obtenir les valeurs des solutions optimales pour ces instances, avec 10 < m < 89, où m est le nombre de groupes.

    La solution optimale est toujours connue (fournis par l'algorithme de séparation et de génération de coupes de Fischetti et al. (1997)) pour les instances sélectionnées avec 10 < m < 89. Pour les instances restantes (99 < m < 217), Silberholz et Golden (2007) fournissent les meilleurs résultats connus, qui sont en fait les moyennes des résultats pour 5 essais de leur algorithme et de l'algorithme de Snyder et Daskin (2006). Il est important de noter que la valeur de la meilleure solution trouvée par ces algorithmes pour ces instances n'est pas disponible.

    Pour tous les résultats expérimentaux, nous avons fixé le nombre d'individus par population (N) à 50 (ce qui est un nombre retenu dans plusieurs articles, par exemple dans (Silberholz et Golden, 2007)), le nombre de croisements (2 * k) est égal à 30, le nombre maximum d'itérations (N1) à 100 et le nombre maximum d'itérations pendant lesquelles la meilleure solution peut rester inchangée (N2) égal à 10 (ce nombre est assez bas, mais suffisant vu la taille des voisinages définis par les opérateurs de recherches

    2. GTSPLIB est disponible à l'adresse http :// www.cs.rhul.ac.uk/home/zvero/GTSPLIB/

    locales appliqués à chaque itération). Les résultats fournis sont les résultats moyens obtenus avec 5 essais par instance.

    Les résultats présentés dans les tableaux 4.1 et 4.2 montrent les performances de notre algorithme en terme d'écart avec les solutions optimales fournies par le Branch & Cut de Fischetti et al. (1997) (tableau 4.1). Pour les instances restantes (pour 99 m
    217), nous présentons nos résultats dans le tableau 4.2, comparés avec les meilleurs résultats fournis par Silberholz et Golden (2007).

    Les en-têtes des colonnes sont les suivants :

    - instance : le nom de l'instance testée; le premier nombre dans le nom indique le nombre de groupes, le deuxième donne le nombre de villes.

    - opt : la valeur de la solution optimale ou la meilleure solution moyenne connue. - ]best : le nombre de fois où la meilleure solution (lorsqu'elle est connue) a été atteinte sur 5 essais.

    - mean gap : l'écart moyen de notre algorithme à l'optimal ou la meilleure solution moyenne connue (pourcentage).

    - min gap : l'écart minimal de notre algorithme à l'optimal ou la meilleure solution moyenne connue (pourcentage).

    - max gap : l'écart maximal de notre algorithme à l'optimal ou la meilleure solution moyenne connue (pourcentage).

    - CPU time : le temps d'exécution moyen en secondes.

    Les chiffres écrits en gras représentent les cas où la solution trouvée est égale à la solution optimale, ou meilleure que la meilleure solution connue.

    Le tableau 4.1 montre que, avec 5 essais, toutes les solutions obtenues sur les 41 instances sont égales aux solutions optimales et que pour 37 instances sur 41, les solutions sont égales aux solutions optimales pour chaque essai. L'écart entre le meilleur et le moins bon résultat trouvé sur les 5 tests pour chaque instance est toujours relativement limité, ce qui tend à montrer que l'algorithme est robuste. Enfin, dans le pire des cas, le pourcentage d'écart ne dépasse jamais 0,75 % pour les instances les plus importantes.

    Pour les instances de grandes tailles (tableau 4.2), pour lesquelles les solutions optimales ne sont pas connues, les résultats montrent que pour certaines instances, nos pires résultats parmi les cinq essais sont meilleurs que la moyenne des solutions produites par la méthode proposée par Silberholz et Golden (2007) (par exemple, l'instance 207si1032 qui contient 1032 noeuds). Dans le pire cas, les solutions produites par notre algorithme ne dépassent jamais un écart de plus de 0,66 % par rapport au meilleur résultat moyen entre l'algorithme de Silberholz et Golden et l'algorithme de Snyder et Daskin. Enfin, la moyenne de nos solutions est de plus mauvaise qualité que celles proposées par les algorithmes cités précédemment pour seulement 3 instances.

    Le tableau 4.3 présente nos meilleurs résultats parmi cinq essais pour douze instances ouvertes pour lesquelles la solution optimale n'est pas connue. Les résultats présentés sont les solutions produites par notre algorithme et les meilleures moyennes des solutions sur cinq essais entre l'algorithme de Silberholz et Golden et l'algorithme de Snyder et Daskin.

    Afin de mesurer plus précisément l'efficacité de l'opérateur de croisement que nous proposons, nous avons aussi implémenté un opérateur de croisement plus simple, connu sous le nom de croisement à un point (One-point crossover, (Goldberg, 1989)). Les paramètres sont les mêmes pour les deux opérateurs de croisement. Les tableaux 4.4 et 4.5 donnent des informations sur les différences en terme de qualité des solutions et de rapidité d'exécution entre l'opérateur de croisement dropstar et l'opérateur de croisement One-Point pour les instances fermées 4.4 et les instances ouvertes 4.5. Les en-têtes des colonnes sont les suivants :

    - instance : le nom de l'instance testée; le premier nombre dans le nom indique le nombre de groupes, le deuxième donne le nombre de villes.

    - opt : la valeur de la solution optimale pour l'instance ou la meilleure solution moyenne connue.

    - mean gap : l'écart moyen de notre algorithme à l'optimal ou la meilleure solution moyenne connue (pourcentage).

    - CPU time : le temps d'exécution moyen en secondes.

    Des expérimentations ont été conduites afin de déterminer les avantages de l'opérateur de croisement dropstar comparé à l'opérateur de croisement One-Point. L'opérateur de croisement dropstar se montre nettement plus efficace en ce qui concerne la qualité des solutions. Pour les instances de petites tailles (pour lesquelles la solution optimale est connue, tableau 4.4), l'écart moyen sur l'ensemble des instances pour l'opérateur de croisement One-Point est égal à 0,26% alors que l'écart moyen est réduit à 0,02 % avec l'opérateur de croisement dropstar. Les temps d'exécution pour l'opérateur de croisement Dropstar sont néanmoins beaucoup plus importants, l'opérateur de croisement One-Point étant en moyenne six fois plus rapide.

    Pour les instances de grandes tailles présentées dans le tableau 4.5, l'opérateur de croisement Dropstar produit de biens meilleures solutions que l'opérateur de croisement One-Point, tout en conservant un même ordre de grandeur de différence pour les temps de calcul.

    Le tableau 4.6 présente une comparaison entre l'algorithme génétique mrOX proposé par Silberholz et Golden (2007), l'algorithme génétique de Snyder et Daskin (2006), le GI3 de Renaud et Boctor (1998a) et enfin, l' algorithme de Branch & Cut de de Fischetti et al. (1997).

    Les résultats des différents algorithmes présentés ont été obtenus sur les machines suivantes :

    - mrOX et Snyder et Daskin : Pentium IV 3.0 GHz et 1 Go de RAM.

    - GI3 : Sun Sparc Station LX.

    - B& C. : HP 9000/720.

    Pour chaque algorithme, deux colonnes sont présentées:

    - Gap : l'écart moyen de l'algorithme à l'optimal (pourcentage).

    - CPU : le temps mis par l'algorithme en secondes.

    La colonne B&C ne présente pas d'écart, puisque cet algorithme est un algorithme exact, qui propose des solutions optimales.

    Les résultats présentés dans le tableau 4.6 montrent que notre algorithme est plus performant que les autres algorithmes heuristiques. Pour l'ensemble des solutions pour lesquelles les solutions optimales sont connues, notre algorithme retourne en moyenne un taux d'erreur égal à 0,02 %. De plus, les solutions renvoyées peuvent être très proches des solutions optimales et ce, même pour les instances de grandes tailles.

    On peut remarquer par ailleurs que les instances de petites tailles sont résolues à l'optimum très rapidement par l'ensemble des algorithmes.

    Les comparaisons de temps de calcul avec les autres algorithmes heuristiques sont complexes car différentes machines ont été utilisées pour tester les algorithmes. Les expérimentations montrent tout de même que notre algorithme est plus lent que l'algorithme mrOX ou l'algorithme de Snyder et Daskin. Cependant, le but de notre algorithme était d'obtenir les meilleurs résultats possibles en terme d'écart avec les solutions optimales. On peut cependant noter que notre algorithme peut proposer des solutions de bonne qualité en des temps relativement courts.

    Nous proposons aussi nos propres instances, basées sur les instances classiques du problème du Voyageur de Commerce, tirées de la librairie TSPLIB3. Pour une instance donnée, le nombre de groupes est fixé à m = [n/51. Les groupes sont numérotés de 0 à m - 1. Chaque ville vi est associée au groupe Wj pour lequel j est égal à i mod m. Puisque les instances du problème du Voyageur de Commerce proposées par la librairie TSPLIB sont construites de telle façon que les villes sont placées aléatoirement, le partitionnement que nous proposons ne simule pas de régions géographiques. Dans ce partitionnement de villes, un groupe de villes peut représenter un ensemble de villes dans lequel chaque ville propose un service identique ou un même produit. L'objectif du problème du Voyageur de Commerce Généralisé est alors de trouver un tour qui minimise la somme des distances, tout en respectant la contraintes d'obtenir une fois chaque service ou chaque produit. Le partitionnement que nous proposons est déterministe, il peut donc être facilement reproduit.

    Les tableaux 4.7 et 4.8 donnent des informations sur les différences en terme de qualité des solutions et de rapidité d'exécution entre l'opérateur de croisement dropstar et l'opérateur de croisement One-Point pour les instances que nous proposons. Les entêtes des colonnes sont les suivants :

    - instance : le nom de l'instance testée; le premier nombre dans le nom indique le nombre de groupes, le deuxième donne le nombre de villes.

    - min : la valeur minimale trouvée par l'algorithme.

    - mean : la moyenne des valeurs trouvées par l'algorithme.

    - CPU time : le temps d'exécution moyen en secondes.

    Les conclusions tirées à la lecture des tableaux 4.7 et 4.8 sont similaires à celles énoncées pour les tableaux 4.4 et 4.5. L'opérateur de croisement dropstar se montre nettement plus efficace en ce qui concerne la qualité des solutions. Pour les instances de petites tailles, les meilleures solutions pour l'opérateur de croisement One-Point sont à peine supérieures à celles trouvées avec l'opérateur de croisement dropstar. Les temps d'exécution pour l'opérateur de croisement Dropstar sont néanmoins beaucoup plus impor-

    3. http :// www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/

    tants, l'opérateur de croisement One-Point étant en moyenne onze fois plus rapide. Par contre, pour les instances de grandes tailles, l'écart se creuse, mais les temps de calcul nécessaires pour l'opérateur de croisement Dropstar sont beaucoup plus importants. On remarque néanmoins que les instances que nous proposons semblent plus difficiles à résoudre, même pour l'opérateur de croisement One-Point. On peut donc en déduire que les opérateurs de recherche locale semblent être plus efficaces avec le partitionnement proposé par Fischetti et al. (1997).

    4.5 Conclusion et perspectives

    Nous étudions la résolution du GTSP par un algorithme mémétique dans lequel l'opérateur de croisement se base sur une recherche à grand voisinage dont l'opérateur, appelé Dropstar, a été présenté dans le chapitre 2. Notre principale contribution est l'originalité de notre opérateur de croisement. Nous montrons par les résultats expérimentaux que notre algorithme est robuste et offre un bon compromis entre temps de calcul et qualité des solutions. Il résout 41 instances sur 41 à l'optimal et les solutions renvoyées ne sont jamais à plus de 0,75 % de pourcentage d'erreur par rapport aux solutions optimales. Nous montrons donc que l'hybridation entre un opérateur de recherche locale à grand voisinage et un algorithme génétique (l'ensemble définissant un algorithme mémétique) est une méthode qui semble efficace.

    instance

    opt

    best

    mean gap

    min gap

    max gap

    CPU time

    10att48.gtsp

    5394

    5

    0.00

    0.00

    0.00

    0.76

    10gr48.gtsp

    1834

    5

    0.00

    0.00

    0.00

    0.79

    10hk48.gtsp

    6386

    5

    0.00

    0.00

    0.00

    0.50

    11eil51.gtsp

    174

    5

    0.00

    0.00

    0.00

    0.81

    12brazil58.gtsp

    15332

    5

    0.00

    0.00

    0.00

    0.65

    14st70.gtsp

    316

    5

    0.00

    0.00

    0.00

    0.93

    16eil76.gtsp

    209

    5

    0.00

    0.00

    0.00

    1.00

    16pr76.gtsp

    64925

    5

    0.00

    0.00

    0.00

    1.17

    20kroA100.gtsp

    9711

    5

    0.00

    0.00

    0.00

    1.81

    20kroB100.gtsp

    10328

    5

    0.00

    0.00

    0.00

    2.17

    20kroC100.gtsp

    9554

    5

    0.00

    0.00

    0.00

    1.85

    20kroD100.gtsp

    9450

    5

    0.00

    0.00

    0.00

    2.77

    20kroE100.gtsp

    9523

    5

    0.00

    0.00

    0.00

    1.81

    20rat99.gtsp

    497

    5

    0.00

    0.00

    0.00

    3.89

    20rd100.gtsp

    3650

    5

    0.00

    0.00

    0.00

    2.91

    21eil101.gtsp

    249

    5

    0.00

    0.00

    0.00

    2.09

    21lin105.gtsp

    8213

    5

    0.00

    0.00

    0.00

    3.18

    22pr107.gtsp

    27898

    5

    0.00

    0.00

    0.00

    4.78

    24gr120.gtsp

    2769

    5

    0.00

    0.00

    0.00

    2.34

    25pr124.gtsp

    36605

    5

    0.00

    0.00

    0.00

    2.84

    26bier127.gtsp

    72418

    5

    0.00

    0.00

    0.00

    3.35

    28pr136.gtsp

    42570

    5

    0.00

    0.00

    0.00

    4.23

    29pr144.gtsp

    45886

    5

    0.00

    0.00

    0.00

    5.42

    30kroA150.gtsp

    11018

    5

    0.00

    0.00

    0.00

    5.95

    30kroB150.gtsp

    12196

    5

    0.00

    0.00

    0.00

    5.02

    31pr152.gtsp

    51576

    5

    0.00

    0.00

    0.00

    5.24

    32u159.gtsp

    22664

    5

    0.00

    0.00

    0.00

    5.58

    39rat195.gtsp

    854

    5

    0.00

    0.00

    0.00

    11.01

    40d198.gtsp

    10557

    5

    0.00

    0.00

    0.00

    10.15

    40kroA200.gtsp

    13406

    5

    0.00

    0.00

    0.00

    10.41

    40kroB200.gtsp

    13111

    5

    0.00

    0.00

    0.00

    10.81

    45ts225.gtsp

    68340

    3

    0.04

    0.00

    0.09

    31.45

    46pr226.gtsp

    64007

    5

    0.00

    0.00

    0.00

    8.25

    53gil262.gtsp

    1013

    2

    0.14

    0.00

    0.3

    24.34

    53pr264.gtsp

    29549

    5

    0.00

    0.00

    0.00

    18.27

    60pr299.gtsp

    22615

    5

    0.00

    0.00

    0.00

    21.25

    64lin318.gtsp

    20765

    5

    0.00

    0.00

    0.00

    26.33

    80rd400.gtsp

    6361

    1

    0.42

    0.00

    0.75

    32.21

    84fl417.gtsp

    9651

    5

    0.00

    0.00

    0.00

    31.63

    88pr439.gtsp

    60099

    5

    0.00

    0.00

    0.00

    42.55

    89pcb442.gtsp

    21657

    1

    0.19

    0.00

    0.38

    62.53

    TABLE 4.1 - Résultats expérimentaux : qualité des solutions sur instances fermées

    instance

    best

    mean gap

    min gap

    max gap

    CPU time

    99d493.gtsp

    20117.2

    -0.03

    -0.28

    0.23

    166.11

    107att532.gtsp

    13510.8

    -0.30

    -0.34

    -0.17

    137.54

    107si535.gtsp

    13513.2

    -0.01

    -0.05

    0.06

    90.98

    113pa561.gtsp

    1051.2

    -0.84

    -1.26

    -0.21

    149.43

    115rat575.gtsp

    2414.8

    0.04

    -0.45

    0.09

    157.01

    131p654.gtsp

    27439

    -0.03

    -0.04

    0.00

    144.95

    132d657.gtsp

    22599

    -0.15

    -0.43

    0.28

    259.11

    145u724.gtsp

    21657

    0.45

    0.24

    0.66

    218.66

    157rat783.gtsp

    3300.2

    -0.07

    -0.58

    0.12

    391.79

    201pr1002.gtsp

    114582.2

    0.03

    -0.18

    0.16

    513.48

    207si1032.gtsp

    22388.8

    -0.26

    -0.33

    -0.17

    616.28

    212u1060.gtsp

    108390.4

    -0.92

    -1.58

    0.19

    762.86

    217vm1084.gtsp

    131884.6

    -0.26

    -0.65

    0.09

    583.44

    TABLE 4.2 - Résultats expérimentaux : qualité des solutions sur instances ouvertes

    instance

    mrOX

    Bontoux

    99d493.gtsp

    20117.2

    20061

    107att532.gtsp

    13510.8

    13464

    107si535.gtsp

    13513.2

    13506

    113pa561.gtsp

    1051.2

    1038

    115rat575.gtsp

    2414.8

    2404

    131p654.gtsp

    27439

    27428

    132d657.gtsp

    22599

    22502

    157rat783.gtsp

    3300.2

    3281

    201pr1002.gtsp

    114582.2

    114374

    207si1032.gtsp

    22388.8

    22315

    212u1060.gtsp

    108390.4

    106677

    217vm1084.gtsp

    131884.6

    131028

    TABLE 4.3 - Résultats expérimentaux : meilleures solutions connues

    name

    opt

    Dropstar
    Gap CPU

    One-Point
    Gap CPU

    10att48.gtsp

    5394

    0.00

    0.76

    0.00

    0.15

    10gr48.gtsp

    1834

    0.00

    0.79

    0.00

    0.14

    10hk48.gtsp

    6386

    0.00

    0.50

    0.00

    0.17

    11eil51.gtsp

    174

    0.00

    0.81

    0.00

    0.15

    12brazil58.gtsp

    15332

    0.00

    0.65

    0.00

    0.24

    14st70.gtsp

    316

    0.00

    0.93

    0.00

    0.20

    16eil76.gtsp

    209

    0.00

    1.00

    0.00

    0.17

    16pr76.gtsp

    64925

    0.00

    1.17

    0.00

    0.25

    20kroA100.gtsp

    9711

    0.00

    1.81

    0.00

    0.27

    20kroB100.gtsp

    10328

    0.00

    2.17

    0.00

    0.27

    20kroC100.gtsp

    9554

    0.00

    1.85

    0.00

    0.27

    20kroD100.gtsp

    9450

    0.00

    2.77

    0.00

    0.27

    20kroE100.gtsp

    9523

    0.00

    1.81

    0.00

    0.53

    20rat99.gtsp

    497

    0.00

    3.89

    0.00

    0.44

    20rd100.gtsp

    3650

    0.00

    2.91

    0.36

    0.40

    21eil101.gtsp

    249

    0.00

    2.09

    0.56

    0.61

    21lin105.gtsp

    8213

    0.00

    3.18

    0.00

    0.36

    22pr107.gtsp

    27898

    0.00

    4.78

    0.08

    0.33

    24gr120.gtsp

    2769

    0.00

    2.34

    0.62

    0.07

    25pr124.gtsp

    36605

    0.00

    2.84

    0.00

    0.44

    26bier127.gtsp

    72418

    0.00

    3.35

    0.00

    0.42

    28pr136.gtsp

    42570

    0.00

    4.23

    0.72

    0.86

    29pr144.gtsp

    45886

    0.00

    5.42

    0.00

    0.54

    30kroA150.gtsp

    11018

    0.00

    5.95

    0.01

    1.14

    30kroB150.gtsp

    12196

    0.00

    5.02

    0.33

    1.45

    31pr152.gtsp

    51576

    0.00

    5.24

    0.00

    0.68

    32u159.gtsp

    22664

    0.00

    5.58

    0.43

    0.83

    39rat195.gtsp

    854

    0.00

    11.01

    1.05

    1.63

    40d198.gtsp

    10557

    0.00

    10.15

    0.07

    1.41

    40kroA200.gtsp

    13406

    0.00

    10.41

    0.21

    1.65

    40kroB200.gtsp

    13111

    0.00

    10.81

    0.15

    2.09

    45ts225.gtsp

    68340

    0.04

    31.45

    0.29

    1.91

    46pr226.gtsp

    64007

    0.00

    8.25

    0.00

    1.03

    53gil262.gtsp

    1013

    0.14

    26.34

    1.8

    2.35

    53pr264.gtsp

    29549

    0.00

    18.27

    0.46

    2.43

    60pr299.gtsp

    22615

    0.00

    21.25

    0.20

    5.79

    64lin318.gtsp

    20765

    0.00

    26.33

    0.59

    4.67

    80rd400.gtsp

    6361

    0.42

    32.21

    1.45

    10.12

    84fl417.gtsp

    9651

    0.00

    31.63

    0.00

    3.41

    88pr439.gtsp

    60099

    0.00

    42.65

    0.09

    10.56

    89pcb442.gtsp

    21657

    0.19

    62.53

    1.26

    11.22

    TABLE 4.4 - Résultats expérimentaux : comparaisons des opérateurs de croisement sur instances fermées

    name

    best

    Dropstar
    Gap CPU

    One-Point Gap CPU

    99d493.gtsp

    20117.2

    -0.03

    166.11

    0.03

    12.1

    107att532.gtsp

    13510.8

    -0.30

    121.54

    0.21

    18.73

    107si535.gtsp

    13513.2

    -0.01

    90.98

    0.01

    10.58

    113pa561.gtsp

    1051.2

    -0.84

    149.43

    1.58

    11.66

    115rat575.gtsp

    2414.8

    0.04

    157.01

    5.01

    17.99

    131p654.gtsp

    27439

    -0.03

    144.95

    -0.01

    10.95

    132d657.gtsp

    22599

    -0.15

    259.11

    1.15

    27.2

    145u724.gtsp

    17370

    0.45

    218.66

    2.76

    45.31

    157rat783.gtsp

    3300.2

    -0.07

    391.79

    3.68

    42.76

    201pr1002.gtsp

    114582.2

    0.03

    513.48

    1.49

    76.54

    207si1032.gtsp

    22388.8

    -0.26

    616.28

    0.33

    75

    212u1060.gtsp

    108390.4

    -0.92

    762.86

    -0.28

    88.6

    217vm1084.gtsp

    131884.6

    -0.26

    583.44

    0.3

    89.87

    TABLE 4.5 - Résultats expérimentaux : comparaisons des opérateurs de croisement sur instances ouvertes

    instance

    Bontoux
    Gap CPU

    mrOX
    Gap CPU

    Snyder
    Gap CPU

    GI
    Gap CPU

    BC CPU

    10att48

    0

    0.76

    0

    0.36

    0

    0.18

    *

    *

    2.1

    10gr48

    0

    0.79

    0

    0.32

    0

    0.08

    *

    *

    1.9

    10hk48

    0

    0.5

    0

    0.31

    0

    0.08

    *

    *

    3.8

    11eil51

    0

    0.81

    0

    0.26

    0

    0.08

    0

    0.3

    2.9

    12brazil58

    0

    0.65

    0

    0.78

    0

    0.1

    *

    *

    3

    14st70

    0

    0.93

    0

    0.35

    0

    0.07

    0

    1.7

    7.3

    16eil76

    0

    1

    0

    0.37

    0

    0.11

    0

    2.2

    9.4

    16pr76

    0

    1.17

    0

    0.45

    0

    0.16

    0

    2.5

    12.9

    20kroA100

    0

    1.81

    0

    0.5

    0

    0.24

    0

    5

    51.5

    20kroB100

    0

    2.17

    0

    0.63

    0

    0.25

    0

    6.8

    18.4

    20kroC100

    0

    1.85

    0

    0.6

    0

    0.22

    0

    6.4

    22.2

    20kroD100

    0

    2.77

    0

    0.62

    0

    0.23

    0

    6.5

    14.4

    20kroE100

    0

    1.81

    0

    0.67

    0

    0.43

    0

    8.6

    14.3

    20rat99

    0

    3.89

    0

    0.58

    0

    0.15

    0

    6.7

    13

    20rd100

    0

    2.91

    0

    0.51

    0

    0.29

    0.08

    7.3

    16.6

    21eil101

    0

    2.09

    0

    0.48

    0

    0.18

    0.4

    5.2

    25.6

    21lin105

    0

    3.18

    0

    0.6

    0

    0.33

    0

    14.4

    16.4

    22pr107

    0

    4.78

    0

    0.53

    0

    0.2

    0

    8.7

    7.4

    24gr120

    0

    2.34

    0

    0.66

    0

    0.32

    *

    *

    41.9

    25pr124

    0

    2.84

    0

    0.68

    0

    0.26

    0.43

    12.2

    25.9

    26bier127

    0

    3.35

    0

    0.78

    0

    0.28

    5.55

    36.1

    23.6

    28pr136

    0

    4.23

    0

    0.79

    0.16

    0.36

    1.28

    12.5

    43

    29pr144

    0

    5.42

    0

    1

    0

    0.44

    0

    16.3

    8.2

    30kroA150

    0

    5.95

    0

    0.98

    0

    0.32

    0

    17.8

    100.3

    30kroB150

    0

    5.02

    0

    0.98

    0

    0.71

    0

    14.2

    60.6

    31pr152

    0

    5.24

    0

    0.97

    0

    0.38

    0.47

    17.6

    94.8

    32u159

    0

    5.58

    0

    0.98

    0

    0.55

    2.6

    18.5

    146.4

    39rat195

    0

    11.01

    0

    1.37

    0

    1.33

    0

    37.2

    245.9

    40d198

    0

    10.15

    0

    1.63

    0.07

    1.47

    0.6

    60.4

    763.1

    40kroA200

    0

    10.41

    0

    1.66

    0

    0.95

    0

    29.7

    187.4

    40kroB200

    0

    10.81

    0.05

    1.63

    0.01

    1.29

    0

    35.8

    268.5

    45ts225

    0.04

    31.45

    0.14

    1.71

    0.28

    1.09

    0.61

    89

    37875.9

    46pr226

    0

    8.25

    0

    1.54

    0

    1.09

    0

    25.5

    106.9

    53gil262

    0.14

    24.34

    0.45

    3.64

    0.55

    3.05

    5.03

    115.4

    6624.1

    53pr264

    0

    18.27

    0

    2.36

    0.09

    2.72

    0.36

    64.4

    337

    60pr299

    0

    21.25

    0.05

    4.59

    0.16

    4.08

    2.23

    90.3

    812.8

    64lin318

    0

    26.33

    0

    8.08

    0.54

    5.39

    4.59

    206.8

    1671.9

    80rd400

    0.42

    32.21

    0.58

    14.58

    0.72

    10.27

    1.23

    403.5

    7021.4

    84fl417

    0

    31.63

    0.04

    8.15

    0.06

    6.18

    0.48

    427.1

    16719.4

    88pr439

    0

    42.55

    0

    19.06

    0.83

    15.09

    3.52

    611

    5422.8

    89pcb442

    0.19

    62.53

    0.01

    23.43

    1.23

    11.74

    5.91

    567.7

    58770.5

    Averages

    0.02

    10.12

    0.03

    2.69

    0.11

    1.77

    0.98

    83.09

    3356.47

    Essais

    5

     

    5

     

    5

     

    1

     

    1

    TABLE 4.6 - Résultats expérimentaux : comparatifs entre plusieurs algorithmes

    instance

    Min

    Dropstar

    Mean CPU Time

    Min

    One-Point

    Mean CPU Time

    baf10att48.gtsp

    1774

    1774

    0.68

    1774

    1774

    0.15

    baf10gr48.gtsp

    1182

    1182

    1.33

    1182

    1182

    0.16

    baf10hk48.gtsp

    2112

    2112

    0.77

    2112

    2112

    0.17

    baf11eil51.gtsp

    86

    86

    1.52

    86

    86

    0.15

    baf12brazil58.gtsp

    3378

    3378

    2.16

    3378

    3378

    0.23

    baf14st70.gtsp

    141

    141

    4.32

    141

    141

    0.26

    baf16eil76.gtsp

    107

    107.2

    4.79

    107

    110.2

    0.47

    baf16pr76.gtsp

    18349

    18349

    5.06

    18349

    18481

    0.45

    baf20kroA100.gtsp

    5044

    5076.2

    22

    5117

    5254.4

    0.6

    baf20kroB100.gtsp

    5395

    5395

    12.64

    5413

    5793.8

    0.58

    baf20kroC100.gtsp

    5799

    5804.8

    25.09

    5799

    5849.6

    0.61

    baf20kroD100.gtsp

    5266

    5298.2

    23.31

    5266

    5360

    0.62

    baf20kroE100.gtsp

    5449

    5449

    6.98

    5449

    5449.4

    0.41

    baf20rat99.gtsp

    230

    231.6

    13.91

    230

    235.8

    0.41

    baf20rd100.gtsp

    1747

    1747.4

    7.9

    1747

    1793.8

    0.7

    baf21eil101.gtsp

    105

    105

    4.8

    105

    105

    0.32

    baf21lin105.gtsp

    2758

    2758

    14.05

    2758

    2764.4

    0.37

    baf22pr107.gtsp

    6849

    6879.6

    4.97

    6849

    6889.8

    0.39

    baf24gr120.gtsp

    1412

    1434

    18.03

    1414

    1440.8

    0.9

    baf25pr124.gtsp

    10745

    10745

    8.3

    10745

    10745

    0.38

    baf26bier127.gtsp

    11740

    11973.2

    5.92

    12164

    12258.8

    0.59

    baf28pr136.gtsp

    17824

    17857.8

    22.88

    17824

    17959.2

    0.55

    baf29pr144.gtsp

    14070

    14071

    26.55

    14070

    14269

    0.8

    baf30kroA150.gtsp

    7076

    7316.4

    52.39

    7248

    7319

    2.18

    baf30kroB150.gtsp

    5855

    5992.6

    31.27

    6055

    6147

    1.63

    baf31pr152.gtsp

    13002

    13154.6

    29.09

    13002

    13223.8

    1.09

    baf32u159.gtsp

    7301

    7309.2

    27.89

    7326

    7595.8

    0.78

    baf39rat195.gtsp

    477

    477.4

    144.94

    477

    480

    1.09

    TABLE 4.7 - Résultats expérimentaux : comparatifs des opérateurs de croisement sur de nouvelles instances (1)

    instance

    Min

    Dropstar

    Mean CPU Time

    Min

    One-Point

    Mean CPU Time

    baf40d198.gtsp

    1500

    1555.4

    18.71

    1514

    1555.6

    1.54

    baf40kroA200.gtsp

    7126

    7416.8

    82.2

    7316

    7537.2

    2.82

    baf40kroB200.gtsp

    7375

    7544.6

    152.83

    7420

    7732.4

    2.99

    baf41gr202.gtsp

    3656

    3656

    16.57

    3656

    3656

    1.32

    baf45ts225.gtsp

    26059

    26359.6

    113.32

    26076

    26369.2

    1.79

    baf46pr226.gtsp

    13555

    13555

    86.31

    13555

    13555

    0.95

    baf53gil262.gtsp

    591

    624.8

    223.63

    642

    659.2

    3.06

    baf53pr264.gtsp

    7716

    7748

    40.56

    7772

    7821.6

    2.06

    baf60pr299.gtsp

    10137

    10795.4

    265.09

    10933

    11771.8

    6.11

    baf64lin318.gtsp

    7762

    8113

    259.89

    8054

    8216.6

    5.74

    baf80rd400.gtsp

    3725

    3899.2

    635.63

    3782

    3919.6

    12.34

    baf84fl417.gtsp

    2267

    2335.2

    422.72

    2296

    2572.6

    7.93

    baf87gr431.gtsp

    10787

    10861.4

    105.07

    10825

    10917.8

    7.69

    baf88pr439.gtsp

    14292

    15280.2

    325.86

    15334

    16579

    8.99

    baf89pcb442.gtsp

    10266

    10707.8

    464.16

    11716

    12855

    17.63

    baf99d493.gtsp

    3156

    3232.4

    217.08

    3273

    3321.6

    16.16

    baf107att532.gtsp

    4392

    4529.6

    508.4

    4530

    4705

    16.4

    baf107si535.gtsp

    9059

    9129.8

    444.81

    9258

    9741

    22.35

    baf113pa561.gtsp

    460

    470.4

    817.12

    478

    512.4

    12.22

    baf115rat575.gtsp

    1366

    1376

    382.36

    1419

    1477.6

    11.92

    baf131p654.gtsp

    5956

    6033.6

    833.75

    6130

    6225.2

    18.3

    baf132d657.gtsp

    8821

    9377.6

    421.54

    8870

    11216.8

    21.75

    baf145u724.gtsp

    10165

    10253.6

    877.34

    13794

    15031.6

    45.79

    baf157rat783.gtsp

    1931

    2131.4

    439.91

    2878

    2983.6

    39.77

    baf201pr1002.gtsp

    50225

    52626.8

    754.24

    56844

    60121

    82.89

    baf207si1032.gtsp

    19108

    19228.6

    653.14

    20066

    20306.6

    82.26

    baf212u1060.gtsp

    44684

    46058.6

    731.6

    52151

    65714.8

    97.58

    baf217vm1084.gtsp

    61595

    64708.8

    976.06

    102578

    105324

    114.43

    TABLE 4.8 - Résultats expérimentaux : comparatifs des opérateurs de croisement sur de nouvelles instances (2)

    Troisième partie

    Tronquer les méthodes exactes :

    méthode de Branch & Price

    heuristique

    5 Application au problème de Tournées de Véhicules avec Contraintes de Chargement 125

    5.1 Préambule : Intérêt du problème 126

    5.2 Problèmes de calcul de tournées de véhicules 127

    5.2.1 Du problème du Voyageur de Commerce au problème de Tour-

    nées de Véhicules 127

    5.2.2 Le 2L-VRP parmi les problèmes de Tournées de Véhicules . . . 128

    5.3 État de l'art 128

    5.3.1 Résolution du 2L-VRP 128

    5.3.2 Algorithmes de chargement 131

    5.4 Modèle classique du problème du 2|RO|L-VRP 132

    5.5 Génération de colonnes 134

    5.5.1 Modélisation d'un ESPPRC 138

    5.5.2 Résolution par programmation dynamique 139

    5.6 Notre approche : un schéma de Branch & Price 141

    5.6.1 Méthode de séparation 142

    5.6.2 Initialisation de 1 pour la génération de colonnes 143

    5.6.3 Remontées de colonnes 143

    5.6.4 Problème esclave : ESPPRC 144

    5.6.5 Problème de chargement séquentiel à deux dimensions 147

    5.7 Deux approches différentes pour la réalisabilité du chargement 153

    5.7.1 Vérification de la réalisabilité a posteriori 153

    5.7.2 Construction de routes réalisables dans le sous-problème 155

    5.8 Branch & Price heuristique 159

    5.8.1 Problème esclave heuristique 159

    5.8.2 Gestion des colonnes 160

    5.8.3 Méthode de séparation 160

    5.9 Résultats expérimentaux 161

    5.9.1 Paramètres retenus 161

    5.9.2 Classes d'instances 161

    5.9.3 Analyses des résultats 162

    5.10 Conclusions et perspectives 165

    Chapitre 5

    Application au problème de

    Tournées de Véhicules avec

    Contraintes de Chargement

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    5.1 Préambule : Intérêt du problème

    Le problème tel qu'il nous a été présenté par l'entreprise Daumas, Autheman et Associés, est le suivant. Un service de traiteur avec livraisons de repas à domicile, situé en région parisienne, a fait une étude de marché afin d'optimiser les trajets des livraisons, ainsi que l'agencement du chargement des livraisons.

    La problèmatique se compose de plusieurs problèmes. Le premier est un problème de chargement. Les commandes de repas et de matériel à livrer sont préparées dans des entrepôts. Pour le chargement de ce matériel, les livreurs doivent remplir les surfaces de livraison des véhicules sans plan de chargement. Un temps important est donc perdu dans l'essai de configurations afin de remplir les surfaces de livraison. Le nombre d'objets à charger est, de plus, calculé au plus juste par rapport à la capacité de la surface de livraison. Les repas à livrer sont posés sur des chariots dont les dimensions sont connues. Les objets à livrer sont des produits fragiles. Ainsi, dans la plupart des cas, il n'y a pas d'empilage possible, les plats étant trop fragiles pour pouvoir résister aux poids d'autres objets posés au-dessus. Pour chaque véhicule, la taille de la surface de chargement est connue et cette taille est identique pour tous les véhicules. Les déchargements des livraisons ne peuvent se faire que par les portes arrières. Pour accélérer le temps de livraison, il est préférable de pouvoir facilement décharger les produits à livrer, lors de la livraison pour chaque client.

    Le deuxième problème concerne l'optimisation des livraisons. Tous les départs des livraisons se font à partir d'un dépôt central. Les distances entre les différents points de livraisons sont connues, ainsi que les distances entre les points de livraisons et le dépôt central. L'entreprise dispose d'une flotte fixe de véhicules homogènes.

    Ce problème, dans une version simplifiée, est similaire à un problème connu dans la littérature sous le nom de problème de Tournées de Véhicules avec Contraintes de Chargement en Deux Dimensions (Vehicule Routing Problem with Two-Dimensional Loading Constrains ou 2L-VRP).

    La section 5.2 expose un bref historique des problèmes de Tournées de Véhicules. La section 5.3 présente un état de l'art sur le problème de Tournées de Véhicules avec Contraintes de Chargement. Un modèle classique du 2L-VRP est décrit dans la section 5.4, puis nous présentons le fonctionnement de la méthode de résolution par génération de colonnes dans la section 5.5. Les différentes méthodes de résolution que nous proposons sont introduites dans les sections 5.6, 5.7 et 5.8. Enfin, l'efficacité de nos méthodes est évaluée à travers des résultats expérimentaux proposés dans la section 5.9.

    5.2. Problèmes de calcul de tournées de véhicules

    5.2 Problèmes de calcul de tournées de véhicules

    5.2.1 Du problème du Voyageur de Commerce au problème de Tournées de Véhicules

    Le célèbre Problème du Voyageur de Commerce, ou Traveling Salesman Problem, est un des problèmes d'optimisation combinatoire les plus connus (voir le chapitre 2 pour plus de détails sur ce problème).

    Au cours des années, au vu des progrès effectués en terme de résolution, ainsi qu'en raison de la variété des applications aux systèmes de transports, les chercheurs ont été amenés à proposer de nombreuses extensions ou variantes du problème du Voyageur de Commerce.

    Le problème du Voyageur de Commerce a été étendu au cas où m voyageurs de commerce doivent visiter n villes, défini comme le Problème de Voyageurs de Commerce Multiples ou Multiple Traveling Salesman Problem (mTSP). Ce problème est très proche du problème de Tournées de Véhicules ou Vehicle Routing Problem (VRP) pour lequel une flotte de véhicules est disponible, et chaque véhicule est limité par les distances qu'il peut parcourir.

    Une des extensions les plus étudiées fut ensuite de considérer les transports de marchandises. Ces marchandises sont récoltées chez des clients au cours du trajet et ramenées à un dépôt unique. De plus, les objets ramassés possèdent un poids et une capacité maximale à ne pas dépasser est associée à chaque véhicule. L'objectif est donc d'assigner des clients à des véhicules. Cette extension est connue sous le nom de problème de Tournées de Véhicules avec Contraintes de Capacités (Capacited Vehicle Routing Problem ou CVRP).

    À cette extension se rajoutent un certain nombre de contraintes :

    - Contraintes temporelles : la visite des clients peut avoir lieu uniquement pendant
    des fenêtres de temps (Vehicle Routing Problem with Time Windows ou VRPTW),

    - Contraintes de précédence : les marchandises doivent être transportées d'un lieu vers un autre au lieu d'être ramenées au dépôt (Pick Up & Delivery Problem ou PDP),

    - Contraintes de chargement : plusieurs objets doivent être livrés à des clients, en

    respectant des contraintes de poids et de surface (ou de volume) de chargement

    du véhicule (Vehicle Routing Problem with Loading Constraints ou VRPLC).

    On peut relever d'autres extensions du TSP dans la littérature, comme les problèmes avec fractionnement de la livraison. Dans la version la plus simple connue sous le nom de Split & Delivery Problem, une visite à un sommet peut ne donner lieu qu'à une livraison partielle.

    Pour chacun de ces problèmes, on distingue généralement le cas à un seul véhicule, souvent plus facile et rencontré comme sous-problème du cas à plusieurs véhicules.

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    En plus de ces contraintes, une classification peut être faite en se basant sur la distinction entre la nature des données :

    - problèmes statiques, pour lesquels l'ensemble des données est connu avant la résolution du problème,

    - problèmes stochastiques, pour lesquels les données sont définies par une fonction de probabilité,

    - problèmes dynamiques, pour lesquels de nouvelles données apparaissent au cours du temps.

    5.2.2 Le 2L-VRP parmi les problèmes de Tournées de Véhicules

    Le problème de Tournées de Véhicules avec Contraintes de Chargement à Deux Dimensions ou Vehicle Routing Problem with Two-Dimensional Loading Constraints (2LVRP) est une extension du classique Capacited Vehicle Routing Problem auquel ont été ajoutées des contraintes de chargement. Le problème combine ainsi le chargement des marchandises dans les véhicules et la construction de tournées de véhicules sur un réseau de routes, de telle sorte que les demandes des clients soient satisfaites.

    Le problème 2L-VRP apparaît donc comme une suite d'extensions de problèmes de transports, dont nous présentons les caractéristiques dans le tableau 5.1.

    Problème dépôt multiples véhicules capacité fenêtres de temps autres TSP

    VRP x x

    mTSP x x

    CVRP x x x

    VRPTW x x x x

    2L-CVRP x x x x

    TABLE 5.1 - Récapitulatif des caractéristiques de quelques problèmes classiques

    5.3 État de l'art

    5.3.1 Résolution du 2L-VRP

    Le problème de Tournées de Véhicules avec Contraintes de Capacité ou Capacited Vehicle Routing Problem (CVRP) est un des problèmes d'optimisation combinatoire les plus fréquemment étudiés. L'objectif est de minimiser la distance totale parcourue par une flotte de véhicules d'une capacité limitée, sous la contrainte de satisfaire l'ensemble des demandes de livraisons des clients. L'application de ce modèle à des cas pratiques est limitée par la présence d'une multitude de contraintes additionnelles. En particulier, dans le CVRP, les demandes des clients sont exprimées par des valeurs entières,

    résumant le poids total ou le volume total des objets devant être livrés. Pour des applications pratiques, les demandes consistent en un ensemble d'objets, caractérisés par un poids et une forme.

    Dans le domaine des transports, il est souvent nécessaire de manipuler des objets de formes rectangulaires. Dans certains cas, ces objets ne peuvent être empilés les uns au-dessus des autres (par exemple, pour cause de fragilité). Dans ce cas, on peut se limiter à caractériser les objets à livrer en deux dimensions : largeur et hauteur. On part alors du principe que la hauteur de chacun des objets est inférieure à la hauteur de la surface de chargement des véhicules (de même que la largeur). De plus, chaque client peut avoir une demande représentée par plusieurs objets. On parle alors de problème de Tournées de Véhicules avec Contraintes de Chargement à Deux Dimensions.

    Le problème de Tournées de Véhicules avec Contraintes de Chargement Tri-Dimensionnelles ou three-dimensional loading capacitated vehicle routing problem (3L-CVRP) a été étudié par Gendreau et al. (2006). L'algorithme proposé est une généralisation au cas à trois dimensions de la méthode par recherche tabou publiée postérieurement (Gendreau et al., 2008). Dans le problème tel qu'il est présenté, la demande des clients est représentée par des objets en trois dimensions avec un poids. Ce problème a été moins étudié que la version à deux dimensions.

    Dans le domaine de l'optimisation combinatoire, le chargement d'objets et les problèmes de Tournées de Véhicules ont été intensément étudiés, mais dans la plupart des cas, de manières séparées. Ce n'est que récemment que les chercheurs se sont penchés sur la résolution de problèmes combinant les deux aspects.

    Le 2L-VRP a une décomposition naturelle en trois sous-problèmes:

    1. Un problème d'affectation, qui consiste à déterminer par quel véhicule les clients sont servis,

    2. Un problème de Tournées, qui consiste à déterminer l'ordre dans lequel les clients sont visités,

    3. Un problème de chargement qui consiste à vérifier si les tournées sont réalisables vis-à-vis des contraintes de séquentialité, de capacité et de surface.

    Ces trois problèmes peuvent être traités de manière globale, par coopération d'algorithmes ou par une succession d'algorithmes.

    Le problème 2L-VRP consiste donc à proposer des routes avec des chargements réalisables. Nous allons maintenant détailler le concept de réalisabilité pour une route. Dans le problème 2L-VRP, le chargement est restreint à être orthogonal, c'est-à-dire que chaque objet doit être chargé avec ses côtés parallèles aux cotés du véhicule dans lequel il est chargé. Pour chaque véhicule, tous les objets transportés doivent être entièrement compris dans la surface de livraison et ne peuvent se chevaucher. De plus, la somme totale des poids des objets ne peut dépasser la capacité en poids des véhicules.

    Une contrainte d'ordre pratique assez courante est la suivante : lorsqu'un client est visité, tous les objets devant lui être livrés doivent être déchargés à l'aide d'un chariot élévateur, sans avoir à déplacer les objets qui seront livrés aux prochains clients sur la

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    tournée du véhicule. Cela implique donc que la portion de surface de chargement située entre chaque objet du client qui est en train d'être servi et l'arrière du véhicule doit être vide (ou utilisée par d'autres objets du même client, qui seront déchargés en premier). Cette contrainte est notée dans la littérature comme un chargement séquentiel, ou une contrainte de chargement arrière (rear loading constraint, (Iori et al., 2007)). Le terme de chargement libre ou unrestricted loading (voir (Gendreau et al., 2008) pour plus de détails) est utilisé lorsque des arrangements du chargement d'objets dans le véhicule sont autorisés à chaque livraison.

    Enfin, dans certains cas, les objets peuvent être tournés de 90°. Il existe néanmoins des cas pratiques pour lesquels cette rotation n'est pas autorisée. Ce cas est appelé un chargement orienté (oriented loading). Il peut avoir lieu, par exemple, lorsque les objets sont placés sur des palettes d'ancienne génération qui ne sont accessibles pour les chariots élévateurs que depuis une seule direction, ou encore, lorsque le poids de l'objet est mal réparti sur les palettes. Dans la plupart des cas de la littérature, le problème du 2L-VRP a été étudié dans le cas où les objets ne peuvent être tournés et dont l'orientation est fixe. Le chargement pour lequel on autorise la rotation des objets est appelé non-orienté.

    En se référant aux classifications présentées ci-dessus concernant les configurations de chargement, on peut distinguer quatre cas :

    - 2|RO|L : chargement par l'arrière orienté à deux dimensions (two-dimensional rear oriented loading);

    - 2|UO|L : chargement par l'arrière non-orienté à deux dimensions (two-dimensional unrestricted oriented loading);

    - 2|RN|L : chargement libre orienté à deux dimensions (two-dimensional rear non-oriented loading);

    - 2|UN|L : chargement libre non-orienté à deux dimensions (two-dimensional unrestricted non-oriented loading).

    Iori et al. (2007) ont résolu le problème du 2|RO|L-VRP de manière exacte, à l'aide d'une procédure de séparation et coupe (Branch & Cut). Leur algorithme est basé sur une formulation de type problème de flot, avec une procédure de séparation additionnelle, afin de vérifier la réalisabilité des routes par rapport aux contraintes de chargement. Cette vérification de chargement est réalisée à l'aide de calculs de bornes inférieures, une heuristique de placement des objets, ainsi qu'un algorithme de type Branch & Bound, dans lequel l'arbre de recherche suit les principes proposés par Martello et Vigo (1998) et Martello et al. (2000). L'approche qu'ils ont proposée a permis de résoudre optimalement toutes les instances du 2|RO|L-VRP, avec un nombre de clients allant jusqu'à 25 et un nombre d'objets allant jusqu'à 91 (chaque client pouvant avoir plusieurs objets), en limitant les temps de calcul à une journée par instance.

    Gendreau et al. (2008) ont proposé un algorithme permettant de résoudre aussi bien le cas 2|RO|L que le cas 2|UO|L, basé sur une recherche tabou, qui est une adaptation de l'algorithme Taburoute (voir (Gendreau et al., 1994) pour plus de détails sur cet algorithme). Dans leur algorithme, les routes irréalisables, que ce soit à cause d'un dépassement de capacité ou d'un chargement trop important en terme de surface, sont acceptées mais avec une pénalité ajoutée dans la fonction objectif. Le voisinage utilisé

    par la recherche tabou consiste à enlever un client d'une tournée et à l'insérer dans une tournée d'un autre véhicule, en optimisant les deux routes concernées par le mouvement. La vérification de réalisabilité du chargement a lieu au moyen de bornes inférieures, d'algorithmes heuristiques, d'opérateurs de recherche locale et d'une recherche arborescente tronquée. La méthode proposée a été testée sur des instances comprenant jusqu'à 255 clients et 768 objets.

    Fuellerer et al. (2008) ont proposé une méthode heuristique efficace basée sur un algorithme d'optimisation par Colonie de Fourmis. Leur point de départ est l'algorithme Saving based ACO développé pour le CVRP (voir (Reimann et al., 2004) pour plus de détails sur cet algorithme). Cet algorithme est modifié et étendu afin d'intégrer les heuristiques de chargement. L'algorithme cherche dans l'espace des solutions de tournées, tout en vérifiant la réalisabilité du chargement en deux dimensions de chaque route au moyen de calculs de bornes inférieures, d'algorithmes heuristiques et de recherches arborescentes tronquées. Leur but était de fournir de bonnes solutions pour des instances de grandes tailles.

    La littérature portant sur les problèmes de tournées de véhicule et les problèmes de chargement pris séparement est conséquente. En ce qui concerne le Capacited Vehicle Routing Problem, le lecteur intéressé peut lire l'ouvrage récent consacré à ce sujet par Toth et Vigo (2002), ainsi que les travaux de Cordeau et Laporte (2004) et Cordeau et al. (2005).

    Pour le cas du chargement multi-dimensionnel, nous conseillons au lecteur de lire les récents travaux de Wäscher et al. (2007).

    5.3.2 Algorithmes de chargement

    Le problème de chargement d'objets à deux dimensions est très proche de plusieurs

    problèmes de rangement. On peut détailler deux problèmes en particulier :

    - Le problème de Bin Packing à deux dimensions ou Two Dimensional Bin Packing Problem (2BPP) : l'objectif est de ranger un ensemble d'objets rectangulaires dans un nombre minimal de boites rectangulaires identiques. Les approches exactes pour le 2BPP sont généralement basées sur des techniques de recherches arborescentes et permettent de résoudre des instances contenant jusqu'à une centaine d'objets. Cependant, certaines instances avec seulement 20 objets restent non résolues. Des algorithmes exacts et des calculs de bornes inférieures ont été proposés par Martello et Vigo (1998), Boschetti et Mingozzi (2003a,b) et Pisinger et Sigurd (2007).

    - Le problème de Strip Packing à deux dimensions ou Two Dimensional Strip Packing Problem (2SP) : l'objectif est de ranger un ensemble d'objets rectangulaires dans une bande de largeur définie et de hauteur infinie de façon à minimiser la hauteur totale occupée par le rangement. Un algorithme exact a été proposé par Martello et al. (2003) et peut résoudre des instances contenant jusqu'à 200 objets. Néanmoins, encore une fois, certaines instances de petites tailles ne sont pas résolues optimalement.

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    Du point de vue de la complexité algorithmique, le problème de Tournées de Véhicules avec Contraintes de Capacités et le problème de Bin Packing à deux dimensions sont tous les deux NP-difficiles et en pratique se montrent séparément difficiles à résoudre. De manière évidente, ces remarques sont également valables pour le 2|RO|LVRP. À notre connaissance, la seule méthode exacte disponible à ce jour pour le 2|RO|LVRP est l'approche développée par Iori et al. (2003) et (Iori et al., 2007).

    5.4 Modèle classique du problème du 2|RO|L-VRP

    Dans cette section, nous présentons le modèle du 2|RO|L-VRP. Soit G = (V, E) un graphe complet non-orienté pour lequel V est un ensemble de n + 1 noeuds, correspondant au dépôt (noeud v0) et aux clients ({v1, . . . , vn}). E est l'ensemble des arêtes (vi, vj) entre chaque paire de noeuds et cij est le coût associé pour (vi, vj) E V.

    Un ensemble de K véhicules identiques est disponible depuis le dépôt. Chaque véhicule a une limite de capacité en poids D et une surface de chargement rectangulaire dont les dimensions sont caractérisées par une hauteur H et une largeur W. Chaque véhicule possède une seule ouverture pour le chargement et le déchargement des objets. On note A = W x H la surface totale de chargement.

    À chaque client i (i = v1, . . . , vn), on associe un ensemble de mi objets rectangulaires, dont la somme des poids est égal à di. Chaque objet a une largeur et une hauteur spécifique, notées respectivement wil et hil avec l = {1, . . . , mi}. Chaque objet est désigné

    mi

    par une paire d'indices (i, l). On note ai =

    ? wil x hil l'aire totale des objets du client i.

    l=1

    n

    Enfin, soit M = ? mi le nombre total d'objets.

    i=1

    Nous partons du principe que l'ensemble des objets d'un client peut être chargé dans un véhicule. Ainsi, pour chaque client, on suppose que di = D et qu'il existe un chargement à deux dimensions réalisable pour les mi objets dans la surface de chargement d'un seul véhicule. On suppose aussi que la demande de l'ensemble des clients peut être satisfaite en utilisant au maximum K véhicules. La livraison partagée n'est pas autorisée, c'est-à-dire que chaque client n'est servi qu'en une seule fois.

    Les objets ont une orientation fixe et doivent être chargés parallèlement aux côtés de la surface de chargement. De plus, le déchargement des objets ne peut se faire que par un côté du véhicule (rear unloading). Dans notre notation, le déchargement se fait par le côté situé le plus en haut. Enfin, le chargement est dit séquentiel : lors du déchargement des objets d'un client, aucun objet appartenant à un client situé sur la suite de la tournée ne doit bloquer le déchargement des objets du client actuel. La figure 5.1 illustre la surface de chargement, ainsi que la zone de déchargement.

    Nous donnons maintenant une définition plus formelle de la réalisabilité d'une route dans le problème de tournées de véhicules. On associe à une route réalisable un sous-ensemble S de clients et un ordre noté ó. ó(i) est l'ordre dans lequel chaque client

    ~~~~
    ~~~~
    ~~~~

    ~~ ~~ ~~~~ ~~~~ ~~~~ ~~~~

    (0,0)

    H

    5.4. Modèle classique du problème du 2|RO|L-VRP

    W

    FIGURE 5.1 - Surface de chargement

    i ? S est visité lors de la tournée. La condition 5.1 porte sur la contrainte de capacité des véhicules :

    ? di = D (5.1)

    i?S

    Les conditions qui suivent portent sur le chargement. Dans un souci pratique, on représente la surface de chargement selon des coordonnées cartésiennes. Le point (0,0) représente le coin situé en bas à gauche. L'axe des abscisses et l'axe des ordonnées correspondent respectivement au côté bas et au côté gauche. Le côté par lequel se fait le déchargement correspond au côté allant du point (0, H) au point (W, H). La position d'un objet (i, l) dans la surface de chargement peut être définie par deux variables xil et yil. Ces deux variables représentent les coordonnées du coin de l'objet situé en bas à gauche. Nous avons donc les conditions suivantes :

    0 = xil = W - wil et 0 = yil = H - hil ?i ? S l ? {1, . . . , mi} (5.2)

    Les objets ne doivent pas se chevaucher. On a donc les contraintes suivantes :

    xil + wil = xjli ou xjl0 + wjli = xil ou yil + hil = yjl' ou yjl' + hjl0 = yil (5.3) ?i, j ? S, l ? {1, . . . , mi}, l' ? {1, . . . , mj} et (i, l) =6 (l, l')

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    Enfin, il existe des contraintes concernant le chargement séquentiel :

    yil = yjl' + hjl ou xil + wjl = xjl0 ou xjl0 + wjl0 = xil (5.4)

    ?i, j ? S : ó(i) < ó(j), l ? {1, . . . , mi}, l' ? {1, . . . , mj}

    En effet, tout objet appartenant à un client i doit être soit situé au-dessus, soit à droite, soit à gauche de l'ensemble objets des clients j visités après i.

    Étant donné un sous-ensemble de clients S, on note ä(S) l'ensemble des arcs dont une extrémité appartient à S et l'autre extrémité appartient à V\S. ä(i) est utilisé au lieu de ä({i}). De plus, on note E(S, ó) l'ensemble des arcs empruntés par la route définie par le couple (S, ó). Enfin, étant donné un sous-ensemble de clients S, on note Ë(S) l'ensemble des séquences ó telles que (S, ó) est une route réalisable.

    Posons ze une variable binaire pour chaque e ? E qui prend la valeur 1 si un véhicule emprunte l'arête e. Iori et al. (2007) proposent le modèle suivant du 2|RO|L-VRP:

    min? ceze (5.5)

    e?E

    s.c.q.

    ? ze = 2 ?i ? V\{v0} (5.6)

    e?ä(i)

    ? ze = 2 × K (5.7)

    e?ä(0)

    ? ze = 2 × r(S) ?S ? V\{v0}, S =6 Ø (5.8)

    e?ä(S)

    ? ze = |S| - 1 ?S ? V\{v0} ?(S, ó) tel que ó ?/ Ë(S) (5.9)

    e?E(S,ó)

    ze ? {0,1} ?e ? E\ä(v0) (5.10)

    ze ? {0,1,2} ?e ? ä(v0) (5.11)

    Les contraintes 5.6 et 5.7 imposent la visite des sommets et les départs du dépôt. Les contraintes 5.8 imposent la réalisabilité du chargement (r(S) est le nombre minimum de véhicules nécessaires pour servir les clients dans l'ensemble S). Les contraintes 5.9 imposent une réalisabilité relativement au chargement séquentiel. Enfin, les contraintes 5.10 imposent aux variables associées aux arcs connectant deux clients d'être binaires. Les variables associées aux arcs connectant les clients au dépôt peuvent prendre la valeur 2 (dans le cas d'une route à client unique) 5.11.

    5.5 Génération de colonnes

    Dans cette section, nous présentons les principes de la méthode de résolution par génération de colonnes. Cette méthode est classique pour les problèmes de tournées de

    véhicules; c'est avant tout une méthode exacte mais elle peut aussi bien être utilisée en méthode heuristique. Le lecteur intéressé par la génération de colonnes et par ses applications pour les problèmes de transport peut consulter les articles de Lübbecke et Desrosiers (2005) ou Barnhart et al. (1998), ainsi que le récent livre de Desaulniers et al. (2005).

    La méthode de résolution par génération de colonnes permet de résoudre des programmes linéaires de grandes tailles. Dans cette formulation, les variables du modèle sont appelées des colonnes. On parle de Branch & Price lorsque la génération de colonnes est intégrée dans une recherche arborescente (notamment pour la résolution de programmes linéaires en nombres entiers). Une résolution par génération de colonnes est une méthode itérative. De nouvelles colonnes enrichissent un problème restreint à chaque itération. Le problème initial à résoudre est appelé problème maître ou problème principal, tandis que l'algorithme qui génère de nouvelles colonnes est appelé problème esclave ou sous-problème.

    Le problème du 2|RO|L-VRP se prête a priori bien à une résolution par génération de colonnes. C'est l'approche que nous explorons dans ce chapitre. Pour cela, nous présentons un modèle de type couverture. Posons Ù = {r1, . . . , r|Ù|}, l'ensemble des routes réalisables. On associe à une route rk un coût ck égal à la somme des distances des arcs empruntés par cette route. aik est égal à 1 si la route rk visite le client vi et est égal à 0 dans le cas contraire.

    Les variables sont notées èk. èk est égale à 1 si la route rk est sélectionnée et égale à 0 dans le cas contraire.

    (P )

    min? ckèk (5.12)

    rk

    s.c.q.

    ? aikèk = 1 Vvi E V\{v0} (5.13)

    rk

    ? èk K (5.14)

    rk

    èk E {0,1} (rk E Ù) (5.15)

    Considérons la relaxation linéaire du modèle 5.12, appelée problème maître (MP) : (MP )

    min? ckèk (5.16)

    rk

    s.c.q.

    ? aikèk = 1 Vvi E V\{v0} (5.17)

    rk

    ? èk K (5.18)

    rk

    èk E [0,1] (rk E Ù) (5.19)

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    À l'itération it de la résolution par génération de colonnes, on résout de manière exacte le problème maître restreint à Ùit c Ù, défini ci-dessous. On choisit une méthode de résolution de telle sorte que celle-ci fournisse aussi une solution optimale au dual du programme linéaire.

    (PMR )

    min ? ckèk (5.20)

    rkit

    s.c.q.

    ? aikèk = 1 Vvi E V\{v0} (5.21)

    rkit

    ? èk = K (5.22)

    rkit

    èk = 0 (rk E Ùit) (5.23)

    Notons ëi la variable duale associée à la iième contrainte (5.21). Toute colonne ù E Ù \ Ùit susceptible de diminuer la valeur de la fonction objectif si on l'ajoute au problème maître restreint, a un coût réduit négatif (ce coût est défini par l'équation 5.24). Le problème esclave consiste donc à trouver de telles colonnes. Si aucune colonne de coût réduit négatif n'existe, on déduit alors l'optimalité pour MP de la solution obtenue à l'itération it.

    ck - ? aikëi - ë0 (5.24)

    viEV\{v0}

    Le problème qui consiste à chercher dans Ù une variable de coût négatif est appelé le sous-problème (connu aussi sous le nom de problème esclave, oracle ou problème de pricing).

    Le schéma de la figure 5.2 illustre le déroulement de l'algorithme de génération de colonnes.

    La génération de colonnes augmente donc progressivement la taille du problème à résoudre, ce qui est particulièrement adapté à la résolution de problèmes possédant un grand nombre de colonnes. Le but recherché est par conséquent d'obtenir une solution optimale sans avoir à générer l'ensemble des colonnes.

    Néanmoins, la solution optimale retournée par la génération de colonnes est la solution du problème (MP), qui est la relaxation linéaire du problème initial (P). Une méthode de résolution efficace pour les programmes linéaires en nombres entiers est basée sur la combinaison de la résolution de la relaxation linéaire du problème et de la méthode classique de séparation et évaluation progressive (Branch & Bound). À chaque noeud de l'arbre de recherche, on résout un programme linéaire donnant, dans le cas d'une minimisation, une borne inférieure au problème. Lorsque cette résolution se fait par génération de colonnes, on parle de Branch & Price.

    Résolution
    Problème Maître
    Restreint

    sur Ù1

    Existence de
    variables
    améliorantes

    Oui : ajouter à Ùit

    Fin

    Non

    Ensemble initial
    de colonnes Ù1

    Chercher dans Ùit

    une variable de coût négatif
    (Sousproblème)

    FIGURE 5.2 - Méthode de génération de colonnes Résolution du problème esclave

    Le sous-problème cherche un élément de 1) tel que :

    ck - E aikAi - A0 < 0 (5.25)

    vi?V\{v0}

    Posons bkij égal à 1 si la route rk utilise l'arc (vi, vj) et égal à 0 dans le cas contraire. L'équation 5.25 devient alors :

    ck - E bk ij(cij - Ai) < 0 (5.26)

    vi?V

    On cherche alors l'élément de 1) minimisant cette valeur. Cette recherche est un problème d'optimisation combinatoire qui revient à trouver le chemin de v0 à v0, passant au plus une fois par chaque sommet et tout en étant une route réalisable (dans le cas du 2|RO|L-VRP cela équivaut au respect des contraintes de capacité, des contraintes de surface, des contraintes de chargement, etc.). Il s'agit d'un Problème de Plus Court Chemin Élementaire avec Contraintes Additionnelles pour lequel le coût des arcs (vi, vj) est égal à cij - Ai. Comme nous allons le voir, la plupart des contraintes additionnelles

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    se modélisent comme des contraintes de ressources classiques, mais les contraintes de chargement sont plus complexes à gérer. Ainsi, le problème esclave pour le problème du 2|RO|L-VRP est plus complexe que la résolution d'un problème de Plus Court Chemin Élémentaire avec Contraintes de Ressources (voir la section 2.4.3 pour plus de détails sur le problème de Plus Court Chemin avec Contraintes de Ressources).

    La figure 5.3 représente un problème de plus court chemin avec contraintes de ressources entre le noeud v0 et le noeud v3. Une seule ressource est présente, la consommation cumulée de celle-ci est contrainte en chaque sommet (la valeur limite à ne pas dépasser est indiquée à côté de chaque sommet).

    cout, consommation

    ^ contrainte de ressource

    3,1

    1,1

    v 1

    1

    1,1

    2,1

    0 v 1,1 v3 2

    0

    1

    v2

    FIGURE 5.3 - Un SPPRC a une ressource

    Dans la section 5.5.1, nous définissons formellement le problème. Une présentation d'un algorithme standard basé sur de la programmation dynamique est détaillée dans la section 5.5.2. Ce principe de programmation dynamique est le même que celui présenté dans les chapitres 2, 3 et 4.

    5.5.1 Modélisation d'un ESPPRC

    Nous présentons maintenant la modélisation d'un problème classique de Plus Court Chemin Élémentaire avec Contraintes de Ressources. Soit G = (V, E, W) un graphe complet pour lequel V est un ensemble de n + 1 noeuds, correspondant à la source (noeud v0), le puits (noeud vn) et aux clients vi (i = 1, . . . , n - 1}). Chaque arc (vi, vj) a une consommation cij(w) de ressource w (w = 0, . . . , W). On définit la ressource 0 comme le coût de l'arc. Une contrainte sur chaque ressource est associée à chaque sommet. La consommation cumulée au long du chemin jusqu'au sommet vi est notée ci(w). Cette consommation est limitée par Biw.

    L'objectif du problème (équation (5.27)) est de trouver le plus court chemin de v0 à vn parmi les chemins réalisables sur l'ensemble des ressources. La variable de décision äij est fixée à 1 si l'arc (vi, vj) appartient à une solution et 0 sinon.

    (EP)

    min? cij(0)äij (5.27)

    (vi,vj)?E

    s.c.q.

    E äij - E äji = 0 Vj = 1, ... , n - 1, (5.28)

    (vi,vj)EE (vj,vi)EE

    E äij < 1 Vi = 0, . . . , n, (5.29)

    (vi,vj)EE

    E ä0j = 1, (5.30)

    (v0,vj)EE

    ci(w) < Biw Vi = 0, . . . ,V; Vw = 1, . . . ,W, (5.31)

    äij(ci(w) + cij(w) - cj(w)) < 0 V(vi, vj) E A; Vw = 1, .. . ,W, (5.32)

    äij E {0,1} V(vi, vj) E A. (5.33)

    Les inégalités (5.28) représentent les contraintes de flots assurant la continuité du chemin. Les contraintes (5.29) assurent l'élémentarité du chemin. La contrainte (5.30) impose qu'un unique chemin parte de la source. Les contraintes (5.31) contrôlent la consommation cumulée sur chaque ressource et les contraintes (5.32) la continuité du flot de consommation des ressources. On admet que toutes les ressources se cumulent par incrémentation du poids de l'arc associé à la ressource dans la limite du seuil autorisé.

    5.5.2 Résolution par programmation dynamique

    L'algorithme 6 construit un chemin qui part de la source et construit itérativement des chemins vers la destination. La construction se fait par extension de chemins partiels (appelés aussi labels ou étiquettes). Un chemin partiel est un chemin qui a pour origine la source et pour extrémité terminale un sommet du graphe. L'extension d'un chemin partiel L se fait au travers du calcul de nouveaux chemins partiels, correspondant à L augmenté d'un arc sortant par l'extrémité terminale de L. Dans le cas où l'extension d'un chemin partiel vers un nouveau sommet viole une contrainte, le chemin partiel correspondant est supprimé. On vérifie aussi la faisabilité de chaque extension. Chaque chemin partiel ainsi construit est comparé avec les autres chemins partiels possédant la même extrémité terminale. On dit qu'un chemin partiel L1 domine un chemin partiel L2, ce qui est noté L1 < L2, lorsque les deux chemins partiels ont la même extrémité terminale et que l'on peut être sûr que n'importe quelle extension de L1 sera de coût moindre que l'extension identique pour le chemin partiel L2. Les chemins partiels dominés sont éliminés de la liste des chemins partiels associés au sommet. La consommation d'un chemin partiel L sur une ressource w est notée cL(w).

    On peut voir que la complexité de cet algorithme dépend donc des ressources considérées.

    La figure 5.4 illustre le déroulement de l'algorithme sur un graphe à quatre sommets et deux ressources dont le coût. Un chemin partiel est identifié par son nom et son niveau de consommation des ressources entre accolades, sur le modèle

    Li {coût, autre ressource} .

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    Algorithme 6 : Algorithme de programmation dynamique

    Données : G : un graphe sur W ressources; L : une liste de chemins partiels non traités; Li : la liste des chemins partiels d'extrémité terminale i Résultat : LV

    1 Initialisation: L ? chemin partiel réduit à {0} ;

    2

    3

    4

    tant que L =6 0 faire
    prendre L E L;

    etL := extrémité de L;

    5

    domine := faux;

    6

    pour chaque chemin partiel L' E LetL faire

    7

     

    si cL(w) = cL'(w), ?w = 0, ... ,W alors

    8

     

    LetL := LetL \ {L'};

    9

     

    sinon

    10

     
     

    si cL'(w) = cL(w), ?w = 0, . . . ,W alors

    11

     
     
     

    domine := vrai;

    12

     
     
     

    stop;

    13

     
     

    fin

    14

     

    fin

    15

    fin

    16

    si domine = faux alors

    17

     

    LetL := LetL U {L};

    18

     

    pour chaque arc (etL, i) faire

    19

     
     

    L' := l'extension de L par (vetL, vi);

    20

     
     

    si L' est valide alors

    21

     
     

    L := L U {L'};

    22

     
     

    fin

    23

     

    fin

    24

    fin

    25 fin

    L'objectif est de minimiser le coût des chemins partant de v0 en respectant les contraintes de consommation de ressource en chaque sommet, indiquées entre crochets sur la figure 5.4. À chaque itération, on étend le chemin partiel marqué par une étoile dans L. Le chemin partiel L3 issu de L1 est supprimé car il consomme 2 unités sur la ressource qui est limitée à 1 au sommet v2. Le chemin partiel L5 est quant à lui supprimé car il est dominé par L4.

    Les sections 5.6, 5.7 et 5.8 présentent de manière détaillée les méthodes que nous proposons pour la résolution du problème du 2|RO|L-VRP.

    L : L0

    v [1]

    1

     
     

    L : L0, L1, L2 *

    L1{1,1}

    v [1]

    1

     
     

    1,1

     
     

    2,1

     

    1,1

     
     

    2,1

     

    L0{0,0}

     
     
     
     

    L0{0,0}

     
     
     
     

    [0] v 0

    1,1

     

    v3

    2

    [0] v 0

    1,1

     
     

    v3 [2]

    3,1

     
     

    1,1

     

    3,1

     
     

    1,1

     
     

    v2 [1]

     
     
     

    v2 [1]

     
     

    initialisation

     
     
     

    itération 1

    L2{3,1}

     
     

    L : L1, L2, L3, L4 *

     
     

    L : L2, L4, L5 *

     
     
     
     

    L1{1,1}

     
     
     

    L1{1,1}

     
     
     

    v [1]

    1

     
     
     

    v 1

    1

     
     

    1,1

     
     

    2,1

    1,1

     
     

    2,1

     

    L0{0,0}

     
     

    L4{3,2}

    L0{0,0}

     
     
     

    L4{3,2}

    [0] v 0

    1,1

     

    v3

    [2]

    [0] v 0

    1,1

     
     

    v3 [2]

     
     
     
     
     
     
     
     
     

    L5{4,2}

    3,1

     

    1,1

     

    3,1

     

    1,1

    dominé

     

    v2 [1]

     
     
     

    v2 [1]

     
     

    itération 2

    L2{3,1}
    L3{2,2}

    violation de contrainte

     

    itération 3

    L2{3,1}

     
     

    FIGURE 5.4 - Trace de l'algorithme de programmation dynamique

    5.6 Notre approche : un schéma de Branch & Price

    La méthode de génération de colonnes couplée avec une méthode de séparation (Branch & Price) est, dans la plupart des cas, utilisée pour une résolution exacte des problèmes sur lesquels elle est appliquée. Pour le problème 2|RO|L-VRP, de par la complexité du problème de chargement en deux dimensions, ces contraintes ne pouvant être modélisées sous forme de ressources dans le sous-problème, le sous-problème n'est pas résolu de manière exacte. Dans cette section, nous décrivons un schéma de Branch & Price, tel qu'il faudrait l'appliquer dans le cas où l'on voudrait une résolution exacte (pour cela, le sous-problème doit être lui aussi résolu de manière exacte). Nous présentons dans les sections 5.7 et 5.8 notre approche, qui s'inscrit dans une recherche des moyens pour rendre heuristique une méthode a priori exacte.

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    Cette section présente dans un premier temps les spécificités de notre algorithme pour la méthode de séparation, puis pour la résolution du problème esclave. Les heuristiques de chargement utilisées seront présentées par la suite et nous montrerons les différentes mises en oeuvre possibles de ces algorithmes dans notre schéma de résolution.

    5.6.1 Méthode de séparation

    Une fois que la génération de colonnes est terminée, c'est-à-dire que le problème esclave n'a pas réussi à trouver de chemins de coûts négatifs, nous obtenons une borne inférieure au problème. En effet, le problème considéré ne possède pas de contraintes d'intégralité sur les variables èù. Si toutes les variables sélectionnées sont entières (représentant ainsi des routes complètes), la solution est réalisable. Dans le cas contraire, afin de rendre cette solution réalisable, une méthode de séparation est appliquée. On est donc confronté au choix de politique de séparation. Une approche simple est de brancher sur la valeur des variables èù. On crée alors un noeud fils pour lequel on fixe une variable fractionnaire èù à 1 et un autre noeud pour lequel la variable est fixée à 0. On obtient donc un sous-problème dans lequel la route correspondant à la variable èù est obligatoire et un sous-problème où cette route est interdite.

    Une telle stratégie est dans la plupart des cas mauvaise : en effet, elle a pour conséquence la création d'un arbre fortement déséquilibré. De plus, le fait d'interdire une route n'a que peu de répercussions dans le problème esclave et peut être difficile à intégrer.

    Il est donc commun de brancher sur les variables de la formulation initiale. Si la solution est fractionnaire, alors il existe un arc xij traversé par un flot fractionnaire.

    xij = ? bk ijèk (5.34)

    rk

    On choisit le premier arc fractionnaire. On définit alors deux fils : un fils pour lequel xij = 0 et un fils pour lequel xij = 1. Dans le premier cas, cela implique de sup-primer toutes les routes empruntant cet arc dans le problème maître et de supprimer l'arc (vi, vj) dans le sous-problème. Dans le cas où l'arc est fixé à 1, on supprime dans le problème maître toutes les routes traversant un arc ayant pour extrémité initiale vi (autre que (vi, vj)) et toutes les routes traversant un arc ayant pour extrémité terminale vj (autre que (vi, vj)). Dans le sous-problème, on supprime alors tout arc (vi, vk) avec vk =6 vj et (vk, vj) avec vk =6 vi. Cette règle de branchement assure la convergence.

    Une fois qu'un noeud est créé, on résout par génération de colonnes, la relaxation linéaire du problème correspondant aux branchements choisis.

    Les noeuds sont traités dans l'ordre respectant la valeur croissante de leur borne inférieure (méthode connue sous le nom de Best Bound First). La borne inférieure est égale à la valeur de la relaxation linéaire.

    Lorsqu'on obtient une solution entière, cette solution est réalisable et le coût de cette solution devient par conséquent une borne supérieure au problème. Cette borne est utilisée afin de ne pas explorer les noeuds dont la borne inférieure est supérieure à la plus petite borne supérieure.

    5.6.2 Initialisation de Ù pour la génération de colonnes

    Pour initialiser Ù, on construit une route non réalisable complète qui passe par l'ensemble des sommets. On associe à cette route un coût très élevé. Cette méthode est appelée BigM. Cette route ne sera ainsi plus sélectionnée dans la suite de la résolution, dès qu'une solution utilisant uniquement des routes réalisables existe.

    5.6.3 Remontées de colonnes

    Le but du problème esclave est de trouver des routes ayant des coûts réduits négatifs. S'il en existe plusieurs, ce qui est généralement le cas dans les premières itérations de la résolution, on peut décider du nombre de routes et donc du nombre de colonnes à insérer dans l'ensemble Ù. Pour cela, on peut limiter la taille du nombre de chemins partiels associés au puits v0 (qui est une copie du sommet dépôt v0). Une fois que la limite fixée sur le nombre de chemins partiels est atteinte, la résolution du sous-problème est arrêtée et les colonnes correspondant aux chemins partiels associés au puits (qui sont des routes complètes) sont ajoutées à l'ensemble Ù.

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    5.6.4 Problème esclave : ESPPRC

    Nous présentons dans cette section les spécificités du problème esclave pour la résolution heuristique du problème du 2|RO|L-VRP. Le problème esclave est résolu par la résolution d'un problème de Plus Court Chemin Élémentaire avec Contraintes Additionnelles. Les contraintes additionnelles peuvent être vues pour certaines comme des contraintes de ressources. La résolution de ce problème se base donc sur la résolution de l'ESPPRC, telle que présentée dans la section 5.5.2. Nous définissons dans les sections suivantes les règles d'extensions de chemins partiels, puis les règles de dominance entre deux chemins partiels.

    Extension d'un chemin partiel

    Lors de la résolution du problème de plus court chemin avec contraintes de ressources, les chemins partiels sont étendus vers de nouveaux sommets. Les ressources prises en considération ici sont : la capacité, une borne inférieure sur l'aire occupée (définie comme la somme des aires des objets transportés) et le coût (défini comme la somme des coûts des arcs composant le chemin partiel, les coûts étant égaux à cij - )ti pour tout arc (vi, vj)). Lorsque le chemin partiel L dont l'extrémité terminale est vi, est étendu vers le sommet vj, le poids est augmenté de dj (où dj est le poids total des objets du sommet vj). Le coût est augmenté de cij - )ti. L'aire occupée est augmentée de

    mj

    aj = ? wjl × hjl, définie comme l'aire totale des objets du client j. Une extension vers le

    l=1

    sommet vj est donc considérée uniquement dans le cas où, une fois le sommet vj ajouté, le poids associé au chemin partiel ne dépasse pas la capacité totale du véhicule et la borne inférieure sur l'aire occupée n'est pas strictement supérieure à la surface de chargement. Dans le cas où ces contraintes sont vérifiées, le chemin partiel est étendu vers le sommet vj et le sommet vj est ajouté à la liste des sommets non atteignables pour ce chemin partiel, afin de s'assurer de l'élémentarité du chemin.

    À l'état initial, le chemin partiel associé au dépôt est caractérisé par un poids nul, une liste de sommets non atteignables vide et une aire occupée nulle.

    Dominance de deux chemins partiels

    Afin de dominer le chemin partiel L2, le chemin partiel L1 doit être contenu dans au moins un chemin complet (de dépôt à dépôt) dominant tous ceux contenant L2. Ceci peut se contrôler en s'assurant de la réalisabilité d'extensions dominantes pour L1 à chaque extension réalisable de L2. Nous comparons donc des chemins qui ont la même extrémité terminale. Les règles de dominances sont importantes afin d'éliminer un grand nombre de chemins partiels. Néanmoins, la vérification de la dominance ou de la non-dominance peut rapidement s'avérer coûteuse en temps de calcul. Il faut donc trouver un compromis entre l'efficacité et la complexité. Une première règle est de s'assurer que toute extension de L2 est réalisable à partir de L1. Il suffit alors que L1 soit

    5.6. Notre approche : un schéma de Branch & Price

    de moindre coût pour être dominant. Une telle règle est contraignante mais présente l'avantage d'être robuste car toujours valide. Dans le cas du 2|RO|L-VRP, il faut donc s'assurer que le coût et la capacité associés au chemin partiel L1 soient inférieurs à ceux associés au chemin partiel L2. La gestion de la ressource correspondante à l'aire occupée est un cas particulier, qui est précisée dans les sections 5.7.1 et 5.7.2. Afin d'avoir une dominance sur l'aire occupée valide, la condition suivante doit être ajoutée : quels que soient les objets futurs à insérer dans un chargement, s'il existe un chargement réalisable pour L2, alors il doit exister un chargement possible pour L1. Du fait de la complexité d'une telle condition, nous utilisons une règle de dominance heuristique.

    Les règles de dominance peuvent néanmoins être affinées. On peut dire qu'il y a dominance de L1 sur L2, lorsque l'ensemble des objets pris séparément de L1 peuvent être contenus dans les objets de L2. La figure 5.5 illustre une telle dominance. Le label L1 est représenté par le chargement contenant les objets hachurés. Le label L2 est représenté à droite du label L1. La troisième figure montre que l'ensemble des objets de L1 peut être contenu dans les objets de L2, ce qui permet de conclure que L1 domine L2.

    ~

    ~~

    ~ ~~~

    ~ ~~~

    ~ ~~~ ~

    ~ ~~~

    ~ ~~ ~ ~~~ ~~

    ~

    ~~

    ~ ~~~

    ~ ~~~

    ~ ~~~ ~

    ~ ~~~

    ~ ~~ ~ ~~~ ~~

    FIGURE 5.5 - Règle de dominance affinée

    Recherche à limitation d'écarts (LDS)

    Lorsqu'on étend un chemin partiel vers tous les successeurs, le nombre de chemins partiels peut rapidement exploser, malgré les règles de dominance. Afin de pallier ce problème, nous utilisons une méthode qui permet de limiter le nombre de successeurs vers lesquels l'extension des chemins est réalisée. Cette méthode, appelée recherche à limitation d'écarts (Limited Discrepancy Search ou LDS), a été proposée par Harvey et Ginsberg (1995). Le principe de cette méthode est le suivant. Lorsqu'une heuristique de recherche ne permet pas de trouver une solution, on peut supposer que le nombre de retours en arrière correspondant à de « mauvais » choix est assez faible. Ce procédé a déjà été utilisé pour un problème de Tournées de Véhicules par Rousseau et al. (2004), pour le VRPTW.

    Dans le cas du 2|RO|L-VRP, cela revient à penser qu'une bonne tournée est composée de clients proches les uns des autres. Nous définissons donc un critère permettant de sélectionner des successeurs prometteurs pour chaque client. Le critère retenu est

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    le plus proche voisin. Ainsi, un successeur est considéré comme bon s'il est le plus proche voisin du client depuis lequel il est étendu. Nous définissons aussi le nombre maximal de mauvaises liaisons que peut contenir une tournée (une mauvaise liaison étant définie comme un arc dont le client correspondant à l'extrémité terminale ne fait pas partie des successeurs prometteurs du client correspondant à l'extrémité initiale de l'arc). L'extension d'un chemin partiel se fait alors vers tous les bons successeurs et vers tous les autres si le nombre maximum de mauvais successeurs n'est pas atteint par ce chemin partiel.

    Le fait de limiter le nombre de mauvais successeurs peut soulever certains problèmes. Lorsqu'on cherche une route de coût négatif, si le problème esclave n'est pas capable de trouver une telle route, on conclut que le problème maître relâché est optimal à l'itération courante. Or, sans limitation sur le nombre de mauvais successeurs, une telle route peut exister. Ainsi, si à la fin de l'algorithme, aucune colonne de coût négatif n'est trouvée, l'algorithme est relancé avec un nombre maximum d'écarts possible augmenté. La recherche à limitation d'écarts fournit ainsi une méthode exacte combinant à chaque itération les effets d'une réduction du graphe avec ceux d'une limitation du nombre de chemins partiels étudiés.

    Première itération : limite d'écarts à 2

    Chemins limités : (y) ; (z) ; (x,z) ; (y,x)

    Chemins : (x,y,z) ; (z,x,y)

    Deuxième itération : limite d'écarts à 3

    x

    2 2

    Chemins limités : (y,z) ; (z,y) y

    Chemins : (x,z,y) ; (y,x,z) ; (y,z,x) ; (z,y,x)

    depot

    depot

    0

    1

    1

    x

    y

    z

    x

    y

    z

    0

    2

    2

    2

    1

    1

    1

    y 1

    1

    z

    x 1

    z 2

    x

    y

    y

    z
    x
    z

    2

    0

    2

    2

    2

    2

    3

    2

    3

    1

    z

    x

    y

    y

    z

    y

    z

    y

    z

    x

    y

    y

    x

    z

    z

    x

    z

    FIGURE 5.6 - Recherche de chemins élémentaires par un LDS paramétré à 1 bon voisin

    L'application de LDS à la recherche de chemins élémentaires de longueur 3 est illustrée par la figure 5.6 qui retrace les deux premières itérations de l'algorithme. Le bon

    voisin de x est le sommet y, le bon voisin de y est le sommet x et le bon voisin de z est le sommet x. Au dessus de chaque arc, est indiqué le nombre d'écarts du chemin partiel. Lors de la première itération, cinq extensions (dont l'avant dernier sommet est entouré et dont l'arc terminal est en gras) sont ignorées car elles atteignent la limite d'écarts de 2. Ces extensions sont effectuées lors de l'itération suivante, et ce sont les extensions atteignant la limite d'écart de 3 qui sont alors ignorées. Dans cet exemple, lorsqu'une extension vers un bon voisin est impossible, à cause de la contrainte d'élémentarité par exemple, on considère toujours la destination de cette extension comme un bon voisin. Les arcs marqués d'une croix représentent des extensions violant la contrainte d'élémentarité.

    5.6.5 Problème de chargement séquentiel à deux dimensions

    Le problème de chargement à deux dimensions est un problème que l'on retrouve fréquemment dans la littérature. Les méthodes que nous décrivons par la suite sont des méthodes classiques et qui ont montré leur efficacité.

    Méthodes de calcul de bornes inférieures

    Nous avons appliqué deux calculs de bornes inférieures sur la hauteur totale d'un chargement à deux dimensions. Ces bornes ont été définies dans un contexte dans lequel l'aspect séquentiel n'était pas présent. Elles restent cependant valides, bien que de qualité inférieures. À notre connaissance, il n'existe pas de borne inférieure prenant en compte les contraintes séquentielles.

    La première borne est dérivée d'une borne proposée par Martello et Toth (1990) pour le Two-Dimensional Bin Packing. Cette borne inférieure se base sur un partitionnement des objets. Étant donnée une valeur entière q telle que 1 = q = 1 2W W est la largeur de la surface de chargement des véhicules et étant donné J l'ensemble des objets du chargement, on pose:

    K1 = {j ? J : wj > W - q} (5.35)

    1

    K2 = {j ? J : W - q = wj > 2W} (5.36)

    1

    K3 = {j ? J : 2W = wj = q} (5.37)

    On remarque que deux objets appartenant à K1 ou K2 ne peuvent être chargés côte à côte sur la surface de chargement.

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    On définit pour tout entier q tel que 1 = q = 12W la borne suivante :

    B(q) = ? hj + max (0, [{ ? wjhj - ? (W - wj)hj )}\W1) (5.38)

    j?K1?K2 j?K3 j?K2

    On obtient donc une borne inférieure définie par :

    LS 1= 1=q max= {B(q)} (5.39)

    /2

    La complexité de cette borne est en O(n log n). En effet, Martello et Toth (1990) ont montré qu'on pouvait limiter les valeurs de q aux différentes valeurs prises par wj telles

    1

    que 1 =wj= 2W.

    Une autre borne a été proposée par Martello et al. (2000) pour le problème du Strip Packing. En considérant que les objets sont rangés par ordre décroissant de hauteurs,

    on définit k = max{i :

    i

    ?

    j=1

    wj = W} et soit i(l) la valeur minimale d'index telle que

    wl +

    i(l)

    ?

    j=1

    wj > W quel que soit l > k vérifiant wl +

    k

    ?

    j=1

    wj > W. Une borne inférieure est

    donnée par :

    LS2= max{hl + hi(l) : l > k et wl + ?

    j=1

    wj > W} (5.40)

    La complexité de cette borne est en O(n log n). Il a été montré qu'il n'existe pas de relation de dominance entre LS1 et LS2.

    Remplissage heuristique

    Nous décrivons maintenant les différents algorithmes heuristiques que nous avons utilisés pour déterminer si un chargement est réalisable ou non. Tous ces algorithmes prennent en entrée une liste d'objets à insérer. Les différents tris possibles sur cette liste ont des conséquences sur les résultats des algorithmes. En règle générale, on considère que la liste est triée selon l'ordre de visite des clients (pour satisfaire les contraintes de séquentialité des chargements), puis par ordre décroissant soit sur la largeur des objets, soit sur la hauteur des objets.

    Une première famille d'algorithmes heuristiques sont les algorithmes par niveau ou par étage. Le chargement est obtenu en plaçant les objets de gauche à droite, sur des lignes formant ainsi des niveaux ou des étages. Le premier niveau est le fond de la surface de chargement (la largeur de la surface). Les niveaux suivants sont formés

    par une ligne horizontale coïncidant avec le haut du plus grand objet placé au niveau inférieur. On retrouve dans la littérature trois stratégies classiques pour le chargement à deux dimensions. Ces stratégies ont été adaptées à partir d'algorithmes prévus pour le cas à une dimension. Dans chaque cas, les objets sont triés par ordre de passage des clients à qui ils appartiennent, puis par ordre décroissant de hauteur. Soit j l'objet courant et s le dernier niveau créé :

    Next-Fit Decreasing Height (NFDH) : L'objet j est inséré le plus à gauche possible sur le niveau s, s'il rentre. Si ce n'est pas le cas, on crée un nouveau niveau (s := s + 1), et j y est inséré le plus à gauche possible (voir la figure 5.7).

    First-Fit Decreasing Height (FFDH) : L'objet j est inséré le plus à gauche possible sur le premier niveau dans lequel il rentre. Si aucun niveau ne peut contenir j, un nouveau niveau est créé de manière similaire à l'heuristique NFDH (voir la figure 5.8). Pour satisfaire la contrainte de séquentialité du chargement, on fixe le premier niveau dans lequel on peut insérer un objet, égal au dernier niveau créé pour le client précédent. Cet algorithme présente un intérêt lorsque les clients proposent un nombre important d'objets. Dans le cas contraire, le chargement est très proche de celui renvoyé par l'algorithme NFDH.

    Best-Fit Decreasing Height (BFDH) : L'objet j est inséré le plus à gauche possible sur le niveau, parmi ceux sur lesquels il rentre, pour lequel l'espace horizontal perdu est le plus faible. Si aucun niveau ne convient, un nouveau niveau est créé tel que décrit précédemment (voir la figure 5.9). Pour satisfaire la contrainte de séquentialité du chargement, on fixe le premier niveau dans lequel on peut insérer un objet, égal au dernier niveau créé pour le client précédent. Cet algorithme présente un intérêt lorsque les clients proposent un nombre important d'objets. Dans le cas contraire, le chargement est très proche de celui renvoyé par l'algorithme NFDH.

    Coffman et al. (1980) ont analysé les algorithmes heuristiques NFDH et FFDH pour la résolution du problème de Strip Packing à deux dimensions, pour lequel tous les objets sont insérés dans une boîte unique dont on cherche à minimiser la hauteur. Étant donné un problème de minimisation P et un algorithme heuristique A, on note A(I) et Opt(I) la valeur renvoyée par l'algorithme A et la valeur de la solution optimale, pour une instance I du problème P. Coffman et al. ont prouvé que, si les hauteurs des objets sont normalisées de telle sorte que maxj{hj} = 1, alors :

    NFDH(I) = 2 x Opt(I) + 1 (5.41)

    FFDH(I) = 17

    10 x Opt(I) + 1 (5.42)

    Les deux bornes sont les plus restrictives, c'est-à-dire que les facteurs multiplicatifs sont les plus petits possibles.

    Nous présentons maintenant plusieurs heuristiques de chargement dont la plupart dérivent de l'heuristique Bottom Left proposée initialement par Baker et al. (1980).

    Ces algorithmes suivent tous le même principe. Étant donnée une liste d'objets à insérer, les objets sont sélectionnés successivement pour être insérés dans la surface de

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    1

    5

    3

    2

    6

    4

    FIGURE 5.7 - Next Fit Decreasing Height

    chargement. Tout au long de la résolution des algorithmes, on garde en mémoire une liste ordonnée de positions de chargements disponibles pour de nouveaux objets. À l'initialisation, il n'y a qu'une position, la position en bas à gauche (d'où le nom de Bottom Left). Chaque fois qu'un objet est inséré, la position à laquelle il est inséré est modifiée et on ajoute au plus une nouvelle position. Ainsi, la taille de la liste de positions de chargements disponibles est bornée par le nombre d'objets insérés, augmenté d' une unité. Les figures 5.10 et 5.11 représentent la gestion de la liste de positions avant et après insertion d'un objet.

    La position pour le placement d'un objet est sélectionnée à partir d'une liste de positions disponibles. Ce placement ne doit pas violer les contraintes de chargement (l'objet ne doit pas dépasser des limites de la surface de chargement, il ne doit pas chevaucher un autre objet, et enfin, son placement ne doit pas empêcher le déchargement d'objets situés sur la suite du parcours). La position choisie va dépendre de l'algorithme de chargement. Si tous les objets sont placés dans la surface de chargement, la route est considérée comme réalisable. Dans le cas contraire, la liste des positions disponibles est ramenée à la position initiale, et un autre algorithme de chargement est appelé afin de proposer un chargement de l'ensemble des objets.

    La gestion de la liste des positions est représentée par les figures 5.10 et 5.11. Pour chaque position, on ne conserve que deux informations : la hauteur de la position et la longueur du segment jusqu'à la prochaine position (qui correspond à un changement

    5.6. Notre approche : un schéma de Branch & Price

    1

    3

    2

    4

    5

    6

    FIGURE 5.8 - First Fit Decreasing Height

    de hauteur). Pour la position la plus à droite, la deuxième information est la distance jusqu'au côté droit de la surface de chargement. On peut remarquer sur la même figure qu'on ne garde pas en mémoire les positions correspondant à des « trous ». Étant données les contraintes de séquentialité, le cas d'un objet pouvant se placer sous un autre ne peut arriver que pour deux objets du même client. En partant du principe qu'en cas de chargement non-réalisable, plusieurs ordres de tris sur les objets seront appliqués, les configurations de trous ont peu de chance d'empêcher un chargement.

    La figure 5.10 représente un chargement pour lequel la liste de positions disponibles est :

    (4,4); (3,2); (2,2); (0,2)

    Après insertion d'un objet de largeur 5 et de hauteur 2 telle que présentée dans la figure 5.11, la liste des positions disponibles devient :

    (7,5); (3,1); (2,2); (2,0)

    Les figures 5.12 et 5.13 présentent à partir d'un autre exemple de configuration de chargement les différentes mises à jour possibles sur la liste des positions possibles après l'insertion d'un objet.

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    1

    3

    2

    4

    5

    6

    FIGURE 5.9 - Best Fit Decreasing Height

    Les heuristiques que nous avons utiisées sont les suivantes :

    Bottom-Left: Proposé par Chazelle (1983), la position choisie pour chaque objet à in-
    sérer est la position la plus en bas, puis la plus à gauche (voir la figure 5.14).

    Improved Bottom-Left: Liu et Teng (1999) ont développé un algorithme amélioré du Bottom-Left, en donnant la priorité aux mouvements vers le bas de telle sorte que l'objet soit déplacé vers la gauche uniquement si aucun mouvement vers le bas n'est possible (voir la figure 5.15).

    Max Touching Perimeter: Cet algorithme a été proposé par Lodi et al. (1999). Pour chaque position, on calcule le périmètre des zones de contact entre l'objet à insérer et les objets déjà insérés. On choisit alors la position qui maximise ce périmètre (voir la figure 5.16, appliquée sur le même exemple que celui présenté par la figure 5.11). Une variante a été proposée (Max Touching Perimeter No Wall) qui ne prend pas en considération dans le calcul du périmètre la zone de contact entre l'objet et les parois de la surface de chargement.

    Ces algorithmes heuristiques offrent un panel de solutions de chargement. La complexité de ces algorithmes est de l'ordre de O(n2) (pour chaque objet, on vérifie les n positions possibles).

    (4,4)

    4

    4

    (3,2)

    2

    3

    (2,2)

    2

    2

    (0,2)

    FIGURE 5.10 - Représentation des coordonnées des objets

    5.7 Deux approches différentes pour la réalisabilité du chargement

    Nous avons développé deux approches résolument différentes : dans la première, le problème esclave de recherche de plus court chemin renvoie des routes réalisables du point de vue de la contrainte de capacité, mais, dont la réalisabilité en ce qui concerne le chargement à deux dimensions n'est pas assurée. Cette réalisabilité est vérifiée a posteriori. La seconde approche, quant à elle, construit des routes entièrement réalisables (capacité et chargement séquentiel en deux dimensions) pendant la résolution du sousproblème.

    5.7.1 Vérification de la réalisabilité a posteriori

    Dans la méthode telle que nous l'avons présentée, le problème esclave trouve des routes de coûts réduits négatifs et insère les colonnes correspondant à ces routes dans 1). Par contre, on a montré que, si les routes renvoyées par le problème esclave respectent les contraintes de capacités, elles ne respectent pas nécessairement les contraintes de chargement. Il est donc nécessaire de vérifier ces contraintes avant d'insérer les colonnes dans 1). Dans cette méthode, l'aire occupée par le chargement n'est pas prise en

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    (7,5)

    5

    (3,1)

    4

    (2,2)

    2

    4

    2

    3

    2

    (0,2)

    ~~~~~~~~~~
    ~~~~~~~~~~
    ~~~~~~~~~~

    ~~~~~~~~~~ 3

    ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~

    FIGURE 5.11 - Représentation des coordonnées des objets après insertion

    considération pour les règles de dominances, puisque le chargement n'est déterminé qu'a posteriori. La borne inférieure sur l'aire occupée (définie comme la somme des aires des objets chargés) est néanmoins utilisée pour vérifier la réalisabilité de l'extension d'un chemin partiel vers un client.

    Si le calcul des bornes inférieures montre que le chargement n'est pas réalisable, la route est ajoutée dans l'annuaire de routes non-réalisables. Dans le cas contraire, nous appliquons les algorithmes dans l'ordre dans lequel ils ont été présentés dans la section 5.6.5. Les heuristiques de chargement sont appelées, avec des listes d'objets triées selon des ordres différents (ordre décroissant sur la largeur, ordre décroissant sur la hauteur, ordre croissant sur la largeur et ordre croissant sur la hauteur). Dès qu'un algorithme indique que le chargement est réalisable, la route est ajoutée. Si aucun algorithme ne trouve un chargement réalisable, la route est ajoutée à l'annuaire des routes non-réalisables. Enfin, dans le cas où le sous-problème ne trouve aucune route de coût réduit négatif respectant les contraintes de chargement, la résolution du problème esclave est arrêtée et la relaxation linéaire du problème maître restreint est alors résolue.

    (5,4)

    4

    5

    (3,2)

    2

    3

    (2,2)

    2

    2

    (4,2)

    4

    2

    FIGURE 5.12 - Représentation des coordonnées des objets sur un autre exemple

    Gestion efficace des chargements

    Nous avons ajouté une gestion efficace des routes non réalisables. Le calcul de réalisabilité d'une route est un calcul complexe, nécessitant d'être appelé un nombre important de fois. Ainsi, dès qu'une route est désignée comme non-réalisable par les méthodes de calculs de bornes inférieures, cette route est stockée dans un annuaire de routes. Cet annuaire a une structure d'arbre n-aire classé, pour lequel l'insertion d'une route et la vérification de la présence d'une route sont des méthodes rapides et peu complexes. L'annuaire a la structure décrite par la figure 5.17.

    Dans cet annuaire, nous ne stockons que les routes non réalisables. En effet, les routes réalisables ne sont vérifiées qu'une seule fois, puisqu'elle sont ensuite ajoutées dans 1) et qu'elles ne sont jamais supprimées de cet ensemble. On ne vérifie donc jamais deux fois la même route, si celle-ci est réalisable.

    5.7.2 Construction de routes réalisables dans le sous-problème

    Nous proposons dans cette méthode de construire dans le problème esclave des routes réalisables, respectant donc les contraintes de chargement séquentiel. Pour cela, nous modifions les données sauvegardées pour chaque chemin partiel. Tel que présenté précédemment, sont associés à un chemin partiel un coût, un poids, une aire restante et

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    (5,4)

    (4,6)

    4

    2

    2

    5

    4

    2

    2

    3

    ~~~~~~~~ ~~~~~~~~ ~~~~~~~~ ~~~~~~~~

    FIGURE 5.13 - Mise à jour des coordonnées des objets après insertion sur un autre exemple

    FIGURE 5.14 - Bottom Left
    FIGURE 5.15 - Improved Bottom Left

    une liste de sommets non accessibles. À cela, nous ajoutons une liste des positions possibles telle que présentée dans les figures 5.10 et 5.11. Chaque fois qu'un chemin partiel est étendu vers un sommet, la liste des objets proposés par le sommet est crée. On essaie alors d'ajouter les objets dans le chargement existant, ce chargement étant représenté par la liste des positions possibles. Pour cela, nous faisons appel aux algorithmes heu-

    (7,5)

    4

    5

    4

    (3,1)

    3

    2

    ~

    ~

    ~

    ~~
    ~~

    ~~
    ~~

    ~~
    ~~

    ~~

    ~

    ~~

    ~

    3

    (2,2)

    2

    2

    (0,2)

    FIGURE 5.16 - Max Touching Perimeter

    5

    1

    0

    6

    7 8

    2

    FIGURE 5.17 - Structure d'un annuaire

    ristiques présentés dans la section 5.6.5. Ainsi, toutes les routes de coût négatif trouvées
    157

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    par le problème esclave sont nécessairement des routes réalisables. Cependant, dans le cas où l'heuristique utilisée ne trouve pas de chargement réalisable, la route est éliminée, bien qu'un chargement réalisable puisse exister. La méthode proposée est donc une méthode heuristique.

    Chaque heuristique peut calculer l'aire restante à partir de la liste des positions disponibles. Soit wni et hni la largeur et la hauteur correspondant aux point ni de la liste des points disponibles et H la hauteur de la surface de chargement. Soit T la taille de la liste des points possibles. L'aire restante est égale à :

    T

    airerestante = ? wni × (H - hni) (5.43)

    i=0

    La figure 5.18 présente le calcul de l'aire restante appliquée sur l'exemple présenté par la figure 5.11.

    2

    ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~

    (7,5)

    ~~~~~~~~~~

    ~ (3,1)

    ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~ ~~~~~ ~~~~~ ~ ~~~~~ ~~~~ ~~~~ ~~~~~

    ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~

    (2,2) ~~~~~

    ~~~~

    (0,2)

    ~~~~

    ~~~

    ~~~~~

    ~~~~~~~~~~

    3

    4

    4

     

    2

    3

    2

    FIGURE 5.18 - Calcul de l'aire restante d'un chargement

    Cette aire peut être utilisée pour vérifier en prétraitrement si les objets du sommet j peuvent être ajoutés. Lorsque les routes sont construites dans le sous-problème, l'heuristique de chargement reste tout le temps la même. Ainsi, l'aire occupée peut être utilisée de manière heuristique afin de renforcer les règles de dominance. Néanmoins, il faut garder en mémoire que dans ce cas, les régles de dominance sont trop fortes et risquent donc de supprimer des chemins partiels non véritablement dominés.

    5.8. Branch & Price heuristique

    Cette méthode présente l'intérêt de laisser tout le calcul de réalisabilité des routes dans le problème esclave. On peut donc garantir l'optimalité de la méthode, sous réserve d'avoir défini une règle de chargement exacte.

    5.8 Branch & Price heuristique

    Nous avons présenté dans la section précédente un schéma classique de résolution par Branch & Price. De par la complexité des contraintes de chargement, le sousproblème n'est pas résolu de manière exacte. Notre travail s'est donc porté sur les méthodes d'accélération de résolution. Dans cette section, nous montrons tous les moyens dont nous disposons pour rendre la méthode heuristique, que ce soit au niveau du problème esclave, de la méthode de séparation, ou de la résolution du problème maître restreint. La plupart des changements que nous proposons présentent l'intérêt de dépendre de paramètres. Ainsi, nous pouvons rendre à nouveau la méthode exacte (du moins pour la méthode de séparation et la gestion des colonnes) en ne modifiant que certains paramètres.

    5.8.1 Problème esclave heuristique

    On peut rendre heuristique le problème esclave de plusieurs manières différentes.

    Gestion de la taille de la liste des chemins partiels

    La première technique, et l'une des plus intéressantes afin d'accélérer la résolution du problème esclave, est de limiter le nombre de chemins partiels pour chaque sommet. On l'a vu précédemment, le nombre de chemins partiels pour chaque sommet peut rapidement exploser. Afin de limiter ce nombre, on peut ne garder en mémoire que les nblabels premiers chemins partiels de la liste triée de chemins partiels qui nous semblent les plus prometteurs. Le tri de cette liste est effectué selon le coût du chemin partiel. On peut aussi par ailleurs renforcer les règles de dominances entre deux chemins partiels en créant des règles de dominances « trop fortes >>. Ces règles risquent de supprimer des chemins partiels non dominés, mais permettent d'accélerer la résolution du sousproblème.

    Gestion des successeurs

    Cette technique est proche de la technique de Recherche à Limitation d'Écarts. En limitant le nombre de successeurs pour chaque sommet, on oblige les chemins partiels à être étendus uniquement vers de « bons>> voisins. On peut donc modifier le nombre de sommets considérés comme « bons >>. Cette méthode est plus restrictive que la méthode de Recherche à Limitation d'Écarts puisqu'elle n'autorise aucun écart.

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    5.8.2 Gestion des colonnes

    Lors de la résolution de la relaxation linéaire du problème maître restreint par le solveur, celui-ci va fixer au bout d'un certain nombre d'itérations des colonnes. Les variables seront alors égales à 1. Afin d'accélérer la résolution, il peut être intéressant de fixer de telles variables pour toute la suite de la résolution. Il faut cependant attendre qu'un nombre suffisant de colonnes ait été générées, afin de ne pas fixer à 1 une colonne inintéressante. Lorsque l'on choisit de fixer une colonne 0k à 1, cela revient à ajouter dans le noeud courant les contraintes qui fixent à 1 l'ensemble des arcs empruntés par la colonne considérée. On peut remarquer que le fait d'imposer une route interdit toutes les routes partageant les mêmes sommets (les sommets étant déjà visités). Cela revient donc à travailler sur un problème de taille réduite, pour lequel on retire les sommets appartenant à la route 0k. Cette méthode est différente d'une méthode de séparation car la colonne est fixée à 1 pour toute la suite de la résolution.

    5.8.3 Méthode de séparation

    Dans une méthode classique de Branch & Price, telle que présentée précédemment, une fois que le problème maître restreint est résolu à l'optimum, dans le cas où il existe des variables fractionnaires, on applique une méthode de séparation. On crée donc un certain nombre de noeuds (généralement deux voire trois). Ces noeuds consistent à rajouter une contrainte sur une variable ou un ensemble de variables (contrainte d'intégralité, borne inférieure ou supérieure,...). La génération de colonnes est ensuite appelée à nouveau par le biais du problème esclave, qui intègre les contraintes rajoutées par le noeud courant. Le problème esclave va donc rajouter un certain nombre de colonnes dans l'ensemble 1. Lorsqu'aucun chemin de coût négatif ne sera trouvé, la méthode de séparation sera rappelée.

    Un des moyens de rendre un Branch & Price heuristique est de supprimer l'aspect « Pricing ». Pour cela, il suffit de ne pas générer de nouvelles colonnes une fois qu'un noeud est créé, en dehors du noeud racine. Les contraintes contenues dans le noeud sont rajoutées dans le problème maître restreint. La résolution de la relaxation linéaire du problème correspondant permet d'avoir une borne inférieure sur le coût du noeud. On se retrouve donc dans la configuration d'un Branch & Bound classique pour lequel la borne inférieure est calculée par la relaxation linéaire du problème maître restreint, la borne supérieure étant la meilleure solution entière connue. Cette méthode peut s'avérer efficace si un grand nombre de colonnes est rajouté au noeud racine, étant donné qu'aucune nouvelle colonne ne sera ajoutée lors des itérations suivantes. Cette transformation d'un Branch & Price en un Branch & Bound est possible pour l'arbre complet ou pour n'importe quel sous-arbre.

    5.9 Résultats expérimentaux

    Nous présentons dans cette section les instances que nous avons utilisées pour me-surer les performances et nous comparons nos résultats avec plusieurs algorithmes de la littérature.

    5.9.1 Paramètres retenus

    Dans les méthodes de résolution, nous avons fixé une limite de temps à 3600 secondes. Lorsque cette limite de temps est atteinte, la résolution est arrêtée et la meilleure solution entière est renvoyée. La taille de la liste des chemins partiels (définie dans la section 5.8.1 a été limitée à 500. Le nombre de bons voisins pour chaque sommet dans la résolution du problème esclave (définie dans la section 5.8.1 est fixé à n/2 où n est le nombre de clients. Lorsque 95% du temps alloué a été utilisé par la résolution, l'aspect « Pricing» est supprimé. Aucune nouvelle colonne n'est alors générée.

    L'heuristique retenue pour la génération de routes réalisables (présentée à la section 5.7.2) est l'heuristique Improved Bottom Left avec un tri des objets par ordre décroissant de largeur pour les objets appartenant à un même client. Cette heuristique est celle qui a donné les meilleurs résultats parmi les heuristiques présentées. Cependant, l'analyse des résultats expérimentaux montrent que l'heuristique choisie n'est pas de qualité suffisante pour obtenir de bons résultats.

    Tous les paramètres ont été sélectionnés par des expériences préliminaires.

    5.9.2 Classes d'instances

    Afin de tester les performances de notre algorithme, nous avons utilisé un ensemble de 180 instances du problème 2|RO|L-VRP, introduites par Iori et al. (2007) et Gendreau et al. (2008). Ces instances proviennent de 36 instances du problème de Capacited Vehicle Routing Problem, décrites par Toth et Vigo (2002), en caractérisant la demande des clients comme un ensemble d'objets de forme rectangulaire à deux dimensions auxquels est associé un poids. À partir des instances du CVRP, 5 classes d'instances ont été introduites par Iori et al. (2007).

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    Classe 1 On associe à chaque client un seul objet de taille nulle. Ainsi, les problèmes de la classe 1 sont des problèmes classiques de CVRP, puisqu'il n'y a pas de contraintes de chargement (à part les contraintes de capacité). Ces instances permettent de mesurer l'efficacité des algorithmes en ce qui concerne les aspects de tournées.

    Classe 2 - 5 On associe à chaque client i un ensemble de mi objets. mi est distribué uniformément dans un intervalle donné. Chaque objet est classé parmi une des trois catégories de formes (verticale, homogène, ou horizontale) de manière aléatoire, avec la même probabilité pour chaque catégorie de forme. Les dimensions de chaque objet sont uniformément distribuées dans un intervalle, déterminé par la catégorie de la forme de l'objet. Le nombre d'objets mi et les intervalles des dimensions sont fournis dans le tableau 5.2. La hauteur et la largeur de la surface de chargement sont égales respectivement à 40 et 20. Les coûts des arcs sont égaux aux distances euclidiennes entre les paires de noeuds. Le tableau 5.3 résume les caractéristiques des 36 instances pour les classes 2 à 5. Pour chacune des 36 instances du CVRP, 5 instances sont créées selon les 5 classes présentées ci-desssus. On obtient alors un total de 180 instances. Afin d'assurer la réalisabilité des instances, la taille de la flotte de véhicules vh est déterminée par une heuristique de rangement.

    Classe mi

    Verticale
    Hauteur Largeur

    Homogène
    Hauteur Largeur

    Horizontale Hauteur Largeur

    2

    [1,

    2]

    [0.4H,

    0.9H][0.1W,

    0.2W]

    [0.2H,

    0.5H][0.2W,

    0.5W]

    [0.1H,

    0.2H][0.4W,

    0.9W]

    3

    [1,

    3]

    [0.3H,

    0.8H][0.1W,

    0.2W]

    [0.2H,

    0.4H][0.2W,

    0.4W]

    [0.1H,

    0.2H][0.3W,

    0.8W]

    4

    [1,

    4]

    [0.2H,

    0.7H][0.1W,

    0.2W]

    [0.1H,

    0.4H][0.1W,

    0.4W]

    [0.1H,

    0.2H][0.2W,

    0.7W]

    5

    [1,

    5]

    [0.1H,

    0.6H][0.1W,

    0.2W]

    [0.1H,

    0.3H][0.1W,

    0.3W]

    [0.1H,

    0.2H][0.1W,

    0.6W]

    TABLE 5.2 - Caractéristiques des classes d'instances

    5.9.3 Analyses des résultats

    Les algorithmes présentés ont été codés en C++ et exécutés sur un processeur AMD X2 3800+ cadencé à 2 Ghz avec 1 Go de mémoire vive. Les 17 premières séries d'instances contiennent jusqu'à 40 clients et 127 objets. Chaque série contient 5 instances. Ces instances ont été résolues de manière exacte par une méthode de séparation et génération de coupe (Iori et al., 2007). Par rapport aux instances originales du CVRP, les arcs sont arrondis à la prochaine valeur entière. Dans la plupart des cas, les solutions optimales sont connues.

    Le tableau 5.4 présente les résultats agrégés par série d'instances obtenus sur les 85 instances de taille moyenne. Nos résultats (HBP) sont comparés avec la méthode Branch & Cut proposée par Iori et al. (2007), la recherche Tabou proposée par Gendreau et al. (2008) et l'algorithme d'optimisation par Colonie de Fourmis de Fuellerer et al. (2008).

    Inst

    client

    Class 2
    obj. vh r%

    Class 3
    obj. vh r%

    Class 4 obj. vh

    r%

    Class 5
    obj. vh r%

    1

    15

    24

    3

    78

    31

    3

    82

    37

    4

    70

    45

    4

    61

    2

    15

    25

    5

    52

    31

    5

    59

    40

    5

    53

    48

    5

    39

    3

    20

    29

    5

    68

    46

    5

    77

    44

    5

    62

    49

    5

    54

    4

    20

    32

    6

    58

    43

    6

    58

    50

    6

    63

    62

    6

    47

    5

    21

    31

    4

    72

    37

    4

    75

    41

    4

    76

    57

    5

    53

    6

    21

    33

    6

    54

    40

    6

    63

    57

    6

    72

    56

    6

    46

    7

    22

    32

    5

    71

    41

    5

    66

    51

    5

    67

    55

    6

    49

    8

    22

    29

    5

    63

    42

    5

    71

    48

    5

    68

    52

    6

    38

    9

    25

    40

    8

    57

    61

    8

    61

    63

    8

    60

    91

    8

    53

    10

    29

    43

    6

    74

    49

    6

    66

    72

    7

    73

    86

    7

    63

    11

    29

    43

    6

    77

    62

    7

    74

    74

    7

    83

    91

    7

    63

    12

    30

    50

    9

    62

    56

    9

    52

    82

    9

    66

    101

    9

    58

    13

    32

    44

    7

    69

    56

    7

    68

    78

    7

    77

    102

    8

    59

    14

    32

    47

    7

    65

    57

    7

    65

    65

    7

    61

    87

    8

    49

    15

    32

    48

    6

    76

    59

    6

    84

    84

    8

    72

    114

    8

    72

    16

    35

    56

    11

    55

    74

    11

    57

    93

    11

    64

    114

    11

    49

    17

    40

    60

    14

    46

    73

    14

    42

    96

    14

    51

    127

    14

    40

    18

    44

    66

    9

    72

    87

    10

    75

    112

    10

    77

    122

    10

    58

    19

    50

    82

    11

    77

    103

    11

    83

    134

    12

    79

    157

    12

    61

    20

    71

    104

    14

    84

    151

    15

    83

    178

    16

    81

    226

    16

    69

    21

    75

    114

    14

    84

    164

    17

    82

    168

    17

    70

    202

    17

    61

    22

    75

    112

    15

    82

    154

    16

    81

    198

    17

    82

    236

    17

    66

    23

    75

    112

    14

    86

    155

    16

    83

    179

    16

    83

    225

    16

    72

    24

    75

    124

    17

    81

    152

    17

    77

    195

    17

    82

    215

    17

    66

    25

    100

    157

    21

    83

    212

    21

    85

    254

    22

    83

    311

    22

    65

    26

    100

    147

    19

    84

    198

    20

    82

    247

    20

    87

    310

    20

    75

    27

    100

    152

    19

    84

    211

    22

    82

    245

    22

    78

    320

    22

    71

    28

    120

    183

    23

    83

    242

    25

    83

    299

    25

    84

    384

    25

    72

    29

    134

    197

    24

    85

    262

    26

    83

    342

    28

    85

    422

    28

    74

    30

    150

    225

    29

    83

    298

    30

    87

    366

    30

    86

    433

    30

    70

    31

    199

    307

    38

    84

    402

    40

    85

    513

    42

    86

    602

    42

    70

    32

    199

    299

    38

    84

    404

    39

    85

    497

    39

    86

    589

    39

    73

    33

    199

    301

    37

    85

    407

    41

    84

    499

    41

    87

    577

    41

    71

    34

    240

    370

    46

    85

    490

    49

    86

    604

    50

    86

    720

    50

    72

    35

    252

    367

    45

    85

    507

    50

    85

    634

    50

    90

    762

    50

    74

    36

    255

    387

    47

    86

    511

    51

    86

    606

    51

    83

    786

    51

    74

    TABLE 5.3 - Caractéristiques des classes d'instances

    Les en-têtes sont les suivants :

    - I : numéro de l'instance,

    - n : nombre de clients,

    - Branch & Cut : valeur des solutions (z) et temps d'exécution en secondes (CPU),

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    - Tabu Search : valeur des solutions (z), temps d'exécution en secondes (CPU) et différence avec les solutions proposées par Iori et al. (2007),

    - ACO : valeur moyenne des solutions (z) sur 5 essais, temps d'exécution en se-

    condes (CPU) et différence avec les solutions proposées par Iori et al. (2007),

    - HBP : valeur des solutions (z), temps d'exécution en secondes (CPU) et différence

    avec les solutions proposées par Iori et al. (2007).

    La lecture des résultats nous permet de dire que notre méthode semble intéressante. Elle est en moyenne moins efficace que la méthode ACO proposée par Fuellerer et al. (2008), mais permet d'obtenir de bons résultats en des temps d'exécutions raisonnables. En limitant le temps à une heure (limite de temps qui n'est jamais atteinte pour ces instances), elle permet d'améliorer certaines instances non résolues à l'optimum dans la limite de temps de 24 heures par la méthode de Branch & Bound de Iori et al. (2007) (ce qui explique que dans certains cas le pourcentage de différence avec les solutions optimales soit négatif). Les temps d'exécution sont similaires au temps des autres méthodes. Néanmoins, il semble que les heuristiques de chargement utilisées ne permettent pas de retrouver toutes les routes réalisables relativement aux contraintes de chargement, ce qui explique des résultats inférieurs aux méthodes les plus performantes.

    I

    n

    Branch & Cut

    z CPU

    Tabu search z CPU

    Gap

    ACO z CPU

    gap

    z

    HBP CPU

    gap

    1

    15

    281

    29.9

    281.4

    7.6

    0.14

    286.4

    8.9

    1.92

    285

    12.1

    1.42

    2

    15

    336.6

    14.7

    337.2

    3.9

    0.18

    337.4

    0.7

    0.24

    337.8

    4.5

    0.36

    3

    20

    375.4

    25.4

    377.6

    18

    0.59

    376.6

    7

    0.32

    378.2

    15.6

    0.75

    4

    20

    430

    17

    433.8

    14

    0.88

    431

    4.1

    0.23

    433.6

    15.1

    0.84

    5

    21

    377.2

    597.8

    387

    28.8

    2.6

    378

    19.5

    0.21

    385

    27.3

    2.07

    6

    21

    490.4

    67.4

    494.6

    23.1

    0.86

    491.7

    5.6

    0.27

    495.2

    22.4

    0.98

    7

    22

    687.2

    676.3

    699.8

    39.2

    1.83

    690

    11.9

    0.41

    698.6

    31.5

    1.66

    8

    22

    705.8

    261.6

    717.4

    45

    1.64

    713.1

    16.6

    1.03

    718.6

    38.7

    1.81

    9

    25

    614.2

    469.9

    616.6

    38.2

    0.39

    616

    8.3

    0.29

    616.6

    32.8

    0.39

    10

    29

    676

    51791.2

    684

    150.8

    1.18

    666.9

    48.6

    -1.35

    678

    72.9

    0.3

    11

    29

    725.6

    69120.4

    718.4

    175.7

    -0.99

    691.7

    134

    -4.67

    724.2

    183.5

    -0.19

    12

    30

    609.4

    86400.4

    612

    87.3

    0.43

    602.3

    12.9

    -1.17

    610.4

    74.2

    0.16

    13

    32

    2713.6

    58268

    2588.4

    296.2

    -4.61

    2540.7

    59

    -6.37

    2653.6

    259.4

    -2.21

    14

    32

    1233.4

    74228.8

    1157.8

    343.3

    -6.13

    1146

    131.9

    -7.09

    1181.4

    354.8

    -4.22

    15

    32

    1252.6

    69124.2

    1191.6

    308

    -4.87

    1182.4

    235.2

    -5.6

    1201.6

    291.8

    -4.07

    16

    35

    683.8

    10098.1

    686.4

    161.8

    0.38

    684.9

    11.1

    0.16

    687.4

    212.5

    0.53

    17

    40

    854.6

    86400.3

    844.4

    234.7

    -1.19

    846.2

    9.4

    -0.98

    848.8

    176.3

    -0.68

    Moyenne

    767.46

    29858.32

    754.61

    116.21

    -0.39

    745.96

    42.63

    -1.3

    760.82

    107.38

    -0.01

    TABLE 5.4 - Résultats expérimentaux : qualité des solutions sur instances moyennes

    Le tableau 5.5 présente les résultats agrégés par série d'instances obtenus sur les 180 instances de grande taille. Dans ces instances, les distances ne sont pas arrondies à la prochaine valeur entière. Les en-têtes des colonnes sont les mêmes que les en-têtes

    du tableau précédent, à la différence que la qualité des solutions est calculée relativement aux solutions fournies par la recherche Tabou de Gendreau et al. (2008). À ce jour, aucune méthode de résolution exacte n'a été proposée.

    Les résultats présentés dans le tableau 5.5 sont similaires aux résultats des solutions sur les instances de taille moyenne. Notre méthode est moins performante que la méthode d'Optimisation par Colonie de Fourmis de Fuellerer et al. (2008), que ce soit en terme de qualité des solutions ou de temps d'éxécution. Cependant, les résultats obtenus par notre méthode sont comparables en terme de qualité et de temps avec la méthode de Recherche Tabou de Gendreau et al. (2008).

    Enfin, le tableau 5.6 présente les résultats agrégés sur les 180 instances pour nos deux méthodes heuristiques. La différente de qualité de solution de la méthode de génération de routes réalisables est calculée relativement aux valeurs de solutions de la méthode de Branch & Price heuristique.

    Très clairement, la méthode de génération de routes réalisables (HCG) est de moins bonne qualité que la méthode de Branch & Price heuristique(HBP) avec en moyenne un pourcentage de différence proche de 20%. Cela s'explique par le fait que la méthode de génération de routes réalisables ne fait appel qu'à une seule heuristique de chargement. De plus, une fois que les objets sont insérés, le chargement de ceux-ci n'est jamais remis en question. Ainsi, un nombre important de routes réalisables ne sont pas ajoutées. On peut cependant noter que cette méthode est plus rapide que la méthode de Branch & Price heuristique, ce qui s'explique encore une fois par l'utilisation limitée des heuristiques de chargement.

    5.10 Conclusions et perspectives

    Dans ce chapitre, nous avons proposé une résolution heuristique du problème de Tournées de Véhicules avec Contraintes de Chargement. De par la complexité des contraintes de chargement, ce problème n'est pas résolu par une approche exacte. Nous avons montré un aperçu des possibilités qu'il existait pour tronquer la méthode de Branch & Price, qui est une méthode a priori exacte. Les approches heuristiques que nous proposons permettent d'accélérer la résolution. Il est cependant clair que la qualité des heuristiques de chargement est déterminante dans la qualité des solutions. Malgré une utilisation de plusieurs heuristiques de chargement, les résultats que nous proposons ne permettent pas de dépasser les meilleurs résultats connus. Cependant, que ce soit en terme de qualité de solution ou en temps d'éxécution, nos résultats restent dans une moyenne des méthodes publiées à ce jour.

    Les perspectives de recherche sur ce chapitre sont nombreuses. Les résultats que nous présentons pourraient être améliorés par l'utilisation d'heuristiques de chargement plus efficaces. Enfin, les résultats de la méthode de génération de routes réalisables ne sont pas à la hauteur de nos espérances. Cependant, on peut noter que cette méthode peut être une base de futurs travaux de recherche, dans le but de proposer une

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    I

    n

    Tabu Search

    z CPU

    z

    ACO

    CPU

    Gap

    z

    HBP

    CPU

    Gap

    1

    15

    295.01

    9.2

    291.83

    7.2

    -1.08

    294.21

    11.6

    -0.27

    2

    15

    343.18

    3.5

    343.22

    0.6

    0.01

    343.2

    4.4

    0.01

    3

    20

    380.19

    18.9

    378.18

    3.1

    -0.51

    382.56

    15.2

    0.62

    4

    20

    440.91

    17

    439.07

    3

    -0.41

    440.51

    18.7

    -0.09

    5

    21

    382.3

    27.6

    381.63

    12.8

    -0.17

    382.68

    27.5

    0.1

    6

    21

    501.4

    19.5

    499.77

    4.3

    -0.32

    502.56

    21.8

    0.23

    7

    22

    691.23

    53

    678.22

    11.7

    -1.79

    690.11

    31.3

    -0.16

    8

    22

    691.89

    83.7

    684.37

    16.1

    -1.02

    690.85

    37.2

    -0.15

    9

    25

    620.77

    40

    614.88

    4.9

    -0.93

    618.65

    31.8

    -0.34

    10

    29

    679.68

    179.6

    668.48

    50.1

    -1.64

    680.56

    73.5

    0.13

    11

    29

    719.76

    199.4

    690.22

    57.8

    -3.51

    716.84

    201.2

    -0.41

    12

    30

    627.59

    99.5

    615.9

    7.4

    -1.77

    631.51

    76.8

    0.62

    13

    32

    2550.89

    312.8

    2480.04

    61.8

    -2.6

    2560.22

    282.6

    0.37

    14

    32

    1048.72

    439.5

    1007.92

    163.1

    -3.69

    1043.16

    392.3

    -0.53

    15

    32

    1160.25

    313.4

    1145.96

    138.8

    -1.17

    1161.65

    315.2

    0.12

    16

    35

    703.6

    157.2

    701.09

    8.3

    -0.35

    702.69

    191.7

    -0.13

    17

    40

    865.72

    226.2

    864.92

    7.2

    -0.09

    864.39

    190.8

    -0.15

    18

    44

    1037.65

    1167.8

    1003.84

    292.6

    -3.03

    1026.18

    1745.8

    -1.11

    19

    50

    746.91

    1521.5

    728.89

    122.1

    -2.15

    759.37

    1429.1

    1.67

    20

    71

    513.84

    3370.3

    484.23

    1073.8

    -4.95

    517.48

    3251.2

    0.71

    21

    75

    1025.79

    3561.2

    987.54

    1037.3

    -3.4

    1023.93

    3600.1

    -0.18

    22

    75

    1052.39

    3461.8

    1018.76

    738.9

    -2.89

    1053.1

    3600

    0.07

    23

    75

    1121.18

    3600

    1051.16

    1206.5

    -5.71

    1119.74

    3600.2

    -0.13

    24

    75

    1208.52

    3324.6

    1134.9

    323.4

    -5.62

    1211.34

    3600.2

    0.23

    25

    100

    1350.56

    3600.1

    1309.98

    2454.9

    -2.74

    1346.13

    3600.5

    -0.33

    26

    100

    1341.3

    3600.3

    1306.24

    3558.1

    -2.52

    1337.84

    3600.5

    -0.26

    27

    100

    1439.37

    3600

    1341.25

    1570.3

    -6.3

    1431.29

    3600.4

    -0.56

    28

    120

    2502.48

    3600.1

    2417.89

    8714.5

    -2.16

    2494.36

    3600.5

    -0.32

    29

    134

    2296.03

    3600.2

    2131.54

    8837.5

    -6.02

    2279.63

    3600.5

    -0.71

    30

    150

    1873.27

    3600.2

    1734.46

    8720.3

    -6.9

    1871.62

    3600.2

    -0.09

    31

    199

    2366.54

    3600.5

    2219.34

    8747.4

    -6.27

    2354.68

    3600.9

    -0.5

    32

    199

    2354.6

    3600.6

    2191.97

    8745.8

    -6.21

    2353.78

    3600.4

    -0.03

    33

    199

    2360.74

    3600.6

    2245.46

    8742.7

    -4.45

    2354.8

    3600.5

    -0.25

    34

    240

    1408.64

    3601

    1160.98

    8771.6

    -17.51

    1421.21

    3600.8

    0.89

    35

    252

    1786.93

    3600.2

    1465.85

    8942.2

    -16

    1798.55

    3602

    0.65

    36

    255

    1693.1

    3600.9

    1603.86

    9011.7

    -5.46

    1694.2

    3600.8

    0.06

    moyenne

    1171.75

    1817

    1111.77

    2560.27

    -3.65

    1170.99

    1832.17

    -0.01

    TABLE 5.5 - Résultats expérimentaux : qualité des solutions sur l'ensemble des instances

    résolution exacte du problème de Tournées de Véhicules avec Contraintes de Charge-
    ment. Nous avons montré que dans le cas d'une résolution exacte du sous-problème,
    cette méthode peut proposer une résolution exacte. Cela pourrait permettre de trouver

    I

    n

    HBP

    z CPU

    z

    HCG

    CPU

    Gap

    1

    15

    294.21

    11.6

    296.56

    5.6

    0.8

    2

    15

    343.2

    4.4

    369.2

    3.1

    7.58

    3

    20

    382.56

    15.2

    391.26

    10.2

    2.27

    4

    20

    440.51

    18.7

    469.2

    9.7

    6.51

    5

    21

    382.68

    27.5

    402.18

    12.1

    5.1

    6

    21

    502.56

    21.8

    612.53

    10.5

    21.88

    7

    22

    690.11

    31.3

    746.28

    11.4

    8.14

    8

    22

    690.85

    37.2

    762.59

    12.8

    10.38

    9

    25

    618.65

    31.8

    689.14

    11.6

    11.39

    10

    29

    680.56

    73.5

    749.51

    21.8

    10.13

    11

    29

    716.84

    201.2

    827.64

    58.5

    15.46

    12

    30

    631.51

    76.8

    784.52

    26.7

    24.23

    13

    32

    2560.22

    282.6

    2735.12

    121.5

    6.83

    14

    32

    1043.16

    392.3

    1373.37

    142.3

    31.65

    15

    32

    1161.65

    315.2

    1283.42

    159.9

    10.48

    16

    35

    702.69

    191.7

    845.1

    62.3

    20.27

    17

    40

    864.39

    190.8

    979.38

    55.2

    13.3

    18

    44

    1026.18

    1745.8

    1592.17

    458.9

    55.16

    19

    50

    759.37

    1429.1

    827.49

    324.8

    8.97

    20

    71

    517.48

    3251.2

    742.54

    1526.1

    43.49

    21

    75

    1023.93

    3600.1

    1217.26

    1216.1

    18.88

    22

    75

    1053.1

    3600.7

    1239.37

    1843.5

    17.69

    23

    75

    1119.74

    3600.2

    1296.41

    1495.6

    15.78

    24

    75

    1211.34

    3600.2

    1427.49

    2134.5

    17.84

    25

    100

    1346.13

    3600.5

    1489.81

    2948.9

    10.67

    26

    100

    1337.84

    3600.5

    1502.24

    2198.7

    12.29

    27

    100

    1431.29

    3600.4

    1678.52

    1982.4

    17.27

    28

    120

    2494.36

    3600.5

    2845.12

    1584.3

    14.06

    29

    134

    2279.63

    3600.5

    2589.41

    1264.9

    13.59

    30

    150

    1871.62

    3600.2

    2413.27

    1863.4

    28.94

    31

    199

    2354.68

    3600.9

    2938.71

    1865.2

    24.8

    32

    199

    2353.78

    3600.4

    2947.99

    1736.3

    25.24

    33

    199

    2354.8

    3600.5

    2981.26

    3600.1

    26.6

    34

    240

    1421.21

    3600.8

    1784.51

    3601.5

    25.56

    35

    252

    1798.55

    3602

    2251.47

    3600.5

    25.18

    36

    255

    1694.2

    3600.8

    2145.21

    3600.2

    26.62

    Moyenne

    1170.99

    1832.19

    1395.2

    1099.48

    17.64

    TABLE 5.6 - CRésultats expérimentaux : comparaisons des deux heuristiques

    les solutions optimales de certaines instances.

    Chapitre 5. Application au problème de Tournées de Véhicules avec Contraintes de Chargement

    Conclusion et perspectives

    Dans ce mémoire, nous nous sommes intéressés aux possibilités d'hybridation entre des méthodes exactes et des méthodes heuristiques. Ces méthodes hybrides permettent de tirer avantage de chacune de deux approches : systématicité et optimalité de la résolution exacte, caractère moins déterministe et rapidité de la composante heuristique. Nous nous sommes ainsi focalisés dans les deux dernières parties de ce mémoire sur la mise au point de procédures intégrant ces deux approches au sein d'un processus incomplet unique.

    Nous commençons par faire la synthèse des différents aspects sur lesquels portent nos contributions, puis nous évoquerons les perspectives de recherches.

    Dans la première partie du mémoire, nous nous sommes intéressés aux méthodes de résolution par recherche arborescente. Nous avons introduit une nouvelle approche pour la gestion des décisions de branchement, que nous avons appelée Dynamic Learning Search. Cette approche, basée sur des techniques d'apprentissage, présente l'intérêt de chercher à diriger la recherche vers des sous-espaces prometteurs en définissant dynamiquement des politiques de priorités de branchement sur les variables, ainsi que sur les valeurs que peuvent prendre les variables. Cette politique d'apprentissage est plutôt contraire aux techniques d'apprentissage basées sur la notion de « NoGood », qui cherchent quant à elles, à mémoriser les configurations qui mènent à des échecs et à ne pas reproduire ces échecs. Nous avons de plus montré qu'une phase de sondage, permettant d'avoir un aperçu de l'arbre de recherche, pouvait s'avérer intéressante afin d'initialiser la recherche. Enfin, nous avons montré qu'il était possible d'appliquer cette approche aussi bien sur des problèmes de satisfaction de contraintes que sur des problèmes d'optimisation combinatoire. Pour cela, il suffit d'adapter les critères d'apprentissage. Nous avons pu illustrer l'intérêt de mettre en place des stratégies de branchement sur les variables, ainsi que sur les valeurs, dans le but d'accélérer la résolution d'un problème par recherche arborescente.

    Dans la deuxième partie de ce mémoire, nous nous sommes intéressés à une classe de problèmes de tournées de véhicules, que nous avons nommée Problèmes de Tournées avec Couverture Partielle. Ces problèmes sont caractérisés par le fait que la visite de l'ensemble des sommets du graphe n'est pas obligatoire. Les problèmes appartenant à cette classe sont NP-difficiles. Nous avons introduit un nouvel opérateur de voisinage large, nommé Dropstar, qui détermine par un algorithme de programmation dynamique la sous-séquence optimale d'un chemin dans un graphe. Nous avons montré

    que la recherche d'une sous-séquence optimale pouvait être un problème NP-difficile, sous certaines conditions. Nous avons montré sur des exemples simples que l'opérateur que nous présentons définit un voisinage de très grande taille. En intégrant cet opérateur dans des algorithme basés des métaheuristiques (algorithmes mémétiques et algorithmes d'optimisation par colonies de fourmis), nous avons globalement obtenu de meilleurs résultats que les résultats publiés à ce jour. Nous avons enfin montré les moyens que nous avions à notre disposition pour accélérer la résolution du problème de recherche d'une sous-séquence optimale. Cette partie illustre donc l'efficacité d'utiliser une approche d'hybridation entre des méthodes heuristiques et un opérateur de grand voisinage, basé sur une méthode exacte.

    Dans la troisième partie du mémoire, nous avons proposé une résolution par génération de colonnes tronquée pour un problème complexe de transport. Il s'agit du problème de Tournées de Véhicules avec Contraintes de Chargement en Deux Dimensions, problème qui se retrouve fréquemment en entreprise. La principale difficulté de ce problème réside dans les contraintes de chargement. En effet, ce sous-problème est un problème NP-difficile. Devant la complexité de ce sous-problème qui intervient dans le problème esclave du Branch & Price, ce problème n'est pas résolu par une approche exacte. Nous avons alors montré un aperçu des possibilités qu'il existait pour tronquer la méthode de Branch & Price, qui est une méthode a priori exacte. Les approches heuristiques que nous proposons ont permis d'accélérer la résolution. Les résultats que nous avons présenté sont comparables en terme de qualité et en terme de temps d'exécution aux algorithmes publiés à ce jour. Cependant, les heuristiques de chargement retenues ne permettent pas de dépasser les meilleurs solutions connues.

    Les résultats obtenus montrent l'intérêt des méthodes proposées et laissent entrevoir les nombreuses perspectives ouvertes par ce type d'hybridation. En ce qui concerne la première partie, nous aimerions consacrer du temps à la recherche de critères permettant de définir la qualité d'un sous-arbre d'une recherche arborescente. Ces critères devront de plus être génériques pour permettre une application aussi bien dans le cas de problèmes de satisfaction de contraintes que dans celui de problèmes d'optimisation combinatoire.

    En ce qui concerne la deuxième partie, une première perspective est de définir avec plus de précisions la classe des problèmes de Tournées avec Couverture Partielle. En particulier, les recherches pourront porter sur la détermination de la complexité de la recherche d'une sous-séquence optimale en fonction des ressources. Nous avons vu en effet que la recherche d'une sous-séquence optimale pouvait aussi bien être un problème NP-difficile que polynomial, ceci en fonction des ressources. Enfin, nous aimerions travailler sur d'autres problèmes de cette classe, dans l'objectif de mesurer l'efficacité de l'opérateur de grand voisinage que nous avons proposé sur un plus grand nombre de problèmes. La deuxième perspective de cette partie concerne une extension de l'opérateur que nous avons proposé. Nous pensons qu'il est possible de proposer un opérateur d'insertion de sommets non visités, basé sur les mêmes principes que l'opérateur Dropstar. Ainsi, une méthode couplant les deux opérateurs pourrait explorer un voisinage de très grande taille.

    Enfin, en ce qui concerne la troisième partie, l'application industrielle des travaux n'est pas encore concrétisée. Nous aimerions cependant travailler sur une résolution exacte du sous-problème de chargement, cela dans l'objectif de proposer une résolution exacte du problème de Tournées de Véhicules avec Contraintes de Chargement par génération de colonnes.

    Nous nous sommes efforcés dans ce mémoire d'apporter des éléments de réponses

    aux trois questions suivantes, en particulier pour une classe de problèmes de transport: - Comment favoriser l'obtention rapide de solutions dans les méthodes de recherche

    arborescente?

    - Comment utiliser des méthodes exactes au sein des métaheuristiques? - Comment tronquer des méthodes exactes?

    Une des perspectives les plus intéressantes et les plus complexes serait de proposer des réponses à la question suivante : Comment rendre exact un schéma de résolution heuristique pour obtenir une garantie d'optimalité (ou de performance) des solutions trouvées?

    Liste des illustrations

    2.1 LNS : Exemple de solution initiale 63

    2.2 LNS : Application d'un échange entre les sommets 2 et 6 63

    2.3 LNS : Application de l'opérateur insertion 63

    2.4 LNS : Application de l'opérateur suppression 64

    2.5 LNS : Application d'un 2-opt entre les sommets 2 et 5 64

    2.6 LNS : Exemple de Profitable Tour Problem 66

    2.7 LNS : Exemple de Profitable Tour Problem: Solution initiale 66

    2.8 LNS : Profitable Tour Problem : après un Drop 67

    2.9 LNS : Profitable Tour Problem : après un 2-ConsecutiveDrop 67

    2.10 LNS : Autre exemple de Profitable Tour Problem 68

    2.11 LNS : Autre exemple de Profitable Tour Problem: Solution initiale . . . 68

    2.12 LNS : Profitable Tour Problem : après un 3-ConsecutiveDrop 69

    2.13 LNS : Profitable Tour Problem : Solution ptimale 69

    2.14 LNS : Graphe résultant de la procédure Dropstar 70

    2.15 LNS : Extension depuis le sommet 0 72

    2.16 LNS : Extension depuis le sommet 1 73

    2.17 LNS : Extension depuis le sommet 2 73

    2.18 LNS : Extension depuis le sommet 3 73

    3.1 TPP : graphe complet utilisé par la procédure dropstar 87

    3.2 TPP : graphe réduit utilisé par la procédure dropstar 88

    4.1 GTSP : croisement et graphe résultant utilisé par dropstar : vue agrégée 102

    4.2 GTSP : croisement et graphe résultant utilisé par dropstar : vue détaillée 102

    4.3 GTSP : croisement et graphe résultant réduit utilisé par dropstar : vue

    agrégée 105
    4.4 GTSP : opérateur Move et graphe réduit correspondant : vue agrégée en

    terme de groupes 107

    5.1 2L-VRP: Surface de chargement 133

    5.2 2L-VRP : Méthode de génération de colonnes 137

    5.3 2L-VRP : Un SPRC à une ressource 138

    5.4 2L-VRP : Trace de l'algorithme de programmation dynamique 141

    5.5 2L-VRP: Règle de dominance affinée 145

    Liste des illustrations

    5.6 2L-VRP : Recherche de chemins élémentaires par un LDS paramétré à 1

    bon voisin 146

    5.7 2L-VRP : Next Fit Decreasing Height 150

    5.8 2L-VRP: First Fit Decreasing Height 151

    5.9 2L-VRP: Best Fit Decreasing Height 152

    5.10 2L-VRP: Représentation des coordonnées des objets 153

    5.11 2L-VRP: Représentation des coordonnées des objets après insertion. . 154

    5.12 2L-VRP: Représentation des coordonnées des objets sur un autre exemple 155 5.13 2L-VRP : Mise à jour des coordonnées des objets après insertionsur un

    autre exemple 156

    5.14 2L-VRP: Bottom Left 156

    5.15 2L-VRP: Improved Bottom Left 156

    5.16 2L-VRP : Max Touching Perimeter 157

    5.17 2L-VRP: Structure d'un annuaire 157

    5.18 2L-VRP: Calcul de l'aire restante d'un chargement 158

    Liste des tableaux

    1.1 Résultats expérimentaux pour plusieurs méthodes appliquées au pro-

    blème du Voyageur de Commerce 41
    1.2 Résultats expérimentaux pour plusieurs méthodes appliquées au pro-

    blème d'emploi du temps pour les gardes d'infirmières 43
    1.3 DLS : Résultats expérimentaux, instances de Sac-à-dos Multidimensionnel 45

    1.4 DLS : Résultats expérimentaux, instances de Carré Magique 45

    1.5 DLS : Résultats expérimentaux, instances de Coloration de Graphes . . 47

    3.1 TPP : Résultats expérimentaux, instances fermées 91

    3.2 TPP : Résultats expérimentaux, instances ouvertes 91

    3.3 TPP : Résultats expérimentaux, instances ouvertes améliorées (1) . . . 92

    3.4 TPP : Résultats expérimentaux, instances ouvertes améliorées (2) . . . 93

    4.1 GTSP : Résultats expérimentaux : qualité des solutions sur instances fer-

    mées 113
    4.2 GTSP : Résultats expérimentaux : qualité des solutions sur instances ou-

    vertes 114

    4.3 GTSP : Résultats expérimentaux : meilleures solutions connues 114

    4.4 GTSP : Résultats expérimentaux : comparaisons des opérateurs de croi-

    sement sur instances fermées 115
    4.5 GTSP : Résultats expérimentaux : comparaisons des opérateurs de croi-

    sement sur instances ouvertes 116 4.6 GTSP : Résultats expérimentaux : comparatifs entre plusieurs algorithmes 117 4.7 GTSP : Résultats expérimentaux : comparatif des opérateurs de croise-

    ment sur de nouvelles instances (1) 118
    4.8 GTSP : Résultats expérimentaux : comparatif des opérateurs de croise-

    ment sur de nouvelles instances (2) 119

    5.1 2L-VRP: Récapitulatif de quelques problèmes classiques 128

    5.2 2L-VRP: Caractéristiques des objets des classes d'instances 162

    5.3 2L-VRP: Caractéristiques des objets des classes d'instances 163

    5.4 2L-VRP : Résultats expérimentaux : qualité des solutions sur instances

    moyennes 164
    5.5 2L-VRP : Résultats expérimentaux : qualité des solutions sur l'ensemble

    des instances 166

    Liste des tableaux

    5.6 2L-VRP: Résultats expérimentaux : comparaisons des deux heuristiques 167

    Bibliographie

    (Ahuja et al., 2002) R. K. Ahuja, O. Ergun, J. B. Orlin, et A. Punnen, 2002. A survey of very large-scale neighborhood search techniques. Discrete Applied Mathematics 123, 75-102.

    (Archetti et al., 2007) C. Archetti, D. Feillet, A. Hertz, et G. Speranza, 2007. The Capacitated Team Orienteering and Profitable Tour Problems. Journal of the Operational Research Society. à paraître.

    (Baker et al., 1980) B. S. Baker, E. G. Coffman, et R. L. Rivest, 1980. Orthogonal packings in two dimensions. SIAM Journal on Computing 9(4), 846-855. SIAM.

    (Balafoutis et Stergiou, 2008) T. Balafoutis et K. Stergiou, 2008. Exploiting Constraint Weights for Revision Ordering in Arc Consistency Algorithms. Dans les actes de ECAI-2008 workshop on Modeling and Solving Problems with Constraints.

    (Balas, 1989) E. Balas, 1989. The Prize collecting traveling salesman problem. Networks 19(6), 621-636.

    (Baptiste et al., 2008) P. Baptiste, M. Flamini, et F. Sourd, 2008. Lagrangian bounds for
    just-in-time job-shop scheduling. Computers & Operations Research 35(3), 906-915.

    (Barnhart et al., 1998) C. Barnhart, L. J. Ellis, G. L. Nemhauser, M. W. P. Savelsbergh, et P. H. Vance, 1998. Branch-and-Price : Column Generation for Solving Huge Integer Programs. Operations Research 46(3), 316-329.

    (Bauer et al., 1998) P. Bauer, J. T. Linderoth, et M. W. P. Savelsbergh, 1998. A branch and cut approach to the cardinality constrained circuit problem. Rapport technique, School of Industrial and Systems Engineering, Georgia Institute of Technology, Atlanta, GA.

    (Bell et McMullen, 2004) J. E. Bell et P. R. McMullen, 2004. Ant colony optimization techniques for the vehicle routing problem. Advanced Engineering Informatics 18(1), 41-48.

    (Bellman, 1957) R. Bellman, 1957. Dynamic programming. Princeton, New Jersey : Princeton University Press. XXV.

    (Ben-Arieh et al., 2003) D. Ben-Arieh, G. Gutin, M. Penn, A. Yeo, et A. Zverovitch, 2003. Transformations of generalized ATSP into ATSP. Operations Research Letters 31, 357-365.

    (Benoist et al., 2007) T. Benoist, E. Bourreau, et B. Rottembourg, 2007. The TV-Break Packing Problem. European Journal of Operational Research 176(3), 1371-1386.

    (Boctor et al., 2003) F. F. Boctor, G. Laporte, et J. Renaud, 2003. Heuristics for the Traveling Purchaser Problem. Computers & Operations Research 30, 491-504.

    (Bontoux, 2005) B. Bontoux, 2005. Méthode métaheuristique basée sur l'optimisation à Colonie de Fourmis appliquée au Traveling Purchaser Problem. Mémoire de Master, Laboratoire Informatique d'Avignon.

    (Bontoux et al., 2008a) B. Bontoux, C. Artigues, et D. Feillet, 2008a. A Memetic Algorithm with a Large Neighborhood Crossover Operator for the Generalized Traveling Salesman Problem. University of Technology of Troyes, France. Metaheuristics for Logistics and Vehicle Routing, EU/ME, the European Chapter on Metaheuristics.

    (Bontoux et al., 2008b) B. Bontoux, C. Artigues, et D. Feillet, 2008b. Algorithme mémétique avec un opérateur de croisement à voisinage large pour le problème du voyageur de commerce généralisé. Dans les actes de 9ème congrès de la société Française de Recherche Opérationnelle et d'Aide à la Décision (ROADEF 2008), Clermont-Ferrand, 79-80.

    (Bontoux et al., 2008c) B. Bontoux, C. Artigues, et D. Feillet, February 2008c. Memetic Algorithm with a Large Neighborhood Crossover Operator for the Generalized Traveling Salesman Problem. LAAS report, Université de Toulouse, LAAS-CNRS, France. 21 p.

    (Bontoux et Feillet, 2008) B. Bontoux et D. Feillet, 2008. Ant Colony Optimization for the Traveling Purchaser Problem. Computers & Operations Research 35, 628-637.

    (Bontoux et al., 2007a) B. Bontoux, D. Feillet, et C. Artigues, 2007a. Large Neighborhood Search for Variants of TSP. Dans les actes de The Seventh Metaheuristics International Conference (MIC 2007), Montréal, Canada. CDROM.

    (Bontoux et al., 2007b) B. Bontoux, D. Feillet, et C. Artigues, 2007b. Une méthode dynamique de parcours d'arbre de recherche : Dynamic Cooperative Search. Dans les actes de 8ème congrès de la société Française de Recherche Opérationnelle et d'Aide à la Décision (ROADEF 2007), 99-100.

    (Bontoux et al., 2007c) B. Bontoux, D. Feillet, C. Artigues, et E. Bourreau, 2007c. Dynamic Cooperative Search for constraint satisfaction and combinatorial optimization: application to a rostering problem. Dans P. Baptiste, G. Kendall, A. Munier-Kordon, et F. Sourd (Eds.), 3rd Multidisciplinary International Conference on Scheduling: Theory and Application (MISTA 2007), Paris, France, 557-560.

    (Boschetti et Mingozzi, 2003a) M. A. Boschetti et A. Mingozzi, 2003a. The two-dimensional finite bin packing problem, Part I : New lower bounds for the oriented case. 4OR : A Quarterly Journal of Operations Research 1, 27-42.

    (Boschetti et Mingozzi, 2003b) M. A. Boschetti et A. Mingozzi, 2003b. The two-dimensional finite bin packing problem, Part II : New lower bounds and upper bounds. 4OR : A Quarterly Journal of Operations Research 1, 135-147.

    (Boussemart et al., 2004) F. Boussemart, F. Hemery, C. Lecoutre, et L. Sais, 2004. Boos-
    ting systematic search by weighting constraints. 146-150. Proceedings of ECAI'04.

    (Bérubé et al., 2008) J.-F. Bérubé, M. Gendreau, et J.-Y. Potvin, 2008. An exact e-constraint method for bi-objective combinatorial optimization problems : Application to the Traveling Salesman Problem with Profits. European Journal of Operational Research. à paraître.

    (Chao et al., 1996) I.-M. Chao, B. L. Golden, et E. A. Wasil, 1996. The team orienteering problem. European Journal of Operational Research 88(3), 464-474.

    (Chazelle, 1983) B. Chazelle, 1983. The Bottom-Left Bin-Packing Heuristic : An Efficient Implementation. IEEE Trans. Computers 32(8), 697-707.

    (Cheang et al., 2003) B. Cheang, H. Li, A. Lim, et B. Rodrigues, 2003. Nurse rostering problems - A bibliographic survey. European Journal of Operational Research 151, 447- 460.

    (Chvátal, 1997) V. Chvátal, 1997. Resolution Search. Discrete Applied Mathematics 73(1), 81-99.

    (Coffman et al., 1980) E. G. Coffman, M. R. Garey, D. S. Johnson, et R. E. Tarjan, 1980. Performance Bounds for Level-Oriented Two-Dimensional Packing Algorithms. SIAM Journal on Computing 9(4), 808-826. SIAM.

    (Cordeau et al., 2005) J. F. Cordeau, M. Gendreau, A. Hertz, G. Laporte, et J. S. Sormany, 2005. New heuristics for the vehicle routing problem. Dans les actes de Logistics Systems : Design and Optimization, 279-297. Public Health Service.

    (Cordeau et Laporte, 2004) J. F. Cordeau et G. Laporte, 2004. Metaheuristic Optimization via Memory and Evolution : Tabu Search and Scatter Search, Chapter Tabu Search Heuristics for the Vehicle Routing Problem, 145-163. Kluwer, Boston.

    (Costa et Hertz, 1997) D. Costa et A. Hertz, 1997. Ants Can Colour Graphs. Journal of the Operational Research Society 48, 295-305.

    (Croes, 1958) G. A. Croes, 1958. A method for solving traveling-salesman problems. Operational Research 6, 791-812.

    (Danna, 2003) E. Danna, 2003. Accelerating Column Generation with Local Search: A Case Study on the Vehicle Routing Problem with Time Windows. Skodsborg, Denmark. ROUTE 2003 - International Workshop on Vehicle Routing.

    (Danna et al., 2005) E. Danna, E. Rothberg, et C. L. Pape, 2005. Exploring relaxation induced neighborhoods to improve MIP solutions. Mathematical Programming 102(1), 71-90.

    (Dauzère-Pérès et Sevaux, 2004) S. Dauzère-Pérès et M. Sevaux, 2004. An exact method to minimize the number of tardy jobs in single machine scheduling. Journal of Scheduling 7, 405-420.

    (Dechter, 1990) R. Dechter, 1990. Enhancement schemes for constraint processing : backjumping, learning, and cutset decomposition. Artifical Intelligence 41(3), 273- 312. Essex, UK. Elsevier Science Publishers Ltd.

    (Dell'Amico et al., 1998) M. Dell'Amico, F. Maffioli, et A. Sciomachen, 1998. A Lagrangian heuristic for the prize-collecting travelling salesman problem. Annals of Operations Research 81, 289-305.

    (Dell'Amico et al., 1995) M. Dell'Amico, F. Maffioli, et P. Värbrand, 1995. On prize-collecting tours and the asymmetric travelling salesman problem. International Transportaion Operations Research 2(3), 297-308.

    (Demassey, 2003) S. Demassey, 2003. Méthodes hybrides de programmation par contraintes et programmation linéaire pour le problème d'ordonnancement de projet à contraintes de ressources. Thèse de Doctorat, Université d'Avignon.

    (Desaulniers et al., 2005) Desaulniers, G., J. Desrosiers, et M. M. Solomon (Eds.), 2005. Column Generation. Springer.

    (Descombes, 2000) R. Descombes, 2000. Les Carrés Magiques : Histoire, théorie et technique du carré magique,de l'Antiquité aux recherches actuelles. Editions Vuibert.

    (Dijkstra, 1971) E. W. Dijkstra, 1971. A short introduction to the art of programming. Department of Mathematics EWD-316, Technische Hogeschool, Eindhoven.

    (Dimitrijevic et Saric, 1997) V. Dimitrijevic et Z. Saric, 1997. An Efficient Transformation of the Generalized Traveling Salesman Problem into the Traveling Salesman Problem on Digraphs. Information Sciences 102, 105-110.

    (Donati et al., 2008) A. V. Donati, R. Montemanni, N. Casagrande, A. E. Rizzoli, et L. M. Gambardella, 2008. Time dependent vehicle routing problem with a multi ant colony system. European Journal of Operational Research 185(3), 1174-1191.

    (Dorigo et al., 1991) M. Dorigo, V. Maniezzo, et A. Colorni, 1991. Positive feedback as a search strategy. Technical report 91-016, Dipartimento di Elettronica Politecnico di Milano, Italy.

    (Dorigo et al., 1996) M. Dorigo, V. Maniezzo, et A. Colorni, 1996. The Ant System: Optimization by a colony of cooperating agents. IEEE Transactions on Systems, Man, and Cybernetics-Part B 26(1), 29-41.

    (Dorigo et Stutzle, 2004) M. Dorigo et T. Stutzle, 2004. Ant Colony Optimization. Cambridge, MA : MIT Press Bradford Books.

    (Doyle, 1979) J. Doyle, 1979. A Truth Maintenance System. Artificial Intelligence 12, 231-272.

    (Dror, 1994) M. Dror, 1994. Note on the Complexity of the Shortest Path Models for Column Generation in VRPTW. Operations Research 42(5), 977-978.

    (Dror et Haouari, 2000) M. Dror et M. Haouari, 2000. Generalized Steiner Problems and Other Variants. Journal of Combinatorial Optimization 4(4), 415-436.

    (Feillet et al., 2005) D. Feillet, P. Dejax, et M. Gendreau, 2005. Traveling Salesman Problems with Profits. Transportation Science 39(2), 188-205.

    (Feillet et al., 2004) D. Feillet, P. Dejax, M. Gendreau, et C. Gueguen, 2004. An exact algorithm for the Elementary Shortest Path Problem with Resource Constraints : application to some vehicle routing problems. Networks 44, 216-229.

    (Fischetti et Lodi, 2003) M. Fischetti et A. Lodi, 2003. Local branching. Mathematical Programming 98(1), 23-47.

    (Fischetti et al., 1995) M. Fischetti, J. J. Salazar-González, et P. Toth, 1995. The Symmetric Generalized Traveling Salesman Polytope. Networks 26(2), 113-123.

    (Fischetti et al., 1997) M. Fischetti, J. J. Salazar-González, et P. Toth, 1997. A Branch-andCut algorithm for the Symmetric Generalized Traveling Salesman Problem. Operations Research 45(3), 378-394.

    (Frenc et al., 2001) A. P. Frenc, A. C. Robinson, et J. M. Wilson, 2001. Using a Hybrid Genetic-Algorithm/Branch and Bound Approach to Solve Feasibility and Optimization Integer Programming Problems. Journal of Heuristics 7, 551-564.

    (Frost et Dechter, 1994) D. Frost et R. Dechter, 1994. In Search of the Best Constraint Satisfaction Search. Dans les actes de Proceedings of the National Conference on Artificial Intelligence, Seattle, 301-306.

    (Fuellerer et al., 2008) G. Fuellerer, K. F. Doerner, R. F. Hartl, et M. Iori, 2008. Ant colony optimization for the two-dimensional loading vehicle routing problem. Computers & Operations Research. à paraître.

    (Garey et Johnson, 1979) M. R. Garey et D. S. Johnson, 1979. Computers and Intractibility; A Guide to the Theory of NP-Completeness. Freeman and Company.

    (Garg et Konjevod, 2000) N. Garg et G. Konjevod, 2000. A Polylogarithmic Approximation Algorithm for the Group Steiner Tree Problem. Journal of Algorithms 37, 66-84.

    (Gaschnig, 1979) J. G. Gaschnig, 1979. Performance measurement and analysis of certain search algorithms. Thèse de Doctorat, Pittsburgh, USA.

    (Gendreau et al., 1994) M. Gendreau, A. Hertz, et G. Laporte, 1994. A tabu search
    heuristic for the vehicle routing problem. Management Science 40(10), 1276-1290.

    (Gendreau et al., 2006) M. Gendreau, M. Iori, G. Laporte, et S. Martello, 2006. A Tabu Search Algorithm for a Routing and Container Loading Problem. Transportation Science 40(3), 342-350.

    (Gendreau et al., 2008) M. Gendreau, M. Iori, G. Laporte, et S. Martello, 2008. A Tabu search heuristic for the vehicle routing problem with two-dimensional loading constraints. Networks 51(1), 4-18.

    (Gendreau et al., 1997) M. Gendreau, G. Laporte, et F. Semet, 1997. The covering tour problem. Operations Research 45, 568-576.

    (Gendreau et al., 1998) M. Gendreau, G. Laporte, et F. Semet, 1998. The Selective Traveling Salesman Problem. Networks 32, 263-273.

    (Gensch, 1978) D. H. Gensch, 1978. An industrial application of the traveling salesman subtour problem. AIIE Trans. 10(4), 362-370.

    (Ginsberg, 1993) M. L. Ginsberg, 1993. Dynamic backtracking. Journal of Artificial Intelligence Research 1, 25-46.

    (Glover, 1989) F. Glover, 1989. Tabu Search - Part I. ORSA Journal on Computing 1(3), 190-206.

    (Glover et Laguna, 1997) F. Glover et M. Laguna, 1997. Tabu Search. Kluwer Academic Publishers.

    (Goldberg, 1989) D. E. Goldberg, 1989. Genetic Algorithms in Search, Optimization and Machine Learning. Addison-Wesley Longman Publishing Co., Inc.

    (Golden et al., 1981) B. L. Golden, L. Levy, et R. Dahl, 1981. Two Generalizations of the Traveling Salesman Problem. Omega 9, 439-445.

    (Golden et al., 1987) B. L. Golden, L. Levy, et R. Vohra, 1987. The Orienteering Problem. Naval research logistics 34(3), 307-318.

    (Gutin et Punnen, 2002) G. Gutin et A. Punnen, 2002. The Traveling Salesman Problem and its variations. Dordrecht: Kluwer Academic Publishers.

    (Hachicha et al., 2000) M. Hachicha, M. J. Hodgson, G. Laporte, et F. Semet, 2000. Heuristics for the multi-vehicle covering tour problem. Computers & Operations Research 27(1), 29-42.

    (Hansen et Mladenovi'c, 2006) P. Hansen et N. Mladenovi'c, 2006. First vs. best improvement : An empirical study. Discrete Applied Mathematics 154(5), 802-817.

    (Hansen et al., 2006a) P. Hansen, N. Mladenovi'c, et D. Urosevi'c, 2006a. Variable neighborhood search and local branching. Computers & Operations Research 33(10), 3034- 3045.

    (Hansen et al., 2006b) P. Hansen, N. Mladenovi'c, et D. Uroevi'c, 2006b. Variable neighborhood search and local branching. Computers & Operations Research 33(10), 3034- 3045.

    (Haouari et Ladhari, 2003) M. Haouari et T. Ladhari, 2003. A branch-and-bound-based local search method for the flow shop problem. The Journal of the Operational Research Society 54(10), 1076-1084.

    (Haralick et Elliot, 1980) R. Haralick et G. Elliot, 1980. Increasing tree search efficiency for constraint satisfaction problems. Artificial Intelligence 14, 263-313.

    (Hart et al., 2005) W. E. Hart, N. Krasnogor, et J. E. Smith, 2005. Recent Advances in Memetic Algorithms. Springer.

    (Harvey et Ginsberg, 1995) W. Harvey et M. Ginsberg, 1995. Limited discrepancy search. Dans les actes de In Proceedings of IJCAI95, 607-613.

    (Henry-Labordere, 1969) A. L. Henry-Labordere, 1969. The record balancing problem : A dynamic programming solution of a generalized traveling salesman problem. RAIRO B2, 43-49.

    (Hooker, 2000) J. Hooker, 2000. Logic-Based Methods for Optimization - Combining Optimization and Constraint Satisfaction. Wiley-Interscience series in discrete mathematics and optimization. John Wiley and Sons.

    (Iori et al., 2003) M. Iori, J. J. S. González, et D. Vigo, 2003. An exact approach for the symmetric capacitated vehicle routing problem with two dimensional loading constraints. Rapport technique, University of Bologna, Italy.

    (Iori et al., 2007) M. Iori, J. S. Gonzàlez, et D. Vigo, 2007. An exact approach for the vehicle routing problem with two-dimensional loading constraints. Transportation Science 41(2), 253-264.

    (Jensen et Toft, 1995) T. R. Jensen et B. Toft, 1995. Graph Coloring Problems. Wiley.

    (Karoui et al., 2007) W. Karoui, M. Huguet, P. Lopez, et W.Naanaa, 2007. YIELDS : A yet improved limited discrepancy search for CSPs. Dans les actes de 4th International Conference, CPAIOR 2007, Bruxelles, Belgique, 99-111.

    (Karp, 1972) R. M. Karp, 1972. Reducibility Among Combinatorial Problems. Complexity of Computer Computations, 85-103.

    (Kataoka et Morito, 1988) S. Kataoka et S. Morito, 1988. An Algorithm for the Single Constraint Maximum Collection Problem. Journal of Operations Research Society of Japan 31, 515-530.

    (Kataoka et al., 1998) S. Kataoka, T. Yamada, et S. Morito, 1998. Minimum directed 1-subtree relaxation for score orienteering problem. European Journal of Operational Research 104, 139-153.

    (Keller, 1985) C. P. Keller, 1985. Multiobjective routing through space and time : The MVP and TDVP problems. Unpublished doctoral dissertation, The University of Western Ontario, Canada.

    (Keller, 1989) C. P. Keller, 1989. Algorithms to solve the orienteering problem : A comparison. European Journal of Operational Research 41, 224-231.

    (Keller et Goodchild, 1988) C. P. Keller et M. Goodchild, 1988. The multiobjective vending problem : A generalization of the traveling salesman problem. Environ. Planning B : Planning Design 15, 447-460.

    (Kellerer et al., 2004) H. Kellerer, U. Pferschy, et D. Pisinger, 2004. Knapsack Problems. Springer, Berlin, Germany.

    (Khichane et al., 2008) M. Khichane, P. Albert, et C. Solnon, 2008. Programmation par contraintes avec des fourmis. Journées Francophones de Programmation par Contraintes.

    (Kirkpatrick et al., 1983) S. Kirkpatrick, C. D. Gelatt, et M. P. Vecchi, 1983. Optimization by simulated annealing. Science 220, 671-680.

    (Laporte et Martello, 1990) G. Laporte et S. Martello, 1990. The Selective Traveling Salesman Problem. Discrete Applied Mathematic 26, 193-207.

    (Laporte et al., 1984) G. Laporte, H. Mercure, et Y. Nobert, 1984. Generalized Travelling Salesman Problem through n Sets of Nodes : the Asymmetrical Case. Discrete Applied Mathematics 18, 185-197.

    (Laporte et Nobert, 1984) G. Laporte et Y. Nobert, 1984. Generalized Travelling Salesman Problem through n Sets of Nodes : An integer programming approach. IN-FOR 31, 61-75.

    (Laporte et al., 2003) G. Laporte, J. Riera-Ledesma, et J. J. Salazar-Gonzáles, 2003. A branch-and-cut algorithm for the Undirected Traveling Purchaser Problem. Operations Research 51, 940-951.

    (Laporte et Semet, 1999) G. Laporte et F. Semet, 1999. Computational evaluation of a transformation procedure for the symmetric generalized traveling salesman problem. INFOR 37, 114-120.

    (Lessing et al., 2004) L. Lessing, I. Dumitrescu, et T. Stutzle, 2004. A Comparison Between ACO Algorithms for the Set Covering Problem. 1-12.

    (Levasseur et al., 2007) N. Levasseur, P. Boizumault, et S. Loudni, 2007. Une heuristique de sélection de valeur dirigée par l'impact pour les WCSP. Rapport technique.

    (Lien et al., 1993) Y.-N. Lien, E. Ma, et B. Wah, 1993. Transformation of the Generalized Traveling-Salesman Problem into the Standard Traveling-Salesman Problem. Information Sciences 74, 177-189.

    (Lin, 1965) S. Lin, 1965. Computer solutions of the traveling salesman problem. 44, 2245-2269.

    (Lin et Kernighan, 1973) S. Lin et B. W. Kernighan, 1973. An Effective Heuristic Algorithm for the Traveling-Salesman Problem. Operations Research 21, 498-516.

    (Liu et Teng, 1999) D. Liu et H. Teng, 1999. An improved BL-algorithm for genetic algorithm of the orthogonal packing of rectangles. European Journal of Operational Research 112(2), 413-420.

    (Lodi et al., 1999) A. Lodi, S. Martello, et D. Vigo, 1999. Heuristic and Metaheuristic Approaches for a Class of Two-Dimensional Bin Packing Problems. INFORMS J. on Computing 11(4), 345-357.

    (Lübbecke et Desrosiers, 2005) M. E. Lübbecke et J. Desrosiers, 2005. Selected topics in column generation. Operations Research 53(6), 1007-1023.

    (Man et al., 1999) K. F. Man, K. S. Tang, et S. Kwong, 1999. Genetic Algorithms : Concepts and Designs. Springer.

    (Martello et al., 2000) S. Martello, M. Monaci, et D. Vigo, 2000. An exact approach to the strip packing problem. Rapport technique, University of Bologna, Italy.

    (Martello et al., 2003) S. Martello, M. Monaci, et D. Vigo, 2003. An Exact Approach to the Strip-Packing Problem. INFORMS J. on Computing 15(3), 310-319.

    (Martello et al., 2000) S. Martello, D. Pisinger, et D. Vigo, 2000. The Three-Dimensional Bin Packing Problem. Operational Research 48(2), 256-267.

    (Martello et Toth, 1990) Martello, S. et P. Toth (Eds.), 1990. Knapsack Problems : Algorithms and Computer Implementations. Wiley, Chichester.

    (Martello et Vigo, 1998) S. Martello et D. Vigo, 1998. Exact Solution of the Two-Dimensional Finite Bin Packing Problem. Management Science 44(3), 388-399.

    (Menger, 1932) K. Menger, 1932. Das botenproblem. Ergebnisse eines mathematischen kolloquiums 2, 11-12.

    (Mittenthal et Noon, 1992) J. Mittenthal et C. E. Noon, 1992. Insert/delete heuristic for the travelling salesman subset-tour problem with one additional constraint. Operations Research 43(3), 277-283.

    (Mladenovi'c et Hansen, 1997) N. Mladenovi'c et P. Hansen, 1997. Variable neighborhood search. Computers and Operations Research 24(11), 1097-1100.

    (Montané et Galvão, 2006) F. A. T. Montané et R. D. Galvão, 2006. A tabu search algorithm for the vehicle routing problem with simultaneous pick-up and delivery service. Computers & Operations Research 33(3), 595-619.

    (Moscato et Cotta, 2005) P. Moscato et C. Cotta, 2005. A Gentle Introduction to Memetic Algorithms. Operations Research & Management Science 57(2), 105-144.

    (Moscato et Norman, 1992) P. Moscato et M. G. Norman, 1992. A Memtic approach for the traveling salesman problem implementation of a computational ecology for combinatorial optimization on message-passing systems. Dans les actes de Parallel Computing and Transputer Applications, Amsterdam, 177-186. IOS Press.

    (Mühlenbein et al., 1988) H. Mühlenbein, M. Gorges-Schleuter, et O. Krämer, 1988.
    Evolution algorithms in combinatorial optimization. Parallel Computing 7, 65-85.

    (Néron et al., 2008) E. Néron, F. Tercinet, et F. Sourd, 2008. Search tree based approaches for parallel machine scheduling. Computuers & Operations Research 35(4), 1127-1137.

    (Noon et Bean, 1991) C. E. Noon et J. C. Bean, 1991. A Lagrangian Based Approach for the Asymmetric Generalized Traveling Salesman Problem. Operations Research 39, 623-632.

    (Noon et Bean, 1993) C. E. Noon et J. C. Bean, 1993. An Efficient Transformation of the Generalized Traveling Salesman Problem. INFOR 31, 39-44.

    (Oliva, 2004) C. Oliva, 2004. Techniques hybrides de Propagation de Contraintes et de Programmation Mathématique. Thèse de Doctorat, Université d'Avignon.

    (Ong, 1982) H. L. Ong, 1982. Approximate Algorithms for the Traveling Purchaser Problem. Operations Research Letters, 201-205.

    (Osogami et Imai, 2000) T. Osogami et H. Imai, 2000. Classification of Various Neighborhood Operations for the Nurse Scheduling Problem. Dans les actes de ISAAC '00 : Proceedings of the 11th International Conference on Algorithms and Computation, London, UK, 72-83. Springer-Verlag.

    (Ow et Morton, 1988) P. S. Ow et T. E. Morton, 1988. Filtered beam search in scheduling. International Journal of Production Research 26, 35-62.

    (Palpant, 2005) M. Palpant, 2005. Recherche exacte et approchée en optimisation combina-
    toire : schémas d'intégration et applications. Thèse de Doctorat, Université d'Avignon.

    (Pearn et Chien, 1998) W. L. Pearn et R. C. Chien, 1998. Improved Solutions for the Traveling Purchaser Problem. Computers & Operations Research 25, 879-885.

    (Pekny et Miller, 1990) J. F. Pekny et D. L. Miller, 1990. An exact parallel algorithm for the resource constrained travelling salesman problem with application to scheduling with an aggregate deadline. Dans A. Press (Ed.), ACM 18th Annual Comput. Sci. Conf., 208-214.

    (Pessan et al., 2007) C. Pessan, J.-L. Bouquard, et E. Néron, 2007. Genetic Branch-andBound or Exact Genetic Algorithm? Artificial Evolution, 136-147.

    (Pisinger et Ropke, 2007) D. Pisinger et S. Ropke, 2007. A general heuristic for vehicle routing problems. Computers & Operations Research 34(8), 2403-2435.

    (Pisinger et Sigurd, 2007) D. Pisinger et M. Sigurd, 2007. Using Decomposition Techniques and Constraint Programming for Solving the Two-Dimensional Bin-Packing Problem. INFORMS J. on Computing 19(1), 36-51. Institute for Operations Research and the Management Sciences (INFORMS), Linthicum, Maryland, USA. INFORMS.

    (Prescott-Gagnon et al., 2007) E. Prescott-Gagnon, G. Desaulniers, et L.-M. Rousseau, 2007. A Large Neighborhood Search Algorithm for the Vehicle Routing Problem with Time Windows. Montreal, Canada. Optimization Days.

    (Prestwich, 2008) S. Prestwich, 2008. Generalised graph colouring by a hybrid of local
    search and constraint programming. Discrete Applied Mathematics 156(2), 148-158.

    (Prins, 2004) C. Prins, 2004. A simple and effective evolutionary algorithm for the VRP. Computers & Operations Research 31, 1985-2002.

    (Prosser, 1993) P. Prosser, 1993. Hybrid Algorithms for the Constraint Satisfaction Problem. Computational Intelligence 9(3), 268-299.

    (Ramesh et Brown, 1991) R. Ramesh et Brown, 1991. An efficient four-phase heuristic for the generalized orienteering problem. Computers & Operations Research 18(2), 151-165.

    (Ramesh, 1981) T. Ramesh, 1981. Traveling Purchaser Problem. Opsearch 18, 78-91.

    (Refalo, 2004) P. Refalo, 2004. Principles and Practice of Constraint Programming - CP 2004, Volume 3258 de Lecture Notes in Computer Science, Chapter Impact-Based Search Strategies for Constraint Programming, 557-571. Springer Berlin / Heidelberg.

    (Reimann et al., 2004) M. Reimann, K. Doerner, et R. F. Hartl, 2004. D-ants : savings based ants divide and conquer the vehicle routing problem. Computers & Operations Research 31(4), 563-591.

    (Reinelt, 1991) G. Reinelt, 1991. TSPLIB - A Traveling Salesman Problem Library. ORSA Journal on Computing 3, 376-384.

    (Renaud et Boctor, 1998a) J. Renaud et F. F. Boctor, 1998a. An Efficient Composite Heuristic for the Symmetric Generalized Traveling Salesman Problem. European Journal of Operational Research 108, 571-584.

    (Renaud et Boctor, 1998b) J. Renaud et F. F. Boctor, 1998b. Improved Heuristics for the
    Traveling Purchaser Problem. European Journal of Operational Research 108, 571-584.

    (Renaud et al., 1996) J. Renaud, F. F. Boctor, et G. Laporte, 1996. A fast composite heuristic for the symmetric traveling salesman problem. INFORMS Journal on Computing 8, 134-143.

    (Riera-Ledesma et Salazar-González, 2005) J. Riera-Ledesma et J. J. Salazar-González, 2005. A Heuristic approach for the Traveling Purchaser Problem. European Journal of Operational Research 162, 142-152.

    (Rousseau et al., 2004) L. M. Rousseau, D. Feillet, et M. Gendreau, 2004. New refinements for the solution of vehicle routing problems with column generation. Le Gosier, Guadeloupe (France). TRISTAN 5.

    (Schiex et Verfaillie, 1994) T. Schiex et G. Verfaillie, 1994. Nogood recording for static and dynamic constraint satisfaction problems. International Journal of Artificial Intelligence Tools 3, 48-55.

    (Sevaux et Sörensen, 2005) M. Sevaux et K. Sörensen, 2005. Permutation distance measures for memetic algorithms with population management. Dans les actes de Proceedings of 6th Metaheuristics International Conference, MIC 2005, Vienna, Austria, 832-838.

    (Shaw, 1998) P. Shaw, 1998. Using constraint programming and local search methods to solve vehicle routing problems. Dans les actes de CP-98, Fourth international conference on principles and practice of constraint programming, Volume 1520, 417-431.

    (Shi et al., 2007) X. H. Shi, Y. C. Liang, H. P. Lee, C. Lu, et Q. X. Wang, 2007. Particle swarm optimization-based algorithms for TSP and generalized TSP. Information Processing Letters 103, 169-176.

    (Silberholz et Golden, 2007) J. Silberholz et B. Golden, 2007. The Generalized Traveling Salesman Problem : A New Genetic Algorithm Approach. 165-181.

    (Singh et Oudheusden, 1997) K. N. Singh et D. L. V. Oudheusden, 1997. A Branch and Bound Algorithm for the Traveling Purchaser Problem. European Journal of Operational Research 97, 571-579.

    (Slavík, 1997) P. Slavík, 1997. On the approximation of the generalized traveling salesman problem. Rapport technique, Department of Computer Science, SUNY-Buffalo.

    (Smith et Grant, 1998) B. M. Smith et S. A. Grant, 1998. Trying Harder to Fail First. European Conference on Artificial Intelligence, 249-253.

    (Snyder et Daskin, 2006) L. V. Snyder et M. S. Daskin, 2006. A Random-Key Genetic Algorithm for the Generalized Traveling Salesman Problem. European Journal of Operational Research 174, 38-53.

    (Sörensen et Sevaux, 2006) K. Sörensen et M. Sevaux, 2006. MA|PM : memetic algorithms with population management. Computers & Operations Research 33(5), 1214- 1225.

    (Sourd et Chretienne, 1999) F. Sourd et P. Chretienne, 1999. Fiber-to-Object Assignment Heuristics. European Journal of Operational Research 117(1), 1-14.

    (Srivastava et al., 1969) S. S. S. Srivastava, R. C. G. Kumar, et P. Sen, 1969. Generalized Traveling Salesman Problem through n sets of nodes. CORS Journal 7, 97-101.

    (Tan et al., 2001) K. C. Tan, L. H. Leeb, Q. L. Zhua, et K. Oua, 2001. Heuristic methods for vehicle routing problem with time windows. Artificial Intelligence in Engineering 15(3), 281-295.

    (Tang et Wang, 2006) L. Tang et X. Wang, 2006. Iterated local search algorithm based on very large-scale neighborhood for prize-collecting vehicle routing problem. The International Journal of Advanced Manufacturing Technology 29(11), 1246-1258.

    (Teeninga et Volgenant, 2004) A. Teeninga et A. Volgenant, 2004. Improved Heuristics
    for the Traveling Purchaser Problem. Computers & Operations Research 31, 139-150.

    (Toth et Vigo, 2001) P. Toth et D. Vigo, 2001. Branch-and-bound algorithms for the capacitated VRP. 29-51. Philadelphia, PA, USA. Society for Industrial and Applied Mathematics.

    (Toth et Vigo, 2002) P. Toth et D. Vigo, 2002. The vehicle routing problem. Philadelphia, PA, USA : Society for industrial and Applied Mathematics.

    (Tsai et al., 2004) H. K. Tsai, J. M. Yang, Y. F. Tsai, et C. Y. Kao, 2004. Some issues of designing genetic algorithms for traveling salesman problems. Soft Computing 8, 689-697.

    (Vose, 1998) M. D. Vose, 1998. The Simple Genetic Algorithm : Foundations and Theory. MIT Press.

    (Voß, 1996) S. Voß, 1996. Dynamic Tabu Search Strategies for the Traveling Purchaser Problem. Annals of Operational Research 63, 253-275.

    (Wäscher et al., 2007) G. Wäscher, H. Haussner, et H. Schumann, 2007. An improved typology of cutting and packing problems. European Journal of Operational Research 103, 1109-1130.

    (Winter et al., 1995) G. Winter, J. Périaux, M. Galaán, et P. Cuesta, 1995. Genetic Algorithms in Engineering and Computer Science. Wiley.

    (Zanarini et Pesant, 2007) A. Zanarini et G. Pesant, 2007. Solution Counting Algorithms for Constraint-Centered Search Heuristics. Dans les actes de Principles and Practice of Constraint Programming - CP 2007, 743-757.






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Aux âmes bien nées, la valeur n'attend point le nombre des années"   Corneille