Programmation linéaire

Transcription

Programmation linéaire
Programmation linéaire
1
Programmation linéaire
En mathématiques, les problèmes de programmation linéaire (PL) sont des problèmes d'optimisation où la fonction
objectif et les contraintes sont toutes linéaires. Néanmoins, la plupart des résultats présentés ici sont également vrais
si l'objectif est une fonction monotone croissante de chaque variable considérée. La programmation linéaire désigne
également la manière de résoudre les problèmes linéaires.
La programmation linéaire est un domaine central de l'optimisation, car les problèmes de PL sont les problèmes
d'optimisation les plus faciles - toutes les contraintes y étant linéaires. Beaucoup de problèmes réels de recherche
opérationnelle peuvent être exprimés comme un problème de PL. Pour cette raison un grand nombre d'algorithmes
pour la résolution d'autres problèmes d'optimisation sont fondés sur la résolution de problèmes linéaires.
Le terme programmation linéaire suppose que les solutions à trouver doivent être représentées en variables réelles.
S'il est nécessaire d'utiliser des variables discrètes dans la modélisation du problème, on parle alors de
programmation linéaire en nombres entiers (PLNE). Il est important de savoir que ces derniers sont nettement plus
complexes à résoudre que les PL à variables continues.
Exemple
Considérons un agriculteur qui possède des terres, de superficie égale à H hectares, dans lesquelles il peut planter du
blé et du maïs. L'agriculteur possède une quantité E d'engrais et I d'insecticide. Le blé nécessite une quantité E1
d'engrais par hectare et I1 d'insecticide par hectare. Les quantités correspondantes pour le maïs sont notées E2 et I2.
Soit P1 le prix de vente du blé et P2 celui du maïs. Si l'on note par x1 et x2 le nombre d'hectares à planter en blé et en
maïs, alors le nombre optimal d'hectares à planter en blé et en maïs peut être exprimé comme un programme linéaire:
(maximiser le revenu net)
(borne sur le nombre total d'hectares)
(borne sur la quantité d'engrais)
(borne sur la quantité d'insecticide)
(on ne peut pas planter un nombre négatif d'hectares)
Théorie
Comme l'exemple précédent le montre, la programmation consiste à déterminer disons n variables,
afin
de maximiser l'objectif linéaire
sous différentes contraintes, comme par exemple les m inégalités suivantes
pour i allant de 1 à m. De telles contraintes permettent d'inclure des contraintes de signe, comme par exemple
ou
. L'adoption de l'écriture matricielle de la forme standard donne
On peut, lors de la programmation linéaire, chercher à minimiser la fonction objectif. On se ramène au cas précédent
(la forme standard) en cherchant à maximiser
.
Programmation linéaire
2
D'un point de vue géométrique, les contraintes linéaires forment un polyèdre convexe. Si la fonction objectif est elle
aussi linéaire, tous les optima locaux sont également des optima globaux; cela reste vrai si elle est monotone
croissante sur chaque variable considérée, le cas linéaire ne représentant qu'un cas particulier dont la propriété n'est
d'ailleurs pas utilisée.
Il y a deux cas où il n'existe pas de solution optimale. Le premier est lorsque les contraintes se contredisent
mutuellement (par exemple
). Dans un tel cas, le polytope est vide et il n'y a pas de solution
optimale puisqu'il n'y a pas de solution du tout. Le PL est alors infaisable.
Le polyèdre peut également être non-borné dans la direction définie par la fonction objectif (par exemple
tel que
,
,
). Dans ce cas, il n'y a pas de solution optimale puisqu'il est possible de
construire des solutions satisfaisant les contraintes avec des valeurs arbitrairement élevées (ou basses) de la fonction
objectif.
En dehors de ces deux cas (qui sont finalement rares dans les problèmes pratiques), l'optimum est toujours atteint à
un sommet du polytope. Cependant, l'optimum n'est pas nécessairement unique: il est possible d'avoir un ensemble
de solutions optimales correspondant à une arête ou à une face du polytope, voire au polytope en entier.
Dualité
Tous les programmes linéaires peuvent s'écrire[1] sous la forme suivante:
Où
et
sont des vecteurs de taille
,
un vecteur de taille
, et
une matrice de taille
. Si on
désigne cette représentation sous le terme de forme primale, on désigne alors sous le terme de forme duale le
problème suivant:
Où
,
et
sont les mêmes et
un vecteur de taille
. (Note: )
Les deux problèmes sont très fortement liés. Si l'un d'entre eux possède une solution optimale, alors l'autre aussi. De
plus, les deux solutions ont alors la même valeur (w*=z*). Si l'un d'entre eux est non-borné, l'autre ne possède pas de
solution.
Outre son intérêt théorique, le problème dual possède de très intéressantes applications économiques. À chaque
contrainte primale correspond une variable duale. La valeur de cette variable dans la solution optimale représente le
coût marginal associé à la contrainte primale.
Algorithmes de la programmation linéaire
L'algorithme du simplexe permet de résoudre les problèmes de PL en construisant tout d'abord une solution
réalisable qui est un sommet du polytope puis en se déplaçant selon les arêtes du polytope pour atteindre des
sommets pour lesquels la valeur de l'objectif est de plus en plus grande, jusqu'à atteindre l'optimum. Bien que cet
algorithme soit efficace en pratique et qu'il soit assuré de trouver l'optimum, son comportement dans le pire cas peut
être mauvais. Il est ainsi possible de construire un PL pour lequel la méthode du simplexe requiert un nombre
d'étapes exponentiel en la taille du problème. Ainsi, pendant plusieurs années, savoir si la PL était un problème
NP-complet ou polynomial est resté une question ouverte.
Le premier algorithme polynomial pour la PL a été proposé par Leonid Khachiyan en 1979. Il est basé sur la
méthode de l'ellipsoïde en optimisation non linéaire précédemment proposée par Naum Shor. Cette méthode est
elle-même une généralisation de la méthode de l'ellipsoïde en optimisation convexe due à Arkadi Nemirovski (Prix
Programmation linéaire
3
John von Neumann 2003), et à D. Yudin.
Cependant, l'efficacité pratique de l'algorithme de Khachiyan est décevante : l'algorithme du simplexe est
pratiquement toujours plus performant. En revanche, ce résultat a encouragé la recherche dans les méthodes de point
intérieur. Par opposition à l'algorithme du simplexe qui considère uniquement la frontière du polytope définie par les
contraintes, les méthodes de point intérieur évoluent à l'intérieur du polytope.
En 1984, N. Karmarkar propose la méthode projective. C'est le premier algorithme efficace à la fois en théorie et en
pratique. Sa complexité dans le pire cas est polynomiale et les expérimentations sur les problèmes pratiques montrent
que la méthode peut raisonnablement être comparée à l'algorithme du simplexe. Depuis lors, plusieurs méthodes de
point intérieur ont été proposées et étudiées. Une des méthodes les plus célèbres est la méthode prédictive/corrective
qui fonctionne très bien en pratique même si son étude théorique est encore imparfaite.
Pour la résolution pratique de problèmes de PL ordinaires, il est actuellement commun de considérer comme
équivalentes les (bons) codes basés sur les méthodes dérivées du simplexe ou du point intérieur. De plus, pour la
résolution de problèmes de grande taille, une technique comme la génération de colonnes peut se révéler
extrêmement efficace.
Les solveurs basés sur la PL sont de plus en plus utilisés pour l'optimisation de divers problèmes industriels tels que
l'optimisation des flux de transports ou la planification de la production. Toutefois, les modèles de PL se révèlent
insuffisants pour représenter de nombreux problèmes, la programmation linéaire en nombres entiers (PLNE)
permet alors de modéliser un grand nombre de problèmes supplémentaires, notamment les problèmes NP-complets.
Programmation linéaire en nombres entiers
Un problème de programmation linéaire en nombres entiers (PLNE) n'est pas un programme linéaire dans le sens où
son domaine de réalisabilité n'est pas un polyèdre mais un ensemble discret de points. Pourtant, on peut le décrire
comme un PL auquel on ajoute la contrainte supplémentaire que certaines variables ne peuvent prendre que des
valeurs entières. On distingue le programme linéaire mixte avec variables entières et continues du programme entier
avec toutes ses variables entières.
La PLNE est un problème NP-complet car de nombreux problèmes NP-complets peuvent être exprimés comme des
PLNE (par exemple trouver un stable dans un graphe
revient à trouver un vecteur
satisfaisant
pour tout arête
). Les algorithmes décrits ci-dessus pour la PL ne résolvent pas
les problèmes de PLNE. Algorithmiquement donc, la résolution d'un PLNE est autrement plus difficile celle d'un PL
qui joue pourtant un rôle crucial quant à leur résolution, principalement pour deux raisons. Premièrement, la
relaxation continue d'un PLNE (c'est le PLNE sans les contraintes d'intégrité) est un PL qui peut être résolu
efficacement et fournir ainsi une borne duale (dans le sens non-réalisable). Les algorithmes de résolution de PLNE,
tels que les algorithmes par séparation et évaluation se basent sur cette relaxation continue pour diminuer au
maximum l'énumération des solutions. Deuxièmement, le théorème Optimisation/Séparation de Grötschel, Lovasz et
Schrijver permet de résoudre en pratique par la PL les problèmes entiers dont on connait une bonne description
polyèdrale (c'est-à-dire dont on peut séparer les contraintes en temps polynomial). C'est le principe de
fonctionnement des algorithmes de plans sécants,
Applications
La programmation linéaire est essentiellement appliquée pour résoudre des problèmes d'optimisation à moyen et
long terme (problèmes stratégiques et tactiques, dans le vocabulaire de la recherche opérationnelle). Les domaines
d'application de ces problèmes sont très nombreux aussi bien dans la nature des problèmes abordés (planification et
contrôle de la production, distribution dans des réseaux) que dans les secteurs d'industrie : industrie manufacturière,
énergie (pétrole, gaz, électricité, nucléaire), transports (aériens, routiers et ferroviaires), télécommunications,
industrie forestière, finance.
Programmation linéaire
Applications dans le pétrole
La technique de la programmation linéaire est couramment appliquée dans l'industrie pétrolière. C'est l'une des
industries, si ce n'est la principale qui utilise quotidiennement la PL (programmation linéaire). Elle est l'outil qui
permet au raffineur de faire la détermination optimale de production d'une raffinerie. Pour ce faire, le programme
doit tenir compte d'un certain nombre de contraintes telles que :
•
•
•
•
•
•
bruts disponibles, leurs rendements et les qualités des coupes,
spécifications des produits à fabriquer,
limitations de débouchés pour certains produits,
capacités des unités,
modes de réglages des installations,
capacités de stockage disponibles.
La PL peut également être utilisée dans d'autres domaines du raffinage, par exemple :
• calculs de la composition optimale des mélanges de produits (carburants, gasoils, fuels) en tenant compte des
spécifications.
• l'optimisation dans l'utilisation des installations,
• calculs de l'obtention du meilleur préchauffage des bruts et des charges,
• détermination du meilleur équilibre «vapeur-électricité» d'une raffinerie.
En dehors des raffineries, on peut utiliser la PL dans la recherche opérationnelle pour :
• bâtir des plans à long/moyen et court termes d'une compagnie pétrolière,
• optimiser le fonctionnement d'une flotte de tankers et la mise en place des produits.
Voir aussi
• Algorithme du simplexe
• Branch and cut
Bibliographie
• Christelle Guéret, Christian Prins et Marc Sevaux, Programmation Linéaire, Eyrolles, 2000 (ISBN 2-212-09202-4),
365 pages.
• Eric Jacquet-Lagrèze. Programmation Linéaire - Modélisation et mise en œuvre informatique. Collection : P.I.Q.
Poche - Éditeur : Economica
Liens externes
• (en) Linear Programming: Foundations and Extensions [2].
• (en) IBM's article on GLPK [3] A technical article on GPLK (en) with an introduction to Linear Programming by
IBM
• (en) lp_solve [4], un autre logiciel libre pour la programmation linéaire. Il peut être appelé via une interface de
programmation, un fichier texte, ou un environnement de développement intégré.
• (en) Guidance on Formulating LP problems [5]
• (en) 0-1 Integer Programming Benchmarks with Hidden Optimum Solutions [6]
• (en) A Tutorial on Integer Programming [7]
• (en) The linear programming FAQ [8]
• (en) Linear Programming Survey OR/MS Today [9]
• (en) Linear Programming: Guide to Formulation, Simplex Algorithm, Goal Programming and Excel Solver
examples [10]
4
Programmation linéaire
• (en) George Dantzig [11]
• (en) Benchmark de différents logiciels sur différentes instances de PLNE [12]
Logiciels
• (en) AIMMS Optimization Modeling [13] AIMMS — include linear programming in industry solutions (free trial
license available);
• (en) CGAL [14] — The Computational Geometry Algorithms Library includes a linear solver, which is exact and
optimized for problems with few constraints or few variables
• (en) COIN-OR [15] — COmputational INfrastructure for Operations Research, open-source library
• (en) Cplex [16] — Commercial library for linear programming
• (en) DecisionPro Linear Programming Optimization Software [17]
• (en) GNU Linear Programming Kit [18], Bibliothèque libre GLPK (en) pour la programmation linéaire, méthode
du simplex, du point intérieur…
• (en) GIPALS [19] — Linear programming environment and dynamic link library (DLL)
• (en) HOPDM [20] — Higher Order Primal Dual Method
• (en) LINDO [21] — LP, IP, Global solver/modeling langage
• (en) Linear programming and linear goal programming [22] A freeware program for MS-DOS
• (en) MOSEK [23] — Optimization software for LP, IP, QP, SOCP and MIP. Free trial is available. Free for
students.
• (en) Mathematica [24] — General technical computing system includes large scale linear programming support
• (en) Microarray Data Classification Server (MDCS) [25] based on linear programming
• (en) Optimj [26] OptimJ is an extension of the Java programming langage with langage support for writing
optimization models and powerful abstractions for bulk data processing.
• (en) Orstat2000 [27] — Includes easy-to-use modules for linear and integer programming (free for educational
purposes).
• (en) Premium Solver [28] — Spreadsheet add-in
• (en) QSopt [29] Optimization software for LP (free for research purposes).
• (en) R [30] Logiciel libre de calcul statistique contenant des librairies aditionnelles pour la PL: glpk, linprog
(simplex), Rglpk (interface R pour GPLK (en))
• (en) Simplex Method Tool [31] A quick-loading web page
• (en) What's Best! [21] — Spreadsheet add-in
• (en) Xpress-MP [32] — Optimization software free to students
• (fr) IMSL — implémentations pour Fortran, C/C++, Java et C#
Références
[1] Les détails exacts des deux représentations varient beaucoup d'un ouvrage à l'autre
[2] http:/ / www. princeton. edu/ ~rvdb/ LPbook
[3] http:/ / www-128. ibm. com/ developerworks/ linux/ library/ l-glpk1/ index. html
[4] http:/ / lpsolve. sourceforge. net/
[5] http:/ / people. brunel. ac. uk/ ~mastjjb/ jeb/ or/ lp. html
[6] http:/ / www. nlsde. buaa. edu. cn/ ~kexu/ benchmarks/ pb-benchmarks. htm
[7] http:/ / mat. gsia. cmu. edu/ orclass/ integer/ integer. html
[8] http:/ / www-unix. mcs. anl. gov/ otc/ Guide/ faq/ linear-programming-faq. html
[9] http:/ / www. lionhrtpub. com/ orms/ surveys/ LP/ LP-survey. html
[10] http:/ / prejudice. tripod. com/ ME30B/ index. htm
[11] http:/ / www. stanford. edu/ group/ SOL/ dantzig. html
[12] http:/ / plato. asu. edu/ ftp/ milpf. html
[13]
[14]
[15]
[16]
http:/ / www. aimms. com/ operations-research/ mathematical-programming/ linear-programming
http:/ / www. cgal. org/ Pkg/ QPSolver
http:/ / www. coin-or. org/
http:/ / www. ilog. com/ products/ cplex
5
Programmation linéaire
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]
[25]
[26]
[27]
[28]
[29]
[30]
[31]
[32]
http:/ / www. vanguardsw. com/ decisionpro/ linear-program-optimization-software. htm
http:/ / www. gnu. org/ software/ glpk/ glpk. html
http:/ / www. optimalon. com/
http:/ / www. maths. ed. ac. uk/ ~gondzio/ software/ hopdm. html
http:/ / www. lindo. com/
ftp:/ / garbo. uwasa. fi/ pc/ ts/ tslin35c. zip
http:/ / www. mosek. com/
http:/ / www. wolfram. com/
http:/ / mips. gsf. de/ proj/ mdcs
http:/ / www. ateji. com/ optimj. html
http:/ / staff. feweb. vu. nl/ tijms/
http:/ / www. solver. com/
http:/ / www2. isye. gatech. edu/ ~wcook/ qsopt/
http:/ / stat. ethz. ch/ CRAN/ index. html
http:/ / people. hofstra. edu/ faculty/ Stefan_Waner/ RealWorld/ simplex. html
http:/ / www. dashoptimization. com/
6
Sources et contributeurs de l'article
Sources et contributeurs de l'article
Programmation linéaire Source: http://fr.wikipedia.org/w/index.php?oldid=46494158 Contributeurs: Archimëa, Ardus Petus, Arglanir, Arnaud.Serander, Badmood, Deep silence, EDUCA33E,
EtudiantEco, Francis.sourd, François Clautiaux, François-Dominique, Gjacquenot, Jerome66, Jusjih, L'œuf, Ludovic89, Med, Mm, Olivierkeke, Pacote, Perdupan, PierreSelim, PimBeers, Plyd,
Poppy, Ratfox, Sanao, SebGR, Sherbrooke, Tdoune, Tom, Tou chti, Touriste, TouristeCatégorisant, Tu ton Dao, Ursus, Vargenau, WikiPatrol, ~Pyb, 34 modifications anonymes
Licence
Creative Commons Attribution-Share Alike 3.0 Unported
http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/
7