222
T_Alg 25 septembre 2017 Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017

Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Introduction auxmétaheuristiques

c©É.D. Taillard 25 septembre 2017

Page 2: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

ii

Page 3: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Introduction

Si le lecteur sait ce qu’est une heuristique — un algorithme permettant detrouver avec un effort raisonnable une solution pas forcément la meilleure à unproblème donné, algorithme se basant sur des connaissances acquises parl’expérience — la définition d’une métaheuristique est plus discutée.

Beaucoup d’auteurs ont adopté celle d’un processus maître itératif guidantet modifiant les opérations d’une heuristique subordonnée. En conséquence,les ouvrages dans le domaine sont décomposés en chapitres présentant cha-cun une métaheuristique, comme par exemple le recuit simulé, la rechercheavec tabous, les colonies de fourmi artificielles ou les algorithmes génétiques,pour ne citer que les plus connues.

Le présent livre aborde les métaheuristiques sous un angle différent. Il lesprésente la forme d’un ensemble de méthodes de base qui sont combinéesentre elles pour constituer une heuristique. Ces principes de base sont suf-fisamment généraux pour qu’ils puissent s’appliquer à un large ensemble deproblèmes. Nous avons identifié 5 grands principes de base dans la démarcheconduisant à l’élaboration d’un nouvel algorithme :

La modélisation du problème La phase la plus délicate lorsqu’on est con-fronté à un nouveau problème est sa modélisation. En effet, si un pro-blème est pris « par le mauvais bout », sa résolution peut en être large-ment compromise.

La décomposition en sous-problèmes Lorsque l’on doit résoudre un pro-blème de grande taille, il est nécessaire de le décomposer en sous-problèmes plus petits. Ces derniers peuvent être eux-mêmes des pro-blèmes difficiles, qu’il faut approcher par une technique appropriée, parexemple une métaheuristique.

Heuristique MétaheuristiqueDomained’application

Un problème génériqued’optimisation

Optimisation combinatoire

Connaissanceà inclure

Spécifiques au problème Méthodes heuristiquesd’optimisation

Données àfournir

Les valeurs numériquesd’un exemple de problème

Un problème génériqued’optimisation

Résultat Solution heuristique del’exemple de problème

Un algorithme heuristique

Tableau 1 – Contexte d’applicabilité d’une heuristique et d’une métaheuristique

Page 4: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2

La construction d’une solution Lorsqu’un modèle approprié est trouvé, ildevient aisé de construire une solution au problème, même si cette der-nière n’est pas de bonne qualité, voire inapplicable en pratique. Une desméthodes de construction les plus courantes est un algorithme glouton,qui peut être du reste un algorithme exact pour des problèmes simplescomme la recherche d’arbre ou de chemin optimaux.

La modification d’une solution L’étape suivante tente d’améliorer une so-lution construite de façon plus ou moins sommaire en lui faisant subirde légères modifications. Cette approche est en quelque sorte une tra-duction au monde discret des méthodes basées sur les gradients pourl’optimisation différentiable.

Randomisation et apprentissage Finalement, la répétition de constructionsou de modifications permet d’améliorer la qualité des solutions produites,pour peu que l’on fasse intervenir une composante aléatoire et/ou unprocessus d’apprentissage.

Les métaheuristiques sont devenues un outil incontournable lorsqu’il s’agitde s’attaquer à la résolution de problèmes d’optimisation difficiles, même sielles ont parfois été décriées, surtout dans les années 1980 par des personnesqui opposaient méthodes « exactes » et heuristiques. Depuis, on s’est renducompte que bien des méthodes exactes, donc sensées fournir une solution lameilleure possible, ne garantissaient l’optimalité qu’avec une précision limitéeet qu’elles utilisaient abondamment des heuristiques !

Public-cible

Le présent ouvrage est destiné aux étudiants et informaticiens profession-nels désirant se familiariser avec les métaheuristiques. Un accent particulierest mis sur les exemples d’applications, afin que les principes de base énumé-rés plus haut ne soient pas perçus comme une sculpture sur nuages, ce quiest le danger lorsque l’on se situe à un certain niveau d’abstraction.

Pour cela, de nombreux exercices ont été imaginés d’une part. Il faut tou-tefois mentionner que certains sont fortement inspirés d’autres ouvrages surle sujet. D’autre part, les codes sources implantant la plupart des métaheu-ristiques sont présentés pour un problème emblématique, celui du voyageurde commerce, qui se prête à des représentations concrètes. Ainsi, l’informati-cien désirant mettre au point une méthode heuristique pour un problème par-ticulier pourra s’inspirer de ces codes. Mais surtout, ces derniers lèvent touteambiguïté sur les inévitables interprétations qui peuvent être faites lors de laprésentation d’une trame de métaheuristique.

Comme un code source n’est utile que lorsque l’on veut connaître tous lesdétails d’une méthode mais qu’il est d’une lecture peu attractive, nous avonsdépouillés les codes proposés au maximum, en essayant de les limiter à uneseule page. Certes, ces codes ne sont pas des « chevaux de course », on entrouvera de plus complets et de plus efficaces par exemple dans la « SourceCode Library », mais ils ne contiennent que la quintessence des méthodes etleur extrême concision devrait permettre au lecteur de les comprendre. Ainsi,plus d’une douzaine de méthodes différentes ont été implantées tout en pre-nant ensemble moins du dixième du nombre de lignes de code d’une des im-

Page 5: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

3

plantations les plus rapide. Nous avons cependant dû, pour respecter cetteconcision, compacter quelque peu les codes notamment en ne les commentantque succinctement et parfois en plaçant plusieurs instructions sur une mêmeligne ; nous prions donc le lecteur habitué à des codes plus aérés d’être indul-gent.

Le choix des exercices a toujours été guidé par les solutions auxquelles ons’attend, qui doivent être aussi univoques que possible. En effet, lorsque l’onconçoit une nouvelle heuristique, il n’y a plus de solution juste ou fausse. Il ya seulement des heuristiques qui fonctionnent bien pour certaines données duproblème considéré et d’autres qui ne produisent pas de résultats satisfaisants— piètre qualité des solutions, temps de calcul prohibitif, etc.

Rien n’est plus déstabilisant pour un étudiant que des réponses ambiguës,voire philosophiques. C’est pour cela les solutions pour l’ensemble des exer-cices sont données en annexe.

Organisation du livre

Le présent ouvrage est découpé en 3 parties. La première (chapitres 1 et 2)rappelle quelques bases de programmation linaire, de la théorie des graphes,de théorie de la complexité et présente quelques problèmes, simples et diffi-ciles, d’optimisation combinatoire. Le but de cette première partie est de rendrele domaine intelligible par un lecteur ne disposant pas de connaissances parti-culières en optimisation combinatoire.

La deuxième partie (chapitres 3 à 6) traite des blocs constituant la basedes métaheuristiques : la construction et l’amélioration de solutions ainsi ladécomposition d’un problème en sous-problème. Des métaheuristiques primi-tives assemblant ces ingrédients et les utilisant dans des processus itératifsfonctionnant sans mémoire sont y sont également incorporées.

La troisième partie présente des métaheuristiques plus évoluées qui uti-lisent des formes de mémoire et d’apprentissage permettant de mettre au pointdes heuristiques plus élaborées.

1. Éléments de programmation linéaire, de théories des graphes et de lacomplexité Ce chapitre introduit très succinctement deux techniques demodélisation de problèmes d’optimisation, la programmation linéaire et lathéorie des graphes. En effet, la formulation d’un problème sous la formed’un programme linéaire le décrit de manière formelle et sans ambiguïtéalors que de nombreux problèmes d’optimisation combinatoire peuventêtre « dessinés » et par là représentés de façon intuitive et relativementnaturelle par un graphe. Quelques éléments de théorie de la complexitésont également présentés. Très brièvement, cette branche s’occupe declasser les problèmes selon leur difficulté. En effet, avant d’envisagerl’utilisation d’une métaheuristique pour un problème, il faut s’assurer quece dernier est difficile et qu’il n’existe pas un algorithme efficace pour lerésoudre exactement.

2. Exemples de problèmes combinatoire et modélisation Ce chapitre passeen revue un certains nombre de problèmes classiques en optimisationcombinatoire. Il permet d’illustrer la frontière parfois ténue qu’il y a entreun problème facile, pour lequel des algorithmes efficaces sont connus, et

Page 6: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4

un problème difficile qui ne diffère que par un petit détail pouvant paraîtreanodin à première vue. Il met également en évidence le fait qu’un pro-blème peut avoir diverses modélisations, même si sa formulation restetrès simple.

3. Méthodes constructives Ce chapitre présente des méthodes de construc-tion de solutions, en commençant par un rappel sur les méthodes deséparation et évaluation, largement utilisées pour la conception d’algo-rithmes exacts. Ensuite deux méthodes élémentaires sont présentées, laconstruction aléatoire et la construction gloutonne. Cette dernière sélec-tionne séquentiellement les éléments à ajouter à une solution partielle, enne remettant jamais en cause les choix qui ont été faits. Cette méthodepeut être améliorée en évaluant plus profondément les conséquences duchoix d’un éléments. La recherche en faisceaux et la méthode pilote enfont partie.

4. Recherches locales Les méthodes d’amélioration d’une solution formentl’épine dorsale de la plupart des métaheuristiques. Ces méthodes sontbasées sur la définition d’un ensemble de solutions voisines, pour toutesolution du problème. La définition de cet ensemble dépend naturelle-ment de la modélisation du problème. Selon cette dernière, un voisinages’exprimant naturellement peut s’avérer trop petit pour mener à des solu-tions de qualité ou au contraire trop grand, induisant des temps de calculprohibitifs. Diverses méthodes ont été proposées pour agrandir le voisi-nage, comme la recherche en éventail ou les chaînes d’éjections, ou pourle réduire, comme la recherche granulaire ou la liste de candidats.

5. Méthodes de décomposition Dans le processus d’élaboration d’un nou-vel algorithme, ce chapitre aurait logiquement dû se trouver juste aprèscelui consacré à la modélisation de problème. Néanmoins, les méthodesde décomposition ne s’utilisent que lorsque la dimension des donnéesà traiter est importante. Il s’agit donc d’une phase optionnelle, que lelecteur peut sans autre ignorer avant de passer aux méthodes stochas-tiques et d’apprentissage. C’est la raison justifiant sa place à la fin de lapremière partie de cet ouvrage, consacrée aux ingrédients de base desmétaheuristiques. On trouvera dans ce chapitre des méthodes commePOPMUSIC ou plus générale comme la recherche dans de grands voisi-nages.

6. Méthodes stochastiques sans mémoire La second partie de cet ouvrageest consacré aux méthodes qui répètent de façon aléatoire et sans mé-moire des constructions ou des modifications de solutions. Parmi lestechniques les plus populaires présentées dans ce chapitre, on trouveraGRASP, le recuit simulé, l’acceptation à seuil, la méthode du grand dé-luge, les méthodes de bruitage et la méthode à voisinage variable.

7. Apprendre à construire En suivant l’ordre dans lequel sont présentés lesingrédients de base des métaheuristiques, on peut tout d’abord chercherà améliorer le processus de construction de solutions. Les colonies defourmis artificielles en sont exemple typique.

8. Recherche avec tabous Si les recherches locales forment l’épine dor-sale des métaheuristiques, la recherche avec tabous, qui cherche à ap-prendre comment modifier itérativement une solution, peut être considé-

Page 7: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

5

rée comme la reine des métaheuristiques. C’est du reste à son inventeurque l’on doit ce terme. Ce chapitre se concentrera sur les ingrédientsque l’on peut considérer à la base de la recherche avec tabous, à sa-voir l’utilisation de mémoires et de tactiques d’exploration des solutions.D’autres ingrédients proposés dans le cadre de la recherche avec tabouspar son inventeur, comme les listes de candidats, les chaînes d’éjectionou la construction de vocabulaire trouvent une place plus naturelle dansd’autres chapitres.

9. Méthodes à population Lorsque l’on dispose d’une population de solu-tions, on peut chercher à apprendre comment les combiner et commentgérer cette population. La méthode la plus populaire dans ce domaine estsans conteste les algorithmes génétiques. Ces derniers sont cependantune métaheuristique moins évoluée que la recherche par dispersion. Fi-nalement, parmi les dernières-nées des métaheuristiques on trouve lesméthodes à essaim particulaires, qui semblent adaptés à l’optimisationcontinue.

Page 8: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

6

Page 9: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Première partie

Concepts de base

Page 10: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Page 11: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Chapitre 1

Éléments de théories desgraphes et de la complexité

1.1 Optimisation combinatoire

Le domaine d’application privilégié des métaheuristiques est l’optimisationcombinatoire. Pour fixer les idées, il n’est donc pas inutile de brièvement rap-peler en quoi consiste ce domaine. Prenons un petit exemple de problèmecombinatoire : celui de la coloration d’une carte de géographie. On désire attri-buer une couleur pour chaque division d’une carte de sorte que deux divisionsqui ont une frontière commune ne reçoivent pas la même couleur. Dans la fi-gure 1.1 on a utilisé 5 couleurs différentes, sans se préoccuper de l’attributionpolitique des îles ou enclaves.

Ce problème est combinatoire. S’il y a n divisions à colorer et que l’on désireutiliser 5 couleurs, il y a 5n manières différentes de colorer la carte. Un grandnombre de ces colorations ne sont pas admissibles car elles ne respectent pasla contrainte que deux divisions avec frontière commune ne reçoivent pas unecouleur identique. On pourrait se poser la question de savoir s’il existe une co-loration admissible n’utilisant que 4 couleurs. De façon plus générale, on peutvouloir procéder à une coloration utilisant un nombre minimum de couleurs. Ona donc affaire ici à un problème d’optimisation combinatoire.

Comment exprimer ce problème plus formellement ? Prenons tout d’abordle petit exemple suivant : peut-on colorer la Suisse (s) et les pays voisins(Allemagne d, France f , Italie i, Autriche a et Liechtenstein l) avec 3 cou-leurs (voir figure 1.2) ? Pour cela, on peut introduire 18 variables booléennesbs1, bs2, bs3, bd1, bd2, . . . , bl3 qui indiqueront pour chaque pays la couleur 1, 2 ou3 qu’il reçoit. Il s’agit d’écrire une longue formule booléenne qui prendra la va-leur vraie si, et seulement s’il existe une coloration admissible en 3 couleurs.Tout d’abord, on peut imposer que la Suisse soit colorée dans au moins unecouleur : bs1 ∨ bs2 ∨ bs3. Mais il ne faut pas qu’elle reçoive à la fois la couleur 1et la couleur 2, ce qui peut s’écrire : bs1 ∧ bs2, ce qui est équivalent à : bs1 ∨ bs2.Elle ne devra également pas prendre à la fois la couleur 1 et la couleur 3 ou lacouleur 2 et la couleur 3. Ainsi, pour imposer que la Suisse soit colorée avec

Page 12: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

10 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

FIGURE 1.1 – Une ancienne carte de l’Europe colorée en 5 couleurs (en comptant celledu fond).

exactement 1 couleur, on aura la conjonction de 4 clauses :

(bs1 ∨ bs2 ∨ bs3) ∧ (bs1 ∨ bs2) ∧ (bs1 ∨ bs3) ∧ (bs2 ∨ bs3)

Pour chacun des pays concernés, il faudra également écrire une conjonction de4 clauses, mais avec les variables correspondant aux autres pays. Finalement,pour chaque frontière, il faudra imposer que les couleurs de part et d’autresoient différentes. Par exemple, pour la frontière entre la Suisse et la France,on devra avoir :

(bs1 ∨ bf1) ∧ (bs2 ∨ bf2) ∧ (bs3 ∨ bf3)

De manière générale, si on désire colorer une carte avec n pays qui ont,en tout, m frontières communes en k couleurs, on peut se poser la questiondu nombre de variables que le problème aura ainsi que du nombre de clausesqui devront être toutes vraies simultanément. Tout d’abord, il faudra introduiren · k variables booléennes. Ensuite, pour chaque pays, il faudra écrire 1 +k·(k−1)

2 clauses pour s’assurer que chaque pays reçoive exactement 1 couleur.Finalement, pour chaque frontière, il faudra écrirem·k clauses. Le problème dela coloration d’une telle carte en k couleurs aura une solution si, et seulements’il existe des valeurs vrai ou faux pour chacune des variables telles quel’ensemble de toutes ces clauses soient vraies simultanément. Ce problèmeest connu comme celui de l’acceptabilité et joue un rôle central en théorie dela complexité. Tout ce développement a permis de formaliser le problème parune seule, longue, formule booléenne, mais ne nous dit pas encore commenttrouver une solution à ce problème !

Un algorithme, très primitif, permettant de trouver une solution est d’es-sayer toutes les valeurs possibles pour les variables (il y a 2nk jeux de valeursdifférentes), et pour chaque jeu, de vérifier si la formule est juste.

Tel que modélisé par une formule booléenne, le problème de la colorationd’une carte est un problème de décision, dont la réponse est vrai (on arrive à

Page 13: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.1 OPTIMISATION COMBINATOIRE 11

colorer la carte en k couleurs) ou faux (on n’y arrive pas). En supposant quel’on dispose d’un algorithmeA qui permette de trouver les valeurs à donner auxvariables booléennes pour que la formule soit vraie — ou qui dise que de tellesvaleurs n’existent pas — est-il possible de résoudre le problème d’optimisation,c’est-à-dire de trouver la valeur minimale de k telle qu’il existe une colorationadmissible ?

Une façon de répondre à cette question est de constater que l’on a be-soin, au maximum, de n couleurs pour colorer n surfaces, en attribuant unecouleur différente à chacune. Par conséquent, on sait qu’une coloration en ncouleurs existe. On peut appliquer l’algorithme A en lui demandant de trouverune coloration en n− 1 couleurs, puis n− 2, etc. jusqu’à ce qu’il réponde qu’iln’existe pas de coloration. On saura alors que la dernière valeur pour laquellel’algorithme a trouvé une solution correspond à une coloration optimale.

Une technique plus rapide est de procéder par dichotomie : plutôt que dediminuer d’une unité à chaque appel de A, on maintient deux valeurs kminet kmax pour lesquelles on sait, respectivement, qu’il n’y a pas de colorationadmissible et qu’il en existe une. En éliminant le cas de la carte triviale qui n’apas de frontière, on sait que l’on peut démarrer avec kmin = 1 et kmax = n. Ondemande à l’algorithme s’il existe une coloration en k = bkmin+kmax

2 c couleurs.Si la réponse est oui, on modifie kmax ← bkmin+kmax

2 c, si la réponse est non,on modifie kmin ← bkmin+kmax

2 c. On répète le procédé jusqu’à ce que kmax =kmin + 1, valeur qui correspond au nombre optimum de couleurs.

1.1.1 Programme linéaire

La programmation linéaire est un outil extrêmement utile pour modélisermathématiquement de nombreux problèmes d’optimisation. On appelle pro-grammation mathématique la recherche et l’analyse de problèmes pour les-quels on veut déterminer un meilleur élément d’un ensemble pour lequel onpeut évaluer un critère quantitatif. Lorsque l’expression de ce critère est unefonction linéaire et que l’ensemble peut être décrit au moyen de fonctions li-néaires, on parle de programmation linéaire.

Un programme linéaire sous forme canonique s’écrit mathématiquement dela manière suivante :

Maximiser z = c1x1+ c2x2+ . . .+ cnxn (1.1)a11x1+ a12x2+ . . .+ a1nxn 6 b1 (1.2)

Sous a21x1+ a22x2+ . . .+ a2nxn 6 b2

contraintes . . .

am1x1+ am2x2+ . . .+ amnxn 6 bm

xi > 0(i = 1, . . . , n) (1.3)

Dans le cas particulier où tous les coefficients cj , aij et bi sont positifs, uneinterprétation du problème consiste à chercher des quantités xj à produire,non négatives (1.3), chaque unité du produit j rapportant un revenu cj , desorte à maximiser le revenu global z (1.1). La production d’une unité du produitj consomme des quantités aij de chaque ressource i, disponible en quantitébi (contraintes 1.2).

Page 14: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

12 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

La forme canonique de la programmation linéaire n’est pas limitative, en cesens que tout programme linéaire peut se mettre sous cette forme. En effet,si l’objectif est de minimiser la quantité z, cela revient à maximiser −z ; si unevariable x peut être de signe quelconque, on peut la substituer par x′′ − x′,où x′′ et x′ doivent être non négatifs ; finalement, si on a une contrainte avecégalité ai1x1 + ai2x2 + · · · + ainxn = bi, elle peut être remplacée par les deuxcontraintes ai1x1 +ai2x2 +· · ·+ainxn 6 bi et −ai1x1−ai2x2−· · ·−ainxn 6 −bi.

On peut modéliser le problème de la coloration d’une carte par un pro-gramme linéaire un peu particulier. On introduit pour cela des variables yk quiindiquent si la couleur k (pour k = 1, . . . , n) est utilisée (yk = 1) ou non (yk = 0)ainsi que des variables xik qui indiquent si la surface i reçoit la couleur k. Leprogramme linéaire en nombres entiers suivant permet de formaliser le pro-blème de la coloration d’une carte :

Minimisern∑k=1

yk (1.4)

Sous contraintesn∑k=1

xik = 1 i = 1, . . . , n (1.5)

xik − yk 6 1 i, k = 1, . . . , n (1.6)xik + xjk 6 1 (i, j) ont une frontière commune, (1.7)

k = 1, . . . , n

xik, yk ∈ 0, 1 (1.8)

L’objectif (1.4) consiste à utiliser le nombre minimum de couleurs. Le pre-mier ensemble de contraintes (1.5) impose que chaque sommet reçoive unecouleur exactement ; le second ensemble (1.6) que l’on n’attribue pas à unsommet une couleur non utilisée ; et l’ensemble (1.7) empêche de donnerla même couleur à deux surface contigües. Les contraintes d’intégrité (1.8)peuvent également s’écrire en faisant ressortir des inégalités linéaires (yk >0, yk 6 1, yk ∈ Z).

La programmation linéaire est un outil de modélisation et de formalisa-tion de problèmes très puissant. Lorsqu’il n’y a pas de contraintes d’intégritéon peut résoudre efficacement des problèmes comportant des milliers de va-riables et des milliers de contraintes. Dans ce cas, la résolution est à peine pluscomplexe que la résolution d’un système d’équations linéaires. La principale li-mitation vient essentiellement de la place mémoire nécessaire au stockage desdonnées ainsi que d’éventuels problèmes numériques pouvant survenir si lesdonnées sont mal conditionnées.

En revanche, les programmes linéaires en nombres entiers, comme le pro-blème de la coloration exprimé ci-dessus, sont en général difficile à résoudre eton doit mettre en œuvre des techniques spécifiques dont les métaheuristiquesfont partie.

Si la formulation d’un problème sous la forme d’un programme linéaire per-met une modélisation rigoureuse, elle n’aide pas beaucoup notre cerveau danssa résolution. En effet, la vue est le plus important de nos sens. L’adage ditqu’un petit dessin vaut mieux qu’un long discours. Les graphes sont une ma-nière plus appropriée pour notre esprit de schématiser un problème. Avant de

Page 15: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.1 OPTIMISATION COMBINATOIRE 13

FIGURE 1.2 – La Suisse et ses pays limitrophes que l’on désire colorer. Chaque pays estsymbolisé par un disque et un frontière communes est symbolisée par un trait reliantentre les pays-disques correspondants. On obtient ainsi une représentation schéma-tique du problème de coloration sous forme d’un graphe.

présenter d’autres modélisations du problème de coloration (voir section 2.9),nous rappellerons très brièvement quelques définitions de la théorie des gra-phes sur lesquelles le reste de l’ouvrage s’appuiera.

1.1.2 Petit lexique sur les graphes

Les graphes sont un outil très utile pour modéliser des problèmes où l’ona des éléments qui présentent des relations entre eux. On représente les élé-ments par un point et si deux éléments sont en relation, on les relie par un seg-ment. Ainsi, le problème de coloration d’une carte vu précédemment pourra seschématiser par un petit graphe, comme illustré en figure 1.2.

Graphe non orienté, sommet, arête Un graphe non orienté G est une col-lection d’éléments V appelés également sommets (« vertex » en globish) ounœuds et d’un ensemble E d’arêtes (« edge ») associées chacune à une paire(non ordonnée) de nœuds qui en sont les extrémités. On note un tel grapheG = (V,E). Si v et w sont deux sommets reliés par une arête, on dit qu’ilssont adjacents ou encore que cette arête est incidente avec v et w. Lorsqueplusieurs arêtes relient la même paire de sommets, on a des arêtes multiples.Lorsque les deux extrémités d’une arêtes sont confondues, on parle de boucle.Lorsque V = ∅ (et donc E = ∅) on a le graphe nul. Lorsque V 6= ∅ et E = ∅on a un graphe vide. Un graphe qui n’a ni boucle, ni arêtes multiples est ungraphe simple. Le graphe de la figure 1.2 est un exemple de graphe simple.

Graphe orienté, arc Dans certains cas, les relations entre les couples d’élé-ments sont ordonnées. On parle alors de graphe orienté et les « arêtes orien-tées » sont appelées des arcs. Il convient dès lors de distinguer les deux extré-mités d’un arc en une extrémité initiale et une extrémité terminale ou finale. Unarc dont l’extrémité initiale et terminale est confondue est également appelé

Page 16: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

14 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

boucle, comme pour le cas non-orienté, de même que deux arcs qui ont lesmêmes extrémités initiales et terminales sont des arcs parallèles ou multiples.Deux arcs a et b dont l’extrémité initiale de l’un est l’extrémité terminale del’autre et vice versa sont dit tête bêche ; dans ce cas, les arcs a et b ne formentpas des arcs multiples.

Degré Le degré d’un sommet v d’un graphe non orienté, noté deg(v) est lenombre d’arêtes incidentes à v. Une boucle augmente le degré d’un sommetde 2. Un sommet de degré 1 est dit pendant. Un graphe est régulier si tousses sommets ont le même degré. Pour un graphe orienté, on parle de degrésortant ou degré extérieur, noté deg+(v) le nombre d’arcs sortant du sommetv. Le degré entrant ou degré intérieur, noté deg−(v) est le nombre d’arcs dontl’extrémité finale est v.

Chaîne, chemin, cycle, circuit Une chaîne est une suite alternée de som-mets et d’arêtes, débutant et finissant par un sommet, telle que chaque arêteest encadrée par ses deux extrémités. Un cycle est une chaîne dont les deuxextrémités sont identiques. Pour un graphe orienté, l’équivalent d’une « chaîneorientée » est appelé chemin. Dans ce cas, chaque arc est encadré d’abordpar son extrémité initiale puis par son extrémité terminale. Un « cycle orienté »est appelé un circuit.

La longueur d’une chaîne (ou d’un chemin) est le nombre d’arêtes (d’arcs)qui la compose. Une chaîne (ou un chemin) est simple si une arête (un arc) n’yapparaît pas plus d’une fois. Une chaîne (ou un chemin) est élémentaire si unsommet n’y apparaît pas plus d’une fois (à l’exception des extrémités).

Connexité Un graphe non orienté est connexe si toute paire de sommetsest reliée par une chaîne. Une composante connexe d’un graphe est un sous-ensemble maximal de sommets avec une chaîne entre chaque paire de sessommets. Un graphe orienté est fortement connexe s’il existe un chemin entretout couple de sommet (de l’un vers l’autre et vice versa).

Arbre, graphe partiel, sous-graphe Un arbre est un graphe connexe sanscycle. Les sommets pendants d’un arbre sont également appelés feuilles. Ungraphe sans cycle est une forêt (qui peut donc être composée de plusieursarbres). Un « arbre orienté » tel qu’il existe un chemin d’un sommet r à tous lesautres est une arborescence de racine r.

Si G = (V,E) et G′ = (V,E′) avec E′ ⊂ E, on dit que G′ est un graphepartiel de G. Si G = (V,E) et G′ = (V ′, E′) avec V ′ ⊂ V et que E′ comportetoutes les arêtes de E qui ont leurs deux extrémités dans V ′, on dit que G′

est un sous-graphe de G induit ou engendré par V ′. Un arbre recouvrant d’ungraphe G est un graphe partiel de G qui est un arbre.

Graphe eulérien, hamiltonien Un graphe est eulérien s’il possède unechaîne (ou un chemin, dans le cas orienté) passant par toute ses arêtes (outous ses arcs) exactement une fois. Un graphe est hamiltonien s’il possède unechaîne passant exactement une fois par chaque sommet du graphe. Certainsauteurs limitent les graphes eulériens ou hamiltoniens au cas où il existe un

Page 17: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.1 OPTIMISATION COMBINATOIRE 15

cycle qui passe par toute les arêtes ou tous les sommets exactement une fois(à l’exception du sommet de départ et d’arrivée, qui est confondu).

Graphes particuliers Un graphe simple non orienté est complet s’il existeune arête entre toute paire de sommet. Un graphe G = (V,E) tel que V =V1 ∪ V2, V1 ∩ V2 = ∅ et toute arête de E a l’une de ses extrémités dans V1 etl’autre dans V2 est biparti. Un graphe G = (V,E) tel que V = V1∪V2∪· · ·∪Vm,Vi∩Vj = ∅ ∀i, j ∈ V et que pour tout arête de E, il existe un i tel que l’arête al’une de ses extrémités dans Vi et l’autre dans Vi+1 est un graphe en couches.Une clique est un sous-ensemble des sommets d’un graphe qui induit un sous-graphe complet. Un ensemble stable est un sous-ensemble de sommets nonadjacents deux à deux.

Coloration, couplage Le problème de la coloration des sommets d’un gra-phe qui a été utilisé comme exemple introductif à la section 1.1 sur l’optimi-sation combinatoire permet de définir le nombre chromatique d’un graphe G,parfois noté χ(G), qui est le nombre minimum de couleurs nécessaires pourcolorer les sommets de G sans que deux sommets adjacents ne reçoivent lamême couleur. Le nombre de stabilité d’un graphe G, parfois noté α(G) est lecardinal maximum d’un ensemble stable de G. L’indice chromatique d’un gra-phe G, parfois noté q(G) est le nombre minimum de couleurs nécessaires pourcolorer les arêtes de G de sorte que deux arêtes incidentes ne reçoivent pasla même couleur.

Un couplage dans un graphe simple non orienté est un sous-ensembled’arêtes qui n’ont aucune extrémité commune. Un couplage est dit parfait s’ilest incident à tous les sommet du graphe. Un sous-ensemble des sommetsd’un graphe est un transversal s’il recouvre toutes les arêtes du graphe, c’est-à-dire si chaque arête est incidente à au moins un sommet du transversal.

Réseau

Dans bien des cas, on veut associer une valeur à chaque arête ou à chaquearc. La valeur w(e) ou poids de l’arête ou de l’arc e représentera typiquementune distance, un débit ou un coût. Un réseau, noté R = (V,E,w) est un graphemuni d’une pondération w : E → R. La longueur d’un chemin dans un réseauest la somme du poids de ses arcs.

Flots Pour résoudre des problèmes de flot, on associe une limitation de débitaux arcs d’un réseau, ou capacité wij > 0 entre les nœuds i et j. Un flotd’un sommet-source s à un sommets-puits t dans un réseau R = (V,E,w) estl’attribution d’un flux, ou quantité de flot xij telle que la somme des flux sortantd’un sommet soit égale à la somme des flux entrants (loi de conservation) :∑i∈Succ(j) xij =

∑k∈Pred(i) xki ∀i ∈ V, i 6= s, t. La valeur du flot de s à t est

la somme des flux qui sortent de s (qui est identique à celle qui entre en t, enraison de la loi de conservation). Lorsque 0 6 xij 6 wij∀(i, j) ∈ E, le flot estdit compatible ou admissible.

La séparation des sommets d’un réseau R = (V,E,w) en A ⊂ V et soncomplémentaire A ⊂ V permet de définir une coupe ⊆ E de A vers A, qui est

Page 18: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

16 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

l’ensemble des arcs qui ont leur extrémité initiale dans A et terminale dans A.La capacité d’une coupe est la somme des poids des arcs de la coupe.

Les flots permettent de modéliser des problèmes qui n’ont, à première vue,rien en commun avec des débits, comme par exemple les problèmes d’affec-tation de ressources (voir par exemple la section 2.4.2). Plus loin dans ce cha-pitre, nous passerons en revue quelques algorithmes bien connus et efficacespour la résolution de problèmes, comme la recherche d’un arbre, d’un cheminou d’un flot optimum dans un réseau. D’autres problèmes, comme celui de lacoloration de graphes, sont difficiles, et les seuls algorithmes connus pour lesrésoudre prennent un temps qui peut croître exponentiellement avec la tailledu graphe.

La classification en problèmes faciles et difficiles ressort de la théorie de lacomplexité. Les métaheuristiques ont été conçues pour trouver des solutionsacceptables avec un effort de calcul limité pour des problèmes en principedifficiles. Avant d’élaborer un nouvel algorithme sur la base des principes desmétaheuristiques, il est essentiel de s’assurer que le problème traité est biendifficile et qu’il n’existe pas déjà un algorithme efficace pour le résoudre. Lasuite de ce chapitre expose quelques bases théoriques dans le domaine de laclassification des problèmes selon leur difficulté.

1.2 Éléments de théorie de la complexité

La théorie de la complexité a pour but de classer les problèmes afin depouvoir prédire s’ils seront facile ou non à résoudre. Très grossièrement, ense limitant à des méthodes de résolutions séquentielles, on considère qu’unproblème est facile si l’on connaît un algorithme dont l’exécution se réaliseavec nombre d’opérations limité par une fonction polynomiale du volume dedonnées à traiter. On peut d’emblée se poser la question de savoir pourquoi lafrontière de la difficulté doit se situer sur la classe des polynômes et pas surcelle des fonctions logarithmiques, trigonométriques, ou encore exponentielles.

La raison est très simple : on conçoit parfaitement que l’on ait besoin deplus d’opérations pour traiter un plus gros volume de données, ce qui élimineles fonctions non croissantes, comme les fonctions trigonométriques. Si l’onse limite aux méthodes séquentielles, on conçoit aisément que l’on doive lirechaque donnée au moins une fois, ce qui implique une croissance au moinslinéaire du nombre d’opérations, et l’élimination des fonctions logarithmiques,racine carrée, etc. Il faut se rendre compte que dans le cas du traitement enparallèle des données par plusieurs tâches, il est tout à fait raisonnable de défi-nir une classe de problèmes (très faciles), demandant un nombre d’opérationset une mémoire par processeur croissant au plus logarithmiquement avec levolume des données. Un exemple de tels problèmes est l’extraction du plusgrand des nombres d’un ensemble.

Finalement, il faut considérer le fait qu’une fonction exponentielle (soit ausens mathématique telle que 2x, mais aussi des extensions telles que xlog(x),x! ou xx) finissent toujours par croître plus rapidement que n’importe quelpolynôme, et cette croissance est réellement impressionnante. On peut citerl’exemple d’un algorithme qui nécessiterait 350 opérations pour un problèmeavec 50 données, et qui s’exécuterait sur une machine capable de réaliser109 opérations à la seconde : dans ce cas, la machine ne finirait son travail

Page 19: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.2 ÉLÉMENTS DE THÉORIE DE LA COMPLEXITÉ 17

qu’après 23 millions d’années. Par comparaison, la résolution d’un problèmede taille 10, donc 5 fois plus petit, avec le même algorithme ne prendrait que60µs. Ainsi, il ne serait pas raisonnable en pratique de considérer comme faciledes problèmes nécessitant un nombre exponentiel d’opérations pour être réso-lus. Or, les problèmes combinatoires ont un nombre exponentiel de solutions.Par conséquent, les algorithmes d’énumération complète, parfois qualifiés de« force brute », ne peuvent pas raisonnablement être considérés comme ac-ceptables. Ainsi, le calcul d’un plus court chemin entre deux sommets d’unréseau ne se résout pas en énumérant l’ensemble des chemins (il y en a unnombre exponentiel) et en isolant le plus court, mais à l’aide d’algorithmesfaisant appel à des propriétés mathématiques du plus court chemin. Ces al-gorithmes effectuent un nombre d’opérations polynomial en la taille du réseau.Le problème de la recherche d’un plus court chemin est donc un problèmesimple. Par contre, la recherche d’un plus long (ou d’un plus court) cheminsimple ou élémentaire (sans boucles ou sans passer deux fois par le mêmesommet) entre deux sommets est un problème difficile, car on ne connaît pasd’algorithme polynomial pour le résoudre.

Pour terminer, il faut mentionner que la classe des polynômes présenteune propriété mathématique intéressante : elle est fermée. La composition dedeux polynômes est encore un polynôme. Pratiquement, dans le contexte dela programmation, cela signifie que si à l’intérieur d’un algorithme, on utilise unnombre polynomial de fois un sous-algorithme, lui-même polynomial, le nom-bre total d’instructions effectuées par tous les appels du sous-algorithme estencore polynomial.

1.2.1 Complexité algorithmique

Il ne faut pas confondre théorie de la complexité et complexité algorith-mique. Comme déjà mentionné, la théorie de la complexité a pour objet laclassification des problèmes. La complexité algorithmique a pour but d’évaluerles ressources nécessaires à l’exécution d’un algorithme donné. Il est doncpossible de mettre au point un algorithme de complexité élevée pour un pro-blème appartenant à une classe de complexité « simple ». Pour pouvoir mettreun problème dans une classe de complexité, on ne supposera pas que l’onutilise un algorithme donné pour résoudre ce problème, mais on analysera lesperformances du meilleur algorithme possible — pas forcément connu — pource problème et s’exécutant sur un type de machine donné.

Il ne faut pas non plus confondre la simplicité d’un algorithme (exprimé parexemple par le nombre de lignes de code nécessaires pour l’implanter) et sacomplexité. En effet, un algorithme simple peut être de complexité élevée. Parexemple, pour tester si un nombre entier p est premier, on peut essayer de lediviser par tous les nombres entiers entre 2 et

√p, si aucun de ces nombre ne

mène à une division sans reste, on peut en conclure que p est premier. Sinon,on dispose d’un certificat (un diviseur de p) prouvant que p n’est pas premier.Cet algorithme n’est cependant pas polynomial en la taille des données : eneffet, il suffit de n = log2(p) bits pour représenter le nombre p. L’algorithmenécessite donc un nombre de divisions proportionnel à 2n/2, ce qui n’est paspolynomial. Or, on a prouvé en 2002 qu’il existe un algorithme polynomial per-mettant de détecter si un nombre p est premier. Comme on peut s’en douter,

Page 20: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

18 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

cet algorithme n’est pas vraiment élémentaire ; son analyse et son élaborationconstituent même des tâches aux limites des capacités humaines. Donc, testersi un nombre est premier est un problème simple (car il existe un algorithmepolynomial pour le résoudre), mais l’algorithme en question est toutefois dif-ficile à implanter et requerrait un temps de calcul prohibitif pour montrer que243112609 − 1 est premier. Inversement, il peut exister des algorithmes qui enthéorie pourraient dégénérer mais qui se comportent tout-à-fait bien en pra-tique, comme l’algorithme du simplexe en programmation linéaire.

Les ressources utilisées pour durant l’exécution d’un algorithme sont limi-tées. Elles sont de plusieurs types : nombre de processeurs, place mémoire,temps. En se restreignant à cette dernière ressource, si l’on désire mesurerl’efficacité d’un algorithme, on pourrait évaluer sa durée d’exécution sur unemachine donnée. Malheureusement, cette mesure présente de nombreusesfaiblesses. Tout d’abord, elle est relative à une machine particulière, dont ladurée de vie est limitée à quelques années. Ensuite, la manière dont l’algo-rithme a été implanté (langage de programmation, compilateur, options, sys-tème d’exploitation) peut influencer énormément son temps d’exécution. Parconséquent, on préfère mesurer le nombre d’opérations caractéristiques qu’unalgorithme va effectuer. En effet, ce nombre ne dépend pas de la machine oudu langage et peut parfaitement s’évaluer théoriquement.

On appelle complexité d’un algorithme une fonction f(n) qui donne le nom-bre d’opérations caractéristiques exécutées dans le pire des cas lorsqu’il s’exé-cute sur un problème dont le volume des données est n. Il faut mentionner quecette complexité n’a rien à voir avec la longueur du code ou la difficulté deprogrammation et que l’on ne se préoccupe que rarement du nombre moyend’opérations, car ce nombre est en général malaisé à évaluer. En effet, il fau-drait faire la moyenne sur tous les jeux de données possibles. De plus, l’éva-luation du pire des cas est très importante dans les applications où le tempsde réponse est critique.

1.2.2 Notation de Bachmann-Landeau

Pour évaluer le nombre d’opérations qu’effectuera un algorithme sur un jeude données dont le volume est n, on se contente en pratique d’une évalua-tion grossière par surestimation. Supposons que deux algorithmes, A1 et A2

effectuent, respectivement pour un même problème de taille n, f(n) = 10n2 etg(n) = 0, 2 · n3 opérations. Il est clair que pour un jeu de données avec n = 10,A1 effectue 5 fois plus d’opérations que A2. Par contre, dès que n > 50, c’estA2 qui en fera le plus. En réalité, quels que soient les cœfficients positifs den2 et n3 dans f(n) et g(n), la fonction g sera plus grande que f à partir d’uncertain n. On appelle ordre la croissance asymptotique d’une fonction.

Définition Si f et g sont deux fonctions réelles d’une variable réelle x, on ditque f est d’ordre inférieur ou égal à g s’il existe deux réels positifs x0 et c telsque ∀x > x0, f(x) 6 c · g(x).

Cela signifie que g devient plus grande que f à partir d’un certain nom-bre x0, à un facteur constant c près. Ceci est noté à l’aide de la notation deBachmann-Landau ou notation grand O : f est en O(g) ou encore f ∈ O(g).L’intérêt pratique de cette notation est qu’il est souvent aisé de trouver une

Page 21: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.2 ÉLÉMENTS DE THÉORIE DE LA COMPLEXITÉ 19

fonction g qui majore asymptotiquement la fonction exacte f (inconnue ou dif-ficile à évaluer) donnant le nombre d’opérations d’un algorithme. On dira quecet algorithme est en O(g).

Parfois, on ne se préoccupe pas du pire des cas, mais du meilleur des cas.On écrit alors f ∈ Ω(g) lorsque l’on sait que le nombre f d’opération sera d’unordre supérieur à g.

Mathématiquement, f ∈ Ω(g) si ∀x > x0, f(x) > c · g(x), ce qui est équi-valent à g ∈ O(f). Cette notation est utile en particulier pour montrer qu’un al-gorithmeA est moins performant qu’un autre B (e.g. B effectue dans le meilleurdes cas au moins autant d’opérations queA n’en effectue dans le pire des cas)ou qu’un algorithme C est optimal (e.g. C résout un problème en effectuant dansle pire des cas un nombre d’opérations pas plus grand que le minimum qui estrequis par n’importe quel algorithme pour résoudre ce problème).

Si le meilleur et le pire des cas sont les mêmes, c’est-à-dire si ∃0 < c1 < c2tel que c1 ·g(n) 6 f(n) 6 c2 ·g(n) alors on notef ∈ Θ(g). Il faut bien différencierla notation Θ(·) d’une notion (souvent mal définie) de complexité moyenne : eneffet, si l’on prend l’algorithme de tri rapide de n éléments, on peut dire qu’ilsera en Ω(n) et en O(n2), mais pas en Θ(n · log(n)), même si en moyenne ilprend un temps proportionnel à n · log(n).

Cependant, on peut montrer que l’espérance du temps de calcul de l’algo-rithme de tri rapide pour un ensemble de n éléments aléatoirement mélangésest proportionnelle à (n · log(n)). Les notations O(·) (espérance ou moyennethéorique) et O(·) (moyenne empirique) seront utilisées plus loin, tout en souli-gnant qu’elles ne sont pas couramment utilisées car on doit spécifier sur quelensemble de problèmes on prend la moyenne, quelle est la probabilité d’appa-rition de chaque exemple de problème, etc.

En mathématiques, et plus rarement en informatique, on rencontre des no-tations petit o et associées , qui ont pour définition :

— f ∈ o(x) si limx→∞g(x)f(x) > 0

— f ∈ ω(g) si limx→∞f(x)g(x) > 0

— f ∼ g si limx→∞f(x)g(x) = 1

Exprimer la complexité d’un algorithme à l’ordre près présente de multiplesavantages :

— f ∈ O(g) signifie que la fonction g est un majorant de la complexité réelle,ce qui permet souvent de trouver, par un calcul grossier et sommaire unefonction g, alors que la déduction de f ∈ Θ(g) aurait été beaucoup pluscomplexe.

— 25n3 = O(3n3) et 3n3 = O(25n3), ce qui signifie que deux fonctionsdifférant uniquement par un facteur sont du même ordre, ce qui permetde s’affranchir des vitesses relatives des calculateurs. Plutôt que d’écrireO(25n3), on écrira donc O(n3), ce qui est équivalent et plus simple.

— 3n3 + 55n = O(n3), ce qui implique que l’on peut négliger les termesd’ordre inférieur et ne retenir que la puissance la plus élevée.

Il est important d’insister sur le fait que la complexité d’un algorithme estune notion théorique, qui se dérive par réflexion et calculs qui peuvent êtrefaits avec une feuille et un crayon. Cette complexité s’exprime généralement

Page 22: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

20 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

1015ns

µs

s

h

αΩ

101 102 103 104 105 106 107 108 109 1010 1011 1012 1013 1014

n

O(n!)

O(2n)

O(n3)

O(n2)

O(n log n)O(n)

O(log n)

O(1)

FIGURE 1.3 – Illustration de la croissance de quelques fonctions souvent utilisées pourexprimer la complexité d’un algorithme. L’axe horizontal donne la taille du problème(avec une croissance exponentielle) et l’axe vertical donne l’ordre de grandeur du tempsde calcul (avec une croissance bi-exponentielle).

au moyen de l’ordre du temps de calcul (ou d’un nombre abstrait d’opérationseffectuées par un processeur virtuel) en fonction de la taille du problème. Parordre croissant, les complexités que l’on rencontre le plus fréquemment sont :O(1) (constante), O(log(n)) (logarithmique ; on ne spécifie pas la base du lo-garithme, car O(loga(n)) = O(logb(n)) ), O(nc) (puissance fractionnaire ; avec0 < c < 1), O(n) (linéaire), O(n · log(n)) (log-linéaire ou quasi-linéaire), O(n2)(quadratique), O(n3) (cubique), O(nc) (polynomial ; avec c > 1 constante),O(nlog(n)) (quasi-polynomial ; super-polynomial, sous-exponentiel), O(cn) (ex-ponentiel, avec c > 1 constante), O(n!) (factoriel). La figure 1.3 illustre la crois-sance de quelques-unes de ces fonctions.

1.2.3 Classes de complexité de base

La théorie de la complexité est une branche qui s’est considérablementdéveloppée depuis le début des années 70, lorsque Cook a montré qu’il exis-tait un problème qui, si l’on était capable de le résoudre en temps polynomial,permettrait d’en résoudre un grand nombre d’autres efficacement, comme levoyageur de commerce, la programmation linéaire en nombres entiers, la co-loration de graphes, etc.

Pour arriver à ce résultat, il a fallu formuler en termes mathématiques cequ’est un problème, comment fonctionne un ordinateur et préciser commentle temps de calcul peut être mesuré. Pour alléger au maximum cette théorie,on a simplifié le plus possible les concepts, à commencer par le types de pro-

Page 23: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.2 ÉLÉMENTS DE THÉORIE DE LA COMPLEXITÉ 21

blèmes considérés. Ici, on se restreindra donc aux problèmes de décision. Unproblème de décision est formalisé par un problème générique et une ques-tion ; la réponse à ce problème est soit « oui », soit « non ».

Exemple de problème générique : Soit C = c1, . . . , cn un ensemblede n villes et des distances dij entières entre les villes ci et cj . Soit une borneB.

On devine ici un problème associé à celui du voyageur de commerce, quiest certainement le problème difficile d’optimisation combinatoire le plus connu.Cependant, comme on veut se restreindre à un problème de décision, la ques-tion posée ne sera pas « quelle est la tournée de longueur minimum », mais

Question : Existe-t-il un tour passant par toutes les villes de C et n’ayantpas une longueur supérieure à B ? (i.e. trouver σ, une permutation des élé-ments 1, 2, ?, n telle que dσn,1 +

∑n−1i=1 dσi

, dσi+16 B. )

Schéma de codage, langage et machine de Turing déterministe

Un exemple de problème (appelé parfois une « instance », suite à une mau-vaise traduction) consistera en une variable de ce type, variable qui devra êtrecontrainte. Plus généralement, on peut représenter ce problème sous la formed’un fichier de texte. Il faut alors utiliser certaines conventions, par exempledonner sur la première ligne n, le nombre de villes, la borne B sur la secondeet chacune des suivantes contiendra trois nombres, interprétés comme i, j etdij . En d’autres termes, on utilise un schéma de codage.

Formellement, en prenant des notations de la théorie des langages, prochesde celles utilisées en techniques de compilation (grammaires formelles), on aun ensemble fini de symboles ou alphabet Σ. On désignera par Σ∗ l’ensembledes chaînes finies construites avec l’alphabet Σ. Un schéma de codage e, pourun problème génériqueπ, permet de décrire tout exemple I de π par une chaînex de Σ∗. Par exemple, pour le voyageur de commerce, I contient les coeffi-cients dij ainsi que la borne B.

Relativement à un problème π et à un schéma de codage e, les chaînes deΣ∗ peuvent être partitionnées en trois classes :

1. Les chaînes qui ne codent pas un exemple I de π.

2. Les chaînes qui codent un exemple I de π pour lequel la réponse est« non ».

3. Les chaînes qui codent un exemple I de π pour lequel la réponse est« oui ».

Cette dernière classe est appelée le langage associé à π et à e et estnotéL(π, e).

En informatique théorique ou plus précisément en théorie des automates,on étudie la puissance de calcul de divers modèles de calculateurs. Parmi lesautomates les plus simples, on trouve les automates à états fini, qui sont parexemple utilisés pour mettre au point ou analyser un protocole de communica-tion. Ils sont constitués d’états, représentés par les sommets d’un graphe et detransitions, représentées par des arcs. Lorsqu’on lui fournit un mot en entrée,

Page 24: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

22 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

l’automate passe d’un état à un autre selon la lettre du mot en cours de lectureet des transitions associées. Comme un tel automate a un nombre fini d’états,cette machine a donc une mémoire bornée.

Un modèle un peu plus complexe est un automate à pile, fonctionnant de fa-çon semblable à une machine à états finis mais disposant d’une pile. À chaqueétape on lit une lettre du mot ainsi que le symbole en sommet de pile (si ellen’est pas vide) et on se met dans un nouvel état, en empilant au besoin unnouveau symbole en sommet de pile. Ce type d’automate permet de faire descalculs un peu plus complexes, par exemple reconnaître les mots d’un langagenon contextuel (e.g. effectuer l’analyse syntaxique d’un programme décrit parune grammaire de type 2). Un modèle de calculateur plus puissant qu’un auto-mate à pile est la machine de Turing.

Machine de Turing déterministe Pour pouvoir représenter mathématique-ment le fonctionnement d’un ordinateur, Allan Turing a imaginé en 1936 unemachine fictive (il n’existait pas d’ordinateurs à cette époque) dont le fonction-nement peut être modélisé par une fonction de transition. Avec cette machine,il est possible de mettre en œuvre tous les algorithmes usuels ou de recon-naître en un temps fini un mot généré par une grammaire générale de type 0.La figure 1.4 illustre une telle machine, composée d’un programme qui com-mande le défilement d’une bande magnétique ainsi qu’une tête de lecture etd’écriture.

Programme δ

État

Tête de lecture-écriture

0 1 0 1 10 0 1 00 1 1 b b0b b b 1 1b 00 · · ·· · ·0 1 2 3 4-1-2

Cases

Bande infinie

FIGURE 1.4 – Schéma de principe d’une machine de Turing, qui permet de modéliser etde formaliser un calculateur

Un programme pour machine de Turing déterministe est spécifiée par :

1. Un alphabet de bande Γ, qui est un ensemble de symboles pouvant êtreécrits sur la bande. Γ contient en particulier Σ, l’ensemble des symbolesutilisés pour coder un problème, ainsi qu’un symbole spécial b (blanc)n’appartenant pas à Σ et éventuellement d’autres symboles de contrôle.

2. Un ensemble d’états Q, comportant au moins trois éléments particuliersq0, qY et qN , représentant respectivement l’état initial de la machine et les

Page 25: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.2 ÉLÉMENTS DE THÉORIE DE LA COMPLEXITÉ 23

états finaux correspondant à la réponse « oui » et « non » de l’exemplede problème.

3. Une fonction de transition δ : Q \ qY , qN × Γ → Q× Γ×−1, 1.

Cette fonction représente les actions que doit effectuer la machine lors-qu’elle se trouve dans un certain état et qu’elle lit un certain symbole. Unemachine de Turing fonctionne comme suit : Elle se trouve dans l’état initialq0, sa tête de lecture et d’écriture est placée sur la case 1 ; la bande contientla chaîne x ∈ Σ∗ dans les cases 1 à |x| et b pour toutes les autres cases.Soit q, l’état courant de la machine, σ le symbole lu sur la bande ainsi que(q′, σ′,∆) = δ(σ, q). Un pas de la machine consiste à :

— Effacer σ sur la bande et écrire σ′ à la place.

— Déplacer la tête de lecture d’une case à gauche si ∆ = −1 et d’une caseà droite si ∆ = 1.

— Se mettre dans l’état q′.

La machine s’arrête lorsqu’on se trouve dans l’un des deux états qY ou qN .C’est pour cette raison que la fonction de transition δ n’est définie que pour lesétats non finaux de la machine.

Bien que très simple au niveau conceptuel, une machine de Turing permetde représenter schématiquement tout ce qui se passe dans un ordinateur cou-rant, contrairement à d’autres modélisations de machines plus simples, commeles automates à états finis (qui n’ont qu’une tête de lecture se déplaçant tou-jours dans le même sens) ou les automates à pile. Ces machines permettenttout de même d’analyser des expressions régulières ou des grammaires indé-pendantes du contexte, ce qui est suffisant pour créer un analyseur syntaxique.

Exemple de programme Soit la machine M = (Γ,Σ, Q, δ) :Γ = 0, 1, bΣ = 0, 1Q = q0, q1, q2, q3, qY , qN

Symbole σ sur la bandeÉtat 0 1 bq0 (q0, 0, 1) (q0, 1, 1) (q1, b,−1)q1 (q2, b,−1) (q3, b,−1) (qN , b,−1)q2 (qY , b,−1) (qN , b,−1) (qN , b,−1)q3 (qN , b,−1) (qN , b,−1) (qN , b,−1)

Tableau 1.1 – Spécification de la fonction de transition δ d’une machine de Turing.

Classe P des langages

La classe P (pour « polynomial ») contient les problèmes que l’on considèrecomme faciles, c’est-à-dire ceux dont on connaît un algorithme dont l’exécu-tion effectuera un nombre d’opérations limité à un polynôme en la taille desdonnées représentant le problème. Plus formellement, cette classe est définie

Page 26: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

24 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

de la manière suivante : On dit que la machine M accepte x ∈ Σ∗ si, et seule-ment si M s’arrête dans l’état qY . Le langage reconnu par M est l’ensembledes chaînes x ∈ Σ∗ telles que M accepte x. On peut vérifier dans l’exemple deprogramme donné par le tableau 1.1 que le langage reconnu par la machinesont les chaînes qui codent en binaire un nombre divisible par 4 (bits de poidsfort au début).

Un algorithme est un programme qui s’arrête pour toute chaîne x ∈ Σ∗. Letemps de calcul d’un algorithme est le nombre de pas effectués par la machineavant arrêt. La complexité d’un programmeM , est le temps de calcul maximumTM (n) que la machine a besoin pour s’arrêter, quelle que soit la chaîne x delongueur n écrite sur la bande initialement. On dit qu’un programme pour ma-chine de Turing déterministe est en temps polynomial s’il existe un polynôme ptel que TM (n) 6 p(n)

La classe P des langages comprend tous les langages L tels qu’il existeun programme pour machine de Turing déterministe reconnaissant L en tempspolynomial. Par abus de langage, on dira que le problème π appartient à laclasse P si le langage associé à π et à un schéma de codage e (non spécifiémais supposé raisonnable) appartient à P . Lorsque l’on utilise l’expression « ilexiste un programme », on fait en quelque sorte l’hypothèse que l’on dispose dumeilleur programme possible pour ce problème, mais sans forcément connaîtrece programme. Inversement, si l’on connaît un programme — pas forcément lemeilleur — s’exécutant en temps polynomial pour ce problème, alors on peutaffirmer que le problème fait partie de la classe de complexité P .

Classe NP des langages

La classe NP (pour « polynomial non déterministe ») des langages com-prend tous les problèmes pour lesquels on peut vérifier en temps polynomialqu’une solution donnée produit la réponse « oui ». Pour qu’un problème fassepartie de cette classe, les exigences sont moins grandes que pour la classeP , puisqu’on ne demande pas de pouvoir trouver une solution en temps po-lynomial, mais seulement de pouvoir vérifier en temps polynomial l’exactituded’une solution donnée. Pratiquement, cette classe contient des problèmes dif-ficiles, pour lesquels on ne connaît pas d’algorithme de résolution en tempspolynomial en la taille des données.

Afin de formaliser cette définition, les théoriciens de l’information ont ima-giné un nouveau type de calculateur théorique, la machine de Turing non dé-terministe, qui n’a pas son équivalent matériel dans le monde dans lequel nousvivons. Conceptuellement, cette machine est composée d’un module qui de-vine la solution du problème et l’écrit sur les cases de la bande d’indices né-gatifs (voir la figure 1.5). Cet artifice permet de s’affranchir de notre ignoranced’un algorithme efficace pour résoudre un problème : la machine le devine.

La spécification d’un programme pour machine de Turing non déterministeest identique à celle d’une machine déterministe. Initialement la machine setrouve dans l’état q0, la bande contient la chaîne x codant le problème dans lescases 1 à |x| de la bande et le programme est inactif. Suit alors une phase divi-natoire durant laquelle le module écrit des symboles aléatoires dans les casesnégatives et s’arrête arbitrairement. Ensuite, le programme de la machine s’ac-tive et elle fonctionne comme une machine de Turing déterministe.

Page 27: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.2 ÉLÉMENTS DE THÉORIE DE LA COMPLEXITÉ 25

· · ·

Programme δ

État

Tête de lecture-écriture

0 1 0 110 0 1 00 1 1 b b0b 1 0 1 1b 00 · · ·0 1 2 3 4-1-2

Cases

Bande infinie

Module divinatoire

Tête d’écriture

FIGURE 1.5 – Schéma de principe d’une machine de Turing non déterministe, qui per-met de de formaliser la classe NP mais n’existe pas dans la réalité

Avec une telle machine, il est clair qu’une chaîne donnée x peut engendrerdivers calculs, à cause du caractère non déterministe de la phase divinatoire.Un problème ayant une solution peut engendrer des exécutions se terminantpar l’état qN de la machine, ou des exécutions de diverses durées se terminantpar l’état qY (mais la machine ne peut pas terminer dans l’état qY pour unproblème n’ayant pas de solution). Le langage LM reconnu par la machine Mest par définition l’ensemble des chaînes x ∈ Σ∗ telles qu’il existe au moins uncalcul pour lequel la chaîne x est acceptée. Le temps de calcul TM (n) est lenombre minimum de pas qu’effectue la machine pour accepter une chaîne x delongueur n. Le nombre de pas de la phase divinatoire n’est pas comptabilisé.La complexité d’un programme est définie de manière similaire à la définitionpour une machine déterministe.

La classe NP des langages est formellement définie comme étant l’en-semble des langages L pour lesquels il existe un programme M pour machinede Turing non déterministe reconnaissant L en temps polynomial. Il convientd’insister sur le fait que la dénomination de cette classe vient de l’abréviationanglophone « Non-deterministic Polynomial » et n’a nullement « non polyno-mial » pour origine.

Théorème : Si π est dans NP , il existe un polynôme p(n) tel que π peut êtrerésolu par une machine de Turing déterministe en O(2p(n)).

Ce théorème dit que l’on peut résoudre avec une machine ordinaire tousles problèmes de la classe NP , mais en un temps exponentiel en la taille desdonnées. Sa démonstration est très simple, il suffit de considérer que le tempsde vérification d’une solution potentielle est majoré par un polynôme q(n) et decompter le nombre de chaînes devinables. Si l’on sait qu’il existe une solutionpour laquelle la machine s’arrête en q(n) étapes au plus, cela signifie que lalongueur d’une solution est également bornée par q(n). Par conséquent, lenombre de chaînes devinables est donné par |Γ|q(n) et le temps de calcul parq(n) · |Γ|q(n). Comme q(n) < |Γ|n, on peut écrire q(n) · |Γ|q(n) < |Γ|q(n)+n <|Γ|q′(n) pour un certain polynome q′(n). En choisissant q′(n) · log2(|Γ|) = p(n),

Page 28: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

26 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

Problème 1

Données 1

Résultat 1

Problème 2

Données 2

Résultat 2

Codage

f(Donnees1)

Reconstruction

∝T (n)

Résolution

FIGURE 1.6 – Transformation en temps T (n) d’un problème 1 vers un problème 2. Dansla pratique seule sont réalisées les opérations marquées par les flèches pleines.

on a |Γ|q′(n) = 2q′(n)·log2(|Γ|), d’où le résultat.

Transformation polynomiale : La notion de transformation polynomiale d’unpremier problème en un second problème est fondamentale en théorie de lacomplexité, car elle est d’une grande utilité pour la classification des problèmes.En effet, si l’on sait — ou, pour les problèmes difficiles : si l’on savait — ré-soudre efficacement le second problème et que le premier peut se mettre sousla forme du second par une transformation peu coûteuse en ressources decalcul, alors on peut aussi résoudre efficacement le premier problème.

Formellement, on dit qu’un premier langage L1 ⊂ Σ∗1 se transforme polyno-mialement en un second langage L2 ⊂ Σ∗2 s’il existe une fonction f : Σ∗1 → Σ∗2,évaluable en temps polynomial par une machine de Turing déterministe, telleque pour tout exemple de problème x ∈ Σ∗1 dont la réponse est « oui », f(x) estun exemple du second problème avec réponse « oui ». Une telle transformationpolynomiale est notée L1 ∝ L2 ; si l’on désire spécifier le temps T (n) néces-saire pour évaluer la fonction f , on peut noter la transformation L1 ∝T (n) L2.

La figure 1.6 illustre le principe d’une transformation d’un problème vers unautre. Dans la définition d’une transformation, on ne se préoccupe que de lacomplexité de l’évaluation de la fonction f et du fait que les réponses « oui-non » des deux problèmes soient les mêmes. La complexité de la résolution duproblème 2 ou celle de la reconstruction d’une solution du problème 1 à partirde celle du problème 2 n’entre pas en considération.

Exemple de transformation polynomiale : On considère les deux pro-blèmes suivants : le parcours hamiltonien dans un graphe (un cycle passantune, et une seule fois par tous les sommets du graphe) et un problème devoyageur de commerce de longueur bornée B dans un réseau (existe-t-il uncycle passant une, et une seule fois par tous les sommets du réseau et depoids ne dépassant pas B). La fonction f permettant de transformer le graphedu parcours hamiltonien en un exemple de voyageur de commerce construitun réseau complet sur le même ensemble de sommets que pour le graphe,en associant un poids de 0 aux arêtes existant dans le graphe et un poids de1 aux arêtes qui n’existent pas dans le graphe. La borne B est égale à 0. Iln’existe une solution de longueur 0 au problème du voyageur de commerce

Page 29: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.2 ÉLÉMENTS DE THÉORIE DE LA COMPLEXITÉ 27

que si, et seulement s’il existe un parcours hamiltonien dans le graphe initial.On en déduit que le problème du parcours hamiltonien peut se transformer enun problème de voyageur de commerce. Il faut noter que l’inverse n’est pasforcément vrai.

Classe NP-Complet

On dit qu’un problème π fait partie de la classe de complexité NP-completsi le problème appartient à la classe NP et que tout problème de la classe NPpeut se transformer polynomialement en π.

Théorèmes : En partant de la définition d’une transformation polynomiale eten constatant que la composition de deux polynômes est encore un polynôme,on peut énoncer quelques théorèmes dont la démonstration est évidente.

— Si π est NP-complet et si π peut être résolus en temps polynomial, alorsP = NP .

— Si π est NP-complet et si π n’appartient pas à la classe P , alors P 6= NP .

— Si π1 se transforme polynomialement en π2 et π2 se transforme polyno-mialement en π3, alors π1 se transforme polynomialement en π3.

— Si π1 est NP-complet, π2 appartient à la classe NP et π1 se transformepolynomialement en π2, alors π2 est NP-complet.

On ne connaît pas de problème NP-complet qui se résolve en temps po-lynomial. On conjecture qu’il n’en existe pas. La dernière propriété énoncéeci-dessus est très souvent utilisée pour montrer qu’un problème π2, de com-plexité a priori inconnue, est NP-complet. Pour cela, on choisit un problème π1

dont on sait qu’il est NP-complet et on montre comment on peut transformerpolynomialement n’importe quel exemple de π1 en un exemple de π2.

Théorème de Cook (1971)

La définition de la classe NP-complet présentée ci-dessus est purementthéorique. Il pourrait s’avérer que l’on n’ait construit que du vent et que cetteclasse de complexité soit vide ! Il convient donc de se poser la question : existe-t-il au moins un problème appartenant à cette classe ? Il est en effet loin d’êtreévident de trouver un problème « universel » de NP tel que tous les autresproblèmes de NP puissent se transformer polynomialement en ce problème.Il n’est pas possible d’imaginer quels sont tous les problèmes de NP , et en-core moins de trouver une transformation pour chacun d’eux vers le problèmeuniversel. Or, un tel problème existe, et le premier pour lequel on a démontréqu’il était NP -complet est le problème d’acceptabilité. À partir de ce résultat,on a réussi à montrer que tout un ensemble de problèmes faisaient aussi par-tie de la classe NP-complet, en utilisant le principe énoncé dans la remarqueci-dessus.

Problème d’acceptabilité : Soit un ensemble u1, . . . um de variables boo-léennes. On appel littéral une variable ou sa négation et une clause un en-semble de littéraux reliés entre eux par un « ou » logique. Une clause sera

Page 30: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

28 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

fausse si, et seulement si tous ses littéraux sont faux. Un problème d’accepta-bilité est un ensemble de clauses reliées entre elles par des « et » logiques. Unexemple de problème d’acceptabilité aura pour réponse « oui » s’il existe uneaffectation de valeurs aux variables booléennes telles que toutes les clausesdu problème soient simultanément vraies. Par exemple (u1∨u2)∧ (u1∨u2) estun exemple de problème acceptable. Par contre, (u1∨u3)∧(u1∨u3)∧(u1)∧(u2)n’est pas un exemple acceptable.

Démonstration du théorème de Cook : Pour montrer que le problème d’ac-ceptabilité est NP-complet, il faut tout d’abord vérifier que ce problème soitdans NP , ce qui est évident. Ensuite, il faut montrer que tout problème deNP peut se transformer polynomialement en un problème d’acceptabilité. Unetelle transformation ne peut se faire explicitement, car on ne peut pas prendreindividuellement tous les problèmes de NP et leur trouver une transformationadéquate, premièrement parce que le nombre de problèmes deNP est infini etdeuxièmement parce que trouver une transformation directe pourrait être trèsdifficile. Au lieu de cela, on montre implicitement qu’une telle transformationexiste, cette transformation pouvant être inconnue.

Pour prouver que cette transformation existe, on part de la définition de laclasse NP . Si un problème π appartient à cette classe de complexité, c’estqu’il existe un programme en temps polynomial pour machine de Turing nondéterministe reconnaissant π. Cette machine est spécifiée par son alphabet debande, son ensemble d’états et la fonction δ de transition. Si l’on veut montrerque π peut se transformer polynomialement en un problème d’acceptabilité, ilfaut trouver une fonction f qui, appliquée à π créera un exemple de problèmed’acceptabilité qui sera acceptable si, et seulement s’il existe une exécutionde la machine qui se termine dans l’état qY . Dans la mesure où l’on ne faitaucune supposition sur le problème π autre qu’il appartienne à NP , on auraainsi prouvé que tout problème de NP peut se transformer polynomialementen un problème d’acceptabilité, donc, par définition, que ce problème est NP-complet.

La construction de cette fonction f se fait par six groupes de clauses quine seront vraies que pour une exécution du programme conforme aux spécifi-cations de fonctionnement de la machine de Turing. Les variables booléennesconsidérées dans le problème d’acceptabilité seront : Qtq (au temps t, la ma-chine est dans l’état q), Htj (au temps t, la tête examine la case j) et Stjσ(au temps t, la case j de la bande contient le symbole σ). Comme le tempsde calcul est limité par un polynôme p(n) en la taille n du problème, il y a unnombre polynomial de variables booléennes. Ces six groupes assureront lesconformités suivantes :

1. En tout temps, la machine se trouve dans un et un seul état.

(Qtq0 ∨Qtq1 ∨ · · · ∨Qtqy ∨QtqN ) (on se trouve au moins dans un état).

(Qtq ∧Qtq′) ≡ (Qqt∨Qtq′) ∀q 6= q′ ∈ Q (on est au plus dans un état).

2. En tout temps, la tête examine exactement une case de la bande.

Ht,−p(n)+1 ∨Ht,−p(n)+2 ∨ · · · ∨Ht,p(n)+1) ∀t

Page 31: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.2 ÉLÉMENTS DE THÉORIE DE LA COMPLEXITÉ 29

(Htj ∨Htj′) ∀t,∀j 6= j′

3. En tout temps, chaque case de la bande contient exactement un symbole

(Stjσ0∨ Stjσ1

∨ · · · ∨ Stjσ|Λ|) ∀t,∀j

(Stjσ ∨ Stjσ′) ∀t,∀j,∀σ 6= σ′

4. Au temps 0 (début de la phase de vérification), on est dans l’état q0,la tête est sur la case 1, la bande contient dans les cases 1 à n lessymboles codant l’exemple de problème de π et il y a le symbole blancdans les autres cases non négatives (par contre, on ne sait pas ce qu’ily a dans les cases négatives qui devraient contenir une solution avecréponse « oui » au problème).

Q0q0 ∧H01 ∧ S00b ∧ S01x1∧ S02x2

∧ · · · ∧ S0nxn∧ S0n+1b ∧ · · · ∧ S0,p(n)+1,b

5. À un temps borné par un polynôme en n, la machine doit se trouver dansl’état qY .

Qp(n)qY

6. Pour tout temps, la configuration de la machine au temps suivant estdonnée par l’application de la fonction δ. Il faut donc écrire un ensemblede clause disant que si au temps t, la tête de lecture est en position j, quela machine est dans l’état q et qu’elle lit le symbole σ, alors, au temps t+1,la machine doit se trouver dans l’état q′, le symbole s′ doit être écrit dansla case j et la tête se trouver en position j + ∆, avec (q′, s′,∆) = δ(s, q).

Htj ∧Qtq ∧ Stjσ =⇒ Ht+1,j+∆ ∧Qt+1q′ ∧ St+1jσ′ ≡

(Htj∨Qtq∨Stjσ∨Ht+1,j+∆)∧(Htj∨Qtq∨Stjσ∨Qt+1q′)∧(Htj∨Qtq∨Stjσ∨St+1jσ′)

De plus, seule la case j peut être modifiée. Toutes les autres doiventconserver le symbole qu’elles avaient au temps t.

Htj ∧ Stjσ =⇒ St+1jσ ≡ (Htj ∨ Stjσ ∨ St+1jσ)

Maintenant que l’on a démontré que le problème d’acceptabilité était NP-complet, il est aisé de montrer que d’autres problèmes de NP le sont aussi.On donne ci-dessous l’exemple de la transformation polynomiale du problèmed’acceptabilité vers le problème de l’ensemble stable, ce qui prouve que cedernier problème est NP-complet.

Page 32: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

30 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

y

x

z

x

y

z

y

x ∨ y ∨ z x ∨ y y ∨ z

FIGURE 1.7 – Transformation de l’exemple de problème d’acceptabilité : (x ∨ y ∨ z) ∧(x ∨ y) ∧ (y ∨ z) en un problème de stable.

Problème de l’ensemble stable : Données : G = (X,E), un graphe et k,un entier Question : Existe-t-il un sous-ensemble X ′ ⊆ X, |X ′| = k tel que :∀i, j ∈ X ′, (i, j) /∈ E (sous-ensemble de k sommets sans connexion) ?

La transformation d’un exemple de problème d’acceptabilité vers un en-semble stable se fait de la façon suivante :

— On associe un sommet à tous les littéraux de toutes les clauses

— On relie en une clique (entièrement) tous les sommets associés à uneclause

— On relie les sommets-littéraux incompatibles (une variable et sa négation)

— Dans ce graphe, on cherche un ensemble stable de taille k = nombre declauses

Une telle transformation est illustrée en figure 1.7 pour un petit problème à troislittéraux et trois clauses.

Exemples de problèmes non encore classés : Les problèmes suivantsn’ont pas encore pu être classés plus précisément que dans NP :Dans un championnat de foot, chaque équipe joue une fois contre chaqueautre. L’équipe gagnante reçoit trois points, l’équipe perdante reçoit zéro points.En cas d’égalité, chaque équipe reçoit un point. Étant donné une suite descores pour chaque équipe, cette suite peut-elle être le résultat obtenu à lafin d’un championnat ?Remarque : si le gagnant reçoit seulement deux points, alors il existe un algo-rithme polynomial pour répondre à cette question.Est-il possible d’orienter les arêtes d’un graphe de telle sorte qu’il soit fortementconnexe et que chaque sommet ait un degré rentrant impair ?

Classe fortement NP-complet

Certains problèmes NP-complets, comme le problème du sac de montagne,se résolvent dans certains cas très bien au moyen d’algorithmes ad hoc (pro-grammation dynamique). Une des conditions pour que ces problèmes puissentse résoudre aisément est que le plus grand nombre apparaissant dans les don-nées du problème soit limité (pour le problème du sac de montagne, ce nombre

Page 33: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.2 ÉLÉMENTS DE THÉORIE DE LA COMPLEXITÉ 31

est le volume du sac). D’autres problèmes, au contraire, ne peuvent pas êtrerésolus efficacement, même si la valeur du plus grand nombre apparaissantdans le problème est limitée. On dit que l’on a affaire à un problème sur desnombres s’il n’existe pas de polynôme p(n) tel que le plus grand nombre Mapparaissant dans un exemple de problème de taille n soit borné par p(n).Le problème de bipartition d’un ensemble en deux sous-ensembles de poidségaux ou celui du voyageur de commerce sont donc des problèmes sur desnombres car, si l’on ajoute un bit à la taille du problème, M peut être multipliépar deux. Par conséquent, pour ces problèmes, M peut être en O(2n), ce quin’est pas polynomial.

Par contre, les problèmes d’acceptabilité, du stable ou du cycle hamiltonienne sont pas des problèmes sur des nombres (car ils ne font simplement pasintervenir de nombres).

On dit qu’un algorithme est pseudo-polynomial s’il s’exécute en un tempsborné par un polynôme dépendant de la taille n des données et du plus grandnombre M intervenant dans le problème. Le problème de bipartition d’un en-semble en deux sous-ensembles de poids égaux est un problème NP-completpour lequel il existe un algorithme pseudo-polynomial simple.

Exemple de problème de bipartition d’un ensemble : Est-il possible dediviser l’ensemble 5, 2, 1, 6, 4 en deux sous-ensembles de poids égaux ? Lasomme des poids pour cet exemple est de 18. On cherchera donc deux sous-ensembles de poids 9. Pour résoudre ce problème, on crée un tableau de nlignes, où n est le cardinal de l’ensemble, et M = 9 colonnes, où M est lamoitié de la somme des poids des éléments. On remplit certaines cases de cetableau avec des × en procédant ligne par ligne : Avec le premier élément, depoids 5, on arrive à créer un sous-ensemble de poids 0 (si on ne prend pascet élément) ou un sous-ensemble de poids 5 (en le prenant). On place doncdans la première ligne des × dans les colonnes 0 et 5. Avec les deux premierséléments, il est possible de créer des sous-ensembles dont le poids est lemême qu’avec un seul élément (en ne prenant pas le deuxième élément). Làoù il y a des× dans une ligne, on peut donc en mettre dans la ligne suivante. Enprenant le deuxième élément, on pourra créer des sous-ensembles de poids2 et 7, on mettra donc également des × là où on en a mis pour la premièreligne, mais décalé du poids du deuxième élément (ici : 2). On répète ensuitele procédé jusqu’à ce que tous les éléments aient été considérés. S’il y a un× dans une case le la dernière colonne, c’est qu’il est possible de créer unsous-ensemble de poids M , ce qui est le cas pour cet exemple. Une solutionest : 2, 1, 65, 4. La complexité de l’algorithme est O(M · n), ce qui est bienpolynomial en n et en M .

Somme des poidsÉlément 0 1 2 3 4 5 6 7 8 9

5 × ×2 × × × ×1 × × × × × × × ×6 × × × × × × × × ×4 × × × × × × × × × ×

Soit π, un problème sur des nombres et πp(n) les sous-problèmes de π res-treints aux exemples pour lesquels M 6 p(n). L’ensemble πp(n) ne fait donc

Page 34: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

32 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

intervenir que les problèmes de π ne contenant que des « petits » nombres.On dit que π est fortement NP-complet si, et seulement s’il existe un polynômep(n) tel que πp(n) est NP-complet.

Avec cette définition, un problème fortement NP-complet ne peut être ré-solu en temps pseudo-polynomial si la classe P est différente de la classe NP .Ainsi, le problème du voyageur de commerce est fortement NP-complet, car leproblème du cycle hamiltonien peut se transformer polynomialement en un pro-blème du voyageur de commerce avec une matrice de distance ne contenantque des 0 ou des 1. Par conséquent, comme le problème du cycle hamiltonienest NP-complet, les sous-problèmes de voyageur de commerce ne faisant in-tervenir que des petits nombres sont également NP-complets.

Par contre, les problèmes que l’on peut résoudre par programmation dyna-mique, comme le problème du sac de montagne ou celui de la partition d’unensemble ne sont pas fortement NP-complets. En effet, si pour ce dernier pro-blème la somme des poids des n éléments est bornée par un polynôme p(n),l’algorithme ci-dessus aura une complexité polynomiale O(n · p(n)).

1.2.4 Autres classes de complexité

D’innombrables autres classes de complexité ont été proposées. Parmicelles qui sont le plus fréquemment rencontrées dans la littérature et qui peu-vent être décrites de façon intuitive, on peut citer :

Classe NP-difficile Les problèmes considérés ci-dessus sont des problèmesde décision, et non des problèmes d’optimisation. Avec un algorithme dedichotomie on peut facilement résoudre le problème d’optimisation asso-cié à un problème de décision. Un problème est NP-difficile si tout pro-blème de NP peut se transformer en temps polynomial en ce problème.Contrairement à la classe NP-complet, on n’impose pas que ce dernierfasse partie de NP . Ainsi, un problème d’optimisation, dont la versiondécisionnelle est NP-complète, entre dans la catégorie des problèmesNP-difficiles.

Classe P-SPACE Les problèmes que l’on peut résoudre avec une machinedont la mémoire est limitée par un polynôme en la taille des donnéesfont partie de la classe P-SPACE. On n’impose ici aucune limite sur letemps de calcul, qui peut être exponentiel. Ainsi, tous les problèmes deNP sont dans la classe P-SPACE car il est possible de concevoir desalgorithmes d’énumération exhaustive ne nécessitant pas trop de mé-moire. Un exemple de problème de cette classe est de déterminer si unjeu (déterministe) à deux joueurs est inéquitable : en d’autres termes, sile joueur B perd à coup sûr si le joueur A ne fait pas d’erreurs. Ce pro-blème a peu de chances de faire partie de la classe NP , car on imaginemal que l’on puisse donner un certificat compact pour la solution d’unproblème de ce type.

Classe L Les problèmes que l’on peut résoudre avec une machine dont lamémoire de travail — c’est-à-dire en faisant abstraction de la place né-cessaire au stockage des données du problème — est bornée par un po-lynôme en la taille des données font partie de la classe L. Rentrent danscette classe des problèmes de recherche d’éléments dans des bases de

Page 35: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

1.2 ÉLÉMENTS DE THÉORIE DE LA COMPLEXITÉ 33

données dont la taille ne tiendrait pas dans la mémoire vive des ordina-teurs.

Classe NC La classe NC est celle des problèmes pouvant se résoudre entemps poly-logarithmique sur une machine disposant d’un nombre po-lynomial de processeurs. Les problèmes de cette classe peuvent doncrésoudre en parallèle en un temps plus faible que celui dont on a be-soin pour lire les données en séquentiel. Le tri des éléments d’un tableauentre dans la catégorie NC.

Peu de résultats ont été établi en ce qui concerne les relations existantesentre ces diverses classes de complexité. À l’exception des évidentes inclu-sions au sens large L ⊆ P ⊆ NP ⊆ NP-complet ⊆ P-SPACE et NC ⊆ P , iln’a été possible d’établir que L 6= P-SPACE. Il est communément conjecturéque P 6= NP , mais cette conjecture fait partie des quelques problèmes dumillénaire.

Page 36: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

34 ÉLÉMENTS DE THÉORIES DES GRAPHES ET DE LA COMPLEXITÉ

Exercices

Exercice 1.1. On cherche à dessiner 5 segments sur le plan de manière à ceque chaque segment en coupe exactement 3 autres. Formaliser ce problèmeen termes de graphes.

Exercice 1.2. Simplifier les expressions suivantes : O(n5 + 2n), O(5n + 22n

),Ω(n2 · n! + (n+ 2)!), Ω(nlog(log(n)) + 23n), O(nlog(n) + n5+cos(n))

Exercice 1.3. Écrire un programme pour machine de Turing déterministe quireconnaît si la sous-chaîne ane est contenue sur la bande. L’alphabet d’entréeest : Σ = a, c, e, n. Spécifier l’alphabet de bande Γ, l’ensemble Q des étatspossibles de la machine et la fonction de transition δ.

Exercice 1.4. Démontrer que la recherche d’une clique de taille donnée dansun graphe est un problème NP-complet.

Exercice 1.5. Montrer que l’on peut transformer un problème du voyageur decommerce asymétrique en un problème symétrique en doublant le nombre devilles.

Page 37: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Chapitre 2

Exemples et modélisation deproblèmes combinatoires

Maintenant que nous avons passé en revue les principales définitions dethéorie des graphes et de théorie de la complexité, nous pouvons donner quel-ques exemples de problèmes d’optimisation combinatoire. Certains de ces pro-blèmes sont faciles, mais l’ajout d’une contrainte qui semble anodine peut lesrendre difficiles. Nous rappellerons également brièvement le principe de fonc-tionnement de quelques algorithmes simples qui permettent de résoudre cer-tains de ces problèmes.

2.1 Arbres optimaux

La recherche d’un sous-graphe connexe de poids optimal est un problèmede base en théorie des graphes. De nombreuses applications nécessitent detrouver une telle structure comme étape préalable.

2.1.1 Arbre recouvrant de poids minimal

Le problème de la recherche d’un arbre recouvrant de poids minimal seformule ainsi : Étant donné un réseau R = (V,E,w) sur un ensemble V desommets, E d’arêtes munies d’une fonction de pondération w → R, on chercheun sous-réseau connexe, sans cycle, dont la somme des poids est minimale.Les deux algorithmes les plus connus pour résoudre ce problème sont celui deKruskal et celui de Prim. Ils sont basés tous deux sur une méthode gloutonne :à chaque étape on ajoute un élément à la structure que l’on construit, sansjamais remettre en question ultérieurement le choix de cet élément.

L’algorithme de Kruskal (2.1) démarre avec un graphe T = (V,ET = ∅) etajoute à ET successivement une arête de E de poids aussi faible que possibletout en veillant à ne pas créer de cycle. L’algorithme de Prim démarre avec ungraphe T = (V ′ = s, ET = ∅) et ajoute successivement un sommet v à V ′ etune arête e à ET , telle que le poids de e soit aussi faible que possible et qu’unede ses extrémité fasse partie de V ′ et l’autre non. Autrement dit, Kruskal partd’une forêt constituée d’autant d’arbres qu’il y a de sommets et cherche à réunir

Page 38: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

36 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

Algorithme 2.1 : (Kruskal) Recherche d’un arbre de poids minimum. Pour uneimplantation efficace, il faut utiliser une structure de données adéquate d’en-sembles disjoints pour pouvoir tester si l’arête que l’on tente d’ajouter fait partie dela même composante connexe ou non. Dans ce cas, la complexité de l’algorithmeest en O(|E| log |E|).

Entrées : R = (V,E,w) connexeRésultat : Arbre recouvrant T = (V,ET ) de poids minimum

1 Trier et renuméroter les arêtes par poids non décroissantw(e1) 6 w(e2) 6 · · · 6 w(e|E|);

2 ET = ∅;3 pour k = 1 . . . |E| faire4 si ET ∪ ek ne forme pas un cycle alors5 ET ← ET ∪ ek

Algorithme 2.2 : (Prim) Recherche d’un arbre de poids minimum. Pour une im-plantation efficace, il faut utiliser une structure de données adéquate pour extrairele sommet de L avec le plus petit poids (ligne 8) et pour modifier les valeurs despoids (ligne 14). Un tas de Fibonacci ou une queue de Brodal permettent uneimplantation de l’algorithme en O(|E|+ |V | log |V |).

Entrées : R = (V,E,w) connexe, un sommet particulier s ∈ VRésultat : Arbre recouvrant T = (V,ET ) de poids minimum

1 pour tous les Sommets i ∈ V faire2 λi ←∞ ; // Coût pour faire entrer i dans l’arbre3 predi ← ∅ ; // Prédécesseur de i

4 λs = 0 ; ET ← ∅;5 L← V ; // Liste des sommets à introduire dans T6 tant que L 6= ∅ faire88 Retirer de L le sommet i ayant le plus petit λi;9 si i 6= s alors

10 ET ← ET ∪ pi, i11 pour tous les Sommets v adjacent à i faire12 si j ∈ L et λj > w(i, j) alors1414 λj ← w(i, j);15 pj ← i;

Page 39: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.1 ARBRES OPTIMAUX 37

tous ces arbres en un seul alors que Prim part d’un arbre constitué d’un seulsommet et cherche à le faire croître jusqu’à tous les intégrer.

2.1.2 Arbre de Steiner

Le problème de l’arbre de Steiner est très proche de celui de l’arbre re-couvrant de poids minimum. La seule différence est que les sommets d’unsous-ensemble S ⊂ V ne doivent pas nécessairement figurer dans l’arbre. Sconstitue les sommets de Steiner. La version euclidienne de l’arbre de Stei-ner consiste à relier un ensemble donné de points du plan par des lignesdont la longueur est la plus faible possible. La figure 2.1 montre que l’arbrede poids minimum qui n’utilise que des arêtes reliant directement les sommetsqui doivent figurer dans l’arbre peut avoir un poids supérieur à un arbre où l’ona ajouté des nœuds de Steiner judicieusement choisis. Le choix des sommetsà ajouter engendre une combinatoire qui rend le problème NP-difficile.

Nœuds de Steiner

Nœuds ordinaires

(a) Arbre de poids minimum

(b) Arbre de Steiner

FIGURE 2.1 – Arbre de poids minimum 2.1(a) sur un ensemble n’utilisant que les nœudsordinaires, qui sont donc directement reliés entre eux et arbre de Steiner de poids mini-mum 2.1(b) où l’on peut utiliser des nœuds supplémentaires.

Deux modélisations du problème de l’arbre de Steiner peuvent naturelle-ment être imaginées :

— Sommets de Steiner à retenir Une solution peut être représentée parles sommets de Steiner à conserver dans l’arbre. Connaissant ces som-

Page 40: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

38 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

mets, l’arbre est facile à reconstituer par l’application de l’algorithme dePrim ou celui de Kruskal.

— Arêtes à conserver Une solution peut également être représentée parun ensemble d’arêtes. Ces arêtes doivent former un graphe connexe ettoucher tous les nœuds obligatoires

2.2 Chemins optimaux

La recherche de chemins optimaux est un problème vieux comme le mondeet bien connu du grand public, en particulier depuis que les automobiles sontéquipées en série de systèmes de navigation automatisés. Connaissant sa po-sition actuelle sur un réseau de transport, il s’agit de trouver le meilleur cheminvers une destination donnée. Le critère usuellement retenu pour l’optimalité duchemin est le temps, mais il peut également s’agir de la distance, notamments’il s’agit d’un trajet à faire à pied.

2.2.1 Plus court chemin

Formellement, on dispose d’un réseau R = (V,E,w) et on veut connaîtreun chemin dont la somme des poids des arcs d’un sommet de départ s vers unsommet-destination t est la plus faible possible. On utilisera ici de façon abu-sive le qualificatif de longueur du chemin pour désigner cette somme des poids,étant sous-entendu que les poids peuvent représenter autre chose qu’une dis-tance, comme par exemple un temps, une consommation d’énergie, etc. Auniveau de la complexité algorithmique, il n’est pas plus coûteux, dans le piredes cas, de trouver un chemin optimum vers un sommet particulier t ou pourl’ensemble de tous les sommets de V .

Il convient de préciser que cette formulation peut être problématique dansle cas d’une fonction de pondération quelconque : en effet, si l’on a des poidsnégatifs, le plus court chemin peut ne pas exister si l’on a un circuit de longueurnégative. L’algorithme le plus efficace pour trouver le plus court chemin dans unréseau où la fonction de pondération avec w(e) > 0 ∀e ∈ E est celui de Dijks-tra. Il est présenté dans l’algorithme 2.3. Pour une implantation efficace, il faututiliser une structure de données adéquate pour extraire le sommet de L avecle plus petit poids (ligne 7) et pour modifier les valeurs des poids (ligne 11).Comme pour l’algorithme de Prim 2.3, un tas de Fibonacci ou une queue deBrodal permettent une implantation de l’algorithme en O(|E|+ |V | log |V |).

On remarquera la très forte similarité entre cet algorithme et celui dePrim 2.2 pour la recherche d’un arbre de poids minimum. La recette qui afonctionné pour l’arbre de poids minimum fonctionne encore, avec quelquesrestrictions, pour la recherche d’un plus court chemin. La trame générale desméthodes gloutonnes, sur laquelle se base cette recette, est présentée dansla section 3.3 du chapitre consacré aux méthodes constructives. Le code 2.1donne une implantation de l’algorithme de Dijkstra, lorsque le réseau est suf-fisamment dense pour qu’il soit raisonnable de le spécifier par une matricecarrée, donnant pour chaque arc (i, j) sa longueur dij . Il est intéressant deconstater que le code 3.1 d’une des heuristiques gloutonnes les plus connues

Page 41: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.2 CHEMINS OPTIMAUX 39

Algorithme 2.3 : (Dijkstra) Recherche d’un plus court chemin de s à tous lesautres sommets dans un réseau à pondération non négative. On a indiqué encouleur les deux différences qu’il y a entre l’algorithme de Dijkstra et celui dePrim.

Entrées : Réseau R = (V,E,w) orienté avec w(e) > 0 ∀e ∈ E, donnésous la forme de listes des successeurs succ(i) de chaquesommet i ∈ V , un sommet de départ particulier s

Résultat : Prédécesseur predj immédiat de j sur un plus court cheminde s à j, ∀j ∈ V et longueur λj du plus court chemin de s à j.

1 pour tous les Sommets i ∈ V faire2 λi ←∞ ; // Longueur connue du plus court chemin de s à i3 predi ← ∅ ;

4 λs = 0 ; L← V ; // Sommets pour lesquels le plus court chemin n’est pasdéfinitif

5 tant que L 6= ∅ faire77 Retirer de L le sommet i ayant le plus petit λi;8 pour tous les Sommets j ∈ succ(i) faire9 si j ∈ L et λj > λi + w(i, j) alors

1111 λj ← λi + w(i, j));12 predj ← i

pour le problème du voyageur de commerce a exactement la même structureque le code 2.1.

Listing 2.1 – dijkstra.c Implantation en C de l’algorithme de Dijkstra, dans le cas oùle réseau est complet, et spécifié par une matrice (dij) donnant le poids de chaque arc(i, j).vo id d i j k s t r a ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance matr ix , w i thou t any value < 0 ∗ /i n t s , /∗ S t a r t i n g c i t y ∗ /double lambda [ ] , /∗ −−> Out lambda [ i ] : Shor tes t leng th s −> i ∗ /i n t pred [ ] ) /∗ −−>Out pred [ i ] immediate predecessor o f i ∗ /

i n t i , j , j _kep t =−1;i n t ∗known = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;

f o r ( i = 0 ; i < n ; i ++) lambda [ i ] = i n f i n i t e ; known [ i ] = i ; lambda [ s ] = 0 ;swap ( known +s , known +0) ; /∗ Only sho r t es t path to known [ 0 ] = s a l ready known ∗ /

f o r ( i = 1 ; i < n−1; i = i + 1) /∗ I d e n t i f y t r ue sho r t es t path to known [ i ] ∗ / f o r ( j = i ; j < n ; j = j +1)

i f ( lambda [ known [ i −1]] + d [ known [ i −1] ] [ known [ j ] ] < lambda [ known [ j ] ] ) lambda [ known [ j ] ] = lambda [ known [ i −1]] + d [ known [ i −1] ] [ known [ j ] ] ;

pred [ known [ j ] ] = known [ i −1];j _kep t = j ;

swap ( known + i , known + j_kep t ) ; /∗ sho r t es t path i d e n t i f i e d to known [ i ] ∗ /

f r ee ( known ) ; /∗ d i j k s t r a ∗ /

Lorsque l’on a des pondérations négatives, les plus courts chemins n’existentque s’il n’y a pas de circuit de longueur négative dans le réseau. Un algorithmeplus général pour trouver ces plus courts chemins a été proposé par Bellman

Page 42: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

40 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

et Ford (voir l’algorithme 2.4). Il est basé sur la vérification, pour chaque arc,des condition de Bellman : λj 6 λi +w(i, j). Autrement dit, la longueur du pluscourt chemin de s à j ne doit pas dépasser celle de s à i à laquelle on ajoute lalongueur de l’arc (i, j). En effet, si c’était le cas, il existerait un chemin encoreplus court jusqu’à j, passant par i.

Algorithme 2.4 : (Bellman-Ford) Recherche d’un plus court chemin de s à tousles autres sommets dans un réseau à pondération quelconque. L’algorithme in-dique si le réseau comporte un circuit de longueur négative accessible depuis s,ce qui signifie que la longueur (négative) du plus court chemin n’est pas bornée.Cet algorithme est excessivement simple à programmer (le code n’est guère pluslong que le pseudo-code donné ici) ; sa complexité est en O(|E||V |).

Entrées : Réseau R = (V,E,w) orienté, donné sous la forme de listesd’arcs, un sommet de départ particulier s

Résultat : Prédécesseur predj immédiat de t sur un plus court cheminde s à j avec sa longueur λj , ∀j ∈ V , ou indication del’existence d’un circuit de longueur négative

1 pour tous les i ∈ V faire2 λi ←∞ ; predi ← ∅3 λs ← 0;4 k ← 0 ; // Compteur du nombre d’étapes5 Continuer ← vrai ; // Au moins un λ a été modifié à la dernière étape6 tant que k < |V | et Continuer faire7 Continuer ← faux;8 k ← k + 1;9 pour tous les arc (i, j) ∈ E faire

10 si λj > λi + w(i, j) alors11 λj ← λi + w(i, j);12 predj ← i;13 Continuer ← vrai

14 si k = |V | alors15 Il y a un circuit de longueur négative accessible depuis s

Le principe de fonctionnement de cet algorithme repose sur des bases diffé-rentes des algorithmes gloutons que l’on a vu jusqu’ici. Plutôt que d’ajouter demanière définitive un élément à une solution partielle à chaque étape, l’idée estde partir d’une solution de départ complète, même très mauvaise mais facile àconstruire, et de tenter de l’améliorer. La trame générale de cet algorithme estcelle d’une méthode d’amélioration locale. À chaque étape de l’algorithme, onvérifie si les conditions de Bellman sont satisfaites pour l’ensemble des arcs. Sic’est le cas, on a l’ensemble des plus courts chemins. Si on trouve un sommetj pour lequel λj < λi+w(i, j), on met à jour le meilleur chemin connu jusqu’ausommet j en lui fixant le sommet i comme sommet prédécesseur. Lorsque l’onfait une telle modification, cela peut invalider la condition de Bellman pour desarcs qui la satisfaisaient. Il faut donc revérifier pour l’ensemble des arcs si unemodification n’en implique pas d’autres.

Se pose alors la question : Sans autre précaution, un algorithme basé sur

Page 43: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.2 CHEMINS OPTIMAUX 41

ce principe de modification d’étiquettes s’arrête-t-il pour n’importe quelle en-trée ? La réponse est non : si le réseau possède un circuit de longueur né-gative, on va procéder à des modification sans fin. Par contre, si le réseau n’apas de circuit de longueur négative, alors l’algorithme s’arrêtera après un maxi-mum de |V | vérifications des conditions de Bellman pour l’ensemble de tousles arcs de E. En effet, si un plus court chemin existe, il a au plus |V | − 1 arcset à chaque vérification de l’ensemble des arcs, au moins un ce ces dernierssatisfera de manière définitive la condition de Bellman.

L’algorithme de Bellman-Ford est donc basé sur une méthode d’améliora-tion avec un critère d’arrêt bien défini : Si l’on a fait |V | étapes et qu’il y aencore eu des modifications, alors on peut s’arrêter en indiquant que le ré-seau possède un circuit de longueur négative. Si à une étape on vérifie que lesconditions de Bellman sont satisfaites pour tous les arcs, alors on peut s’arrêtercar on a l’ensemble des plus courts chemins.

La recherche de chemins optimaux apparaît dans de nombreuses appli-cations, en particulier en planification de projet et en ordonnancement. Lesproblèmes qui peuvent être résolus par une technique connue sous le nom deprogrammation dynamique peuvent se formuler sous la forme de la recherched’un chemin optimal dans un réseau en couches. Cette technique utilise la to-pologie particulière du réseau pour trouver la solution du problème sans avoirà construire explicitement le réseau.

Formulation du plus court chemin en termes de PL

Il est relativement aisé de formuler la recherche d’un plus court chemind’un sommet s à un sommet t dans un réseau sous la forme d’un programmelinéaire. Pour cela, on introduit des variables xij qui indiquent si l’arc (i, j)est utilisé par le plus court chemin. La formulation ci-dessous peut paraîtreincomplète : en effet, on voudrait que les variables xij prennent soit la valeur0 (auquel cas l’arc (i, j) ne fait pas partie du plus court chemin), soit la valeur1 (l’arc en fait partie). Les contraintes 2.4 sont suffisantes, car si une variableprend une valeur fractionnaire, cela signifie qu’il existe plusieurs plus courtschemins de s à t. La contrainte 2.3 impose en effet qu’il y ait une « quantité »unité qui arrive en t. Cette quantité peut être fractionnée, mais chaque fractiondoit utiliser un plus court chemin, à l’optimum. Les contraintes 2.2 imposentque pour tout sommet intermédiaire j, la quantité arrivant dans ce sommet doiten repartir. Il n’est pas nécessaire d’imposer qu’une quantité unité parte de s,car cette contrainte serait redondante avec 2.3. L’objectif 2.1 est de minimiserle coût des arcs empruntés.

Minimiser z =∑i,j

w(i, j)xij (2.1)

n∑i=1

xij −n∑k=1

xjk = 0 ∀j 6= s, j 6= st (2.2)

n∑i=1

xit −n∑k=1

xtk = 1 (2.3)

xij > 0 ∀i, j (2.4)

Page 44: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

42 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

Une autre formulation de ce problème revient à chercher directement leslongueurs λi des plus courts chemins en imposant que les conditions de Bell-man soient satisfaites. On obtient le programme linéaire suivant, qui est le pro-blème dual du précédent.

Maximiser λt (2.5)Sous λj − λi 6 w(i, j) ∀i, j (2.6)

Contraintes λs = 0 (2.7)

La dualité joue un rôle important en programmation linéaire. On peut eneffet montrer que toute solution admissible du premier problème a une valeurqui ne peut être inférieure à une solution admissible du second. Si l’on trouveune solution au premier problème qui vaut exactement une solution du second,alors ces deux solutions sont optimales. Pour le problème du plus court che-min, la valeur optimale de λt correspond à la somme des longueurs des arcsqu’il faut utiliser dans un chemin optimum de s à t.

2.2.2 Plus court chemin élémentaire

Le problème du plus court chemin est mal défini, en raison des circuits delongueur négative. Par contre, on pourrait ajouter une contrainte très naturelle,qui le rend parfaitement défini : chercher le plus court chemin élémentaire d’unsommet particulier s à tous les autres. Dans ce cas, même s’il y a des circuitsde longueur négative, le problème a bien une solution finie, car le fait d’exigerque le chemin soit élémentaire empêche de passer deux fois pas le mêmesommet. Malheureusement, l’ajout de cette petite contrainte rend le problèmedifficile. En effet, on peut montrer que le problème du voyageur de commerce,notoirement NP -difficile peut se transformer polynomialement en un problèmede plus court chemin élémentaire.

2.2.3 Voyageur de commerce

Le problème du voyageur de commerce peut se formuler ainsi : étant donnéun réseau R = (V,E,w), dont l’ensemble V peut être interprété comme desvilles, on cherche un circuit de longueur minimale passant une et une seule foispar chacune des villes. Ce problème est l’archétype de l’optimisation combina-toire difficile, d’une part en raison de la simplicité avec laquelle il se formule etd’autre part, parce qu’il présente de nombreuses applications notamment dansl’élaboration de tournées. Comme nous le verrons plus loin, il peut apparaîtredans d’autres problèmes qui n’ont rien à voir avec une recherche d’itinéraire.En optimisation combinatoire, le problème du voyageur de commerce est sansdoute celui qui a reçu le plus d’attention. Des problèmes euclidiens de grandetaille — plus de 104 sommets — ont été résolus optimalement, et on connaîtdes solutions ne s’écartant pas de plus d’une fraction de pour-cent de l’opti-mum pour des exemples à plusieurs millions de villes. Mais comme ce pro-blème est NP -difficile, il existe des exemples beaucoup plus petits qui mettenten difficulté les méthodes de résolution.

Page 45: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.2 CHEMINS OPTIMAUX 43

On peut transformer polynomialement le problème du voyageur de com-merce en un plus court chemin élémentaire : Pour cela, un sommet est du-pliqué en deux sommets s et t et le poids w(e) des arcs est remplacé parw(e)−M , où M est une constante positive de valeur plus élevée que le poidsdu plus lourd arc. S’il n’y a pas d’arc direct entre s et t, le plus court cheminélémentaire de s à t correspond à une tournée de longueur minimale dans leréseau du voyageur de commerce. La figure 2.2 illustre le principe de cettetransformation. Sachant que le problème du voyageur de commerce est NP -difficile, cela prouve que le problème de la recherche d’un chemin élémentaireoptimal l’est également.

1 ts

3

2

4

5

3

2

4

5

10 15

12 32 25

1327

9

18 29

−40 −35

−38

−23

−41

−32 −21−25

−18−37

FIGURE 2.2 – Transformation polynomiale d’un problème de voyageur de commercevers un problème de plus court chemin élémentaire.

Il existe de nombreuses modélisation du problème du voyageur de com-merce sous la forme de programme linéaire en nombres entiers. L’une d’elleconsiste à envoyer un flux de valeur n− 1 à partir du sommet 1 et d’exiger quechaque autre sommet en consomme une unité exactement. On introduit doncdes variables indicatrices xij qui prendront la valeur 1 si l’arc (i, j) est utilisépar la tournée et 0 autrement.

Minimiser z =∑(i,j)

w(i, j)xij (2.8)

n∑i=1

xij = 1 ∀j (2.9)

n∑j=1

xij = 1 ∀i (2.10)

n∑j=2

y1j = n− 1 (2.11)

n∑i=1

yik −n∑j=1

xkj = 1 ∀k 6= 1 (2.12)

yij 6 (n− 1) · xij ∀arc (i, j) (2.13)xij ∈ 0, 1 ∀i, j (2.14)

Page 46: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

44 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

La contrainte 2.9 impose que l’on entre exactement une fois dans chaqueville et la contrainte 2.10 qu’on en ressorte exactement une fois. Le flux à tra-vers l’arc (i, j) est donné par les variables yij . On impose que la somme desflux sortant du sommet 1 par 2.11 et la consommation unitaire de chaque som-met par 2.12. Finalement, on empêche de faire passer un flux à travers unarc non utilisé par 2.13. Cette formulation n’est sans doute pas la plus effi-cace pour résoudre pratiquement des problèmes de voyageur de commerce,mais elle présente relativement peu de variables (2 par arc) et un nombre decontraintes proportionnel au nombre d’arcs du problème.

2.2.4 Tournées de véhicules

Des problèmes utilisant celui du voyageur de commerce comme sous-problème apparaissent naturellement dans l’élaboration de tournées de vé-hicule. Dans sa forme la plus simple, celui-ci peut se formuler ainsi : Un en-semble V de clients demandant des quantités qi de biens (i = 1, . . . , |V |)doivent être desservis avec un véhicule de capacité Q à partir d’un entre-pôt d. Il faut déterminer une décomposition de l’ensemble des clients en msous-ensembles V1, . . . Vm tels que

∑i∈Vi

qi 6 Q et trouver pour chaque sous-ensemble Vj ∪ d, (j = 1, . . . ,m) une tournée de voyageur de commerce desorte que la distance totale parcourue par le véhicule soit aussi faible que pos-sible.

Dépôt

FIGURE 2.3 – Exemple de problème d’élaboration de tournées de véhicules. Les trajetsen partance du dépôt ou y retournant ne sont pas dessinés pour ne pas surchargerl’illustration. Cette solution a été découverte il y a une vingtaine d’années, mais il n’estpas prouvé qu’elle soit la meilleure possible.

Ce problème intervient naturellement dans la distribution ou la collecte de

Page 47: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.3 ORDONNANCEMENT 45

biens et dans la planification de services à domicile. Dans les applicationsréelles, de nombreuses complications existent :

— Le nombre m de tournées peut être fixé a priori ou minimisé— La longueur maximale des tournées peut être limitée— Les clients spécifient une ou plusieurs fenêtre de temps durant lesquelles

ils doivent recevoir la visite du véhicule— Les commandes peuvent être fractionnées au besoin, ce qui implique

plusieurs passages chez le même client— Une tournée mêle collecte et distribution— On a plus d’un entrepôt— Les entrepôts abritent une flotte de véhicules hétérogènes ou non— La position des entrepôts peuvent être choisies— Etc.Comme il s’agit de trouver dans quel ordre desservir les clients, les pro-

blèmes d’élaboration de tournées font également partie des problèmes d’or-donnancement. Du reste, dans la littérature anglo-saxonne, on rencontre aussibien le terme de « vehicle routing » que celui de « vehicle scheduling ».

2.3 Ordonnancement

Les problèmes d’ordonnancement regroupent tous ceux dont le but est dedéterminer dans quel ordre effectuer un certain nombre d’opérations. La réa-lisation de ces dernières consomme des ressources, généralement du tempssur une machine. Des opérations ayant une forte interdépendance sont regrou-pées en tâches. Par exemple, une tâche peut représenter l’ensemble des opé-rations qu’un objet doit subir. Souvent, ces dernières ne peuvent être réaliséesdans n’importe quel ordre ; on parle alors de gamme opératoire.

L’objectif des problèmes d’ordonnancement est d’optimiser la consomma-tion des ressources. Divers critères d’optimisation sont couramment utilisés :minimiser l’heure à laquelle la dernière opération se termine ; minimiser lasomme des heures de terminaison des tâches ; minimiser le retard moyen ;etc.

La principale contrainte que l’on rencontre en ordonnancement est qu’uneressource ne peut réaliser plusieurs opérations simultanément et que deuxopérations d’une tâche ne peuvent être réalisées en même temps. Les opéra-tions peuvent avoir diverses caractéristiques selon les applications :Ressource Une opération doit avoir lieu sur une ressource donnée ou un

sous-ensemble de ressources ou encore mobiliser plusieurs ressourcessimultanément

Durée La réalisation d’une opération prend un certain temps, qui peut dé-pendre de la ressource utilisée

Mise en place Avant de réaliser une opération, la ressource nécessite untemps de réglage dépendant de l’opération précédemment réalisée

Interruption Une fois qu’une opération a débuté, elle peut être mise en attenteavant de se terminer

Page 48: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

46 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

Préemption Une ressource peut interrompre une opération pour en réaliserune autre

Attente Il peut y avoir un temps mort entre deux opérations successives d’unemême tâche

Disponibilité Une opération ne peut avoir lieu avant une certaine heure

Délai Une opération ne peut avoir lieu après une certaine heure

Les ressources peuvent également avoir diverses caractéristiques. Ellespeuvent être mobiles dans le cas de transporteurs, ce qui entraîne des pro-blèmes de collision. Il peut y avoir plusieurs machines du même type, des ma-chines pouvant réaliser diverses opérations, etc.

Exemple : atelier de peinture Un des problèmes d’ordonnancement les plussimples à formule est celui de la peinture d’objets. Il n’y a ici qu’une seule res-source : la machine qui permet de déposer la peinture sur les objets. Chaquetâche ne comporte qu’une opération : peindre un objet i (i = 1, . . . , n) dansune couleur donnée, ce qui prend un temps ti. Après avoir peint un objet i, ilfaut nettoyer la machine pour pouvoir peindre le suivant, j, dans une autre cou-leur, ce qui prend un temps sij . Notons que généralement sij 6= sji : en effet,des traces d’une teinte foncée dans une couleur claire ont plus d’impact quele contraire. Après avoir peint tous les objets, il faut nettoyer la machine pourqu’elle soit prête pour le jour suivant, ce qui prend un temps r. L’objectif est detrouver l’ordre dans lequel faire passer les objets sur la machine pour minimi-ser l’heure à laquelle on termine le travail. On cherche donc une permutation pdes n objets minimisant

∑n−1i=1 (tpi + spipi+1

) + tpn + r.Ce problème d’ordonnancement se ramène à celui d’un voyageur de com-

merce à n + 1 villes. Pour cela, on pose wij = ti + sij(i, j = 1, . . . , n), wi0 = ret w0i = 0, (i = 1, . . . , n). On vérifie que la tournée la plus courte sur les villes0, . . . , n donne l’ordre optimal dans lequel il faut peindre les objets, en interpré-tant l’« objet » 0 comme le début d’une journée de travail.

2.3.1 Chaîne de traitement à gamme opératoire unique

Un autre problème d’ordonnancement de base est celui de la chaîne detraitement à gamme opératoire unique ou chaîne de traitement en ligne, connudans la littérature anglo-saxonne sous le terme de « permutation flowshop ».Ce problème intervient par exemple dans une chaîne de montage dans laquelleles n objets produits doivent passer successivement sur les postes 1, 2, . . . ,mdans cet ordre. Un objet j doit donc subir m opérations qui prennent un tempstij , (i = 1, . . . ,m, j = 1, . . . , n). Il s’agit de déterminer dans quel ordre fairepasser les objets sur la chaîne de traitement, autrement dit, trouver une per-mutation des objets telle que la durée des travaux soit minimisée. Il faut noterqu’il y a un espace tampon entre chaque poste, où l’on peut au besoin stockerdes objets en attendant que le poste termine le traitement d’un objet arrivéplut tôt. Une façon commode de représenter une solution pour la planificationde tâches est le diagramme de Gannt dans lequel l’axe des abscisses repré-sente le temps et celui des ordonnées les ressources. La figure 2.4 donne lediagramme de Gannt d’une solution quelconque, où chaque opération a étéplanifiée le plus tôt possible ainsi qu’un ordonnancement optimal au plus tard.

Page 49: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.3 ORDONNANCEMENT 47

Mac

hine

TempsÉtendue des travaux

(a) Ordonnancement quelconque au plus tôt

TempsÉtendue des travaux

Mac

hine

(b) Ordonnancement optimal au plus tard

FIGURE 2.4 – Chaîne de traitement à gamme opératoire unique. Diagramme de Ganntd’un ordonnancement quelconque au plus tôt pour un petit exemple à 4 ressources et5 tâches 2.4(a) et ordonnancement optimal au plus tard 2.4(b) pour le même exemple.

Dans le cas où le nombre de machines est limité à 2, il existe un algo-rithme glouton produisant une solution optimale à ce problème. On ordonnedans une liste toutes les opérations par durée croissante. On sélectionne dela liste l’opération dont la durée est la plus petite, si cette opération a lieu surla première machine, la tâche correspondante est placée en tout début de sé-quence ; si l’opération a lieu sur la 2e machine la tâche est placée en toute finde séquence. Les deux opérations de la tâche sont supprimées de la liste avantd’examiner l’opération suivante. On remplit ainsi la séquence en progressantvers son milieu.

À partir de 3 machines, le problème devient NP -difficile. Une formulationen termes de programme linéaire de l’ordonnancement à gamme opératoireunique est la suivante :

Minimiser dω (2.15)dmj + tmj 6 dω (j = 1 . . . n) (2.16)dij + tij 6 di+1j (i = 1, . . .m− 1, j = 1 . . . n) (2.17)dij + tij 6 dik +M · (1− yjk) (i = 1, . . .m, j = 1 . . . n, j < k = 2 . . . n)

(2.18)

dik + tik 6 dij +M · yjk (i = 1, . . .m, j = 1 . . . n, j < k = 2 . . . n) (2.19)dij > 0 (i = 1, . . .m, j = 1 . . . n) (2.20)yjk ∈ 0, 1 (j = 1 . . . n, j < k = 2 . . . n) (2.21)

L’objectif 2.15 consiste à minimiser l’heure de fin de la production dω. Lescontraintes 2.16 imposent que l’heure de fin de traitement de chaque objet j surla dernière machine survient avant la fin de la production. Un objet j doit avoir

Page 50: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

48 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

terminé son traitement sur une machine i avant de passer sur la machine i+ 1(2.17). Les variables yjk, indiquent si l’objet j doit être traité avant l’objet k ; ilest nécessaire de n’introduire que n·(n−1)/2 de ces variables, étant donné queykj devrait prendre la valeur complémentaire 1−yjk. Les deux contraintes 2.18et 2.19 font intervenir une grande constante M et permettent l’introduction decontraintes disjonctives : soit l’objet j passe avant l’objet k, soit c’est l’inverse.Si yjk = 1, j passe avant k et les contraintes 2.19 sont trivialement satisfaitespour toute machine i, si M est suffisamment grand. Inversement, si yjk =0, ce sont les contraintes 2.18 qui sont trivialement satisfaites alors que lescontraintes 2.19 imposent de terminer le traitement de l’objet k sur la machinei avant que cette dernière ne puisse commencer le traitement de l’objet j.

2.3.2 Gamme opératoire variable

Un problème un peu plus général est celui de l’ordonnancement à gammeopératoire variable, connu dans la littérature anglo-saxonne sous le terme de« jobshop ». Ici, chaque tâche doit subir un certain nombre d’opérations surdes machines données. La séquence des opérations pour une tâche est fixée,mais deux tâches n’ont pas forcément la même séquence et toutes les tâchesne passent pas forcément sur toutes les machines.

3

ω

1

2

α

5

6

740

0

4

4

3

43

22

3

Machine 3

Machine 2

Machine 1

FIGURE 2.5 – Graphe correspondant à une solution d’un problème d’ordonnancementà gamme opératoire variable. Une tâche est composée de 3 opérations et deux autresde 2. Trois machines sont impliquées. La pondération des arcs correspond à la duréede l’opération correspondante. Les arcs représentant les relations de précédence desopérations d’une même tâche sont en pointillés. Le chemin critique, c’est-à-dire le pluslong chemin de α à ω est indiqué en gras.

On peut formule ce problème en termes de graphe : Chaque opération estreprésentée par un sommet. On ajoute deux sommets fictifs début (α) et fin(ω). Si l’opération k suit immédiatement l’opération i sur la même tâche, alorson introduit un arc (i, j) La longueur de l’arc et ti, la durée de l’opération i.On ajoute des arcs de longueur nulle du sommet début vers les premièresopérations de chaque tâche et des arcs des dernières opérations de chaquetâche vers le sommet fin. La longueur de ces arcs correspondant à la durée

Page 51: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.4 PROBLÈMES D’AFFECTATION 49

de l’opération correspondante. Toutes les opérations devant avoir lieu sur lamême machine sont reliées en une clique. Le but du problème est d’orienterles arêtes de ces cliques de sorte à minimiser la longueur du plus long cheminde début à fin.

Une formulation de ce problème en terme de programme linaire est la sui-vante :

Minimiser dω (2.22)di + ti 6 dj ∀(i, j) (2.23)di + ti 6 dω ∀i (2.24)di + ti 6 dk +M · (1− yik) ∀i, k sur une même machine (2.25)dk + tk 6 di +M · yik ∀i, k sur une même machine (2.26)

di > 0 ∀i (2.27)yik ∈ 0, 1 ∀i, k sur une même machine (2.28)

Les contraintes 2.23 imposent de terminer l’opération i qui précède l’opé-ration j d’une tâche donnée avant de pouvoir débuter le traitement de cettedernière. Les contraintes 2.24 imposent que les heures de fin de traitement detoutes les opérations précèdent la fin du traitement. Les variables yik associéesaux contraintes disjonctives 2.25, 2.26 déterminent si l’opération i précède ounon l’opération k qui a lieu sur la même machine.

2.4 Problèmes d’affectation

Les problèmes d’affectation ou de couplage surviennent fréquemment enpratique. Il s’agit d’apparier les éléments de deux ensembles différents commepar exemple des enseignants à des classes, des symboles aux touches d’unclavier, des postes de travail à des employés. Certains de ces problèmes peu-vent être résolus efficacement en les modélisant sous la forme de problèmesde flots dans des réseaux.

2.4.1 Flot dans les réseaux

La forme la plus simple des problèmes de flots est la suivante : dans unréseau R = (V,E,w), on cherche les flux xij à faire passer dans les arcs(i, j) ∈ E de sorte à maximiser la somme des flux qui sortent d’un sommetparticulier s pour aller vers un autre sommet t tout en respectant les contraintesde conservation pour les autres sommets — la somme des flux entrants estégale à celle des flux sortants — et de capacité — les flux xij doivent êtrepositifs, sans dépasser la valeur w(i, j) associés aux arcs.

Pour résoudre ce problème, Ford et Fulkerson ont proposé un algorithmeassez simple ( 2.5), basé sur une méthode d’amélioration : On part d’un flot nul(qui est admissible) et on l’augmente à chaque étape, le long d’un chemin des à t jusqu’à obtenir le flot optimum. La première étape de cet algorithme estillustrée dans la figure 2.6. Pour ne pas se retrouver bloqué dans une situationoù il n’existe plus de chemin de s à t mais sans que le flot soit maximal, comme

Page 52: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

50 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

Capacité = 2

Capacité = 1

t2s 1

(a) Flot de départ nul

Flux = 0

Flux = 1

t2s 1

(b) Flot bloquant

FIGURE 2.6 – Représentation graphique d’un problème de flot. Un triangle vide indiqueune unité de capacité non utilisée alors qu’elle l’est pour un triangle rempli. L’algorithmede Ford et Fulkerson part d’un flot nul 2.6(a) et l’augmente au maximum sur un cheminde s à t. Si le premier chemin trouvé est s− 1− 2− t on ne peut augmenter le flot qued’une unité le long de ce trajet. On obtient un flot bloquant 2.6(b), car il n’existe plus dechemin de s à t pour lequel on pourrait augmenter le flot.

dans la 2.6(b), il convient de remarquer que l’on peut augmenter virtuellementle flux d’un sommet j à un sommet i en diminuant un flux réel de i à j.

t2s 1

FIGURE 2.7 – Réseau d’augmentation associé au flot bloquant de la figure 2.6(b). Lechemin s− 2− 1− t permet d’augmenter le flot de s à t

Ainsi, à chaque étape de l’algorithme, on ne cherche pas un chemin avecdes capacités résiduelles dans le réseau d’origine, mais dans un réseau desaugmentations ou encore appelé réseau des résidus. On procède de la façonsuivante pour construire ce réseau : Un arc (i, j) de capacité w(i, j) dans lequelcircule un flux xij sera remplacé par deux arcs, l’un du sommet i au sommet jde capacité w(i, j)− xij et l’autre de j à i de capacité xij . La figure 2.7 illustrece principe. Une fois un flot trouvé dans le réseau des augmentations, on lesuperpose au flot obtenu précédemment. Ceci est illustré dans la figure 2.8

Page 53: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.4 PROBLÈMES D’AFFECTATION 51

t2s 1

A

V \A

FIGURE 2.8 – Superposition du flot du réseau d’augmentation de la figure 2.7 au flotbloquant de la figure 2.6(b), ce qui permet d’obtenir le flot optimum. La preuve de l’op-timalité découle du fait que la capacité de la coupe A séparant s de t indiquée en lignede traits est égale à la valeur du flot.

Algorithme 2.5 : (Ford-Fulkerson) Recherche d’un flot maximum de s à t.

Entrées : Réseau R = (V,E,w) orienté, un sommet-source s et unsommet-puits t

Résultat : Flot optimum de s à t1 Partir d’un flot nul dans tous les arcs;2 répéter3 Construire le réseau des augmentations R∗ correspondant au flot

courant;4 si Un chemin de s à t existe dans R∗ alors5 Chercher le flux maximum que l’on peut faire passer le long du

chemin de s à t dans R∗;6 Superposer ce flux au flot courant (diminuer le flot dans les arcs

(i, j) de R qui apparaissent inversés (j, i) sur le chemin de R∗)

7 jusqu’à ce qu’il n’existe plus de chemin de s à t dans R∗;

La complexité de cet algorithme dépend de la taille du réseau, en particulierparce qu’il faut rechercher un chemin de s à t avant chaque augmentationde flot, mais également du nombre de ces augmentations. Malheureusement,dans le pire des cas, il se peut que chaque augmentation de flux ne soit qued’une unité, pour des réseaux à capacités entières. Si le flot maximum dans unréseau est de valeur m, la complexité de l’algorithme est en O(m · (|E|+ |V |)).Du moment que m est petit, par exemple lorsque la capacité de tous les arcsest de 1, l’algorithme de Ford et Fulkerson est rapide. Nous verrons dans lasection 2.5.1 comment résoudre le problème de la coloration des arêtes d’ungraphe biparti en résolvant des problèmes de flot maximum dans un réseau oùtoutes les capacité sont unitaires.

Sa complexité peut être sensiblement diminuée, en n’utilisant pas n’importequel sous-algorithme pour découvrir un chemin de s à t dans le réseau desaugmentations, mais en faisant une recherche en largeur, ce qui implique ladécouverte du chemin le plus court à chaque étape. Cette amélioration a étéproposée par Edmons et Karp. Comme on peut montrer que le nombre d’arcsdu chemin ne peut décroître d’une étape à la suivante, que l’on a au maximum|E| étapes avec un nombre donné d’arcs et que ce nombre est compris entre 1et |V |, on en déduit que la complexité peut être ramenée àO(|V ||E|·(|V |+|E|)).

Page 54: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

52 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

Dans le cas d’un réseau dense (|E| ∈ O(|V 2|)), cette complexité se simplifieen O(|V |5).

De nombreux algorithmes ont été proposés pour la résolution du problèmedu flot maximum. Au niveau de la complexité, celui de Malhotra, Kumar, Mahe-shwari, en O(|V |3) est un des meilleur.

Dans de nombreuses applications, faire passer une unité de flux à traversun arc (i, j) coûte c(i, j). On a donc un réseau R = (V,E,w, c), où w(i, j) est lacapacité de l’arc (i, j) et c(i, j) le coût unitaire d’une unité de flux traversant cetarc. Se pose alors le problème du flot maximum à coût minimum. Ce problèmepeut être résolu avec l’algorithme de Busacker et Gowen 2.6 lorsque le réseaude départ ne possède pas de circuit à coût négatif.

Algorithme 2.6 : (Busacker et Gowen) Recherche d’un flot maximum à coûtminimum de s à t.

Entrées : Réseau R = (V,E,w, c) orienté, sans circuit à coût négatif, unsommet-source s et un sommet-puits t

Résultat : Flot maximum à coût minimum de s à t1 Partir d’un flot nul dans tous les arcs;2 répéter3 Construire le réseau des augmentations R∗ correspondant au flot

courant;4 si Un chemin de s à t existe dans R∗ alors5 Chercher le flux maximum que l’on peut faire passer le long du

plus court chemin de s à t dans R∗;6 Superposer ce flux au flot courant

7 jusqu’à ce qu’il n’existe plus de chemin de s à t dans R∗;

Comme ce qui avait été constaté pour les algorithmes de Prim et Dijks-tra, on remarque une différence minime entre les algorithmes de Ford & Ful-kerson 2.5 (ou plutôt son amélioration par Edmons & Karp) et Busacker &Gowen 2.6. À nouveau, on ne change pas une formule gagnante ! Lors dela construction du réseau des augmentations, il convient de tenir compte descoûts. Si un flux xij > 0 traverse l’arc (i, j), alors le réseau des augmentationscomprendra un arc (i, j) de capacité w(i, j)− xij (pour autant que cette capa-cité soit positive) avec coût c(i, j) inchangé et un arc inversé (j, i) de capacitéxij et de coût −c(i, j).

Dans le cas général, le problème du flot maximum à coût minimum est NP -difficile. On peut en effet transformer polynomialement le problème du voyageurde commerce dans ce problème, de façon similaire à la transformation du pluscourt chemin élémentaire (voir figure 2.2).

Si les algorithmes pour trouver des flots optimaux présentés ci-dessus peu-vent résoudre de nombreux problème directement liés à la gestion de flux,comme l’acheminement d’énergie électrique ou certains problèmes de trans-port, leur principale application est le traitement de problèmes d’affectation.

Page 55: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.4 PROBLÈMES D’AFFECTATION 53

2.4.2 Affectation linéaire

Le problème de l’affectation linéaire peut se formaliser ainsi : Étant donnéune matrice de coût C = (ciu), carrée de dimension n × n, on cherche uneaffectation xiu de chaque élément i ∈ I à un élément u ∈ u (i, u = 1, . . . , n)minimisant la somme des coûts 2.29. Ce problème peut se modéliser par unprogramme linéaire en nombres entiers :

Minimisern∑i=1

n∑u=1

ciuxiu (2.29)

Sous contraintesn∑i=1

xiu = 1 u = 1, . . . , n (2.30)

n∑u=1

xiu = 1 i = 1, . . . , n (2.31)

xiu ∈ 0, 1 (i, u = 1, . . . , n) (2.32)

La contrainte 2.30 oblige d’attribuer exactement un élément de U à chaqueélément de I et la contrainte 2.31 que chaque élément de U ait été attribué àun élément de I. La contrainte d’intégrité 2.32 empêche d’avoir des élémentsde I qui se partagent des fractions d’éléments de U .

Si cette modélisation est à la fois concise et rigoureuse, elle n’indique pascomment un exemple de problème peut être résolu. L’utilisation d’un logicielgénéral pour la programmation linéaire en nombres entiers pourrait ne pasêtre approprié — à moins que ce logiciel ne détecte automatiquement lescontraintes d’affectation 2.30 et 2.31 et intègre un algorithme ad hoc pour lestraiter, ce qui est souvent les cas.

L’affectation linéaire se modélise facilement par un problème de flot : pourcela on construit un réseau R = (I∪U ∪s∪t, E, w, c) de la façon suivante :Toutes les paires (i ∈ I, u ∈ U) sont reliées par un arc (i, u) de capacitéw(i, u) = 1 et de coût c(i, u). Un arc (s, i) de capacité w(s, i) = 1 et de coût nulrelie s à chaque sommet-élément i ∈ I et un arc (u, t) également de capacitéw(u, t) = 1 et de coût nul relie chaque sommet-élément u ∈ U à t.

La recherche d’un flot maximal à coût minimum dans R permet de trouverl’affectation optimale en temps polynomial, par exemple avec l’algorithme 2.6.Des algorithmes spécifiques plus efficaces ont été mis au point pour le pro-blème de l’affectation linéaire.

Une autre formulation plus concise du problème de l’affectation linéaire estde trouver une permutation p des n éléments de l’ensemble U qui minimise∑ni=1 ci pi ; la valeur pi étant l’élément de U affecté à i.

2.4.3 Affectation quadratique

Dans certains problèmes, les éléments de l’ensemble I ont des interactionsentre eux et l’affectation choisie pour un élément i ∈ I a des répercussionspour l’ensemble de tous les éléments de I. Prenons l’exemple de l’attributionde n bureaux à un ensemble de n employés. Dans le problème de l’affectation

Page 56: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

54 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

linéaire, le cœfficient ciu mesure uniquement l’intérêt que l’employé i porte aubureau u, et le fait de lui attribuer ce bureau n’a pas d’autre conséquence quece bureau n’est plus disponible pour un autre employé.

En pratique, les employés sont amenés à collaborer, ce qui les amène àdevoir se déplacer d’un bureau à l’autre. Notons aij la fréquence à laquellel’employé i doit se rendre dans le bureau de l’employé j. La durée du trajet pourse rendre d’un bureau u à un bureau v sera notée buv. Si on attribue le bureau uà l’employé i et le bureau v à l’employé j, le temps moyen perdu par l’employéi dans ses déplacements sera de aij · buv. Le problème de la minimisation despertes de temps peut se modéliser par le programme quadratique en variables0−1 suivant, dans lequel la variable xiu prend la valeur 1 si l’employé i occupele bureau u et la valeur 0 sinon :

Minimisern∑i=1

n∑j=1

n∑u=1

n∑v=1

aiubjvxiuxjv (2.33)

Sous contraintesn∑i=1

xiu = 1 u = 1, . . . , n (2.34)

n∑u=1

xiu = 1 i = 1, . . . , n (2.35)

xiu ∈ 0, 1 (i, u = 1, . . . , n) (2.36)

Cette formulation fait bien ressortir le côté quadratique de l’objectif en rai-son du produit des variables xiu · xjv et les contraintes montrent qu’il s’agitd’un problème d’affectation. Une modélisation plus concise, sous la forme dela recherche d’une permutation p se formule :

Minimiser∑ni=1

∑nj=1 aij · bpipj .

De nombreuses applications peuvent le formuler comme un problème d’af-fectation quadratique :

Attribution de bureaux à des employés C’est l’exemple qui vient d’être donné.Attribution de blocs dans un FPGA La programmation d’un réseau de

portes programmables in situ (Field Programmable Gate Array en an-glais) nécessite de connecter entre eux des blocs logiques présent surune puce de silicium. Ces blocs permettent d’implanter des équations lo-giques, des multiplexeurs ou des registres à décalage. Lorsque l’on veutprogrammer un FPGA pour qu’il réalise une fonctionnalité donnée, oncommence par établir un schéma dans lequel des on connecte des mo-dules. On peut décrire ce schéma au moyen d’une matrice de routageA = (aij) qui donne le nombre de connexions entre les modules i et j.Ensuite, il faut attribuer à chaque module i un bloc logique pi sur la puce.Cependant, on doit prendre soin de ne pas réaliser cette affectation n’im-porte comment car le temps de propagation des signaux dépend de lalongueur des liaisons. Connaissant la longueur buv de la liaison entre lesblocs logiques u et v, le problème de la minimisation de la somme destemps de propagation est donc un problème d’affectation quadratique.

Configuration d’un clavier Pour saisir un texte sur le clavier d’un téléphone,les 26 lettres de l’alphabet ainsi que l’espace on été attribuées aux touches

Page 57: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.5 COLORATION DE GRAPHES 55

0, 2, 3, . . . , 9. De manière standard, ces 27 signes sont répartis selon laconfiguration de la figure 2.9(a).

(a) Clavier standard (b) Clavier optimisé

FIGURE 2.9 – Clavier de téléphone standard 2.9(a) et clavier optimisé pour la saisie detexte français 2.9(b)

En supposant que la frappe d’une touche prenne une unité de temps, quele déplacement d’une touche à une autre prenne deux unités de tempset qu’il faille attendre 6 unités de temps avant de pouvoir commencer àsaisir un nouveau symbole placé sur la même touche que le précédent,on peut calculer qu’il faut 70 unités de temps pour taper le texte « a cesoir bisous » : en effet, il faut 1 unité pour saisir le « a » sur la touche 2, sedéplacer sur la touche 0, ce qui prend deux unités, appuyer une fois surcette touche pour l’espace, 1 unité, se déplacer à nouveau sur la touche2 et appuyer 3 fois pour le « c », ce qui prend 5 unités, etc.Avec le clavier optimisé pour le français donné en figure 2.9(b), on calculequ’il faut seulement 51 unités de temps, soit près d’un tiers de moins. Ceclavier optimisé a été obtenu en résolvant un problème d’affectation qua-dratique pour lequel les cœfficients aij représente la fréquence d’appari-tion du symbole j après le symbole i dans un texte-type et buv représentele délai entre la frappe d’un symbole placé en position u et un autre enposition v.

Le problème de l’affectation quadratique est NP -difficile. En pratique c’estun des plus difficile de cette classe, car des exemples de problèmes de taillen = 30 ne sont toujours pas résolus optimalement. De nombreux problèmesNP -difficiles peuvent être transformés très simplement en problèmes d’affec-tation quadratique. Sans être exhaustif, on peut citer celui du voyageur de com-merce, celui de l’ordonnancement linéaire ou celui de la bipartition de graphe.Naturellement, ce n’est pas en les modélisant sous la forme de problèmes d’af-fectation quadratique que l’on aboutira aux méthodes de résolution efficaces.

2.5 Coloration de graphes

La coloration des arêtes ou des sommets d’un graphe permettent de sereprésenter mentalement des problèmes de séparation d’éléments incompa-tibles. Deux élément compatibles peuvent recevoir la même « couleur » alorsqu’il doivent être colorés différemment s’ils sont incompatibles. Un couleurreprésente donc une classe d’éléments compatibles. Dans la coloration des

Page 58: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

56 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

1

23

4

5

ba

cf

e

d

g

ba

d c

e

f

g

G → L(G)

FIGURE 2.10 – Graphe et son graphe représentatif des arêtes, montrant que les pro-blème de la coloration des sommets et des arêtes sont des problèmes équivalents

arêtes d’un graphe, deux arêtes ayant un sommet incident commun doiventrecevoir des couleurs différentes. Pour la coloration des sommets, on veut quedeux sommets adjacents reçoivent une couleur différente.

Les deux problèmes sont équivalents : À partir d’un graphe G = (V,E), onpeut construire le graphe représentatif des arêtes L(G) = (E,F ), où il existeune arête f ∈ F entre les sommets e et e′ ∈ E de L(G) si ces deux arêtes de Gont un sommet en commun. Cette construction est illustrée dans la figure 2.10.Ainsi à une coloration des arêtes de L(G) correspond une coloration des som-mets de G et vice-versa.

Le problème d’optimisation combinatoire que l’on cherche à résoudre estde trouver le nombre ou l’indice chromatique du graphe, soit de minimiser lenombre de couleurs nécessaire à sa coloration. Ce problème est NP -difficileen général, mais polynomial pour la coloration des arêtes d’un graphe biparti.

2.5.1 Coloration des arêtes d’un graphe biparti

Un cas particulier de coloration des arêtes est celle d’un graphe biparti.En effet, dans ce cas, on peut trouver une coloration optimale en temps po-lynomial. Pour cela, on commence par compléter le graphe biparti G = (V =X ∪ Y,E) en lui ajoutant des sommets au plus petit des sous-ensemble X ouY de telle sorte qu’ils aient le même nombre de sommets. Ensuite, on ajoutedes arêtes, tout en maintenant le graphe biparti, de sorte que tous les som-mets aient le même degré, équivalent au sommet de plus grand degré de G.Notons G′ le graphe biparti ainsi obtenu. Puis on trouve un couplage parfaitdans G′ en résolvant un problème de flot maximum. Les arêtes de ce couplagesont colorées toutes avec la couleur 1. Ensuite, on retire de G′ les arêtes de cecouplage, pour obtenir un graphe G” qui a les mêmes propriétés que G′, à sa-voir que les deux sous-ensembles de sommets sont de même cardinal et quetous les sommets sont de même degré. On peut donc à nouveau trouver uncouplage parfait dans G” et attribuer la couleur 2 aux arêtes de ce couplage.On réitère ainsi jusqu’à ce que le graphe n’ait plus d’arête. La coloration ainsiobtenue est optimale pour G′ et pour G car on a réussi à colorer ses arêtesavec un nombre de couleurs égal au sommet de plus grand degré de G.

Page 59: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.6 ENSEMBLE STABLE 57

2.6 Ensemble stable

Trouver le plus grand ensemble d’éléments indépendants — un stable maxi-mal — est un problème classique de la théorie des graphes. Ce problème estNP -difficile. La section 1.2.3 esquisse le principe de transformation polyno-miale d’un problème d’acceptabilité en un problème de stable. Ce dernier estéquivalent à celui de la recherche d’un plus grand sous-ensemble d’élémentscomplètement dépendants — une clique maximale — dans le graphe complé-mentaire. Une variante du stable maximal est celle du stable de poids maximallorsque l’on associe un poids à chaque sommet. On cherche dans ce cas unsous-ensemble de sommets indépendants dont la somme des poids est la plusélevée possible. Naturellement, si le poids associé à chaque sommet est uni-taire, cette variante est équivalente au stable maximal.

2.6.1 Étiquetage de plans

FIGURE 2.11 – Problème de l’étiquetage d’un plan : On désire placer le nom de troisobjets sur un plan de sorte que les textes ne se recouvrent pas, pour en conserver la li-sibilité. Ici, on retient 4 possibilités pour le placement de l’étiquette d’un objet. En termesde graphe, ce problème peut se modéliser sous la forme d’un stable maximum, les som-mets du stable correspondant aux places finalement choisies pour les étiquettes. Danscet exemple, le nom de chaque ville pourrait être placé en haut et à droite.

Une application du problème de stable de poids maximal survient pour l’éti-quetage de plans. Lorsqu’on désire associer des informations textuelles à desobjets représentés sur un plan, il s’agit de choisir la place de ces informationsde sorte à ce qu’elles ne se chevauchent pas ou qu’elles ne se superposentpas à des objets devant être représentés sur le plan. La figure 2.11 illustre untout petit problème consistant à étiqueter 3 villes.

Ce problème peut être transformé en celui du stable maximal comme suit :On crée un sommet pour chaque position potentielle d’étiquette. L’ensembledes sommets-étiquettes correspondant à un même objet est relié en une clique,car on ne veut pas étiqueter deux fois le même objet. Deux sommets-étiquettesincompatibles sont également reliés entre eux par une arête. Un stable corres-pond à un placement des étiquettes sans chevauchement. On désire trouver unstable maximum dans ce graphe, afin d’afficher autant de noms que possiblesur le plan.

En pratique, toutes les positions ne sont pas équivalentes. En effet, selon lalangue et la culture, certaines positions doivent être privilégiées, par exemple,en français on préfère placer les noms en haut à droite plutôt qu’en bas à

Page 60: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

58 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

gauche. Les préférences peuvent être modélisées sous la forme de poids as-sociées aux position. Le problème de l’étiquetage consiste alors à trouver unstable de poids maximum.

D’autres problèmes peuvent se modéliser exactement de la même ma-nière : on mentionnera tout d’abord celui de l’attribution de la position sur unquai pour un bateau faisant escale dans un port. Traduit en termes d’étique-tage, une étiquette aura comme largeur la durée prévue de l’escale et commehauteur la longueur de quai nécessaire pour ce bateau. Les positions possiblespour cette étiquette sont déterminées par l’heure à laquelle le bateau arrive etles emplacements du ou des quais pouvant recevoir le bateau.

Une autre application de ce problème est l’attribution de niveaux de volpour des avions commerciaux. Connaissant les heures de départ prévues dechaque avion et les trajets qu’ils empruntent, on peut déterminer des zones decollision potentielle entre avion. La dimension de ces zone dépend de l’incer-titude sur les heures de départ effectives et les trajets réellements suivis. Uneétiquette correspondra donc à une zone. Les positions possibles des étiquettesseront les divers niveaux de vol que l’avion pourrait utiliser.

2.7 Classification

FIGURE 2.12 – Classement de 800 éléments du plan (petits cercles) en 80 groupes. Lataille des disques remplis indique le rayon de chaque groupe.

Page 61: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.7 CLASSIFICATION 59

De même que la théorie des graphes, la classification automatique est unoutil de modélisation très utile. On peut citer notamment toutes les applicationsde reconnaissance, que ce soit de formes en vision artificielle, des textes, pourla recherche de documents sur le web, ou de voix, pour la commande vocale.Il existe des algorithmes spécifiques pour réaliser ces tâches automatique-ment. Notamment, les réseaux neuronaux artificiels sont fréquemment utilisésen classification supervisée, c’est-à-dire lorsque l’on dispose d’un ensembled’éléments-témoins dont on connaît la classe dont ils font partie. Ces tech-niques sortent du cadre de cet ouvrage. Ne seront également pas traités laconstruction d’arbres phylogénétiques, popularisé par Darwin au XIXe siècle,qui consiste à trouver des relations de « parenté » entre les éléments, chaquenœud de l’arbre représentant un « ancêtre » commun.

En toute généralité, la classification consiste à regrouper les éléments quisont similaires et à séparer ceux qui ne le sont pas. Cela suppose que l’onpuisse quantifier la « dissimilarité » d(i, j) 6 0 qu’il y a entre deux éléments iet j appartenant à l’ensemble E que l’on cherche à classer. Souvent, la fonc-tion d(i, j) est une distance, (si l’on a symétrie : d(i, j) = d(j, i), séparation :d(i, j) = 0 ⇐⇒ i = j et inégalité triangulaire : d(i, k) 6 d(i, j) + d(j, k)), maispas nécessairement. Pour garantir la stabilité des algorithmes, on supposeratoutefois que d(i, j) > 0 et d(i, i) = 0,∀i, j ∈ E.

Sitôt que l’on dispose une telle fonction, on peut mesurer l’homogénéitéd’un groupeG ⊂ E. Plusieurs définitions ont été proposées pour cette mesure :

Diamètre d’un groupe Valeur maximale de la fonction d(i, j) pour deux enti-tés i et j appartenant à G : maxi,j∈Gd(i, j)

Rayon Dissimilarité maximale qu’il y a entre l’élément le plus central et unautre de G : mini∈Gmaxj∈Gd(i, j)

Clique Somme des dissimilarités entre toutes les paires d’éléments de G :∑i∈G

∑j∈G d(i, j)

Étoile Somme des dissimilarités entre l’élément le plus central de G et lesautres : mini

∑j∈G d(i, j)

On peut également mesurer l’hétérogénéité qu’il y a entre deux groupesG et H. Plusieurs définitions ont été proposées pour mesurer la séparationexistante entre G et H :

Séparation Distance minimale entre deux éléments appartenant à des groupesdifférents : mini∈G,j∈Hd(i, j)

Coupe Somme des dissimilarités entre éléments de deux groupes différents :∑i∈G

∑j∈H d(i, j)

Coupe normalisée Moyenne des dissimilarités entre éléments de deux groupesdifférents :

∑i∈G

∑j∈H d(i, j)/(|G| · |H|)

Une fois un critère d’homogénéité ou d’hétérogénéité défini, on peut formu-ler le problème de la classification en p groupes G1, . . . Gp par un problèmed’optimisation en recourant à un objectif global :

— Maximiser la plus petite séparation (ou la plus petite coupe) entre élé-ments de groupes différents

— Minimiser le plus grand diamètre (ou le plus grand rayon, la plus grandeclique ou encore la plus grande étoile) d’un groupe

Page 62: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

60 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

— Minimiser la somme des étoiles (ou la somme des diamètres, rayons,clique)

2.7.1 P-médiane

Le problème de la p-médiane est un des plus connus en classification nonsupervisée. En reprenant les définitions présentées ci-dessus, il s’agit de mini-miser la somme des étoiles. En d’autres termes, il faut trouver les p élémentsc1, . . . , cp de E qui minimisent :

∑i∈Eminr=1,...,pd(i, cr) Ce problème est NP -

difficile.Un algorithmes heuristiques pour ce problème est la méthode d’améliora-

tion PAM (Partition Around Medoids) 2.7.

Algorithme 2.7 : (PAM) Méthode d’amélioration pour le partitionnement autoursde médians.

Entrées : Ensemble E d’éléments avec une fonction mesurant ladissimilarité d(i, j) entre éléments i et j ; p éléments médiansc1, . . . , cp de E

Résultat : Groupes G1, . . . , Gp ⊂ E1 répéter2 Associer chaque élément i ∈ E au médian le plus proche, et créer

les groupes G1, . . . , Gp ⊂ E;3 pour chaque Médian cj faire4 pour chaque Élément i ∈ E faire5 Echanger i et cj et calculer le coût total de la configuration;

6 Retenir la meilleure configuration comme nouvel ensemble demédians;

7 jusqu’à ce que les p médians ne bougent plus;

L’algorithme PAM a une complexité de Ω(p · n2) : En effet, le calcul du coûtde la nouvelle configuration en ligne 5 de l’algorithme nécessite un calcul pro-portionnel à n, car il faut vérifier, pour chaque élément non associé à cj , si lenouveau médian i est plus proche de l’actuel. Pour les éléments précédem-ment associés au médian cj , le meilleur médian est soit le second meilleur del’ancienne configuration, ce qui peut être pré-calculé et mémorisé en ligne 2,soit le nouveau médian i essayé. Le nombre de répétitions des lignes 2 à 6est difficile à évaluer. On observe cependant un nombre relativement faible enpratique, plus ou moins indépendant de la taille du problème.

2.7.2 Somme des moyennes

Lorsque les éléments sont des vecteurs numériques et que la mesure dela dissimilarité correspond au carré de la distance (norme l2), le point µ quiminimise le critère d’homogénéité de l’étoile associée à un groupe G est lamoyenne arithmétique des éléments de G (le centre de gravité).

L’algorithme heuristique k-means 2.8 (ou des k-moyennes ; où k fait réfé-rence au nombre de groupe désirés) pour ce problème est sans doute le plusconnu en classification non supervisée. Comme pour l’algorithme PAM, il s’agit

Page 63: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.8 SAC DE MONTAGNE 61

Algorithme 2.8 : (k-moyenne) Méthode d’amélioration pour le partitionnementen p groupes, lorsque les éléments à classer sont des vecteurs numérique en ddimensions et la mesure de la dissimilarité la norme l2.

Entrées : Ensemble E d’éléments-vecteurs de Rd avec une fonctionmesurant la norme l2 entre élément ; p centres c1, . . . , cp de Rd

Résultat : Groupes G1, . . . , Gp ⊂ E1 répéter2 Associer chaque élément i ∈ E au centre le plus proche, et créer les

groupes G1, . . . , Gp ⊂ E;3 pour chaque i ∈ 1, . . . , n faire4 ci = centre de gravité de Gi5 jusqu’à ce que les p centres ne bougent plus;

d’une méthode d’amélioration qui démarre avec des centres placés généra-lement aléatoirement. Il alterne une phase d’association des éléments à leurcentre le plus proche (ligne 2) et une phase de repositionnement optimal descentres pour chaque groupe précédemment construit (ligne 4). L’algorithmes’arrête lorsqu’il n’y a plus de modification dans la position des centres. Cetalgorithme est relativement rapide, en Ω(p · n), mais il est très sensible à lasolution initiale fournie ainsi qu’aux mesures extrêmes. Si la dispersion deséléments est élevée, on a intérêt à utiliser une autre mesure de la dissimilarité,par exemple la distance ordinaire (norme l1), ce qui implique de modifier laligne 4 pour replacer les centres. On a alors affaire au problème de Weber.

2.8 Sac de montagne

Le problème du sac de montagne est certainement celui faisant partie dela classe NP -difficile qui est le plus simple à formuler en termes de program-mation linéaire :

Maximisern∑i=1

ci · xi (2.37)

Sous contraintesn∑i=1

vi · xi 6 V (2.38)

xi ∈ 0, 1 (i = 1, . . . , n) (2.39)

On cherche à remplir un sac de volume total V avec des objets dont onconnaît le volume vi et la valeur ci, (i = 1, . . . , n), de sorte à avoir un char-gement de valeur maximale. Ce problème survient dans diverses situationset sera utilisé dans cet ouvrage pour illustrer le fonctionnement de certainesméthodes.

Page 64: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

62 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

2.9 Modélisation : Fonction-objectif et fonction-utilité

Au risque d’énoncer une tautologie, la toute première étape de la résolutiond’un problème est de comprendre ce dernier ! Pour s’assurer que l’on a biencompris le problème, il faut en extraire la substantifique moelle, ce qui consisteà exprimer formellement ou à modéliser son noyau. Un problème peut être mo-délisé de différentes manières, ce qui impliquera l’utilisation de méthodes derésolution adaptées au modèle choisi. Cette section illustrera diverse modéli-sation d’un même problème, celui de la coloration des sommets d’un graphe.

FIGURE 2.13 – Coloration d’un graphe avec un nombre minimum de couleur. On peutmontrer que cette coloration est optimale, car le graphe contient une clique de quatreéléments.

En section 1.1, nous avons vu que ce problème pouvait se modéliser sousla forme d’un problème d’acceptabilité, ou plus précisément, si l’on chercheune coloration en un nombre minimum de couleurs, en une suite de problèmesd’acceptabilité. À moins d’avoir à travailler sur de tout petits graphes et de dis-poser d’un programme résolvant les problèmes d’acceptabilité, cette approchen’est guère envisageable. Une autre modélisation, présentée dans la mêmesection, consiste à formuler un programme linéaire en nombres entiers. Celle-ci utilise un objectif (1.4) qui dépend directement du nombre de couleurs uti-lisées. En termes généraux, un problème d’optimisation combinatoire peut seformuler comme

Optimiser : f(s) (2.40)Sous contrainte : s ∈ S (2.41)

Les correspondances entre cette formulation générale et le programme li-néaire présenté en page 12 sont les suivantes : l’objectif (2.40) consiste à mini-miser (1.4), qui est équivalente à minimiser l’indice de la couleur la plus élevéeattribué à un sommet du graphe. La contrainte (2.41) résume l’ensemble descontraintes (1.5) (1.6) (1.7) (1.8).

De manière un peu moins formelle, on peut exprimer le problème de lacoloration de graphe comme :

Minimiser : c = f1(s) (2.42)Sous contraintes : 2 sommets adjacents ont des couleurs différentes

(2.43)

et : Nombre de couleurs utilisées par s 6 c (2.44)

Page 65: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.9 MODÉLISATION : FONCTION-OBJECTIF ET FONCTION-UTILITÉ 63

FIGURE 2.14 – Coloration d’un graphe avec une couleur de trop. Un certain nombre dechangements sont nécessaires pour la supprimer. Pour cette solution, on a f1 = 5 alorsque pour celle de la figure 2.13 on a f1 = 4.

Un objectif consistant à minimiser un maximum — ou à maximiser un mini-mum — comme (2.42) n’est pas propice à la découverte ou à l’amélioration desolutions satisfaisant toutes les contraintes. Que faire si une solution que l’ona découverte utilise une couleur de plus que l’optimum ? On ne sait pas s’il ya juste un sommet qui utilise la couleur supplémentaire ou s’il y en a un grandnombre.

FIGURE 2.15 – Coloration non admissible d’un graphe avec un nombre donné de cou-leurs. Pour cette solution, on a f2 = 4 + 2λ alors que pour celle de la figure 2.13 on af2 = 4 et pour celle de la figure 2.14, on a f2 = 5.

On remplace donc souvent la fonction-objectif par une fonction-utilité inté-grant des contraintes qui ont été relaxées. En l’occurrence, on peut relaxer (2.43)et formuler le problème, où λ est une constante suffisamment grande :

Minimiser : f2(s) = c+ λ · nombre de violations de (2.43) (2.45)Sous contraintes : (2.44)

Il est facile de voir que pour une valeur de λ suffisemment grande (parexemple en posant λ = nombre chromatique), une solution optimisant (2.45)est également optimale pour (2.42). Ainsi, un triangle coloré avec une seulecouleur aura une valeur de 1 + 3λ, avec deux couleurs on aura une valeur de2 + λ alors que la coloration optimale a une valeur de 3. Pour 0 < λ < 1/2,l’optimum de f2 a lieu pour une couleur, pour 1/2 < λ < 1 pour deux couleurset pour λ > 1 pour trois couleurs. Par exemple, la solution de la figure 2.13a une valeur de f2 = 4, celle de la figure 2.14 est de f2 = 5 et celle de lafigure 2.15 est de f2 = 4 + 2λ.

Page 66: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

64 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

Cette façon de procéder est directement inspirée de la technique des multi-plicateurs de Lagrange. Généralement, la valeur du multiplicateur λ associé àune contrainte relaxée qui a été placée dans la fonction-utilité est modulée enfonction du succès de la recherche d’une solution : si une solution admissible aété trouvée, la valeur de λ est diminuée et inversément, si toutes les solutionsgénérées violaient la contrainte relaxée, la valeur de λ est augmentée.

FIGURE 2.16 – Coloration partielle d’un graphe avec un nombre donné de couleurs.Pour cette solution, on a f3 = 1.

Au lieu de relaxer la contrainte stipulant que deux sommets adjacents nedoivent pas recevoir la même couleur, on aurait pu relaxer celle qui imposed’attribuer une couleur à chaque sommet :

Minimiser : f3(s) = Nombre de sommets non colorés (2.46)Sous contraintes : (2.43)

Plutôt que d’utiliser une fonction-utilité agrégée, on peut également passerpar des objectifs hiérarchiques. Dans le cas de la coloration une résolutionpasse par la fixation du nombre de couleurs, puis ensuite par une minimisationdu nombre de violation de contraintes. Une fois que l’on a trouvé une solutionadmissible, on peut tenter de diminuer le nombre de couleurs avant de recom-mencer. Au contraire, si aucune solution sans violation de contraintes n’esttrouvée, on peut augmenter le nombre de couleurs, sans perdre complètementle travail fait jusque là.

FIGURE 2.17 – Coloration d’un graphe obtenue par orientation sans circuit de sesarêtes. Le plus long chemin est indiqué en gras. Pour cette solution, on a f4 = 4 (pourune coloration en cinq couleurs).

La dernière modélisation du problème de la coloration des sommets d’ungraphe que l’on verra ici est moins intuitive : elle consiste à orienter les arêtes

Page 67: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.10 OPTIMISATION MULTIOBJECTIFS 65

du graphe sans créer de circuit et en cherchant à minimiser la longueur du pluslong chemin dans le graphe ainsi orienté :

Minimiser : f4(s) = Plus long chemin dans G orienté (2.47)Sous contraintes : L’orientation des arêtes de G est sans circuit

En effet, une fois que l’on a une telle orientation, on peut facilement trou-ver une coloration admissible : Les sommets sans prédécesseur reçoivent lacouleur 1 ; ils ne peuvent être connectés par une arête, donc il n’y a pas de vio-lation de contrainte. On peut les retirer du graphe avant d’attribuer la couleur 2à ceux qui restent et qui n’ont pas de prédécesseur, etc. Ainsi, le nombre decouleurs obtenues vaut un de plus que la longueur du plus long chemin.

Le choix d’une modélisation a une influence majeure sur la capacité de ré-solution du problème par une méthode donnée. Il convient donc de prêter unetrès grande attention à la phase d’analyse du problème. Par exemple, si onchoisit de résoudre un problème d’établissement d’horaire à l’aide de la colo-ration de graphe, l’utilisateur ne cherchera pas nécessairement à trouver unhoraire utilisant la plus petite grille possible — ce qui se traduit par la recher-che d’une coloration avec un nombre minimum de couleur. Il spécifiera plutôtque la grille comportera un nombre donné de périodes et que le problème con-siste à trouver un horaire pouvant s’intégrer dans cette grille. Dans ce cas, desfonctions-utilité du type f2 (avec λ proche de 0 et c fixé au nombre de périodesdésirées) ou f3 conviendront certainement mieux que f1 ou f4.

La technique de relaxation de contraintes par l’intégration d’une mesurede leurs violations dans une fonction-utilité ne peut être envisagée que pourun nombre relativement faible de contraintes. Elle est cependant très courantelorsque l’on a affaire à des contraintes « molles », correspondant à des pré-férences plutôt que des conditions rédhibitoires. Une approche plus souple etfréquemment employée est de considérer plusieurs objectifs simultanément etde laisser à l’utilisateur le choix du compromis — choisir une solution privi-légiant tel objectif plutôt que tel autre. Mais pour cela, les méthodes doiventpouvoir proposer plusieurs solutions variées en lieu et place de celle qui opti-miserait un unique objectif.

2.10 Optimisation multiobjectifs

Un problème d’optimisation avec K objectifs peut se formuler de façon gé-nérale par :

« Minimiser » : ~f(s) = (f1(s), . . . , fK(s)) (2.48)Sous contraintes : s ∈ S

Cette formulation suppose que l’on cherche à minimiser chaque objectif,ce qui ne constitue pas une perte de généralité par rapport à une formulationoù il serait plus naturel d’exprimer une maximisation pour l’un ou l’autre desobjectifs. On dit qu’une solution s1 domine une solution s2 si s1 est meilleureque s2 sur au moins un objectif et au moins aussi bonne que s2 sur les autresobjectifs.

Page 68: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

66 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

Le but de l’optimisation multi-objectifs est donc d’exhiber l’ensemble dessolutions non-dominées. Ces solutions sont qualifiées de Pareto-optimales oud’efficaces. Dans une représentation où chaque axe représente la valeur dechaque objectif, les solutions qui se situent sur l’enveloppe convexe du frontPareto sont appelées solution supportées. Le choix final d’une solution auproblème étant laissé au décideur, qui se basera notamment sur des consi-dérations politiques, étiques ou autres qui ne peuvent être raisonnablementquantifiées et donc introduites soit dans les objectifs, soit dans les contraintes.

2.10.1 Ensemble Pareto

Départ Gare

Aéroport 1

Aéroport 2

Aéroport 3 Destination3/22

15/12

110/50

19/55

30/120

250/55

200/45

3/30

35/15

FIGURE 2.18 – Exemple de problème multi-objectifs : Pour se rendre d’un lieu de départà une destination, on a le choix entre plusieurs itinéraires. Chaque itinéraire a un coûtet une durée donnés, indiqués en regard des arcs. Depuis le lieu de départ, on peut serendre à la gare, soit en bus, soit en taxi, ou encore aller directement en taxi à l’aéroportle plus proche. Depuis la gare, on peut rejoindre soit l’aéroport le plus proche, soit unautre aéroport, un peu plus éloigné mais mieux desservi et moins cher. Ensuite, onprend l’avion pour arriver à l’aéroport le plus proche de la destination, où l’on prend ànouveau soit un bus soit un taxi pour la destination finale.

Un exemple typique d’optimisation multi-objectifs est celui de l’établisse-ment d’itinéraires : On veut se rendre d’un point A à un point B, en utilisantun réseau de transport donné (ce qui constitue les contraintes) en minimisantle temps du trajet, en minimisant la consommation d’énergie et en maximisantl’intérêt touristique du trajet. Ces objectifs sont généralement contradictoires(un même itinéraire peut se faire en diminuant la consommation mais en aug-mentant le temps) et l’utilisateur va choisir un itinéraire efficace sur une baseplus subjective : par exemple parce qu’en augmentant « un tout petit peu » letemps, on diminue « sensiblement » la consommation et on passe dans unecontrée « pittoresque ».

La figure 2.18 illustre le cas d’une personne devant effectuer un trajet enavion et qui a le choix entre plusieurs moyens de transport pour se rendre à unaéroport et pour rejoindre sa destination. Les sommets de l’enveloppe convexecorrespondent à des solutions non-dominées ; il existe cependant d’autres so-lutions non-dominées qui ne sont pas situées sur l’enveloppe convexe, commele montre la figure 2.19.

Page 69: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.10 OPTIMISATION MULTIOBJECTIFS 67

FIGURE 2.19 – Représentation des solutions du problème de la figure 2.18 dans undiagramme coût/temps. Les 9 solutions non-dominées sont mises en évidence. Seulesles 5 solutions supportées pourront être découvertes par une méthode scalaire exacte.

2.10.2 Scalarisation

Une technique pour produire diverses solutions à un problème multi-objectifsest de générer un problème mono-objectif avec autant de paramètres que d’ob-jectifs du problème initial. Ainsi, le problème multi-objectifs 2.48 se transfor-mera en un problème mono-objectifs avec paramètres w1, . . . , wK :

Minimiser :

K∑i=1

wi · fi(s) (2.49)

Sous contraintes : s ∈ S

Généralement on utilise 0 6 wi 6 1 et∑i wi = 1. Cette technique est

connue sous le nom d’agrégation.En supposant qu’une méthode exacte permette de résoudre efficacement

le problème 2.49, on peut trouver les solutions efficaces se trouvant sur l’en-veloppe convexe des solution Pareto-optimales en faisant varier la valeur despoids wi. Par exemple, en posant wi = 1 pour un i donné et des poids nuls pourles autres objectifs, on trouvera la solution la meilleure sur le ie critère. Unefois ces K solutions connues, on peut en connaître une autre, s’il en existe,en considérant des wi qui forment un vecteur orthogonal à l’hyperplan sup-porté par les objectifs de ces K solutions. En réitérant le processus avec cettenouvelle solution, il est possible d’engendrer l’ensemble complet des solutionssupportées.

Page 70: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

68 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

2.10.3 Sous-but à atteindre

Le principal défaut de la méthode d’agrégation donnée ci-dessus est queles solutions efficaces non supportées ne sont pas atteignables. Le cas ex-trême étant que les seules solutions supportées soient les K qui optimisentindividuellement un seul objectif. On peut extraire les solutions non suppor-tées en fixant la qualité minimale d’une solution sur un ou plusieurs critères, cequi revient à ajouter une ou plusieurs contraintes tout en supprimant le mêmenombre d’objectifs. Si l’on impose que les solutions doivent avoir au plus unevaleur v1 pour le premier objectif, on aura le problème à d− 1 objectifs :

Minimiser : ~f(s) = (f2(s), . . . , fK(s)) (2.50)Sous contrainte : f1(s) 6 v1

avec : s ∈ S

Dans l’exemple de la figure 2.18, en se fixant un budget maximal v1 =250, on trouve la solution de coût 248 pour un temps de 207, qui n’est passupportée.

Page 71: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.10 OPTIMISATION MULTIOBJECTIFS 69

Exercices

Exercice 2.1 (Connexion de points du plan). Un ensemble V de points du plandoivent être connectés. Comment réaliser les connexions pour que la longueurtotale de ces dernières soit aussi faible que possible ? Application : considérerles 3 points (0, 0), (30, 57), et (66, 0).

Exercice 2.2 (Accessibilité par des poids lourds). Dans le réseau routier de lafigure 2.20, la charge maximale (en tonnes) est donnée en regard de chaquetronçon. Quel est le poids du véhicule le plus lourd pouvant aller de A à B ?

33

50

48

28

49 55

87 47

32

59

49

42

85

3465

1

2 4

7

5

A

8

6

3

B

FIGURE 2.20 – Problème de charge maximale

Exercice 2.3 (Calcul de fiabilité). La figure 2.21 donne un réseau de com-munication où Les connexions sont sujettes à des pannes. La fiabilité desconnexions est donnée en regard des arêtes. Par quels chemins transmettreun message du sommet s aux autres avec la plus grande fiabilité possible ?

1

0,729 0,81

0,9

3

6

8

7

4

1

s

2

5

0,9

0,90,9

0,729

0,9 0,729

0,81

0,81

0,729

0,811

0,81

FIGURE 2.21 – Problème de fiabilité

Exercice 2.4 (Dégénérescence de l’algorithme de Ford & Fulkerson). Montrerque l’algorithme de Ford & Fulkerson pour la recherche d’un flot maximum n’estpas polynomial.

Page 72: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

70 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

Exercice 2.5 (Affectation de projets à des étudiants). Quatre étudiants(A,B,C,D) d’une classe doivent choisir parmi 4 projets de semestre (1, 2, 3, 4).Chaque étudiant pronostique la note qu’il pense obtenir pour chacun des pro-jets. Quels doivent être les choix des étudiants pour maximiser la moyenne dugroupe ?

Projet1 2 3 4

A 6 5 5.8 5.5

Étudiant B 6 5.5 4.5 4.8C 4.5 6 5.4 4D 5.5 4.5 5 3.8

Exercice 2.6 (Placement d’unités de production). Une entreprise dispose detrois unités de production notées 1, 2 et 3 et veut créer trois nouvelles unités,notées 4, 5 et 6. Pour cela, elle a retenu trois emplacements notés a, b et c. Unereprésentation de la disposition des unités de production est donnée dans lafigure 2.22. Les pièces produites doivent être transférées d’une unité existantevers une nouvelle unité en utilisant uniquement les connexions représentéessur la figure. Par exemple, la distance entre les unités 1 et b est de 3 + 2 = 5.

1 2 3 4 5 6

1

2

3

4

5

6

3

b

1

2

a

c

FIGURE 2.22 – Problème de localisation de nouvelles unités de production

Les nombres de transferts journaliers entre les unités existantes et celle àconstruire sont donnés dans le tableau suivante :

4 5 61 9 4 02 2 7 53 3 0 10

Quelle nouvelle unité (4, 5 ou 6) placer en a, (respectivement en b et enc) de manière à minimiser la distance totale à parcourir chaque jour lors destransferts de pièces entre les unités de production existantes et les nouvelles ?

Si les nouvelles unités doivent également transférer des pièces entre elles,peut-on résoudre le problème avec la même technique ?

Exercice 2.7 (Examen oraux). 6 étudiants (A, . . . , F ) doivent passer des exa-mens oraux pour différents modules (1, . . . , 5). La durée de chaque examen est

Page 73: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

2.10 OPTIMISATION MULTIOBJECTIFS 71

d’une heure. Comment construire un horaire aussi court que possible pour lepassage des étudiants, sachant qu’un étudiant ne peut faire qu’un examen àla fois et un professeur ne peut évaluer qu’un étudiant à la fois ?

ÉtudiantA B C D E F

1 × × ×2 × × × × ×

Module 3 × ×4 × × ×5 × ×

Exercice 2.8 (Examen écrit). Le tableau suivant résume les inscriptions auxexamens de divers modules par les étudiants A, . . . ,M . Si chaque candidatpas au plus un examen par jour, combien de jours sont nécessaires, au mini-mum, pour organiser la session d’examens ? Tous les étudiants devant passerle même module sont examinés en même temps.

ÉtudiantA B C D E F G H I J K L M

1 × × × × ×2 × × × ×3 × × × ×4 × ×

Module 5 × × × ×6 × ×7 × × × ×8 × × ×

Exercice 2.9 (Formulation du TSP). Formuler le problème du voyageur decommerce sous la forme de la recherche d’une permutation optimale.

Exercice 2.10 (QAP avec plus de positions que d’éléments). Comment adap-ter ou modifier la formulation du QAP lorsqu’il y a moins d’éléments à placer(n) que de positions (m) ?

Même question s’il y a un coût fixe cir d’affectation de l’élément i à la posi-tion r.

Exercice 2.11 (Configuration des touches d’un téléphone portable). On dé-sire reconfigurer les touches d’un téléphone portable. On désire placer unique-ment les 26 lettres minuscules ainsi que l’espace sur les touches 0, 2, 3, . . . , 9.On peut placer au maximum quatre caractères par touche. On connaît, pourla langue considérée, la fréquence fi d’apparition du caractère i ainsi que lafréquence gij d’apparition du caractère j après le caractère i. Pour saisir uncaractère en position p sur une touche, il faut la presser p fois, ce qui prendp unités de temps. Pour passer d’une touche à une autre, le temps de dépla-cement est d’une unité de temps. Pour saisir deux caractères placés sur lamême touche, cela prend 6 unités de temps. Comment construire un exemplede problème d’affectation quadratique pour la configuration du clavier ?

Exercice 2.12 (Transformation de bipartion et du TSP en QAP). Le problèmede la bipartition d’un graphe consiste à séparer ses sommets en deux sous-ensembles X et Y de même taille (on suppose un nombre pair de sommets)

Page 74: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

72 EXEMPLES ET MODÉLISATION DE PROBLÈMES COMBINATOIRES

de sorte que le nombre d’arêtes ayant une extrémité dans X et l’autre dansY soit aussi faible que possible. Comment construire un exemple de problèmed’affectation quadratique pour la bipartition d’un graphe ? Même question pourla transformation du TSP en QAP.

Exercice 2.13 (Bipartition spéciale). On considère un jeu de cartes numéro-tées de 1 à 50. On désire former deux tas avec ces cartes, le premier avec unesomme des valeurs numérotées de 1170 et l’autre avec un produit de 36000Comment coder une tentative de solution à ce problème ? Comment évaluer laqualité d’une tentative de solution ?

Exercice 2.14 (Carré magique). On désire créer un carré magique d’ordre n.Ce carré comporte n× n cases devant être remplies avec les nombres de 1 àn2. La somme des nombres dans chaque ligne, colonne et diagonale doit valoir(n3 − n)/2. On donne ci-dessous un exemple de carré magique d’ordre 4.

34

4 14 15 1 → 349 7 6 12 → 345 11 10 8 → 3416 2 3 13 → 34↓ ↓ ↓ ↓ 34 34 34 34 34

Comment coder une tentative de solution à ce problème ? Comment éva-luer la qualité d’une tentative de solution ?

Exercice 2.15 (Critère d’optimalité). Prouver que l’ordonnancement au plustard donné en exemple est optimal.

Exercice 2.16 (Évaluation de l’objectif pour la chaîne de traitement). Connais-sant le temps tij du traitement de l’objet i sur la machine j pour une chaîne detraitement à séquence fixée, comment calculer les heures de fin au plus tôt fijet de début au plus tard dij de chaque opération si les objets passent dans unordre donné par une permutation p?

Exercice 2.17 (Fabrication de plaques de verre). Pour la fabrication de plaquesde verre, le verre fondu passe sur une chaîne de m machines dans l’ordre1, 2, . . . ,m. Selon les caractéristiques désirées pour chaque plaque, le tempsde traitement sur chaque machine diffère. On suppose que l’on a n plaquesdifférentes à produire (dans un ordre qui peut être choisi par le gestionnaire dela chaîne) et que l’on connaît le temps tij du traitement de la plaque i sur lamachine j. De plus, lorsqu’une machine a terminé le traitement d’une plaque,cette dernière doit immédiatement passer sur la machine suivante, qui doit latraiter sans attendre pour qu’elle ne refroidisse pas. Une machine ne traitequ’une plaque à la fois. Le gestionnaire de la chaîne doit déterminer dans quelordre produire les n plaques pour terminer la production aussi rapidement quepossible. Comment modéliser ce problème sous la forme d’un voyageur decommerce ?

Page 75: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Deuxième partie

Techniques heuristiques debase

Page 76: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Page 77: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Chapitre 3

Méthodes constructives

3.1 Construction systématique

Lorsque l’on doit trouver la meilleure solution possible à un problème d’op-timisation combinatoire, la première idée qui vient est d’essayer de construiretoutes les solutions du problème, d’évaluer leur faisabilité et leur qualité et deretourner la meilleure qui satisfait l’ensemble des contraintes. Évidemment,cette approche ne peut se prêter qu’à des problèmes de taille limitée. Prenonsl’exemple d’un tout petit problème de sac de montagne en variables 0 − 1 àdeux contraintes :

max r = 9x1 + 5x2 + 7x3 + 3x4 + x5

sous 4x1 + 3x2 + 5x3 + 2x4 + x5 6 10contraintes 4x1 + 2x2 + 3x3 + 2x4 + x5 6 7

xi ∈ 0, 1(i = 1, . . . , 5)

(3.1)

Pour énumérer systématiquement l’ensemble des solutions de ce problème,on construit un arbre d’énumération : le premier nœud sépare les solutionspour lesquelles x1 = 0 de celles où x1 = 1. Au second niveau, on aura lesdeux nœuds séparant x2 = 0 et x2 = 1, etc. Potentiellement, ce problème a25 = 32 solutions, dont un grand nombre ne sont pas réalisable, car violantl’une ou l’autre ou les deux contraintes. Formellement, le premier nœud créedeux sous-problèmes qui seront résolus de façon récursive. Le premier sous-problème est obtenu en remplaçant x1 par 0 dans 3.1 :

max r = 0 + 5x2 + 7x3 + 3x4 + x5

sous 3x2 + 5x3 + 2x4 + x5 6 10contraintes 2x2 + 3x3 + 2x4 + x5 6 7

xi ∈ 0, 1(i = 2, . . . , 5)

Le second en remplaçant x1 par 1 dans (3.1) :

max r = 9 + 5x2 + 7x3 + 3x4 + x5

sous 3x2 + 5x3 + 2x4 + x5 6 6contraintes 2x2 + 3x3 + 2x4 + x5 6 3

xi ∈ 0, 1(i = 2, . . . , 5)

Page 78: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

76 MÉTHODES CONSTRUCTIVES

Pour éviter d’énumérer inutilement des solutions, on peut élaguer l’arbre enremarquant que si l’une ou l’autre des contraintes est violée dans un nœud,toutes les branches découlant de de nœud mèneront à des solutions inadmis-sibles car tous les coefficients des contraintes sont non négatifs. Par exemple,si les variables x1 = x2 = x3 = 1 sont déjà fixées, les deux contraintes sontviolées et tous les sous-problèmes que l’on pourrait créer à partir de là n’aurontpas de solutions admissibles. Par conséquent, il est inutile de développer cettebranche en essayant de fixer des valeurs pour les variables x4 et x5.

Une autre façon d’élaguer les branches non prometteuses est d’évaluersommairement si un sous-problème ne peut mener à une solution meilleureque la meilleure connue jusque là. Il s’agit de la méthode d’évaluation et sépa-ration.

3.1.1 Évaluation et séparation

Pour estimer rapidement si un sous-problème peut avoir une solution, et sicette dernière est prometteuse, une technique consiste à relaxer une ou plusi-eurs contraintes. La solution optimale du problème relaxé n’est pas forcémentadmissible pour le problème initial. Par contre, il est possible de faire quelquesdéductions à partir de la résolution du problème relaxé : si ce dernier n’a pasde solutions ou qu’il a une solution optimale plus mauvaise que la meilleuresolution admissible connue du problème initial, il est inutile de continuer à dé-velopper la branche partant de ce sous-problème. Si le sous-problème relaxéa une solution optimale qui est admissible pour le problème initial, il est éga-lement inutile de développer la branche, puisqu’on connaît déjà comment fixeroptimalement les variables encore libres de cette branche.

Plusieurs techniques sont couramment utilisées pour simplifier un sous-problème par la relaxation de contraintes :

Intégralité des variables Ce qui rend le problème (3.1) difficile, c’est que l’onimpose aux variables de prendre des valeurs entières. On peut donc re-laxer cette contrainte et résoudre le problème :

maxS = 9x1 + 5x2 + 7x3 + 3x4 + x5

sous 4x1 + 3x2 + 5x3 + 2x4 + x5 6 10contraintes 4x1 + 2x2 + 3x3 + 2x4 + x5 6 7

0 6 xi 6 1(i = 1, . . . , 5)

(3.2)

En résolvant ce problème linéaire pour lequel on connaît des algorithmespolynomiaux et efficaces, on trouve la solution optimale (0, 5; 1; 1; 0; 0)de valeur 16, 5 qui comporte une valeur fractionnaire, ce qui n’est pasadmissible pour le problème initial. Par contre, on sait dorénavant qu’iln’existe aucune solution au problème (3.1) dont la valeur dépasse 16, 5(ou même 16 puisque tous les coefficients sont entiers) . Si l’on avait pu« deviner » la solution (1; 0; 1; 0; 0), du problème initial, de valeur 16, larésolution du programme linéaire aurait démontré qu’elle est optimale.

Agrégation des contraintes Un certain nombre de contraintes sont addition-nées (éventuellement avec des coefficients multiplicatifs) pour en obtenir

Page 79: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

3.1 CONSTRUCTION SYSTÉMATIQUE 77

une autre. Dans l’exemple, cela donne :

maxS = 9x1 + 5x2 + 7x3 + 3x4 + x5

sous 8x1 + 5x2 + 8x3 + 4x4 + 2x5 6 17contraintes xi ∈ 0, 1(i = 1, . . . , 5)

(3.3)

Ce problème est un sac de montagne classique, plus facile à résoudreque le problème initial. La solution (1, 1, 0, 1, 0) est optimale pour le pro-blème relaxé mais n’est pas admissible pour le problème initial car la se-conde contrainte est violée. Comme le problème relaxé est NP -difficile,sa résolution pourrait parfois soulever certaines difficultés.

Combinaison de relaxations Il est évidemment possible de combiner plusi-eurs types de relaxation, par exemple l’agrégation de contraintes et l’in-tégralité des variables. Dans l’exemple, cela donne :

maxS = 9x1 + 5x2 + 7x3 + 3x4 + x5

sous 8x1 + 5x2 + 8x3 + 4x4 + 2x5 6 17contraintes 0 6 xi 6 1(i = 1, . . . , 5)

(3.4)

Ce problème peut être résolu en O(n log n) de la façon suivante : Lesvariables sont triées dans l’ordre des ri/vi décroissants (où ri est le re-venu de l’objet i et vi son volume (agrégé) ; dans l’exemple, les indicessont déjà triés) puis on prend les objets les uns après les autres danscet ordre jusqu’à ce qu’il soit impossible d’ajouter entièrement un nouvelobjet (ce qui donne x1 = x2 = 1). L’objet suivant est fractionné de façonà remplir totalement le sac ( =⇒ x3 = 4/8 pour une valeur totale du sacS = 9 + 5 + 7 · 4/8 = 17, 5). Comme tous les coefficients sont entiersdans l’exemple, S = b17, 5c = 17 est également une borne supérieure àl’optimum du problème initial.

La trame 3.1 donne une technique générale de la méthode d’évaluation etséparation. On remarquera que trois de ses composantes doivent être spéci-fiées par l’utilisateur avant d’aboutir à un algorithme complet. Tout d’abord, ilfaut spécifier comment l’ensemble Q des sous-problèmes en attente de traite-ment doit être géré. SiQ est géré en queue, on aura une exploration en largeur.Si Q est géré en pile, on aura une exploration en profondeur, ce qui favorisel’obtention rapide d’une solution admissible au problème initial. Q est cepen-dant souvent géré en queue de priorité, ce qui suppose le calcul d’une valeurpour chaque sous-problème, valeur que devrait être fortement corrélée aveccelle de la meilleure solution pouvant être obtenue en développant la branche(par exemple, la valeur S du problème relaxé). Souvent, le choix d’une méthodede gestion de l’ensemble Q est réalisé de façon très empirique.

La seconde composante à définir par l’utilisateur est la technique de re-laxation. C’est sans doute un des points les plus délicats de l’adaptation d’unalgorithme de séparation et évaluation pour un problème donné. Ce point dé-pend non seulement fortement du problème à résoudre mais également desdonnées numériques. Une technique, connue sous le nom de séparation etcoupe est d’ajouter des contraintes au sous-problème relaxé pour supprimerdes solutions non réalisables, comme par exemple certaines valeurs fraction-naires pour des variables devant être entière dans le problème initial.

Finalement il faut faire un choix pour séparer le problème, si la résolutiond’une relaxation indique que l’on peut obtenir, potentiellement, des solutions en

Page 80: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

78 MÉTHODES CONSTRUCTIVES

Algorithme 3.1 : Trame d’une méthode d’évaluation et séparation pour un ob-jectif f à maximiser. Il est nécessaire de fournir trois méthodes : une pour la ges-tion des sous-problèmes à résoudre (généralement, une queue de priorité (baséesur un critère heuristique) ou une pile), une méthode de calcul de relaxation dessous-problèmes et une heuristique choisissant la prochaine variable sur laquelleséparer un problème en plusieurs sous-problèmes.

Entrées : Un problème à n variables x1, . . . , xn, politique α de gestiondes sous-problèmes, méthode β de relaxation, politique γ debranchement

Résultat : Une solution optimale x∗ de valeur f∗

1 f∗ ← −∞; // Valeur de la meilleure solution trouvée2 F ← ∅ ; // Ensemble des variables fixées3 L← x1, . . . , xn ; // Ensemble des variables libres4 Q← (F,L) ; // Ensemble des sous-problèmes à résoudre5 tant que Q 6= ∅ faire6 Retirer un problème P = (F,L) de Q selon la politique α;7 si P peut potentiellement avoir des solutions admissibles avec les

valeurs déjà fixées dans F alors8 Calculer, avec la méthode β, une relaxation x de P en ne

modifiant que les variables xk ∈ L;9 si x est admissible pour le problème initial et f∗ < f(x) alors

10 x∗ ← x;11 f∗ ← f(x)

12 sinon si f(x) > f∗ alors13 Choisir un xk ∈ L selon la politique γ; // Développer la branche14 pour chaque Valeur v possible de xk faire1616 Q← Q ∪ (F ∪ xk = v, L \ xk)17 sinon18 Élaguer la branche ; // Elle n’a pas de solution meilleure que x∗

Page 81: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

3.2 CONSTRUCTION ALÉATOIRE 79

développant un nœud. Une politique simple est de choisir la variable d’indicele plus faible, ou une variable non entière dans la solution du problème relaxé.Mais ici également, la politique utilisée est très empirique.

Une mise en œuvre simple de cette trame est l’algorithme de recherche A*.Dans cet algorithme, les politiques α et γ de retrait d’un sous-problème et dedéveloppement d’une branche sont basées sur la valeur de la relaxation. Celasuppose donc que l’on évalue cette valeur heuristique avant d’insérer un sous-problème dans l’ensemble Q et que ce dernier est géré en queue de priorité.

Dans certains cas, le nombre de valeurs possibles pour la prochaine va-riable xk à fixer est très grand ; notamment lorsque xk peut prendre n’im-porte quelle valeur entière. Une technique de branchement est de considérerla valeur y non entière d’une variable xk pour le problème relaxé et de créerdeux branches, l’une avec la contrainte supplémentaire xk 6 byc et l’autrexk > byc+ 1. Dans ce cas, les ensembles de variables fixées et libres ne sontpas modifiés à la ligne 16. Cette technique a été proposée par [?].

Ces dernières années, les méthodes dites exactes pour la résolution deprogrammes linéaires en nombres entiers ont fait de gros progrès, notammentgrâce au développement de relaxations, de politiques de séparation et de bran-chement de plus en plus élaborées. Certains logiciels, comme CPLEX ou Gu-robi, intègrent des méthodes basées sur des métaheuritiques pour le calculde bornes ou pour l’obtention de solutions de bonne qualité, ce qui permetd’élaguer plus rapidement l’arbre d’énumération. Malgré cela, on n’échappepas à une croissance exponentielle du temps de résolution lorsque la taille desproblèmes augmente.

3.2 Construction aléatoire

Une méthode simple et rapide pour obtenir une solution est de la généreraléatoirement parmi l’ensemble des solutions admissibles. On ne peut évidem-ment espérer trouver ainsi de manière fiable une excellente solution, mais cetteméthode est largement employée dans des trames itératives où l’on répète unephase constructive suivie d’une phase d’amélioration avec une recherche lo-cale.

Notons qu’il n’est pas forcément évident d’écrire une procédure qui per-mette de générer chaque solution avec la même probabilité. L’exercice 3.1traite l’exemple de la génération d’une permutation aléatoire de n éléments.Des approches naïves comme celles données par les algorithmes 3.5 et 3.6peuvent mener à des solutions non efficaces ou/et non uniformes.

3.3 Construction gloutonne

Dans le chapitre 2, les premiers algorithmes classiques de graphes passésen revue — Prim et Kruskal pour la construction d’arbres de poids optimaux,Dijkstra pour la recherche de plus courts chemins — étaient des algorithmesgloutons. Ceux-ci construisent une solution en ajoutant un élément à chaqueétape. L’élément qui est ajouté l’est définitivement, sur la base d’une fonctionévaluant sa pertinence pour la solution partielle en cours de construction.

Page 82: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

80 MÉTHODES CONSTRUCTIVES

En supposant qu’une solution est composée d’éléments e ∈ E et que l’onpeut associer à une solution partielle s une fonction de coût incrémental c(e, s)si on ajoute e à s, l’algorithme 3.2 donne la trame d’une construction gloutonne.

Algorithme 3.2 : Trame d’une méthode gloutonne. Il ne s’agit pas d’un algo-rithme à proprement parler, car différentes implantations sont possibles, selon ladéfinition de l’ensemble E des éléments constituant les solutions et la fonction decoût incrémental.

Entrées : s solution partielle triviale (généralement ∅) ; ensemble Ed’éléments dont sont constituées les solutions du problème ;fonction de coût incrémental c(s, e)

Résultat : Solution complète s1 R← E; // Éléments pouvant encore être ajoutés à s2 tant que R 6= ∅ faire3 ∀e ∈ R, évaluer c(s, e);4 Choisir un e′ optimisant c(s, e′);5 s← s ∪ e′; // Ajouter e′ à la solution partielle s6 Retirer de R les éléments qui ne peuvent plus être utilisés pour

compléter s;

Des algorithmes aux performances très variées peuvent être obtenus selonla définition de E et c(s, e). Si l’on prend l’exemple de l’arbre de Steiner, onpourrait considérer que E est l’ensemble des arêtes du problème et la fonctionde coût incrémental le poids de chaque arête. Une solution partielle est alorsconstituée d’une forêt.

Une autre modélisation pourrait être de considérer E comme les pointsde Steiner. La fonction de coût incrémental consisterait à calculer un arbre depoids minimum sur l’ensemble des nœuds ordinaires, ceux déjà introduits danss et celui que l’on tente d’ajouter à s.

Nous allons maintenant donner quelques exemples d’heuristiques glou-tonnes qui ont été proposées pour divers problèmes d’optimisation combina-toire.

3.3.1 Méthodes gloutonnes pour le problème du voyageurde commerce

Glouton sur les arêtes

La manière la plus simple de concevoir un algorithme glouton pour le voya-geur de commerce est de considérer que les éléments e que l’on va ajouterà une solution partielle s sont des arêtes, avec comme fonction de coût incré-mental le poids de l’arête. Initialement, on part d’une solution partielle s = ∅.L’ensemble R est constitué des arêtes que l’on peut ajouter à la solution, sanscréer de sommet de degré > 2 ni de cycle ne comportant pas toutes les villes.La figure 3.1 illustre l’exécution de cette heuristique sur un petit exemple deproblème.

Page 83: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

3.3 CONSTRUCTION GLOUTONNE 81

FIGURE 3.1 – Exécution d’un algorithme glouton basé sur le poids des arêtes pour levoyageur de commerce.

Plus proche voisin

Une méthode gloutonne des plus simples à programmer pour le problèmedu voyageur de commerce est celle connue sous le nom de plus proche voisin.Les éléments à insérer sont les villes plutôt que les arêtes. Une solution par-tielle s est donc un chemin dans lequel les villes sont visitées dans l’ordre deleur insertion. Le coût incrémental correspond au poids de l’arête qui permetde relier la prochaine ville. La figure 3.2 illustre l’exécution de cette heuristiquesur le même exemple de problème que précédemment. Le fait d’obtenir unesolution identique à la méthode précédente est une coïncidence. Elle peut êtreprogrammée de façon très concise en Θ(n2), où n est le nombre de villes,comme le montre le code 3.1.

FIGURE 3.2 – Exécution du plus proche voisin pour le problème du voyageur de com-merce.

Listing 3.1 – tsp_nearest_neighbour.c Code C de l’heuristique du plus proche voisinpour le problème de voyageur de commerce. Remarquer l’extrême similitude de ce codeavec l’implantation de l’algorithme de Dijkstra donné par le code 2.1.double tsp_nearest_neighbour ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance mat r i x ∗ /i n t s , /∗ S t a r t i n g c i t y ∗ /i n t s o l u t i o n [ ] ) /∗ −−>Out Order o f the c i t i e s ∗ /

i n t i , j , j _kep t = −1;double d i s t _ i n s , leng th = 0 . 0 ; /∗ Cost o f i n s e r t i n g c i t y j , path leng th ∗ /

f o r ( i = 0 ; i < n ; i ++)s o l u t i o n [ i ] = i ;

swap ( s o l u t i o n + s , s o l u t i o n + 0 ) ; /∗ Tour s t a r t s from c i t y s ∗ /

f o r ( i = 1 ; i < n−1; i ++) /∗ C i t i e s s o l u t i o n [ 0 ] to s o l u t i o n [ i −1] f i x e d ∗ / d i s t _ i n s = i n f i n i t e ;

f o r ( j = i ; j < n ; j ++) /∗ Choose next c i t y to i n s e r t ∗ /i f ( d [ s o l u t i o n [ i −1] ] [ s o l u t i o n [ j ] ] < d i s t _ i n s ) d i s t _ i n s = d [ s o l u t i o n [ i −1] ] [ s o l u t i o n [ j ] ] ;

j _kep t = j ;

l eng th += d i s t _ i n s ;swap ( s o l u t i o n + i , s o l u t i o n + j_kep t ) ;

r e t u r n leng th + d [ s o l u t i o n [ n−1] ] [ s o l u t i o n [ s ] ] ;

/∗ tsp_nearest_neighbour ∗ /

Page 84: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

82 MÉTHODES CONSTRUCTIVES

Regret le plus grand

Si l’on examine le comportement de l’heuristique du plus proche voisin,on se rend compte, et cela apparaît dans la figure 3.2, que l’on risque d’oubliertemporairement des villes, ce qui occasionne ultérieurement de larges détours.Pour tenter d’éviter ce genre de situation, on peut évaluer le regret que cause-rait la non visite de la ville e juste après la dernière ville i du chemin partiel s :la ville e devra de toute façon figurer dans la tournée finale et il en coûtera aumoins minj,k∈R dje + dek pour la visiter. Par contre, si l’on visite e juste après i,cela coûtera au moins minr∈R die + der

L’heuristique du regret le plus grand choisit donc la ville e qui maximisec(s, e) = minj,k∈R dje + dek −minr∈R die + der.

Insertion la moins coûteuse

L’heuristique de l’insertion la moins coûteuse consiste à insérer une villedans une tournée partielle. L’ensemble E est donc celui des villes et la solutiontriviale de départ un cycle sur les deux villes les plus proches. Le coût incré-mental c(s, e) d’une ville est le détour minimal qu’il faut consentir pour insérerla ville e dans la tournée partielle s entre deux villes successives de s.

FIGURE 3.3 – Exécution de l’heuristique de l’insertion la moins coûteuse.

Insertion la plus coûteuse

L’heuristique de l’insertion la plus coûteuse est similaire à la précédente,mais elle choisit à chaque étape la ville dont l’insertion occasionne le plusgrand détour. Chaque ville est toutefois insérée à la meilleure place possibledans la tournée. Il pourrait paraître contre-intuitif de choisir à chaque étape laville la plus problématique. Cependant, une analyse montre que ce mode deconstruction est moins myope et produit souvent de meilleures solutions finalesque l’heuristique précédente.

FIGURE 3.4 – Exécution de l’heuristique de l’insertion la plus coûteuse.

Nous n’avons donné ici qu’une toute petite palette des méthodes construc-tives gloutonnes qui ont été proposées pour le voyageur de commerce. La

Page 85: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

3.4 AMÉLIORATION DE LA CONSTRUCTION GLOUTONNE 83

qualité des solutions qu’elles produisent est très variable. Il n’est généralementpas très difficile de trouver des exemples de problèmes pour lesquels l’heuris-tique gloutonne se fourvoie et fait des choix de plus en plus mauvais. Sur dessemis de point uniformément distribués dans un carré du plan euclidien, ellesfournissent des solutions dont la longueur dépasse de quelques dizaines depour-cent celle de l’optimum.

3.3.2 Méthode gloutonne pour la coloration de sommets

Méthode DSATUR

Une méthode gloutonne relativement élaborée pour la coloration des som-mets d’un graphe essaie de déterminer le sommet pour lequel l’attributiond’une couleur risque d’être la plus problématique. La méthode DSATUR [?]fait l’hypothèse que ce sera le sommet qui a déjà de nombreux voisins colorésavec une large palette de couleur. On définit donc le degré de saturation d’unsommet v, noté DS(v), le nombre de couleurs différentes employées par lessommets adjacents de v. À degré de saturation égal — notamment au départ,lorsqu’aucun sommet n’est coloré — on choisira le sommet de degré le plusélevé. À degré de saturation et degré égaux, les sommets sont départagésarbitrairement.

Algorithme 3.3 : Algorithme DSATUR pour la coloration de graphe. Le critèreglouton utilisé par cet algorithme est le degré de saturation des sommets, c’est-à-dire le nombre de couleurs différentes utilisées par les sommets adjacents.

Entrées : Graphe non orienté G = (V,E);Résultat : Coloration des sommets

1 Colorer le sommet v de plus grand degré avec la couleur 1;2 R← V \ v;3 couleur ← 1;4 tant que R 6= ∅ faire5 ∀v ∈ R, évaluer DS(v);6 Choisir un v′ maximisant DS(v′), de degré le plus élevé possible;7 Trouver k le plus petit possible (1 6 k 6 couleur + 1) tel que la

couleur k soit admissible pour v′;8 Colorer v′ avec la couleur k;9 si k > couleur alors

10 couleur = k

11 R← R \ v′;

3.4 Amélioration de la construction gloutonne

Le principal défaut d’une construction gloutonne est qu’elle ne remet jamaisen cause un choix qui a été fait de façon myope. À l’inverse, le défaut d’uneméthode énumérative complète est la croissance exponentielle de l’effort decalcul en fonction de la taille du problème. Pour limiter cette croissance, il faut

Page 86: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

84 MÉTHODES CONSTRUCTIVES

Solution partielle de départ

p meilleurs candidats du niveau 1

p meilleurs candidats du niveau 2

Meilleur candidat au niveau k

Élément ajouté à la solution de départ

FIGURE 3.5 – Recherche en faisceaux avec p = 3 et k = 3. Avant de choisir l’élément àinsérer dans la solution partielle, on fait une énumération en largeur jusqu’à une profon-deur de k, en ne retenant à chaque profondeur que les p candidats jugés les meilleurs.

donc limiter le développement de certaines branches, ce qui se fait générale-ment sur la base de critères gloutons.

Dans cette section, nous présentons deux techniques d’énumération par-tielles qui ont été proposées pour améliorer un algorithme glouton. La pre-mière, la recherche en faisceaux (Beam Search dans la littérature anglo-saxonne) a été proposée dans le cadre d’une application en reconnaissancede la parole [?]. La seconde, proposée par [?] est la méthode pilote, plus ré-cente, a été présentée directement comme la trame d’une méta-heuristique.D’autres trames en ont été dérivées [?].

3.4.1 Recherche en faisceaux

La recherche en faisceaux est une trame d’énumération procédant en lar-geur. Au lieu de conserver toutes les branches, seules p sont conservées aumaximum à chaque niveau, sur la base d’une fonction c(s, e) qui donne un coûtheuristique d’ajout de l’élément e à la solution partielle s. Lorsqu’on arrive auniveau k, ou si on a une solution complète, on ajoute à la solution du premierniveau de l’arbre d’énumération l’élément e qui mène à la meilleure solution audernier niveau. La figure 3.5 illustre le principe d’une recherche en faisceaux.

Il est possible de généraliser la recherche en faisceaux en ne considérantpas qu’un sous-ensemble de nœuds à chaque niveau de l’arbre d’énumération,mais en faisant une énumération complète jusqu’à une profondeur telle quel’on ait plus de p nœuds au dernier niveau. De l’ensemble de ces nœuds, onen retient les p meilleurs qui sont utilisés pour générer les candidats au niveausuivant.

3.4.2 Méthode pilote

La trame de la méthode pilote nécessite une heuristique dite pilote per-mettant de compléter une solution partielle en une solution complète. Cetteheuristique pilote peut être une simple méthode gloutonne, par exemple l’heu-ristique du plus proche voisin pour le problème du voyageur de commerce,mais elle peut également être une méthode beaucoup plus sophistiquée, tellesque celles présentées dans les chapitres suivants.

Page 87: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

3.4 AMÉLIORATION DE LA CONSTRUCTION GLOUTONNE 85

Solution partielle de départ

Meilleure solution complète

Élément ajouté à la solution de départ

Complétions avec l’heuristique pilote

Prochaine solution partielle

FIGURE 3.6 – Méthode pilote. On ajoute à la solution de départ un élément, puis onapplique une heuristique pilote qui la complète totalement avant de répéter le processusavec un autre élément ajouté à la solution de départ. L’élément finalement inséré estcelui ayant mené à la meilleure des solutions complètes.

Cette trame énumère toutes les solutions partielles qu’il est possible d’ob-tenir en ajoutant un élément à la solution de départ. On applique ensuite àtoute ces solutions partielles l’heuristique pilote pour aboutir à autant de solu-tion complètes. La solution partielle qui a été à l’origine de la meilleure solutioncomplète est utilisée comme nouvelle solution de départ, jusqu’à ce qu’il n’y aitplus d’élément à ajouter. La figure 3.6 illustre une étape de la méthode.

Page 88: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

86 MÉTHODES CONSTRUCTIVES

Algorithme 3.4 : Trame d’une méthode pilote.

Entrées : sp solution partielle triviale ; ensemble E d’éléments dont sontconstituées les solutions du problème ; heuristique pilote h(se)permettant de compléter totalement une solution se ; fonctionf(s) de calcul du coût d’une solution admissible s

Résultat : Solution complète s∗1 R← E; // Éléments pouvant encore être ajoutés à s2 tant que R 6= ∅ faire3 v ←∞;4 pour tous les e ∈ R faire5 Compléter sp avec e pour obtenir se;6 Appliquer h(se) pour obtenir une solution complète s;7 si f(s) 6 v alors8 v ← f(s);9 sr ← se;

10 si s est meilleure que s∗ alors11 s∗ ← s; // Mémoriser la solution complète s

12 sp ← sr; // Ajouter un élément à la solution partielle sp13 Retirer de R les éléments qui ne peuvent plus être utilisés pour

compléter sp;

La trame 3.4 précise le fonctionnement de cette méta-heuristique. Notonsque dans cette trame, la dernière des solutions «partielles» est une solutioncomplète admissible qui n’est pas forcément la solution retournée par cet algo-rithme. En effet, l’heuristique pilote peut générer une solution complète qui necomporte pas forcément les éléments de la solution partielle de départ, notam-ment si elle comporte une technique d’amélioration plus évoluée qu’une simplecomplétion gloutonne. Cette possibilité est illustrée par le code 3.2.

Page 89: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

3.4 AMÉLIORATION DE LA CONSTRUCTION GLOUTONNE 87

Listing 3.2 – tsp_pilot_nearest_neighbour.c Implantation d’une méthode pilote quiutilise comme heuristique pilote celle du plus proche voisin, suivie d’une méthoded’amélioration présentée plus loin 4.3.double tsp_p i lo t_neares t_ne ighbour2op t ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance mat r i x ∗ /i n t s o l u t i o n [ ] ) /∗ −>Out Order o f the c i t i e s ∗ /

i n t i , j , q , r , r_kept = −1, j _kep t =−1; /∗ I nd i ces ∗ /double cost , cos t_ ins_r , d i s t _ i n s ; /∗ Cost o f i n s e r t i n g next c i t y ∗ /i n t ∗s = ( i n t ∗) mal loc ( n ∗ s i z e o f ( i n t ) ) ; /∗ Copy of s o l u t i o n ∗ /

f o r ( i = 0 ; i < n ; i ++) /∗ A l l c i t i e s must be i n s o l u t i o n ∗ /s o l u t i o n [ i ] = i ;

f o r ( q = 0; q < n−1; q++) /∗ c i t i e s up to q at t h e i r f i n a l pos . i n s o l u t i o n ∗ / /∗ Choosing the next c i t y r to i n s e r t a t p o s i t i o n q ∗ /

cos t_ ins_ r = i n f i n i t e ;f o r ( r = q ; r < n ; r ++) f o r ( i = 0 ; i < n ; i ++)

s [ i ] = s o l u t i o n [ i ] ;swap (&s [ q ] , &s [ r ] ) ;/∗ nearest neighbour on c i t i e s from q+1 ∗ /f o r ( i = q+1; i < n−1; i = i + 1) d i s t _ i n s = i n f i n i t e ;

f o r ( j = i ; j < n ; j = j +1)i f ( d [ s [ i −1] ] [ s [ j ] ] < d i s t _ i n s ) d i s t _ i n s = d [ s [ i −1] ] [ s [ j ] ] ;

j _kep t = j ;

swap(&s [ i ] , &s [ j _kep t ] ) ; /∗ f o r i ∗ /cost = tsp_ leng th ( n , d , s ) ;t s p _ 2 o p t _ f i r s t ( n , d , s , &cost ) ;i f ( cos t_ ins_ r > cost ) cos t_ ins_ r = cost ;

r_kept = r ;

/∗ f o r r ∗ /swap(& s o l u t i o n [ r_kept ] , &s o l u t i o n [ q ] ) ;

/∗ f o r q ∗ /f r ee ( s ) ;cost = tsp_ leng th ( n , d , s o l u t i o n ) ;t s p _ 2 o p t _ f i r s t ( n , d , so lu t i on , &cost ) ;r e t u r n cost ;

Page 90: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

88 MÉTHODES CONSTRUCTIVES

3.5 Exercices

Exercice 3.1. Permutation aléatoire Écrire une procédure pour générer unepermutation aléatoire de n éléments contenus dans un tableau p. On désireque la probabilité de trouver l’élément pi en j ième position dans p après permu-tation soit 1/n. Décrire les défaut des algorithmes 3.5 et 3.6.

Algorithme 3.5 : Mauvais algorithme pour générer une permutation aléatoirede n éléments

Entrées : Un ensemble de n éléments e1, . . . , enRésultat : Une permutation p des éléments

1 i← 0; // Nombre d’éléments choisis2 tant que i 6= n faire3 Tirer un nombre aléatoire u uniformément entre 1 et n;4 si eu n’a pas déjà été choisi alors5 i← i+ 1;6 pi ← eu

Algorithme 3.6 : Autre mauvais algorithme pour générer une permutation aléa-toire de n éléments

Entrées : Un ensemble de n éléments e1, . . . , enRésultat : Une permutation p des éléments

1 i← 0; // Nombre d’éléments choisis2 tant que i 6= n faire3 Tirer un nombre aléatoire u uniformément entre 1 et n;4 i← i+ 1;5 si eu a déjà été choisi alors6 Trouver le prochain u′ tel que eu′ n’ait pas été choisi;7 pi ← eu′

8 sinon9 pi ← eu

Exercice 3.2. Algorithme glouton pour le sac de montagne Proposer troisalgorithmes gloutons différents pour le problème du sac de montagne

Exercice 3.3. Algorithme glouton pour voyageur de commerce sur le De-launay On désire construire la tournée d’un voyageur de commerce (dans leplan) en n’utilisant que des arêtes appartenant à une triangulation de Delaunay.Est-ce toujours possible ? Si ce n’est pas le cas, donner un contre-exemple,autrement, proposer une méthode gloutonne et analyser sa complexité.

Exercice 3.4. Voyageur de commerce avec limitation des voisins Pour ac-célérer une méthode gloutonne pour le TSP, on ne considère que les arêtesdes 40 plus proches voisins de chaque sommets. Est-ce susceptible de dimi-nuer la complexité algorithmique de la méthode ? Est-ce que cela peut soulevercertains problèmes ?

Page 91: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

3.5 EXERCICES 89

Exercice 3.5. Complexité de méthodes constructives Quelle est la com-plexité de l’heuristique du plus proche voisin pour le TSP ? Même questionsi on utilise cette heuristique dans une recherche en faisceaux en retenantp nœuds à chaque profondeur et que l’on va jusqu’à la profondeur k. Mêmequestion pour la méthode pilote où l’on utilise également l’heuristique du plusproche voisin comme pilote.

Exercice 3.6. Implantation de méthodes gloutonnes pour problème d’or-donnancement Proposer deux heuristiques gloutonnes pour le problème dela chaîne de traitement à séquence fixée. Comparer leur qualité sur des pro-blèmes de la littérature.

Exercice 3.7. Méthodes gloutonnes pour l’élaboration de tournées Propo-ser deux heuristiques gloutonnes pour le problème de l’élaboration de tournéesde véhicules.

Exercice 3.8. Heuristique pilote avec recherche locale Le code 3.2 fait in-tervenir comme heuristique pilote une complétion de la solution partielle avecl’heuristique du plus proche voisin (voir l’algorithme 3.1, suivie d’une amélio-ration de la solution complète avec une recherche locale tsp_2opt_first.Est-ce que la suppression de l’optimisation de la solution complète qui a étéconstruite, juste avant le return final a une grande incidence sur la qualité dela solution retournée par la méthode ? Est-ce qu’une méthode pilote où l’heu-ristique pilote est simplement l’heuristique du plus proche voisin (qui peut êtreobtenue par simple suppression des deux appels à tsp_2opt_first, bien quece ne soit pas la meilleure façon de la coder) produit des solutions nettementplus mauvaises que la méthode où l’on a uniquement supprimé le dernier appelà tsp_2opt_first?

Page 92: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

90 MÉTHODES CONSTRUCTIVES

Page 93: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Chapitre 4

Améliorations locales

En examinant les solutions produites par des heuristiques constructivesgloutonnes comme celles présentées au chapitre précédent, on remarque im-médiatement qu’elles ne sont pas optimales. Par exemple, la solution du pro-blème du voyageur de commerce euclidien obtenue par l’heuristique du plusproche voisin présentée en figure 3.2 comporte des arêtes qui se croisent,ce qui est évidemment sous-optimal. En effet, il est possible de remplacer lesdeux arêtes qui se croisent par deux autres dont la somme des longueurs estmoindre tout en conservant une tournée. Ce processus peut ensuite être ré-itéré jusqu’à l’obtention d’une solution qui ne peut plus être améliorée par lemême procédé, comme illustré en figure 4.1

4.1 Trame

L’idée générale est donc de partir d’une solution obtenue à l’aide d’une mé-thode constructive et de l’améliorer localement. On réitère le procédé jusqu’àce qu’on ne trouve plus d’amélioration. Cette trame est bien connue en optimi-sation continue, pour rechercher un optimum d’une fonction différentiable avecles méthode de gradient. En optimisation discrète, la notion de gradient per-mettant de trouver une direction d’amélioration n’existe pas ; elle est remplacée

FIGURE 4.1 – Améliorations successives d’une solution de problème de voyageur decommerce avec une recherche locale de type 2-opt, où deux arêtes (en couleur) sontremplacées par deux autres (en pointillé) dont la somme des longueurs est plus faible.

Page 94: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

92 AMÉLIORATIONS LOCALES

par la définition de « petites » modifications de la solution, ou de voisinage ouencore de mouvement.

Algorithme 4.1 : Trame générale d’une méthode d’amélioration locale. On sup-pose disposer d’une solution au problème ainsi que d’une méthode permettant, àpartir de toute solution, d’en générer un certain nombre d’autres.

Entrées : Solution s, méthode de modification des solutions du problèmeRésultat : Solution s améliorée

1 répéter2 Chercher une modification de s en s′ qui l’améliore;3 si s′ est meilleure que s alors4 s← s′;

5 jusqu’à ce qu’on ne trouve plus de modifications améliorant s;

4.2 Voisinage

Pour pouvoir appliquer la trame 4.1 d’amélioration, il faut définir commentobtenir les solutions voisines. Formellement, on doit définir, pour toute solutions ∈ S, un ensemble V (s) ⊂ S. Dans la trame, la recherche d’une modificationde s passe donc par l’énumération des solutions de V (s) pour en extraire une,s′, qui soit meilleure que s.

Une manière commode pour définir un voisinage V (s) est de spécifier lesmodifications, appelés communément les mouvements que l’on peut apporterà la solution s. Dans l’exemple de la figure 4.1 pour le problème du voyageurde commerce, un mouvement m peut être spécifié par une paire de villes [i, j]consistant à remplacer les arêtes [i, si] et [j, sj ] par les arêtes [i, j] et [si, sj ],où si et sj sont, respectivement, les villes qui suivent i et j dans la solution s.Ce voisinage, consistant à remplacer deux arêtes par deux autres est connudans la littérature sous le nom de 2-opt. L’ensemble M(s) des mouvements detype 2-opt que l’on peut appliquer à la solution s peut être défini formellementpar M(s) = [i, j], i, j ∈ s, i 6= j, j 6= si, i 6= sj.

L’application d’un mouvement m ∈ M(s) à la solution s est parfois notés⊕m. La définition du voisinage peut être faite à l’aide de celle de l’ensembledes mouvements : V (s) = s′|s′ = s⊕m,m ∈M(s).

Dans le cas du voisinage 2-opt, on vérifie que sa taille |V (s)| = Θ(|s|2).L’application d’une méthode d’amélioration au problème du voyageur de com-merce peut donc se réaliser raisonnablement en énumérant les solutions voi-sines. Cette énumération peut se faire selon deux politiques : celle du premiermouvement améliorant ou celle du meilleur mouvement.

4.2.1 Politique du premier mouvement améliorant

Dans cette politique, on modifie immédiatement la solution courante dèsqu’un mouvement améliorant est identifié. Le voisinage n’est donc pas examinéentièrement à chaque itération. La trame d’une méthode d’amélioration suivantcette politique est donnée par l’algorithme 4.2.

Page 95: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.2 VOISINAGE 93

Algorithme 4.2 : Trame d’une méthode d’amélioration avec politique du premiermouvement améliorant.

Entrées : Solution s, spécification du voisinage V (·), et de lafonction-objectif f(·) à minimiser.

Résultat : Solution s améliorée1 pour tous les s′ ∈ V (s) faire2 si f(s′) < f(s) alors3 s← s′ ; // Sortir de la boucle courante et initier la suivante

4.2.2 Politique du meilleur mouvement

Dans cette politique, on examine entièrement le voisinage à chaque itéra-tion. La solution voisine choisie comme solution courante pour l’itération sui-vante est la meilleure identifiée.

Algorithme 4.3 : Trame d’une méthode d’amélioration avec politique du meilleurmouvement.

Entrées : Solution s, spécification du voisinage V (·), et de lafonction-objectif f(·) à minimiser.

Résultat : Solution s améliorée1 répéter2 fin← vrai;3 valeur_meilleur_voisin←∞;4 pour tous les s′ ∈ V (s) faire5 si f(s′) < valeur_meilleur_voisin alors6 valeur_meilleur_voisin← f(s′);7 meilleur_voisin← s′

8 si valeur_meilleur_voisin < f(s) alors9 s← s′;

10 fin← faux

11 jusqu’à fin;

Parfois, l’ensemble V (s) est si grand que son énumération se fait soit im-plicitement pour en extraire la meilleure solution voisine, soit de façon heuris-tique ; nous y reviendrons en particulier au chapitre 5 avec la technique derecherche dans de grands voisinages 5.4.1.

4.2.3 Optima locaux

En appliquant la trame 4.1 on obtient une solution localement optimale re-lativement au voisinage utilisé. En effet, rien n’assure que la solution retournéeest la meilleure possible pour le problème considéré. On oppose donc les so-lutions globalement optimales à celles qui ne le sont que localement.

Toutefois, pour certains problèmes cette trame permet d’obtenir des so-lutions globalement optimales. On peut citer en particulier la recherche d’un

Page 96: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

94 AMÉLIORATIONS LOCALES

-

Tem

psde

calc

ul 104

103

102

10

1

10−1

10−2

10−3

10−4

10−5

Taille du problème

2-opt first

2-opt best

Θ(n2.33)

Θ(n3.25)

10 102 103 104 105

FIGURE 4.2 – Évolution du temps de calcul en fonction du nombre de villes d’un pro-blème de voyageur de commerce pour deux variantes de méthodes d’amélioration.

chemin optimum avec l’algorithme 2.4 de Bellman-Ford et la programmationlinéaire avec l’algorithme du Simplexe.

Il faut insister sur le fait qu’un optimum local relativement à un voisinagen’en est pas forcément un pour un autre voisinage.

Comme l’ensemble des solutions d’un problème combinatoire est fini et queles trames 4.2 et 4.3 n’effectuent une modification que si la solution est stric-tement améliorée, on en déduit que les algorithmes dérivés de ces trames seterminent après un temps fini. Par contre, leur temps de calcul n’est pas forcé-ment polynomial, même si la taille du voisinage l’est. En pratique, comme pourl’algorithme du Simplexe on n’observe pas une telle dégénérescence. Dansla figure 4.2 on a représenté l’évolution du temps moyen de calcul de deuxvariantes de méthodes d’améliorations pour le problème du voyageur de com-merce (politique du meilleur mouvement ou du premier mouvement améliorant)en fonction du nombre de villes. La solution de départ a été générée aléatoire-ment et les exemples de problèmes euclidiens ont été tirés de la TSPLIB [?].Comme les échelles sont logarithmiques, des temps de calculs approximative-ment alignés sur une droite indiquent une dépendance polynomiale.

TSP 3-opt

Au début de ce chapitre, nous avons vu une application d’une méthoded’amélioration pour le voyageur de commerce basée sur le remplacement dedeux arêtes par deux autres arêtes. Il est naturellement possible de définird’autres voisinages, par exemple le remplacement de trois arêtes (ou arcs dansle cas d’un problème non symétrique) par trois autres. Ce type de modifica-tions, appelé 3-opt, est illustré en figure 4.3. Une propriété intéressante de cevoisinage est qu’il ne modifie pas le sens de parcours des chemins entre lestrois nœuds dont on modifie les successeurs. En représentant une solution aumoyen d’une permutation s dont l’élément si donne la ville qui est visitée juste

Page 97: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.2 VOISINAGE 95

après la ville i, on peut implanter facilement en temps constant la modificationd’une solution par un mouvement de type 3-opt.

Vérifier qu’une solution est 3-optimale peut se faire en O(n3). Sans utiliserdes techniques de limitation du voisinage, il ne peut donc raisonnablement êtreutilisé que pour de relativement petits exemples de problèmes.

Le code de l’algorithme 4.1 implante une recherche locale pour le problèmedu voyageur de commerce. Les mouvements sont de type 3-opt ; dès qu’unmouvement améliorant est identifié, il est effectué. Dans ce code, on noteraencore qu’une solution n’est modifiée que si elle est améliorée de plus de ε. Eneffet deux solutions voisines de même coût pourraient être considérées toutesdeux meilleures l’une que l’autre, suite à des imprécisions numériques. En ac-ceptant toutes les solutions dont la différence de coût est fautivement négative,on s’exposerait à un code sans fin. En choisissant correctement la valeur de ε,on s’affranchit de ce problème. En pratique, on peut choisir ε = 10−14 ·max dij ,la limite de la précision relative du type double étant approximativement 10−15

(voir code A.4).

Listing 4.1 – tsp_ 3opt_ first.c Implantation en C d’une méthode d’amélioration baséesur le voisinage 3-opt. En pratique sa complexité en Ω(n3) la rend difficilement utilisablepour des problèmes présentant plusieurs centaines de villes.vo id t s p _ 3 o p t _ f i r s t ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance matr ix , symmetry not requ i red ∗ /i n t bes t_so l [ ] , /∗ InOut So lu t i on provided and re turned ∗ /double ∗best_cost ) /∗ InOut Length o f the best t ou r ∗ /

i n t ∗s = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ; /∗ Successors o f c i t i e s ∗ /i n t i , j , k , temp , /∗ indexes ∗ /

i_end , j_end , k_end ; /∗ Last values o f indexes ∗ /double de l t a ; /∗ Cost o f a move ∗ /

f o r ( i = 1 ; i < n ; i ++) /∗ Bu i ld s o l u t i o n rep resen ta t i on by successors ∗ /s [ bes t_so l [ i −1]] = best_so l [ i ] ;

s [ bes t_so l [ n−1]] = best_so l [ 0 ] ;

i = 0 ; j = s [ i ] ; k = s [ j ] ;i_end = i ; j_end = j ; k_end = k ;do de l t a = d [ i ] [ s [ j ] ] + d [ j ] [ s [ k ] ] + d [ k ] [ s [ i ] ] /∗ Computation o f move cost ∗ /

−d [ i ] [ s [ i ] ] − d [ j ] [ s [ j ] ] − d [ k ] [ s [ k ] ] ;i f ( de l t a < −eps i l on ) /∗ Improving move ? ∗ / temp = s [ i ] ; s [ i ] = s [ j ] ; s [ j ] = s [ k ] ; s [ k ] = temp ; /∗ Perform move ∗ /

temp = j ; j = k ; k = temp ; /∗ Replace j between i and k ∗ /∗best_cost = ∗best_cost + de l t a ; /∗ Update s o l u t i o n cost ∗ /i_end = i ; j_end = j ; k_end = k ; /∗ Update l a s t values o f indexes ∗ /

k = s [ k ] ; /∗ Next k ∗ /i f ( k == i )

j = s [ j ] ; k = s [ j ] ; /∗ k a t i t s l a s t value , next j ∗ /i f ( k == i )

i = s [ i ] ; j = s [ i ] ; k = s [ j ] ; /∗ j a t i t s l a s t value , next i ∗ / /∗ A complete tou r performed wi thou t improvement ∗ /wh i le ( i != i_end | | j != j_end | | k != k_end ) ;

/∗ Rebui ld s o l u t i o n under the form of a permutat ion o f c i t i e s ∗ /f o r ( j = 0 , i = 0 ; i < n ; j = s [ j ] , i ++)

bes t_so l [ i ] = j ;

f r ee ( s ) ;

Page 98: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

96 AMÉLIORATIONS LOCALES

FIGURE 4.3 – Mouvement de type 3-opt où trois arcs sont remplacés par trois autresarcs. Les autres chemins de la solution sont parcourus dans le même sens, avant etaprès modification. Une autre façon d’appréhender le voisinage 3-opt est le déplace-ment d’un sous-chemin ailleurs dans la tournée.

FIGURE 4.4 – Mouvement de type Or-opt où trois sommets successifs sont déplacés àl’intérieur de la tournée. Dans certains cas, il est souhaitable de modifier l’ordre respectifde visite des trois sommets.

TSP Or-opt

Un autre type de voisinage proposé par [?] consiste à raisonner sur le dé-placement de villes à l’intérieur de la tournée. L’idée est d’examiner s’il estpossible de placer ailleurs trois villes qui sont visitées successivement dans lasolution courante. L’originalité de la méthode proposée par Or est de ne passe contenter d’un seul voisinage : Une fois qu’il n’est plus possible d’améliorerla solution en déplaçant trois villes, on cherche à n’en déplacer que deux. Dèsqu’un déplacement de deux villes permet d’améliorer la solution, on revientau premier voisinage. Ensuite, lorsqu’on a une solution localement optimalerelativement à ces deux voisinages, on essaie de ne déplacer qu’une ville.

Le voisinage est différent d’une limitation du voisinage 3-opt dans lequel unsous-chemin serait limité à 3, 2 ou 1 ville. En effet, il est possible d’inverserl’ordre de parcours du chemin avec ce voisinage.

Il est possible de tester en Θ(n2) si une solution est Or-optimale.

Page 99: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.2 VOISINAGE 97

FIGURE 4.5 – Structure de données permettant d’effectuer un mouvement de type 2-opt en temps constant. Les entrées 2i et 2i + 1 d’un tableau donnent les indices dumême tableau identifiant les deux villes adjacentes à la ville i. En partant de l’indice0, on peut reconstituer la tournée en allant de ville adjacente en ville adjacente et enpartant de l’indice 1, on peut reconstituer la tournée dans l’autre sens. La réalisationd’un mouvement 2-opt s’effectue par modification de 4 entrées du tableau.

Structure de données pour TSP 2-opt

Le voisinage 2-opt renverse l’ordre de parcours d’un chemin. Si cela semblevisuellement anodin pour un exemple de problème symétrique, il n’en est pasainsi pour la représentation informatique d’une solution. Une structure de don-née, inspirée des travaux de [?], permettant de réaliser un mouvement 2-opten temps constant est la suivante : chaque ville mémorise ses deux villes ad-jacentes. La ville i est donc représentée par deux valeurs, 2i et 2i + 1, selonque l’on tourne dans un sens ou dans l’autre.

Une solution sera représentée par un tableau t de 2n indices, avec initia-lement t2i/2 donnant le numéro de la ville qui succède à i et (t2i+1 − 1)/2le numéro de la ville qui précède i. Un mouvement de type 2-opt consiste àmodifier 4 valeurs du tableau t, ce qui peut se réaliser en temps constant. Lafigure 4.5 illustre le principe de fonctionnement de cette structure de données.

Listing 4.2 – build_ 2opt_ data_ structure.c Implantation en C de l’initialisation de lastructure de donnée présentée en figure 4.5 pour permettre d’effectuer un mouvement2-opt en temps constant à partir d’une solution fournie sous la forme de la suite desvilles à visiter.vo id bu i l d_2op t_da ta_s t ruc tu re ( i n t n ,

const i n t s o l u t i o n [ ] ,i n t t [ ] )

i n t i ;/∗ Forward tou r ∗ /f o r ( i = 0 ; i < n−1; i = i + 1)

t [2∗ s o l u t i o n [ i ] ] = 2∗ s o l u t i o n [ i + 1 ] ;t [2∗ s o l u t i o n [ n−1]] = 2∗ s o l u t i o n [ 0 ] ;/∗ Backward tou r ∗ /f o r ( i = 1 ; i < n ; i = i + 1)

t [2∗ s o l u t i o n [ i ] + 1 ] = 2∗ s o l u t i o n [ i −1]+1;t [2∗ s o l u t i o n [ 0 ] + 1 ] = 2∗ s o l u t i o n [ n−1]+1;

Page 100: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

98 AMÉLIORATIONS LOCALES

L’initialisation d’un tableau t implantant cette structure de donnée à partird’une solution donnée sous la forme d’une permutation dont la composante idonne le numéro de la iième ville peut se faire à l’aide de l’algorithme 4.2.

Le code de l’algorithme 4.3 implante une méthode d’amélioration baséesur ce principe. Il fait usage de l’opérateur de décalage i >> 1 pour évaluerrapidement l’expression i/2 qui donne le numéro de la ville d’indice i ainsique de l’opérateur « ou exclusif » i 1 pour calculer rapidement l’expressioni+1-2*(i%2) qui donne l’indice de t permettant de connaître l’autre ville adja-cente.

Listing 4.3 – tsp_ 2opt_ first.c Implantation en C d’une méthode d’amélioration pourle voyageur de commerce basée sur le voisinage 2-opt. Cette implantation utilise lastructure de donnée présentée en figure 4.5 permettant d’effectuer un mouvement entemps constant.vo id t s p _ 2 o p t _ f i r s t ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance matr ix , must be symmetr ica l ∗ /i n t bes t_so l [ ] , /∗ InOut So lu t i on provided and re turned ∗ /double ∗best_cost ) /∗ InOut Length o f the best t ou r ∗ /

i n t ∗ t ; /∗ Doubly connected edge l i s t f o r e f f i c i e n t l y per forming moves ∗ /

i n t i , j , nex t_ i , next_ j , l a s t _ i ; /∗ I nd i ces ∗ /double de l t a ; /∗ Cost d i f f e r e n c e ∗ /

t = ( i n t ∗) mal loc ( ( s i z e _ t ) (2∗n ) ∗ s i z e o f ( i n t ) ) ;bu i l d_2op t_da ta_s t ruc tu re ( n , best_sol , t ) ;

i = l a s t _ i = 0 ; /∗ S t a r t moves eva lua t i on from c i t y 0 ∗ /wh i le ( t [ t [ i ] ] > >1 != l a s t _ i ) /∗ Index i has made 1 tu rn w i thou t impovement ∗ / j = t [ t [ i ] ] ;

wh i le ( j >>1 != l a s t _ i && ( t [ j ]>>1 != l a s t _ i | | i >>1 != l a s t _ i ) ) de l t a = d [ i > >1] [ j >>1] + d [ t [ i ] > >1] [ t [ j ] > >1]

− d [ i > >1] [ t [ i ] > >1] − d [ j > >1] [ t [ j ] > >1] ;i f ( de l t a < −eps i l on ) nex t_ i = t [ i ] ; nex t_ j = t [ j ] ; /∗ Perform move ∗ /

t [ i ] = j ^1 ; t [ j ] = i ^1 ;t [ nex t_ i ^1 ] = nex t_ j ; t [ nex t_ j ^1 ] = nex t_ i ;

∗best_cost = ∗best_cost + de l t a ; /∗ Update s o l u t i o n cost ∗ /l a s t _ i = i >>1; /∗ So lu t i on improved : i must make another tu rn ∗ /j = t [ i ] ;

j = t [ j ] ;

/∗ whi le j ∗ /i = t [ i ] ;

/∗ whi le i ∗ /

/∗ Rebui ld s o l u t i o n : number o f c i t y i n j t h p o s i t i o n ∗ /f o r ( i = 0 , j = 0 ; j < n ; i = t [ i ] , j ++)

bes t_so l [ j ] = i >>1;

f r ee ( t ) ; /∗ t sp 2−opt ∗ /

4.2.4 Propriétés recherchées pour un voisinage

Un voisinage met en relation des solutions du problème. On peut donc lereprésenter sous la forme d’un graphe, où les sommets sont les solutions.Deux sommets sont reliés par une arête (ou un arc, si les mouvements nesont pas immédiatement réversibles) si les solutions associées sont voisines.Pour être efficace, un voisinage, ou son graphe représentatif, devrait possédercertaines propriétés.

Page 101: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.2 VOISINAGE 99

Connexité

La propriété de connexité d’un voisinage stipule qu’à partir de toute solu-tion admissible du problème, on doit pouvoir atteindre au moins une solutionglobalement optimale. En d’autre terme, il doit exister un chemin de n’importequel sommet à celui (ou un de ceux) représentant une solution optimale.

Faible diamètre

Un voisinage devrait permettre d’atteindre une solution optimale en peud’étapes. Par définition, le diamètre d’un graphe est la longueur maximale d’unplus court chemin reliant deux sommets.

Faible rugosité

Un voisinage devrait posséder un nombre d’optima locaux aussi faible quepossible et une forte corrélation entre les valeur des solutions voisines. L’idéalserait qu’il n’en possède qu’un, qui serait alors l’optimum global, atteignableà tous les coups en partant de n’importe quelle solution. Évidemment, cettepropriété n’est pas remplie pour les problèmes difficiles. Néanmoins, trouverun voisinage adéquat pour le problème considéré est essentiel pour le succèsd’une méthode d’amélioration.

Pour des problèmes comme le voyageur de commerce, de nombreux voisi-nages ont été imaginés, certains étant particulièrement efficaces pour obtenird’excellentes solutions. Ceci peut vraisemblablement s’expliquer par le côtétrès visuel du problème, ce qui nous aide fortement dans le choix des modi-fications à apporter à une solution pour l’améliorer. Pour d’autres problèmes,il est difficile d’imaginer des voisinages, et ces derniers mènent parfois à despaysages du type « boîte à œufs », très mal adaptés à l’optimisation.

Une possibilité pour lisser un voisinage est de modifier la fonction-utilité. Laméthodes des éléphants volants de [?] procède par le remplacement de termesen |x| dans la fonction utilité par

√x2 + τ2 et de termes du type max(0, x) par

(x+√x2 + τ2)/2, où τ est un paramètre que l’on fait tendre vers 0 si l’on veut se

rapprocher de la fonction-utilité originale. La métaphore des éléphants volantsvient du fait que si on lâche un objet arrondi et volumineux sur un terrain, ilroulera plus loin, vers une altitude plus basse que si on lâche à partir du mêmepoint un petit objet, qui s’arrêtera au premier minuscule accident du terrain.

Faible taille

Les méthodes d’amélioration étant basées sur l’évaluation systématique desolutions voisines, ces dernières ne devraient pas être excessivement nom-breuses. Par exemple, un voisinage de type 2-opt pour le problème du voya-geur de commerce, en O(n2), permet d’attaquer des problèmes avec plusi-eurs milliers de villes, ce qui n’est pas envisageable avec le vosinage 3-opt, enO(n3).

Page 102: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

100 AMÉLIORATIONS LOCALES

Facilité d’évaluation

Finalement, l’évaluation de la qualité des solutions voisines doit pouvoir seréaliser avec un algorithme dont la complexité est aussi faible que possible. Parexemple, pour un problème de voyageur de commerce asymétrique, l’avantageque pourrait procurer la faible taille d’un voisinage 2-opt par rapport à 3-optest annihilé par le fait que l’évaluation du coût d’un mouvement ne peut plusêtre faite en temps constant, comme c’est le cas pour 3-opt. De plus, on peutimaginer que la rugosité du voisinage 2-opt sera plus élevée que celle de 3-optpour des problèmes fortement asymétriques.

4.3 Limitation du voisinage

Typiquement, la taille d’un voisinage croît de façon quadratique ou cubiqueavec la taille du problème. Par conséquent, une recherche locale nécessitantd’examiner de nombreuses fois l’ensemble du voisinage requiert un effort decalcul prohibitif lorsque la taille du problème augmente. Diverses techniquesont été proposées pour limiter la croissance des calculs.

4.3.1 Liste de candidats

Une première idée consiste à faire l’hypothèse qu’un mouvement favorablepour une solution restera bon pour des solutions pas trop différentes. Unetechnique générale de limitation de l’effort de calcul est d’évaluer l’ensembledes mouvement applicables à une solution donnée et de mémoriser dans uneliste de mouvements candidats, dont la taille est limitée, les caractéristiquesdes meilleurs mouvements trouvés. Pendant un certain nombre d’itérations, onn’évalue que les mouvements contenus dans la liste. Périodiquement, il fauttoutefois évaluer l’ensemble du voisinage, car la solution est susceptible d’avoirété passablement modifiée ; des mouvements qui n’étaient pas favorables peu-vent donc le devenir et vice versa.

Liste de candidats pour le voyageur de commerce euclidien

Dans le cas du problème du voyageur de commerce, l’évaluation d’un mou-vement est indépendante de la solution. Une liste de mouvements candidatsn’a donc pas besoin d’être reconstruite périodiquement. En revanche, il fautmettre au point un mécanisme permettant de détecter si un mouvement parti-culier est valide, par exemple qu’il ne crée pas deux ou plusieurs sous-cyles.

Si les villes d’un problème de voyageur de commerce sont placées sur leplan euclidien on peut construire en O(n log n) une triangulation de Delaunayet tenter de ne considérer que des tournées faisant usage d’arêtes présentesdans la triangulation. Le nombre d’arêtes de celle-ci est en Θ(n) et le degrémoyen des sommets de 6.

Dans la figure 4.6 on a représenté la triangulation de Delaunay associéeà un problème de voyageur de commerce euclidien, superposée à la solutionoptimale de ce problème. À moins d’être manchot, le lecteur pourra comptersur ses doigts les arêtes de la solution optimale qui ne font pas partie de la

Page 103: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.3 LIMITATION DU VOISINAGE 101

FIGURE 4.6 – Tournée optimale à l’exemple de problème de voyageur de commercepr2392 sur laquelle on a superposé la triangulation de Delaunay associée aux sommetsdu réseau.

Page 104: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

102 AMÉLIORATIONS LOCALES

triangulation. Ceci suggère qu’une heuristique travaillant sur des solutions ba-sées essentiellement sur les arêtes de la triangulation de Delaunay peut don-ner d’excellent résultats tout en nécessitant un effort de calcul très limité. Enparticulier, une recherche locale basée sur un voisinage de type k-opt pourrafonctionner même pour des valeurs de k valant 5 ou 6, s’il est restreint auxarêtes du Delaunay, puisque le nombre de solutions voisines d’un problème detaille n sera en O(n · 6k).

Limitation du voisinage pour le voyageur de commerce avec 1-arbres

Malheureusement, tous les problèmes ne sont pas euclidiens, et il n’estdonc pas toujours possible de construire une triangulation de Delaunay. Unetechnique plus générale de limitation du voisinage pour le problème du voya-geur de commerce, proposée par [?], est basée sur le concept de 1-arbre, quin’est rien d’autre qu’une forme de relaxation lagrangienne.

Un 1-arbre dans un réseau comportant des sommets 1, 2, . . . , n est un arbrede poids minimum sur les sommets 2, . . . , n auquel on ajoute les deux arêtesadjacentes au sommet 1 qui ont le poids le plus faible. Le nœud 1 joue iciun rôle particulier, d’où le terme de 1-arbre. On peut reformuler le problèmedu voyageur de commerce en spécifiant que l’on cherche un 1-arbre de poidsminimum pour lequel le degré de tous les sommets est 2.

min z =∑

(i,j)∈H dijxijsous

∑nj=1 xij = 2(i = 1, . . . , n)

contraintes H est un 1-arbre(4.1)

En relaxant les contraintes sur le degré de chaque sommet et en les inté-grant avec un multiplicateur de lagrange dans l’objectif, on obtient :

min z(λ) =∑

(i,j)∈H dijxij +∑ni=1 λi(

∑nj=1 xij − 2)

sous contrainte H est un 1-arbre(4.2)

Pour des λi fixés, ce problème revient à recherche un 1-arbre de poidsminimum dans un réseau dont le poids de l’arête (i, j) est modifiée en dij +λi + λj . Avec ces poids modifiés, on peut constater que la longueur d’unetournée est la même qu’avec les poids non modifiés, mais augmenté de 2 ·∑i λi, puisqu’il faut entrer une fois dans chaque sommet i et en ressortir une

fois, en devant « payer » deux fois une pénalité λi.La valeur z(λ) permet donc d’obtenir un borne inférieure à la longueur de la

tournée optimale. On peut améliorer la valeur de cette borne en trouvant desλi maximisant z(λ).

En première approximation, l’idée de [?] pour limiter le voisinage d’unerecherche locale, est de calculer, pour chaque arête (i, j) le surcoût qu’elleengendrerait si on imposait qu’elle fasse partie du 1-arbre et de ne retenir quequelques arêtes adjacentes à chaque sommet, celles dont le surcoût est le plusfaible. Cette technique de modification de la longueur des arêtes a égalementcomme propriété de lisser certains voisinages. Elle présente également dessimilarités avec la recherche granulaire.

Page 105: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.4 EXTENSION DU VOISINAGE 103

4.3.2 Recherche granulaire

La recherche granulaire consiste à éliminer a priori les solutions présen-tant certaines caractéristiques. Par exemple, pour le problème d’élaborationde tournées de véhicules, on peut faire l’hypothèse que les bonnes solutionsne comporteront pas de trajets reliant directement des clients très éloignés.Pour ce problème, [?] ont proposé d’ignorer les solutions qui comporteraientdes trajets entre deux clients dont la longueur est supérieure β fois la lon-gueur moyenne des trajets d’une solution obtenue à l’aide d’une heuristiqueconstructive rapide, où β est un paramètre généralement légèrement supé-rieur à 1 contrôlant ce qui a été appelé la granularité de la recherche locale.Pour le problème de distribution, il est toutefois nécessaire de conserver leslongs trajets directs que l’on pourrait avoir entre clients et dépôt.

Une technique similaire a été abondamment utilisée pour le problème duvoyageur de commerce : au lieu de considérer un graphe complet où chaqueville est reliée à toutes les autres, on se contente d’un graphe où chaque villen’est connectée qu’à ses p plus proches voisines, avec p limité à quelquesdizaines. Ainsi, la taille d’un voisinage 2-opt est en n · p2 au lieu de n2. Laperte sur la qualité des solutions obtenues avec un tel voisinage réduit estsouvent négligeable. Par contre, l’implantation de cette idée n’est pas triviale :tout d’abord, il se peut que le graphe où chaque nœud n’est relié qu’à ses pplus proches voisins ne soit pas connexe. Il faut donc ajouter des connexionsplus longues pour qu’il contienne un cycle passant par tous les nœuds. Ensuite,l’implantation de la recherche locale est plus complexe. Par exemple, pour levoisinage 2-opt, on ne peut plus exploiter directement la structure de donnéesprésentée dans la figure 4.5 permettant de réaliser un mouvement en tempsconstant. En effet, s’il est facile de déterminer la ville si qui succède à la villei et une ville j proche de i (il n’y en a plus que p), on ne peut plus identifierla ville sj qui succède à j en parcourant la tournées dans le sens i → si. Dela même manière, pour le voisinage 3-opt, on peut rapidement détecter troisvilles i, j et k proches qui seraient candidates pour un mouvement 3-opt, maison ne peut pas déterminer en temps constant si, en partant de i, on va visiterd’abord la ville j avant la ville k.

4.4 Extension du voisinage

Pour d’autres problèmes il est au contraire difficile d’imaginer des voisi-nages raisonnables qui modifient une solution autrement que de façon margi-nale. Se pose donc le problème de construire des modifications conséquentesd’une solution à partir d’un voisinage simple et limité. Notons au passage qu’ilest parfaitement possible d’une part de limiter la taille d’un voisinage simpleavec les techniques décrites plus haut pour en éliminer les mouvements quine mèneront jamais à de bonnes solutions tout en étendant ce voisinage limitéavec les techniques que l’on va étudier.

4.4.1 Recherche en éventail

Pour construire un voisinage étendu Ve à partir de la définition d’un faibleensemble M de mouvements applicables à une solution, il suffit de considérer

Page 106: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

104 AMÉLIORATIONS LOCALES

Solution de départ

p meilleurs voisins du niveau 1

p meilleurs voisins du niveau 2

Meilleure solution visitée : solution de départ pour la prochaine itération

Mouvements applicables à la solution de départ

Niveau k

FIGURE 4.7 – Recherche en éventail avec p = 3 et k = 3. À chaque niveau, on retientau maximum p solutions voisines. La prochaine solution courante sera la meilleure decelles énumérées.

k modifications successives : Ve(s) = s′|s′ = s ⊕m1 ⊕ · · · ⊕mk,m1, . . .mk ∈M(s) La taille de Ve croît exponentiellement avec k. Pour éviter une telle crois-sance, on peut utiliser la stratégie de la recherche en faisceaux présentée à lasection 3.4.1, mais adaptée à une recherche locale plutôt qu’à une méthodeconstructive. Cette technique a été appelée recherche en éventail avec filtre. Àchaque niveau, on ne retient que les p meilleures solutions voisines (qui peu-vent être moins bonnes que la solution de départ) et on évalue les voisins deces dernière avant de réitérer le processus jusqu’au niveau k. Ainsi, à chaqueétape, on effectue jusqu’à k modifications selon le voisinage d’origine. Il fautnoter ici que la meilleure solution rencontrée lors de l’évaluation du voisinageétendu n’est pas forcément une de celles du dernier niveau.

Ce processus est illustré en figure 4.7.Une variante de la recherche en éventail est de ne pas retenir à chaque

niveau un nombre statique p de solutions voisines, mais toutes les solutionsvoisines améliorantes. Le choix de la solution voisine qui sera finalement rete-nue au niveau 1 ne sera pas celle qui permet d’aboutir à la meilleure solutiondu niveau k, mais celle qui permet d’ouvrir le plus l’éventail, c’est-à-dire, lasolution du niveau k − 1 qui a le plus de solutions améliorantes au niveau k.

4.4.2 Chaîne d’éjections

Une autre technique de construction d’un voisinage étendu à partir de mo-difications élémentaires consiste à passer par des solutions non réalisables.Partant d’une solution, on transforme cette dernière en un objet appelé struc-ture de référence qui n’est pas une solution mais qui peut facilement être trans-formé soit en une autre structure de référence, soit en une solution admissible.La solution de départ est perturbée par l’éjection d’un de ses éléments constitu-tifs pour obtenir une structure de référence qui peut elle aussi être transforméepar éjection d’un autre élément. Cette chaîne d’éjections se termine soit lors-qu’une solution meilleure que celle de départ a pu être identifiée, soit lorsquetous les éléments éjectables l’ont été. Si une meilleure solution est trouvée,le processus peut réitéré à partir de cette dernière, sinon on initie la chaîneen essayant d’éjecter un autre élément de la solution de départ. Le processus

Page 107: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.4 EXTENSION DU VOISINAGE 105

a bd c

Tournée initiale

Chaîne

Structure de référence

Nouvelle chaîne

Nouvelle structure

Nouvelle tournée

a′ b′d′ c′

FIGURE 4.8 – Principe de fonctionnement d’une chaîne d’éjections pour le problème duvoyageur de commerce : éjecter une arête [a, b] pour obtenir une chaîne, insérer unearête [b, d] pour obtenir une structure de référence qui peut être transformée soit en uneautre structure de référence par éjection de l’arête [c, d] et ajout d’une autre arête, soiten une tournée par éjection de la même arête et ajout de l’arête [a, c].

s’arrête lorsque l’on a tenté vainement toutes les initialisations possibles dechaînes. Pour éviter un processus sans fin, on s’interdit d’ajouter à la structurede référence un élément qui aurait été au préalable éjecté ou au contraire, depropager la chaîne en éjectant un élément qui aurait été ajouté à la structurede référence.

Voisinage de Lin-Kernighan Un des voisinages les plus efficaces pour leproblème du voyageur de commerce est celui de Lin & Kernighan. Il est basésur l’idée de chaînes d’éjections. La tournée initiale est transformée en unechaîne par suppression d’une arête [a, b]. Cette chaîne est transformée en unestructure de référence, constituée d’une chaîne reliée à un cycle par adjonctiond’une arête [b, d]. En supprimant l’arête [c, d] faisant partie du cycle de la struc-ture de référence, on transforme cette dernière en une autre chaîne, qui peutelle-même être transformée en une tournée par l’adjonction de l’arête [a, c] ouen une autre structure de référence par l’adjonction d’une autre arête incidenteà c (qui joue le rôle du b de l’étape précédente).

Le principe de fonctionnement de ce processus est illustré en figure 4.8. Ce

Page 108: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

106 AMÉLIORATIONS LOCALES

Solution de départ Chaîne Structure 1

Structure 2 Structure 3 Solution acceptée

FIGURE 4.9 – Application d’une chaîne d’éjection sur un petit problème de voyageur decommerce. Après 4 éjections, on réussit à améliorer la solution de départ.

mécanisme peut sembler artificiel dans cette figure, mais avec des villes bienréparties sur le plan, on se rend compte qu’il est possible d’obtenir des modi-fications relativement complexes et améliorant des solutions pas franchementmauvaises, comme illustré en figure 4.9.

Page 109: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.4 EXTENSION DU VOISINAGE 107

Algorithme 4.4 : Trame d’une méthode d’amélioration par chaîne d’éjectionspour le problème du voyageur de commerce.

Entrées : Solution p d’un voyageur de commerceRésultat : Solution p améliorée

1 répéter2 Initier la chaîne par l’éjection d’une arête [a, b];3 répéter4 Trouver l’arête [b, d] qui, une fois ajoutée, minimise le poids de la

structure de référence et telle que l’arête [c, d] n’ait pas encore étésupprimée dans la chaîne d’éjections courante;

5 si L’arête [b, d] a été trouvée et Le poids de la structure deréférence est inférieure au poids de la tournée p alors

6 si L’ajout de [a, c] et la suppression de [c, d] améliore lasolution alors

7 Succès : Remplacer la solution p par celle qui a ététrouvée;

8 sinon9 Ajouter l’arête [b, d];

10 Supprimer l’arête [c, d];11 b← c;

12 sinon13 Échec de la chaîne : revenir à la solution p et tenter une autre

éjection14 jusqu’à ce qu’aucune arête [b, d] convenable existe;15 jusqu’à ce que toutes les arêtes de la solution p ont initié une chaîne

sans succès;

Page 110: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

108 AMÉLIORATIONS LOCALES

Listing 4.4 – tsp_ LK.c Chaîne d’éjections pour le voyageur de commerce.vo id tsp_LK ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗D, /∗ Distance matr ix , must be symmetr ica l ∗ /i n t bes t_so l [ ] , /∗ InOut So lu t i on provided and re turned ∗ /double ∗best_cost ) /∗ InOut Length o f the best t ou r ∗ /

i n t ∗ s ; /∗ Reference s t r u c t u r e : successors o f each c i t y ∗ /i n t a , end_a , b , c , d , best_c , i , j , s i , s s i ; /∗ I nd i ces ∗ /double length_path , c o s t _ r e f _ s t r u c t ; /∗ Cost o f re ference s t r u c t u r e kept ∗ /i n t ∗∗ tabu ; /∗ tabu [ i ] [ j ] i n d i c a t e t h a t edge i−j cannot be removed ∗ /i n t path_modif ied , n o _ i t e r ; /∗ s has been modif ied , outermost loop i t e r a t i o n ∗ /i n t improved ; /∗ s o l u t i o n improved dur ing t h i s i t e r a t i o n ∗ /s = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;tabu = ( i n t ∗∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ∗ ) ) ;f o r ( i = 0 ; i < n ; i ++) tabu [ i ] = ( i n t ∗) c a l l o c ( ( s i z e _ t ) n , s i z e o f ( i n t ) ) ;f o r ( i = 0 ; i < n ; i ++) s [ bes t_so l [ i ] ] = bes t_so l [ ( i +1)%n ] ;n o _ i t e r = 0 ;a = end_a = 0; /∗ I n i t i a t e e j e c t i o n chain from c i t y 0 ∗ /do b = s [ a ] ;

length_path = ∗best_cost − D[ a ] [ b ] ;n o _ i t e r ++;improved = 0;do /∗ I d e n t i f y best re ference s t r u c t u r e w i th edge ( a−b ) removed ∗ / path_modi f ied = 0;

c o s t _ r e f _ s t r u c t = i n f i n i t e ;best_c = c = s [ b ] ;wh i le ( s [ c ] != a ) /∗ E jec t i on can be propagated ∗ / d = s [ c ] ;

i f ( length_path − D[ c ] [ d ] + D[ c ] [ a ] + D[ b ] [ d ] + eps i l on < ∗best_cost ) /∗ An improving s o l u t i o n i s i d e n t i f i e d ; change i t immediate ly ∗ /

best_c = c ;c o s t _ r e f _ s t r u c t = length_path − D[ c ] [ d ] + D[ c ] [ a ] + D[ b ] [ d ] ;

break ;i f ( tabu [ c ] [ d ] ! = n o _ i t e r && /∗ edge c − d has not been added ∗ /

length_path + D[ b ] [ d ] < c o s t _ r e f _ s t r u c t ) c o s t _ r e f _ s t r u c t = length_path + D[ b ] [ d ] ;

best_c = c ;c = d ; /∗ Next value f o r d ( and c ) ∗ /

i f ( c o s t _ r e f _ s t r u c t + eps i l on < ∗best_cost ) /∗ Adm. r e f . s t r u c t . found ∗ / path_modi f ied = 1;

c = best_c ;d = s [ c ] ; /∗ Update re ference s t r u c t u r e ∗ /tabu [ c ] [ d ] = tabu [ d ] [ c ] = n o _ i t e r ; /∗ Prevent remove again edge c−d ∗ /length_path += (D[ b ] [ d ] − D[ c ] [ d ] ) ;i = b ; /∗ Reverse path b −> c ∗ /s i = s [ i ] ;s [ b ] = d ;wh i le ( i != c ) s s i = s [ s i ] ; s [ s i ] = i ; i = s i ; s i = s s i ; b = c ;i f ( length_path + D[ a ] [ b ] + eps i l on < ∗best_cost ) ∗best_cost = length_path + D[ a ] [ b ] ;

s [ a ] = b ;end_a = s [ a ] ;improved = 1;f o r ( i = 0 , j = 0 ; j < n ; j ++) /∗ Store improved s o l u t i o n ∗ / bes t_so l [ j ] = i ; i = s [ i ] ;

wh i le ( path_modi f ied ) ;f o r ( i = 0 ; i < n ; i ++) s [ bes t_so l [ i ] ] = bes t_so l [ ( i +1)%n ] ;a = s [ a ] ;

wh i le ( a != end_a | | improved ) ; /∗ a has made 1 tu rn w i thou t improvement ∗ /f o r ( i = 0 ; i < n ; i ++) f r ee ( tabu [ i ] ) ;f r ee ( tabu ) ;f r ee ( s ) ;

/∗ t sp LK ∗ /

Page 111: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.5 UTILISATION DE PLUSIEURS VOISINAGES OU PLUSIEURS MODÈLES 109

4.5 Utilisation de plusieurs voisinages ou plusi-eurs modèles

Comme un optimum local est relatif à une structure de voisinage don-née, il est possible d’utiliser plusieurs voisinages simultanément. Par exemple,une solution d’un voyageur de commerce 2-optimale n’est pas forcément 3-optimale. Une fois que l’on a trouvé une solution 2-optimale, il est potentielle-ment possible de l’améliorer avec une méthode utilisant un voisinage de type3-opt. De même, une solution 3-optimale n’est pas 2-optimale, on peut donc ré-péter alternativement des processus d’amélioration tant que la solution trouvéen’est pas un optimum local relativement à toutes les structures de voisinageconsidérées.

Finalement, mentionnons que l’on peut encore passer d’une modélisationdu problème à une autre. Dans la mesure où la structure de voisinage n’estpas la même pour les diverses modélisations, il est également possible d’itérerdes méthodes d’améliorations utilisant divers modèles. Cette technique n’estpas forcément applicable telle quelle, puisqu’une solution admissible pour unmodèle ne l’est pas forcément pour un autre. Dans ce cas, il faut prévoir desméthodes de réparation lorsqu’on change de modèle, ce qui peut impliquer quele processus n’est plus une méthode d’amélioration stricte. Un corollaire estque la recherche pourrait « tourner en rond », la réparation suivie de « l’amé-lioration » avec un modèle pouvant défaire les modifications réalisées par unautre modèle.

4.6 Optimisation multiobjectif par améliorations lo-cales

Diverses techniques relativement simple ont été proposées pour réaliserun optimisation multi-objectifs par recherche locale. Nous allons examine deuxapproches assez simples à mettre en œuvre et produisant de bonnes solutions.

4.6.1 Scalarisation des objectifs

Une technique mentionnée en section 2.10.3 pour l’optimisation multi-objectifs est celle de l’agrégation des objectifs en associant un poids wi auiième objectif. En se donnant un vecteur de poids et en transmettant à une mé-thode de recherche locale une unique fonction agrégeant les objectifs, on peutdonc trouver une approximation d’une solution supportée. En faisant varier levecteur de poids, on pourra en trouver d’autres.

Cependant, une telle technique ne produira au plus qu’une solution approxi-mant l’ensemble Pareto pour chaque exécution de la recherche locale. Sansavoir besoin de beaucoup plus d’efforts de programmation, il est possible d’ob-tenir une meilleure approximation de l’ensemble Pareto en transmettant à la re-cherche locale l’ensemble des objectifs, de sorte à pouvoir vérifier pour chaquesolution voisine que l’on évalue si elle n’améliore pas l’approximation de l’en-semble Pareto. Une mise en œuvre élémentaire de ce principe est donné par

Page 112: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

110 AMÉLIORATIONS LOCALES

l’algorithme 4.5 La figure 4.10 illustre le fonctionnement de l’algorithme 4.5 surtrois itérations de scalarisation des objectifs.

Algorithme 4.5 : Trame d’une méthode d’amélioration pour l’optimisation multi-objectifs. L’utilisateur doit fournir un paramètre Imax donnant le nombre de vecteurde pondération des objectifs. Dans cet algorithme, les poids sont simplement gé-nérés aléatoirement.

Entrées : Solution s, spécification du voisinage V (·), et desfonctions-objectifs

−→f (·) à minimiser ; paramètre Imax

Résultat : Approximation P de l’ensemble Pareto1 P = s;2 pour Imax itération faire3 Générer une vecteur de pondérations −→w ;4 répéter5 fin← vrai;6 valeur_meilleur_voisin←∞;7 pour tous les s′ ∈ V (s) faire8 si s′ n’est pas dominée par les solutions de P alors9 Insérer s′ dans P et retirer de P les solutions dominées

par s′

10 si −→w ·−→f (s′) < valeur_meilleur_voisin alors

11 valeur_meilleur_voisin← −→w ·−→f (s′);

12 meilleur_voisin← s′

13 si valeur_meilleur_voisin < −→w ·−→f (s) alors

14 s← s′;15 fin← faux

16 jusqu’à fin;

4.6.2 Recherche locale Pareto

Une autre approche basée sur une recherche locale pour estimer l’en-semble Pareto ne passe pas par une scalarisation. L’idée de [?] est de par-tir d’une solution quelconque au problème qui formera la première estimation— de qualité déplorable — de l’ensemble Pareto. Ensuite, tant que l’ensemblePareto n’est pas stabilisé, on considère toutes les solutions voisines de cellesde l’ensemble Pareto et on met à jour ce dernier avec celles-ci. La méthodese programme récursivement de façon très concise, comme le montre l’algo-rithme 4.6.

Le code 4.5 implante une recherche locale Pareto pour le problème duvoyageur de commerce.

Page 113: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.6 OPTIMISATION MULTIOBJECTIF PAR AMÉLIORATIONS LOCALES 111

Solution de départ

Optimum local, 1ère scalarisation

2e optimum local

3e optimum local

Trajectoire de la recherche locale

Front Pareto après 200 scalarisations

Meilleur Pareto connu

Objectif 1

Obj

ectif

2

Solutions ayant fait avancer le front Pareto

FIGURE 4.10 – Trajectoire et évolution d’une méthode d’amélioration itérée pour unexemple de problème de voyageur de commerce bi-objectif (EuclidAB100) à l’aide dela technique d’agrégation des objectifs. La méthode d’amélioration est basée sur leschaînes d’éjections et les pondérations des objectifs sont tirées aléatoirement chaquefois que la recherche atteint un optimum local. La solution de départ est celle que l’onobtient à l’aide d’une méthode constructive gloutonne ne travaillant que sur le premierobjectif. Il est intéressant de constater que le troisième optimum local est meilleur quela solution de départ, pour les deux objectifs.

Page 114: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

112 AMÉLIORATIONS LOCALES

Algorithme 4.6 : Trame d’une recherche locale pour l’optimisation multi-objectifs. L’intérêt de la méthode est de ne comporter aucun paramètre.

1 Énumération_voisinage;Entrées : Solution s ; connaît une spécification du voisinage V (·) et des

fonctions-objectifs−→f (·) à minimiser

Résultat : Ensemble Pareto P enrichi des voisins de s2 pour tous les s′ ∈ V (s) faire3 Mise_a_jour_Pareto(s′,

−→f (s′))

4 Mise_a_jour_Pareto;Entrées : Solution s, valeurs des objectifs −→vRésultat : Ensemble Pareto P mis à jour

5 si (s,−→v ) domine une solution de P ou si P = ∅ alors6 Retirer de P toutes les solutions dominées par (s,−→v );7 P ← P ∪ (s,−→v );8 Énumération_voisinage(s);

Listing 4.5 – tsp_3opt_pareto.c Code en C d’une recherche locale Pareto basée surles mouvements de type 3-opt pour le problème du voyageur de commerce. Cette fonc-tion en utilise une autre qui met à jour l’ensemble Pareto pour chaque solution voisinede la solution qui lui est fournie. La structure de donnée utilisée pour stocker l’ensemblePareto est discutée en section 4.6.3./∗ Funct ion update_pareto_3opt w i l l b u i l d the neighbour s o l u t i o n i f necessary ∗ //∗ I t r e c u r s i v e l y c a l l s tsp_3opt_pareto w i th the neighbour s o l u t i o n ∗ /vo id update_pareto_3opt (NODE ∗∗pareto , POINT po in t ,

i n t n , i n t ∗s , i n t i , i n t j , i n t k , double ∗∗∗d ) ;

vo id tsp_3opt_pareto ( i n t n , /∗ Number o f c i t i e s ∗ /double∗∗∗ d , /∗ Distance matr ices , symmetry not requ i red ∗ /i n t ∗ succ , /∗ So lu t i on provided as successors ∗ /POINT costs , /∗ Lengths o f s ∗ /NODE ∗∗pareto ) /∗ pareto set updated wi th neighbours o f s ∗ /

i n t i , j , k , dim ; /∗ indexes ∗ /POINT costs_neighbour ; /∗ Costs o f a neighbour s o l u t i o n ∗ /i n t ∗s = ( i n t ∗) mal loc ( ( s i z e _ t ) n∗s i z e o f ( i n t ) ) ; /∗ update_pareto a l t e r s succ ∗ /memcpy( s , succ , ( s i z e _ t ) n∗s i z e o f ( i n t ) ) ; /∗ make a copy ∗ /i = 0 ; j = s [ i ] ; k = s [ j ] ;do

f o r ( dim = 0; dim < K; dim++)costs_neighbour [ dim ] = costs [ dim ]

+d [ dim ] [ i ] [ s [ j ] ] + d [ dim ] [ j ] [ s [ k ] ] + d [ dim ] [ k ] [ s [ i ] ]−d [ dim ] [ i ] [ s [ i ] ] − d [ dim ] [ j ] [ s [ j ] ] − d [ dim ] [ k ] [ s [ k ] ] ;

update_pareto_3opt ( pareto , costs_neighbour , n , s , i , j , k , d ) ;k = s [ k ] ; /∗ Next k ∗ /i f ( k == i )

j = s [ j ] ; k = s [ j ] ; /∗ k a t i t s l a s t value , next j ∗ /i f ( k == i )

i = s [ i ] ; j = s [ i ] ; k = s [ j ] ; /∗ j a t i t s l a s t value , next i ∗ /wh i le ( s [ s [ i ] ] ) ; /∗ Whole neighbourhood examined ∗ /f r ee ( s ) ;

On peut cependant accélérer la méthode en ne débutant pas avec une so-lution quelconque, mais en l’appelant plusieurs fois avec de bonnes solutionsobtenues avec des optimisations mono-objectif avec scalarisation. En effet, ilexiste souvent des méthodes très efficaces pour la résolution des problèmes

Page 115: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.6 OPTIMISATION MULTIOBJECTIF PAR AMÉLIORATIONS LOCALES 113

mono-objectif, ce qui permet donc d’obtenir tout de suite d’excellentes solutionssupportées. En démarrant la recherche locale Pareto avec une bonne estima-tion de l’ensemble Pareto, le nombre de mise à jour de l’ensemble est limitéet la recherche locale s’arrête plus rapidement. Cela évite également d’avoirdes appels récursifs trop profonds, susceptibles de faire déborder la pile derécursion.

4.6.3 Structures de données en l’optimisation multi-objectifs

Les deux techniques présentées ci-dessus pour l’optimisation multi-objectifspeuvent être relativement peu efficaces si l’on n’utilise pas une structure dedonnées adéquate pour stocker l’ensemble Pareto. En effet, les évaluationsdes objectifs d’une solution voisine peuvent souvent se faire en temps cons-tant, soit un temps se mesurant en nano-secondes sur les ordinateurs actuels.Si l’ensemble Pareto contient p solutions et en utilisant une simple liste pour lesstocker, vérifier si une solution voisine n’est pas dominée va prendre beaucoupplus de temps et la recherche locale va en être ralentie d’un facteur proportion-nel à p.

Il n’est pas rare que l’ensemble Pareto contienne des milliers de solutions.Il est donc nécessaire d’utiliser une structure de données permettant de testerla dominance d’une solution en un temps ne croissant pas linéairement avecla taille de l’ensemble Pareto.

Casiers

La structure de données la plus simple et pouvant être extrêmement effi-cace est l’utilisation d’un tableau de dimension K−1, où K est le nombre d’ob-jectifs, en supposant que ces derniers prennent un nombre limité de valeursentières. La taille de ce tableau dans une dimension est donnée par l’étenduede la variation possible de l’objectif correspondant. La valeur d’une entrée dece tableau, ou casier, donne la valeur de la meilleure solution trouvée pour leK ième objectif. Cette structure de donnée est limitative, car les objectifs ne sontpas forcément entiers ni ne prennent un nombre raisonnable de valeurs diffé-rentes. Cependant, si cette structure de données est utilisable en pratique, elleest incomparablement rapide, puisqu’il est possible de savoir si une solutionest dominée ou non en un temps constant.

Arbre KD

Dans le cas général, une structure de données dont le temps pour faire unerequête croît faiblement avec p est l’arbre KD. Il s’agit d’un arbre de recherchebinaire, où un nœud à la profondeur d discrimine les autres éléments de l’arbresur la dimension d modulo K. Le code 4.6 donne les procédures élémentairesd’ajout d’un nouvel élément dans un arbre KD et le parcours de ce dernier.

Page 116: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

114 AMÉLIORATIONS LOCALES

Listing 4.6 – KD_tree_add_scan.c Codes en C permettant d’ajouter un élément à unarbre KD et permettant de parcourir l’ensemble de l’arbre. La procédure de parcoursdétruit les éléments au fur et à mesure de leur examen.typedef double POINT [K ] ; /∗ K−dimensional po in t ∗ /typedef s t r u c t NODE NODE; /∗ Node of a KD t ree ∗ /s t r u c t NODEPOINT key ; /∗ A node s p l i t the t ree according to key [ deepness ] ∗ /

i n t ∗ i n f o ; /∗ i n f o rma t i on to s to re ∗ /NODE ∗ r ; NODE ∗L ; ; /∗ Right and l e f t subtrees ∗ /

/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ Add element to KD−Tree t ree ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /vo id KD_add(NODE ∗∗ t ree , NODE ∗element , i n t deepness )

i f (∗ t r ee == NULL)∗ t r ee = element ;

e lse i f ( (∗ t r ee )−>key [ deepness%K] < element−>key [ deepness%K ] )KD_add(&(∗ t r ee )−>r , element , deepness + 1 ) ;

e lseKD_add(&(∗ t r ee )−>L , element , deepness + 1 ) ;

/∗∗∗∗∗∗∗∗∗∗ Enumerate a l l the elements o f a KD−t r ee and f ree memory ∗∗∗∗∗∗∗∗∗∗∗ /vo id KD_scan_and_delete (NODE ∗ t ree , i n t n )

i n t i ;i f ( t r ee ) KD_scan_and_delete ( t r ee −> L , n ) ;

f o r ( i = 0 ; i < K ; i ++)p r i n t f ( "%g " , t ree−>key [ i ] ) ;

f o r ( i = 0 ; i < n ; i ++)p r i n t f ( "%d " , t ree−>i n f o [ i ] ) ;

putchar ( ’ \ n ’ ) ;

KD_scan_and_delete ( t r ee −> r , n ) ;f r ee ( t ree−>i n f o ) ;f r ee ( t r ee ) ;

La procédure la plus délicate à programmer pour un arbre KD est la sup-pression d’un nœud donné. Contrairement à un arbre binaire à une seule di-mension, on ne peut pas remplacer ce nœud par celui le plus à droite du sous-arbre gauche ou le plus à gauche du sous-arbre droit. En effet, comme un arbreKD discrimine sur une dimension différente à chaque niveau, il faut parcourirl’ensemble des deux sous-arbres pour trouver le nœud qui a la plus petite ou laplus grande valeur, sur la même dimension que le nœud à éliminer. Le nœudde remplacement sera lui-même récursivement remplacé, jusqu’à ce que l’ontombe sur une feuille, qui est simplement éliminée. Le code 4.7 implante uneprocédure d’élimination d’un nœud donné à l’intérieur d’un arbre KD.

Page 117: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.6 OPTIMISATION MULTIOBJECTIF PAR AMÉLIORATIONS LOCALES 115

Listing 4.7 – KD_tree_delete.c Codes en C permettant de supprimer un élément d’unearbre KD./∗∗∗ Find the node of t r ee wi th max or min (=1) coord ina te i n dimension dim ∗∗∗ /NODE∗∗ KD_find_opt (NODE ∗∗ t ree , i n t dim , i n t deep , NODE ∗∗opt ,

i n t min , double ∗value , i n t ∗deep_opt )

double va l = (∗∗ t r ee ) . key [ dim ] ;i f ( ( min && ∗value > va l ) | | ( ! min && ∗value < va l ) ) opt = t ree ;∗value = va l ;∗deep_opt = deep ;

i f ( (∗∗ t r ee ) . L )

opt = KD_find_opt (&(∗∗ t r ee ) . L , dim , deep+1 , opt , min , value , deep_opt ) ;i f ( (∗∗ t r ee ) . r )

opt = KD_find_opt (&(∗∗ t r ee ) . r , dim , deep+1 , opt , min , value , deep_opt ) ;r e t u r n opt ;

/∗∗∗∗∗∗∗∗∗∗ Remove the roo t node from a ( sub−)KD−t r ee a t deepness deep ∗∗∗∗∗∗∗∗ /vo id KD_delete (NODE ∗∗node , i n t deep )

NODE ∗∗ r ep lac ing ; /∗ Node t h a t w i l l rep lace the removed node ∗ /double v a l _ r e p l ;i n t deep_repl ;

i f ( ! (∗∗node ) . L && ! (∗∗node ) . r )

f r ee ( (∗∗node ) . i n f o ) ;f r ee (∗node ) ;∗node = NULL ;r e t u r n ;

i f ( (∗∗node ) . L ) /∗ Find the rep lac ing node wi th maximal coord ina te a t l e f t ∗ /

v a l _ r e p l = − i n f i n i t e ;rep lac ing = KD_find_opt (&(∗∗node ) . L , deep%K, deep+1 , NULL,

0 , &va l_ rep l , &deep_repl ) ;e lse /∗ Find the rep lac ing node wi th minimal coord ina te a t r i g h t ∗ /

v a l _ r e p l = i n f i n i t e ;rep lac ing = KD_find_opt (&(∗∗node ) . r , deep%K, deep+1 , NULL,

1 , &va l_ rep l , &deep_repl ) ;

f o r ( i n t i = 0 ; i < K ; i ++)(∗∗node ) . key [ i ] = (∗∗ r ep lac ing ) . key [ i ] ;

KD_delete ( rep lac ing , deep_repl ) ;

Finalement, pour utiliser un arbre KD pour mettre à jour un ensemble Pa-reto, il faut disposer d’une procédure qui recherche un point de l’arbre qui domi-nerait une solution essayée. Pour cela, il faut chercher si l’arbre KD comporteun point situé entre le point idéal, qui est celui dont les valeurs sur toutes les di-mensions sont celles de l’optimum des objectifs pris séparément. En pratique,le point idéal n’est pas connu, mais on peut se contenter d’une approximation,qui peut être aussi grossière que l’on veut, par exemple (−∞, . . . ,−∞) si tousles objectifs doivent être minimisés. Si l’arbre KD comporte un tel point, alorscelui-ci domine la solution essayée, qui est donc ignorée. Sinon, la nouvellesolution en domine d’autres, qui doivent être éliminées, et elle est ajoutée àl’arbre KD.

Le code 4.8 permet d’effectuer la mise à jour d’un ensemble Pareto lors-qu’on cherche à y inclure un nouveau point.

Page 118: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

116 AMÉLIORATIONS LOCALES

Listing 4.8 – KD_tree_update_pareto.c Codes en C permettant de mettre à jour unensemble Pareto représenté au moyen d’un arbre KD./∗∗∗∗∗∗∗ Test i f node i s i n the rec tangu la r box d e l i m i t e d by min and max ∗∗∗∗∗∗ /i n t KD_in (NODE ∗node , POINT min , POINT max) i n t i , res = 1;

f o r ( i = 0 ; i < K && res ; i ++)res = min [ i ] < node−>key [ i ] && max [ i ] > node−>key [ i ] ;

r e t u r n res ;

/∗∗ Returns a node of t r ee i n box [ min , max ] w i th i t s deepness ; NULL i f none ∗∗ /NODE ∗∗KD_find (NODE ∗∗ t ree , POINT min , POINT max, i n t deep , i n t ∗deep_found )

NODE ∗∗ res ;i f ( ! (∗ t r ee ) ) /∗ t r ee empty : no node found ∗ /

r e t u r n NULL ;i f ( KD_in (∗ t ree , min , max ) ) /∗ The roo t o f t r ee i s i n the box ∗ /∗deep_found = deep ;r e t u r n t ree ;

i f (max [ deep%K] > (∗ t r ee )−>key [ deep%K] && /∗ Look at r i g h t sub−t r ee ∗ /

( res = KD_find (&(∗ t r ee )−>r , min , max , deep+1 , deep_found ) ) )r e t u r n res ;

i f ( min [ deep%K] < (∗ t r ee )−>key [ deep%K ] ) /∗ Look at the l e f t ∗ /r e t u r n KD_find (&(∗ t r ee )−>L , min , max , deep+1 , deep_found ) ;

r e t u r n NULL ; /∗ No node found ∗ /

/∗∗∗ Looks i f po i n t should be added to a pareto set represented by a KD−t r ee ∗∗ //∗ I f po i n t i s added , b u i l d the neighbour o f s w i th 3−opt move ( i , j , k ) ∗ //∗ Remove dominated po in t s and then r e c u r s i v e l y add non−dominated neighbours ∗ /vo id update_pareto_3opt (NODE ∗∗pareto , POINT po in t ,

i n t n , i n t ∗s , i n t i , i n t j , i n t k , double ∗∗∗d )

POINT min , max ;i n t deepness , dim ;

NODE ∗∗dominant ;

f o r ( dim = 0; dim < K; dim++) min [ dim ] = 0 . 0 ; max [ dim ] = po in t [ dim ] + eps i l on ; dominant = KD_find ( pareto , min , max , 0 , &deepness ) ;i f ( ! dominant ) /∗ po in t improves pareto f r o n t ∗ /

f o r ( dim = 0; dim < K; dim++) /∗ Remove dominated elements , i f any ∗ / min [ dim ] = po in t [ dim ] − eps i l on ; max [ dim ] = i n f i n i t e ; wh i le ( ( dominant = KD_find ( pareto , min , max , 0 , &deepness ) ) )

KD_delete ( dominant , deepness ) ;

NODE ∗element= mal loc ( s i z e o f (NODE) ) ; /∗ Create a new element f o r pareto ∗ /memcpy( element−>key , po in t , s i z e o f (POINT ) ) ;element−>i n f o = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;memcpy( element−>in fo , s , ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;element−>i n f o [ i ] = s [ j ] ; element−>i n f o [ j ] = s [ k ] ; element−>i n f o [ k ] = s [ i ] ;element−>L = element−>r = NULL ;

KD_add( pareto , element , 0 ) ;

tsp_3opt_pareto ( n , d , element−>in fo , po in t , pareto ) ;

Page 119: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

4.7 EXERCICES 117

4.7 Exercices

Exercice 4.1. Propriétés des voisinges 2-opt et 3-opt Montrer les propriétéssuivantes des voisinages 2-opt et 3-opt :

— L’inversion de deux villes ou un mouvement de type 3-opt peut être ob-tenu par une succession de mouvements 2-opt

— 2-opt et 3-opt sont des voisinages possédant la propriété de connectivité.Donner une borne supérieur au diamètre de ces voisinages

Exercice 4.2. Limitation du voisinage 3-opt Pour limiter la taille du voisinaged’un problème de voyageur de commerce, seules les 40 villes les plus prochesde chaque ville sont considérées. Avec une telle limitation, quelle est la com-plexité de la vérification qu’une solution est 3-optimale ? A-t-on besoin d’unestructure de données particulière pour atteindre une complexité algorithmiqueminimale ? Le voisinage engendré par une telle limitation est-il connexe.

Exercice 4.3. Voisinages pour l’élaboration de tournées de véhicules Pro-poser 4 voisinages différents pour le problème de distribution de biens. Donnerla taille de ces voisinages en fonction du nombre n de clients du problèmeainsi que du nombre m de tournées d’une solution. Préciser si ces voisinagesdisposent de la propriété de connectivité, selon la modélisation du problème.

Exercice 4.4. Voisinages pour l’arbre de Steiner Deux représentations desolutions ont été proposées à la section 2.1.2 pour l’arbre de Steiner. Donnerdes voisinages adaptés à chacune de ces modélisations du problème.

Exercice 4.5. Chaîne d’éjections pour l’élaboration de tournées de véhi-cules Proposer une technique basée sur les chaînes d’éjections pour le pro-blème de distribution de bien. Préciser comment initialiser la chaîne, commentla propager et comment la terminer. Estimer la complexité algorithmique del’évaluation d’une chaîne pour une solution avec n clients et m tournées.

Page 120: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

118 AMÉLIORATIONS LOCALES

Page 121: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Chapitre 5

Méthodes de décomposition

5.1 Considérations sur la taille des problèmes

La complexité algorithmique très brièvement exposée en section 1.2, a pourbut d’évaluer les ressources de calcul nécessaire à l’exécution d’un algorithmeen fonction de la taille des données qu’on lui fournit. On ne peut pas classerles problèmes — petits ou grands — uniquement en fonction de leur taille ab-solue : trier un tableau de 1000 éléments est assurément beaucoup plus facileque de trouver la tournée optimale d’un voyageur de commerce sur 100 villes.Le temps à disposition pour trouver une solution entre évidemment en ligne decompte : la perception de ce qu’est un gros problème ne sera pas la mêmesi l’on doit faire un traitement en quelques micro-secondes dans une applica-tion temps-réel ou une planification à long terme pour laquelle un calcul d’unejournée est parfaitement envisageable.

Très grossièrement, on peut distinguer quelques catégories de taille de pro-blèmes, pour ceux faisant partie de la classe NP-difficile :

Les problèmes-jouet Taille typique : n ≈ 10. Pour s’assurer qu’un algorithmefonctionne correctement, on l’exécute à la main ou bien on programme unautre algorithme, plus simple à implanter mais nettement moins efficace.Par exemple, celui-ci peut être une énumération exhaustive de toutes lessolutions. Actuellement, on peut empiriquement considérer qu’un ordina-teur est capable d’effectuer 109 opérations élémentaires par seconde. Sil’on dispose d’un budget-temps de cet ordre de grandeur, on peut envi-sager une énumération exhaustive de toutes les solutions d’un problèmede recherche de permutations pour n ≈ 10 ; pour un problème en va-riables binaires, on aura n ≈ 20. Naturellement, pour des algorithmespolynomiaux, les tailles d’exemples que l’on peut traiter en une secondevarient de n ≈ 50 pour une complexité en O(n3) à n ≈ 108 pour une com-plexité linéaire, en passant par n ≈ 104 pour une complexité quadratiqueet n ≈ 106 pour un algorithme en O(n log n).

Les petits problèmes Taille typique : 10 / n / 102 Lorsque leur taille nepermet plus une énumération exhaustive des solutions, on passe dansla catégorie des petits problèmes. On pourrait les caractériser par ceuxpour lesquels on connaît des algorithmes robustes permettant d’obtenirune solution optimale en un temps raisonnable. Il convient de mentionner

Page 122: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

120 MÉTHODES DE DÉCOMPOSITION

que la littérature regorge d’algorithmes exacts permettant de résoudredes exemples de problèmes « difficiles » de taille nettement plus élevéeque celle mentionnée ci-dessus. Cependant, il faut être prudent avec cegenre d’affirmations : il est vrai que les solutions optimales de voyageurde commerce ou de sac de montagne avec des dizaines de milliers d’élé-ments ont été trouvées, mais il est certainement possible de générer desexemples de problèmes beaucoup plus petits mettant en difficulté cesprogrammes.

Les problèmes de petite taille sont fréquemment utilisés pour la concep-tion et la calibration des méthodes heuristiques. En effet, la connaissancedes solutions optimales permet de déterminer la qualité de l’heuristiqueet d’optimiser la valeur de ses paramètres en conservant des temps decalcul raisonnables

Les problèmes standards Taille typique : 102 / n / 104 Les problèmes detaille moyenne constituent le domaine d’application privilégié des méta-heuristiques. Ces problèmes, fréquemment rencontrés dans les applica-tions réelles, sont de taille trop importante pour pouvoir être résolus ef-ficacement par des méthodes exactes ou pour qu’un humain réussisseà deviner des solutions de qualité suffisante. La taille maximale des pro-blèmes traitables par une métaheuristique n’utilisant pas de méthodes dedécomposition est lié à sa complexité algorithmique que ce soit au niveaudu temps de calcul ou de la mémoire. Avec plus de 104 éléments, il de-vient en effet difficilement envisageable d’utiliser une méthode construc-tive ou une taille de voisinage en O(n2), et ce, d’autant plus si l’on doitmémoriser, pour des raisons d’efficacité, une matrice n × n. La com-plexité algorithmique d’un programme basé sur une métaheuristique estfréquemment supérieure à O(n3), ce qui fait que de nombreux auteursparlent déjà de « grand » problème pour une taille de 100.

Les grands problèmes Taille typique : 103 / n / 107 Certains problèmesréels comportent souvent un nombre d’éléments plus élevés que ceuxdes problèmes standards, ou bien doivent être résolus avec un effort decalcul moindre que ce que prendrait une méthode directe. On peut pen-ser par exemple à l’élaboration de tournées pour la distribution du cour-rier ou encore l’étiquetage des éléments sur une carte de géographie, oùune taille de 105 n’est pas exceptionnelle. Dans ce cas, on doit utiliser desméthodes de décomposition. Ce chapitre présente quelques techniquesgénérales permettant d’aborder les problèmes de grande taille. Il faut ce-pendant noter que ces techniques peuvent parfois avantageusement êtreappliquées à des problèmes de taille relativement modeste, avec parfoisguère plus de quelques dizaines d’éléments.

Les très grands problèmes Taille : n > 107 éléments. Lorsque la taille duproblème dépasse 107 à 109 éléments, il n’est plus possible de stockerles données entièrement en mémoire vive. Il est nécessaire dans ce casde travailler sur des portions du problème, généralement à l’aide d’algo-rithmes parallèles pour conserver des temps de traitement convenables.Le traitement de ce type de problèmes soulève des questions d’ordreessentiellement techniques et sort du cadre de cet ouvrage.

Page 123: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

5.2 ALGORITHMES RÉCURSIFS 121

5.2 Algorithmes récursifs

Lorsque l’on doit résoudre un problème de grande taille avec un effort decalcul limité, on le décompose en petits morceaux, que l’on résout indépen-damment pour finalement les assembler afin de recomposer une solution auproblème complet. Un gain en efficacité n’est possible par une telle techniqueque par la conjonction de plusieurs conditions :

— La résolution directe du problème demande un effort de calcul plus quelinéaire, sinon un décomposition n’a de sens que pour un calcul parallèle

— Les morceaux doivent être indépendants les uns des autres

— L’assemblage des morceaux doit être d’une complexité inférieure à cellede la résolution directe du problème

Toute la difficulté vient de la manière dont on définit les morceaux : ils doiventreprésenter une portion logique du problème pour que leur assemblage, unefois résolus, soit simple. Les algorithmes récursifs pour le tri d’un tableau consti-tuent un exemple typique de technique de décomposition : on découpe le ta-bleau en deux parties à peu près égales, celles-ci sont triées par deux appelsrécursifs, si elles contiennent plus d’un élément ; finalement les deux partieslocalement triées sont parcourues pour reconstituer l’ensemble du tableau.

5.2.1 Théorème général de récurrence

L’efficacité d’un algorithme récursif peut s’évaluer dans un certain nombrede cas par le théorème général de récurrence : Supposons que le temps pourtraiter un problème de taille n soit donné par T (n). L’algorithme procède pardécoupage des données en b parties de taille approximativement égales, n/b,dont a sont résolues récursivement. Ensuite ces parties sont assemblées pourreconstituer une solution au problème initial, ce qui engendre un temps def(n). Pour évaluer la complexité d’un tel algorithme, il faut résoudre l’équationfonctionnelle T (n) = a · T (n/b) + f(n) dont la solution dépend de l’effort querequiert la reconstitution :

— Si f(n) = O(nlogb(a)−ε) alors T (n) = Θ(nlogb(a))

— Si f(n) = Θ(nlogb(a)), alors T (n) = Θ(nlogba · log n)

— Si f(n) = Ω(nlogb(a)+ε) et si p · f(n/p) < c · f(n)), avec c < 1, constante,alors T (n) = Θ(f(n))

Dans les expressions ci-dessus ε est une constante positive qui force la fonc-tion à être soit plus petite, soit plus grande que nlogb(a).

Souvent, a = b : on a un appel récursif pour toutes les parties. Dans cecas, le théorème établit que si la reconstitution peut se faire en un temps sub-linéaire, alors on peut traiter le problème en temps linéaire ; si la reconstitutionprend un temps linéaire — ce qui est typiquement le cas pour les algorithmesde tri — le problème peut se résoudre en O(n log n). Le dernier cas indiquesimplement que toute la difficulté de l’algorithme est concentré dans les opéra-tions de reconstitution. Finalement, il faut mentionner que le théorème ne traitepas tous les cas pour la fonction f(n).

On rencontre également des cas où a 6= b. Par exemple, la recherche par di-chotomie dans un tableau trié procède par division du tableau en b = 2 parties

Page 124: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

122 MÉTHODES DE DÉCOMPOSITION

dont une seule (a = 1) devra être traitée récursivement. Pour ce problème, il n’ya pas de « reconstitution », mais l’effort de calcul à réaliser entre deux appelsrécursifs est constant (f(n) = Θ(1)). En appliquant le second cas ci-dessus,on trouve que T (n) = Θ(nlog21 · log n) = Θ(log n).

Un autre exemple est celui de la recherche d’un point du plan parmi unensemble de n points stockés sous la forme d’un arbre 2D équilibré (voir lastructure de données discutée en section 4.6.3). Avec une telle structure dedonnées, on peut diviser par deux le nombre de points restant à examineren traitant au maximum a = 2 parties parmi b = 4. En effet, contrairementà un arbre binaire en une dimension, on ne peut pas assurer de diviser pardeux ce nombre à chaque étage de l’arbre, mais seulement tous les deuxétages. Le problème étant celui d’une recherche, il n’y a pas de reconstructionet f(n) = O(1). En remarquant que log4(2) = 1/2 et en choisissant ε = 1/2,on remarque que l’on est dans le premier cas. On en déduit que la complexitéd’une recherche dans un arbre 2D est en Θ(n1/2). En pratique cependant, siles point sont bien répartis, on observe un comportement nettement plus favo-rable, se rapprochant de log n.

Dans le cas d’algorithmes heuristiques procédant par récursion, on arrêtecommunément cette dernière prématurément, avant que les morceaux soientd’une taille si faible que leur résolution devienne triviale. En effet, la procédurede découpe d’un problème et celle de reconstitution d’une solution à partir desmorceaux se font de manière heuristique, car on ne peut en général garantirl’optimalité de la reconstitution à partir de morceaux, même si ces derniers ontété résolus exactement. Cela signifie que les « zones frontières » entre deuxmorceaux présentent des caractéristiques de non optimalité plus ou moinsévidentes. Pour limiter cet effet de sous-optimalité, il convient d’assembler lemoins possible de morceaux, tout en étant capable de traiter ces derniers. Eneffet, s’ils sont trop gros, leur résolution exacte prend trop de temps ou l’appli-cation d’une heuristique risque de produire des morceaux de basse qualité.

5.3 Méthodes constructives

Les trames d’amélioration partielles présentées plus loin, LNS, POPMUSICet Corridor supposent toutes qu’une solution initiale du problème est dispo-nible. La résolution d’un problème de grande taille implique une limitation surla complexité de la méthode de construction d’une solution initiale. Cela signi-fie que même un algorithme comme la plus élémentaire méthode gloutonnen’est pas appropriée. En effet, si la fonction c(s, e) d’évaluation de l’ajout d’unélément e dépend effectivement de la solution partielle s, sa complexité est enen Ω(n2), car avant d’ajouter l’un des n éléments, il faut avoir évalué c(s, e)pour tous les éléments restants. Une construction aléatoire en temps linéairene l’est pas plus, en raison de la qualité de la solution produite. Il faut donc« tricher », en faisant l’hypothèse que tous les éléments du problèmes n’ontpas une relation directe avec tous les autres. En d’autres termes, un élémentest en relation avec un relativement faible nombre d’autres éléments et cetterelation présente une certaine symétrie.

On peut raisonnablement faire l’hypothèse qu’il est possible de quantifier laproximité qu’il y a entre deux éléments. Dans un tel cas, on s’affranchit d’unecomplexité en O(n2) par échantillonnage et récursion. On peut limiter le phé-

Page 125: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

5.3 MÉTHODES CONSTRUCTIVES 123

(a) Ensemble des éléments (b) Échantillon

(c) Centres (d) Groupes

FIGURE 5.1 – Illustration de la méthode de décomposition d’un problème : 5.1(a)L’ensemble des éléments d’un problème. 5.1(b) Échantillonnage des éléments. 5.1(c)Centres des groupes trouvés avec les éléments de l’échantillon. 5.1(d) Affectation del’ensemble des éléments aux centres les plus proches.

nomène de sous-optimalité dû à l’assemblage des morceaux en arrêtant larécursion dès le premier ou le second niveau.

Il existe de relativement bonnes heuristiques en classification automatiquepour découper un problème de taille n en p groupes. Bien que NP -difficile,le problème de la p-médiane permet de réaliser une telle découpe heuristiqueavec une complexité de O(p ·n+ (np )2) 1. Cette complexité peut être minimiséeen choisissant p =

√n. Ainsi, il est possible de découper un problème de

taille n en√n portions comportant chacune approximativement

√n éléments

en O((n3/2). Sans pour autant diminuer la complexité algorithmique, on peutnotablement accélérer cette procédure en procédant par échantillonnage : Unélément médian de chaque groupe n’est pas déterminé en utilisant l’intégralitédes éléments, mais en n’en conservant qu’une fraction. Cette méthode estillustrée en figure 5.1.

Il est possible de procéder à une décomposition plus fine en arrêtant la

1. On ne peut utiliser la notation O(·) ici car on fait l’hypothèse que les p groupes contiennentapproximativement le même nombre d’éléments. Dans le pire des cas, quelques groupes pour-raient en contenir un nombre en O(n), et O(n) groupes pourraient en contenir un nombre enO(1), ce qui impliquerait une complexité théorique en O(n2).

Page 126: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

124 MÉTHODES DE DÉCOMPOSITION

FIGURE 5.2 – Décomposition à deux niveaux d’un problème. Les éléments sont re-groupés en Θ(

√n) gros groupes de taille approximativement identique. Une relation de

proximité, illustrée par des traits gras, est définie entre ces groupes. Ces derniers sonteux-même décomposés en Θ(

√n) petits groupes. Le processus a une complexité en

O(n3/2). Il peut être appliqué à des problèmes non géométriques.

Page 127: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

5.3 MÉTHODES CONSTRUCTIVES 125

récursion au second niveau plutôt qu’au premier : Le problème est découpéen a gros morceaux de taille approximativement égales comme on l’a vu plushaut. On définit une relation de proximité entre les gros morceaux, de sorteque chacun ait O(1) voisins. Une définition rudimentaire de proximité est lasuivante : si un élément a pour plus proche centre ci et comme second plusproche cj , alors ci et cj sont considérés comme voisins. Chaque gros morceauest ensuite découpé en b petits morceaux. On définit de même une relationde proximité entre les petits morceaux, en considérant tous ceux issus de ladécomposition du même gros morceau ou d’un voisin de ce dernier.

En procédant par échantillonnage, et en choisissant a = Θ(√n) et b =

Θ(√n), on obtient en O(n3/2) une décomposition en un nombre de petits mor-

ceaux proportionnel à n dont la taille est approximativement identique ce qui,pour certains problème peut avoir un sens : Par exemple, pour l’élaboration detournées de véhicules, le nombre maximum de clients que l’on peut placer surune tournée dépend de l’application (réparateur, distribution de colis, ramas-sage d’ordures) et non du nombre total de clients que l’on a dans le problème.Un exemple de gain possible de complexité par rapport à une méthode directequi serait en O(n2) est de choisir a = b = Θ(

√n).

Cette technique de décomposition est illustrée en figure 5.2, où l’on a super-posé les relations de proximités entre les gros morceaux et les groupes d’envi-ron 15 éléments obtenus par décomposition des gros morceaux. Les élémentsde ces derniers sont représentés par des points de même couleur.

À partir d’une telle décomposition et avec les relations de proximité ainsidéfinie, il devient possible de créer efficacement une solution à un problèmede grande taille. À titre indicatif, le temps de calcul pour obtenir les structuresde la figure 5.2, comportant plus de 16’000 entités, est de l’ordre de la seconde.

Pour illustrer l’utilisation de ces structures, voici une technique de construc-tion d’une tournée d’un voyageur de commerce : En admettant que l’on disposed’une procédure en O(n2) pour construire une tournée, une construction récur-sive peut se faire en O(n3/2) : Tout d’abord, on cherche une tournée sur les

√n

centres correspondant aux centres des gros morceaux. Ceci nécessite un tra-vail en O(n ·

√n). Ensuite, pour chaque gros morceau, on cherche une tournée

sur les entités du morceau, auxquelles on ajoutera deux unités fictives, cor-respondant aux connexions qu’il faudra réaliser avec les deux gros morceauxadjacents.

Un exemple de construction pour le problème plus complexe d’élaborationde tournées de véhicules avec localisation de dépôts a été proposé dans [?].Dans cette référence, les grands principes de construction efficace d’une so-lution sont proposés. Cette dernière est ensuite améliorée, au moyen de latechnique POPMUSIC que l’on détaillera en section 5.4.2. Examinons mainte-nant quelques techniques d’amélioration adaptées aux problèmes de grandetaille.

Page 128: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

126 MÉTHODES DE DÉCOMPOSITION

5.4 Méthodes d’amélioration pour problèmes degrande taille

5.4.1 Recherche dans de grands voisinages (LNS)

La recherche dans de grands voisinages Large Neighborhood Search (LNS)a été proposée par [?]. L’idée générale est d’améliorer graduellement une so-lution en alternant des phases de destruction et de réparation. Pour illustrerce principe, prenons l’exemple d’un programme linéaire en nombre entiers. Laphase de destruction consiste à sélectionner un sous-ensemble de variables,en incorporant une certaine stochasticité dans ce processus. Dans sa forme laplus simple, celle-ci consiste à sélectionner un nombre constant de variables,de façon totalement aléatoire. Un forme plus élaborée est de sélectionner aléa-toirement une variable-germe et un certain nombre d’autres, qui sont le plusen relation avec la variable-germe. La phase de réparation consiste à tenterd’améliorer la solution en résolvant un sous-problème sur les variables qui ontété sélectionnées, tout en fixant la valeur des autres variables à celle prisedans la solution de départ.

Le nom de cette technique vient du fait qu’un très grand nombre de possibi-lités existe pour reconstruire une solution, nombre croissant exponentiellementavec la taille du problème ou du moins plus élevé que celui que l’on pourrait rai-sonnablement énumérer extensivement. Ainsi la phase de reconstruction con-siste à choisir une solution parmi un grand nombre de possibilités. Comme lamajeur partie des variables conservent leur valeur d’une solution à la suivante,il s’agit bien, conceptuellement, d’une recherche locale, mais avec une taille devoisinage élevée. La trame de LNS est donnée par l’algorithme 5.1.

Algorithme 5.1 : Trame de LNS. Les fonctions de destruction, de réparation etd’acceptation doivent être spécifiées par le programmeur, de même que le critèred’arrêt.

Entrées : Solution s, Méthode de destruction d(·), méthode deréparation r(·), critère d’acceptation a(·, (·))

Résultat : Solution améliorée s∗

1 s∗ ← s;2 tant que Condition d’arrêt non satisfaite faire3 s′ ← r(d(s));4 si a(s, s′) alors5 s← s′

6 si s′ meilleure que s∗ alors7 s← s′

On remarque que cette trame laisse une très grande liberté au program-meur pour choisir diverses options :

Méthode de destruction d(·) Cette méthode est censée détruire une partiede la solution courante. Les auteurs préconisent qu’elle ne soit pas déter-ministe, de sorte que deux appels successifs détruisent des portions dif-férentes. Une autre vision de cette méthode est de fixer un certain nom-

Page 129: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

5.4 MÉTHODES D’AMÉLIORATION POUR PROBLÈMES DE GRANDE TAILLE 127

bre de variables du problème et de libérer les autres, qui pourront êtremodifiées. Cette méthode comporte également un paramètre qui permetde moduler l’importance de la destruction. En effet, si le nombre de va-riables modifiables est trop restreint, la méthode de réparation aura tropde contraintes pour pouvoir reconstruire la solution différemment, et l’al-gorithme n’arrivera pas à améliorer la solution courante. Inversement, sila destruction est trop importante, la méthode de reconstruction pourrarencontrer des difficultés à améliorer la solution courante, notamment sion veut une reconstruction exacte impliquant un volume de calcul prohi-bitif.

Méthode de reconstruction r(·) Cette méthode est censée reconstruire lapartie d’une solution qui serait détruite. Une autre vision de cette mé-thode est de réoptimiser la portion du problème correspondant aux va-riables qui ont été libérées par la méthode de destruction. Une optionpossible pour la méthode de reconstruction est d’utiliser une méthodeexacte, notamment de la programmation par contrainte. Une autre optionest d’utiliser une méthode heuristique, qu’elle soit simple, comme un al-gorithme glouton, ou plus évoluée, comme une recherche avec tabous,une recherche à voisinage variable ou autre.

Critère d’acceptation a(·, ·) Le plus simple des critères d’acceptation est d’uti-liser la valeur de la fonction-utilité des deux solutions passées en para-mètre :

a(s, s′) =

V rai Si s′meilleure que sFaux Sinon

D’autres critères ont été proposés, notamment ceux utilisés par des mé-thodes de type recuit simulé (c.f. section 6.1).

Critère d’arrêt La trame ne fournit aucune suggestion concernant le critèred’arrêt à utiliser. Les auteurs utilisent fréquemment la limite de leur pa-tience, exprimée en secondes, lorsque ce n’est pas celle d’auteurs ayantproposé une méthode concurrente ! Ce genre de critère d’arrêt n’est guèreconvaincant. Nous verrons plus loin que la trame assez proche de POP-MUSIC incorpore un critère d’arrêt naturel.

À titre d’illustration d’une implantation de cette méthode, prenons celle d’oùelle a reçu son nom [?], qui est une adaptation pour problèmes d’élaboration detournées de véhicules. Pour ce problème, la méthode de destruction consisteà choisir un client-germe au hasard. Les autres clients sont triés à l’aide d’unefonction mesurant la relation existante avec le client-germe. Cette fonction estinversement proportionnelle à la distance entre clients, et au fait que les clientsfont partie de la même tournée. L’idée est de sélectionner un sous-ensemblede clients proches, faisant partie de tournées différentes. Ces clients sont choi-sis aléatoirement, mais avec un biais pour favoriser le choix de ceux les plusfortement en relation avec le client-germe.

La méthode de reconstruction est basée sur un modèle de programme li-néaire en nombres entiers qui est résolu avec une technique de séparationet évaluation avec propagation de contraintes. On contraint cette méthode àne modifier que les variables associées aux clients choisis par la méthode de

Page 130: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

128 MÉTHODES DE DÉCOMPOSITION

(a) Solution initiale

(b) Solution détruite

(c) Solution reconstruite

FIGURE 5.3 – Illustration de la méthode LNS sur un problème d’élaboration de tournéesde véhicules : Certains clients de la solution initiale 5.3(a) sont retirés pour obtenir unesolution partielle non admissible 5.3(b) puis sont réinsérés pour obtenir une solutioncomplète améliorée 5.3(c).

Page 131: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

5.4 MÉTHODES D’AMÉLIORATION POUR PROBLÈMES DE GRANDE TAILLE 129

destruction. De plus, pour éviter que le temps de calcul n’explose, ce qui sur-vient fréquemment avec les méthodes exactes, l’arbre d’énumération n’est pasexaminé complètement, mais élagué heuristiquement. Un cycle de destruction-reconstruction est illustré en figure 5.3.

Il existe des algorithmes basés sur la trame de LNS qui ont été proposésbien avant cette dernière. On peut citer notamment l’algorithme de déplace-ment du goulot d’étranglement [?] pour un problème d’ordonnancement. Danscet article, la méthode de destruction sélectionne la machine qui constitue legoulot d’étranglement. La méthode de reconstruction réordonne les opérationsde cette machine, en considérant que les séquences sur les autres machinesne sont pas modifiées. Cela signifie que pour chaque opération sur la machine-goulot, on a un délai avant lequel l’opération ne peut avoir lieu (parce que l’élé-ment sur lequel elle a lieu doit subir d’autres opérations sur d’autres machinespréalablement) et un délai après lequel l’opération ne doit pas être faite si l’ons’interdit de dégrader la solution (parce que l’élément sur lequel elle a lieu doitsubir d’autres opérations sur d’autres machines ultérieurement). Comme tousles choix sont déterministes, que les réoptimisations se font de manière exacte,et que la solution courante n’est modifiée que si la réoptimisation l’améliorestrictement, la méthode a un critère d’arrêt naturel.

La méthode POPMUSIC présentée à la section suivante a été développéeindépendamment de LNS. Elle peut être vue comme une méthode de type LNSun peu plus rigide, dans le sens où elle dirige mieux le programmeur dans lechoix des options, notamment en ce qui concerne le critère d’arrêt.

5.4.2 POPMUSIC

L’idée à la base de POPMUSIC est d’optimiser localement une portiond’une solution, une fois cette dernière disponible. Ces améliorations sont ré-pétées jusqu’à ce qu’on n’en trouve plus. Il s’agit donc d’une recherche locale,au même titre que celles qui ont été présentées dans le chapitre 4. Originel-lement cette méthode a reçu l’acronyme moins attractif de LOPT (pour LocalOptimizations) [?, ?].

Pour les problèmes de grande taille, on peut considérer qu’une solutionest composée d’un certain nombre de parties, parties qui sont elles-mêmescomposées d’un certains nombre d’éléments. En prenant l’exemple du pro-blème de classification, chaque groupe d’éléments peut constituer une partie.De plus, on fera l’hypothèse que l’on peut définir une mesure de proximité entreles parties et que ces dernières ont une certaine indépendance les unes desautres dans la solution. Dans le cas du problème de classification, il y a desgroupes proches, car contenant des éléments dont on pourrait raisonnable-ment modifier l’affectation, et des groupes éloignés, contenant des élémentsdont on ne pourrait pas raisonnablement échanger l’affectation. Si ces hypo-thèses sont satisfaites, on a les conditions spéciales nécessaires pour mettreau point un algorithme basé sur la trame de POPMUSIC, qui tire son nomde Partial OPtimization Metaheuristic Under Special Intensification Condition,acronyme proposé par S. Voß.

Faisons donc l’hypothèse qu’une solution s peut être représentée par unensemble de q parties s1, . . . , sq et que l’on dispose d’une méthode quantifiantla proximité qu’il existe entre deux parties. L’idée à la base de POPMUSIC est

Page 132: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

130 MÉTHODES DE DÉCOMPOSITION

Partie-Germe

Sous-problème

Parties indépendantes

FIGURE 5.4 – Pour appliquer la trame POPMUSIC à un problème de classificationavec centres, on peut définir une partie comme l’ensemble des éléments rattachés àun même centre. Les éléments du groupe de la partie-germe, auxquels on adjoint lesparties les plus proches forment un sous-problème que l’on tente d’optimiser indépen-damment. L’optimisation de groupes très distants ne peut amener de bénéfice, car cesparties sont de facto indépendantes.

Algorithme 5.2 : Trame de POPMUSIC.

Entrées : Solution initiale s composée de q parties disjointes s1, . . . , sq,méthode d’amélioration de sous-problèmes

Résultat : Solution s améliorée1 U = s1, . . . , sq;2 tant que U 6= ∅ faire3 Sélectionner sg ∈ U // sg : partie-germe ;4 Construire un sous-problème R composé des r parties de s les plus

proches de sg;5 Tenter d’optimiser R;6 si R a été amélioré alors7 Mettre la solution s à jour;8 Retirer de U les parties qui ne font plus partie de s;9 Insérer dans U les parties du sous-problème optimisé R;

10 sinon // R non amélioré11 Retirer sg de U ;

Page 133: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

5.4 MÉTHODES D’AMÉLIORATION POUR PROBLÈMES DE GRANDE TAILLE 131

FIGURE 5.5 – Pour le problème d’élaboration de tournées de véhicules, la définitiond’une partie dans la trame POPMUSIC peut être une tournée entière. Ici, la proxi-mité entre tournées est mesurée par la distance de leur centre de gravité et un sous-problème est constitué des clients desservis par 6 tournées.

Page 134: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

132 MÉTHODES DE DÉCOMPOSITION

de sélectionner une partie-germe sg et un nombre r < q de parties les plusproches de sg pour former un sous-problème R. Avec une définition appro-priée des parties, une amélioration de la solution globale s peut être trouvéesi l’on arrive à améliorer le sous-problème R. La figures 5.4, 5.5 illustrent ceque peuvent être une partie et un sous-problème pour diverses applications.Pour éviter que l’on tente d’optimiser le même sous-problème plusieurs fois,on mémorise dans un ensemble U les parties-germes qui peuvent potentielle-ment définir un sous-problème qu’il est possible d’améliorer. Si l’optimisationd’un sous-problème ne mène pas à une amélioration, alors la partie-germe àl’origine de sa définition est retirée de l’ensemble U . Une fois que U est vide,le processus s’arrête. Si un sous-problème R a été amélioré avec succès, celasignifie qu’un certain nombre de parties ont été modifiées. De nouvelles amé-liorations deviennent possible dans leur voisinage. Dans ce cas, toutes les par-ties de U qui n’existent plus dans la solution améliorée en sont retirées avantd’y incorporer l’ensemble des parties de R. La trame 5.2 formalise la méthodePOPMUSIC. Pour transcrire cette trame en un code pour un problème donné,plusieurs choix doivent être pris :

Obtention de la solution initiale La méthode a besoin d’une solution avantde démarrer. La technique présentée dans la section 5.3 permet d’obtenirune solution initiale appropriée pour la trame POPMUSIC avec un effortde calcul limité. Cependant, une méthode basée sur POPMUSIC peuttrès bien s’avérer efficace pour des problème de taille limitée et on peutdémarrer avec un solution obtenue avec un algorithme plus gourmand enressources de calcul.

Définition d’une partie La définition de ce qu’est une partie n’est de loin pasunique pour un problème donné. Par exemple, pour les problèmes d’éla-boration de tournée de véhicules, on peut considérer que l’ensemble desclients sur la même tournée forme une partie, comme cela a été faitdans [?, ?]. Pour le même problème, il est également possible de définirune partie comme un unique client, comme dans [?].

Définition de la distance entre parties Pour certains problèmes, la défini-tion de la distance entre deux parties peut être relativement aisée et lo-gique. Par exemple, [?] utilise la distance euclidienne entre les centresdes groupes pour un problème de classification. Pour le problème d’éti-quetage de plan 2.6.1, on construit un graphe dont les sommets sontles objets à étiqueter et les arêtes représentent une potentielle super-position des étiquettes. La distance est mesurée par le nombre mini-mum d’arête d’une chaîne connectant l’objet-germe, comme illustré enfigure 5.6. Par contre cette définition peut être délicate pour certains pro-blème. On peut citer à ce propos l’élaboration de tournées de véhiculesavec fenêtre de temps : Deux clients géométriquement proche peuventavoir des fenêtre de temps incompatibles et doivent par conséquent êtreconsidérés comme distants.

Sélection de la partie-germe Il n’existe à notre connaissance pas d’étudeapprofondie sur l’impact du processus de sélection de la partie-germe.Dans les publications, seules des méthodes très simples sont utilisées :choix aléatoire ou gestion de l’ensemble U en pile.

Paramètre r La taille des sous-problèmes dépend de r, l’unique paramètre

Page 135: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

5.4 MÉTHODES D’AMÉLIORATION POUR PROBLÈMES DE GRANDE TAILLE 133

FIGURE 5.6 – Pour l’étiquetage de plans, une partie peut être un objet devant êtreétiqueté. Ici, on considère 4 positions possibles pour l’étiquette de chaque objet. Deuxobjets seront à une distance de 1 si leurs étiquettes peuvent se chevaucher. Le chiffreà l’intérieur de chaque disque représente sa distance à l’objet-germe, noté 0. Un sous-problème sera constitué des r = 25 objets les plus proches de l’objet-germe (dontla distance est ici au maximum 4) auxquels ont adjoint les objets dont les étiquettespourraient entrer en collisions avec ces r objets. Seules les positions des étiquettes deces derniers peuvent être modifiées lors de l’optimisation d’un sous-problème.

explicite de la trame POPMUSIC. Ce paramètre doit être modulé en fonc-tion de la capacité de résolution de la méthode d’optimisation des sous-problèmes. Il faut trouver un compromis entre une valeur trop faible quine permet que des améliorations mineures mais avec un effort de calculréduit et une valeur trop élevée, qui pourrait impliquer un effort de calculexcessif. On peut même imaginer de le faire varier en cours d’exécution,comme cela a été fait dans [?] ou [?].

Méthode d’optimisation Une grande latitude est laissée au programmeurconcernant la méthode d’optimisation des sous-problèmes. Il convientde préciser ici que l’implantation de celle-ci est facilitée par le fait quela taille des sous-problèmes peut être déterminée, notamment en ce quiconcerne l’ajustement de ses paramètres. Lorsque l’optimisation est uneméthode exacte, on parle de matheuristique.

Avec un critère d’arrêt basé sur le fait que l’ensemble U est vide, l’effort decalcul pourrait potentiellement devenir prohibitif pour des problèmes de grandetaille, sachant que plusieurs parties sont susceptibles d’y être introduites pourchaque optimisation de sous-problème. En pratique, on observe qu’il n’en estrien : le nombre de sous-problèmes à résoudre croît quasi-linéairement avec lataille du problème. Ceci est illustré en figure 5.7 pour un problème de localisation-routage [?].

Page 136: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

134 MÉTHODES DE DÉCOMPOSITION

Tem

psde

calc

ul[s

]

105

104

103

102

10

1104 105 106

Taille du problème

Solution initiale

Optimisation des sous-problèmes

Θ(n)

Θ(n3/2)

FIGURE 5.7 – Temps de calcul observés pour la création d’une solution initiale d’unproblème de localisation-routage avec la technique présentée en section 5.3 et tempsglobal d’optimisation des sous-problèmes avec la trame POPMUSIC. On remarque quela croissance du temps de calcul semble inférieure à l’analyse de Θ(n3/2) qui a été faiteen section 5.3 et que le temps pour l’optimisation des sous-problèmes est pratiquementlinéaire.

Page 137: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

5.4 MÉTHODES D’AMÉLIORATION POUR PROBLÈMES DE GRANDE TAILLE 135

POPMUSIC pour le problème du voyageur de commerce

Une implantation élémentaire de la technique POPMUSIC au problème duvoyageur de commerce est donnée par le code 5.1. Dans cette adaptation, unepartie est une ville, la distance entre parties est mesurée non par la matricedes distances, mais par le nombre de villes intermédiaires qu’il y a en suivantla tournée courante. Un sous-problème est donc un chemin dont on fixe lesdeux extrémités, séparées d’au plus 2r villes à l’intérieur duquel on chercheà déplacer un sous-chemin d’au plus r villes. L’ensemble U n’est pas repré-senté explicitement car il « colle » à la solution. On optimise des sous-cheminschaque fois décalés d’une ville. Pour déterminer s’il faut continuer de tenter desoptimisations, on mémorise la ville initiale de la dernière portion de chemin quia été optimisée avec succès. Si l’on fait un tour complet sans amélioration, leprocessus peut s’arrêter.

Listing 5.1 – tsp_3opt_limited.c Implantation de POPMUSIC pour le voyageur decommerce.vo id t sp_3op t_ l im i t ed ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance mat r i x ∗ /i n t r , /∗ Maximum nr o f nodes of subpath opt imized ∗ /i n t bes t_so l [ ] , /∗ InOut So lu t i on provided and re turned ∗ /double ∗best_cost ) /∗ InOut Length o f the best t ou r ∗ /

i n t ∗s = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ; /∗ Successors o f c i t i e s ∗ /i n t i , j , k , t , u , temp , /∗ indexes ∗ /

i_end ; /∗ Last values o f index i ∗ /double de l t a ; /∗ Cost o f a move ∗ /

i f ( r > n − 2) /∗ Max subpath leng th should not be l a r g e r than n − 2 ∗ /r = n − 2;

f o r ( i = 1 ; i < n ; i ++) /∗ Bu i ld s o l u t i o n rep resen ta t i on by successors ∗ /s [ bes t_so l [ i −1]] = best_so l [ i ] ;

s [ bes t_so l [ n−1]] = best_so l [ 0 ] ;

i_end = i = 0 ; /∗ S t a r t moves eva lua t i on from c i t y 0 ∗ /do f o r ( j = s [ i ] , t =0; t < r && s [ s [ j ] ] != i_end ; t ++ , j = s [ j ] )

f o r ( k = s [ j ] , u=0; u < r && s [ k ] != i_end ; u++ , k = s [ k ] )

de l t a = d [ i ] [ s [ j ] ] + d [ j ] [ s [ k ] ] + d [ k ] [ s [ i ] ] /∗ Move cost ∗ /−d [ i ] [ s [ i ] ] − d [ j ] [ s [ j ] ] − d [ k ] [ s [ k ] ] ;

i f ( de l t a < −eps i l on ) /∗ Improving move ? ∗ / temp = s [ i ] ; s [ i ] = s [ j ] ; s [ j ] = s [ k ] ; s [ k ] = temp ; /∗ Perform move ∗ /

temp = j ; j = k ; k = temp ; /∗ Replace j between i and k ∗ /∗best_cost = ∗best_cost + de l t a ; /∗ Update s o l u t i o n cost ∗ /i_end = i ; /∗ Update l a s t values o f index i ∗ /

i = s [ i ] ;wh i le ( i != i_end ) ; /∗ A complete tou r scanned w i thou t improvement ∗ /

j = 0 ; /∗ Rebui ld s o l u t i o n under the form of a permutat ion o f c i t i e s ∗ /f o r ( i = 0 ; i < n ; i ++)

bes t_so l [ i ] = s [ j ] ; j = s [ j ] ;

f r ee ( s ) ;

Pour appliquer la technique POPMUSIC au problème du voyageur de com-merce de manière efficace, il faut cependant prendre en considération :

— La solution initiale doit déjà avoir une bonne structure ; pour un problèmeeuclidien par exemple, elle ne devrait pas comporter d’arêtes se croisant

Page 138: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

136 MÉTHODES DE DÉCOMPOSITION

situées dans des portions de séquence éloignées, car la procédure d’op-timisation ne pourra pas à les décroiser.

— Plutôt que de mettre au point une recherche locale ad-hoc comme celledu code 5.1 pour optimiser des sous-chemins, il serait préférable d’utili-ser une méthode générale de résolution d’un problème de voyageur decommerce, comme par exemple le code 4.4.

— Finalement, il faut éviter d’optimiser une nouvelle fois un sous-cheminque l’on a déjà optimisé.

Pour démarrer avec une solution avec une bonne structure sans utiliserun algorithme de complexité trop élevée, on peut s’inspirer de la techniqueprésentée en section 5.3. On commence par échantillonner aléatoirement kdes n villes, avec k < n, un paramètre à choisir en fonction de n de telle sorteque la complexité algorithmique de la méthode soit aussi faible que possible ;on y reviendra. Un problème de voyageur de voyageur de commerce est résolu(éventuellement de façon heuristique) sur les villes échantillonnées à l’aided’une méthode d’optimisation de complexité c(k). On trouve pour chacune desn−k villes restantes la ville de l’échantillon qui lui est la plus proche. Ceci peutse faire trivialement en Θ(k(n − k)). Chaque ville restante est ensuite insérée(dans un ordre quelconque) dans la tournée partielle, juste après la ville del’échantillon qui lui est le plus proche. Ceci peut se faire également trivialementen Θ(n− k).

On obtient ainsi une tournée mauvaise, mais qui a de bonne propriétéspour une optimisation de sous-chemins. On optimise tout d’abord tous lessous-chemins comportant les villes insérées après deux villes successives del’échantillon. L’optimisation de chacun de ces k sous-chemins se fait avec uneméthode de complexité d(r), pour un sous-chemin comportant r villes. La tour-née ainsi obtenue peut être optimisée à l’aide de POPMUSIC en considérantcomme sous-problème des sous-chemins comportant un nombre constant devilles, par exemple 50.

Optimisation de la complexité empirique

Une très bonne tournée sur un échantillon de k villes peut être obtenue avecle code 4.4 implantant des chaînes d’éjections. On observe empiriquementune complexité c(k) = O(k2.78) pour ce code. L’optimisation de sous-cheminsde r villes peut se faire plus rapidement, avec le code 4.3qui présente unecomplexité empirique d(r) = O(r2.29). En choisissant k = Θ(n0.56), on aboutità une méthode dont la complexité empirique globale est en O(n1.6).

Pour pouvoir utiliser directement un code résolvant un problème de voya-geur de commerce pour optimiser des sous-chemins, il suffit de modifier lamatrice des distances des villes d’un sous-chemin. Si les deux villes aux extré-mités du chemin sont v1 et vr, on posera dv1,vr = dvr,v1

= 0 et on augmenterad’une valeur élevée (par exemple, donnée par la longueur totale L du chemin)la distance entre les v1 et vr et les villes à l’intérieur du chemin. Les autresdistances restent inchangées. On utilise donc par exemple la matrice des dis-

Page 139: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

5.4 MÉTHODES D’AMÉLIORATION POUR PROBLÈMES DE GRANDE TAILLE 137

(a) Échantillon et tournée complète en coursd’optimisation

(b) Tournée optimisée avec POPMUSIC et,en superposition, la tournée optimale

FIGURE 5.8 – Génération d’une solution initiale à un problème de voyageur de com-merce de grande taille : On échantillonne des villes du problème initiale pour laquelleet on trouve une tournée partielle à l’aide d’une recherche locale basée sur sur leschaînes d’éjection (Code 4.4). On insère successivement chacune des villes restantessur cette tournée partielle juste après la ville de l’échantillon qui lui est le plus proche.Ensuite, on améliore avec le voisinage 2-opt (Code 4.3) des sous-chemins compor-tant deux groupes de villes insérées après deux villes successives de l’échantillon.La figure 5.8(a) montre la tournée sur l’échantillon ainsi que la tournée complète encours d’optimisation. Finalement, des sous-chemins de 50 villes sont optimisés à l’aidede POPMUSIC en utilisant une recherche locale basée sur les chaînes d’éjection(Code 4.4). La tournée optimale est superposée en trait fin à celle obtenue par POP-MUSIC.

Page 140: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

138 MÉTHODES DE DÉCOMPOSITION

tances D suivante :

D =

0 d12 + L d13 + L . . . 0

d21 + L 0 d23 . . . d2r + Ld31 + L d32 0 . . . d3r + L

......

.... . .

...0 dr2 + L dr3 + L . . . 0

Finalement, il n’est pas nécessaire d’optimiser plusieurs fois le même sous-chemin. Pour éviter cela, on peut associer à chaque ville un drapeau indiquantsi elle a déjà été la ville de départ d’un sous-chemin optimisé. Lors d’une opti-misation réussie, on peut abaisser tous les drapeaux des villes qui se trouventjusqu’à 50 position avant ou après une séquence de ville qui a été modifiéedurant l’optimisation (tout en laissant levé le drapeau de la ville de départ dusous-chemin).

5.4.3 Commentaires

La principale différence entre LNS et POPMUSIC est que cette dernièrefixe le critère d’arrêt et celui d’acceptation d’une solution du large voisinage.En effet, dans la trame de POPMUSIC on accepte de modifier la solution quesi on a une amélioration stricte. Pour plusieurs problèmes, cette trame semblesuffisante pour obtenir des solution de bonne qualité, cette dernière étant for-tement conditionnée à la capacité de la méthode d’optimisation utilisée. La phi-losophie de POPMUSIC est de conserver une trame aussi simple que possibleet d’améliorer au besoin la méthode d’optimisation pour qu’elle puisse mieuxtraiter des sous-problèmes de plus grande taille plutôt que de complexifier latrame en ajoutant des critères d’acceptation ou d’arrêt baroques.

La définition des parties et de leur proximité dans POPMUSIC est unefaçon peut-être plus intuitive que dans LNS pour formaliser un ensemble decontraintes que l’on ajoute au problème sur la base d’une solution existante.Ces contraintes permettent d’utiliser une méthode d’optimisation qui serait in-applicable au problème entier. Du reste, [?] dans leur Méthode du Corridorprennent la problématique par l’autre bout : étant donné une méthode d’opti-misation qui fonctionne bien — en l’occurrence la programmation dynamique— comment peut-on ajouter des contraintes au problème pour que l’on puissecontinuer à utiliser cette méthode d’optimisation.

Il faut noter que les composantes ou options d’une méthode sont souventtoutes interdépendantes. Le choix d’une option ayant une incidence sur lesautres explique en partie pourquoi des méthodes en réalité très similaires sontprésentées par des trames et des noms différents.

Page 141: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

5.5 EXERCICES 139

5.5 Exercices

Exercice 5.1. Complexité de la recherche dichotomique En appliquant lethéorème général de récurrence de la section 5.2.1, déterminer la complexitéalgorithmique de la recherche d’un élément dans un tableau trié au moyend’une recherche dichotomique

Exercice 5.2. POPMUSIC pour le problème de la chaîne de traitementDans le cadre de la méthode de décomposition POPMUSIC, comment définirune partie et un sous-problème pour le problème de la chaîne de traitement ?Comment tenir compte de l’interaction entre le sous-problème et les parties quine doivent pas être optimisées ?

Exercice 5.3. Complexité algorithmique de POPMUSIC Si la taille des sous-problèmes est indépendante de la taille du problème, on peut considérer qu’unsous-problème peut être résolu en temps constant. Des observations empi-riques, comme celles présentées dans la figure 5.7 montrent que le nombre defois qu’une partie est insérée dans U est également indépendant de la taille duproblème, en moyenne. Si ces hypothèses sont satisfaites, quelles sont les par-ties les plus complexes de la trame de POPMUSIC, en termes de complexitéalgorithmique ?

Exercice 5.4. Complexité minimale de POPMUSIC pour le voyageur decommerce Justifier le choix de la taille de l’échantillon en Θ(n0.56) suggéré enpage 136 pour une implantation de complexité empirique minimale de POP-MUSIC pour le voyageur de commerce.

Page 142: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

140 MÉTHODES DE DÉCOMPOSITION

Page 143: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Troisième partie

Techniques populaires

Page 144: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Page 145: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Chapitre 6

Méthodes randomisées

En appliquant les principes présentés dans les chapitres précédents, nousarrivons à construire une solution et à l’améliorer jusqu’à trouver un optimumlocal. De plus, si le problème est compliqué ou de grande taille, il faut le dé-composer en sous-problèmes plus simples à résoudre. Que faire si en utilisantces techniques on obtient des solutions dont la qualité n’est pas suffisante etque l’on a la possibilité d’investir plus d’effort de calcul pour tenter d’autresaméliorations ?

Une première option venant à l’esprit est d’essayer de mettre en place unprocessus d’apprentissage, ce que nous examinerons dans des chapitres ul-térieurs.

Une deuxième option — plus simple à mettre en œuvre a priori — est d’in-corporer une composante aléatoire dans une méthode « d’amélioration » oùl’on s’autorise le choix de solutions voisines de qualité moindre que celle dedépart. Comme on n’a plus une amélioration à chaque itération de telles mé-thodes, basées sur des modifications de solutions, on parlera de recherchelocale. Cette voie est suivie par des méthodes très semblables dans leur im-plantation, le recuit simulé, l’acceptation à seuil, la méthode du grand déluge,et celle du démon. Toutes ces méthodes peuvent être généralisées dans unetrame unique, les méthodes de bruitage.

Une troisième option est de répéter des constructions avec des choix aléa-toires, suivies éventuellement d’améliorations locales. C’est la voie suivie parla méthode GRASP.

Finalement, on peut mettre en œuvre une stratégie dans laquelle on faitalterner des phases d’intensification et de diversification de la recherche. Larecherche à voisinage variable fait usage de cette stratégie, en itérant des mé-thodes d’améliorations utilisant un voisinage de base après avoir dégradé lasolution par des mouvements choisis aléatoirement dans d’autres voisinages.

6.1 Recuit simulé

La méthode du recuit simulé est une des premières techniques de recher-che locale qui n’améliore pas strictement la qualité de la solution à chaqueitération. Cette méthode s’inspire d’un processus physique, le recuit, qui per-met d’obtenir un matériau dont l’agencement des molécules minimise l’énergie

Page 146: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

144 MÉTHODES RANDOMISÉES

interne.

État visqueux

Refroidissement rapideRefroidissement lent

Recuit Trempe

État polycristallin ou amorpheÉtat cristallin

FIGURE 6.1 – Processus physiques de recuit et de trempe. Un matériaux est porté àune température telle que ses molécules ont une énergie suffisante pour se déplacer.En le refroidissant lentement, les molécules ont le temps de se mettre dans un étatcristallin minimisant leur énergie, c’est le processus de recuit. Si le refroidissement estplus rapide, on parle de trempe et les cristaux se forment de façon désordonnée. Danscertaines conditions, un refroidissement très rapide ne laisse pas le temps aux cristauxde se former et la matière reste dans un état amorphe.

Certains matériaux, comme des métaux, voient leur structure interne semodifier selon la température à laquelle ils sont portés. En refroidissant rapi-dement ces matériaux, les molécules n’auront pas le temps de s’agencer pourretrouver la structure habituelle à basse température, mais vont former desgrains qui sont de petits cristaux dont l’orientation est différente pour chaquegrain. Il s’agit du processus de trempe, qui est utilisé notamment pour durcircertains aciers.

Au contraire, si le refroidissement est lent, les molécules arriveront à formerdes cristaux beaucoup plus grands, correspondant à leur état d’énergie mini-male. En répétant le procédé, on peut encore augmenter la taille des cristaux,voire à obtenir un mono-cristal, c’est le procédé de recuit.

[?] et [?] ont eu indépendamment l’idée de simuler ce processus en optimi-sation combinatoire, en faisant l’analogie entre une fonction-objectif à minimi-ser et l’énergie des molécules.

Si à haute température une molécule a une énergie suffisante pour aller

Page 147: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

6.1 RECUIT SIMULÉ 145

combler un trou du cristal ou de modifier sa configuration, elle a en revancheune probabilité nettement moindre de le faire si la température est plus basse.Traduire ceci en termes d’optimisation combinatoire revient à modifier locale-ment de façon aléatoire une solution et d’accepter sa dégradation avec unecertaine probabilité. Cette dernière doit être d’autant plus faible que la dégra-dation est élevée.

Exprimé en termes de recherche locale, cela revient à générer un mou-vement m ∈ M aléatoirement et de calculer la différence de coût ∆ entre lasolution modifiée et celle de départ : ∆ = f(s⊕m)−f(s). Si ∆ < 0, ce qui signi-fie que le mouvement m améliore la solution s, alors on l’accepte et la nouvellesolution devient s⊕m. Sinon, le mouvement m est tout de même accepté, maisavec une probabilité proportionnelle à e−∆/T , où T est un paramètre simulantla température.

À chaque étape, la température T est diminuée. Plusieurs formules ont étéproposées pour ajuster la température. Parmi les plus fréquemment rencon-trées, citons T ← α · T et T ← T

1+αT , où 0 < α < 1 est un paramètre réglant lavitesse de décroissance de la température.

La méthode comporte encore deux paramètres, au minimum : Tinit et Tfin,les températures initiales et finales. L’algorithme 6.1 donne la trame d’un recuitsimulé de base.

Algorithme 6.1 : Trame d’un recuit simulé élémentaire. D’innombrables va-riantes d’algorithmes basés sur cette trame ont été proposés.

Entrées : Solution initiale s ; fonction utilité f à minimiser ; structure devoisinage M , paramètres Tinit, Tfin < Tinit et 0 < α < 1

Résultat : Solution s modifiée1 T ← Tinit;2 tant que T > tfin faire3 Générer un mouvement m aléatoirement dans M ;4 ∆ = f(s⊕m)− f(s);5 Générer un nombre aléatoire u uniformément entre 0 et 1;6 si ∆ < 0 ou e−∆/T > u alors7 s← s⊕m8 T ← α · T

En pratique, il est rare de rencontrer un algorithme suivant exactement cettetrame. Tout d’abord, les paramètres définissant les températures initiales et fi-nales ont une influence très différente selon l’unité de mesure de la fonctionutilité f . En effet, si f mesure la longueur d’une tournée de voyageur de com-merce, il convient d’adapter ces paramètres selon que cette mesure est expri-mée en mètres ou en kilomètres.

Pour rendre l’algorithme plus robuste, on ne demande pas à l’utilisateur defournir directement des températures, mais par exemple des taux d’acceptationde mouvements dégradants τinit et τfin, ce qui est beaucoup plus intuitif. Lestempératures sont alors calculées automatiquement en fonction de ces taux,en effectuant quelques centaines ou milliers de pas d’une marche aléatoire,par enregistrement de statistiques sur les valeurs moyennes des ∆.

La figure 6.2 illustre l’évolution de la longueur de la tournée d’un voyageur

Page 148: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

146 MÉTHODES RANDOMISÉES

Longueur de la tournée

Température (x100)

Amélioration de la solution

Itérations

FIGURE 6.2 – Évolution de la longueur de la tournée d’un voyageur de commerce et dela température lors de l’exécution d’un recuit simulé.

de commerce sur 225 villes en fonction du nombre d’itérations pour une exé-cution de l’algorithme 6.1 avec comme température initiale 5 · dmax/n, commetempérature finale 20 · dmax/n2 et α = 0.99. Il est fourni à l’algorithme une so-lution de relativement bonne qualité. On remarque une importante dégradationde cette dernière durant les premières itérations, à température élevée. Cettedégradation est nécessaire pour briser la structure de la solution de départ afind’arriver à de meilleures solutions. Environ la moitié des itérations sont réali-sée inutilement dans cette exécution, la valeur de la meilleure solution trouvéen’évoluant plus.

Page 149: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

6.1 RECUIT SIMULÉ 147

Listing 6.1 – tsp_SA.c Code C implantant une variante de recuit simulé pour le pro-blème du voyageur de commerce symétrique. La fonction build_2opt_data_structure

qui initialise la structure de donnée décrite en section 4.2.3 pour effectuer un mouve-ment de type 2opt en temps constant est données par le code 4.2.vo id tsp_SA ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance matr ix , must be symmetr ica l ∗ /i n t bes t_so l [ ] , /∗ InOut So lu t i on provided and re turned ∗ /double ∗best_cost , /∗ InOut Length o f the best t ou r ∗ /double i n i t i a l _ t e m p e r a t u r e , /∗ SA Parameters ∗ /double f ina l_ tempera tu re ,double alpha )

i n t ∗ t ; /∗ Successor and predecessor o f each c i t y [ see tsp−2opt ] ∗ /i n t i , j , nex t_ i , next_ j , r , s ; /∗ i nd i ces ∗ /long i t e r a t i o n ; /∗ I t e r a t i o n counter ∗ /double leng th = ∗best_cost ; /∗ Length o f cu r ren t t ou r ∗ /double T = i n i t i a l _ t e m p e r a t u r e ; /∗ Current temperature ∗ /double de l t a ; /∗ Cost o f a t r i a l move ∗ /

t = ( i n t ∗) mal loc ( ( s i z e _ t ) (2∗n ) ∗ s i z e o f ( i n t ) ) ;bu i l d_2op t_da ta_s t ruc tu re ( n , best_sol , t ) ;

i t e r a t i o n = 0; /∗ Number o f i t e r a t i o n s performed ∗ /wh i le (T > f i na l_ tempera tu re ) /∗ Repeat , wh i le temperature high enough ∗ / i = 0 ; /∗ S t a r t moves eva lua t i on from c i t y 0 ∗ /

wh i le ( t [ t [ i ] ] > >1 && t [ i ] > >1) /∗ Index i a r r i v e d at the l a s t to cons ider ? ∗ / j = t [ t [ i ] ] ;

wh i le ( j >>1 && ( t [ j ]>>1 | | i >>1) ) de l t a = d [ i > >1] [ j >>1] + d [ t [ i ] > >1] [ t [ j ] > >1]

− d [ i > >1] [ t [ i ] > >1] − d [ j > >1] [ t [ j ] > >1] ;i f ( de l t a < −eps i l on | | exp(−de l t a / T ) > rando ( ) ) /∗ Move accepted ∗ / nex t_ i = t [ i ] ; nex t_ j = t [ j ] ;

t [ i ] = j ^1 ; t [ nex t_ i ^1 ] = nex t_ j ;t [ j ] = i ^1 ; t [ nex t_ j ^1 ] = nex t_ i ;l eng th = leng th + de l t a ;i = t [ i ] ; /∗ Explanat ion l e f t i n exerc ise ∗ /j = t [ i ] ;

i f ( l eng th < ∗best_cost − eps i l on ) /∗ Memorize improved best s o l u t i o n ∗ / ∗best_cost = leng th ;

/∗ Rebui ld the s o l u t i o n under the form of the sequence of c i t i e s ∗ /r = 0 ;f o r ( s = 0 ; s < n ; s = s + 1) bes t_so l [ s ] = r >>1; r = t [ r ] ;

p r i n t f ( "SA %l d %f \ n " , i t e r a t i o n , leng th ) ;

/∗ Move accepted ∗ /

i t e r a t i o n ++;i f ( i t e r a t i o n % ( n∗n ) == 0) /∗ Temperature decrease every n∗n i t e r . ∗ /

T ∗= alpha ;j = t [ j ] ; /∗ Next j ∗ /

i = t [ i ] ; /∗ Next i ∗ /

/∗ whi le (T > f i na l_ tempera tu re ) ∗ /f r ee ( t ) ;

Le code 6.1 implante une sorte de recuit simulé pour le problème du voya-geur de commerce. Il est basé sur une structure de voisinage 2-opt. Afin depouvoir évaluer un mouvement et le réaliser en temps constant, la structure dedonnées introduite en section 4.2.3 a été utilisée. Cependant, cette structurede données ne permet pas d’évaluer en un temps constant un mouvement(i, j) tiré aléatoirement, car, étant donné une ville i et celle qui lui succèdesi lorsqu’on fait le parcours dans un sens donné, on ne peut pas identifier laville sj qui succède à j autrement qu’en suivant les successeur de i jusqu’àatteindre j puis sj .

Page 150: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

148 MÉTHODES RANDOMISÉES

L’artifice utilisé dans ce code est de ne pas tirer les mouvement aléatoire-ment, mais d’examiner systématiquement tout le voisinage. L’autre adaptationde la trame 6.1 est de ne pas diminuer la température à chaque itération, maisseulement toutes les n2 itérations. Ainsi, une valeur de α entre 0.8 et 0.99donne des résultats acceptables, indépendamment de la taille du problème, etdonc du nombre d’itérations nécessaires à l’obtention de bonnes solutions. Fi-nalement, mentionnons que l’utilisateur doit fournir les températures initiales etfinales de façon absolue. En pratique, Tinit = 5 · dmax/n et Tfin = 20 · dmax/n2

sont des valeurs qui peuvent convenir pour démarrer un ajustement de cesparamètres.

6.2 Acceptation à seuil

La méthode de l’acceptation à seuil est une recherche locale pure, dans lamesure où l’on ne fait que se déplacer d’une solution à l’une de ses voisines.Tout comme les méthodes du démon, du grand déluge ou du recuit simulé,les mouvements sont choisis aléatoirement, mais ne sont pas systématique-ment appliqués à la solution courante. Dans le cas où le mouvement permetune amélioration, la solution voisine est acceptée. Si par contre le mouvementdétériore la solution, le mouvement n’est accepté que si la détérioration estinférieure à un certain seuil. Ce dernier est progressivement diminué jusqu’àprendre une valeur nulle, de sorte que la méthode s’arrête dans un optimumlocal.

Algorithme 6.2 : Trame d’une acceptation à seuil. Les valeurs des seuils T1 àTImax ne sont pas forcément fournis explicitement mais calculés, par exemple enfournissant uniquement le seuil initial et en le multipliant par un autre paramètre αà chaque ronde de R itérations.

Entrées : Solution initiale s ; fonction utilité f à minimiser ; structure devoisinage M , paramètres T , R, τ1, . . . τT

Résultat : Solution s∗

1 s∗ ← s;2 pour t allant de 1 à T faire3 pour R itérations faire4 Générer un mouvement m aléatoirement dans M ;5 si f(s⊕m)− f(s) < τt alors6 s← s⊕m;7 si f(s∗) > f(s) alors8 s∗ ← s

[?] ont proposé une méthode automatique pour fixer les seuils : on com-mence par effectuer des mouvements aléatoires en enregistrant les variationsde la valeur de la fonction-objectif (en valeur absolue). Cela permet de déter-miner la fonction de distribution empirique F de l’amplitude des mouvements.On fixe les seuils en utilisant l’inverse de cette fonction (voir illustration en fi-gure 6.3) : Ti = F−1(0.8·(Imax−i)/Imax). Autrement dit, le premier seuil permet

Page 151: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

6.3 GRAND DÉLUGE 149

Proportion de |∆| < x

1

0.8

∆max

x

τ1τT = 0 τ2

F

0

FIGURE 6.3 – Technique de détermination des seuils τ1, . . . τT pour l’acceptation àseuils. La fonction de répartition empirique F est obtenue en effectuant un certain nom-bre de mouvements et en enregistrant leur amplitude en valeur absolue.

d’accepter environ 80% des mouvements dégradants alors que le dernier nepermet que des mouvements améliorants.

6.3 Grand déluge

La méthode du grand déluge présente des similarités avec la précédente,cependant ce n’est pas l’amplitude des mouvements qui limite la progressionde la recherche, mais la valeur de la fonction-utilité. Le nom de cette méthodeest tiré de la légende qui veut qu’à la suite de pluies ininterrompues, les êtresterrestres finirent tous noyé, sauf ceux ayant été embarqués sur l’arche deNoé. On imagine que les animaux restés à terre, pris de panique, couraienten tous sens, n’importe où sauf là où il y avait de l’eau. L’analogie avec unprocessus de maximisation se fait en considérant des mouvements aléatoiresqui sont acceptés tant qu’ils ne mènent pas à une solution dont la qualité estinférieur à un seuil L — le niveau de l’eau — que l’on augmente de P — ledébit de la pluie — à chaque itération. Le processus s’arrête lorsque la valeurde la solution courante est inférieure à L. L’algorithme 6.3 donne la trame decette méthode.

Page 152: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

150 MÉTHODES RANDOMISÉES

Algorithme 6.3 : Algorithme du grand déluge. Cet algorithme peut s’adapter àdes problèmes de minimisation, mais il faut alors simuler le comportement despoissons lors de la baisse des eaux !

Entrées : Solution s, fonction-utilité f à maximiser, structure devoisinage M , paramètres L et P

Résultat : s∗

1 s∗ ← s;2 tant que f(s) < L faire3 Tirer un mouvement m aléatoirement dans M ;4 si f(s⊕m) > L alors5 s← s⊕m;6 si f(s) < f(s∗) alors7 s∗ ← s

8 L← L+ P ;

(a) Début de pluie (b) (c) (d) Fin du déluge

FIGURE 6.4 – Illustration de la méthode du grand déluge. 6.4(a) État du paysage audébut de la pluie. Le niveau de l’eau augmente jusqu’à ce qu’émergent seulement lesplus hauts sommets 6.4(d)

Page 153: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

6.4 ALGORITHME DU DÉMON 151

6.4 Algorithme du démon

L’algorithme du démon simule le comportement d’un joueur invétéré quimise toujours plus gros. Le démon du jeu le pousse à dépenser futilement sonargent si ses gains dépassent un certain seuil Dmax. Une fois ce seuil atteint,il continue à jouer. Le joueur entre au casino avec un montant de D en pocheet n’en ressort que lorsqu’il est épuisé, après Imax tours de jeu ; notons que cedernier paramètre intervient dans de nombreuses recherche locales itérativescar il permet de régler directement l’effort de calcul.

Traduit en termes de recherche locale, une mise consiste à autoriser unmouvement dégradant la solution d’une quantité au plus égale au montant àdisposition. Si la modification améliore la solution, le budget est augmenté d’au-tant, jusqu’à concurrence du seuil maximum. L’algorithme 6.4 donne la tramede cette méthode.

Algorithme 6.4 : Algorithme du démon. Cet algorithme est relativement simpleà implanter, mais, comme pour l’acceptation à seuil, ses paramètres doivent êtreajustés en fonction de la valeur numérique des données.

Entrées : Solution s, fonction-utilité à minimser f , structure de voisinageM , paramètres Imax, D,Dmax

Résultat : s∗

1 s∗ ← s;2 pour Imax itérations faire3 Tirer un mouvement m aléatoirement dans M ;4 ∆ = f(s⊕m)− f(s);5 si ∆ 6 D alors6 si D −∆ > Dmax alors7 D ← Dmax

8 sinon9 D ← D −∆

10 s← s⊕m;

6.5 Méthode de bruitage

Les méthodes de bruitage font l’hypothèse que les données du problèmene sont pas connues avec une précision infinie. Dans ces conditions, même sile problème est convexe et simple, une méthode d’amélioration peut se trouverpiégée dans des optima locaux résultant d’artefacts. Pour rendre cette mé-thode plus robuste, on ajoute un bruit aléatoire aux données ou à l’évaluationde la fonction-objectif, de sorte que la fonction-utilité résultante, prenant desvaleurs stochastiques, n’ait plus d’optima locaux. Ces derniers sont en quel-que sorte gommés par le bruit aléatoire.

La trame générale des méthodes de bruitage est donnée par l’algorithme 6.5.On fournit à la méthode une loi de probabilité, paramétrée par le numéro d’ité-ration. Chaque fois que l’on évalue une solution, on génère une occurrence

Page 154: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

152 MÉTHODES RANDOMISÉES

Algorithme 6.5 : Trame d’une méthode de bruitage. À chaque modification desolution essayée, on génère une occurrence de bruit aléatoire selon la loi de pro-babilité bruit(i), dont la variance diminue généralement avec i.

Entrées : Solution s, fonction à minimiser f , structure de voisinage M ,paramètres Imax, bruit(i)

Résultat : s∗

1 s∗ ← s;2 pour i allant de 1 à Imax faire3 Tirer un mouvement m aléatoirement dans M ;4 si f(s⊕m) + bruit(i) < f(s) alors5 s← s⊕m;6 si f(s) < f(s∗) alors7 s∗ ← s

de bruit aléatoire. Généralement, l’espérance de la loi est nulle et sa variancediminue avec le numéro d’itération, ce qui fait qu’à la fin de l’algorithme, laméthode se rapproche de plus en plus d’une méthode d’amélioration.

Itérations

Répartition des niveaux de bruit

0

FIGURE 6.5 – Exemple habituel de l’évolution de la distribution du bruit aléatoire enfonction du nombre d’itérations effectuées par une méthode de bruitage. La densité dela couleur représente la densité de probabilité.

La variance de la fonction de bruit doit naturellement dépendre des donnéesnumériques du problème. Pour ce faire, on peut incorporer l’évaluation de lafonction-objectif dans la loi de probabilité. Selon les choix réalisés pour la loide probabilité, on peut rendre une méthode de bruitage équivalente à un recuitsimulé, à une méthode d’acceptation à seuil ou aux autres techniques décritesplus haut.

Page 155: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

6.6 GRASP 153

Listing 6.2 – tsp_noising.c Implantation d’une méthode de bruitage pour le problèmede voyageur de commerce. La distribution du bruit est uniforme et décroît exponentiel-lement avec le nombre d’itérations effectuées.vo id tsp_no is ing ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance matr ix , must be symmetr ica l ∗ /i n t bes t_so l [ ] , /∗ InOut So lu t i on provided and re turned ∗ /double ∗best_cost , /∗ InOut Length o f the best t ou r ∗ /double i n i t i a l _ n o i s e , /∗ Parameters ∗ /double f i n a l _ n o i s e ,double alpha )

i n t ∗ t ; /∗ Successor and predecessor o f each c i t y [ see t s p _ 2 o p t _ f i r s t ] ∗ /i n t i , j , nex t_ i , next_ j , r , s ; /∗ i nd i ces ∗ /long i t e r a t i o n ; /∗ I t e r a t i o n counter ∗ /double leng th = ∗best_cost ; /∗ Length o f cu r ren t t ou r ∗ /

double noise , cur ren t_no ise = i n i t i a l _ n o i s e ; /∗ Current maximal noise ∗ /double de l t a ; /∗ Cost o f a t r i a l move ∗ /

t = ( i n t ∗) mal loc ( ( s i z e _ t ) ( 2 ∗ n ) ∗ s i z e o f ( i n t ) ) ;bu i l d_2op t_da ta_s t ruc tu re ( n , best_sol , t ) ;i t e r a t i o n = 0; /∗ Number o f i t e r a t i o n s performed ∗ /wh i le ( cur ren t_no ise > f i n a l _ n o i s e ) /∗ Repeat , wh i le noise high enough ∗ / i = 0 ; /∗ S t a r t moves eva lua t i on from c i t y 0 ∗ /

wh i le ( t [ t [ i ] ] > >1 && t [ i ] > >1) /∗ Index i a r r i v e d at the l a s t to cons ider ? ∗ / j = t [ t [ i ] ] ;

wh i le ( j >>1 && ( t [ j ]>>1 | | i >>1) ) de l t a = d [ i > >1] [ j >>1] + d [ t [ i ] > >1] [ t [ j ] > >1]

− d [ i > >1] [ t [ i ] > >1] − d [ j > >1] [ t [ j ] > >1] ;noise = ( rando ( ) −0.5) ∗ cur ren t_no ise ;i f ( de l t a + noise < 0) /∗ Move accepted ∗ / nex t_ i = t [ i ] ; nex t_ j = t [ j ] ;

t [ i ] = j ^1 ; t [ nex t_ i ^1 ] = nex t_ j ;t [ j ] = i ^1 ; t [ nex t_ j ^1 ] = nex t_ i ;l eng th = leng th + de l t a ;

i = t [ i ] ; /∗ To avoid reve rs ing immediate ly a degrading move ∗ /j = t [ i ] ;

i f ( l eng th < ∗best_cost − eps i l on ) /∗ Memorize improved best s o l u t i o n ∗ / ∗best_cost = leng th ;

/∗ Rebui ld the s o l u t i o n under the form of the sequence of c i t i e s ∗ /r = 0 ;f o r ( s = 0 ; s < n ; s = s + 1) bes t_so l [ s ] = r >>1; r = t [ r ] ; p r i n t f ( " Nois ing method improvement %l d : %f \ n " , i t e r a t i o n , leng th ) ;

/∗ Move accepted ∗ /i t e r a t i o n ++;i f ( i t e r a t i o n % ( n∗n ) == 0) /∗ Noise decrease every n∗n i t e r . ∗ /

cu r ren t_no ise ∗= alpha ;j = t [ j ] ; /∗ Next j ∗ /

i = t [ i ] ; /∗ Next i ∗ /

/∗ whi le ( cur ren t_no ise > f i n a l _ n o i s e ) ∗ /f r ee ( t ) ;

6.6 GRASP

La méthode GRASP, dont le nom ne vient pas de l’anglais « empoigner »,mais qui est l’acronyme de Greedy Randomized Adaptive Search Procedure,soit une recherche gloutonne randomisée suivie d’une méthode d’amélioration.Cette méthode comporte deux paramètres, Imax, le nombre de répétitions dela boucle la plus externe de l’algorithme et α, permettant de régler le degré de

Page 156: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

154 MÉTHODES RANDOMISÉES

randomisation. La trame de la méthode est donnée par l’algorithme 6.6.

Algorithme 6.6 : Trame d’une méthode GRASP. Le programmeur doit au préa-lable concevoir une méthode a d’amélioration d’une solution et l’utilisateur doitfournir deux paramètres, Imax qui règle l’effort de calcul, et α qui règle le niveaude choix aléatoire. Les différence avec la trame de construction gloutonne 3.2 sontmises en évidence

Entrées : ensemble E d’éléments dont sont constituées les solutions duproblème ; fonction de coût incrémental c(s, e) ; fonction utilitéf à minimiser, paramètres Imax et 0 6 α 6 1, méthoded’amélioration a

Résultat : Solution complète s∗

1 f∗ ←∞;2 pour Imax itérations faire3 Initialiser s à une solution partielle triviale;4 R← E; // Éléments pouvant encore être ajoutés à s5 tant que R 6= ∅ faire6 Trouver cmin = mine∈R c(s, e) et cmax = maxe∈R c(s, e);7 Choisir aléatoirement, uniformément un e′ ∈ R tel que

cmin 6 c(s, e′) 6 cmin + α(cmax − cmin);8 s← s ∪ e′; // Ajouter e′ à la solution partielle s9 Retirer de R les éléments qui ne peuvent plus être utilisés pour

compléter s;

10 s′ ← a(s); // Trouver l’optimum local associé à s11 si f∗ > f(s′) alors12 f∗ ← f(s′);13 s∗ ← s′

Avec un paramètre α = 0, on a une construction purement gloutonne ;à moins que plusieurs éléments aient les mêmes coûts incrémentaux, la ré-pétition de constructions n’a pas de sens. Pour un paramètre α = 1, on aune construction purement aléatoire. La méthode se transforme en répétitionsd’une méthode d’amélioration partant de solutions aléatoires ; cette techniqueest souvent pratiquée car elle permet d’obtenir de bien meilleures solutionsqu’une recherche locale unique, avec un effort de codage négligeable.

Pour bénéficier des avantages de la méthode GRASP, il faut calibrer lavaleur de α. Elle donnera son plein potentiel généralement pour des valeursproches, mais différentes de 0. Il faut également noter que l’initialisation de lasolution partielle peut comporter une composante aléatoire, par exemple, pourle voyageur de commerce, on peut tirer aléatoirement la ville de départ et utili-ser une fonction de coût incrémental correspondant au critère du plus prochevoisin.

Page 157: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

6.7 MÉTHODE À VOISINAGE VARIABLE 155

Listing 6.3 – tsp_GRASP.c Implantation en C d’une méthode GRASP pour le problèmedu voyageur de commerce avec construction basée sur l’heuristique gloutonne duplus proche voisin randomisée. La procédure d’amélioration est basée sur les chaînesd’éjections (code 4.4)double tsp_GRASP( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance matr ix , must be symmetr ica l ∗ /i n t bes t_so l [ ] , /∗ Best tou r found ∗ /i n t i t e r a t i o n s , /∗ Number o f i t e r a t i o n s ∗ /double alpha ) /∗ Randomness i n greedy c ons t r u c t i on ∗ /

i n t ∗ s o l u t i o n ; /∗ Current s o l u t i o n ∗ /double best_cost = i n f i n i t e ; /∗ Length o f best s o l u t i o n found ∗ /i n t i , j ; /∗ I nd i ces ∗ /double leng th ; /∗ Cost o f cu r ren t s o l u t i o n ∗ /i n t n r _ i t e r a t i o n ;double cmin , cmax ;

s o l u t i o n = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;f o r ( n r _ i t e r a t i o n = 0; n r _ i t e r a t i o n < i t e r a t i o n s ; n r _ i t e r a t i o n ++) generate_random_permutation ( n , s o l u t i o n ) ;

f o r ( i = 0 ; i < n−1; i ++) /∗ s o l u t i o n [ i ] i s the l a s t c i t y i nse r t ed ∗ / /∗ Determine min and max incrementa l costs ∗ /

cmin = i n f i n i t e ; cmax = − i n f i n i t e ;f o r ( j = i +1; j < n ; j ++)

i f ( cmin > d [ s o l u t i o n [ i ] ] [ s o l u t i o n [ j ] ] )cmin = d [ s o l u t i o n [ i ] ] [ s o l u t i o n [ j ] ] ;

i f ( cmax < d [ s o l u t i o n [ i ] ] [ s o l u t i o n [ j ] ] )cmax = d [ s o l u t i o n [ i ] ] [ s o l u t i o n [ j ] ] ;

/∗ Find the next c i t y to i n s e r t , biased on lower cost ∗ /f o r ( j = i +1; d [ s o l u t i o n [ i ] ] [ s o l u t i o n [ j ] ] > cmin + alpha ∗(cmax−cmin ) ; j ++) /∗ C i t i e s to i n s e r t a l ready i n random order ; f i r s t choice i s random ∗ /swap(& s o l u t i o n [ i +1 ] , &s o l u t i o n [ j ] ) ;

/∗ s o l u t i o n i s complete now ∗ /

l eng th = tsp_ leng th ( n , d , s o l u t i o n ) ;tsp_LK ( n , d , so lu t i on , &leng th ) ;

i f ( l eng th < best_cost − eps i l on ) /∗ Store improved best s o l u t i o n ∗ / f o r ( i = 0 ; i < n ; i ++)

bes t_so l [ i ] = s o l u t i o n [ i ] ;best_cost = leng th ;p r i n t f ( "GRASP %d %f \ n " , n r _ i t e r a t i o n , leng th ) ;

f r ee ( s o l u t i o n ) ;r e t u r n best_cost ;

/∗ tsp_GRASP ∗ /

6.7 Méthode à voisinage variable

La méthode à voisinage variable met en œuvre une stratégie de recher-che appelée parfois oscillations stratégiques qui consiste à alterner des phased’intensification et de diversification de la recherche. L’idée à la base de cetteméthode est de s’appuyer sur plusieurs voisinages M1 . . .Mp. Le voisinageM1 est utilisé de façon standard pour trouver des optima locaux ; il s’agit d’unedes manière les plus simple d’intensifier la recherche. Les autres voisinagespermettent de s’échapper de ces optima en effectuant des mouvements aléa-toires qui, généralement, détruisent de plus en plus leur structure. Le tiragede mouvement aléatoires est également une des manière les plus simples dediversifier la recherche, pour explorer d’autres portions de l’espace des solu-tions. La trame d’une méthode à voisinage variable de base est donnée parl’algorithme 6.7.

Page 158: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

156 MÉTHODES RANDOMISÉES

Algorithme 6.7 : Méthode à voisinage variable. Lorsque l’on dispose d’un faiblenombre p de voisinage, on répète plusieurs fois l’algorithme.

Entrées : Solution s, fonction-utilité f à minimiser, structures devoisinage M1 . . .Mp

Résultat : s∗

1 s∗ ← s;2 k ← 1;3 tant que k 6 p faire4 Tirer un mouvement aléatoire m ∈Mk;5 s← s⊕m;6 Trouver l’optimum local s′ associé à s dans le voisinage M1;7 si f(s′) < f(s∗) alors8 s∗ ← s′;9 k ← 1

10 sinon11 s← s∗;12 k ← k + 1

Listing 6.4 – tsp_VNS.c Implantation d’une méthode à voisinage variable pour le pro-blème du voyageur de commerce. Le voisinage Mk consiste à échanger deux villes kfois. La méthode permettant de réparer une solution perturbée est une chaîne d’éjec-tions. La particularité de cette implantation, outre son extrême simplicité, est de necomporter aucun paramètre.vo id tsp_VNS ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance matr ix , must be symmetr ica l ∗ /i n t bes t_so l [ ] , /∗ InOut So lu t i on provided and re turned ∗ /double ∗best_cost ) /∗ InOut Length o f the best t ou r ∗ /

i n t ∗ s o l u t i o n ; /∗ Current s o l u t i o n ∗ /i n t i , k ; /∗ I nd i ces ∗ /double leng th ; /∗ Current s o l u t i o n cost ∗ /i n t i t e r a t i o n = 0; /∗ Number o f 2−opt c a l l s ∗ /

s o l u t i o n = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;k = 1 ;wh i le ( k < n ) f o r ( i = 0 ; i < n ; i ++)

s o l u t i o n [ i ] = bes t_so l [ i ] ;f o r ( i = 0 ; i < k ; i ++)

swap(& s o l u t i o n [ u n i f (0 , n−1)] , &s o l u t i o n [ u n i f (0 , n−1) ] ) ;

l eng th = tsp_ leng th ( n , d , s o l u t i o n ) ;tsp_LK ( n , d , so lu t i on , &leng th ) ;i t e r a t i o n ++;i f ( l eng th < ∗best_cost − eps i l on ) /∗ Store improved best s o l u t i o n ∗ / f o r ( i = 0 ; i < n ; i ++)

bes t_so l [ i ] = s o l u t i o n [ i ] ;∗best_cost = leng th ;p r i n t f ( "VNS %d %d %f \ n " , i t e r a t i o n , k , leng th ) ;k = 1 ;

e lse

k++;f r ee ( s o l u t i o n ) ;

/∗ tsp_VNS ∗ /

Page 159: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

6.7 MÉTHODE À VOISINAGE VARIABLE 157

Exercice 6.1. Durée d’un recuit Combien d’itération va effectuer un recuitsimulé partant avec une température initiale T0 et finale Tf si le facteur dedécroissance choisi est α ?

Exercice 6.2. Détail d’implantation du recuit Dans l’algorithme 6.1, lors-qu’un mouvement [i, j] est retenu, on avance les deux indices avec les instruc-tions i = t[i]; et j = t[i];, alors que dans l’algorithme 4.3, on se contented’avancer uniquement l’indice j. Expliquer la raison de ce traitement différen-cié.

Page 160: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

158 MÉTHODES RANDOMISÉES

Page 161: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Chapitre 7

Apprendre à construire

Après les quatre principes de base vus précédemment — modélisation,décomposition, construction et amélioration — nous abordons dans ce cha-pitre le cinquième principe : celui de l’apprentissage. Les algorithmes vus dansle chapitre précédent se basent uniquement sur le hasard pour tenter d’ob-tenir des solutions meilleures que celles que pourraient fournir des méthodesconstructives gloutonnes ou des recherches locales. Ceci n’est sans doute pastrès satisfaisant du point de vue intellectuel, bien que, comme dit l’adage, « lehasard fait bien les choses ». Sans y renoncer totalement, nous examineronsdans ce chapitre comment mettre en œuvre des techniques d’apprentissagepour construire de nouvelles solutions.

En examinant le processus d’apprentissage, on se rend compte que troisingrédients sont nécessaires :

— Répéter des expériences et analyser les succès (ou les échecs, car onapprend peut-être plus en faisant des erreurs !)

— Mémoriser ce qui a été fait.

— Oublier certains détails, ce qui donne la faculté de généraliser lorsquel’on se trouve dans une situation similaire mais différente.

La technique des fourmis artificielles permet de mettre en œuvre très sim-plement ces ingrédients d’apprentissage pour construire de nouvelles solu-tions.

7.1 Fourmis artificielles

Le comportement social de certains animaux a toujours fasciné, en parti-culier lorsqu’une population arrive à des réalisations complètement hors de laportée d’un individu isolé. C’est le cas des abeilles, des thermites ou des four-mis : bien que chaque individu ait un comportement extrêmement simple, unecolonie arrive à construire des nid complexes et à s’approvisionner efficace-ment.

Page 162: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

160 APPRENDRE À CONSTRUIRE

(a) Situation initiale (b) Situation finale

FIGURE 7.1 – Comportement d’une colonie de fourmi séparée d’une source de nour-riture par un parcours qui bifurque. Initialement les fourmis se répartissent égalementdans les deux branches 7.1(a). Les fourmis ayant emprunté le chemin le plus courtvont arriver avant à la source de nourriture et vont donc déposer plus rapidement unequantité additionnelle de phéromones sur le chemin du retour. La quantité de phéro-mones déposée sur le plus court chemin croît plus rapidement. Après un certain temps,pratiquement toutes les fourmis vont utiliser la branche la plus courte 7.1(b)

Page 163: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

7.1 FOURMIS ARTIFICIELLES 161

7.1.1 Observations avec des fourmis réelles

Suite aux travaux de [?] qui ont décrit le comportement presque algorith-miques des fourmis, des chercheurs ont eu l’idée de simuler ce comportementpour tenter de résoudre des problèmes difficiles. Le principe de fonctionnementd’une fourmi est illustré en figure 7.1 par une expérience faite avec une colonieréelle qui a été isolée. Cette dernière ne peut s’approvisionner en nourritureque par un unique orifice ouvert sur un conduit se séparant en deux branchesse rejoignant plus loin. La branche de gauche est plus courte que celle dedroite. Comme les fourmis n’ont initialement aucune information sur ce fait, leséclaireurs vont se répartir également dans les deux branches 7.1(a). Tout enexplorant, chaque fourmi dépose une trace chimique qu’elle est capable de dé-tecter avec ses antennes, ce qui l’aidera lors de son retour dans la fourmilière.Une telle substance chimique porteuse d’information est appelée phéromone.

Une fourmi ayant découvert une source de nourriture va déposer une quan-tité d’autant plus grande de phéromones sur le chemin du retour que la sourceest importante. Naturellement, une fourmi ayant découvert un chemin courtva pouvoir retourner plus rapidement que celle qui a emprunté la mauvaisebranche. Par conséquent, la quantité de phéromones déposées sur le pluscourt chemin croît plus rapidement. Le corollaire est qu’une nouvelle fourmidisposera d’une information sur le chemin à prendre et biaisera son choixen faveur de la branche la plus courte. Après un certain temps, on observeque pratiquement toutes les fourmis utilisent la branche la plus courte 7.1(b).Ainsi, la colonie arrive à déterminer collectivement un chemin optimal, alorsque chaque individu ne voit pas plus loin que le bout de ses antennes.

7.1.2 Transcription en processus d’optimisation

Si une colonie de fourmis arrive à optimiser la longueur d’un chemin, mêmedans un contexte dynamique, on devrait pouvoir transcrire le comportement dechaque individu en un processus simple pour l’optimisation de problèmes plusdifficiles. Cette transcription peut s’effectuer ainsi :

— Une fourmi sera un processus exécutant une procédure de constructiond’une solution, dotée d’une composante aléatoire. Plusieurs de ces pro-cessus pourront s’exécuter en parallèle.

— Les traces de phéromones seront des valeurs τe qui seront associées àchaque élément e pouvant constituer une solution.

— Les traces jouent le rôle d’une mémoire collective. Après la constructiond’une solution, les valeurs des éléments constituant cette dernière serontaugmentées d’une quantité d’autant plus grande que la solution est debonne qualité.

— Le phénomène d’oubli sera simulé par l’évaporation des traces au coursdu temps.

Reste ensuite à préciser comment toutes ces composantes peuvent êtremises en place. Le processus de construction va utiliser une technique deconstruction randomisée, presque similaire à la méthode GRASP, si ce n’estque la composante aléatoire doit être biaisée non seulement par la fonctionce coût incrémental c(s, e), qui représente l’intérêt a priori d’inclure l’élément

Page 164: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

162 APPRENDRE À CONSTRUIRE

e dans la solution partielle, mais également par la valeur τe qui sera l’intérêta posteriori de cet élément, intérêt qui ne sera connu qu’après avoir construitune multitude de solutions. Le mariage de ces deux formes d’intérêts se réa-lise en choisissant le prochain élément e à inclure dans la solution partielle savec une probabilité proportionnelle à ταe · c(s, e)β , ou α > 0 et β < 0 sont deuxparamètres de la méthode permettant de balancer l’importance que l’on donnerespectivement à la mémoire et au coût incrémental.

La mise à jour des phéromones artificielles se fait en deux étapes, néces-sitant chacune un paramètre. Tout d’abord, on simule l’évaporation des phéro-mones en multipliant toutes les valeurs τe par 1 − ρ, où 0 6 ρ 6 1 représentele taux d’évaporation. Ensuite, chaque élément e constituant une solution s ve-nant d’être construite verra sa valeur τe renforcée d’une quantité 1/f(s), oùf(s) est la valeur de la solution, que l’on suppose supérieure à 0.

7.1.3 Système de fourmi MAX-MIN

Les premières applications de colonies de fourmis artificielles ne compor-taient que les composantes décrites plus haut. Il a été observé que la rétro-action positive engendrée par la mise à jour des traces de phéromones artifi-cielles était difficile à contrôler à l’aide des trois paramètres α, β et ρ. En effet,le point de basculement entre un processus presque aléatoire dépourvu d’ap-prentissage et un processus qui apprend trop rapidement à répéter la construc-tion d’une même solution est difficile à trouver.

Pour y remédier, [?] ont suggéré de limiter les valeurs des traces entre deuxbornes τmin et τmax, de sorte à conserver une probabilité minimale de choisirn’importe quel élément à ajouter à chaque solution, tout en évitant que certainséléments voient leur valeur grandir tellement qu’il ne deviendrait plus possiblede construire une solution sans eux.

On aboutit ainsi à la trame présentée plus loin, qui s’est révélée beau-coup plus efficace que de nombreuses autres trames proposées antérieure-ment. Cette trame comporte une méthode d’amélioration. En effet, les implan-tations de colonies de fourmis artificielles « pures » basées uniquement surla construction de solutions se sont révélées peu performantes et difficiles àmettre au point. Il peut exister des exceptions, notamment pour le traitementde problèmes hautement dynamiques où une situation d’optimalité à un instantne l’est plus à un autre.

L’algorithme 7.1 présente un avantage théorique : il peut être montré quesi le nombre d’itérations Imax → ∞ et si τmin > 0, alors il va trouver unesolution globalement optimale au problème avec une probabilité tendant vers1. La démonstration repose sur le fait que τmin > 0 implique que la probabilitéde construire une solution globalement optimale n’est pas nulle. En pratiquecependant, un tel résultat théorique n’est pas d’une grande utilité.

7.1.4 Système de fourmis rapide

Un des défauts de nombreuses trames de méthodes basées sur des four-mis artificielles est leur grand nombre de paramètres et la difficulté de leursajustements. C’est la raison pour laquelle nous n’avons notamment pas pré-senté ici Ant System (AS [?]) ou Ant Colony System (ACO [?]). De plus, il

Page 165: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

7.1 FOURMIS ARTIFICIELLES 163

Algorithme 7.1 : Trame de MAX-MIN ant system.

Entrées : ensemble E d’éléments dont sont constituées les solutions duproblème ; fonction de coût incrémental c(s, e) > 0 ; fonctionutilité f à minimiser, paramètres Imax,m, α, β, τmin, τmax, ρ etméthode d’amélioration a(·)

Résultat : Solution complète s∗

1 f∗ ←∞;2 pour ∀e ∈ E faire3 τe ← τmax

4 pour Imax itérations faire5 pour k = 1 . . .m faire6 Initialiser s à une solution partielle triviale;7 R← E; // Éléments pouvant encore être ajoutés à s8 tant que R 6= ∅ faire9 Choisir aléatoirement e ∈ R avec probabilité proportionnelle à

ταe · c(s, e)β ; // Formule des colonies de fourmis10 s← s ∪ e;11 Retirer de R les éléments qui ne peuvent plus être utilisés

pour compléter s;

12 sk ← a(s); // Trouver l’optimum local sk associé à s13 si f∗ > f(sk) alors14 f∗ ← f(sk);15 s∗ ← sk; // Mettre à jour la meilleure solution connue

16 pour ∀e ∈ E faire17 τe ← (1− ρ) · τe; // Évaporation des traces de phéromones

18 sb ← meilleure des solutions de s1, . . . , sm;19 pour ∀e ∈ sb faire20 τe ← τe + 1/f(sb); // Renforcement des traces

peut être délicat pour certains problèmes de concevoir une fonction de coûtincrémental donnant l’intérêt a priori d’insérer un élément dans une solutionpartielle.

C’est pourquoi une trame simplifiée appelée FANT (pour Fast ANT system)a été proposée. En plus du nombre d’itérations Imax, cette trame ne comportequ’un paramètre, τb, que l’utilisateur doit spécifier. Ce paramètre correspondau renforcement des traces de phéromones artificielles qui est appliqué systé-matiquement à chaque itération sur les éléments de la meilleure solution trou-vée jusque là. Le renforcement des traces associé aux éléments de la solutionconstruite à l’itération courante, τc, est un paramètre auto-adaptatif. Initiale-ment, ce paramètre vaut 1.

Lorsque l’on se rend compte que l’on a trop appris parce que l’on a gé-néré une nouvelle fois la meilleure solution, τc est incrémenté pour augmenterla diversité des solutions générées et toutes les traces sont réinitialisées à lavaleur de τc. Si l’on a amélioré la meilleure solution, alors τc est réinitialisé à1 pour donner plus de poids aux éléments constituant cette solution amélio-

Page 166: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

164 APPRENDRE À CONSTRUIRE

0 100 200 300 400 500 600 700 8000

25

50

75

100

125

150

175

200

225

Avant optimisation

Après optimisation

Amélioration

Itérations

Nom

bre

d'a r

êtes

diff

éren

tes

FIGURE 7.2 – Comportement de FANT sur un problème de voyageur de commerce à225 villes. Ce diagramme donne, en fonction du nombre de solutions construites parla méthode, le nombre d’arêtes qui diffèrent de la meilleure solution trouvée jusque là,juste après la construction au moyen des traces de phéromones artificielles et aprèsamélioration à l’aide de la technique de chaînes d’éjections. Les lignes verticales in-diquent les améliorations de la meilleure solution trouvées. Dans cette expérience, ladernière de ces améliorations correspond à la solution optimale.

rée. Finalement, FANT incorpore une méthode d’amélioration locales sur lessolutions construites au moyen des traces. Il a en effet été remarqué, pour denombreuses variantes de méthodes basées sur les colonies de fourmis, quela qualité des solutions produites avec le seul mécanisme d’apprentissage deconstruction de solutions était très souvent médiocre. L’algorithme 7.2 donnela trame de FANT.

La figure 7.2 illustre le comportement de FANT sur un problème de voya-geur de commerce à 225 villes. Dans cette expérimentation, la valeur de τb aété fixée à 50. Cette figure donne le nombre d’arêtes différentes de la meilleuresolution trouvée jusque là, avant et après optimisation locale.

L’implantation de FANT pour le problème du voyageur de commerce néces-site de recourir à une matrice τ plutôt qu’à un vecteur. En effet, un élément ed’une solution est une arête [i, j], définie par ses deux sommets adjacents. Lavaleur τij sera donc l’intérêt a posteriori de construire une solution avec l’arête[i, j]. L’initialisation de cette matrice de trace et sa mise à jour pourra donc êtreimplantée au moyen des procédures décrite dans le code 7.1.

Le cœur d’une heuristique basée sur une colonie de fourmis artificiellesest la construction d’une nouvelle solution en exploitant les traces de phéro-mones. Une procédure d’exploitation ne faisant pas intervenir l’intérêt a prioride chaque élément de la solution est donnée par le code 7.2. Dans cette im-plantation, la ville de départ est choisie aléatoirement en tirant une permutation

Page 167: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

7.1 FOURMIS ARTIFICIELLES 165

Algorithme 7.2 : Trame de FANT. Bien que pouvant paraître complexe, la plusgrande partie de cette trame consiste à adapter automatiquement le poids res-pectif τc que l’on donne à la solution nouvellement construite en regard du poidsτb associé à la meilleure solution construite et à réinitialiser les traces si l’on a tropappris ou si on vient d’améliorer la meilleure solution connue.

Entrées : ensemble E d’éléments dont sont constituées les solutions duproblème ; fonction utilité f à minimiser, paramètres Imax, τb etméthode d’amélioration a(·)

Résultat : Solution complète s∗

1 f∗ ←∞;2 τc ← 1;3 pour ∀e ∈ E faire4 τe ← τc

5 pour Imax itérations faire6 Initialiser s à une solution partielle triviale;7 R← E; // Éléments pouvant encore être ajoutés à s8 tant que R 6= ∅ faire9 Choisir aléatoirement e ∈ R avec probabilité proportionnelle à τe;

10 s← s ∪ e;11 Retirer de R les éléments incompatibles pour compléter s;

12 s′ ← a(s); // Trouver l’optimum local s′ associé à s13 si s′ = s∗ alors14 τc ← τc + 1; // Donner plus de poids aux solutions construites15 pour ∀e ∈ E faire16 τe ← τc; // Effacer toutes les traces

17 si f∗ > f(sk) alors18 f∗ ← f(sk);19 s∗ ← sk; // Mettre à jour la meilleure solution connue20 τc ← 1; // Donner moins de poids aux solutions construites21 pour ∀e ∈ E faire22 τe ← τc; // Effacer toutes les traces

23 pour ∀e ∈ s′ faire24 τe ← τe + τc; // Renforcement des traces de la solution courante

25 pour ∀e ∈ s∗ faire26 τe ← τe + τb; // Renforcement des traces de la meilleure solution

Page 168: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

166 APPRENDRE À CONSTRUIRE

p aléatoire. À l’itération i de la construction, les i premiers éléments de p ontété choisis de façon définitive. On tire ensuite l’élément suivant avec une pro-babilité proportionnelle aux valeurs des traces pour les éléments restants.

Listing 7.1 – init_update_trail.c Implantation de l’initialisation de la matrice des traceset de sa mise à jour dans la méthode FANT pour un problème d’optimisation où l’onrecherche une permutation. Si l’on remarque que l’on vient de générer une nouvelle foisla meilleure solution connue, on réinitialise toutes les traces. Autrement, on renforce àla fois les traces de la solution courante et de la meilleure solution trouvée.vo id i n i t _ t r a i l ( i n t n , /∗ Problem s ize ∗ /

i n t increment , /∗ Reinforcement o f l o c a l s o l u t i o n ∗ /i n t ∗ t r a i l [ ] ) /∗ Pheromone t r a i l s ∗ /

i n t i , j ;f o r ( i = 0 ; i < n ; i ++)

f o r ( j = 0 ; j < n ; j ++)t r a i l [ i ] [ j ] = increment ;

f o r ( i = 0 ; i < n ; i ++)t r a i l [ i ] [ i ] = 0 ;

vo id u p d a t e _ t r a i l ( i n t n , /∗ Problem s ize ∗ /const i n t p [ ] , /∗ Local s o l u t i o n ∗ /const i n t best_p [ ] , /∗ Global best s o l u t i o n ∗ /i n t ∗ increment , /∗ Reinforcement o f l o c a l s o l u t i o n ∗ /i n t R, /∗ Reinforcement o f g loba l best s o l u t i o n ∗ /i n t ∗ t r a i l [ ] )

i n t i = 0 ;wh i le ( i < n && p [ i ] == best_p [ i ] ) i ++;

i f ( i == n ) /∗ New s o l u t i o n p same as best s o l u t i o n found ∗ /

(∗ increment )++ ;i n i t _ t r a i l ( n , ∗ increment , t r a i l ) ;

e lse

f o r ( i = 0 ; i < n ; i ++) t r a i l [ p [ i ] ] [ p [ ( i +1)%n ] ] += ∗ increment ;

t r a i l [ best_p [ i ] ] [ best_p [ ( i +1)%n ] ] += R;

Une fois que les trois procédures données dans les codes 7.1 et 7.2 ainsiqu’une procédure de recherche locale sont disponibles, l’implantation de FANTest très simple. Une telle implantation faisant usage d’une recherche localebasée sur des chaînes d’éjection est donnée par le code 7.3

Page 169: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

7.1 FOURMIS ARTIFICIELLES 167

Listing 7.2 – generate_solution_trail Implantation de la génération d’une permutationen n’exploitant que les informations contenues dans les traces de phéromones artifi-cielles.double g e n e r a t e _ s o l u t i o n _ t r a i l ( i n t n ,

double ∗∗d , /∗ Distance mat r i x ∗ /i n t p [ ] , /∗ So lu t i on generated ∗ /i n t ∗ const t r a i l [ ] )

i n t i , j , /∗ I nd i ces ∗ /

t a rge t , sum; /∗ For a r o u l e t t e wheel s e l e c t i o n o f next element ∗ /generate_random_permutation ( n , p ) ;f o r ( i = 1 ; i < n−1; i ++) sum = 0;

f o r ( j = i + 1 ; j < n ; j ++)sum += t r a i l [ p [ i −1] ] [ p [ j ] ] ;

t a r g e t = u n i f (0 , sum−1);f o r ( j = i , sum = t r a i l [ p [ i −1] ] [ p [ j ] ] ; sum < t a r g e t ; j ++)

sum += t r a i l [ p [ i −1] ] [ p [ j + 1 ] ] ;swap(&p [ j ] , &p [ i ] ) ;

r e t u r n tsp_ leng th ( n , d , p ) ;

Listing 7.3 – tsp_FANT Implantation de la méthode FANT pour le problème du voya-geur de commerce. La recherche locale utilisée est celle donnée dans le code 4.4double tsp_FANT ( i n t n , /∗ Number o f c i t i e s ∗ /

double∗∗ d , /∗ Distance mat r i x ∗ /i n t bes t_so l [ ] , /∗ Out So lu t i on re turned ∗ /i n t R, /∗ FANT Parameters ∗ /i n t i t e r a t i o n s ) /∗ Number o f s o l u t i o n s generated ∗ /

i n t i , j , n r _ i t e r a t i o n , /∗ I nd i ces ∗ /increment = 1 ; /∗ Reinforcement o f elements o f the s o l u t i o n generated ∗ /

double cost ; /∗ Cost o f s o l u t i o n generated by the ant ∗ /double best_cost = i n f i n i t e ; /∗ Length o f the best t ou r ∗ /i n t ∗ p ; /∗ So lu t i on generated by an ant process ∗ /i n t ∗∗ t r a i l ; /∗ Pheromone t r a i l mat r i x ∗ /

p = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;t r a i l = ( i n t ∗∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ∗ ) ) ;f o r ( i = 0 ; i < n ; i ++)

t r a i l [ i ] = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;

i n i t _ t r a i l ( n , increment , t r a i l ) ;

/∗ FANT i t e r a t i o n s ∗ /f o r ( n r _ i t e r a t i o n = 0; n r _ i t e r a t i o n < i t e r a t i o n s ; n r _ i t e r a t i o n ++) /∗ Bu i ld a new s o l u t i o n ∗ /

cost = g e n e r a t e _ s o l u t i o n _ t r a i l ( n , d , p , t r a i l ) ;/∗ Improve s o l u t i o n w i th a l o c a l search ∗ /tsp_LK ( n , d , p , &cost ) ;

/∗ Best s o l u t i o n improved ? ∗ /i f ( cost < best_cost − eps i l on ) best_cost = cost ;

p r i n t f ( "FANT %d %f \ n " , n r _ i t e r a t i o n , cost ) ;f o r ( j = 0 ; j < n ; j ++) bes t_so l [ j ] = p [ j ] ;increment = 1 ;i n i t _ t r a i l ( n , increment , t r a i l ) ;

e lse

/∗ Memory update ∗ /u p d a t e _ t r a i l ( n , p , best_sol , &increment , R, t r a i l ) ;

;

f r ee ( p ) ;f o r ( i = 0 ; i < n ; i ++)

f r ee ( t r a i l [ i ] ) ;f r ee ( t r a i l ) ;r e t u r n best_cost ;

/∗ tsp_FANT ∗ /

Page 170: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

168 APPRENDRE À CONSTRUIRE

(a) Une excellente solution (b) Tournées rapidement obtenues

FIGURE 7.3 – Une très bonne solution à un problème d’élaboration de tournées devéhicules 7.3(a) et quelques tournées obtenues rapidement à l’aide de recherches avectabou sommaires 7.3(b). On remarque une grande similitudes entre ces dernières etcelles de la bonne solution.

7.2 Construction de vocabulaire

La construction de vocabulaire est une méthode d’apprentissage plus glo-bale que le sont à la base les colonies de fourmis artificielles. L’idée consisteà mémoriser des parties de solutions, qui sont appelées des mots, et de cons-truire de nouvelles solutions à partir de ces parties. En d’autre terme, on sedote d’un dictionnaire qui sera utilisé pour construire, de façon randomisée, unetentative de phrase. Cette tentative de solution est améliorée à l’aide d’une pro-cédure ad-hoc pour la rendre réalisable et en accroître la qualité. Finalementcette nouvelle solution-phrase est décomposée en de nouveaux mots qui vontenrichir le dictionnaire.

Cette méthode a été proposée par F. Glover et n’est encore pas très utili-sée en pratique, bien qu’elle se soit révélée efficace pour un certain nombre deproblèmes. Parmi ceux-ci, l’élaboration de tournées de véhicules se prête na-turellement à son utilisation. En effet, il est relativement aisé de construire dessolutions comportant des tournées similaires à celles des meilleures solutionsconnues. Ceci est illustré en figure 7.3.

En construisant de nombreuses solutions à l’aide de méthodes randomi-sées —sans apprentissage— on peut se doter d’un premier dictionnaire deportions de solution. Ceci est illustré en figure 7.4.

Une fois un premier dictionnaire constitué, on construit une tentative de so-lution, par exemple en sélectionnant un sous-ensemble de tournées ne com-portant pas de clients communs. Cette solution n’est pas forcément réalisable,car il se peut fort bien que, durant le processus de construction, le dictionnairene comporte pas de tournées regroupant certains clients non encore couverts.Il est donc nécessaire de réparer cette tentative de solution, par exemple aumoyen de la même méthode que celle utilisée pour créer le premier diction-naire, mais démarrant avec la tentative de solution. Cette phase de la méthode

Page 171: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

7.2 CONSTRUCTION DE VOCABULAIRE 169

est illustrée en figure 7.5. La solution améliorée est susceptible de contenirdes tournées qui ne figurent pas encore dans le dictionnaire. Celles-ci y serontincorporées et l’enrichiront pour des itérations ultérieures.

FIGURE 7.4 – Fragments de solutions (tournées) constituant le dictionnaire. On construitune solution partielle en sélectionnant, de façon randomisée, un certain nombre de cesfragments (indiqués en couleur).

La technique peut être adaptée à d’autres problèmes, comme par exemplecelui du voyageur de commerce. Les mots du dictionnaire dans ce cas peu-vent être constitués d’ensemble de villes connectées par un chemin. Dans lafigure 7.6, on a représenté toutes les arêtes présentes dans plus de deux tiersdes 100 tournées obtenues en appliquant une méthode d’amélioration baséesur un voisinage de chaînes d’éjections démarrant avec une solution aléatoire.

La solution optimale de ce problème étant connue, il a été possible demettre en évidence la quinzaine d’arêtes fréquemment obtenues qui ne fontpas partie de la solution optimale. Il est intéressant de remarquer que prèsdes 80% des arêtes de la solution optimale ont été identifiées en initialisant ledictionnaire avec une simple méthode d’amélioration.

Page 172: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

170 APPRENDRE À CONSTRUIRE

(a) Tentative de solution (b) Solution complétée et améliorée

FIGURE 7.5 – Une tentative de phrase est construite en choisissant de façon randomi-sée des mots du dictionnaire 7.5(a). Cette tentative est complétée et améliorée 7.5(b).

Exercices

Exercice 7.1. Colonie de fourmis pour l’arbre de Steiner Pour le problèmede l’arbre de Steiner, comment définir les traces d’une colonie de fourmis arti-ficielles ? Décrire comment ces traces sont exploitées.

Exercice 7.2. Ajustement du paramètre de FANT Trouver de bonnes valeurspour le paramètre R de la méthode tsp_FANT donnée par le code 7.3 lorsquecette dernière effectue 300 itérations.

Page 173: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

7.2 CONSTRUCTION DE VOCABULAIRE 171

FIGURE 7.6 – Fragments de solutions (chaînes) constituant un dictionnaire initial pourun exemple de problème de voyageur de commerce. Les chaînes sont obtenues enitérant 100 recherches locales sur des solutions aléatoires et en ne conservant queles arêtes apparaissant dans plus des 2/3 des optima locaux. Il est intéressant de re-marquer la grande similarité entre ces fragments et la solution optimale donnée enfigure 4.6.

Page 174: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

172 APPRENDRE À CONSTRUIRE

Page 175: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Chapitre 8

Apprendre à modifier

Les recherches locales jouent un rôle central dans les méta-heuristiques.Pratiquement toutes les méthodes heuristiques efficaces incorporent ces tech-niques. Du reste, les méta-heuristiques sont parfois définies comme un pro-cessus maître guidant une recherche locale.

Dans le chapitre 4, nous avons déjà vu quelques techniques d’adaptationd’un voisinage de base, en particulier sa limitation au moyen de liste de mou-vements candidats ou la recherche granulaire et son extension par une re-cherche en éventail ou une chaîne d’éjections. Le chapitre 6 consacré auxméthodes randomisées présente de nombreuses extensions de recherches lo-cales n’utilisant aucun processus d’apprentissage, si ce n’est la mémorisationde la meilleure solution trouvée ou un auto-calibrage des paramètres pour tenircompte de l’unité de mesure de la fonction-objectif.

Le pas suivant dans la sophistication des méta-heuristiques est d’apprendreà modifier localement des solutions d’un problème. Parmi les techniques po-pulaires, la recherche avec tabous propose de nombreuses stratégies et enparticulier des méthodes d’apprentissage pour une recherche locale.

8.1 Recherche avec tabous

Proposée par Fred Glover en 1986, l’idée de base de la recherche avectabous est de poursuivre une recherche locale au-delà d’un optimum local touten incorporant un mécanisme pour éviter le phénomène de cyclage, soit le faitde visiter cycliquement un sous-ensemble restreint de solutions. Le concept leplus simple à imaginer est de mémoriser les solutions qui ont été successive-ment rencontrées durant une recherche locale utilisant la politique du meilleurvoisin mais d’interdire à cette dernière de choisir une solution voisine qui auraitdéjà été énumérée. Les solutions visitées deviennent donc taboues.

Ce concept est simple, mais peu commode à mettre en œuvre : il faut ima-giner qu’une recherche locale peut nécessiter des millions d’itérations, ce quisignifie de mémoriser autant de solutions. Pour chaque solution voisine, il fautvérifier qu’elle n’a pas été déjà visitée. Sachant qu’un voisinage peut contenirdes milliers de solutions, on se rend rapidement compte que cette voie devientimpraticable, que ce soit en raison de la place mémoire nécessaire à stocker

Page 176: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

174 APPRENDRE À MODIFIER

les solutions visitées ou de l’effort de calcul pour les comparer aux solutionsvoisines.

8.1.1 Table de hachage

Pour mettre en œuvre une approximation de ce principe d’interdiction de so-lutions déjà visitées, une technique simple est d’utiliser une table de hachage.On associe à chaque solution du problème s une valeur entière h(s). Si on vi-site la solution si à l’itération i de la recherche, on mémorisera dans un tableauT de m éléments la valeur i dans son entrée h(si) mod m. Ainsi, la valeur tkde l’entrée k du tableau T indique à quelle itération une solution dont la valeurde hachage (modulo m) a été visitée.

La fonction h n’est généralement pas bijective sur l’ensemble des solutionsdu problème, ce qui fait que plusieurs solutions différentes peuvent avoir lamême valeur de hachage et la taille m du tableau T doit être limitée en rai-son de la mémoire disponible. Cette technique est donc une approximation duconcept d’interdiction de solutions déjà visitées. En effet, non seulement cesdernières sont interdites, mais également toutes celles qui ont les mêmes va-leurs de hachage.

De plus, comme la valeur de m est limitée, on ne peut interdire ad æter-nam de revenir à une solution de valeur de hachage donnée, car, après mitération au plus tard, toutes les solutions seraient interdites. Il faut donc mettreen œuvre une caractéristique-clé du processus d’apprentissage : l’oubli. Cesconsidérations amènent donc à introduire le principal paramètre d’une recher-che avec tabous : la durée des interdiction, parfois appelé longueur de la listede tabous.

Fonctions de hachage

Le choix d’une fonction de hachage pour implanter une recherche avec ta-bous n’est pas très difficile. Dans certains cas, la valeur de la fonction-objectifconvient parfaitement, notamment lorsque le voisinage comporte de nombreuxmouvements à coût nul. En effet, les modifications neutres rendent l’appren-tissage difficile, dans la mesure où l’on choisit à chaque itération le meilleurmouvement autorisé du voisinage. Si l’on se trouve sur un plateau, c’est-à-direun optimum local avec de nombreux voisins de même coût, le choix de l’un oul’autre est difficile et on risque de tourner en rond. Dans le cas où la fonction-objectif prend un large éventail de valeurs, interdire pendant un certain nombred’itérations de revenir à une valeur donnée permet dans bien des cas de casserla structure d’un optimum local et d’en découvrir un autre.

Une fonction de hachage générale est la suivante : en considérant qu’unesolution est composée d’éléments e ∈ E, pour reprendre la notation introduitedans le chapitre 3 sur les méthodes constructives, on peut associer à tous leséléments e des valeurs entières ze. Ces valeurs sont générées aléatoirementau début de l’algorithme. La valeur de hachage d’une solution s est donnée parh(s) =

∑e∈s ze.

Une technique de hachage plus sophistiquée, utilisant de multiples tables,est discutée dans [?]. Elle permet d’obtenir l’équivalent d’une table très grande,tout en limitant l’espace-mémoire.

Page 177: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

8.1 RECHERCHE AVEC TABOUS 175

8.1.2 Interdictions sur les mouvements

L’utilisation d’interdictions basées sur un fonction de hachage calculée surles solutions visitées n’est de loin pas la plus courante dans les implantationsde recherches avec tabous. Il est beaucoup plus fréquent d’interdire certainsmouvements. Cette interdiction peut être indirecte : un mouvement pourra êtreconsidéré comme tabou s’il mène à une solution présentant certaines caracté-ristiques.

Pour être concret, prenons l’exemple du voyageur de commerce symé-trique. Un mouvement 2-opt peut être caractérisé par le couple [i, j] qui con-siste à remplacer les arêtes [i, si] et [j, sj ] de la solution courante s par lesarêtes [i, j] et [si, sj ] (on suppose ici que la solution s donne le « successeur »de chaque ville et que la ville j vient « après » la ville i lorsque l’on parcours lesvilles dans l’ordre donné par s). Si le mouvement [i, j] est réalisé à une itération,on peut interdire le mouvement inverse [i, si] durant les itérations suivantes. Ils’agit là d’une interdiction directe basée sur l’inverse d’un mouvement.

Une autre possibilité est d’interdire de façon indirecte, après avoir effectuéle mouvement [i, j], les mouvements qui mèneraient à une solution comportantà la fois les arêtes [i, si] et [j, sj ].

Par abus de langage, on notera m−1 l’inverse d’un mouvement, ou les ca-ractéristiques d’une solution que l’on ne voudrait pas retrouver après avoir ef-fectué le mouvementm d’un voisinage caractérisé par un ensembleM de mou-vements. Bien que l’on ait (s⊕m)⊕m−1 = s, il peut y avoir diverses manièresde définir m−1. La trame de la plus élémentaire des recherche avec tabous estdonnée par l’algorithme 8.1.

Algorithme 8.1 : Trame d’une recherche avec tabous élémentaire.

Entrées : Solution s, ensemble M de mouvements applicable à toutesolution, fonction-objectif f(·) à minimiser, paramètres Imax, d.

Résultat : Solution s∗ améliorée1 s∗ ← s pour Imax itérations faire2 valeur_meilleur_voisin←∞;3 pour ∀m ∈M |m non marqué comme interdit faire4 si f(s⊕m) < valeur_meilleur_voisin alors5 valeur_meilleur_voisin← f(s⊕m);6 m∗ ← m

7 si valeur_meilleur_voisin <∞ alors8 s← s⊕m∗;9 Marquer (m∗)−1 comme interdit pour les d prochaines itérations;

10 si f(s) < f(s∗) alors11 s∗ ← s

12 sinon13 Message d’erreur : d trop grand

Page 178: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

176 APPRENDRE À MODIFIER

It. Var. Solution r v Interdictions1 s9 (0, 0, 0, 0, 0, 0, 0, 0, 1) 13 14 (0, 0, 0, 0, 0, 0, 0, 0, 4)2 s1 (1, 0, 0, 0, 0, 0, 0, 0, 1) 25 24 (5, 0, 0, 0, 0, 0, 0, 0, 4)3 s7 (1, 0, 0, 0, 0, 0, 1, 0, 1) 36 33 (5, 0, 0, 0, 0, 0, 6, 0, 4)4 s2 (1, 1, 0, 0, 0, 0, 1, 0, 1) 46 45 (5, 7, 0, 0, 0, 0, 6, 0, 4)5 s9 (1, 1, 0, 0, 0, 0, 1, 0, 0) 33 31 (5, 7, 0, 0, 0, 0, 6, 0, 8)6 s3 (1, 1, 1, 0, 0, 0, 1, 0, 0) 42 39 (5, 7, 9, 0, 0, 0, 6, 0, 8)7 s8 (1, 1, 1, 0, 0, 0, 1, 1, 0) 48 45 (5, 7, 9, 0, 0, 0, 6, 10, 8)8 s2 (1, 0, 1, 0, 0, 0, 1, 1, 0) 38 33 (5, 11, 9, 0, 0, 0, 6, 10, 8)9 s4 (1, 0, 1, 1, 0, 0, 1, 1, 0) 45 40 (5, 11, 9, 12, 0, 0, 6, 10, 8)

10 s5 (1, 0, 1, 1, 1, 0, 1, 1, 0) 49 45 (5, 11, 9, 12, 13, 0, 6, 10, 8)

Tableau 8.1 – Évolution sur 10 itérations d’une recherche avec tabous élémentairepour le problème du sac de montagne 8.1. La première colonne donne le numéro del’itération, la seconde la variable qui est modifiée, la suivante la solution, r donne lerevenu du sac, v le volume occupé et la dernière colonne donne l’état de la liste desinterdictions. Cette recherche interdit de modifier à nouveau une variable pendant 3itérations.

Mise en œuvre de l’interdiction sur les mouvements

Dans la mesure où la taille du voisinage n’est pas trop importante, il est pos-sible de mémoriser, pour chaque caractéristique de mouvements, le numéro del’itération de la recherche avec tabou à partir de laquelle cette caractéristiquepeut à nouveau être utilisée. Donnons tout de suite un petit exemple d’une tellemise en œuvre sur le problème du sac de montagne à 10 variables suivant :

max r = 12s1 + 10s2 + 9s3 + 7s4 + 4s5 + 8s6 + 11s7 + 6s8 + 13s9

sous 10s1 + 12s2 + 8s3 + 7s4 + 5s5 + 13s6 + 9s7 + 6s8 + 14s9 6 45contraintes si ∈ 0, 1 (i = 1, . . . , 9)

(8.1)Une solution s de ce problème est donc un vecteur 0-1, avec si = 1 si l’objet

i est choisi et si = 0 sinon. Chaque objet occupe une certaine place dans le sac(mesurée dans une seule dimension, par exemple son volume ou son poids) etce dernier dispose globalement d’une place de 45. Un voisinage élémentairepour ce problème consiste à modifier la valeur d’une seule des variables de s.

Les conditions d’interdictions peuvent être représentées sous la forme d’unvecteur t d’entiers avec ti donnant le numéro de l’itération à partir de laquellela variable si peut à nouveau changer de valeur. On initialise t = 0, ce quisignifie qu’à la première itération, toutes les variables peuvent être modifiées.Pour ce petit problème, on va supposer que la durée des interdictions est de3. La solution initiale peut également être initialisée à s = 0, ce qui constitue laplus mauvaise des solutions admissibles du problème.

Le tableau 8.1 donne l’évolution d’une recherche avec tabous sur ce petitexemple de problème. Sans surprise, à la première itération, on insère l’objet9 avec le revenu le plus élevé. À la fin de l’itération 1, il sera interdit jusqu’àl’itération t9 = 4 = 1 + 3 de poser à nouveau s9 = 0.

Tant que l’on arrive à insérer des objets dans le sac, la recherche avectabous se comporte comme un algorithme constructif glouton et arrive à lasolution localement optimale s = (1, 1, 0, 0, 0, 0, 1, 0, 1) de valeur 46 à l’itéra-

Page 179: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

8.1 RECHERCHE AVEC TABOUS 177

tion 4. À l’itération 5, il faut retirer un objet, car le sac est entièrement plein.Seul l’objet 9 peut être retiré en raison des conditions tabous. La fonction-objectif diminue donc de 46 à 33, mais de la place est libérée. À l’itération 6,le meilleur mouvement consisterait à ajouter l’objet 9, mais ce mouvement esttabou. Il correspondrait du reste à revenir à la solution visitée à l’itération 4.Le meilleur mouvement autorisé est donc d’ajouter l’objet 3, puis à l’itérationsuivante l’objet 8, menant à un nouvel optimum local s = (1, 1, 1, 0, 0, 0, 1, 1, 0)de valeur r = 48, avec un sac à nouveau entièrement plein avec v = 45. Àl’itération 8, il faut à nouveau retirer un objet et on pose s2 = 0. La place ainsilibérée permet d’ajouter les objets 4 et 5 ce qui permet d’obtenir une solutions = (1, 0, 1, 1, 1, 0, 1, 1, 0) encore meilleure que les deux optima locaux précé-demment obtenus.

Dans l’exemple du voyageur de commerce, le type d’interdictions décritesci-dessus peuvent être implantées au moyen d’une matrice T dont l’entrée tijdonne l’itération à partir de laquelle on peut à nouveau effectuer un mouvementqui ferait apparaître l’arête [i, j] dans la solution. Ce principe s’étend à toutproblème combinatoire pour lequel on cherche une permutation optimale.

Durée des interdictions

Dans l’exemple ci-dessus, la durée des interdictions a été choisie à 3 itéra-tions. Cette valeur peut paraître arbitraire. On peut constater que si l’on sup-prime les interdictions (durée nulle), la recherche va tourner en rond : une foisarrivé à un optimum local, on retire un objet que l’on ajoute à nouveau à l’itéra-tion suivante. Il est clair que la durée maximale des interdictions est limitée parla taille du voisinage : Pour autant qu’il existe à chaque itération un mouvementmenant à une solution admissible, la recherche effectue tout les mouvementsdu voisinage puis reste bloquée, puisqu’ils sont alors tous interdits.

Ces deux cas extrêmes, menant à des recherches inefficaces —choisir unedurée nulle des interdictions revient à ne rien apprendre ; choisir une durée trèsélevée signifie un mauvais apprentissage— montre qu’il faut trouver un boncompromis pour la durée des interdictions. La figure 8.1 illustre ce phénomènepour des exemples de problèmes d’affectation quadratique de taille n = 12avec voisinage basé sur les transpositions.

Il faut donc apprendre quelle est cette durée pour l’exemple de problèmetraité. [?] ont proposé le mécanisme d’apprentissage, sous l’appellation derecherche tabou réactive : On mémorise toutes les solutions visitées par larecherche ; cette mémorisation pouvant être approximative, en utilisant la tech-nique de hachage présentée en section8.1.1. On part d’une durée d’interdic-tions faible. Si la recherche visite une nouvelle fois une solution, alors cettedurée est augmentée. Si la recherche ne revisite aucune des solutions durantun relativement grand nombre d’itérations, alors la durée des interdictions estdiminuée.

Cette dernière condition peut paraître étrange : Pourquoi vouloir forcer larecherche à revenir à des solutions déjà explorées ? L’explication est la sui-vante : si la durée des interdictions est suffisante pour éviter tout phénomènede cyclage, cela signifie également que l’on s’interdit de visiter certaines solu-tions de bonne qualité en raison du statut tabou des mouvements. On risquealors de manquer des solutions dont la qualité est meilleure que celle que la

Page 180: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

178 APPRENDRE À MODIFIER

Vale

urde

sso

lutio

ns

Durée des interdictions

Moyenne de toutes les solutions visitées

Moyenne de la meilleure solution trouvée

2550

2575

2600

2625

2650

2675

0 5 10 15 20 25 30 35 40 45 50

FIGURE 8.1 – Influence de la durée des interdictions d’une recherche avec tabous ap-pliquée au problème de l’affectation quadratique où il faut trouver une permutation decoût aussi faible que possible. Une faible durée permet de visiter en moyenne des solu-tions de meilleure qualité, mais la recherche n’arrive pas à s’échapper d’optima locaux,ce qui fait que la qualité de la meilleure solution trouvée n’est pas très bonne. Inver-sement, si la durée des interdictions est très élevée, la qualité moyenne des solutionsvisitée diminue, de même que celle des meilleures solutions trouvées. Dans ce cas, unbon compromis semble être une durée d’interdictions comprise entre 15 et 20, soit unpeu plus grand que la taille des problèmes traités (ou de la racine carrée de la taille duvoisinage).

recherche a été capable de découvrir. Il faut donc trouver une durée d’interdic-tions suffisamment grande pour ne pas cycler, mais aussi faible que possiblepour ne pas s’interdire de bons mouvements. C’est précisément ce que fait larecherche tabou réactive.

Cependant, cette technique d’apprentissage ne fait que repousser le pro-blème : en effet, son utilisateur doit trouver un autre paramètre qui est le nom-bre d’itérations sans nouvelle visite déclenchant la diminution de la durée desinterdictions. De plus, elle nécessite la mise en place d’un mécanisme de mé-morisation de toutes les solutions visitées, qui peut être très lourd à implanter.

Une autre technique permettant de choisir des durées d’interdictions faiblestout en évitant fortement le phénomène de cyclage est de choisir aléatoirementcette durée à chaque itération. Une méthode très simple à mettre en œuvre estde tirer la durée des interdiction aléatoirement entre une durée minimale dminet une durée maximale dmax = dmin+∆. Pour réaliser la figure 8.2, on a résolu500 exemples de problèmes d’affectation quadratique de taille n = 12 dont ontconnaît les solutions optimales. Pour chacun de ces problèmes on a exécutédes recherches avec tabous avec un grand nombre d’itérations (pour des pro-blèmes d’aussi petite taille) avec tous les paramètres possibles pour dmin et∆). On a ensuite comptabilisé le nombre de solutions optimales trouvées pourchaque paramétrage, et, si la recherche a été capable de trouver l’ensembledes 500 solutions optimale, le nombre moyen d’itérations nécessaires pour at-

Page 181: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

8.1 RECHERCHE AVEC TABOUS 179

dmin

0 5 10 15 20 25 30 35 400

5

10

15

20

25

FIGURE 8.2 – Technique du choix aléatoire de la durée des interdictions entre dmin etdmin+∆ à chaque itération. Un cercle vide indique que la recherche avec tabou n’a pasété en mesure de trouver systématiquement l’optimum de 500 exemples de problèmesd’affectation quadratique. La dimension du cercle est proportionnelle au nombre d’op-tima trouvés. Un disque rempli indique que l’optimum a été systématiquement trouvé.La dimension du disque est proportionnelle au nombre moyen d’itérations qu’il a fallueffectuer avant d’obtenir l’optimum.

teindre l’optimum.On remarque qu’avec une durée non aléatoire des interdictions (∆ = 0), il

n’a jamais été possible de trouver toutes les solutions optimales, même avecdes durées relativement importantes. Inversement, on remarque qu’avec desdurées minimales faibles et une variation aléatoire de l’ordre de grandeur de lataille du problème, on obtient l’optimum de façon très systématique, en relati-vement peu d’itérations.

La figure 8.3 donne la qualité de la solution obtenue pour un petit problèmede voyageur de commerce pour tout couple (dmin,∆). On remarque des si-militudes avec la figure 8.2 ; dans ce cas il semble également qu’une duréed’interdiction aléatoire mais proportionnelle à la taille du problème soit un boncompromis.

Condition d’aspiration

L’interdiction inconditionnelle d’un mouvement dans une recherche tabouélémentaire est que l’on pourrait passer à côté d’une amélioration de lameilleure solution trouvée. Ainsi, à la ligne 3 de la trame 8.1, on testera sile mouvement m permet d’aboutir à une solution meilleure que s∗, auquel cas

Page 182: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

180 APPRENDRE À MODIFIER

dmin

0 n2 n 3n

2 2n

0

n2

n

3n2

2n

Qualité

Optimum

+1%

+2%

+3%

+4%

FIGURE 8.3 – Qualité des solutions obtenues avec une recherche tabou où la duréedes interdictions est choisie aléatoirement entre dmin et dmin + ∆ pour un problème devoyageur de commerce à n = 52 villes. La méthode effectue 10n itérations en partantd’une solution construite de manière déterministe avec une méthode gloutonne d’inser-tion. Pour chaque couple (dmin,∆) variant entre 0 et 2n on a lancé une recherche etreprésenté la qualité de la solution trouvée par une couleur.

il sera retenu. Dans la littérature, ceci est appelé une condition d’aspiration.Il est possible de définir d’autres conditions d’aspiration moins triviales, no-

tamment pour mettre en œuvre une mémoire à long terme.

8.2 Oscillations stratégiques

Le mécanisme d’interdiction de mouvements récemment effectués implanteune mémoire à court terme qui peut se révéler très efficace pour des problèmesde taille modérée. Par contre, dès que l’on s’attaque à des problèmes plusdifficiles, ce seul mécanisme n’est pas suffisant. Une stratégie de recherchequi a été proposée dans le cadre de la recherche avec tabous est d’alternerdes phases d’intensification et de diversification. Le but de l’intensification estd’examiner en profondeur une portion limitée de l’espace de recherche, enconservant des solutions qui ont une structure globalement similaire. Une foisque l’on pense avoir exploré toutes les solutions intéressantes de cette portion,il faut aller voir ailleurs. En d’autres termes, on diversifie la recherche en brisantla structure de la solution sur laquelle on travaille.

L’intensification de la recherche peut être faite à l’aide du simple mécanisme

Page 183: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

8.2 OSCILLATIONS STRATÉGIQUES 181

d’interdiction de mouvements vu plus haut, en ayant une durée d’interdictionfaible. Implanter un mécanisme de diversification suppose de disposer d’unemémoire à long terme. Plusieurs techniques ont été proposé pour réaliser cela.

8.2.1 Mémoire à long terme

Mouvements forcés

La manière la plus sûre et la plus simple à mettre en œuvre pour casserla structure d’une solution est d’effectuer des modifications qui n’ont jamaisété retenues durant de nombreuses itérations. Si l’on dispose d’une rechercheavec tabous de base, où l’on a mémorisé pour chaque mouvement l’itérationà partir de laquelle il peut à nouveau être effectué, la mise en œuvre de cetteforme de mémoire à long terme est pratiquement gratuite : en effet si le nu-méro d’itération mémorisé pour un mouvement est bien plus petit que celuide l’itération courante, c’est que le mouvement en question n’a pas été effec-tué pendant longtemps. On peut ainsi forcer l’utilisation de cette modification,quelle que soit la qualité de la solution vers laquelle elle conduit.

Ce mécanisme requiert un nouveau paramètre, K représentant le nombred’itérations à partir duquel un mouvement jamais choisi sera forcé. Naturel-lement, ce paramètre doit être plus grand que la taille du voisinage, sinon larecherche dégénérera en n’effectuant plus que des mouvements forcés. Cettype de mémoire à long terme est une autre forme de mise en œuvre desconditions d’aspiration que l’on a introduite dans la section précédente.

Pénalité sur les mouvements

Un des défaut de la recherche avec tabous dotée d’une mémoire à trèscourt terme est de n’effectuer que des modifications de faible amplitude. Pourillustrer ce propos sur le problème du voyageur de commerce, une telle recher-che va « tricoter » un petit nœud sur une tournée qui était localement optimale,puis un autre ailleurs et ainsi de suite jusqu’à ce qu’il soit à nouveau autoriséde défaire le premier nœud.

Pour éviter ce comportement, il faut mémoriser le nombre de fois fm qu’unmouvement m a été choisi et en limiter son usage. Un mécanisme est de pé-naliser m proportionnellement à fm lors de l’évaluation du mouvement. Le fac-teur de proportionnalité F constituant un paramètre de la technique qu’il faudraajuster. Naturellement, on utilisera une condition d’aspiration du mouvement enconjonction avec ce mécanisme, pour pouvoir tout de même choisir une modi-fication fortement pénalisée mais qui mène à une amélioration de la meilleuresolution connue.

La figure 8.4 illustre l’amélioration de la qualité d’une recherche avec taboueffectuant 10n itérations sur un problème de voyageur de commerce de n = 52villes lorsque l’on introduit le mécanisme de pénalisation sur la fréquence d’uti-lisation des mouvements. On remarque dans cette figure que la durée des in-terdictions des mouvements peut être réduite et que l’on obtient plus fréquem-ment de bonnes solutions. Ce mécanisme pourrait même être utilisé seul, sansliste d’interdiction. En effet, on remarque dans cette figure qu’une bonne solu-tion a pu être obtenue avec une durée minimale et maximale des interdictionsde 0. Le code 8.1 illustre comment une liste d’interdictions et un comptage de

Page 184: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

182 APPRENDRE À MODIFIER

dmin

0 n2 n 3n

2 2n

0

n2

n

3n2

2n

Qualité

Optimum

+1%

+2%

+3%

+4%

FIGURE 8.4 – Même diagramme que pour la figure 8.3, mais la recherche avec tabousa été dotée du mécanisme de mémoire à long terme de pénalisation des mouvementsfréquemment effectués. La pénalité appliquée à un mouvement qui cherche à introduireune nouvelle fois un arête e qui l’a déjà été ne fois durant la recherche est de F · ne,où F est égal à la longueur moyenne d’une arête de la tournée divisée par la taille duproblème.

chaque mouvement peut être implanté. Ici, la liste des interdictions est unematrice dont l’entrée (i, j) donne le numéro de l’itération à partir de laquelleon peut à nouveau utiliser l’arête [i, j] dans un mouvement. Le comptage desmouvements est implanté de façon similaire. Le code 8.1 donne la procédurepermettant d’effectuer un mouvement et de mettre à jour la liste d’interdictionet la fréquence d’utilisation des mouvements.

Page 185: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

8.2 OSCILLATIONS STRATÉGIQUES 183

Listing 8.1 – perform_move_update.c Réalisation d’un mouvement 2-opt pour le pro-blème du voyageur de commerce avec mise à jour de la liste des interdictions et ducomptage du nombre de fois qu’un trajet est impliqué dans la modification de la solu-tion.vo id perform_move_update ( i n t n ,

double ∗∗d ,i n t i , i n t j ,i n t tabu_durat ion ,i n t so l [ ] ,double ∗ length ,i n t ∗∗ t a b u _ l i s t ,i n t ∗∗ f requency )

/∗ Forb id to use again edges ( i , i +1) and ( j , j +1) ∗ /t a b u _ l i s t [ so l [ i ] ] [ so l [ i + 1 ] ] = t a b u _ l i s t [ so l [ j ] ] [ so l [ ( j +1)%n ] ] =t a b u _ l i s t [ so l [ i + 1 ] ] [ so l [ i ] ] = t a b u _ l i s t [ so l [ ( j +1)%n ] ] [ so l [ j ] ]

= tabu_dura t ion ;

f requency [ so l [ i ] ] [ so l [ j ] ] + + ;f requency [ so l [ j ] ] [ so l [ i ] ] + + ;f requency [ so l [ i + 1 ] ] [ so l [ ( j +1)%n ] ] + + ;frequency [ so l [ ( j +1)%n ] ] [ so l [ i +1 ] ]++ ;

/∗ Update s o l u t i o n cost ∗ /∗ l eng th = ∗ l eng th + d [ so l [ i ] ] [ so l [ j ] ] + d [ so l [ i + 1 ] ] [ so l [ ( j +1)%n ] ]

− d [ so l [ i ] ] [ so l [ i + 1 ] ] − d [ so l [ j ] ] [ so l [ ( j +1)%n ] ] ;

f o r ( i n t r = 0 ; r < ( j−i ) / 2 ; r ++) /∗ Reverse path from i + 1 to j ∗ /swap(& so l [ r + i +1] , &so l [ j−r ] ) ;

Le code 8.2 donne une implantation d’une recherche avec tabous pour leproblème du voyageur de commerce basé sur un voisinage de type 2-opt. Deuxtypes de mémoires sont utilisées : une mémoire classique à court terme quiempêche d’effectuer un mouvement qui réintroduirait dans la solution deuxarêtes qui en ont été retirées récemment et une mémoire à long terme quicompte le nombre de fois que chaque arête a été insérée dans la solution.L’évaluation des mouvements est pénalisée proportionnellement au nombrede fois que les arêtes que l’on veut introduire dans la solution l’ont déjà été.Une modification est interdite si les deux arêtes qu’elle veut incorporer ont étérécemment retirées de la solution (mais pas forcément à la même itération).Finalement, une modification est aspirée si elle améliore la meilleure solutiontrouvée jusque là.

Page 186: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

184 APPRENDRE À MODIFIER

Listing 8.2 – tsp_TS.c Implantation d’une recherche avec tabous pour le problème duvoyageur de commerce.vo id tsp_TS ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance matr ix , must be symmetr ica l ∗ /i n t bes t_so l [ ] , /∗ InOut So lu t i on provided and re turned ∗ /double ∗best_cost , /∗ InOut Length o f the best t ou r ∗ /i n t i t e r a t i o n s , /∗ Number o f TS i t e r a t i o n s ∗ /i n t min_tabu_durat ion , /∗ Minimal fo rb idden dura t i on ∗ /i n t max_tabu_duration ,double F)

i n t i , j , /∗ I nd i ces ∗ /n r _ i t e r a t i o n , /∗ I t e r a t i o n counter ∗ /i_kept , j _kep t ; /∗ Move to perform ∗ /

double de l ta , /∗ Cost o f cu r ren t move ∗ /de l ta_pena l ty , /∗ Cost o f move kept w i th pena l ty ∗ /l eng th = ∗best_cost ; /∗ Length o f cu r ren t s o l u t i o n ∗ /

i n t ∗ so l = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ; /∗ Current s o l u t i o n ∗ /i n t ∗∗ t a b u _ l i s t ; /∗ I t e r a t i o n from which an arc can be moved again ∗ /i n t ∗∗ f requency ;double pena l ty ;

f o r ( i = 0 ; i < n ; i ++) so l [ i ] = bes t_so l [ i ] ;

/∗ I n i t i a l i z a t i o n o f tabu l i s t : any move i n i t i a l l y al lowed ∗ /t a b u _ l i s t = ( i n t ∗∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ∗ ) ) ;f o r ( i = 0 ; i < n ; i ++)

t a b u _ l i s t [ i ] = ( i n t ∗) c a l l o c ( ( s i z e _ t ) n , s i z e o f ( i n t ) ) ;f requency = ( i n t ∗∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ∗ ) ) ;f o r ( i = 0 ; i < n ; i ++)

frequency [ i ] = ( i n t ∗) c a l l o c ( ( s i z e _ t ) n , s i z e o f ( i n t ) ) ;

/∗ Main tabu search loop ∗ /f o r ( n r _ i t e r a t i o n = 1; n r _ i t e r a t i o n <= i t e r a t i o n s ; n r _ i t e r a t i o n ++) de l t a_pena l t y = i n f i n i t e ;

i _kep t = j_kep t = −1; /∗ Dummy value to avoid compi ler warnings ∗ /

/∗∗∗∗∗∗∗ Find best move al lowed ∗∗∗∗∗∗∗ /f o r ( i = 0 ; i < n−2; i ++) f o r ( j = i +2; ( j < n ) && ( i > 0 | | j < n−1); j ++)

de l t a = d [ so l [ i ] ] [ so l [ j ] ] + d [ so l [ i + 1 ] ] [ so l [ ( j +1)%n ] ]− d [ so l [ i ] ] [ so l [ i + 1 ] ] − d [ so l [ j ] ] [ so l [ ( j +1)%n ] ] ;

pena l ty = F∗( f requency [ so l [ i ] ] [ so l [ j ] ] +frequency [ so l [ i + 1 ] ] [ so l [ ( j +1)%n ] ] ) ;

i f ( ( de l t a + pena l ty < de l ta_pena l t y ) && /∗ A b e t t e r move i s found ∗ /( t a b u _ l i s t [ so l [ i ] ] [ so l [ j ] ] <= n r _ i t e r a t i o n | | /∗ Allowed ? ∗ /

t a b u _ l i s t [ so l [ i + 1 ] ] [ so l [ ( j +1)%n ] ] <= n r _ i t e r a t i o n | |l eng th + de l t a < ∗best_cost − eps i l on ) ) /∗ Aspi ra ted ? ∗ /

de l t a_pena l t y = de l t a + pena l ty ;i _kep t = i ; j _kep t = j ;

; /∗ f o r j ∗ /

; /∗ f o r i ∗ /

/∗∗∗∗∗∗ Perform best move ∗∗∗∗∗∗∗ /i f ( de l t a_pena l t y < i n f i n i t e )

perform_move_update ( n , d , i_kept , j_kept ,u n i f ( min_tabu_durat ion , max_tabu_duration ) + n r _ i t e r a t i o n ,sol , &length , t a b u _ l i s t , f requency ) ;

e lsep r i n t f ( " A l l moves are fo rb idden : tabu l i s t too long \ n " ) ;

i f ( l eng th < ∗best_cost − eps i l on ) /∗ Store best s o l u t i o n i f improved ∗ / ∗best_cost = leng th ;

f o r ( i = 0 ; i < n ; i ++) bes t_so l [ i ] = so l [ i ] ;p r i n t f ( "TS %d %f \ n " , n r _ i t e r a t i o n , leng th ) ;

; /∗ f o r n r _ i t e r a t i o n ∗ /

f o r ( i = 0 ; i < n ; i ++) f r ee ( frequency [ i ] ) ;f r ee ( frequency ) ;f o r ( i = 0 ; i < n ; i ++) f r ee ( t a b u _ l i s t [ i ] ) ;f r ee ( t a b u _ l i s t ) ; f r ee ( so l ) ;

/∗ tsp_TS ∗ /

Page 187: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

8.2 OSCILLATIONS STRATÉGIQUES 185

Redéparts

Une technique fréquemment employée pour intensifier une recherche avectabous est de repartir avec la meilleure solution trouvée jusque là si la re-cherche semble stagner, par exemple s’il n’y a pas eu d’amélioration de cettemeilleures solution durant un relativement grand nombre d’itération. Afin de nepas perdre tout le travail fait depuis la dernière amélioration de la meilleuresolution, le redépart se fait en conservant les informations collectées durantces itérations, notamment la liste des interdictions et les statistiques sur lesfréquences d’utilisation des mouvement, si ce mécanisme a été utilisé.

Ainsi, les structures de données guidant la recherche étant dans un étatdifférent après redémarrage, la trajectoire suivie par la recherche le sera éga-lement. Ce mécanisme peut être vu comme l’opposé de celui présenté plushaut où l’on force l’utilisation d’attribut négligés pendant de nombreuses itéra-tions. Son but est de réaliser une intensification de la recherche et non unediversification. Naturellement, l’implantation de ce mécanisme implique l’intro-duction de nouveaux paramètres qu’il faut ajuster, tel que le nombre d’itérationsà effectuer avant un redépart et une éventuelle adaptation de la valeur d’autresparamètres (durée des interdictions, pénalité sur la fréquence) pour inciter larecherche à suivre des trajectoires diversifiées.

Page 188: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

186 APPRENDRE À MODIFIER

Exercices

Exercice 8.1. Recherche tabou pour une fonction explicite Une fonctionentière [−7,−6] × [6, 7] → [−10, 650] est donnée explicitement dans le tableausuivant :

xy -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6-6 248 216 210 222 230 234 256 304 336 372 428 495 585 650-5 193 175 157 166 174 181 215 249 295 329 382 454 539 597-4 138 144 126 116 124 150 184 194 250 305 361 425 480 566-3 123 89 85 97 105 109 129 179 209 246 302 368 458 525-2 92 58 70 70 78 94 98 148 168 223 282 339 413 510-1 68 34 46 46 54 70 74 124 144 199 258 315 388 4860 51 17 14 25 33 38 57 107 136 174 230 296 386 4541 18 25 5 -4 3 29 65 74 131 185 240 305 361 4452 27 6 -10 0 8 13 46 83 126 160 213 284 371 4293 33 0 -3 7 15 20 39 89 118 156 212 278 368 4364 33 12 -4 6 14 19 52 89 132 166 219 290 377 4355 30 37 17 7 15 41 77 86 143 197 252 317 373 4576 69 35 32 43 51 56 75 125 154 192 248 314 404 4727 92 58 70 70 78 94 98 148 168 223 282 339 412 510

Pour trouver le minimum de cette fonction, on considère une recherche avectabous basée sur le voisinage où l’on modifie d’une unité la valeur d’une va-riable. Les conditions tabous consistent à interdire pendant d itérations d’incré-menter (respectivement : de décrémenter) une variable qui a été décrémentée(respectivement : incrémentée). Considérer tout d’abord une durée d’interdic-tions de d = 3 et (−7, 7) comme solution de départ. Ensuite, partir de (−7,−6)et utiliser t = 1. La recherche s’arrête s’il n’y a plus de mouvement autorisé ousi 25 itérations ont été effectuées.

Exercice 8.2. Recherche tabou pour tournée de véhicules Pour un pro-blème d’élaboration de tournées de véhicules, on utilise un voisinage qui con-siste soit à déplacer un client d’une tournée dans une autre, soit à échangerdeux clients appartenant à des tournées différentes. Proposer des critères ta-bous pour ce voisinage.

Exercice 8.3. Application de recherche avec tabous au QAP Soit l’exemplede QAP donné par la matrice de flots F et de distance D :

F =

0 1 1 2 31 0 2 1 21 2 0 1 22 1 1 0 13 2 2 1 0

D =

0 5 2 4 15 0 3 0 22 3 0 0 04 0 0 0 51 2 0 5 0

En commençant avec la solution p = (2, 4, 1, 5, 3), effectuer 6 itérations derecherche avec tabous avec une durée d’interdiction d = 6. À chaque itération,donner la solution, sa valeur, celle de tous les mouvements ainsi que leur statuttabou

Page 189: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Chapitre 9

Apprendre par les solutions

Avec une modélisation adéquate d’un problème d’optimisation, il est trèsfacile de construire de nombreuses solutions différentes notamment au moyende méthodes randomisées. Dès lors, on peut chercher à apprendre à élabo-rer de nouvelles solutions à partir celles précédemment construites. Dans cechapitre, nous allons donc étudier comment exploiter une population de so-lutions, ce qui nous amènera à rassembler dans une méthode de résolutionles diverses briques des méta-heuristiques étudiées plus haut (construction etaméliorations de solutions).

9.1 Trame des algorithmes évolutionnaires

L’intuition à la source des algorithmes évolutionnaires vient des travaux debiologistes du XIXe siècle, tels que Darwin et Mendel à la base de la théorie del’évolution des espèces vivantes. En effet, au cours des générations, un êtrevivant est capable de s’adapter à des conditions extérieures en changementpermanent. Cela signifie que les êtres vivants peuvent optimiser leur chancesde survie, donc de résoudre des problèmes d’une extrême complexité. Dèslors, pourquoi ne pas tenter de reproduire artificiellement cette évolution pourrésoudre des problèmes d’optimisation combinatoire.

Dans les années 1960-1970, différentes variantes d’exploitation de cesidées ont vu le jour. La trame générale des algorithmes évolutionnaires estdonnée par l’algorithme 9.1. On commence par générer un ensemble de µ so-lutions au problème, généralement de façon purement aléatoire. Cet ensemblede solutions est appelé population par analogie à un groupe d’êtres vivants. Demême, une solution du problème est un individu.

Les algorithmes évolutionnaires répètent les opérations suivantes en boucle(appelée boucle générationnelle), jusqu’à ce qu’un critère d’arrêt soit satisfait.Ce dernier est soit fixé d’avance, par exemple le nombre de fois que la bouclegénérationnelle est répétée, soit décidé sur la base de la diversité des individusprésents dans la population.

Tout d’abord, on sélectionne un certain nombre de solutions de la popula-tion qui seront utilisés pour la reproduction. Ceci est réalisé par un opérateurde sélection pour la reproduction. Le but de cet opérateur est de favoriser lesindividus bien adaptés à leur environnement (ceux dont la fonction-objectif est

Page 190: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

188 APPRENDRE PAR LES SOLUTIONS

Population

Sélection pour la reproduction

CroisementMutation

Évaluation

Sélection pour la survie

FIGURE 9.1 – Boucle générationnelle dans un algorithme évolutionnaire. À partir d’unepopulation de solutions, symbolisées ici par des bâtonnets de couleur, on sélectionnedes individus qui vont se reproduire par croisement et mutation. Les solutions-fillesainsi générées sont évaluées et incorporées à la population. Finalement, des individusde cette dernière sont éliminés par un opérateur de sélection pour la survie afin deramener la population à sa taille d’origine.

Algorithme 9.1 : Trame d’un algorithme évolutionnaire.

Résultat : Meilleure solution trouvée1 Générer une population P de µ solutions;2 répéter3 Sélectionner des individus de P pour la reproduction;4 Combiner ces individus et leur faire subir des mutations pour obtenir

λ nouvelle solutions;5 Sélectionner µ individus pour la survie, parmi les µ+ λ ; ces µ

individus formeront la population P de la prochaine génération6 jusqu’à ce qu’un critère d’arrêt soit satisfait ;

Page 191: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.2 ALGORITHMES GÉNÉTIQUES 189

la meilleure) au détriment de ceux qui sont plus faibles, malades, mal adaptés,à l’image de ce qui se passe dans la nature.

Les individus sélectionnés sont ensuite mélangés entre eux (par exemplepar paire) à l’aide d’un opérateur de croisement pour former λ nouvelles so-lutions appelées solutions-enfants qui subissent au passage des modificationsaléatoires au moyen d’un opérateur de mutation. Ces deux opérateurs simulentla reproduction sexuée des espèces vivantes, en faisant l’hypothèse qu’avecun peu de chance les bonnes caractéristiques (les bons gènes contenus dansl’ADN) des solutions-parents seront transmises à leurs enfants et que les mu-tations aléatoires feront apparaître de nouveaux gènes favorables.

Finalement, les nouvelles solutions sont évaluées et un opérateur de sé-lection pour la survie élimine λ solutions parmi les µ + λ disponible pour seramener à une nouvelle population de µ individus. La figure 9.1 illustre le pro-cessus d’une boucle générationnelle.

La trame des algorithmes évolutionnaires laisse une grande liberté dansles choix à opérer pour l’implantation des divers opérateurs et paramètres. Parexemple [?] dans sa « stratégie d’évolution » n’utilise pas d’opérateur de croise-ment entre deux solutions. Dans cette technique, les solutions de la populationsont modifiées avec un opérateur de mutation et entrent en compétition lesunes avec les autres, à l’instar de la reproduction parthénogénétique.

9.2 Algorithmes génétiques

Parmi les algorithmes évolutionnaires, c’est sans conteste les algorithmesgénétiques proposés par [?] qui ont reçu le plus d’attention, ce qui peut paraîtreparadoxal, puisque dans cette référence, le cœur de l’étude portait sur la com-préhension des mécanismes de convergence de ces algorithmes, et non surleur capacité à optimiser des problèmes difficiles. Pendant longtemps, la com-munauté gravitant dans ce domaine a continué à travailler sur la théorie dela convergence des algorithmes génétiques, en étudiant des version « ortho-doxes » des divers opérateurs mentionnés plus haut, en conjonction avec unereprésentation standard des solutions sous la forme de vecteurs de booléensde taille donnée.

Malheureusement, tous les problèmes d’optimisation n’ont pas des solu-tions pouvant se représenter naturellement par des vecteurs binaires. Ayantà disposition des opérateurs standards et connaissant leurs propriétés théo-riques, de gros efforts ont été dépensés pour trouver de bons codages dessolutions sous forme de vecteurs binaires et de décodage de ces derniers versdes solutions réalisables.

Dans cette section, nous allons passer en revue les principaux opérateursdes algorithmes génétiques, en discutant au passage leur généralisation pourqu’ils s’appliquent également à une représentation naturelle de solutions et nonseulement à des vecteurs binaires.

9.2.1 Opérateurs de sélection pour la reproduction

La sélection pour la reproduction a pour but de favoriser les meilleures so-lutions, pour qu’elles puissent transmettre leur bonnes propriétés à leur des-

Page 192: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

190 APPRENDRE PAR LES SOLUTIONS

cendance. Il faut donc attribuer à chaque solution i une mesure de qualité fi ;plus cette dernière est élevée, plus la probabilité de sélection doit être haute.Si l’objectif du problème à résoudre est de maximiser une fonction prenant desvaleurs positives, cette fonction peut directement être utilisée comme mesurede qualité. Sinon, il faut procéder à une transformation de la fonction-objectifpour obtenir la mesure de qualité de chaque individu. Une transformation cou-rante, ne nécessitant pas le calcul d’une fonction-objectif mais seulement lapossibilité de comparer la qualité des individus et de les trier. Le meilleur in-dividu d’une population aura un rang de 1 et le plus mauvais de µ. Le iième

individu aura une mesure de qualité fi = (1− riµ )p, où p > 0 est un paramètre

permettant de moduler la pression sélective. Une pression p = 0 implique untirage uniforme parmi la population (pas de pression sélective) alors que p = 2représente une assez forte pression. Le code 9.1 donne une implantation decet opérateur pour une pression sélective p = 1.

Listing 9.1 – rank_based_selection.c Implantation d’un opérateur de sélection pourla reproduction basé sur le rang, avec une pression sélective p = 1. Le meilleur des µindividus a une probabilité de 2µ/(µ · (µ + 1))) d’être choisi, alors que le plus mauvaisa une probabilité de 2/(µ · (µ+ 1))).i n t rank_based_select ion ( i n t mu) r e t u r n mu − ( i n t ) c e i l ( s q r t (0 .25 + 2∗ u n i f (1 , mu∗(mu+1) /2 ) )−0 .5 ) ;

Sélection proportionnelle

L’opérateur de sélection le plus simple est de tirer aléatoirement un individuproportionnellement à sa mesure de qualité. L’individu i aura donc une proba-bilité fi/

∑fi d’être choisi. En principe, on ne sélectionne pas qu’un individu à

chaque boucle générationnelle, mais plusieurs. La sélection se fait en généralavec remise, ce qui fait qu’un (bon) individu peut être choisi plusieurs fois dansune génération.

Les algorithmes génétiques sont intrinsèquement parallèles : la boucle gé-nérationnelle peut s’appliquer aussi bien à la production d’un seul individuà chaque génération, comme représentée en figure 9.1, qu’à la générationd’une multitude de solutions-enfants. Une technique fréquemment utilisée estde sélectionner un nombre pair λ de solutions-parents à une génération, deles apparier, chaque couple produisant deux solutions-enfants par croisement-mutation.

Sélection naturelle

Il est également envisageable de procéder à une sélection totalement aléa-toire et uniforme pour la reproduction, à l’image de ce qui se passe pour lesêtres vivants. La convergence de l’algorithme doit alors être guidée par l’opé-rateur de sélection pour la survie, qui assure un biais vers les meilleures indi-vidus.

Sélection complète

Si l’on ne choisit pas une taille de population trop grande, il est égalementpossible de faire participer tous les individus, de manière systématique, pour

Page 193: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.2 ALGORITHMES GÉNÉTIQUES 191

FIGURE 9.2 – Reproduction de coccinelles. On peut imaginer que les couples du hautvont produire des enfants très semblables à eux-mêmes, alors que ceux du bas vontconserver une certaine diversité génétique dans la population, et, avec un peu dechance, produire quelques enfants nettement mieux adaptés qu’eux à leur environne-ment.

la reproduction. Comme pour la sélection naturelle, l’évolution de la popula-tion vers de bonnes solutions dépend alors de l’opérateur de sélection pour lasurvie, qui doit, lui, favoriser les meilleures solutions.

9.2.2 Opérateurs de croisement

Un opérateur de croisement a pour but de simuler la reproduction sexuéedes espèces vivantes. Schématiquement, lors d’une reproduction sexuée,l’ADN de chaque parent se sépare en deux chaînes de gènes durant le pro-cessus de méiose, afin de produire des gamètes (contenus dans les œufs nonfécondés, les spermatozoïdes ou les grains de pollen). Lors de la fécondationde l’œuf, se produit un brassage génétique, durant lequel la chaîne de gènesde l’enfant se constitue en apondant les gènes de l’un ou l’autre parent defaçon aléatoire.

Le but de cet opérateur est de créer un nouvel individu, différent de ses pa-rents, mais ayant hérité de certaines de ses caractéristiques. Avec un peu dechance, l’enfant combinera de bonnes caractéristiques de ses parents et seramieux adapté qu’eux à son environnement. Avec un peu moins de chance,l’enfant ne combinera pas que des bonnes caractéristiques, mais perpétuerades gènes toutefois importants à conserver à l’intérieur de la population, carsource de diversité et donc d’innovation potentielle. Ceci est imagé par la fi-gure 9.2 où l’on a photographié la reproduction de différentes coccinelles. Lescouples en haut vont vraisemblablement produire des enfant très similaires àeux-mêmes alors que les couples du bas de la figure vont produire des enfantgénétiquement plus riches.

Il faut noter que dans certaines stratégies, l’opérateur de croisement estabsent. Ces stratégies imitent la reproduction asexuée, où un individu crée un

Page 194: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

192 APPRENDRE PAR LES SOLUTIONS

AC G T TT G GA AC G

TA G C GT A GC CT G

T C T T GCA G T G G A

AC A G T T G A G C C G

Parent 1

Parent 2

Enfant 1

Enfant 2

FIGURE 9.3 – Croisement uniforme. Production de deux enfants complémentaires re-lativement à la provenance des gènes de deux parents. Chaque élément du premierenfant est tiré aléatoirement du premier ou du second parent, le deuxième enfant rece-vant l’élément complémentaire.

ou plusieurs enfants presque identique à lui-même, où seules des mutationsspontanées font évoluer le patrimoine génétique de la population.

Croisement uniforme

Le croisement uniforme consiste à prendre deux solutions-parents, repré-sentées sous la forme de vecteurs à n éléments et à en créer un troisième demême longueur en choisissant aléatoirement ses composantes parmi l’un oul’autre des parents.

La figure 9.3 illustre la production de deux enfants « anti-jumeaux » à partirde deux parents. Cette procédure de croisement convient lorsqu’il est facile etnaturel de représenter toute solution du problème par un vecteur de n compo-sante, et qu’à tout vecteur de cette taille on peut faire correspondre une solutionadmissible du problème.

Ceci n’est pas le cas pour un problème où l’on cherche une permutationde n éléments. Une technique d’adaptation du croisement uniforme pour cettesituation est de procéder en deux passes : durant la première passe, on sé-lectionne aléatoirement l’élément de la permutation chez l’un ou l’autre desparents, pour autant que l’élément en question n’ait pas encore été choisi. Siles deux parents ont des éléments déjà choisis à la position à remplir, cettedernière reste temporairement vide chez l’enfant. La seconde passe consisteà compléter les positions vides aléatoirement avec les éléments qui n’ont pasété placés durant la première passe. Cet opérateur est illustré par la 9.4.

Croisement 1-point

Le croisement 1-point, ou enjambement simple, consiste à choisir aléatoi-rement un point à l’intérieur du vecteur-solution et à copier tous les élémentsdu premier parent jusqu’à ce point, puis les éléments du second parent à partirde là. En pratique, pour un vecteur de n éléments, on tire aléatoirement unnombre c entre 1 et n − 1 ; on copie les éléments 1 à c, compris, du premier

Page 195: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.2 ALGORITHMES GÉNÉTIQUES 193

125 8 2 16 11 39 410 7

411 8 12 15 2 103 96 7

113 12 8 2 6 1 10 9 7

Parent 1

Parent 2

Phase 1

Enfant113 12 8 2 6 1 10 9 75 4

FIGURE 9.4 – Croisement uniforme sur une permutation. Un enfant est produit en deuxpasses. On choisit d’abord successivement les éléments de l’un ou l’autre des parents,pour autant que ces éléments n’aient pas été choisis (auquel cas, on prend l’unique élé-ment disponible, ou on laisse la case vide si les deux éléments des parents figurent déjàdans l’enfant. La seconde passe complète aléatoirement l’enfant à l’aide des élémentsencore disponibles.

AC G T TT GA G AC G

TA G C GT AC G CT G

Parent 1

Parent 2

Enfant 1

Enfant 2

AC G T TT GA G CT G

TA G C GT AC G AC G

FIGURE 9.5 – Enjambement simple ou croisement 1-point. Production de deux « anti-jumeaux » par tirage aléatoire d’un point d’enjambement (ici, le 8), et copie des élémentsdu premier parent jusqu’au point d’enjambement, et ceux du second à partir de là.

parent et les éléments c+ 1 à n du second parent. On peut produire un secondenfant complémentaire en parallèle. Cet opérateur est illustré en figure 9.5.

Croisement 2-points

Le double enjambement ou croisement 2-points consiste à choisir deuxpoints de croisement sur les parents. L’enfant est créé par copie de la por-tion d’un parent située entre les points de croisement et de copier la portionavant le premier point de croisement et celle après le second de l’autre parent.Cet opérateur est illustré en figure 9.6.

Page 196: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

194 APPRENDRE PAR LES SOLUTIONS

AC G T TT GA G AC G

TA G C GT AC G CT G

Parent 1

Parent 2

Enfant 1

Enfant 2

AC GA C GT A G AC G

TA GC T TT G G CT G

FIGURE 9.6 – Enjambement double ou croisement 2-points. Production de deux « anti-jumeaux » par tirage aléatoire de deux points points de croisement (ici, 4 et 8). Copiedes éléments d’un parent jusqu’au premier point de croisement et à partir du secondpoint de croisement et ceux de l’autre pour la partie intermédiaire.

Croisement OX

Pour chaque problème, on peut inventer un opérateur de croisement spé-cifique. Par exemple, pour celui du voyageur de commerce, on peut faire leraisonnement que des portions de chemins devraient être copiées dans lasolution-enfant à partir des parents. Si l’on considère une solution comme étantune permutation des villes, on se rend compte que le croisement uniforme vuplus haut et adapté au cas des permutations n’a pas vraiment de sens : la villede départ n’est pas déterminante, donc ce n’est pas la position d’une ville dansla tournée qui est importante, mais les villes qui lui précèdent et succèdent.Dans ce cas, on aura intérêt à adapter l’opérateur de croisement 2-points pourles problèmes où ce sont les séquences qui sont importantes.

L’opérateur de croisement OX imaginé pour le problème du voyageur decommerce commence par copier la portion intermédiaire d’un parent, à l’imagedu double enjambement. On repère la dernière ville de cette portion dansl’autre parent et l’enfant est complété en parcourant cycliquement les villesde ce parent et en y insérant celles qui n’y figurent pas encore. L’opérateur decroisement OX est illustré en 9.7

Une implantation de cet opérateur en C est donné par le code 9.2.

Page 197: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.2 ALGORITHMES GÉNÉTIQUES 195

125 8 2 16 11 39 410 7

411 8 12 15 2 10 96 7

Parent 1

Parent 2

Enfant32 16 11 4 8 12 5 10 9 7

3

FIGURE 9.7 – Croisement OX, spécifiquement développé pour le problème du voyageurde commerce. On commence par tirer aléatoirement deux points de croisement. Laportion intermédiaire du premier parent est copiée chez l’enfant. Dans cet exemplecette portion se termine par la ville 11. On repère cette ville dans le second parentet on complète l’enfant à partir de là, en l’occurrence par la ville 4. Les villes figurantdéjà dans l’enfant (1, 2, puis 6) sont sautées. Lorsqu’on arrive à la « dernière » ville dusecond parent (7) on revient à la première (3).

Listing 9.2 – OX_crossover.c Implantation de l’opérateur de croisement OX préservantl’ordre d’une sous-séquencevo id OX_crossover ( i n t n , /∗ Number o f c i t i e s ∗ /

const i n t p1 [ ] , const i n t p2 [ ] , /∗ Parent s o l u t i o n s ∗ /i n t c h i l d [ ] )

i n t i , j , temp ,point2 , point1 , /∗ Por t i on o f p1 between po in t1 and po in t2 i s copied ∗ /n r_ inse r ted ; /∗ Counter o f elements i nse r t ed i n the c h i l d ∗ /

i n t ∗a l ready_ inse r ted ; /∗ Mark o f elements a l ready inse r t ed ∗ /

a l ready_ inse r ted = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;f o r ( i = 0 ; i < n ; i ++)

a l ready_ inse r ted [ i ] = 0 ;

/∗ Randomly generate the p o r t i o n o f p1 t h a t i s copied i n c h i l d ∗ /po in t2 = u n i f (1 , n−2);po in t1 = u n i f (1 , n−3);i f ( po in t1 >= po in t2 ) temp = po in t2 ;

po in t2 = ++po in t1 ;po in t1 = temp ;

/∗ Copy the p o r t i o n o f p1 at the beginning o f c h i l d ∗ /f o r ( i = 0 ; i < point2−po in t1 +1; i ++) c h i l d [ i ] = p1 [ i +po in t1 ] ;

a l ready_ inse r ted [ c h i l d [ i ] ] = 1 ;/∗ Find i n p2 the l a s t element i nse r t ed i n c h i l d ∗ /f o r ( j = 0 ; p2 [ j ] != c h i l d [ po int2−po in t1 ] ; j ++) /∗ j u s t increment j ∗ /

/∗ I n s e r t the remaining elements i n ch i l d , i n the order o f appearance i n p2 ∗ /n r_ inse r ted = point2−po in t1 + 1;f o r ( i = j ; n r_ inse r ted < n ; i ++)

i f ( ! a l ready_ inse r ted [ p2 [ i%n ] ] ) c h i l d [ n r_ inse r ted ] = p2 [ i%n ] ;

a l ready_ inse r ted [ p2 [ i%n ] ] = 1 ;n r_ inse r ted ++;

f r ee ( a l ready_ inse r ted ) ;

/∗ OX_crossover ∗ /

Page 198: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

196 APPRENDRE PAR LES SOLUTIONS

Coû

t 135

130

125

120

115

110

105

100100 1’000 10’000 100’000

Générations

Taux de mutation de 1%Taux de mutation de 2%Taux de mutation de 5%Pas de mutation

FIGURE 9.8 – Influence du taux de mutation sur la qualité des solutions produitesen fonction du nombre de boucles générationnelles réalisées. Seule la valeur de lameilleure solution de la population est représentée, en fonction du nombre d’itérationsde la boucle générationnelle. L’algorithme favorise les meilleures solutions de la po-pulations au moyen d’opérateurs de sélection pour la reproduction et de survie. Sansmutation, la population converge relativement rapidement vers des individus tous sem-blables et de mauvaise qualité. Plus le taux de mutation est élevé, plus la convergenceest lente, ce qui permet d’obtenir de meilleures solutions.

9.2.3 Opérateur de mutation

Les opérateurs de mutations peuvent être décrits de façon simple dans lecontexte de ce livre : il s’agit d’appliquer de façon aléatoire à la solution, uneou plusieurs modifications locales, comme décrit dans le chapitre 4 qui y estconsacré.

L’opérateur de mutation a deux rôles : tout d’abord, la modification localepeut améliorer la solution, ensuite, même si cette dernière n’est pas amélio-rée, elle ralentit la convergence globale de l’algorithme par renforcement dela diversité génétique de la population. En effet, sans cet opérateur, la popula-tion ne peut que perdre en diversité. Par exemple, les opérateurs de croisementprésentés plus haut recopient systématiquement les parties identiques des pa-rents chez l’enfant. Ainsi, certains gènes vont prendre le dessus par rapport àd’autres qui disparaissent avec l’élimination de solutions par l’opérateur de sé-lection pour la survie.

La figure 9.8 illustre l’influence du taux de mutations pour un problème oùl’on recherche une permutation de n éléments. Dans cette figure, un taux demutation de 5% signifie qu’il y a cette proportion d’éléments qui sont échangésaléatoirement dans une solution.

Page 199: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.2 ALGORITHMES GÉNÉTIQUES 197

Listing 9.3 – mutate.c Implantation d’un opérateur de mutation pour des problèmessur des permutations./∗ Mutat ion opera tor f o r permutat ion perform muta t ion_ra te∗n /2 random swaps ∗ /vo id mutate ( i n t n , /∗ Permutat ion s ize ∗ /

double mutat ion_rate ,i n t p [ ] ) /∗ Permutat ion to mutate ∗ /

i n t i , nr_mutat ions ;nr_mutat ions = ( i n t ) ( muta t ion_ra te ∗ n / 2 . 0 ) ;f o r ( i = 0 ; i < nr_mutat ions ; i ++)

swap(&p [ u n i f (0 , n−1)] , & p [ u n i f (0 , n−1) ] ) ;

Le code 9.3 donne une implantation d’un opérateur de mutation pour desproblèmes sur des permutations.

9.2.4 Sélection pour la survie

Le dernier opérateur-clé des algorithmes est celui de la sélection pour lasurvie, qui a pour but de ramener la population à sa taille initiale de µ indivi-dus, après que l’on ait généré λ nouvelles solutions. Plusieurs politiques desélection ont été imaginées, selon les valeurs choisies pour les paramètres µet λ.

Remplacement générationnel

La politique la plus simple pour sélectionner les individus qui survivrontest de générer le même nombre d’enfant qu’il y a d’individus dans la popula-tion (λ = µ). La population au début de la nouvelle boucle générationnelle estconstituée uniquement des enfants, la population initiale disparaissant. Avec untel choix, il est nécessaire de disposer d’un opérateur de sélection pour la re-production qui favorise les meilleures solutions. Cela signifie que les meilleursindividus pourront participer à la création de plusieurs enfants, alors que cer-tains des plus mauvais seront exclus du processus de reproduction.

Stratégie d’évolution

La stratégie d’évolution (µ, λ) consiste à générer un grand nombre d’en-fants (λ > µ) et de ne conserver pour la génération suivante que les µ enfantsles plus performants. La population est donc intégralement changée d’une ité-ration de la boucle générationnelle à la suivante. Cette stratégie entraîne unbiais dans le choix des meilleurs individus d’une génération à l’autre, et elle estcompatible avec un opérateur de sélection pour la reproduction non discrimi-nant.

Remplacement stationnaire

Une technique également fréquemment rencontrée est de faire évoluer pro-gressivement la population, avec un faible nombre d’enfants la rejoignant àchaque boucle générationnelle. Une stratégie est de générer λ = 2 enfants àchaque génération, enfants qui vont remplacer leurs parents

Page 200: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

198 APPRENDRE PAR LES SOLUTIONS

Coû

t

100

105

110

115

120

125

130

135

140

10 100 1’000 10’000 100’000

µ = 5

µ = 10

µ = 20

µ = 50

µ = 100µ = 200µ = 500

Générations

FIGURE 9.9 – Influence de la taille de la population sur la qualité des solutions. Lorsquela population est trop petite, elle converge très rapidement avec peu de chances d’at-teindre de bonnes solutions. Inversement, une grande population convergera très len-tement, mais vers de meilleures solutions.

Remplacement élitiste

Une autre stratégie plus agressive est de considérer l’ensemble des µ + λsolutions disponibles en fin de boucle générationnelle et de ne conserver queles µ meilleures pour la génération suivante. Cette stratégie a été utilisée pourproduire la figure 9.9 où l’on a représenté l’évolution de la meilleure solution dela populations pour diverses valeurs de µ.

Le code 9.4 implante un remplacement élitiste dans le cas où λ = 1, c’est-à-dire lorsqu’à chaque génération on ne produit qu’un enfant qui va remplacer,s’il n’est pas encore plus mauvais, la plus mauvaise solution de la population.Dans ce code, on a ajouté une gestion élémentaire de la population qui ne doitcomporter que des individus différents. Pour simplifier le test de l’égalité entredeux solutions, ces dernières sont discriminées uniquement sur la base deleur longueur : deux solutions dont les longueurs ne sont pas significativementdifférentes sont considérées comme identiques.

Page 201: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.3 ALGORITHMES MÉMÉTIQUES 199

Listing 9.4 – insert_child.c Implantation d’un remplacement élitiste lorsqu’à chaquegénération on ne produit qu’un enfant. Cette procédure implante une gestion élémen-taire de la population où tous les individus doivent avoir des évaluations différentes.

i n t i n s e r t _ c h i l d ( i n t n ,const i n t c h i l d [ ] , /∗ Chi ld to i n s e r t ∗ /double leng th_ch i l d , /∗ Chi ld f i t n e s s ∗ /i n t pop_size , /∗ Popula t ion s ize ∗ /i n t ∗∗popula t ion , /∗ Popula t ion to update ∗ /double leng th [ ] , /∗ Fi tness o f i n d i v i d u a l s ∗ /i n t order [ ] ) /∗ I n d i v i d u a l s number , from best to worst ∗ /

i n t ∗ rank = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ; /∗ Rank of i n d i v i d u a l s ∗ /i n t ch i l d_ rank = 0;i n t i ;

f o r ( i = 0 ; i < pop_size ; i ++)rank [ order [ i ] ] = i ;

/∗ Find the rank o f the c h i l d ∗ /ch i l d_ rank = 0;f o r ( i = 0 ; i < pop_size ; i ++)

i f ( l eng th [ i ] < l e n g t h _ c h i l d )ch i l d_ rank ++;

i f ( ch i l d_ rank < pop_size−1) /∗ The c h i l d i s not dead−born ∗ / /∗ May the c h i l d be i d e n t i c a l to an i n d i v i d u a l o f the popu la t ion ? ∗ /

i f ( fabs ( leng th [ order [ ch i l d_ rank ] ] − l e n g t h _ c h i l d ) > eps i l on &&( ch i l d_ rank == 0 | |fabs ( leng th [ order [ ch i ld_rank −1]] − l e n g t h _ c h i l d ) > eps i l on ) )

/∗ The c h i l d not present i n the popula t ion , i t rep lace worst i n d i v i d u a l ∗ /f o r ( i = 0 ; i < n ; i ++)

popu la t ion [ order [ pop_size −1] ] [ i ] = c h i l d [ i ] ;l eng th [ order [ pop_size−1]] = l e n g t h _ c h i l d ;f o r ( i = 0 ; i < pop_size ; i ++)

i f ( rank [ i ] >= ch i l d_ rank )rank [ i ] ++ ;

rank [ order [ pop_size−1]] = ch i l d_ rank ;f o r ( i = 0 ; i < pop_size ; i ++)

order [ rank [ i ] ] = i ;e lse

ch i l d_ rank = pop_size ; /∗ Chi ld a l ready present i n popula t ion , ignore i t ∗ /

r e t u r n ch i l d_ rank ;

9.3 Algorithmes mémétiques

Les algorithmes génétiques présentent deux défauts majeurs : première-ment, rien ne permet d’assurer que la meilleure solution trouvée ne puisseêtre améliorée par une simple modification locale, telle que vue au chapitre 4.Secondement, la diversité de la population décroît au fur et à mesure des ité-rations de la boucle générationnelle pour finalement ne comporter que desclones du même individu.

Pour contrer ces deux inconvénients, [?] a imaginé ce qu’il a appelé lesalgorithmes mémétiques. Le premier de ces défaut est résolu par l’applicationd’une recherche locale après avoir produit une solution-enfant. La manière laplus simple d’éviter la duplication d’individus dans la population est d’éliminerimmédiatement les doublons.

Le code 9.5 illustre une implantation simple d’un algorithme mémétiquepour le problème du voyageur de commerce où les enfants sont améliorés à

Page 202: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

200 APPRENDRE PAR LES SOLUTIONS

l’aide d’une recherche locale basée sur les chaînes d’éjections et où ils ne rem-placent la plus mauvaise solution de la population que s’ils sont de meilleurequalité que cette dernière et que leur évaluation est différente de toutes cellesde la population, ce qui assure de ne pas créer de doublons. Cet algorithmen’implante qu’une version élémentaire d’un algorithme mémétique. Une ges-tion de la population proposée par [?] est un peu plus évoluée. Ces auteurssuggèrent de d’évaluer, pour chaque solution produite, une mesure de simila-rité avec les solutions contenues dans la population. Les solution trop similairessont écartées pour maintenir une diversité suffisante, pour que l’algorithme neconverge pas prématurément.

Archipels de populations D’autres techniques de gestion de la populationplus sophistiquées ont été imaginées, notamment celle basée sur des îlots.L’idée est de faire évoluer plusieurs populations de faible taille indépendam-ment pendant un nombre restreint d’itérations. Du fait de leur faible taille, laqualité des solutions de chaque population s’améliore rapidement. Pour ne pasperdre de diversité, des individus sont transférés régulièrement d’une popula-tion à une autre, ce qui atténue les problèmes de consanguinité.

Page 203: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.3 ALGORITHMES MÉMÉTIQUES 201

Listing 9.5 – tsp_GA.c Implantation d’un algorithme mémétique pour le problème duvoyageur de commerce. Cet algorithme utilise un opérateur de sélection pour la repro-duction basé sur le rang. Après génération d’un enfant, ce dernier est amélioré par unerecherche locale (méthode des chaînes d’éjections) et il remplace immédiatement laplus mauvaise solution de la population. Cet algorithme comporte trois paramètres :le nombre µ de solutions dans la population, le nombre de boucles générationnelles àeffectuer et le taux de mutations.double tsp_GA ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance mat r i x ∗ /i n t bes t_so l [ ] , /∗ Out So lu t i on re turned ∗ /i n t mu, /∗ Size o f the popu la t ion ∗ /i n t generat ions , /∗ Number o f c h i l d r e n generated ∗ /double muta t ion_ra te )

i n t i , j , nr_generat ion , /∗ I nd i ces ∗ /p1 , p2 ; /∗ Rank of parents chosen ∗ /

double l e n g t h _ c h i l d ; /∗ Fi tness o f c h i l d ∗ /i n t ∗ c h i l d = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ; /∗ ch i l d−s o l u t i o n ∗ /i n t ∗ order ; /∗ Inverse o f the rank ∗ /double∗ l eng th = ( double ∗) mal loc ( ( s i z e _ t )mu ∗ s i z e o f ( double ) ) ; /∗ Sol . f i t . ∗ /i n t ∗∗ popu la t ion ; /∗ Popula t ion o f s o l u t i o n s ∗ /

order = ( i n t ∗) mal loc ( ( s i z e _ t )mu ∗ s i z e o f ( i n t ) ) ;popu la t ion = ( i n t ∗∗) mal loc ( ( s i z e _ t )mu ∗ s i z e o f ( i n t ∗ ) ) ;f o r ( i = 0 ; i < mu; i ++)

popu la t ion [ i ] = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;

/∗ Generate a popu la t ion o f random s o l u t i o n s ∗ /f o r ( i =0; i < mu; i ++) generate_random_permutation ( n , popu la t ion [ i ] ) ;

l eng th [ i ] = tsp_ leng th ( n , d , popu la t ion [ i ] ) ;/∗ Order the i n d i v i d u a l by decreasing f i t n e s s and assign them a rank ∗ /f o r ( i = 0 ; i < mu; i ++)

order [ i ] = i ;

f o r ( i = 0 ; i < mu−1; i ++)f o r ( j = i +1; j < mu; j ++)

i f ( l eng th [ order [ i ] ] > leng th [ order [ j ] ] )swap(& order [ i ] , &order [ j ] ) ;

p r i n t f ( "GA i n i t i a l popu la t ion %f \ n " , leng th [ order [ 0 ] ] ) ;

/∗∗∗∗∗∗∗∗∗ Main GA loop ∗∗∗∗∗∗∗∗ /f o r ( nr_generat ion = 0; nr_generat ion < generat ions ; nr_genera t ion ++) /∗ Generate a new c h i l d ∗ /

p1 = rank_based_select ion (mu) ;p2 = rank_based_select ion (mu) ;OX_crossover ( n , popu la t ion [ order [ p1 ] ] , popu la t ion [ order [ p2 ] ] , c h i l d ) ;mutate ( n , mutat ion_rate , c h i l d ) ;l e n g t h _ c h i l d = tsp_ leng th ( n , d , c h i l d ) ;tsp_LK ( n , d , ch i l d , & l e n g t h _ c h i l d ) ;i f ( i n s e r t _ c h i l d ( n , ch i l d , l eng th_ch i l d , mu, popu la t ion , length , order ) == 0)

p r i n t f ( "GA %d %f \ n " , nr_generat ion , l e n g t h _ c h i l d ) ;/∗ Return the best s o l u t i o n o f the popu la t ion ∗ /f o r ( i = 0 ; i < n ; i ++)

bes t_so l [ i ] = popu la t ion [ order [ 0 ] ] [ i ] ;

f r ee ( c h i l d ) ;f r ee ( leng th ) ;f r ee ( order ) ;f o r ( i =0; i < mu; i ++)

f r ee ( popu la t ion [ i ] ) ;f r ee ( popu la t ion ) ;r e t u r n tsp_ leng th ( n , d , bes t_so l ) ;

Page 204: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

202 APPRENDRE PAR LES SOLUTIONS

FIGURE 9.10 – La recherche par dispersion brise le tabou d’une reproduction limitée aucroisement de deux solutions.

9.4 Recherche par dispersion

La recherche par dispersion est presque aussi ancienne que les algo-rithmes génétiques. [?] a proposé cette technique dans le cadre de la pro-grammation linéaire en nombres entiers. À l’époque, il brisait certains tabous,comme le fait de pouvoir représenter une solution sous une forme naturelle etnon codée par un vecteur binaire ou de croiser plus de deux solutions entreelles, comme illustré en figure 9.10.

Les principales idées de la recherche par dispersion sont les suivantes,présentées en opposition aux algorithmes génétiques traditionnels :

Population initiale dispersée Plutôt que de générer une population initialede grande taille et aléatoirement, cette dernière est générée de façondéterministe et aussi dispersée que possible dans l’espace des solutionspotentielles. Ces dernières ne sont pas forcément réalisables, mais ellesle sont rendues par un opérateur de réparation/amélioration.

Représentation naturelle des solutions Les solutions sont représentéessous un format naturel et non forcément avec des vecteurs binaires detaille donnée.

Combinaison de plusieurs solutions Plus de deux solutions peuventconcourir à la production d’une nouvelle solution potentielle. Plutôt quede reposer sur une grande population et un opérateur de sélection pourla reproduction, la recherche par dispersion essaie toutes les combinai-sons possibles des individus de la population, qui doit donc être limitée àquelques dizaines de solutions.

Opérateur de réparation/amélioration Du fait de la représentation naturelledes solutions, le « croisement » simultané de combinaisons de plusieursindividus ne produit pas forcément une solution réalisable. Un opérateurde réparation projetant une solution potentielle irréalisable dans l’espacedes solutions admissibles est donc prévu. Cet opérateur peut égalementau passage améliorer une solution réalisable, notamment à l’aide d’unerecherche locale.

Gestion de la population Une population de référence, de faible taille, est dé-composée en un sous-ensemble de solutions-élites et d’autres solutions

Page 205: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.4 RECHERCHE PAR DISPERSION 203

aussi différentes que possible des solutions-élites.

La trame de la recherche par dispersion est donnée par l’algorithme 9.2.L’avantage de cette trame est son faible nombre de paramètres : µ pour la taillede la population de référence et E < µ pour l’ensemble des solutions-élites.De plus, la valeur de µ doit être limitée à une vingtaine, puisqu’il faut combinerun nombre de solutions potentielles croissant exponentiellement avec µ ; celasignifie également que le nombre E de solutions-élites sera de quelques unitésà une dizaine.

En revanche, cette trame est très incomplète, car elle ne précise pas com-ment générer des solutions aussi dispersées que possible, ni comment com-biner plusieurs solutions entre elles ou encore comment implanter la répara-tion et l’amélioration des solutions potentielles. Toutes ces choses sont dépen-dantes du problème traité et doivent être adaptées au cas par cas. Le para-graphe suivant donne un exemple d’adaptation pour le problème du sac demontagne.

Algorithme 9.2 : Trame d’une recherche par dispersion.

Données : Taille µ de la population complète, E taille du sous-ensembledes solutions-élites

Résultat : Meilleure solution trouvée1 Générer de façon systématique une (grande) population P de solutions

potentielles aussi dispersées que possible;2 répéter3 Réparer et améliorer les solutions de P pour les rendre admissibles

au moyen de l’opérateur de réparation/amélioration;4 Éliminer de P les solutions identiques;5 Identifier les E meilleures de la population, qui seront conservées

dans la population de référence comme solutions-élites;6 Identifier de P les µ− E solutions qui sont les plus différentes des

solutions-élites, elles seront conservées dans la population deréférence;

7 Combiner de toutes les manières possible les µ solutions de lapopulation de référence pour obtenir 2µ − µ− 1 nouvelles solutionspotentielles;

8 Joindre les solutions potentielles à l’ensemble de référence pourobtenir la nouvelle population P de l’itération suivante;

9 jusqu’à ce que la population ne change plus;

Illustration de la recherche par dispersion pour le sac de montagne

Pour illustrer comment les diverses options de la trame de la recherche pardispersion peuvent être adaptées à un problème particulier, considérons unexemple de sac de montagne :

max r = 11s1 + 10s2 + 9s3 + 12s4 + 10s5 + 6s6 + 7s7 + 5s8 + 3s9 + 8s10

sous 33s1 + 27s2 + 16s3 + 14s4 + 29s5 + 30s6 + 31s7 + 33s8 + 14s9 + 18s10 6 100contraintes si ∈ 0, 1(i = 1, . . . , 10)

(9.1)

Page 206: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

204 APPRENDRE PAR LES SOLUTIONS

Solution Val. Solution Val.potentielle réparée/améliorée

1 (1,1,1,1,1,1,1,1,1,1) 81 (0,1,1,1,0,0,0,0,1,1) 422 (1,0,1,0,1,0,1,0,1,0) 40 (1,0,1,1,1,0,0,0,0,0) 423 (1,0,0,1,0,0,1,0,0,1) 38 (1,0,0,1,0,0,1,0,0,1) 384 (1,0,0,0,1,0,0,0,1,0) 24 (1,0,0,1,1,0,0,0,1,0) 365 (1,0,0,0,0,1,0,0,0,0) 17 (1,0,1,1,0,1,0,0,0,0) 386 (0,0,0,0,0,0,0,0,0,0) 0 (0,1,1,1,0,0,0,0,0,1) 397 (0,1,0,1,0,1,0,1,0,1) 41 (0,1,0,1,0,1,0,0,0,1) 368 (0,1,1,0,1,1,0,1,1,0) 43 (0,1,1,1,1,0,0,0,1,0) 449 (0,1,1,1,0,1,1,1,0,1) 57 (0,1,1,1,0,0,0,0,1,1) 42 = solution 1

10 (0,1,1,1,1,0,1,1,1,1) 64 (0,1,1,1,0,0,0,0,1,1) 42 = solution 1

Tableau 9.1 – Population initiale dispersée P pour le problème du sac de montagne 9.1et résultat de l’application de l’opérateur de réparation/amélioration sur les solutionspotentielles. Celles qui ne sont pas réalisables sont mises en évidence, de même queles E = 3 solutions-élites.

Population initiale Les solutions de ce problèmes sont donc des vecteurs bi-naires de 10 composantes. Pour générer un ensemble de solutions potentiellesaussi dispersées que possible, on peut choisir de mettre tous les objets dansle sac, ou un sur deux, ou un sur trois, etc. et, pour chaque solution potentielleainsi générée, la solution complémentaire. Naturellement, toutes ces solutionsne sont pas admissibles. En particulier, la solutions comportant tous les objetsne satisfait pas la contrainte de volume du sac ; sa solution complémentaire,de revenu nul est la plus mauvaise possible.

Il faut donc appliquer un opérateur de réparation/amélioration à ces solu-tions potentielles. On peut procéder ainsi : tant que la solution n’est pas admis-sible, retirer l’objet ayant le plus mauvais rapport revenu/volume. Une solutionadmissible peut être améliorée gloutonnement, en lui ajoutant l’objet avec lemeilleur rapport revenu/volume tant que la capacité du sac le permet.

Ainsi, on obtient la population de solutions donnée dans le tableau 9.1

Création de l’ensemble de référence Les solutions 9 et 10 sont identiquesà la première solution ; elle sont donc éliminées. Si l’on choisit un ensemble deE = 3 solutions-élites, ces dernières seront les solutions 1, 2 et 8. En suppo-sant que l’on veuille se ramener à un ensemble de référence de µ = 5 solutionsil faut ajouter deux solutions aux trois solutions-élites parmi les solutions 3 à 7.Les deux solutions qui compléteront l’ensemble de référence sont déterminéesen évaluant une mesure de dissimilarité avec les solutions-élites. Une manièrede faire est de considérer la plus petite distance de Hamming entre la solutioncandidate et les solutions-élites, ce qui est illustré par le tableau 9.2.

Combinaison de solutions Finalement, il faut implanter un opérateur per-mettant de créer une solution potentielle en combinant plusieurs solutions del’ensemble de référence. Supposons que l’on désire combiner les solutions 3,7 et 8 de valeur respective 38, 36 et 44. Une possibilité est de considérer lessolutions comme des vecteurs numériques et d’en faire une combinaison li-néaire. On est tenté d’attribuer un poids d’autant plus grand à une solutions

Page 207: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.5 CHEMIN DE LIAISON 205

Solution Distance de Hamming Distancecandidate Élite 1 Élite 2 Élite 8 minimale

3 (1,0,0,1,0,0,1,0,0,1) 5 4 7 44 (1,0,0,1,1,0,0,0,1,0) 5 2 3 25 (1,0,1,1,0,1,0,0,0,0) 5 2 5 26 (0,1,1,1,0,0,0,0,0,1) 1 4 3 17 (0,1,0,1,0,1,0,0,0,1) 3 6 5 3

Tableau 9.2 – Détermination des solutions de la population qui sont aussi différentesque possible des solutions-élites. Si l’on veut un ensemble de référence de µ = 5solutions, on retiendra les solutions 3 et 7 en plus des 3 solutions-élites car ce sontcelles qui maximisent la plus petite distance avec une de ces dernières.

qu’elle est bonne. Une idée est donc d’attribuer un poids de 3838+36+44 à la so-

lution 3, de 3638+36+44 à la solution 7 et de 44

38+36+44 à la solution 8. Le vecteurainsi obtenu est arrondi pour le projeter vers des valeurs binaires :

0.322·(1, 0, 0, 1, 0, 0, 1, 0, 0, 1)+

0.305·(0, 1, 0, 1, 0, 1, 0, 0, 0, 1)+

0.373·(0, 1, 1, 1, 1, 0, 0, 0, 1, 0)

=(0.322, 0.678, 0.373, 1.000, 0.373, 0.305, 0.322, 0.000, 0.373, 0.627)

Arrondi(0, 1, 0, 1, 0, 0, 0, 0, 0, 1)

9.5 Chemin de liaison

La technique du chemin de liaison a été proposée par [?] dans le cadrede la recherche avec tabou sous l’appellation de path relinking « chemin dere-liaison ». L’idée est de mémoriser un certain nombre de bonnes solutionstrouvées par une recherche avec tabous. Parmi ces solutions, on en choisitdeux, qui ont été reliées entre elles avec la recherche tabou par un cheminallant de solution en solution voisine et de les relier à nouveau par un nouveauchemin, plus court.

Cette technique peut être implantée indépendamment d’une recherche avectabous puisqu’il suffit de disposer d’une population de solutions et d’une struc-ture de voisinage pour l’implanter. On choisit donc dans la population une solu-tion de départ et une solution d’arrivée. On évalue tous les voisins de la solutionde départ qui se rapprochent de la solutions d’arrivée. Parmi ces voisins, onidentifie celui qui a la meilleure évaluation et on recommence le processus àpartir de celui-ci jusqu’à ce qu’on arrive à la solution d’arrivée. Avec un peu dechance, une des solutions intermédiaires améliore la meilleure solution trou-vée. La technique du chemin de liaison est illustrée en figure 9.11

Il existe différentes versions de la techniques du chemin de liaison : Onpeut parcourir le chemin dans les deux sens en renversant le rôle des solu-tions de départ et d’arrivée ; on peut appliquer une méthode d’amélioration àchaque solution intermédiaire ; finalement, on peut modifier alternativement lasolution de départ et celle d’arrivée et s’arrêter lorsqu’elles se rencontrent enune solution intermédiaire.

Page 208: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

206 APPRENDRE PAR LES SOLUTIONS

Solution de départ

Solution d’arrivée

FIGURE 9.11 – Chemin de liaison. On transforme progressivement une solution de dé-part —ici, la permutation de 7 éléments (1, 2, 3, 4, 5, 6, 7)— en une solution d’arrivée(4, 6, 3, 2, 5, 1, 7) avec une structure de voisinage. À chaque étape, on évalue l’ensembledes solutions voisines qui permettent de se rapprocher de la solution d’arrivée et onchoisit celle dont la fonction-objectif est la meilleure.

Page 209: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.5 CHEMIN DE LIAISON 207

Listing 9.6 – tsp_path_relinking.c Implantation d’un chemin de liaison pour le pro-blème du voyageur de commerce. À chaque itération, on identifie un mouvement detype 3-opt qui va incorporer au moins un arc de la solution d’arrivée à la solution cou-rante.vo id t s p _ p a t h _ r e l i n k i n g ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance mat r i x ∗ /const i n t t a r g e t _ s o l u t i o n [ ] , /∗ A r r i v a l s o l u t i o n ∗ /i n t so l [ ] , /∗ S t a r t i n g s o l u t i o n −−> Best on the path ∗ /double ∗best_cost ) /∗ S t a r t i n g s o l u t i o n cost −> best ∗ /

i n t i , j , k , /∗ C i t i e s t r i e d f o r 3−opt move not going away from t a r g e t ∗ /i_kept , j_kept , k_kept ; /∗ c i t i e s i , j , k kept f o r 3−opt move ∗ /

double de l ta , bes t_de l ta ; /∗ T r i a l and re ta ined cost d i f f e r e n c e ∗ /double cost = ∗best_cost ; /∗ Cost o f cu r ren t s o l u t i o n ∗ /i n t ∗succ_target , ∗succ , ∗pred ; /∗ A l t e r n a te s o l u t i o n s rep resen ta t i on ∗ /

succ_targe t = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;succ = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;pred = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;

f o r ( i = 0 ; i < n ; i ++) /∗ Bu i l d i ng a l t e r n a t e s o l u t i o n rep resen ta t i on ∗ / succ_target [ t a r g e t _ s o l u t i o n [ i ] ] = t a r g e t _ s o l u t i o n [ ( i +1)%n ] ;

succ [ so l [ i ] ] = so l [ ( i +1)%n ] ; /∗ Current so lu t i on , i n i t i a l l y : so l ∗ /pred [ so l [ ( i +1)%n ] ] = so l [ i ] ;

do i = 0 ;

bes t_de l ta = i n f i n i t e ;do i f ( succ [ i ] != succ_target [ i ] ) /∗ t r y i−succ [ i ] −> i−succ_targe t [ i ] ∗ /

j = pred [ succ_target [ i ] ] ; /∗ j−succ [ j ] not i n t a r g e t s o l u t i o n ∗ /f o r ( k = succ_targe t [ i ] ; k != i ; k = succ [ k ] )

i f ( succ [ k ] != succ_targe t [ k ] ) de l t a = d [ i ] [ succ [ j ] ] + d [ j ] [ succ [ k ] ] + d [ k ] [ succ [ i ] ]

−d [ i ] [ succ [ i ] ] − d [ j ] [ succ [ j ] ] − d [ k ] [ succ [ k ] ] ;i f ( de l t a < bes t_de l ta ) bes t_de l ta = de l t a ;

i _kep t = i ; j _kep t = j ; k_kept = k ;

i = succ [ i ] ;

wh i le ( bes t_de l ta >= 0.0 && i ) ; /∗ Impr . move found or a l l moves evaluated ∗ /

i f ( bes t_de l ta < i n f i n i t e ) /∗ A move has been found ∗ / i = i _kep t ; j = j _kep t ; k = k_kept ;

cost += bes t_de l ta ;pred [ succ [ i ] ] = k ; pred [ succ [ j ] ] = i ; pred [ succ [ k ] ] = j ;succ [ j ] = succ [ k ] ; succ [ k ] = succ [ i ] ; succ [ i ] = succ_targe t [ i ] ;i f ( cost < ∗best_cost ) ∗best_cost = cost ;

so l [ 0 ] = 0 ;f o r ( i = 0 ; i < n−1; i ++)

so l [ i +1] = succ [ so l [ i ] ] ;

wh i le ( bes t_de l ta < i n f i n i t e ) ;f r ee ( succ_targe t ) ; f r ee ( succ ) ; f r ee ( pred ) ;

/∗ t s p _ p a t h _ r e l i n k i n g ∗ /

9.5.1 GRASP-PR

Une méthode utilisant les principales composantes des méta-heuristiques(construction, recherche locale et gestion d’une population de solution) tout enrestant relativement simple et avec peu de paramètres est la méthode GRASP-PR (procédure de recherche gloutonne adaptative avec chemin de liaison) de

Page 210: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

208 APPRENDRE PAR LES SOLUTIONS

[?]. L’idée est de générer une population P de µ solutions différentes à l’aided’une méthode constructive gloutonne biaisée avec un paramètre α (voir l’al-gorithme 6.6), solutions qui sont améliorées à l’aide d’une recherche locale.Ensuite, on répète Imax fois une boucle durant laquelle on construit glouton-nement et avec un biais une nouvelle solution qui est améliorée avec une re-cherche locale. On tire ensuite aléatoirement une autre solution de P et onapplique un chemin de liaison entre ces deux solutions. La meilleure solutiondu chemin est ajoutée à P si elle est strictement meilleure qu’une des solutionde P et qu’elle est n’y figure pas déjà. La nouvelle solution remplace la solu-tion de P qui est la plus différente d’elle-même tout en étant plus mauvaise.L’algorithme 9.3 donne la trame de GRASP-PR.

Algorithme 9.3 : Trame de GRASP-PR.

Données : Structure de voisinage N , paramètres Imax, 0 6 α 6 1, µRésultat : Meilleure solution trouvée

1 P ← ∅;2 tant que |P | < µ faire3 Générer une solution s avec une méthode gloutonne biaisée avec α;4 s′ ← minimum local associé à s et N ;5 si s′ /∈ P alors6 P ← P ∪ s′

7 pour Imax itérations faire8 Générer une solution s avec une méthode gloutonne biaisée avec α;9 s′ ← minimum local associé à s et N ;

10 Choisir aléatoirement une solution s” ∈ P ;11 Appliquer un chemin de liaison entre s′ et s” en identifiant la

meilleure solution s∗ du chemin;12 si s∗ /∈ P et s∗ strictement meilleur qu’une solution de P alors13 s∗ remplace la solutions de P la plus différente de s∗ et plus

mauvaise que s∗

9.6 Essaims particulaires

Les essaims particulaires sont un peu particuliers car ils ont été conçusd’abord pour l’optimisation continue. Il s’agit de faire évoluer une population departicules, dont la position représente une solution du problème sous la formed’un vecteur de nombres réels, interagissant entre elles. Chaque particule aune vitesse en plus de sa position et est attirée ou repoussée par les autresparticules.

Ce type de méthodes, proposées par [?], simulent le comportement d’ani-maux vivants en essaim, comme des oiseaux, des insectes ou des poissonset qui adoptent un comportement favorisant leur survie, que ce soit pour senourrir, se défendre vis-à-vis de prédateurs ou encore entreprendre une migra-tion. Chaque individu de l’essaim est influencé par ceux se trouvant dans sonvoisinage, et éventuellement aussi d’un meneur.

Page 211: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.6 ESSAIMS PARTICULAIRES 209

Traduit en termes d’optimisation, chaque particule représente une solutiondu problème avec sa qualité mesurée par une fonction-utilité. Une particule sedéplace à une certaine vitesse dans une direction donnée, mais elle est dé-viée par son environnement : si dans le voisinage il existe une autre particule-solution de meilleure qualité, elle sera attirée dans sa direction. Ainsi, chaquesolution énumérée par l’algorithme peut être associée au sommet d’un graphe.Les arêtes de ce graphe correspondent aux solutions qui s’influencent mutuel-lement.

Il existe diverses variantes de méthodes à essaims particulaires, se diffé-renciant par le graphe d’influence et les formules utilisées pour calculer lesdéviations de la vitesse des particules. Dans sa version la plus simple, uneparticule p d’un ensemble en comportant P est influencée par seulement deuxsolutions : la meilleure solution −→g trouvée par l’ensemble des particules et lameilleure solution −→mp qu’elle a elle-même trouvée. La nouvelle vitesse de laparticule est un vecteur dont chaque composante est modifiée avec des poidsaléatoirement tirés entre 0 et φ1 dans la direction de −→mp et tirés entre 0 et φ2

dans la direction de −→g , où φ1 et φ2 sont des paramètres de la méthode. Deplus, une particule a une inertie ω également donnée en paramètre. L’algo-rithme 9.4 donne une trame simple d’essaim particulaire.

Algorithme 9.4 : Trame d’une méthode à essaim particulaires.

Données : Fonction f : [−→x min,−→x max] ∈ Rn → R à minimiser,paramètres P, ω, φ1, φ2, Imax

Résultat : −→g1 f∗ =∞;2 pour p = 1 . . . P faire3 −→sp ←

−−−→unif(−→x min,−→x max);

4 −→mp ← −→sp ;5 −→vp ←

−−−→unif(−→x min −−→x max,−→x max −−→x min);

6 si f∗ > f(−→sp) alors7 f∗ ← f(−→sp);8 −→g ← −→sp ;

9 pour Imax itérations faire10 −→u1 ←

−−−→unif(

−→0 ,−→1 ) ;

11 −→u2 ←−−−→unif(

−→0 ,−→1 ) ;

12 −→vp ← ω−→vp + φ1−→mp · I · −→u1 + φ2

−→g · I · −→u2;13 −→sp ← −−→max(

−−→min(−→sp +−→vp,−→x max),−→x min);

14 si f(−→mp) > f(−→sp) alors15 −→mp ← −→sp ;16 si f∗ > f(−→sp) alors17 f∗ ← f(−→sp);18 −→g ← −→sp ;

Certains auteurs suggèrent de ne choisir que le paramètre d’inertie ω etde poser φ1 = φ2 = (1+ω)2

2 . D’autres, suggèrent de ne pas multiplier les com-posantes des meilleures solutions −→g et −→mp par une matrice diagonale dont

Page 212: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

210 APPRENDRE PAR LES SOLUTIONS

les cœfficients sont tirés uniformément entre 0 et 1 pour dévier le vecteur devitesse, mais de multiplier ces solutions par une matrice de rotation aléatoire.

Page 213: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

9.6 ESSAIMS PARTICULAIRES 211

Exercies

Exercice 9.1. Algorithme génétique pour fonction à une dimension Ondoit optimiser une fonction f d’une variable entière x, 0 6 x < 2n. Dans lecadre d’un algorithme génétique doté d’un opérateur de croisement de deuxsolutions, comment coder x sous la forme d’un vecteur binaire ?

Exercice 9.2. Séquences d’inversions Une permutation p des éléments de1 à n peut être représentée par une séquence d’inversions s, où si compte lenombre d’éléments de p1, . . . , pk = i qui sont plus grand que i. Par exemple, lapermutation p = (2, 4, 6, 1, 5, 3) a pour séquence d’inversion s = (3, 0, 3, 0, 1, 0).À quelles permutations correspondent les séquences d’inversions (4, 2, 3, 0, 1, 0)et (0, 0, 3, 1, 2, 0) ? Donner des conditions nécessaires et suffisantes pour qu’unvecteur s soit une séquence d’inversions d’une permutation. Est-ce que lesopérateurs de croisement standards 1-point, 2-points et uniformes peuvent êtreappliqués aux séquences d’inversions ? Comment les séquences d’inversionspeuvent être utilisées dans le contexte de la recherche par dispersion ?

Exercice 9.3. Sélection basée sur le rang Quelle est la probabilité de lafonction rank_based_selection(m) donnée dans l’algorithme 9.1 de retournerune valeur v donnée ?

Exercice 9.4. Ajustement de paramètre d’un algorithme génétique Ajusterla taille de la population et le taux de mutation de la procédure tsp_GA donnéepar le code 9.5 si cette dernière génère en tout 5n enfants.

Exercice 9.5. Recherche par dispersion pour le sac de montagne On consi-dère le problème du sac à dos 9.1 de la section 9.4. Effectuer la premièreitération d’une recherche par dispersion pour ce problème : génération de lanouvelle population, réparation/amélioration, mise à jour d’une population de 5solutions comportant 3 élites.

Page 214: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

212 APPRENDRE PAR LES SOLUTIONS

Page 215: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

Annexe A

Codes

Cette annexe donne les codes C des quelques procédures utilitaires appa-raissant dans divers algorithmes présentés dans ce livre.A.1 A.2

Listing A.1 – random_generators.c Génération de nombres pseudo-aléatoires.rando() n’a pas de paramètres et retourne un double uniformément réparti entre 0et 1 et unif retourne un entier entre deux bornes données en paramètres. Générationd’un tableau de n entiers rempli avec une permutation aléatoires des nombres 0 à n−1./∗ Random number ]0 , 1 ] generator , proposed by Lecuyer , rep lace bad rand ( ) ∗ /double rando ( vo id ) s t a t i c i n t x10 = 12345 , x11 = 67890 , x12 = 13579 , /∗ i n i t i a l value ∗ /

x20 = 24680 , x21 = 98765 , x22 = 43210; /∗ of seeds ∗ /const i n t m = 2147483647; const i n t m2 = 2145483479;const i n t a12= 63308; const i n t q12=33921; const i n t r12 =12979;const i n t a13=−183326; const i n t q13=11714; const i n t r13 =2883;const i n t a21= 86098; const i n t q21=24919; const i n t r21= 7417;const i n t a23=−539608; const i n t q23= 3976; const i n t r23 =2071;const double invm = 4.656612873077393e−10;i n t h , p12 , p13 , p21 , p23 ;h = x10 / q13 ; p13 = −a13∗( x10−h∗q13)−h∗r13 ;h = x11 / q12 ; p12 = a12∗( x11−h∗q12)−h∗r12 ;i f ( p13 < 0) p13 = p13 + m; i f ( p12 < 0) p12 = p12 + m;x10 = x11 ; x11 = x12 ; x12 = p12−p13 ; i f ( x12 < 0) x12 = x12 + m;h = x20 / q23 ; p23 = −a23∗( x20−h∗q23)−h∗r23 ;h = x22 / q21 ; p21 = a21∗( x22−h∗q21)−h∗r21 ;i f ( p23 < 0) p23 = p23 + m2; i f ( p21 < 0) p21 = p21 + m2;x20 = x21 ; x21 = x22 ; x22 = p21−p23 ; i f ( x22 < 0) x22 = x22 + m2;i f ( x12 < x22 ) h = x12 − x22 + m; e lse h = x12 − x22 ;i f ( h == 0) r e t u r n ( 0 . 5 ) ;e lse r e t u r n ( h∗invm ) ;

/∗∗∗∗∗∗∗∗∗ Returns a random i n t e g e r between low and high ( inc luded ) ∗∗∗∗∗∗∗∗∗∗∗ /i n t u n i f ( i n t low , i n t h igh ) r e t u r n low + ( i n t ) ( ( double ) ( high − low + 1) ∗ rando ( ) ) ;

vo id swap ( i n t ∗ a , i n t ∗ b ) i n t temp = ∗a ; ∗a = ∗b ; ∗b = temp ;

/∗∗∗∗∗∗∗ Generate a random array o f n i n t w i th a l l elements o f [ 0 , n−1] ∗∗∗∗∗∗∗ /vo id generate_random_permutation ( i n t n , i n t p [ ] ) i n t i ;

f o r ( i = 0 ; i < n ; i = i +1) p [ i ] = i ;f o r ( i = 0 ; i < n−1; i = i +1) swap(&p [ i ] , &p [ u n i f ( i , n−1) ] ) ;

Page 216: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

214 CODES

Listing A.2 – tsp_length.c Calcul de la longueur d’une tournée d’un voyageur de com-merce. Une solution est donnée sous la forme d’un tableau comportant l’ordre dans le-quel les villes sont parcourues. Parfois une autre représentation d’une solution, commeun tableau qui donne les villes qui succèdent, serait meilleure.double tsp_ leng th ( i n t n , /∗ Number o f c i t i e s ∗ /

double ∗∗d , /∗ Distance mat r i x ∗ /const i n t s o l u t i o n [ ] ) /∗ Order o f the c i t i e s ∗ /

i n t i ;double sum = d [ s o l u t i o n [ n−1] ] [ s o l u t i o n [ 0 ] ] ;f o r ( i = 0 ; i < n−1; i ++)

sum += d [ s o l u t i o n [ i ] ] [ s o l u t i o n [ i + 1 ] ] ;r e t u r n sum;

Le code A.3 donne un exemple de programme complet permettant de testerdivers codes présentés dans ce livre pour traiter des problèmes de voyageurde commerce. La méthode de résolution ici utilisée est GRASP, qui utilise elle-même une recherche locale basée sur les listes d’éjections, ainsi que d’autresfonctions utilitaires. Une valeur de eplsilon permettant d’éviter des problèmesnumériques est de prendre 10−14 fois la plus grande distance séparant 2 villes.

Le code A.4 permet quant à lui de tester l’algorithme FANT.Le code A.5 permet quant à lui de tester un algorithme mémétique.Le code A.6 permet de tester une recherche avec tabous.Le code A.7 permet de tester une recherche locale multi-objectifs. Ces

codes ont été simplifiés de sorte qu’un utilisateur peu habitué à la program-mation en C, notamment en ce qui concerne la compilation séparée, n’ait qu’àcompiler le programme de test qu’il désire pour obtenir un exécutable fonction-nel. Leur style de programmation n’est donc pas exemplaire !

Page 217: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

215

Listing A.3 – test_tsp_GRASP.c Programme de test de quelques codes pour le voya-geur de commerce donnés dans ce livre. Les données du problème sont générée aléa-toirement, mais il est important de s’assurer que la matrice des distances est symé-trique, car la recherche locale ne fonctionne correctement que pour ce type de pro-blèmes./∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗Programme f o r t e s t i n g procedures presented i n :

E . T a i l l a r d , I n t r o d u c t i o n aux métaheur is t iques , 2017Compile : gcc −O2 t e s t _ t s p . c −lm∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /# inc lude < s t d i o . h># inc lude < s t d l i b . h>

# de f ine i n f i n i t e 9.99e99double eps i l on ;# inc lude <math . h># inc lude " random_generators . c " /∗ L i s t i n g A.1 ∗ /# inc lude " tsp_ leng th . c " /∗ L i s t i n g A.2 ∗ /# inc lude " tsp_LK . c " /∗ L i s t i n g 4.4 ∗ /# inc lude " tsp_GRASP . c " /∗ L i s t i n g 6.3 ∗ /

i n t main ( vo id )

i n t n , i , j ;i n t ∗ s o l u t i o n ;double ∗∗d is tance ;

double ∗x , ∗y ;

p r i n t f ( "Number o f c i t i e s : \ n " ) ;scanf ( "%d " ,&n ) ;

s o l u t i o n = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;d is tance = ( double∗∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ∗ ) ) ;f o r ( i = 0 ; i < n ; i ++)

d is tance [ i ] = ( double ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ) ) ;

x = ( double ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ) ) ;y = ( double ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ) ) ;

f o r ( i = 0 ; i < n ; i ++) x [ i ] = rando ( ) ; y [ i ] = rando ( ) ;

eps i l on = 0 . 0 ;f o r ( i = 0 ; i < n−1; i ++)

f o r ( j = i +1; j < n ; j ++) i f ( i != j ) d is tance [ i ] [ j ] = d is tance [ j ] [ i ] =

s q r t ( ( x [ i ]−x [ j ] )∗ ( x [ i ]−x [ j ] ) + ( y [ i ]−y [ j ] )∗ ( y [ i ]−y [ j ] ) ) ;i f ( eps i l on < d is tance [ i ] [ j ] )

eps i l on = d is tance [ i ] [ j ] ;

eps i l on ∗= 1.0e−14;

tsp_GRASP( n , d is tance , so lu t i on , 100 , 0 . 8 ) ;

f o r ( i = 0 ; i < n ; i ++)f r ee ( d is tance [ i ] ) ;

f r ee ( s o l u t i o n ) ;

r e t u r n EXIT_SUCCESS;

Page 218: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

216 CODES

Listing A.4 – test_tsp_FANT.c Programme de test d’une méthode inspirée des colo-nies de fourmi artificielles./∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗Programme f o r t e s t i n g procedures presented i n :

E . T a i l l a r d , I n t r o d u c t i o n aux métaheur is t iques , 2015Compile : gcc −O2 test_tsp_FANT . cExample o f execut ion r e s u l t :

Number o f c i t i e s :30Number o f FANT i t e r a t i o n s , FANT parameter :50 30FANT 0 1.761522FANT 1 1.660644FANT 2 1.646723FANT 3 1.616719FANT 4 1.614217FANT 28 1.607204Cost o f s o l u t i o n found wi th FANT 1.607204e+00∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /# inc lude < s t d i o . h># inc lude < s t d l i b . h># inc lude <math . h>

# de f ine i n f i n i t e 9.99e99double eps i l on ;# inc lude " random_generators . c " /∗ L i s t i n g A.1 ∗ /# inc lude " tsp_ leng th . c " /∗ L i s t i n g A.2 ∗ /# inc lude " tsp_LK . c " /∗ L i s t i n g 4.4 ∗ /# inc lude " i n i t _ u p d a t e _ t r a i l . c " /∗ L i s t i n g 7.1 ∗ /# inc lude " g e n e r a t e _ s o l u t i o n _ t r a i l . c " /∗ L i s t i n g 7.2 ∗ /# inc lude " tsp_FANT . c " /∗ L i s t i n g 7.3 ∗ /

i n t main ( vo id )

i n t n , i , j , f a n t _ i t e r a t i o n s , fant_parameter ;i n t ∗ s o l u t i o n ;double ∗∗d is tance ;double leng th ;

p r i n t f ( "Number o f c i t i e s : \ n " ) ;scanf ( "%d " ,&n ) ;p r i n t f ( "Number o f FANT i t e r a t i o n s , FANT parameter : \ n " ) ;scanf ( "%d%d " ,& f a n t _ i t e r a t i o n s , &fant_parameter ) ;

s o l u t i o n = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;d is tance = ( double∗∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ∗ ) ) ;f o r ( i = 0 ; i < n ; i ++)

d is tance [ i ] = ( double ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ) ) ;

eps i l on = 0 . 0 ;f o r ( i = 0 ; i < n−1; i ++)

f o r ( j = i +1; j < n ; j ++) d is tance [ i ] [ j ] = d is tance [ j ] [ i ] = rando ( ) ;

i f ( eps i l on < d is tance [ i ] [ j ] )eps i l on = d is tance [ i ] [ j ] ;

eps i l on ∗= 1.0e−14;

leng th = tsp_FANT ( n , d is tance , so lu t i on , fant_parameter , f a n t _ i t e r a t i o n s ) ;p r i n t f ( " Cost o f s o l u t i o n found wi th FANT %e \ n " , leng th ) ;

f o r ( i = 0 ; i < n ; i ++)f r ee ( d is tance [ i ] ) ;

f r ee ( d is tance ) ;f r ee ( s o l u t i o n ) ;

r e t u r n EXIT_SUCCESS;

Page 219: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

217

Listing A.5 – test_tsp_GA.c Programme de test d’un algorithme mémétique pour pro-blème de voyageur de commerce dont la matrice des distance est symétrique et géné-rée aléatoirement./∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗Programme f o r t e s t i n g procedures presented i n :

E . T a i l l a r d , I n t r o d u c t i o n aux métaheur is t iques , 2015Compile : gcc −O2 test_tsp_GA . c −lmExample o f execut ion r e s u l t :

Number o f c i t i e s :30Size o f the popula t ion , mutat ion rate , number o f generat ions :10 0.01 60GA i n i t i a l popu la t ion 11.592710GA 0 1.707681GA 2 1.696093GA 4 1.614217GA 59 1.607204Cost o f s o l u t i o n found wi th GA: 1.607204e+00∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /# inc lude < s t d i o . h># inc lude < s t d l i b . h># inc lude <math . h>

# de f ine i n f i n i t e 9.99e99double eps i l on ;# inc lude " random_generators . c " /∗ L i s t i n g A.1 ∗ /# inc lude " tsp_ leng th . c " /∗ L i s t i n g A.2 ∗ /# inc lude " tsp_LK . c " /∗ L i s t i n g 4.4 ∗ /# inc lude " rank_based_select ion . c " /∗ L i s t i n g 9.1 ∗ /# inc lude " OX_crossover . c " /∗ L i s t i n g 9.2 ∗ /# inc lude " mutate . c " /∗ L i s t i n g 9.3 ∗ /# inc lude " i n s e r t _ c h i l d . c " /∗ L i s t i n g 9.4 ∗ /# inc lude " tsp_GA . c " /∗ L i s t i n g 9.5 ∗ /

i n t main ( vo id )

i n t n , i , j , popu la t ion_s ize , nr_generat ions ;i n t ∗ s o l u t i o n ;double ∗∗d is tance ;double length , muta t ion_ra te ;

p r i n t f ( "Number o f c i t i e s : \ n " ) ;scanf ( "%d " ,&n ) ;p r i n t f ( " Size o f the popula t ion , mutat ion rate , number o f generat ions : \ n " ) ;scanf ( "%d%l f%d " ,& popu la t ion_s ize , &mutat ion_rate , &nr_generat ions ) ;

s o l u t i o n = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;d is tance = ( double∗∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ∗ ) ) ;f o r ( i = 0 ; i < n ; i ++)

d is tance [ i ] = ( double ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ) ) ;

eps i l on = 0 . 0 ;f o r ( i = 0 ; i < n−1; i ++)

f o r ( j = i +1; j < n ; j ++) d is tance [ i ] [ j ] = d is tance [ j ] [ i ] = rando ( ) ;

i f ( eps i l on < d is tance [ i ] [ j ] )eps i l on = d is tance [ i ] [ j ] ;

eps i l on ∗= 1.0e−14;

leng th = tsp_GA ( n , d is tance , so lu t i on , popu la t ion_s ize ,nr_generat ions , muta t ion_ra te ) ;

p r i n t f ( " Cost o f s o l u t i o n found wi th GA: %e \ n " , leng th ) ;

f o r ( i = 0 ; i < n ; i ++)f r ee ( d is tance [ i ] ) ;

f r ee ( d is tance ) ;f r ee ( s o l u t i o n ) ;

r e t u r n EXIT_SUCCESS;

Page 220: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

218 CODES

Listing A.6 – test_tsp_TS.c Programme de test d’une recherche avec tabous pourproblème de voyageur de commerce dont la matrice des distance est symétrique etgénérée aléatoirement./∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗Programme f o r t e s t i n g procedures presented i n :

E . T a i l l a r d , I n t r o d u c t i o n aux métaheur is t iques , 2015Compile : gcc −O2 test_tsp_TS . cExample o f execut ion :Number o f c i t i e s :30Number o f tabu i t e r a t i o n s , min . and max . tabu_durat ion , pena l ty :200 4 20 0.0005TS 1 11.855969TS 2 10.474485TS 3 8.993716. . .TS 17 1.828523TS 21 1.698364TS 26 1.650980TS 156 1.629700TS 157 1.610270TS 158 1.607204Cost o f s o l u t i o n found wi th TS 1.607204e+00∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /# inc lude < s t d i o . h># inc lude < s t d l i b . h>

# de f ine i n f i n i t e 9.99e99double eps i l on ;# inc lude " random_generators . c " /∗ L i s t i n g A.1 ∗ /# inc lude " tsp_ leng th . c " /∗ L i s t i n g A.2 ∗ /# inc lude " perform_move_update . c " /∗ L i s t i n g 8.1 ∗ /# inc lude " tsp_TS . c " /∗ L i s t i n g 8.2 ∗ /

i n t main ( vo id )

i n t n , i , j , i t e r a t i o n s , min_tabu , max_tabu ;i n t ∗ s o l u t i o n ;double ∗∗d is tance ;double f req_pena l ty , leng th ;

p r i n t f ( "Number o f c i t i e s : \ n " ) ;scanf ( "%d " ,&n ) ;p r i n t f ( "Number o f tabu i t e r a t i o n s , min . and max . tabu_durat ion , pena l ty : \ n " ) ;scanf ( "%d%d%d%l f " ,& i t e r a t i o n s , &min_tabu , &max_tabu , & f req_pena l t y ) ;

s o l u t i o n = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;d is tance = ( double∗∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ∗ ) ) ;f o r ( i = 0 ; i < n ; i ++)

d is tance [ i ] = ( double ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ) ) ;

eps i l on = 0 . 0 ;f o r ( i = 0 ; i < n−1; i ++)

f o r ( j = i +1; j < n ; j ++) d is tance [ i ] [ j ] = d is tance [ j ] [ i ] = rando ( ) ;

i f ( eps i l on < d is tance [ i ] [ j ] )eps i l on = d is tance [ i ] [ j ] ;

eps i l on ∗= 1.0e−14;

generate_random_permutation ( n , s o l u t i o n ) ;leng th = tsp_ leng th ( n , d is tance , s o l u t i o n ) ;tsp_TS ( n , d is tance , so lu t i on , &length ,

i t e r a t i o n s , min_tabu , max_tabu , f req_pena l t y ) ;p r i n t f ( " Cost o f s o l u t i o n found wi th TS %e \ n " , leng th ) ;

f o r ( i = 0 ; i < n ; i ++)f r ee ( d is tance [ i ] ) ;

f r ee ( d is tance ) ;f r ee ( s o l u t i o n ) ;

r e t u r n EXIT_SUCCESS;

Page 221: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

219

Listing A.7 – test_tsp_3opt_pareto.c Programme de test d’une recherche locale Pa-reto pour problème de voyageur de commerce dont la matrice des distance est généréealéatoirement. Pour un problème à 20 villes et 3 objectifs, ce programme génère uneapproximation de l’ensemble Pareto comportant 3290 solutions. Comme l’implantationest fortement récursive, il faut redimensionner au besoin la pile de récursion./∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗Programme f o r t e s t i n g procedures presented i n :

E . T a i l l a r d , I n t r o d u c t i o n aux métaheur is t iques , 2017Compile : gcc −O2 tes t_ tsp_3opt_pare to . c∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /# inc lude < s t d l i b . h># inc lude < s t d i o . h># inc lude < s t r i n g . h># de f ine i n f i n i t e 9.99e99# def ine K 3 /∗ Number o f o b j e c t i v e s ∗ /double eps i l on ;# inc lude " random_generators . c " /∗ L i s t i n g A.1 ∗ /# inc lude " KD_tree_add_scan . c " /∗ L i s t i n g 4.6 ∗ /# inc lude " KD_tree_delete . c " /∗ L i s t i n g 4.7 ∗ /# inc lude " tsp_3opt_pareto . c " /∗ L i s t i n g 4.5 ∗ /# inc lude " KD_tree_update_pareto . c " /∗ L i s t i n g 4.8 ∗ /

i n t main ( vo id )

i n t n , i , j , k ;i n t ∗succ ;double ∗∗∗d is tance ;POINT lengths ;NODE ∗pa re to _ f r on t = NULL ;

p r i n t f ( "Number o f c i t i e s : \ n " ) ;scanf ( "%d " ,&n ) ;

succ = ( i n t ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( i n t ) ) ;

d is tance = ( double∗∗∗) mal loc ( ( s i z e _ t )K ∗ s i z e o f ( double ∗∗ ) ) ;f o r ( k = 0 ; k < K; k++) d is tance [ k ] = ( double∗∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ∗ ) ) ;

f o r ( i = 0 ; i < n ; i ++)d is tance [ k ] [ i ] = ( double ∗) mal loc ( ( s i z e _ t ) n ∗ s i z e o f ( double ) ) ;

f o r ( k = 0 ; k < K; k++) /∗ Generate d is tance matr ices ∗ /f o r ( i = 0 ; i < n ; i ++)

f o r ( j = 0 ; j < n ; j ++)d is tance [ k ] [ i ] [ j ] = rando ( ) ;

eps i l on = 1.0e−13;

f o r ( i = 0 ; i < n ; i ++) /∗ Generate a s t a r t i n g s o l u t i o n ∗ /succ [ i ] = ( i +1)%n ;

f o r ( k = 0 ; k < K; k++) /∗ Compute i t s costs f o r a l l o b j e c t i v e s ∗ /

leng ths [ k ] = 0 ;f o r ( i = 0 ; i < n ; i ++)

leng ths [ k ] += d is tance [ k ] [ i ] [ succ [ i ] ] ;tsp_3opt_pareto ( n , d is tance , succ , lengths , &pa re to_ f r on t ) ;KD_scan_and_delete ( pa re to_ f ron t , n ) ;

f o r ( k = 0 ; k < K; k++)

f o r ( i = 0 ; i < n ; i ++)f r ee ( d is tance [ k ] [ i ] ) ;

f r ee ( d is tance [ k ] ) ;f r ee ( d is tance ) ;f r ee ( succ ) ;

r e t u r n EXIT_SUCCESS;

Page 222: Introduction aux métaheuristiquesmistic.heig-vd.ch/taillard/master/metaheuristiques/...Introduction aux métaheuristiques c É.D. Taillard 25 septembre 2017 2017 ii 2017 Introduction

T_Alg

25se

ptembr

e 2017

220 CODES