METHODES D’OPTIMISATION COMBINATOIRE IRENE CHARON, OLIVIER HUDRY, ANNE GERMA RESUME Cet ouvrage propose une introduction aux méthodes généralement utilisées dans le domaine de l'optimisation combinatoire. Son objectif est double : proposer un ensemble de modélisations classiques, à l'aide principalement de la théorie des graphes et de la programmation linéaire ; décrire un ensemble de méthodes exactes ou approchées pour résoudre les problèmes d'optimisation ainsi modélisés Composé de trois parties (programmation linéaire, algorithmes dans les graphes, méthodes d'optimisation combinatoire), l'ouvrage propose de nombreux exercices, tous corrigés. Issu d'un cours de première et deuxièmes années de l'Ecole Nationale Supérieure des Télécommunications, il s'adresse aux élèves des écoles d'ingénieurs, aux étudiants de deuxième cycle, ainsi qu'à tous ceux (ingénieurs, chercheurs...) qui souhaitent se familiariser avec les méthodes d'optimisation combinatoire le plus souvent utilisées. TABLE DES MATIERES Introduction 1 I. L'algorithme du simplexe I.1.Introduction I.2.L'algorithme du simplexe appliqué à un exemple I.3.La dégénérescence et le cyclage I.4.Recherche d'un dictionnaire réalisable I.5.Annexe : la forme du pivot I.6.Exercices 5 5 7 10 13 15 16 II. Forme matricielle de la méthode du simplexe II.1 Généralités II.2.Version matricielle d'une itération de la méthode du simplexe II.2.1.Recherche d'une variable entrante II.2.2.Recherche d'une variable sortante II.2.3.Actualisation II.2.4.Résumé II.3.Un exemple d'application de la méthode II.4.Application au problème de découpe II.5.Exercice 19 19 21 21 22 22 22 23 26 31 III. Dualité III.1.Définition du problème dual III.2.Théorème de la dualité III.3.Le théorème des écarts complémentaires : un certificat d'optimalité III.4.La signification économique du dual III.5.Problème dual-réalisable III.6.Exercices 33 33 34 37 38 40 41 IV. Généralités sur les graphes. Arbre couvrant de poids minimum IV.1.Introduction à la théorie des graphes et définitions IV.2.Représentation des graphes en machine IV.2.1.Matrice d'adjacence (sommets-sommets) IV.2.2.Tableau de listes d'adjacence IV.3.Complexité d'un algorithme IV.4.Le problème de l'arbre couvrant de poids minimum IV.4.1.Définition du problème IVA.2.Une application en réseaux 43 43 44 45 45 46 47 47 47 IVA.2.Une application en réseaux IV.4.3.Une application en traitement d'images IV.4.4.Algorithme de Kruskal IV.4.5.Algorithme de Prim IV.5.Exercices 47 48 48 50 52 V. Problèmes de plus courts chemins V.1.Définition des différents problèmes V.1.1.Définitions nécessaires à ce chapitre V.1.2.Problèmes V.2.Plus courts chemins d'un sommet à tous les autres : cas des valuations positives V.2.1.Motivation V.2.2.Algorithme de Dijkstra V.3.Plus courts chemins d'un sommet à tous les autres : cas des graphes sans circuit V.3.1.Motivation V.3.2.Algorithme de Bellman V.4.Plus courts chemins d'un sommet à tous les autres : cas général V.4.1.Motivation V.4.2.Algorithme de Ford V.4.3.Algorithme général de Ford-Dantzig V.5.Plus courts chemins de tout sommet à tout sommet : cas général V.6.Exercices 55 55 55 56 57 57 58 60 60 60 62 62 62 63 64 65 VI. Parcours de graphes VI.1.Définition d'un algorithme de « parcours de graphe » VI.1.1.Cas orienté VI.1.2.Cas non orienté VI.1.3.Complexité VI.2.Les parcours « marquer-examiner » VI.2.1.Généralités VI.2.2.Résultat d'un parcours « marquer-examiner » selon une file le parcours en largeur VI.2.3.Résultat d'un parcours « marquer-examiner » suivant une pile VI.3.Les parcours en profondeur VI.3.1.Le cas orienté VI.3.2.Le cas non orienté VI.4 Applications des parcours en profondeur VI.4.1.Application à la détermination des composantes fortement connexes VI.4.2.Application à la détermination des sommets d'articulation d'un graphe non orienté VI.4.3.Application à la détermination des composantes 2‑connexes d'un graphenon orienté VI.5 Exercices 69 69 69 72 72 73 73 74 74 74 74 76 78 78 80 82 84 VII. Flot maximum et coupe de capacité minimum VII.I.Introduction, théorème du flot et de la coupe VII.1.1.Introduction VII.1.2.Définitions, notations et problèmes VII.1.3.Résultats théoriques VII.1.4.Lien avec la programmation linéaire VII.2.Algorithme de Ford et Fulkerson VII.2.1.Chaîne augmentante VII.2.2.Description de l'algorithme de Ford et Fulkerson VII.2.3.Un exemple VII.2.4.Preuve, convergence et complexité de l'algorithme VII.3.Compléments : algorithme de Dinic et algorithme de Busacker et Gowen VII.3.1.Graphe d'écart VII.3.2.Algorithme de Dinic VII.3.3.Algorithme de Busacker et Gowen VII.4.Exercice 85 85 85 86 86 87 88 88 89 91 92 93 94 94 95 96 VIII. Applications de la théorie des flots VIII.1.Application à la détermination des connectivités d'un graphe VIII.1.1.Forte arc-connectivité d'un graphe orienté 97 97 97 VIII.1.2.Détermination de l'arête connectivité d'un graphe non orienté VIII.1.3.Forte connectivité d'un graphe orienté, connectivité d'un graphe non orienté VIII.2.Couplage maximum dans un graphe biparti VIII.2.1.Un exemple et quelques définitions VIII.2.2.Modélisation d'un problème d'affectation et solution du problème des mariages VIII.3.Exercice IX. Le problème de transport IX.1.Position du problème IX.2.Arbres réalisables IX.3.Recherche d'une solution optimale à partir d'une solution réalisable IX.4.Recherche d'un arbre réalisable 99 100 101 101 102 103 105 105 107 108 112 IX.4.Recherche d'un arbre réalisable IX.5.Modélisation et résolution à l'aide de la théorie des flots IX.6.Exercices 112 113 114 X. Complexité d'un problème X.1.Présentation et premières définitions X.1.1.Problème du voyageur de commerce X.1.2.Taille d'une instance X.1.3.Machine de Turing et complexité d'un algorithme X.1.4.Problème de reconnaissance X.2.Classes P et NP ; problèmes NP-complets X.2.1.La classe P X.2.2.La classe NP X.2.3.Problèmes NP‑complets X.2.4.Problèmes NP‑difficiles X.3.Exercices 117 117 117 118 118 121 123 123 123 124 128 129 XI. Méthodes par séparation et évaluation XI.1.Introduction XI.2.Problème du sac à dos : méthodes heuristiques XI.2.1.Première heuristique XI.2.2.Seconde heuristique XI.3.Méthode par séparation et évaluation pour le problème du sac à dos XI.3.1.Principe de séparation XI.3.2.Principe d'évaluation et utilisation de la borne XI.3.3.Stratégie de développement XI.3.4.Application au problème de sac à dos XI4.Application au problème du voyageur de commerce XI.4.1.Forme linéaire en 0‑1 du problème du voyageur de commerce XI.4.2.Définition d'une fonction d'évaluation XI.4.3.Description d'une méthode par séparation et évaluation XI.5.Exercices 131 131 132 133 133 133 134 135 136 137 138 138 139 139 140 XII. La programmation dynamique XII.l.Les problèmes de la partition et du sac à dos XII.1.1.Le problème de la partition XII.1.2.Résolution du problème de la partition par la programmation dynamique XII.1.3.Résolution du problème du sac à dos par la programmation dynamique XII.2.Un problème d'entrepôt XII.3.Le problème du voyageur de commerce XII.4.Complexité de la méthode utilisée XII.5.Exercices 141 141 141 142 143 144 146 148 149 XIII. Relaxation la grangienne XIII.1.Position du problème XIII.2.Résolution du problème dual XIII.2.1.Principe de la méthode XIII.2.2.Etude du problème de chemin de coût minimum à une contrainte XIII.3.Maximum du minimum d'une famille de fonctions linéaires XIII.4.Exercice 153 153 155 155 157 161 163 XIV. Méthodes approchées définies par un voisinage XIV.1.Introduction XIV.1.1.La fable des randonneurs 165 165 165 XIV.1.2.Formulation du problème XIV.2.Principe des méthodes de descente (méthodes d'amélioration itérative) XIV.2.1.Voisinage d'une solution 167 167 168 XIV.2.2.Quelques voisinages habituels XIV.2.3.Exemple : le problème du voyageur de commerce XIV.2.4. Schéma général d'une descente XIV.2.5. Algorithmes gloutons XIV.2.6. Méthodes par partitionnement XIV.3. Le recuit simulé XIV.3.1. Une analogie avec la thermodynamique XIV.3.2. Schéma du recuit simulé XIV.3.3. Interprétation de cette méthode, appliquée au problème du voyageur de commerce XIV.3.4. Modèles de recuit XIV.3.5. Exemple d'application : le problème du voyageur de commerce euclidien XIV.4. La méthode Tabou XIV.4.1. Principe de la méthode Tabou XIV.4.2. Amélioration de la méthode Tabou XIV.4.3. Un exemple d'application : le partitionnement de graphes XIV.5. Exercices 168 169 170 171 172 173 173 174 176 177 180 181 181 183 183 185 XIV.5. Exercices 185 XV. Algorithmes génétiques XV.1. Introduction : de la génétique à l'algorithmique XV.2. Principe des algorithmes génétiques XV.2.1. Le codage XV.2.2. La sélection XV.2.3. Le croisement XV.2.4. La mutation XV.2.5. Autres opérateurs XV.3. La théorie des schémas XV.4. Application à un problème d'antennes XV.4.1. Codage XV.4.2. Croisement XV.4.3. Mutation XV.4.4. Résultats XV.5.Exercices 187 187 188 189 190 192 193 193 194 195 195 195 196 196 196 Corrigés des exercices 1.Chapitre I 2.Chapitre II 3.Chapitre III 4.Chapitre IV 5.Chapitre V 6.Chapitre VI 7.Chapitre VII 8.Chapitre VIII 9.Chapitre IX 10.Chapitre X 11.Chapitre XI 12.Chapitre XII 13.Chapitre XIII 14.Chapitre XIV 15.Chapitre XV 199 199 205 206 216 218 223 227 229 230 238 241 246 250 257 260 Bibliographie Index 263 265 TOP