• Aucun résultat trouvé

Méthodes de la programmation linéaire adaptées à la résolution du MMKP

La programmation linéaire est un outil très puissant de la recherche opérationnelle. Il permet de résoudre les problèmes d'optimisation dont la fonction objectif et les contraintes sont linéaires. Lorsque les domaines des variables sont discrets, on parle alors des pro- blèmes d'optimisation combinatoire dont le MMKP fait partie. Ces problèmes sont très dif- ciles à résoudre vu leur nature combinatoire qui nécessite un calcul exhaustif notamment

I.5 : Conclusion 31 pour les problèmes de grande taille (nombre de variables et/ou contraintes trop élevé). Toutefois, il existe des méthodes robustes specialisées dans la résolution de ces problèmes telles que la méthode branch-and-price employant la technique de génération de colonnes et la méthode branch-and-cut employant la méthode de génération de contraintes. Dans le chapitre qui suit, nous allons présenter de façon générale ces méthodes sur lesquelles nous nous appuyons principalement pour résoudre le MMKP.

I.5 Conclusion

Dans ce chapire, nous avons présenté un tour d'horizon de quelques problèmes de type knapsack. Nous avons entamé notre présentation par le problème du knapsack classique (unitaire) puis nous avons discuté une de ses variantes qui est le problème du knapsack multidimensionnel à choix multiple. Nous avons cité certains domaines d'application de ces problèmes et nous avons présenté quelques méthodes de résolution approchée et exacte qui leurs sont associées. Puis nous avons parlé des méthodes qu'on a adaptées dans cette thèse pour résoudre le problème de knapsack multidimensionnel à choix multiple. Ces méthodes, consacrées principalement à résoudre les problèmes d'optimisation combina- toire de grande taille, sont basiques dans la programmation linéaire et la programmation linéaire en nombres entiers. Elles feront l'objet du chapitre suivant.

Chapitre II

Techniques et méthodologie de la

programmation linéaire

Dans ce chapitre nous présentons un recueil des méthodes basiques de la programma- tion linéaire. Nous commençons par des dénitions et un bref rappel sur l'algorithme de Simplexe. Puis nous décrivons la méthode de génération de colonnes et nous détaillons la méthode du Branch-and-Price. Nous présentons ensuite un tour d'horizon de méthode des plans de coupes et les concepts de base de la théorie polyèdrale et nous terminerons ce chapitre par la présentation d'un algorithme simplié de Branch-and-Cut.

II.1 Introduction

La programmation linéaire représente une partie importante de la programmation mathématique. Elle consiste à modéliser des problèmes issus d'applications réelles en un langage formel et présente ensuite des méthodes pour les résoudre.

Durant la seconde guerre mondiale, George Dantzig formula en tant que problèmes li- néaires (PL), de nombreux problèmes militaires, relatifs à l'organisation et à la distribu- tion des munitions et des vivres, ainsi qu'aux déploiements des troupes militaires. Puis, en 1947, il mit au point un algorithme pour résoudre les problèmes linéaires, connu sous le nom de l'algorithme de Simplexe. Ce dernier, est considéré comme une méthode de points- frontières puisqu'il projette de faire des déplacements le long des arêtes du polyèdre déni par les contraintes du PL jusqu'à atteindre l'optimum. La découverte et l'implémentation

34 Chapitre II : Techniques et méthodologie de la programmation linéaire de l'algorithme de Simplexe, à cette époque, contribua grandement au renforcement de la valeur de la programmation mathématique. Cependant, s'il se révèle très ecace en moyenne, Klee et Minty [48] montrèrent en 1972 que cet algorithme n'est pas polynomial. Ceci a suscité un regain d'intérêt pour la recherche d'algorithmes polynomiaux de résolu- tion des programmes linéaires.

La méthode ellipsoïde, developpée en 1979 par khachian [45], fut le premier algorithme de ce type montrant alors que les problèmes de programmation linéaires sont polynomiaux. Son idée principale consiste à utiliser une suite d'ellipsoïdes de volume décroissant mais contraint de contenir la solution optimale du problème à résoudre à chaque itération. Bien que plus rapide que l'algorithme de Simplexe sur les problèmes de Klee et Minty, l'algorithme ellipsoïde reste bien plus lent sur les problèmes réels.

En 1984, un autre algorithme polynomial basé sur les principes de géométrie projective et de programmation non linéaire à été développé par Karmakar [43]. Il s'agit d'une méthode de points intérieurs dont le principe est de chercher des points, à l'intérieur du polyèdre des contraintes, permettant de se diriger rapidement vers le sommet optimal.

Depuis la découverte de cet algorithme, la recherche dans le domaine de la programmation mathématique a connu un nouvel élan et plusieurs algorithmes tels que la méthode de barrière dérivée de ce dernier virent le jour. Actuellement, ces méthodes commencent à concurrencer l'algorithme de Simplexe sur certains problèmes de grande taille car elles ont tendance à nécessiter moins d'itérations que ce dernier bien que chaque itération soit plus longue.

Néanmoins, l'algorithme de Simplexe demeure, non seulement un outil très performant pour la résolution des PL mais, en outre, il se distingue exclusivement par la richesse de l'interprétation géométrique et économique qu'il fournit ainsi qu'à sa capacité à fournir des solutions de base, très importantes dans les approches de décompositions ou encore dans des procédures de ré-optimisation itératives (Lebbar [52]).

Dans ce chapitre nous présentons quelques dénitions élémentaires de la programma- tion linéaire ainsi qu'un bref rappel sur l'algorithme de Simplexe. Puis, nous décrivons la méthode de génération de colonnes qui dérive de ce dernier et qui est destinée à résoudre des programmes linéaires contenant un nombre important de variables. Nous discutons également la méthode de génération des contraintes qui est une version duale de la mé-

II.2 : Dénitions 35