Model Es
Model Es
Fabian Bastin
bastin@[Link]
Département d’Informatique et de Recherche Opérationnelle
Université de Montréal
[Link]
La présente version de ce document s’inspire des notes de Patrice Marcotte, Bernard Gendron, ainsi que des livres
Introduction to Operational Research [2] et The Basics of Practical Optimization [5].
Le présent document peut être modifié et redistribué à des fins non commerciales, sous conditions d’être diffusé
sous les même conditions.
c Fabian Bastin, 2015
Table des matières
1 Introduction 1
1.1 Les origines de la recherche opérationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 La nature de la recherche opérationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Modélisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Algorithmes et logiciels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.1 Un exemple avec GAMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Programmation linéaire 7
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Modèle général de programmation linéaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Terminologie de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Hypothèses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 La méthode du simplexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5.1 Solution de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.5.2 Interprétations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5.3 Critère d’optimalité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5.4 Adaptation à d’autres formes de modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5.5 Obtention d’une base admissible initiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.5.6 Variables à valeurs quelconques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.6 Dualité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.6.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.6.2 Analyse de sensibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.7 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
iii
iv TABLE DES MATIÈRES
5 Réseaux 67
5.1 Graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.1.1 Graphe orienté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.1.2 Graphe non orienté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.1.3 Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.1.4 Chemins et circuits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.1.5 Connexité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2 Problème du chemin le plus court - algorithmes de corrections d’étiquettes . . . . . . . . . . . . . . . 69
5.2.1 Algorithme de Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.3 Flot dans un réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.3.1 Réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.3.2 Modèle de flot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.3.3 Algorithme de Bellman-Ford . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.3.4 Modèle du chemin critique (PERT/CPM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.4 Problème de l’arbre partiel minimum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.4.1 Algorithme de Prim (1957) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.5 Problème du flot maximum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.5.1 Algorithme de Ford-Fulkerson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.5.2 Flot maximum - Coupe minimum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.6 Problème de flot minimum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.7 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.8 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6 Modèles stochastiques 83
6.1 Concepts de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.2 Variable aléatoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.2.1 Variables aléatoires discrètes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.2.2 Variables aléatoires continues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.2.3 Espérance mathématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.2.4 Variance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3 Loi de probabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3.1 Loi de Bernouilli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3.2 Loi uniforme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3.3 Loi de Poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.3.4 Loi exponentielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.4 Modèles stochastiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.4.1 Processus stochastiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.4.2 Chaînes de Markov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.5 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
TABLE DES MATIÈRES v
7 Programmation dynamique 91
7.1 Principe d’optimalité de Bellman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
7.2 Affectation de ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
7.3 Programmation dynamique déterministe et plus court chemin . . . . . . . . . . . . . . . . . . . . . . 96
7.4 Cas probabiliste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.5 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
8 Simulation 99
8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
8.2 Files d’attente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
8.2.1 Concepts de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
8.2.2 Modèle M/M/1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
8.3 Simulation à événements discrets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
8.4 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Annexe 105
8.5 Logiciels d’optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.5.1 IOR Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.5.2 GAMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.5.3 Autres logiciels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
8.6 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Bibliographie 111
vi TABLE DES MATIÈRES
OR is the art of winning wars without actually fighting.
Aurther Clarke
1
Introduction
1
2 CHAPITRE 1. INTRODUCTION
problème réel. Tout modèle est une simplification de la réalité, mais cette représentation doit être suffisamment
précise pour capturer les caractéristiques essentielles de la situation, et de pouvoir tirer des conclusions valides pour
le problème réelle. Il conviendra dès lors de tester ce modèle, et de le modifier au besoin.
Une caractéristique additionnelle est que la RO essaye souvent de trouver la meilleure solution (dite solution
optimale) pour le problème examiné. Cette solution peut ne pas être unique. Cette recherche d’optimalité est un
thème important en RO, même si son interprétation en terme managériels peut être délicate. Il est difficile pour
un individu de pouvoir maîtriser tous les aspects du problèmes à l’étude, de sorte que la RO est généralement
plus un travail d’équipe, avec des experts en mathématiques, statistiques et probabilités, ingénierie, économie,
administration, informatique, physiques, sciences comportementales, et les techniques spécifiques de la RO.
1.3 Modélisation
Un modèle, telle que considéré dans ce cours, est une construction mathématique utilisée pour représenter
certains aspects significatifs de problèmes du monde réel. Il y a beaucoup de types différents de modèles mathéma-
tiques, mais nous nous focaliserons dans un premier temps sur les modèles d’optimisation. Il y a trois composantes
principales dans un modèle d’optimisation:
Variables: elles représentent les composantes du modèle qui peuvent être modifiées pour créer des configurations
différentes.
Contraintes: elles représentent les limitations sur les variables.
Fonction objectif : cette fonction assigne une valeur à chaque configuration différente. Le terme “objectif” vient
du fait que l’objectif est d’optimiser cette fonction.
Exemple 1 (Un exemples de décisions binaires (oui/non)). Un étudiant en quête d’une université projette de
visiter les campus de trois universités du Maine au cours d’un voyage unique, débutant et finissant à l’aéroport de
Portland. Les trois établissements sont dans les villes de Brunswick, Lewiston, et Waterville, et l’étudiant ne veut
visiter chaque ville qu’une seule fois, tout en maintenant le trajet total le plus court possible. Les distances entre ces
villes sont données dans la Table 1.1.
L’étape la plus importante dans la construction d’un modèle est le choix des variables qui vont entrer en jeu.
Dans le présent cas, puisque n’importe quel trajet consiste en une série de petits déplacements entre deux villes, il est
raisonnable d’assigner des variables aux décisions de partir ou non d’une ville vers une autre. Pour plus de faciliter,
numérotons les villes comme suit: 1 pour Portland, 2 pour Brunswick, 3 pour Lewiston et 4 pour Waterville. Ainsi,
nous aurons une variable x1,2 égale à 1 si l’étudiant voyage de Portland à Brunswick au cours de son parcours total,
et 0 sinon. Puisqu’il n’y a pas de voyage d’une ville vers cette même ville, nous avons d’ores et déjà les contraintes
xi,i = 0, i = 1, . . . , 4. (1.3.1)
Une fois les variables choisies, nous pouvons essayer de formuler le problème. Ce processus est en fait souvent une
manière utile pour guider le choix des variables.
Chaque ville ne devant être visitée qu’une seule fois, elle ne peut apparaître qu’une seule fois comme ville
d’arrivée. En d’autres termes, pour j fixé, xi,j ne peut être non-nul que pour un i donné, avec i 6= j. Une manière
plus simple d’encoder cette information est d’écrire, pour j = 1, . . . , 4,
Les contraintes formulées jusqu’à présent ne garantissent aucune forme de trajet ayant même départ et arrivée.
Par exemple, l’affectation x1,2 = 1, x1,3 = 1, x1,4 = 1, x2,1 = 1, et toutes les autres variables égales à 0, satisfont
les contraintes 1.3.1 et 1.3.2. Cette solution décrit toutefois un schéma de visites impossible puisque Portland est
l’origine de tous les déplacements aux trois autres villes universitaires, mais n’est destination que depuis Brunswick.
Nous avons évidemment aussi besoin des contraintes
4
X
xi,j = 1, i = 1, . . . , 4, (1.3.3)
j=1
afin d’assurer que chaque ville ne serve d’origine que pour exactement un déplacement vers une autre ville. Fi-
nalement, afin d’obtenir un véritable trajet ayant même origine et départ, nous devons rejeter les affectations qui
décrivent des groupes déconnectés de petits déplacements comme x1,2 = x2,1 = 1, x3,4 = x4,3 = 1, avec toutes les
autres variables égales à 0. Nous pouvons forcer ceci avec les contraintes
xi,j + xj,i ≤ 1, i = 1, . . . , 4, et j = 1, . . . , 4.
Notre modèle mathématique consiste à minimiser cette fonction, dite fonction objectif par rapport aux variables
xi,j , tout en satisfaisant les contraintes préalablement décrites:
4 X
X 4
min xi,j ai,j ,
x
i=1 j=1
s.c. xi,i = 0, i = 1, . . . , 4,
4
X
xi,j = 1, j = 1, . . . , 4,
i=1
4
X
xi,j = 1, i = 1, . . . , 4,
j=1
xi,j + xj,i ≤ 1, i = 1, . . . , 4, et j = 1, . . . , 4,
xi,j ∈ {0, 1}, i = 1, . . . , 4, et j = 1, . . . , 4.
Ici, x = (xi,j )i=1,...,4,j=1,...,4 , et s.c., “sous les contraintes”. Le problème d’optimisation ainsi construit constitue un
programme mathématique.
Le problème de visites d’universités est assez petit que pour être résolu explicitement, sans recourir à des mé-
thodes d’optimisation numérique. Puisqu’il y a seulement trois parcours significativement différents, la distance totale
associée à chacun d’eux pourrait être facilement calculée, et nous choisissons le parcours de longueur minimale, qui
est ici
Portland → Brunswick → Waterville → Lewiston → Portland.
avec une distance totale de 163 miles. Il est cependant clair qu’une telle stratégie de résolution ne fonctionne plus
comme le nombre de villes augmente.
4 CHAPITRE 1. INTRODUCTION
Exemple 2 (Un problème de mélange). Un armateur doit construire un navire de guerre à partir de 50 tonnes
d’acier contenant entre 0.5% et 1.25% de carbone (C), entre 0.3% and 0.5% de silicone (Si), pas plus de 0.05% de
sulfure (Su), et pas plus de 0.04% de phosphore (Ph). Un fournisseur produit de l’acier à partir de sept matières
premières dont les qualités, les disponibilités en tonnes, et les coûts en $/tonne sont donnés dans la Table 2. Le
fournisseur veut déterminer la combinaison la moins coûteuse de composants bruts qu’il peut utiliser pour produire
l’acier répondant aux besoins de l’armateur.
Puisque les fournisseur peut changer les quantités de matéries premières utilisées dans la producton de l’acier,
nous pourrions assigner une variable différente pour représenter la quantiter de chaque matière première:
— x1 = tonnes de limonite,
— x2 = tonnes de taconite,
— x3 = tonnes d’hématite,
— x4 = tonnes de magnétite,
— x5 = tonnes de silicone 1,
— x6 = tonnes de silicone 2,
— x7 = tonnes de charbon.
Notons que les variables sont ici continues, contrairement à l’exemple précédent.
Afin de modéliser les contraintes, observons tout d’abord que les variables dans ce cas sont naturellement bornées
inférieurement par 0 (puisque des quantités négatives ne feraient pas de sens), et bornées supérieurement par leur
quantité disponible, aussi avons-nous:
0 ≤ x1 ≤ 40,
0 ≤ x2 ≤ 30,
0 ≤ x3 ≤ 60,
0 ≤ x4 ≤ 50,
0 ≤ x5 ≤ 20,
0 ≤ x6 ≤ 30,
0 ≤ x7 ≤ 25.
En supposant que n’importe quelle quantité d’une matière première contribue pour la même quantité d’acier, et en
sachant que nous devons produire au moins 50 tonnes, nous avons
7
X
xi ≥ 50.
i=1
Notons que nous ne supposons pas que nous produirons exactement 50 tonnes, puisqu’il peut être nécessaire de
produire d’avantage afin de satisfaire les autres exigences du problème.
L’autre caractéristique contraignante dans ce problème que que l’acier doit contenir un certain pourcentage de
carbone, de silicone, de sulfure et de phosphore. Afin de voir comment ces exigences de composition se traduisent en
contraintes par rapport à nos variables, nous nous concentrerons d’abord sur l’exigence d’avoir entre 0.5% et 1.25%
1.4. ALGORITHMES ET LOGICIELS 5
de carbone, en espérant que les exigences sur le silicone, le sulfure et le phosphore se formulent de manière similaire.
À partir des données, nous connaissons le pourcentage de contribution en carbone de chaque matière première, aussi
nous pouvons facilement calculer la quantité de carbone pour n’importe quel choix de variables comme
0.03x1 + 0.025x2 + 0.012x4 + 0.9x7 .
Cependant, comme nous avons une exigences de proportion de carbone dans l’acier, nous devons diviser cette
quantité de carbone par la quantité d’acier:
tonnes de carbone 3.0x1 + 2.5x2 + 1.2x4 + 90x7
%C = 100 = .
tonnes d’acier x1 + x2 + x3 + x4 + x5 + x6 + x7
La contrainte que l’acier contienne entre 0.5% et 1.25% de carbone se traduit dans la paire de contraintes
3.0x1 + 2.5x2 + 1.2x4 + 90x7
0.5 ≤ ≤ 1.25. (1.3.4)
x1 + x2 + x3 + x4 + x5 + x6 + x7
Les contraintes pour les autres composants se formulent de manière similaires.
Puisque ce problème implique de trouver la combinaison la moins coûteuse de matières premières qui rencontre
la demande de 50 tonnes d’acier, la fonction objectif est simplement le coût des matières premières utilisées:
coût = 200x1 + 250x2 + 150x3 + 220x4 + 300x5 + 310x6 + 165x7 ,
où chaque matière première contribue pour son propre coût au total. Le problème d’optimisation est dès lors la
minimisation de cette fonction coût sur tous les choix des variables qui satisfont les contraintes modélisées.
Il n’est plus possible ici d’énumérer les solutions possibles afin de résoudre le modèle, en particuler puisque les
variables considérées sont continues. Nous pouvons néanmoins obtenir une intuition de la solution en considérant le
comportement de la fonction objectif. Ainsi, il est évident que celle-ci décroît quand une des variables diminue, et que
la contribution la plus faible en termes de coût vient des variables avec les plus petits coefficients (i.e. les matières
premières avec les coûts moindres par unité). Si nous ignorons les contraintes de composition, le fournisseur devrait
produire exactement 50 tonnes d’acier à partir des matières premières disponibles les moins chères. Ceci signifierait
utiliser 50 des 60 tonnes disponibles d’hématite (au coût de $150 par tonne), pour un coût total des $7,500.
Avant d’essayer de résoudre le problème d’optimisation complet (à l’aide d’un ordinateur), nous devrions ré-
écrire les contraintes de composition dans une forme plus simple. Par exemple, la contrainte 1.3.4 est nonlinéaire,
mais peut être réexprimée comme deux contraintes linéaires en multipliant chaque terme des inégalités par le dé-
nominateur. Après la simplification de toutes les contraintes de composition de cette manière, et en utilisant un
logiciel d’optimisation, nous obtenons la solution
x1 = 13.7888, x3 = 35.8097, x5 = 0.166667, x7 = 0.234818, x2 = x4 = x6 = 0,
qui se traduit en exactement 50 tonnes d’acier, produit à partir de 13.7888 tonnes de limonite, 35.8097 tonnes
d’hématite, 0.166667 tonnes de silicone 1 et 0.234818 tonnes de charbon. Le coût total de production pour cette
solution est $8,217.96.
parameter r(i) raw supplies /malt 75, hops 60, yeast 50/;
light dark
malt 2 3
hops 3 1
yeast 2 1.67
[Link](b) = 0;
1.5 Notes
Le contenu des Section 1.1 et 1.2 se base principalement sur Hillier et Lieberman [2], Chapitre 1. La Section 1.3
est construite à partir du Chapitre 1 de Levy [5]. L’exemple GAMS est dû à Thomas F. Rutherford.
“All right,” said Deep Thought. “The Answer to the Great Question. . . ”
The Hitchhiker’s Guide To the Galaxy
2
Programmation linéaire
2.1 Introduction
Bien que la réalité soit souvent loin d’être linéaire, un grand nombre de problèmes peuvent s’écrire sous forme
linéaire, soit directement, soit en première simplification. D’autre part, un très grand nombre de modèles constituent
des extensions de programmes linéaires. Sa compréhension est essentielle à la compréhension de modèles plus
sophistiqués.
Un programme linéaire générique s’écrit sous la forme
maxx c1 x1 + ... + cn x n
t.q. a11 x1 + ... + a1n xn ≤ b1
.. ..
. .
am1 x1 + ... + amn xn ≤ bm ,
ou, sous une forme plus compacte,
n
X
max cj xj
x
j=1
Xn
t.q. aij xj ≤ bi , i = 1, . . . , m.
j=1
La ligne
n
X
cj x j
j=1
représente la fonction objectif, que nous souhaitons maximiser. La maximisation se fait en respectant les m
contraintes
Xn
aij xj ≤ bi , i = 1, . . . , m.
j=1
7
8 CHAPITRE 2. PROGRAMMATION LINÉAIRE
avec
x1 c1 b1
x = ... ,
.. ..
c = . , b=.
xn cn bn
a11 a12 ... a1n
A = a21 a22 ... a2n .
am1 am2 ... amn
La terminologie “linéaire” vient du fait que toutes les fonctions impliquées sont linéaires. Typiquement, nous
ajouterons également des contraintes de non-négativités:
xi ≥ 0, i = 1, . . . , n,
ou, en abrégé,
x ≥ 0.
Nous dirons aussi que le vecteur x appartient à l’orthant positif (i.e. x ∈ Rn+ ).
Exemple 3 (Wyndor Glass). La compagnie Wyndor Glass Co. produit des produits verriers de haute qualité,
incluant des fenêtres et des portes vitrées. Elle dispose à cette fin de trois usines (usine 1, usine 2, usine 3), qui ont
chacune une capacité de production limitée. Les châssis en aluminium et les matériaux sont produits dans l’usine 1,
les châssis en bois sont fabriqués dans l’usine 2, et l’usine 3 produit le verre et assemble les produits. La compagnie
a décidé de mettre en place de ligne de production:
— produit 1: une porte vitrée avec un châssis d’aluminium ;
— produit 2: une fenêtre double-vitrage avec châssis en bois.
Un lot de 20 unités donne lieu à un profit de $3000 et $5000, respectivement pour le produit 1 et le produit 2.
Les données du problème sont synthétisées dans la Table 2.1. Chaque lot d’un produit est le résultat combiné de la
production dans les trois usines. Nous souhaitons déterminer le taux de production pour chaque produit (nombre de
lots par semaine) de façon à maximiser le profit total.
Les variables de décision sont
— x1 , le nombre de lots du produit 1 ;
— x2 , le nombre de lots du produit 2.
La fonction objectif est le profit total, qui vaut 3x1 +5x2 , en l’exprimant en miller de dollars. Nous voulons maximiser
ce profit.
Les contraintes concernent tout d’abord les capacítés de production:
x1 ≤4 (usine 1)
2x2 ≤ 12 (usine 2)
3x1 + 2x2 ≤ 18 (usine 3)
x1 ≤4 (usine 1)
2x2 ≤ 12 (usine 3)
3x1 + 2x2 ≤ 18 (usine 3)
x1 ≥ 0, x2 ≥ 0 (non-négativité)
Avant de traiter de méthodes numériques, essayons de visualiser le problème afin de développer une intuition
quant à sa résolution. Le problème peut-être représenté comme sur la Figure 2.1. Pour le réaliser, nous traçons
d’abord les droites correpondant aux contraintes, puis nous déterminons le domaine réalisable en vérifiant le sens
des inégalités pour chacune d’elle. Nous traçons ensuite les droites correspondant à la variation de l’objectif. Dans
l’exemple
3 1
z = 3x1 + 5x2 ⇔ x2 = − x1 + z.
5 5
L’ordonnée à l’origine, dépendant de la valeur de z, est 15 z, et la pente vaut − 35 . Maximiser revient à augmenter z.
x2
9 3x1 + 2x2 ≤ 18
8 x1 ≤ 4
7
6 2x2 ≤ 12
5
4
domaine
3
réalisable
2
1
0 x1
0 1 2 3 4 5 6 7 8 9
La représentation graphique, bien qu’intéressante pour “voir” comment se passent les choses, ne fonctionne plus
dès que nous avons plus de deux variables. Il faut alors passer à l’utilisation de logiciels, utilisant l’algorithme du
simplexe ou de points intérieurs. Nous n’aborderons que le premier dans le cadre de ce cours introductif.
10 CHAPITRE 2. PROGRAMMATION LINÉAIRE
x2
36 = 3x1 + 5x2 8
7
(2, 6)
6
5
20 = 3x1 + 5x2
4
3
10 = 3x1 + 5x2
2
1
0 x1
0 1 2 3 4 5 6 7 8 9
max cT x
x
Ax ≤ b,
x ≥ 0,
est appelé forme standard. D’autres formes sont possibles et définissent aussi des modèles de programmation linéaire:
— minimiser au lieu de maximiser:
min f (x) = − max f (x);
— les inégalités peuvent être remplacées par des égalités, ou être de sens contraire ;
— certaines variables peuvent ne pas être forcés à être supérieures à 0. Par exemple, considérons la contrainte
x ≥ −4,
qui équivaut à
x + 4 ≥ 0.
y ≥ 0.
De même, considérons
−10 ≤ x ≤ −2.
3x1 + 5x2 ≥ 50
dans l’exemple Wyndor Glass. Cette nouvelle contrainte ne peut être satisfaite en même temps que les contraintes
précédentes, comme illustré dans la Figure 2.3. Plus aucun point n’est réalisable. Si nous supprimons plutôt les
contraintes
2x2 ≥ 12, 3x1 + 2x2 ≤ 18,
la fonction objectif devient non bornée dans le domaine réalisable, comme illustré sur la Figure 2.4. Un modèle peut
également présenter une infinité de solutions optimales. Considérons dans l’exemple la fonction objectif
z = 3x1 + 2x2 .
Tout point sur le segment [(2, 6), (4, 3)] est alors solution optimale (voir Figure 2.5).
x2
10
9
8
7
6
5
4
3
2
1
0 x1
0 1 2 3 4 5 6 7 8 9
2.4 Hypothèses
La première hypothèse d’un modèle de programmation linéaire est la proportionnalité:
12 CHAPITRE 2. PROGRAMMATION LINÉAIRE
x2
9 x1 ≤ 4
8
7
6
5
4
domaine
3
réalisable
2
1
0 x1
0 1 2 3 4 5 6 7 8 9
18 = 3x1 + 3x2
x2
9 3x1 + 2x2 ≤ 18
8 x1 ≤ 4
7
sol
6 2x2 ≤ 12
ut
ion
5
so
pt
4
im
ale
domaine
3
s
réalisable
2
1
0 x1
0 1 2 3 4 5 6 7 8 9
— la contribution de chaque variable à la valeur de la fonction objectif est proportionnelle à la valeur de cette
variable.
— la contribution de chaque variable au terme de gauche de chaque contrainte fonctionnelle est proportionnelle
à la valeur de cette variable.
Des cas où cette hypothèse n’est pas satisfaite sont
— coût fixe initial (Figure 2.6).
— profit marginal (profit par unité) croissant ou décroissant (Figure 2.7).
x2
4
l
3 n ne
tio
2 or
l
ne
op
pr
n
io
1
t
or
op
pr
0 x1
n
0 1 2 3 4
−1 no
coût fixe initial
x2
7
6
5
4
nt
sta
3
on
t
nc
2 tan
s
no
n
1 co
0 x1
0 1 2 3 4
Nous avons d’autre part la propriété d’additivité: la fonction objectif est composée de la somme des contributions
individuelles de chaque variable, et le terme de gauche de chaque contrainte fonctionnelle est composé de la somme
des contributions individuelles de chaque variable. L’additivité interdit les termes de la forme x1 x2 . Si une de ces
hypothèses est invalidée, nous sommes en présence d’un programme non linéaire, étudié au Chapitre 3.
D’autre part, les variables sont continues. Si nous imposons des variables à valeurs entières, nous obtenons
un modèle de programmation en nombres entiers (Chapitre 4). De plus, les valeurs affectées à chaque paramètre
14 CHAPITRE 2. PROGRAMMATION LINÉAIRE
sont des constantes connues avec certitude. Cette hypothèse peut être fort éloignée de la réalité. Nous pouvons
tester cette hypothèse en conduisant une analyse de sensibilité, qui consiste à vérifier la sensibilité du modèle à des
changements de valeurs des paramètres. Nous pouvons également introduire des variables aléatoires, ce qui conduit
typiquement à un problème de programmation stochastique. La programmation stochastique dépasse cependant les
objectifs du présent cours.
Exemple 4 (Horaire de personnel). Nous souhaitons établir un horaire quotidien, sachant que chaque jour est
divisé en périodes et en supposant que nous avons pu estimer un nombre minimum d’employés devant être affecté
durant chaque période. Chaque jour est divisé en quarts de travail de 8 heures. Plusieurs quarts partagent une
même période, mais chaque quart exige un salaire particulier. Nous souhaitons savoir combien d’employés doit-on
affecter à chaque quart de travail de façon à minimiser le total des salaires versés, en respectant le nombre minimum
d’employés pour chaque période. Les données du problème sont données dans la Table 2.2.
Comme variables, nous pouvons choisir xj comme le nombre d’employés affectés au quart j. L’objectif est
min z = 170x1 + 160x2 + 175x3 + 180x4 + 195x5 .
Pour chaque période, le nombre d’employés affectés aux différents quarts doit couvrir le minimum d’employés requis
pour cette période. Par exemple, pour la période de 14h à 16h, nous aurons:
x2 + x3 ≥ 64.
Le programme linéaire résultant est
min z = 170x1 + 160x2 + 175x3 + 180x4 + 195x5 ,
s.c. x1 ≥ 48,
x1 + x2 ≥ 79
x1 + x2 ≥ 65
x1 + x2 + x3 ≥ 87
x2 + x3 ≥ 64
x3 + x4 ≥ 73
x3 + x4 ≥ 82
x4 ≥ 43
x4 + x5 ≥ 52
x5 ≥ 15
xj ≥ 0, j = 1, 2, 3, 4, 5.
2.4. HYPOTHÈSES 15
x∗ = (x∗1 , x∗2 , x∗3 , x∗4 , x∗5 ) = (48, 31, 39, 43, 15).
Une difficulté est que le nombre d’employés doit toujours être entier, aussi l’hypothèse de continuité n’est pas
satisfaite dans le modèle (bien que la solution optimale dans ce cas particulier soit entière).
Exemple 5 (Réseau de distribution). Considérons deux usines (U 1 et U 2), un centre de distribution (CD), et
deux entrepôts (E1, E2). Chaque usine manufacture un certain nombre d’unités d’un même produit (offre). Chaque
entrepôt requiert un certain nombre d’unités de ce même produit (demande). Sur chaque lien (arc) du réseau, il y
a un coût de transport par unité de produit (coût unitaire). De plus, sur certains arcs, il y a une capactité sur le
nombre d’unités transportées. Le réseau considéré est représenté dans la Figure 2.8. L’objectif est de minimiser le
coût de transport total.
40 unités 60 unités
U2 E2
produites requises
Comme d’ordinaire, pour formuler le modèle, identifions en premier lieu les variables d’intérêt. Nous désignerons
par xi,j le nombre d’unités du produit transportées sur l’arc (i, j) (i.e. entre les sommets i et j) La fonction objectif
(en chiffrant le montant total en centaines de dollars) est
min z = 2xU1 ,U2 + 4xU1 ,CD + 9xU1 ,E1 + 3xU2 ,CD + xCD,E2 + 3xE1 ,E2 + 2xE2 ,E1 .
Les contraintes concernent tout d’abord la conservation du flot: en chaque sommet du réseau, le flot sortant moins
le flot entrant est égal au nombre d’unités produites dans le cas d’usine, l’opposé du nombre d’unités requises pour
un entrepôt, et zéro pour le centre de distribution. Nous devons en outre tenir compte de la capacité sur certains
arcs. Par exemple, pour l’arc (U 1, U 2), nous avons
xi,j ≥ 0.
16 CHAPITRE 2. PROGRAMMATION LINÉAIRE
Le modèle détaillé peut dès lors s’écrire de manière détaillée comme suit:
min z = 2xU1 ,U2 + 4xU1 ,CD + 9xU1 ,E1 + 3xU2 ,CD + xCD,E2 + 3xE1 ,E2 + 2xE2 ,E1 .
s.c. xU1 ,U2 + xU1 ,CD + xU1 ,E1 = 50,
− xU1 ,U2 + xU2 ,CD = 40,
− xU1 ,CD − xU2 ,CD + xCD,E2 = 0,
− xU1 ,E1 + xE1 ,E2 − xE2 ,E1 = −30,
− xCD,E2 − xE1 ,E2 + xE2 ,E1 = −60,
xU1 ,U2 ≤ 10,
xCD,E2 ≤ 80,
xU1 ,U2 ≥ 0, xU1 ,CD ≥ 0, xU1 ,E1 ≥ 0, xU2 ,CD ≥ 0, xCD,E2 ≥ 0, xE1 ,E2 ≥ 0, xE2 ,E1 ≥ 0.
Il s’agit d’un problème de flot à coût minimum, que nous étudierons plus en détails au Chapitre 5. La solution
optimale est
(x∗U1 ,U2 , x∗U1 ,CD , x∗U1 ,E1 , x∗U2 ,CD , x∗CD,E2 , x∗E1 ,E2 , x∗E2 ,E1 ) = (0, 40, 10, 40, 80, 0, 20).
Le nombre d’unités transportées doit toujours être une valeur entière, aussi l’hypothèse de continuité n’est pas
satisfaite dans ce cas. Néanmoins, dans ce cas particulier, la solution trouvée est entière. En fait, pour tout problème
de flot à coût minimum (avec paramètres à valeurs entières), il existe toujours une solution optimale entière.
La variable x2 est fixée, comme elle ne peut prendre que la valeur 1, sans considération pour les autres variables.
A l’opposée, x4 est indépendante, comme elle peut prendre n’importe quelle valeur dans R. x1 et x3 sont quant à
elles dépendantes: le choix de x4 fixe leur valeur, et de plus, il n’est pas possible de les éliminer en combinant des
équations entre elles (au contraire de x4 ).
Exemple 7 (Préliminaires à l’algorithme du simplexe: solution de base). Dans l’exemple, la solution de base est
x1 = 1, x2 = 1, x3 = 2.
Pivot
Il est facile de changer le statut des variables par des opérations élémentaires.
x1 + + 2x4 = 1,
x2 = 1,
x3 − x4 = 2.
Le pivot est une opération consistant à remplacer une variable de base par une variable hors base pour obtenir
une nouvelle solution de base, dite adjacente.
Exemple 9 (Wyndor Glass). Rappelons que pour cet exemple, les contraintes fonctionnelles sont
x1 ≤4
2x2 ≤ 12
3x1 + 2x2 ≤ 18
Au lieu d’inégalités, nous voudrions des égalités. Pour ce faire, nous ajoutons des variables d’écart (en anglais “slack
variables”) supérieures à 0:
x1 +x3 =4
2x2 +x4 = 12
3x1 +2x2 +x5 = 18
Les variables hors-base sont x1 et x2 . Fixons-les à 0. Nous obtenons comme solution de base
Effectuons un pivot, en remplaçant la variable hors-base par une des variables de base actuelles. Reste à déterminer
comment la choisir. Nous souhaitons en premier lieu que la nouvelle solution de base soit réalisable. Dans cette
solution de base, on aura toujours x1 = 0, et une des variables d’écart deviendra une variable hors-base, donc
prendra la valeur 0. En exploitant le système linéaire précédent et la positivité des variables, nous avons
x1 = 4 −x3 ≥0 4 ≥ x3
x4 = 12 −2x2 ≥0 ⇔ 12 −2x2 ≥0
x5 = 18 −3x1 −2x2 ≥0 18 −2x2 ≥0
En exploitant les inégalités
x4 = 12 − 2x2 ≥ 0
x5 = 18 − 2x2 ≥ 0,
nous obtenons
x2 ≤ 12/2 = 6
x2 ≤ 18/2 = 9.
Par conséquent, en posant x2 = 6, nous obtenons x4 = 0, alors que si nous augmentons d’avantage x2 , la solution
devient non réalisable. Nous effectuons comme pivot le remplacement de la variable de base x4 (qui deviendra hors-
base) par x2 . Nous obtenons alors le système suivant:
x1 +x3 =4
x2 + 21 x4 =6
3x1 −x4 +x5 = 6,
qui donne la solution de base:
(x1 , x2 , x3 , x4 , x5 ) = (0, 6, 4, 0, 6).
Nous effectuons ensuite un pivot pour que la variable x1 entre dans la base (i.e. devienne une variable de base).
Comme x4 = 0,
x3 = 4 −x1 ≥0 x ≤ 4
⇔ 1
x5 = 6 −3x1 ≥ 0 x1 ≤ 2
En posant x1 = 2, nous obtenons x5 = 0. Le pivot revient à remplacer la variable de base x5 par x1 . Le système
obtenu est alors :
x3 + 31 x4 − 31 x5 = 2
x2 + 12 x4 =6
x1 − 13 x4 + 31 x5 = 2
La solution de base correspondante est
(x1 , x2 , x3 , x4 , x5 ) = (2, 6, 2, 0, 0).
2.5.2 Interprétations
Interprétation géométrique
Une solution de base réalisable correspond à un point extrême du domaine réalisable. Un pivot correspond à un
déplacement d’un point extrême à un autre qui lui est adjacente, i.e. toutes les variables hors-base sauf une sont les
mêmes. La méthode du simplexe peut se résumer comme suit.
1. Nous débutons avec une solution de base réalisable initiale (un point extrême).
2. A chaque itération, nous effectuons un pivot, passant ainsi à une solution de base réalisable adjacente (un
point extrême adjacent).
3. L’algorithme s’arrête lorsqu’il identifie une solution de base réalisable optimale (un point extrême correspon-
dant à une solution optimale).
2.5. LA MÉTHODE DU SIMPLEXE 19
x2
3x1 + 2x2 = 18
x1 = 4
x1 = 0
domaine
réalisable
x2 = 0
(0, 0) x1
(4, 0) (6, 0)
x2 + 21 x4 =6
x1 − 13 x4 + 13 x5 =2
Si au moins un coût réduit est positif pour la solution de base courante, nous n’avons pas encore atteint une
solution optimale. Il faut par conséquent effectuer au moins un pivot, mais quelle variable doit-on faire entrer dans
la base. Regardons celle dont le coût réduit est le plus grand parmis toutes les variables hors-base, vu que cette
variable fournit la plus grande augmentation marginale (par unité) de la valeur de l’objectif. Ce qui ne signifie
toutefois pas la plus grande augmentation globale !
Vu que nous faisons entrer une variable dans la base, nous devons également choisir la variable qui va sortir de
la base en tentant de garder toutes les variables non négatives. Supposons que xj est la variable d’entrée. Chaque
variable de base xi s’exprime alors en fonction de la variable d’entrée (puisque les autres variables hors-base sont
nulles):
xi = bi − aij xj .
Dans cette expression, les coefficients bi et aij sont obtenus suite à plusieurs pivots. Mais nous avons nécessairement
bi positif (en partant d’un b positif). Pour que toutes les variables demeurent non négatives suite au pivot, nous
devons avoir
xi = bi − aij xj ≥ 0,
soit, en d’autres termes,
aij xj ≤ bi .
Si aij est négatif, cette inégalité ne limite pas l’augmentation de xj . Si cette condition est satisfaite pour tous les
i, nous pouvons donc augmenter indéfiniment xj ; l’objectif est non borné. Si aij est strictement positif, l’inégalité
limite l’augmentation de xj . Nous prendrons comme variable de sortie celle qui atteint
bi
min aij > 0 .
aij
Exemple 12 (Production). Une entreprise fabrique quatre produits. La fabrication de chaque produit nécessite une
certaine quantité de ressources. Les ressources consommées, les stocks des ressources et les bénéfices des produits
sont récapitulés dans la Table 2.3. Nous souhaitons établir un plan de production de façon à maximiser le chiffre
Produit 1 2 3 4 Stock
Ressource A 2 4 5 7 42
Ressource B 1 1 2 2 17
Ressource C 1 2 3 3 24
Profit 7 9 18 17 -
d’affaires.
2.5. LA MÉTHODE DU SIMPLEXE 21
Introduisons trois variables d’écart x5 , x6 , x7 , qui mesurent pour chaque ressource l’écart entre la quantité initiale-
ment disponible et la quantité consommée par le plan de fabrication donné par les variables de décision x1 , x2 , x3 ,
x4 :
Cette formulation permet d’exprimer facilement les variables d’écart comme fonctions affines des variables de déci-
sion:
Le tableau ci-dessus est appelé un dictionnaire. Les variables x5 , x6 , x7 sont les variables de base et x1 , x2 , x3 ,
x4 sont des variables hors-base. La solution de base associée au dictionnaire est obtenue en donnant la valeur 0 à
toutes les variables hors-base. La solution basique correspondant au dictionnaire ci-dessus est donc
Le bénéfice correspondant est z = 0 ; on ne produit rien, on ne consomme aucune ressource et on ne gagne rien.
Néanmoins, c’est une solution réalisable, car elle satisfait toutes les contraintes.
En partant de cette solution basique, nous cherchons à améliorer le bénéfice. Nous sélectionnons la variable
hors-base de coût réduit maximum, i.e. x3 , et gardons les autres variables hors-base à zéro. Il est évident que si
on fait croître x3 à partir de 0, les autres variables hors-base restant nulles, la valeur de la fonction z croît. Nous
cherchons à augmenter au plus la fonction objectif tout en gardant la solution reste réalisable. Les contraintes sur
l’augmentation de x3 sont:
x5 ≥ 0 ⇒ 42 − 5x3 ≥ 0 ⇒ x3 ≤ 8.4
x6 ≥ 0 ⇒ 17 − 3x3 ≥ 0 ⇒ x3 ≤ 8.5
x7 ≥ 0 ⇒ 24 − 3x3 ≥ 0 ⇒ x3 ≤ 8.
La plus restrictive de ces contraintes est x3 ≤ 8. L’interprétation géométrique est la suivante: en partant du sommet
(0, 0, 0, 0) du polyèdre des contraintes, nous nous déplaçons sur une arête de ce polyèdre. Le premier hyperplan
rencontré est x7 = 0. Nous arrivons alors dans un nouveau sommet, à l’intersection des hyperplans x1 = 0, x2 = 0,
x4 = 0, x7 = 0.
Nous allons faire un changement de dictionnaire, i.e. un pivot, en échangeant les rôles de x3 et x7 . Nous utilisons
la troisième équation du premier dictionnaire pour exprimer x3 en fonction de x1 , x2 , x4 et x7 :
1 2 1
x3 = 8 − x1 − x2 − x4 − x7 .
3 3 3
22 CHAPITRE 2. PROGRAMMATION LINÉAIRE
Nous remplaçons ensuite x3 par cette expression dans les autres équations du dictionnaire:
1 2 5
x5 = 2 − x1 − x2 + x7 − 2x4
3 3 3
1 1 2
x6 = 1 − x1 + x2 + x7
3 3 3
1 2 1
x3 = 8 − x1 − x2 − x7 − x4
3 3 3
z = 144 + x1 − 3x2 − 6x7 − x4.
La variable x7 est sortie de la base et la variable x3 est entrée dans la base. La nouvelle base est par conséquent x5 ,
x6 , x3 . La solution basique associée au nouveau dictionnaire est x1 = x2 = x7 = x4 = 0, x5 = 2, x6 = 1, x3 = 8.
Elle correspond au sommet de coordonnées (0, 0, 8, 0) du polyèdre de contraintes. Cette solution définit un plan de
production beaucoup plus intéressant: nous fabriquons 8 unités du produit 3 (x3 = 8) en consommant entièrement
la ressource C (x7 = 0). Il nous reste x5 = 2 unités de la ressource A et x6 = 1 unité de B. Le bénéfice est z = 144.
Dans la nouvelle expression de la fonction z, nous voyons que seule la variable x1 a un coefficient positif. Nous
décidons de faire entrer x1 en base, et ainsi de parcourir une nouvelle arête du polyèdre des contraintes. Nous avons
les limites suivantes sur l’augmentation de x1 :
x5 ≥ 0 ⇒ x1 ≤ 6x6 ≥ 0 ⇒ x1 ≤ 3x3 ≥ 0 ⇒ x1 ≤ 24
d’où x1 ≤ 3 Nous faisons sortir x6 de la base faisons entrer x1 à sa place. Nous obtenons le dictionnaire suivant:
x5 = 1 + x6 − x2 + x7 − 2x4
x1 = 3 − 3x6 + x2 + 2x7
x3 = 7 + x6 − x2 − x7 − x4
z = 147 − 3x6 − 2x2 − 4x7 − x4 .
La solution de base associée est x6 = x2 = x7 = x4 = 0, x5 = 1, x1 = 3, x3 = 7, correspond au sommet (3, 0, 7, 0)
du polyèdre des contraintes. Elle définit le plan de production suivant: nous fabriquons 3 unités du produit 1 et 7
unités du produit 3. Il ne nous reste qu’une unité de la ressource A. Le bénéfice est z = 147. De plus, tous les coûts
réduits sont négatifs, aussi la solution est optimale.
xj ≥ 0, j = 1, 2, . . . , n,
xn+i ≥ 0, i = 1, 2, . . . , m.
Nous supposons de plus que bi est positif, i = 1, 2, . . . , m. Sous cette forme, il est facile d’initialiser la méthode
du simplexe en ajoutant des variables d’écart, et en les prenant comme variables de base. Cela revient de plus
à considérer l’origine comme solution initiale, et il est facile d’effectuer les opérations de pivot. Le situation se
complique avec d’autres formes fonctionnelles pour les contraintes, en particulier dans la recherche d’une solution
de base initiale.
Nous résolvons le problème de maximisation en changeant les signes des coefficients dans l’objectif. La valeur
optimale du problème de minimisation est l’opposé de celle du problème de maximisation.
2. bi < 0: nous multiplions l’inégalité par -1, pour se ramener au cas développé ci-dessous.
Pn
Si j=1 aij xj ≥ bi , nous avons à nouveau deux cas possibles:
1. bi ≤ 0: nous multiplions l’inégalité par -1, pour se ramener au cas développé précédemment.
2. bi > 0: nous soustrayons une variable de surplus positive x0i :
n
X
aij xj − x0i = bi .
j=1
s.c. . . .
X
aij xj + xn+i = bi
j=1,...,n
...
Le seul but des variables artificielles est de pouvoir initialiser l’algorithme du simplexe en produisant une solution
de base réalisable initiale. Si le problème est réalisable, nous devrions avoir xn+i = 0. Deux méthodes peuvent être
considérées.
1. La méthode du grand M consiste à optimiser en utilisant une fonction objective formée de la fonction de coût
initiale et de la somme, très fortement pénalisée, des variables artificielles.
2. La méthode à deux phases se déroule comme suit:
Phase 1 Trouver une solution réalisable en minimisant la somme des variables artificielles.
Phase 2 Optimiser en revenant à la fonction de coût initial à partir de la solution initiale trouvée dans la
phase 1.
24 CHAPITRE 2. PROGRAMMATION LINÉAIRE
Nous devons tout d’abord transformer le système de contraintes afin de pouvoir traiter un système linéaire:
Afin de démarrer la méthode du simplexe, nous appliquons une des deux méthodes précédentes. Méthode à deux
phases:
Phase 1 minimiser xa2 + xa3 jusqu’à obtenir une valeur optimale nulle (si le programme linéaire à une solution
réalisable).
Phase 2 minimiser 0.4x1 + 0.5x2 .
Méthode du grand M :
min 0.4x1 + 0.5x2 + M xa2 + M xa3
x+
j = xj − Lj ≥ 0.
2.6 Dualité
2.6.1 Motivation
Exemple 14 (Wyndor Glass: dualité). Supposons qu’une compagnie partenaire de Wyndor Glass, appelée Dual
Glass, aimerait louer du temps aux usines afin de fabriquer des lots de produits. Quel prix horaire pour chaque
usine devrait-elle demander de telle sorte que le résultat soit équitable, soit aucun profit ni perte pour aucun des
deux partenaires ?
Dénotons les nouvelles variables de décision par yi , le prix de location horaire à l’usine i, et reprenons les
données du problèmes telles qu’exprimé précédemment dans la Table 2.1.
2.6. DUALITÉ 25
— Wyndor Glass n’exige rien pour une heure louée à l’usine 1, ce qui se justifie par le fait qu’il lui reste du
temps de production non utilisé (la variable d’écart x3 est strictement positive).
— Un prix strictement positif ferait augmenter le profit, et la solution ne serait plus équitable.
Les prix des autres variables est strictement positif:
— puisque le temps de production est utilisé pleinement, louer une heure à Dual Glass revient à perdre une
heure de production, donc à réduire le profit total ;
— pour retrouver le même profit, il faut exiger un prix égal au multiplicateur optimal, égal à l’opposé du coût
réduit.
Nous pouvons constater des écarts complémentaires: pour tout i, nous avons
xn+i .yi = 0.
Tout modèle de programmation linéaire possède un dual. A tout programme linéaire sous forme standard
max z = cT x
s.c. Ax ≤ b,
x ≥ 0,
min w = bT y
s.c. AT y ≥ c,
y ≥ 0,
Nous obtenons ainsi un couple primal-dual, avec les relations suivantes entre les deux modèles.
Primal Dual
Variable Contrainte
Contrainte Variable
max min
Profit unitaire Terme de droite
Terme de droite Coût unitaire
Ligne Colonne
Colonne Ligne
Contrainte ≤ Contrainte ≥
Si un modele de programmation linéaire possède une solution optimale, il en est de même pour son dual, et les
valeurs optimales des deux modèles sont égales.
La solution optimale du dual correspond aux multiplicateurs optimaux. Nous pouvons les lire directement dans
le tableau optimal du simplexe: ce sont les coefficients dans la ligne correspondant à l’objectif. Le coût réduit
(correspondant à l’opposé du coefficient dans la ligne de l’objectif) mesure la variation de l’objectif entraîné par
une augmentation d’une unité de la valeur de la variable hors-base associée.
Exemple 15 (Wyndor Glass: sensibilité). Une analyse de sensibilité complète nous apprendrait ce qui suit.
2.6. DUALITÉ 27
Exemple 16. Considérons un fermier cultivant trois types de plantes (maïs, blé, coton), en utilisant des ressources
de terre et de main d’oeuvre. Les revenus nets venant de la culture du maïs, du blé et du coton sont de $109/acre,
$90/acre et $115/acre, respectivement. Un acre de maïs exige 6 heures de travail, un acre de blé, 4 heures, et un
acre de coton, 8 heures. Le fermier a à disposition 100 acres de terre et 500 heures de travail ; il souhaite maximiser
le revenu net de ses plantations.
Nous obtenons le programme mathématique linéaire
SETS
VARIABLES
Profit Net income from crops;
POSITIVE VARIABLES
Production(Crop) Production by crop;
PARAMETER
EQUATIONS
Objective Maximimze farm income
ResourceEq(Resource) Resource Constraint;
Objective..
Profit =E= SUM(Crop, Revenue(Crop)*Production(Crop));
ResourceEq(Resource)..
SUM(Crop, ResourceUse(Resource,Crop)*Production(Crop))
=L= ResourceAvailable(Resource);
La syntaxe .L conduit à obtenir les valeurs optimales des variables primales (ou de la solution) quand appliqué à
une variable, et la valeur du terme de gauche d’une équation de contrainte, quand à appliqué à une contrainte. La
syntaxe .M permet d’obtenir le multiplicateur optimal associée à une équation, si appliqué à une équation. Dans le
cas d’une variable, il nous permet de connaître la valeur excédentaire pour la contrainte duale associée.
2.7 Notes
Ce chapitre se base essentiellement sur les notes de cours de Bernard Gendron, 2007. L’exemple 3 est tiré de
Hillier et Lieberman [2], Section 3.1. L’exemple de production est dû à Stefan Balev.
30 CHAPITRE 2. PROGRAMMATION LINÉAIRE
Programmation non linéaire
3
Nous pouvons généraliser le programme linéaire introduit au chapitre précédent comme suit:
max f (x1 , . . . , xn )
x
s.c.g1 (x1 , . . . , xn ) ≤ b1 ,
..
.
gm (x1 , . . . , xn ) ≤ bm .
Une fonction est convexe si tout point sur le segment de droite joignant f (a) et f (b) se trouve au-dessus du graphe
de f :
f (λb + (1 − λ)a) ≤ λf (b) + (1 − λ)f (a), (3.1.1)
pour toute paire de points (a, b). Si cette inégalité est stricte, la fonction f est dite strictement convexe. En
remplaçant le sens de l’inégalité dans (3.1.1), la fonction f est dite concave:
pour toute paire (a, b). Si cette dernière inégalité est stricte, la fonction f est strictement concave. La Figure 3.1
illustre une fonction strictement convexe et une fonction strictement concave.
31
32 CHAPITRE 3. PROGRAMMATION NON LINÉAIRE
f (x) f (x)
fonction concave
fonction convexe
x x
Table 3.1 – Test de convexité et de concavité pour une fonction à deux variables deux fois dérivable
Ces tests se généralisent à des fonctions de plus de deux variables en utilisant le Hessien (la matrice des dérivées
secondes). Deux résultats supplémentaires sont utiles pour tester la convexité:
— une fonction qui s’exprime comme la somme de fonctions convexes (concaves) est convexe (concave) ;
— l’opposé d’une fonction concave est convexe et vice-versa.
Exemple 17 (Wyndor Glass). Modifions l’exemple Wyndor Glass en remplaçant certaines contraintes par une
contrainte non linéaire.
Le problème ainsi modifié peut se représenter comme sur la Figure 3.2. Remarquons que l’objectif est concave (car
x2
8
7
(2, 6)
6
5
4 z = 36 = 3x1 + 5x2
domaine
3
réalisable
2
1
0 x1
0 1 2 3 4 5 6
linéaire) et que le domaine réalisable est convexe: c’est un modèle de programmation convexe. Dans le cas présent,
la solution optimale est sur la frontière du domaine réalisable, mais ne correspond pas à un coin (l’intersection de
deux contraintes).
Modifions encore l’exemple Wyndor Glass, mais cette fois en remplaçant l’objectif lineaire par une fonction non
lineaire, comme illustré sur la Figure 3.3:
Nous pouvons à nouveau remarquer que l’objectif est concave et que le domaine réalisable est convexe: c’est aussi
un modèle de programmation convexe. Ici, la solution optimale (8/3, 5) est sur la frontière du domaine réalisable,
mais ne correspond pas à un point extrême du domaine réalisable.
34 CHAPITRE 3. PROGRAMMATION NON LINÉAIRE
x2
9
8
7
6
(8/3, 5)
5
4
domaine z = 907
3 z = 857
réalisable z = 807
2
1
0 x1
0 1 2 3 4 5 6 7 8 9
Considérons le même exemple, mais avec une fonction objectif différente, tel que représenté sur la Figure 3.4:
Il s’agit à nouveau d’un modèle de programmation convexe, avec comme solution optimale (3, 3), laquelle se trouve
à l’intérieur du domaine réalisable. La fonction objectif est la somme de deux fonctions d’une seule variable. Si nous
annulons les dérivées de chacune de ces fonctions, nous obtenons la solution unique (3, 3), qui se trouve à l’intérieur
du domaine ; c’est donc nécessairement la solution optimale.
Revenons sur la fonction objectif initiale, mais introduisons une contrainte non-linéaire, qui définit un domaine
réalisable non-convexe, comme illustré sur la Figure 3.5:
Le problème ainsi modifié peut se représenter comme sur la Figure 3.5. Dans ce modèle de programmation non
convexe, nous remarquons la présence de deux maxima locaux:
— x est un maximum local si f (x) ≥ f (a) pour tout a réalisable suffisamment près de a ;
— (4, 3) et (0, 7) sont des maxima locaux, mais x∗ = (0, 7) est la maximum global: f (x) ≥ f (a) pour tout a
réalisable.
Les méthodes classiques de programmation non-linéaire permettent d’identifier un maximum local, mais pas néces-
sairement le maximum global, alors qu’en programmation convexe, tout maximum local est global.
3.1. FONCTIONS CONVEXES ET CONCAVES 35
x2
7
6
z = 117
5
z = 162
4 z = 189
z = 198
3
(3, 3)
2
1
0 x1
0 1 2 3 4 5 6 7
x2
8
7 (0.7) = maximum global
6
5
4 z = 35 = 3x1 + 5x2
3.2 Algorithmes
3.2.1 L’algorithme du simplexe dans le cas non-linéaire
Le succès de l’algorithme du simplexe en programmation linéaire a naturellement motivé le développement de
techniques similaires pour l’optimisation non-linéaire. Une telle approche fut proposée en par Nelder et Mead [7].
Néanmoins, la notion de point extrême est beaucoup plus délicate à exploiter en non-linéaire, en particulier en
l’absence de contraintes. Il convient de construire un polyhèdre artificielle, ce qui n’est pas immédiat, et en pratique,
la méthode souffre de l’absence de garantie de convergence, excepté pour des fonctions convexes à une variable [4].
Nous pouvons même observer une convergence vers un point non-stationnaire [6]. Un algorithme d’optimisation
sans garantie de convergence est appelé heuristique.s Cette méthode est pourtant encore fréquemment employée,
en particulier par les ingénieurs. La fonction fminsearch de Matlab 1 implémente ainsi cet algorithme. Malgré ce
succès, aucun algorithme d’optimisation non-linéaire moderne ne se fonde sur le simplexe, et il convient dès lors
d’éviter autant que possible de maintenir un tel usage. De meilleurs résultats seront obtenus en employant des outils
plus appropriés.
∂f (x∗ )
= 0, j = 1, 2, . . . , n.
∂xj
En d’autres mots, lorsque la dérivée s’annule en un point donné, ce point peut être un maximum local, mais l’inverse
n’est pas nécessairement vérifié: ce point peut aussi être un minimum local ou un point de selle. Par contre, si f
est concave, un point où la dérivée s’annule est nécessairement un maximum global. De plus, si f est strictement
concave, un tel maximum global est unique.
Dans le cas d’une fonction non concave, afin de trouver un maximum global, il faut
— identifier tous les maxima locaux ;
— identifier celui de plus grande valeur ;
— vérifier que la fonction est bornée supérieurement (sinon, il n’y a pas de maximum global).
Le problème est qu’identifier tous les maxima locaux peut être extrêmement difficile.
df (x)
> 0, si x < a,
dx
df (x)
= 0, si x = x∗ ,
dx
df (x)
< 0, si x > b.
dx
1. Nous nous référons ici à la version 7.9, Release 2009b, mise en circulation le 4 septembre 2009.
3.2. ALGORITHMES 37
f (x)
df (x)
dx =0
x
x∗
xi + xu
xc = ,
2
et nous passons à l’étape suivante. Sinon, c’est-à-dire si
xu − xi ≤ 2,
avec > 0 suffisamment petit, nous nous arrêtons: xc est une approximation suffisamment précise de la
solution optimale.
4. Si la dérivée en xc est nulle, arrêt: xc est la solution optimale.
5. Si la dérivée en xc est positive, nous posons xi = xc .
6. Si la dérivée en xc est négative, nous posons xu = xc .
7. Retour à l’étape 3.
Il est possible de montrer que le gradient correspond a une direction d’augmentation de la valeur de f . Ainsi, dans
la méthode du gradient, nous nous déplaçons dans la direction du gradient en tentant d’augmenter au maximum
la valeur de l’objectif. A partir d’un point initial x0 , nous effectuons un deplacement dans la direction du gradient
vers un nouveau point x:
x = x0 + s,
où s = t∗ ∇x f (x). Dans cette formule, t∗ est la solution du problème de maximisation suivant:
C’est un problème de maximisation d’une fonction concave d’une seule variable: nous pouvons par conséquent le
résoudre, par exemple en employant la méthode de la bissection
Nous posons ensuite x0 = x, et nous itérons ainsi jusqu’à ce que le gradient s’annule (ou presque). Nous avons
par conséquent l’algorithme suivant.
xk+1 = xk + t∗ ∇x f (xk ),
et incrémentons k.
4. Si
∂f (xk )
≤ , j = 1, 2, . . . , n,
∂xj
arrêt. Sinon, nous retournons en 2.
∂f (x∗ )
= 0, j = 1, . . . , n.
∂xj
Cette condition n’est plus valable lorsqu’il y a des contraintes, car une solution optimale peut se trouver sur la
frontière du domaine réalisable
max f (x) = 6 − x − x2
x
s.c. x ≥ 0.
Il est facile de se convaincre (voir Figure 3.7) que la solution optimale est x∗ = 0, pourtant
df (0)
= −1 < 0.
dx
3.2. ALGORITHMES 39
f (x)
7
df (x)
6 dx <0
5
4
3
2
1
0 x
0 1 2 3 4
Il est plus délicat de dériver les conditions dans le cas général, où nous avons également des contraintes sont de la
forme:
gi (x1 , x2 , . . . , xn ) ≤ bi , i = 1, 2, . . . , m.
Elles s’expriment en fonction des multiplicateurs de Lagrange ui associés à chaque contrainte.
Les conditions KKT peuvent également s’exprimer en omettant les contraintes de non-négativité, lesquelles
peuvent être réecrites sous la forme
−xi ≤ 0,
ou être tout simplement absentes. La forme qui suit est par conséquent plus générale, et plus communément admise
en programmation non-linéaire (voir par exemple Nocedal et Wright [8]). Si x∗ = (x∗1 , x∗2 , . . . , x∗n ) est un maximum
40 CHAPITRE 3. PROGRAMMATION NON LINÉAIRE
3.3 Notes
Ce chapitre se base en grande partie sur les notes de cours de Bernard Gendron, 2007.
42 CHAPITRE 3. PROGRAMMATION NON LINÉAIRE
The purpose of mathematical programming is insight, not numbers.
Arthur M. Geoffrion
Exemple 20 (Problème du sac à dos). Considérons un cambrioleur muni d’un sac (unique) pour transporter son
butin. Son problème consiste à maximiser la valeur totale des objets qu’il emporte, sans toutefois dépasser une
limite de poids b correspondant à ses capacités physiques. Supposons qu’il y a n type d’objets que le voleur pourrait
emporter, et que ceux-ci sont en nombre tel que quelle que soit la nature de l’objet considéré, la seule limite au
nombre d’unités que le cambrioleur peut prendre est que le poids total reste inférieur à b. Si l’on associe à l’objet j
une valeur cj et un poids wj , la combinaison optimale d’objets à emporter sera obtenue en résolvant le programme
mathématique
n
X
max cj xj
x
j=1
Xn
s.c. wj xj ≤ b
j=1
xj ∈ N , j = 1, . . . , n.
Ici, xj ∈ N signifie que xj est un naturel, autrement dit un entier non négatif. Intuitivement, nous pourrions penser
que la solution consiste à choisir en premier lieu les objets dont le rapport qualité-poids est le plus avantageux,
quitte à tronquer pour obtenir une solution entière (nous ne pouvons pas diviser un objet). Cette solution peut
43
44 CHAPITRE 4. PROGRAMMATION MIXTE ENTIÈRE
malheureusement se révéler sous-optimale, voire mauvaise, comme on le constate sur l’exemple suivant.
Si nous oublions la contrainte d’intégralité, la solution, de valeur 12.25, est x = (0, 0, 14/8). En tronquant, on obtient
la solution entière x = (0, 0, 1) de valeur 7. Il est facile de trouver de meilleures solutions, par exemple x = (1, 0, 1).
La solution optimale du problème du cambrioleur peut s’obtenir en énumérant toutes les solutions admissibles
et en conservant la meilleure (voir Table 4.1, , où les solutions inefficaces laissant la possibilité d’ajouter un objet
n’ont pas été considérées).
x1 x2 x3 objectif
0 1 1 10
2 0 1 11
0 3 0 9
2 2 0 10
3 1 0 9
4 0 0 8
La solution optimale entière, x = (2, 0, 1), diffère passablement de la solution optimale linéaire. Cependant, il
est clair que cette technique d’énumération ne peut s’appliquer à des problèmes de grande taille.
Exemple 21 (California Mfg). Une entreprise doit choisir de nouveaux emplacements pour construire des usines et
des entrepôts. Elle a le choix entre deux emplacements: Los Angeles (LA) et San Fransisco (SF). Nous ne pouvons
construire un entrepôt que dans une ville où nous disposons d’une usine, et nous ne pouvons pas construire plus
d’un entrepôt. Nous associons à chaque construction (d’une usine ou d’un entrepôt dans chacun des lieux envisagés)
sa valeur estimée et son coût de construction. L’objectif est de maximiser la valeur totale estimée, en ne dépassant
pas une limite maximum sur les coûts. Les données du problème sont résumées dans la Table 4.2. Les variables sont
(
1 si la décision j est approuvée ;
xj =
0 si la décision j n’est pas approuvée.
xij ≥ 0,
yi ∈ {0, 1}.
46 CHAPITRE 4. PROGRAMMATION MIXTE ENTIÈRE
Cette formulation contient deux éléments intéressants: un coût fixe (construction) modélisé par une variable binaire
yi ainsi qu’une contrainte logique forçant les flots provenant d’un site à être nuls si aucune usine n’est construite
en ce site. Notons aussi que certaines variables sont entières alors que d’autres (flots) sont réelles.
Exemple 23 (Contraintes logiques). Des variables binaires peuvent servir à représenter des contraintes logiques. En
voici quelques exemples, où pi représente une proposition logique et xi la variable logique (binaire) correspondante.
Exemple 24 (Fonctions linéaires par morceaux). Considérons une fonction objectif à maximiser, pour laquelle
dans chaque intervalle [ai−1 , ai ] la fonction est linéaire, ce que nous pouvons exprimer par:
x = λi−1 ai−1 + λi ai
λi−1 + λi = 1,
λi−1 , λi ≥ 0,
f (x) = λi−1 f (ai−1 ) + λi f (ai ).
Nous pouvons généraliser cette formule sur tout l’intervalle de définition de la fonction f en contraignant les variables
λi à ne prendre que deux valeurs non nulles, et ce pour deux indices consécutifs. Ceci se fait en introduisant des
variables binaires yi associées aux intervalles de linéarité [ai−1 , ai ]:
n
X
x= λi ai ,
i=0
Xn
f (x) = λi f (ai ),
i=0
n
X
λi = 1,
i=0
λi ≥ 0, i = 0, . . . , n
λ0 ≤ y1 ,
λ1 ≤ y1 + y2,
.. .. ..
. . .
λn−1 ≤ yn−1 + yn ,
λ n ≤ yn ,
n
X
yi = 1(un seul intervalle “actif ”)
i=1
yi ∈ {0, 1}, i = 1, . . . , n.
Si la fonction f est concave, les variables binaires yi et les contraintes associées peuvent être éliminées de la
[Link] approche est particulièrement intéressante lorsqu’on optimise des fonctions de plusieurs variables
de la forme i fi (xi ).
4.2. CONTRAINTES MUTUELLEMENT EXCLUSIVES 47
— soit
3x1 + 2x2 ≤ 18 + M,
x1 + 4x2 ≤ 16.
y1 = y;
y2 = 1 − y.
Il s’agit d’un cas particulier de la situation suivante: K parmi N contraintes doivent être satisfaites. Dans ce cas
plus général, nous introduisons N variables binaires.
fj (x1 , x2 , . . . , xn ) ≤ dj + M (1 − yj ), j = 1, 2, . . . , N.
avec
N
X
yj = 1.
j=1
Exemple 25 (Wyndor Glass). Supposons que le temps de production maximum à l’usine 3 n’est pas toujours 18h,
mais pourrait également être 6h ou 12h. Cette contrainte s’écrit alors
Supposons de plus que l’objectif consiste à minimiser la somme de n fonctions avec coûts fixes
n
X
min z = fj (xj ).
j=1
Les valeurs de xj et de yj dépendent l’une de l’autre: il s’agit d’un exemple de décisions contingentes. Nous devons
en particulier avoir une contrainte qui précise que xj = 0 si yj = 0. Toutefois, les deux variables ne sont plus
binaires, vu que xj peut être quelconque. Soit Mj une borne supérieure sur la valeur de xj . Nous pouvons écrire la
relation entre les deux variables de cette manière:
xj ≤ M j yj .
Ainsi,
4.2. CONTRAINTES MUTUELLEMENT EXCLUSIVES 49
— si yj = 0, alors xj = 0 ;
— si yj = 1, alors xj ≤ Mj ;
— si xj > 0, alors yj = 1 ;
— si xj = 0, alors toute soluton optimale satisfait yj = 0 lorsque kj > 0 (si kj = 0, la variable yj est inutile).
Nous obtenons par conséquent le programme
n
X
min z = cj x j + k j y j
j=1
s.c. xj ≤ Mj ,
yj ∈ {0, 1}, j = 1, 2, . . . , n.
L’intérêt de cette transformation est que les méthodes de programmation 0–1 sont souvent plus efficaces que les mé-
thodes de programmation en nombres entiers. Elle engendre néanmoins une multiplication du nombre de variables.
Exemple 26. Nous considérons trois types de produits, et deux usines ; nous exprimons le profit par unité de
produit en milliers de dollars. Nous connaissons les ventes potentielles par produit (unités/semaine), et la capacité
de production par usine (h/semaine). Nous avons toutefois comme contrainte que pas plus de deux produits ne
peuvent être fabriqués, et une seule des deux usines doit être exploitée. Les données du problème sont résumées dans
la Table 4.3. Les variables sont xj , le nombre d’unités fabriquées du produit j. Pour représenter la contrainte “pas
Afin de représenter la contrainte “une seule des deux usines”, nous devons ajouter une variables 0–1:
(
1 si l’usine 1 est choisie;
y4 =
0 si sinon.
50 CHAPITRE 4. PROGRAMMATION MIXTE ENTIÈRE
L’objectif est
max z = 5x1 + 7x2 + 3x3 .
Les ventes potentielles sont
x1 ≤ 7, x2 ≤ 5, x3 ≤ 9.
L’exigence interdisant d’avoir plus de deux produits se traduit mathématiquement par
y1 + y2 + y3 ≤ 2.
La relation entre les variables continues et les variables 0–1 s’exprime par
Exemple 27. Nous considérons à nouveau trois types de produits, pour lesquels nous pouvons placer cinq annonces
publicitaires, avec un maximum de trois annonces par produit. L’estimation des revenus publicitaires est donnée
dans la Table 4.4, où les profits sont exprimés en millions de dollars. Les variables du problèmes sont le nombre
d’annonces pour le produit i, dénoté par xi , mais l’hypothèse de proportionnalité est alors violée: nous ne pouvons
représenter l’objectif sous forme linéaire uniquement avec ces variables.
Prenons tout d’abord comme variables
(
1 si xi = j;
yij =
0 sinon.
L’objectif est
max z = y11 + 3y12 + 3y13 + 2y22 + 3y23 − y31 + 2y32 + 4y33 .
4.2. CONTRAINTES MUTUELLEMENT EXCLUSIVES 51
Autrement dit, nous avons remplacé l’égalité dans la première condition par une inégalité. Cette définition implique
yi(j+1) ≤ yij , i = 1, 2, 3, j = 1, 2.
Supposons que x1 = 3 (il y a trois annonces pour le produit 1). Le profit associé à cette valeur doit être 3. Mais
x1 = 3 veut aussi dire que chaque variable binaire associée au produit 1 vaut 1 ; comment dès lors comptabiliser
correctement la contribution de ces trois variables au profit ? La solution consiste à prendre comme profit associé à
la variable yij la différence cij+1 − cij , où cij est le revenu net si nous plaçons j annonce pour le produit i. Dans
notre exemple, le profit associé à
— y11 est 1-0 = 1 ;
— y12 est 3-1 = 2 ;
— y13 est 3-3 = 0 ;
Nous obtenons ainsi le programme mathématique suivant:
Vol | Séquence 1 2 3 4 5 6 7 8 9 10 11 12
1 1 1 1 1
2 1 1 1 1
3 1 1 1 1
4 1 1 1 1 1
5 1 1 1 1
6 1 1 1
7 1 1 1 1 1
8 1 1 1 1
9 1 1 1
10 1 1 1 1
11 1 1 1 1 1
Coût 2 3 4 6 7 5 7 8 9 9 8 9
L’objectif est
min z = 2x1 + 3x2 + 4x3 + 6x4 + 7x5 + 5x6 + 7x7 + 8x8 + 9x9 + 9x10 + 8x11 + 9x12 .
x1 + x4 + x7 + x10 ≥ 1
x2 + x5 + x8 + x11 ≥ 1
x3 + x6 + x9 + x12 ≥ 1
x4 + x7 + x9 + x10 + x12 ≥ 1
...
En pratique, il faut tenir compte des contraintes imposées par les conventions collectives, ce qui complique singuliè-
rement le problème.
xj ∈ {0, 1}, j ∈ J .
4.3. STRATÉGIES DE RÉSOLUTIONS 53
max z = x2
1
s.c. − x1 + x2 ≤ ,
2
7
x1 + x2 ≤ ,
2
x1 , x2 ≥ 0 et entiers.
max z = x2
1
s.c. − x1 + x2 ≤ ,
2
7
x1 + x2 ≤ ,
2
x1 , x2 ≥ 0.
Ce nouveau programme a pour solution 23 , 2 . Que nous arrondissions cette solution à (1, 2) ou (2, 2), nous n’ob-
max z = x1 + 5x2
s.c. x1 + 10x2 ≤ 20,
x2 ≤ 2,
x1 , x2 ≥ 0 et entiers.
max z = x1 + 5x2
s.c. x1 + 10x2 ≤ 20,
x2 ≤ 2,
x1 , x2 ≥ 0,
qui a pour solution optimale (2, 1.8). En arrondissant à (2, 1) afin de garantir l’admissibilité, nous obtenir la valeur
7 pour la fonction objectif, loin de la valeur optimale du programme mixte entier, avec pour valeur optimale 11, en
(0, 2) (voir Figure 4.2).
x2
3
2, 2
2
1
domaine réalisable du
modèle de PL
0 x1
0 1 2 3
milliard. Comme il apparaît qu’il est vite déraisonnable de procéder à une énumération complète des solutions, nous
allons essayer de mettre à profit la relaxation en programme linéaire pour éliminer certaines de ces solutions. Cette
technique d’énumération partielle est connue sous le vocable de branch-and-bound (B&B). Il s’agit d’une approche
diviser-pour-régner:
— décomposition du problème en sous-problèmes plus simples ;
— combinaison de la résolution de ces sous-problèmes pour obtenir la solution du problème original.
Dans l’algorithme de branch-and-bound, chaque sous-problème correspond à un sommet dans l’arbre des solutions.
Nous résolvons la relaxation linéaire de chaque sous-problème. L’information tirée de la relaxation linéaire nous
permettra (peut-être) d’éliminer toutes les solutions pouvant être obtenues à partir de ce sommet.
Un algorithme simple pour énumérer toutes les solutions d’un modèle 0–1 consiste à:
— choisir un sommet dans l’arbre des solutions ;
— choisir une variable x non encore fixée relativement à ce sommet ;
— générer les deux variables x = 0 et x = 1 (la variable x est dite fixée): chaque alternative correspond à un
sommet de l’arbre des solutions ;
— recommencer à partir d’un sommet pour lequel certaines variables ne sont pas encore fixées.
A la racine de l’arbre, aucune variable n’est encore fixée, tandis qu’aux feuilles de l’arbre, toutes les variables ont
été fixées. Le nombre de feuilles est 2n (pour n variables 0–1).
Le calcul de borne (ou évaluation) consiste à résoudre la relaxation linéaire en chaque sommet. L’élagage (ou
élimination) consiste à utiliser l’information tirée de la résolution de la relaxation linéaire pour éliminer toutes les
solutions émanant du sommet courant. Dès lors, le branch-and-bound est un algorithme de séparation et d’évaluation
successives.
4.3. STRATÉGIES DE RÉSOLUTIONS 55
x2
z ∗ = 10 = x1 + 5x2
1
0 x1
0 1 2 3
La relaxation linéaire permet aux variables de prendre les valeurs fractionnaires entre 0 et 1, ce qui conduit à la
solution
5
, 1, 0, 1 ,
6
avec comme valeur z = 16.5. Branchons sur la variable x1 .
Dénotons sous-problème 1 celui obtenu avec x1 = 0:
avec z = 16 + 15 .
Z ∗ = 9 : Z ≥ Z ∗.
Quels sous-problèmes pouvons-nous à présent considérer afin de nous approcher de la solution optimale ? Tous
les sous-problèmes actuellement traités doivent-ils donner naissance à d’autres problèmes. Si un sous-problème
ne donne lieu à aucun autre problème, nous parlerons d’élagage, en référence avec l’idée de couper la branche
correspondante dans l’arbre d’exploration.
Considérons tout d’abord le sous-probleme 1: la solution optimale de la relaxation PL est entière. Il ne sert
donc à rien de brancher sur les autres variables, puisque toutes les autres solutions entières (avec x1 = 0) sont
nécessairement de valeur inférieures ou égales à 9. Nous pouvons donc élaguer ce sommet.
Pour le sous-probleme 2, la solution optimale de la relaxation PL n’est pas entière:
Z ∗ = 9 ≤ Z ≤ 16.
La branche (x1 = 1) peut encore contenir une solution optimale. Mais si nous avions eu Z2 ≤ Z∗, nous aurions pu
conclure que la branche ne pouvait améliorer la meilleure solution courante.
Un sous-problème est elagué si une des trois conditions suivantes est satisfaite :
— test 1: sa borne supérieure (valeur optimale de la relaxation PL) est inférieure ou égale à Z ∗ (valeur de la
meilleure solution courante) ;
— test 2: sa relaxation PL n’a pas de solution réalisable ;
— test 3: la solution optimale de sa relaxation PL est entière.
Lorsque le test 3 est verifié, nous testons si la valeur optimale de la relaxation PL du sous-problème, Zi , est supérieure
à Z ∗ . Si Zi > Z ∗ , alors Z ∗ := Zi , et nous conservons la solution, qui devient la meilleure solution courante. En
résumé, nous obtenons l’algorithme ci-dessous.
(a) parmi les sous-problèmes non encore élagués, choisir celui qui a été crée le plus récemment (s’il y a
égalité, choisir celui de plus grande borne supérieure) ;
(b) appliquer le Test 1: si le sous-problème est élagué, retourner en 2.
(c) brancher sur la prochaine variable non fixée.
4. Calcul de borne:
(a) résoudre la relaxation PL de chaque sous-problème ;
(b) arrondir la valeur optimale si tous les paramètres de l’objectif sont entiers.
5. Elagage: élaguer un sous-problème si
(a) la borne superieure est inférieure ou égale à Z ∗ ;
(b) la relaxation PL n’a pas de solution réalisable ;
(c) la solution optimale de la relaxation PL est entière: si la borne supérieure est strictement supérieure à
Z ∗ , Z ∗ est mise à jour et la solution de la relaxation PL devient la meilleure solution courante.
6. Retourner en 2.
A partir de quel noeud devrions-nous brancher ? Il y a plusieurs choix possibles ; dans cette version, on propose
comme règle de sélection de choisir le sous-problème le plus récemment créé. L’avantage est que cette approche
facilite la réoptimisation lors du calcul de borne, car il n’y a que peu de changements apportés par rapport au
dernier sous-probleme traité. Le désavantage est que cela peut créer un grand nombre de sous-probèmes. Une autre
option est la règle de la meilleure borne: choisir le sous-problème ayant la plus grande borne supérieure.
Dans cette version, la règle de branchement consiste à choisir la prochaine variable non fixée. Il est souvent plus
intéressant de choisir une variable à valeur fractionnaire. En branchant sur une telle variable, il est certain que les
deux sous-problèmes crées mènent à des solutions differentes de la solution courante. De nombreux critères existent
pour choisir une telle variable de facon à orienter la recherche vers un élagage rapide.
Exemple 32 (suite). Jusqu’à maintenant, voici l’arbre obtenu, en branchant sur la variable x1 .
0 F (3)
9 = Z∗
16
1
16
et
4
Z = 13 + : Z3 ≤ 13.
5
Le sous-problème 4 (x1 = 1, x2 = 1) devient
max z5 = 4x4 + 14
s.c. 2x4 ≤ 1
x4 ≤ 1
x4 ≤ 1
x4 binaire.
max z5 = 4x4 + 20
s.c. 2x4 ≤ −4
x4 ≤ 0
x4 ≤ 1
x4 binaire.
Toutes les variables sont fixées, aussi pouvons-nous directement résoudre ces sous-problèmes. Le sous-problème 7 a
pour solution (x1 , x2 , x3 , x4 ) = (1, 1, 0, 0), pour Z7 = 14. La solution est entière, aussi nous élaguons le sous-problème
en vertu du Test 3. Puisque Z7 > Z ∗ , Z ∗ = 14 et la solution du sous-problème devient la meilleure solution courante.
Le sous-problème 8 a pour solution (x1 , x2 , x3 , x4 ) = (1, 1, 0, 1). Cette solution n’est pas réalisable, car la première
contrainte (2x4 ≤ 1) est violée. Le sous-problème est par conséquent élagué par le Test 2.
Le sous-problème 3 est le seul non encore élagué. Appliquons le Test 1: Z3 = 13 ≤ 14 = Z∗. Le sous-problème est
donc elagué. Comme il n’y a plus de sous-problèmes non élagués, nous pouvons nous arrêter. La solution optimale
est:
(x1 , x2 , x3 , x4 ) = (1, 1, 0, 0),
et la valeur optimale est Z ∗ = 14.
L’arbre obtenu suite à l’exécution de l’algorithme se présente comme suit:
x1 x2 x3 x4
0 F (3)
9
0 F (1) 0 F (3)
16 13 14
1 0
16 16
1 1 F (2)
16
1 F (2)
(a) Parmi les sous-problèmes non encore élagués, choisir celui qui a été crée le plus récemment (s’il y a
égalité, choisir celui de plus grande borne supérieure).
(b) Appliquer le Test 1: si le sous-problème est élagué, retourner en 2.
(c) Brancher sur la prochaine variable entière à valeur non entière dans la relaxation PL.
3. Calcul de borne: résoudre la relaxation PL de chaque sous-problème.
4. Elagage: élaguer un sous-problème si
(a) La borne superieure est inférieure ou égale à Z ∗ .
(b) La relaxation PL n’a pas de solution réalisable.
(c) Dans la solution optimale de la relaxation PL, toutes les variables entières sont à valeurs entières: si la
borne supérieure est strictement supérieure à Z ∗ , Z ∗ est mise à jour et la solution de la relaxation PL
devient la meilleure solution courante.
5. Retourner en 2.
5
max 4x1 + x2
x 2
x1 + x2 ≤ 6
9x1 + 5x2 ≤ 45
x1 , x 2 ∈ N .
Le dictionnaire optimal correspondant à la relaxation linéaire de ce programme contient les deux contraintes
15 5 1
x1 = + x3 − x4 ,
4 4 4
9 9 1
x2 = − x3 + x4 ,
4 4 4
où x3 et x4 sont des variables d’écart. Puisque la variable de base x1 n’est pas entière, cette solution de base n’est
pas admissible. nous pouvons réécrire la première contrainte sous la forme
5 1 15
x1 − x3 + x4 = .
4 4 4
En utilisant l’identité
a = bac + (a − bac),
où (a − bac) représente la partie fractionnaire de a (0 ≤ a − bac < 1), nous obtenons
5 3 1 1 15 3
x1 + − + x3 + + x4 = + ,
4 4 4 4 4 4
c’est-à-dire, en mettant tous les coefficients entiers à gauche et les coefficients fractionnaires à droite:
3 3 1
x1 − 2x3 − 3 = − x3 − x4 .
4 4 4
4.3. STRATÉGIES DE RÉSOLUTIONS 61
Puisque les variables x3 et x4 sont non négatives, la partie fractionnaire (constante du membre de droite) est
inférieure à 1, le membre de droite est strictement inférieur à 1. Puisque le membre de gauche est entier, le membre
de droite doit aussi être entier. Or un entier inférieur à 1 doit être inférieur ou égal à zéro. Nous en déduisons une
contrainte additionnelle qui doit être satisfaite par toute solution admissible du problème originel, et que ne satisfait
pas la solution de base courante:
3 3 1
− x3 − x4 ≤ 0.
4 4 4
En utilisant les identités x3 = 6 − x1 − x2 et x4 = 45 − 9x1 − 5x2 , nous obtenons la coupe sous sa forme géométrique:
3x1 + 2x2 ≤ 15.
Cette contrainte linéaire rend inadmissible la solution courante admissible, sans éliminer aucune autre solution
entière. Si la solution du nouveau problème est entière, il s’agit de la solution optimale de notre problème. Sinon,
nous construisons une nouvelle coupe et recommençons.
Exemple 34. Reprenons le problème, illustré sur la Figure 4.3,
max z = 3x1 + 2x2
s.c. 2x1 + 3x2 ≤ 4,
x1 , x2 binaire.
Les solutions réalisables sont (0, 0), (1, 0) et (0, 1).
x2
solution optimale
domaine
réalisable
0 x1
0 1
x2
domaine
réalisable solution optimale entière
0 x1
0 1
ce qui n’est rien d’autre qu’un problème classique d’affection. i représente ici l’indice des n flux, et j, l’indice des
n échangeurs. La variable binaire xij vaut 1 si le flux i est affecté à l’échangeur j, et 0 sinon. Les contraintes
indiquent que chaque échangeur doit être affecté à un flux, et réciproquement. Les coûts cij d’affectation des flux
aux échangeur sont résumés dans la Table 4.5. Le problème peut se formuler en GAMS comme
[Link]
XXX
X Flux
XXX 1 2 3 4
Echangeur XXX
X
A 94 1 54 68
B 74 10 88 82
C 73 88 8 76
D 11 74 81 21
SETS
I streams / A, B, C, D /
J exchangers / 1*4 / ;
1 2 3 4
A 94 1 54 68
B 74 10 88 82
C 73 88 8 76
D 11 74 81 21 ;
VARIABLES X(I,J), Z;
BINARY VARIABLES X(I,J);
OPTION LIMROW = 0;
OPTION LIMCOL = 0;
OPTION SOLPRINT = OFF;
La commande OPTION SOLPRINT=OFF supprime l’impression de la solution ; la sortie sera contrôlée par la commande
DISPLAY placé juste à la suite.
Exemple 36 (Problème de production). Nous souhaitons maximiser le profit que nous pourrions obtenir en consi-
dérant 3 produits. Il n’y a pas coût de productions unitaires, mais des coûts fixes sont présents pour le premier et le
deuxième produits. Chaque produit est stocké, et nous ne pouvons pas dépasser le volume disponible. Le code GAMS
du problème est
VARIABLES
z profit;
64 CHAPITRE 4. PROGRAMMATION MIXTE ENTIÈRE
POSITIVE VARIABLES
x1 produit1
x2 produit2
x3 produit3;
BINARY VARIABLES
y1
y2 ;
EQUATIONS
Objective Maximize profit
Ressource
Upper1 limit on product 1
Upper2 limit on product 2
Upper3 limit on product 3;
Objective..
z =E= 2*x1 + 3*x2 + 0.8*x3 - 3*y1 - 2*y2;
Ressource..
0.2*x1 + 0.4*x2 + 0.2*x3 =L= 1;
Upper1..
x1 =L= 3*y1;
Upper2..
x2 =L= 2*y2;
Upper3..
x3 =L= 5;
Notons la ligne
qui nous donne le critère d’optimalité sur la valeur optimale. Dans le cas présent, nous exigeons que l’écart relatif
entre la borne supérieur et la borne inférieure soit inférieur à 5%.
4.5. EXERCICES 65
4.5 Exercices
Exercice 1 (Hillier et Lieberman [2], Exercice 12.7-9). Utiliser l’algorithme de Branch & Bound pour résoudre le
problème
4.6 Notes
Le contenu de ce chapitre est repris des notes de cours de Patrice Marcotte (2001) et de Bernard Gendron
(2007). L’exemple GAMS sur les échangeurs de chaleur est dû à Grossmann.
66 CHAPITRE 4. PROGRAMMATION MIXTE ENTIÈRE
Thank goodness we don’t have only serious problems, but ridiculous
ones as well.
Edsger W. Dijkstra
5
Réseaux
5.1 Graphes
Les graphes sont un outil puissant de modélisation. Ils interviennent naturellement dans la représentation de
réseaux de transport ou de télécommunication, par exemple, mais également dans la représentation de structures
relationnelles abstraites. Mathématiquement, un graphe G prend la forme G = (N, A) où N est un ensemble de
sommets et A ⊆ N × N un ensemble d’arcs. Le terme réseau est un terme générique désignant un graphe dont les
sommets ou les arcs possèdent des attributs: coûts, capacités, longueurs, etc.
A D
B E
67
68 CHAPITRE 5. RÉSEAUX
A
2 7
2
5 T
5
O B D
4
4 7
1 1
3
4
C E
5.1.3 Transformations
Un graphe orienté dérivé d’un graphe non orienté en introduisant deux arcs pour chaque arête, un dans chaque
direction. A l’inverse, nous qualifierons de graphe sous-jacent à un graphe orienté le graphe obtenu en enlevant
l’orientation des arcs. Si G est un graphe orienté, le graphe dérivé du graphe sous-jacent à G n’est pas G.
Exemple 39 (Réseau de distribution). Reprenons l’exemple du réseau de distribution, illustré sur la Figure 5.3.
A → C → E → D décrit un chemin, et en ignorant l’orientation des arcs, nous décrivons également un chemin
non orienté. A → D → E → C → B est chemin non orienté, mais pas un chemin. D → E → D est circuit, et en
omettant l’orientation des arcs, un circuit non orienté. A → B → C → A est un circuit non orienté (mais pas un
circuit).
5.1.5 Connexité
Deux sommets sont connexes s’il existe au moins un chemin non orienté les reliant. Un graphe est connexe si
toute paire de sommets est connexe. Le plus petit graphe connexe à n sommets possède n − 1 arêtes ; il est appelé
un arbre. Une définition alternative consiste à dire qu’un arbre est un graphe connexe sans cycle. Un arbre partiel
est un arbre obtenu à partir d’un graphe connexe en incluant tous les sommets.
Exemple 40. Retournons sur l’exemple 38. Le graphe ci-dessous n’est pas un arbre partiel, comme il n’est pas
connexe.
5.2. PROBLÈME DU CHEMIN LE PLUS COURT - ALGORITHMES DE CORRECTIONS D’ÉTIQUETTES69
A D
B E
T
O B D
C E
Le graphe ci-dessous est connexe, mais présente des cycles. Par conséquent, il ne s’agit pas d’un arbre.
T
O B D
C E
T
O B D
C E
A chaque arête {i, j}, nous associons une distance cij ≥ 0. Nous cherchons le chemin non orienté (ou chaîne) le plus
court reliant O à T . Par chemin le plus court, nous désignons celui dont la distance totale (somme des distances des
arêtes du chemin) est minimale parmi tous les chemins de O à T . Afin de procéder, nous affectons à chaque noeud
du graphe une étiquette, représentant la meilleure distance connue à un moment donné, de l’origine à ce noeud.
d(j) est fixée à cette valeur. Nous nous arrêtons lorsque T est marqué si nous cherchons à connaître le chemin allant
de O à T spécifiquement, ou sinon jusqu’à avoir marqué tous les sommets. Par la suite, nous supposerons dans la
description que nous voulons marquer tous les sommets. Plus spécifiquement, nous avons l’algorithme ci-dessous.
L’algorithme de Dijkstra s’applique aussi sur un graphe orienté.
posons
Il est possible de montrer qu’une fois un noeud u marqué, dist(u) donne la longueur du plus court chemin de O
à u.
Exemple 41. L’application de l’algorithme de Dijkstra pour l’exemple 38, repris à la Figure 5.4, donne la série
d’itérations résumée dans la Table 5.1.
Il est également possible de trouver les chemins les plus courts entre la source et tous les autres sommets (il
suffit de regarder la valeur de d(i) en chaque sommet i). Nous pouvons également trouver les chemins les plus courts
entre toutes les paires de sommets, avec n applications de l’algorithme de Dijkstra (mais il est possible de faire
mieux). Si certaines distances sont négatives, l’algorithme de Dijkstra ne s’applique cependant pas.
5.2. PROBLÈME DU CHEMIN LE PLUS COURT - ALGORITHMES DE CORRECTIONS D’ÉTIQUETTES71
A
2 7
2
5 T
5
O B D
4
4 7
1 1
3
4
C E
où
— bi = 0 (transfert), offre (source), -demande (puits) ;
— N désigne l’ensemble des sommets ;
— A+ (i) est l’ensemble des arcs sortants du sommet i ;
— A− (i) désigne l’ensemble des arcs entrants au sommet i ;
avec 0 ≤ xij ≤ uij .
O → v1 → v2 → . . . → vk = T.
Nous allons garder trace des distances à partir de O, en construisant pour chaque noeud des surestimations succes-
sives de la longueur du plus court chemin.
1. Initialisation. Pour tout u ∈ N , posons dist(u) := ∞ et pred(u) = NULL. Posons également dist(O) = 0.
Poser i = 0.
2. Si i = |N | − 1, arrêt. Sinon, pour chaque arête {u, v}, posons
i := i + 1.
Retour en 2.
O → v1 → v2 → . . . → vk = T.
Pour chaque i ≤ k,
O → v1 → v2 → . . . → vi .
est le plus court chemin de O à vi . En effet
— après l’itération 1, dist(v1 ) = d(O, v1 ),
— après l’itération 2, dist(v2 ) = d(O, v2 ),
et ainsi de suite jusqu’à l’itération i.
Exemple 42. Nous souhaitons mener à bien le développement d’un nouveau produit, depuis sa production jusqu’au
rapport de projet menant à sa vente. Nous avons la liste des activités reprises dans la Table 5.2, Dénotons l’instant
de départ par O. Nous pouvons représenter les différences tâches, et leurs dépendances, suivant le graphe de la
Figure 5.5. Il est facile de voir que le chemin critique, de longueur 13, vaut
O → A → D → G → J.
Autrement dit, le projet prendra au minimum 13 mois, et les activités critiques sont, dans l’ordre, la conception
du produit, la mise au point du prototype, son test et le rapport de projet. Les autres tâches peuvent s’effectuer en
parallèle (en respectant les contraintes de précédence). Le noeud O ne correspond à aucune activité, mais permet
de définir un point d’entrée dans le graphe. Le point de sortie peut être identifié à J car c’est l’unique activité
1. PERT est un acronyme pour Program Evaluation and Review Technique
2. Pourquoi ?
74 CHAPITRE 5. RÉSEAUX
terminale. Si plusieurs activités ont lieu de manières concomitantes en fin de projet, il n’y a pas d’activité terminale
que nous pourrions identifier. Dans ce cas, nous ajoutons un noeud artificiel, disons T , et traçons un arc depuis
chaque activité de fin vers ce noeud terminal T . Chaque arc portera le pondération à 0, ainsi nous ne modifions pas
la durée du projet de manière arbitraire.
C
2 3
3
A D F
5 2 4 1
1
0 E G J
1 2 1
2 2
B H I
A
2 7
2
5 T
5
O B D
4
4 7
1 1
3
4
C E
uij − xij
Nous définission le graphe résiduel comme le graphe non orienté sous-jacent, où, sur chaque arête, nous associons
deux valeurs: la capacité résiduelle et le flot déjà affecté.
76 CHAPITRE 5. RÉSEAUX
Exemple 44 (Parc Seervada). Continuons avec l’exemple 38, mais en considérant à présent un graphe orienté,
comme sur la Figure 5.7. Supposons qu’en période de grande affluence, nous disposions d’une flotte d’autobus pour
faire visiter les différents postes d’observation du parc. La réglementation limite le nombre d’autobus pouvant circuler
sur chaque tronçon de route. Comment faire circuler les autobus dans le parc de façon à maximiser le nombre total
d’autobus allant de l’origine (O) à la destination (T ) ?
A
2 7
2
5 T
5
O B D
4
4 7
1 1
3
4
C E
Supposons par exemple que l’arc (0, B) a une capacité de 7, ce que nous représentons comme
7
O B
Nous pouvons représenter l’arc comme une arête, en indiquant la capacité disponible au niveau du noeud origine,
et le flot actuel, 0, au niveau de la destination.
O 7 0 B
Si nous affectons cinq unités de flot, nous pouvons représenter la capacité résiduelle au niveau de l’origine, et le
flot au niveau de la destination, comme suit.
O 2 5 B
Interprétation du graphe résiduel: nous avons affecté 5 unités de flot sur l’arc (O, B). Si nous traversons O → B,
2 est la capacité résiduelle et le flot sur (O, B) vaut [Link] nous traverse B → O, la capacité résiduelle est 5 et le flot
sur (B, O) vaut 2.
Un chemin d’augmentation est un chemin allant de la source au puits dans le graphe orienté dérivé du graphe
résiduel. Pour chaque arête {i, j}, l’arc (i, j) possède une capacité résiduelle uij − xij , et l’arc (j, i) possède une
capacité résiduelle xij . Chaque arc du chemin possède une capacité résiduelle strictement positive. La capacité
résiduelle d’un chemin d’augmentation est le minimum des capacités résiduelles de tous les arcs du chemin.
A 3
0
1
5 0 0 T
0 9
7 0 4
O B D 0
0
4 2 5 0
0 0 1
6
0 C E
4 0
A 3
0
1
5 0 0 T 5
0 9
2 5 4
5 O B D 5
0
4 2 0 0
0 5 1
1
0 C E
4 0
A 0
3
1
2 0 3 T 8
3 6
2 5 4
8 O B D 5
0
4 2 0 0
0 5 1
1
0 C E
4 0
A 0
4
0
1 1 4 T 9
3 5
2 5 3
9 O B D 5
1
4 2 0 0
0 5 1
1
0 C E
4 0
A 0
4
0
1 1 6 T 11
3 3
0 7 1
11 O B D 5
3
4 2 0 0
0 5 1
1
0 C E
4 0
A 0
4
0
1 1 7 T 12
3 2
0 7 1
12 O B D 5
3
3 2 0 1
0 5 0
1
1 C E
3 1
A 0
4
0
1 1 7 T 13
3 2
0 7 1
13 O B D 6
3
2 2 0 1
0 5 0
0
2 C E
2 2
A 0
4
0
1 1 8 T 14
3 1
0 7 0
14 O B D 6
4
1 2 1 1
0 4 0
0
3 C E
1 3
8. Il n’y a plus aucun chemin d’augmentation possible ; nous avons atteint le flot maximum, lequel est réparti
comme représenté sur la Figure 5.16.
A
4 3
1
8 T 14
7
14 O B D
4
3 6
1
4
3
C E
A 3
0
1
5 0 0 T
0 9
7 0 4
O B D 0
0
4 2 5 0
0 0 1
6
0 C E
4 0
f (i, j) ≤ cij ,
f (i, j) = −f (j, i),
X
f (i, k) = 0, ∀k 6= s, t,
k∈N
X X
f (s, k) = f (k, t) = d.
k∈N k∈N
5.7 Exercices
1. Formulez le problème de plus court chemin comme un problème de programmation linéaire.
Astuce: on peut voir la longueur d’un chemin comme le coût total payé par une unité de flot voyageant de
l’origine à la destination, le coût d’un arc étant sa longueur.
2. Considérons la construction d’une maison, et nous voulons connaître la durée des travaux préléminaires. Cinq
tâches sont considérées.
Tâche Description Durée (jours)
1 Exécution des terrassements 10
2 Mise en place de la grue 2
3 Fondations 5
4 Branchement électrique 3
5 Installation de la fosse septique 6
Nous avons les contraintes suivantes:
(a) la grue ne peut fonctionner que si le branchement électrique est effectué, mais sa mise en place peut se
faire en parallèle du branchement électrique ;
(b) nous avons besoin de la grue pour les fondations ;
(c) l’installation de fosse septique et les fondations ne peuvent être exécutés que si les travaux de terrasse-
ment sont terminés.
Quelle est la durée minimale totale des travaux ? Soyez précis dans le développement de votre réponse.
5.8 Notes
Ce chapitre se base partiellement sur les notes de cours de Bernard Gendron, 2007. La section sur les plus cours
chemins repose également sur du matériel de cours mis en ligne par Otfried Cheong.
Modèles stochastiques
6
6.1 Concepts de base
Une expérience aléatoire est une expérience dont le résultat n’est pas connu avec certitude. Supposons que tous
les résultats possibles de cette expérience soient connus. L’espace d’échantillonnage Ω est cet ensemble de résultats
possibles d’une expérience aléatoire.
Exemple 46 (Espace d’échantillonnage).
83
84 CHAPITRE 6. MODÈLES STOCHASTIQUES
P [E2 | E1 ] = P [E2 ].
P [E1 | E2 ] = P [E1 ]
P [E1 ∩ E2 ] = P [E1 ]P [E2 ].
En général, nous postulons l’indépendance de deux événements pour se servir des définitions ci-dessus, plutôt que de
déduire l’indépendance de deux événements à partir des définitions. K événements E1 , E2 ,. . . , Ek sont indépendants
si
P [E1 ∩ E2 ∩ . . . Ek ] = P [E1 ]P [E2 ] . . . P [Ek ].
Exemple 49 (Lancer de dés). Soit X la somme des résultats des deux dés. Nous avons
FX (1) = P [X ≤ 1] = 0;
1
FX (2) = P [X ≤ 2] = P [X = 2] = ;
36
6 1
FX (4) = P [X ≤ 4] = = ;
36 6
FX (12) = P [X ≤ 12] = 1.
6.2. VARIABLE ALÉATOIRE 85
aussi,
P [a < X < b] = FX (b) − FX (a) − PX (b).
Exemple 50 (Lancer de dés). Soit X la somme des résultats des deux dés. Alors,
1
FX (2) = P [X ≤ 2] = P [X = 2] = PX (2) = ;
36
6 1
FX (4) = P [X ≤ 4] = P [X = 2] + P [X = 3] + P [X = 4] = PX (2) + PX (3) + PX (4) = = .
36 6
La fonction sous l’intégrale est appelée fonction de densité et satisfait les conditions suivantes:
fx (x) ≥ 0, ∀x;
Z ∞
fx (x)dx = 1
−∞
Si la fonction de densité est continue, alors elle est égale à la dérivée de la fonction de répartition:
dFX
fX (x) = (x).
dx
La fonction de masse prend toujours la valeur 0:
PX (x) = 0, ∀x.
Exemple 51 (Lancer de deux dés). Soit X la somme des résultats des deux dés.
X X
E[X] = kP [X = k] = kP [X = k] = 7.
k k=2,...,12
86 CHAPITRE 6. MODÈLES STOCHASTIQUES
Nous pouvons également considérer l’espérance d’une fonction g(X). Si X est une variable aléatoire discrète,
cela donne X
E[g(X)] = g(k)PX (k).
k
Pour une variable continue, nous aurons
Z +∞
E[g(X)] = g(X)fX (x)dx.
−∞
6.2.4 Variance
La variance associée à une variable aléatoire X, dénotée σ 2 (X), est définie par la formule
σ 2 (X) = E[X 2 ] − E[X]2 = E[(X − E[X])2 ].
Exemple 52 (Lancer de deux dés). Soit X la somme des résultats des deux dés.
X
σ 2 (X) = E[X 2 ] − E[X]2 = k 2 P [X = k] − E[X]2 ≈ 5.833.
k
(θt)k e−θt
PX (k) = P [X = k] = , k = 0, 1, 2, . . . ,
k!
où θ représente le taux moyen.
Exemple 53 (Téléphoniste). Un téléphoniste reçoit en moyenne 2 appels par minute ; quelle est la probabilité de
recevoir moins de 5 appels en 4 minutes ? Nous avons
4 4
X X 8k e−8
P [X < 5] = PX (k) = ≈ 0.1.
k!
k=0 k=0
Cette propriété signifie que la probabilité d’un événement futur, étant donné des événements passés et un état au
temps présent, ne dépend pas du passé, mais uniquement de l’état actuel. La probabilité de transition entre les
états i et j est définie comme
pij = P [Xt+1 = j | Xt = i].
Cette probabilité de transition est dite stationnaire si:
pij ≥ 0, i, j ∈ {0, 1, . . . , M };
M
X
pij = 1 ≥ 0, i ∈ {0, 1, . . . , M }.
j=0
Exemple 55 (Précipitations). Supposons que la probabilité qu’il n’y ait pas de précipitations à Montréal demain,
étant donné:
— qu’il n’y en a pas aujourd’hui est 0.8 ;
— qu’il y en a aujourd’hui : 0.6.
Ces probabilités ne changent pas, même si nous tenons compte de ce qui se passe avant aujourd’hui. La propriété
markovienne est satisfaite:
Nous avons donc une chaîne de Markov dont les probabilités de transition sont:
Grâce aux propriétés des probabilités de transition, nous pouvons déduire celles qui manquent :
Exemple 56 (Marché boursier). À la fin de chaque jour, nous enregistrons le prix de l’action de Google au marché
de Wall Street: (
1 si le prix de l’action n’a pas augmenté à la fin du jour t;
Xt =
0 si le prix de l’action a augmenté à la fin du jour t.
Nous supposons de plus que la probabilité que le prix augmente demain étant donné qu’il a augmenté aujourd’hui
est de 0.7, et qu’il n’a pas augmenté aujourd’hui, 0.5. Nous avons une chaîne de Markov avec comme matrice de
transition:
p00 p01 0.7 0.3
[P ] = =
p10 p11 0.5 0.5
Supposons maintenant que la probabilité que le prix de l’action augmente demain dépend non seulement de ce
qui est arrivé aujourd’hui, mais également de ce qui est arrivé hier. Le processus stochastique défini précédemment
n’est alors plus une chaîne de Markov. Nous pouvons néanmoins nous en sortir en introduisant un état pour chaque
combinaison d’états possibles sur deux jours consécutifs. Nous définissons alors le processus stochastique suivant,
où l’indice t représente deux jours consécutifs:
0 si le prix de l’action a augmenté hier et aujourd’hui;
3 si le prix de l’action n’a pas augmenté, ni hier, ni aujourd’hui;
Xt =
2 si le prix de l’action a augmenté hier, mais pas aujourd’hui;
1 si le prix de l’action a augmenté aujourd’hui, mais pas hier.
Remarquons qu’il est impossible de passer de l’état 0 au temps t à l’état 1 au temps t + 1, car Xt = 0, si le prix
augmente hier et aujourd’hui, et Xt+1 = 1, si le prix augmente demain, mais pas aujourd’hui. La probabilité que le
prix de l’action augmente demain vaut
— s’il a augmenté hier et aujourd’hui: 0.9 ;
— s’il a augmenté aujourd’hui, mais pas hier: 0.6 ;
— s’il a augmenté hier, mais pas aujourd’hui: 0.5 ;
— s’il n’a pas augmenté, ni hier, ni aujourd’hui: 0.3.
La matrice de transition est
0.9 0 0.1 0
0.6 0 0.4 0
P = 0 0.5 0 0.5
0 0.3 0 0.7
6.5 Notes
Ce chapitre se base essentiellement sur les notes de cours de Bernard Gendron, 2007.
90 CHAPITRE 6. MODÈLES STOCHASTIQUES
Programmation dynamique
7
Supposons un problème décomposé en étapes. Chaque étape possède un certain nombre d’états correspondant
aux conditions possibles au début d une étape. À chaque étape, nous devons prendre une décision qui associe à
l’état courant l’état au début de la prochaine étape. Dans le cas d’un problème d optimisation, la programmation
dynamique identifie une politique optimale: une décision optimale à chaque étape pour chaque état possible.
91
92 CHAPITRE 7. PROGRAMMATION DYNAMIQUE
Exemple 57 (Production-inventaire). Une compagnie doit fournir à son meilleur client trois unités du produit P
durant chacune des trois prochaines semaines. Les coûts de production sont donnés dans la Table 7.1. Le coût pour
chaque unité produite en temps supplémentaire est 100$ de plus que le coût par unité produite en temps régulier. Le
coût unitaire d’inventaire est de 50$ par semaine. Au début de la première semaine, il y a deux unités du produit
dans l’inventaire. La compagnie ne veut plus rien avoir dans son inventaire au bout des trois semaines. Combien
doit-on produire d’unités chaque semaine afin de rencontrer la demande du client, tout en minimisant les coûts ?
Une étape correspond ici à une semaine, N = 3, n = 1, 2, 3, et
— sn , l’état au début de la semaine n, est le nombre d’unités de produit dans l inventaire ;
— xn : nombre d’unités produites lors de la semaine n ;
— sn+1 = sn + xn − 3 (puisque nous devons livrer 3 unités au client à chaque semaine) ;
— s1 = 2 (puisqu’il y a 2 unités au début).
Soient cn , le coût unitaire de production au cours de la semaine n, rn la production maximale en temps régulier
pendant la semaine n, et mn la production maximale durant la semaine n. Le coût au cours de la semaine n est
pn (sn , xn ) = cn xn + 100 max(0, xn − rn ) + 50 max(0, sn + xn − 3).
Le coût total vaut dès lors
∗
fn (sn , xn ) = pn (sn , xn ) + fn+1 (sn+1 ),
et le coût optimal répond à la récurrence
fn∗ (sn ) = min{pn (sn , xn ) + fn+1
∗
(sn+1 ) | 3 − sn ≤ xn ≤ mn }.
Si n = 3, nous devons poser
f4∗ (s4 ) = 0.
De plus,
s4 = 0 = s3 + x3 − 3,
aussi
x3 = 3 − s3 .
Calculons d abord les valeurs f3∗ (s3 ) et x∗3 . Nous obtenons le tableau
s3 f3 (s3 , 3 − s3 ) f3∗ (s3 ) x∗3
0 1400 1400 3
1 900 900 2
2 400 400 1
≥3 0 0 0
Voyons maintenant comment nous pouvons calculer les valeurs f2∗ (s2 ) et x∗2 , lorsque s2 = 0. Nous devons avoir
x2 ≥ 3 (car nous devons livrer au moins 3 unités du produit). D’autre part,
f2 (0, 3) = p2 (0, 3) + f3∗ (0) = 1500 + 1400 = 2900,
f2 (0, 4) = p2 (0, 4) + f3∗ (1) = 2150 + 900 = 3050,
f2 (0, 5) = p2 (0, 5) + f3∗ (2) = 2800 + 400 = 3200,
f2∗ (0) = min{f2 (0, 3), f2 (0, 4), f2 (0, 5)} = f2 (0, 3).
Par conséquent, x∗2 = 3. Nous procédons de la même manière pour s2 = 1, 2, 3.
7.1. PRINCIPE D’OPTIMALITÉ DE BELLMAN 93
Pour la première étape (n = 1), nous avons s1 = 2 (il y a 2 unités au départ dans l inventaire). Nous devons donc
avoir x1 ≥ 1. De plus,
Par conséquent, f1∗ (2) = f1 (2, 4) et x1 ∗ = 4. Sous forme de tableau, cela donne:
Exemple 58 (Affectation de ressources). Trois équipes de recherche travaillent sur un même problème avec chacune
une approche différente. La probabilité que l’équipe Ei échoue est P [E1 ] = 0.4, P [E2 ] = 0.6, P [E3 ] = 0.8. Ainsi,
la probabilité que les trois équipes échouent simultanément est: (0.4)(0.6)(0.8) = 0.192. Nous voulons ajouter deux
autres scientifiques afin de minimiser la probabilité d’échec. À quelles équipes faut-il affecter ces deux scientifiques
afin de minimiser la probabilité d’échec ? La Table 58 représente les probabilités d’échec pour chaque équipe en
fonction du nombre de scientifiques ajoutés.
Scientifiques ajoutés E1 E2 E3
0 0.4 0.6 0.8
1 0.2 0.4 0.5
2 0.15 0.2 0.3
Nous faisons correspondre l’équipe n à l’étape n, pour n = 1, 2, 3 (N = 3). L’état sn est le nombre de scientifiques
non encore affectés. La décision xn correspond au nombre de scientifiques affectés à l’équipe En . Soit pn (xn ) la
probabilité d’échec de l’équipe En si xn scientifiques lui sont affectés. Alors,
∗
fn (sn , xn ) = pn (xn ).fn+1 (sn − xn )
fn∗ (sn ) = min{fn (sn , xn ) | xn = 0, 1, . . . , sn },
avec f4∗ (0) = 1. Calculons d abord f3∗ (s3 ) et x∗3 . Nous devons avoir s3 = x3 (nous affectons tous les scientifiques
non encore affectés), de sorte que nous avons le tableau
Pour calculer les valeurs f2∗ (s2 ) et x∗2 , lorsque s2 = 1, observons d’abord que nous devons avoir x2 ≤ 1. Nous avons
Dès lors, x∗2 = 0. Nous pouvons procéder de même pour s2 = 0 et 2. Ceci donne le tableau ci-dessous.
Pour la dernière étape (n = 1), nous avons s1 = 2 (il y a 2 scientifiques à affecter). Nous avons
La politique optimale est donc: x∗1 = 1 (d’où s2 = 1), x∗2 = 0 (d’où s3 = 1), x∗3 = 1. La probabilité d’échec est:
f1∗ (1) = 0.06.
Exemple 59 (problème Wyndor Glass). Nous considérons deux types de produits (produit 1, produit 2) et trois
usines (usine 1, usine 2, usine 3). La ressource i est la capacité de production pour l’usine i, exprimée en heures
par semaine. Nous connaissons le profit par lot (20 unités) de chaque produit, et chaque lot du produit 1 (2) est
le résultat combiné de la production aux usines 1 et 3 (2 et 3). Nous souhaitons déterminer le taux de production
pour chaque produit (nombre de lots par semaine) de façon à maximiser le profit total. Les données sont reproduites
dans la Table 59. L’étape n sera le produit n, n = 1, 2 (N = 2). Nous avons comme état sn (R1 , R2 , R3 )n , où Ri
est la quantité de la ressource i (temps de production à l usine i) non encore affectée. La décision xn est le nombre
7.2. AFFECTATION DE RESSOURCES 95
de lots du produit n, et
∗
fn (sn , xn ) = cn xn + fn+1 (sn+1 ) (f3∗ (s3 ) = 0),
f2∗ (s2 ) = max{5x2 | 2x2 ≤ 12, 2x2 ≤ 18 − 3x1 , x2 ≥ 0}
f1∗ (s1 ) = max{3x1 + f2∗ (s2 ) | x1 ≤ 4, 3x1 ≤ 18, x1 ≥ 0}
De plus,
s1 = (4, 12, 18), s2 = (4 − x1 , 12, 18 − 3x1 ).
Afin de résoudre le problème, nous cherchons d abord f2∗ (s2 ) et x∗2 . Nous avons
f2∗ (s2 ) = max{5x2 | 2x2 ≤ 12, 2x2 ≤ 18 − 3x1 , x2 ≥ 0}.
Les contraintes
2x2 ≤ 12 et 2x2 ≤ 18 − 3x1
impliquent
18 − 3x1
x2 ≤ min 6, .
2
Par conséquent
18 − 3x1
f2∗ (s2 ) = max 5x2 | 0 ≤ x2 ≤ min 6, ,
2
et
18 − 3x1
x∗2 = min 6, . (7.2.1)
2
Nous avons donc
18 − 3x1
f2∗ (s2 )
= 5 min 6, | 3x1 ≤ 18 .
2
Calculons maintenant f1∗ (s1 ) et x∗1 . Nous avons
f1∗ (s1 ) = max{3x1 + f2∗ (s2 ) | x1 ≤ 4, 3x1 ≤ 18, x1 ≥ 0}.
Or,
x1 ≤ 4
implique
3x1 ≤ 18.
Ainsi
18 − 3x1
f1∗ (s1 ) = max 3x1 + 5 min 6, | 0 ≤ x1 ≤ 4 .
2
Or, (
18 − 3x1 6 si 0 ≤ x1 ≤ 2,
min 6, = 18−3x1
2 2 si 2 ≤ x1 ≤ 4.
Par conséquent,
f1∗ (s1 ) = max{f1 (s1 , x1 ) | 0 ≤ x1 ≤ 4},
avec (
3x1 + 30 si 0 ≤ x1 ≤ 2,
f1 (s1 , x1 ) =
45 − 29 x1 si 2 ≤ x1 ≤ 4.
Le maximum est atteint en x∗1 = 2 et f1∗ (s1 ) = 36.
Comme, de (7.2.1),
18 − 3x1
x∗2 = min 6, ,
2
et x∗1 = 2, nous avons x∗2 = 6. La politique optimale est donc: x∗1 = 2, x∗2 = 6 de valeur f1∗ (s1 ) = 36.
En utilisant la même approche, il est possible de résoudre par la programmation dynamique des modèles où
— l’objectif ou les contraintes sont non linéaires ;
— certaines variables sont entières.
96 CHAPITRE 7. PROGRAMMATION DYNAMIQUE
Nous pouvons calculer les décisions optimales x1 , . . . , xN dès le départ, car aucune nouvelle information n’est
obtenue en cours de route. Si les ensembles d’états et de décisions sont finis à chaque étape, résoudre ce problème
équivaut à trouver un plus court chemin dans un réseau, où les noeuds sont tous les états (k, sk ) possibles, pour
1 ≤ k ≤ N , auxquels nous ajoutons un noeud artificiel t qui correspond à l’état où tout est terminé (étape N + 1).
Pour chaque noeud (k, sk ), k < N , et chaque décision xk , nous introduisons un arc de longueur g(sk , xk ) partant
du noeud (k, sk ) et allant au noeud (k + 1, sk+1 ), avec sk+1 = gk (sk , xk ). Chaque noeud (N, sN ) est relié au noeud
t par un arc de longueur gN (xN ). Nous cherchons alors un plus court chemin de (0, s0 ) à t.
...
gN
(x
N
... gN
)
(x
N )
État initial ) Noeud terminal artificiel
(x N
gN
...
N
)
(x
gN
...
Si on numérote les noeuds couche par couche, par ordre croissant de valeur de k, on obtient un réseau sans cycle
et ordonné topologiquement (i.e., un arc (i, j) ne peut exister que si i < j). Dans le cas où il n’est pas nécessaire
de mémoriser le numéro d’étape, on peut simplifier le réseau en agrégeant des noeuds. Le réseau résultant peut
ne plus être ordonné topologiquement. Inversement, tout problème de recherche d’un plus court chemin dans un
réseau peut se formuler comme un problème de programmation dynamique déterministe (avec des coûts additifs
entre étapes).
Exemple 60 (Jeu de hasard). Le jeu consiste à miser un nombre quelconque de jetons. Si nous gagnons, nous
remportons le nombre de jetons misés. Si nous perdons, nous perdons le nombre de jetons misés. Un statisticien
croit pouvoir gagner chaque jeu avec une probabilité égale à 2/3. Ses collègues parient avec lui qu’en misant au
départ 3 jetons, il aura moins de 5 jetons après 3 parties. Combien de jetons miser à chacune des 3 parties ?
Le modèle peut se formuler comme suit: l’étape n correspond à la partie n, n = 1, 2, 3 (N = 3). L’état sn est
le nombre de jetons au début de la partie n, et la décision xn correspond au nombre de jetons à parier à la partie
n. Nous souhaitons maximiser la probabilité d’avoir au moins 5 jetons après 3 parties. Soit fn (sn , xn ) la probabilité
7.4. CAS PROBABILISTE 97
de terminer avec au moins 5 jetons, étant donné que nous sommes dans l’état sn à l’étape n, que nous misons xn
jetons et que nous effectuons des décisions optimales aux étapes n + 1, . . . , N . Nous avons
étant donné que nous dans l’état sn à l’étape n et que nous misons xn jetons, nous pouvons:
— perdre et se retrouver dans l’état sn − xn avec une probabilité 1/3 ;
— gagner et se retrouver à l’état sn + xn avec une probabilité 2/3.
Nous avons la fonction de récurrence
1 ∗ 2 ∗
fn (sn , xn ) = fn+1 (sn − xn ) + fn+1 (sn + xn ).
3 3
De plus, (
0 si s4 < 5,
f4∗ (s4 ) =
1 si s4 ≥ 5.
Calculons d abord f3∗ (s3 ) et x∗3 . Nous avons le tableau
s3 x3 = 0 x3 = 1 x3 = 2 x3 = 3 x3 = 4 f3∗ (s3 ) x∗3
0 0 - - - - 0 0
1 0 0 - - - 0 ≥0
2 0 0 0 - - 0 ≥0
2 2 2
3 0 0 3 3 - 3 ≥2
2 2 2 2 2
4 0 3 3 3 3 3 ≥1
≥5 1 1 0
Voyons maintenant comment nous pouvons calculer les valeurs f2∗ (s2 ) et x∗2 , lorsque s2 = 3. Il est clair que
nous devons avoir x2 ≤ 3. De plus,
1 ∗ 2 ∗ 2
f2 (3, 0) = f (3) + f (3) = ;
3 3 3 3 3
1 2 ∗ 4
f2 (3, 1) = f3∗ (2) + f (4) = ;
3 3 3 9
1 ∗ 2 ∗ 2
f2 (3, 2) = f3 (1) + f (5) = ;
3 3 3 3
1 ∗ 2 ∗ 2
f2 (3, 3) = f3 (0) + f (6) = .
3 3 3 3
Ainsi,
f2∗ (3) = max{f2 (3, 0), f2 (3, 1), f2 (3, 2), f2 (3, 3)} = f2 (3, 0).
Dès lors, x∗2 = 0, 2 ou 3. De la même façon, pour s2 , nous avons le tableau,
s2 x2 = 0 x2 = 1 x2 = 2 x2 = 3 x2 = 4 f2∗ (s2 ) x∗2
0 0 - - - - 0 0
1 0 0 - - - 0 ≥0
4 4 4
2 0 9 9 - - 9 1, 2
2 4 2 2 2
3 3 9 3 3 - 3 0, 2, 3
2 8 2 2 2 8
4 3 9 3 3 3 9 ≥1
≥5 1 1 0
Pour la première étape (n = 1), nous avons s1 = 3, comme nous pouvons affecter 3 jetons au départ du jeu. Ceci
donne le tableau
s1 x1 = 0 x1 = 1 x1 = 2 x1 = 3 f1∗ (s2 ) x∗1
2 20 2 2 20
3 3 27 3 3 27 1
98 CHAPITRE 7. PROGRAMMATION DYNAMIQUE
Dès lors
1 ∗ 2 ∗ 2
f1 (3, 0) = f (3) + f (3) = ,
3 2 3 2 3
1 2 ∗ 20
f1 (3, 1) = f2∗ (2) + f (4) = ,
3 3 2 27
1 ∗ 2 ∗ 2
f1 (3, 2) = f2 (1) + f (5) = ,
3 3 2 3
1 ∗ 2 ∗ 2
f1 (3, 3) = f2 (0) + f (6) = ,
3 3 2 3
et par conséquent,
f1∗ (3) = max{f1 (3, 0), f1 (3, 1), f1 (3, 2), f1 (3, 3)} = f1 (3, 1).
Nous en déduisons
x∗1 = 1.
La politique optimale est donc :
— x∗1 = 1 ;
— Si nous gagnons (s2 = 4), x∗2 = 1.
— Si nous gagnons (s3 = 5), x∗3 = 0.
— Si nous perdons (s3 = 3), x∗3 = 2 ou 3.
— Si nous perdons (s2 = 2), x∗2 = 1 ou 2.
— Si nous gagnons (s3 = 3 ou 4), x∗3 = 2 ou 3 (si x∗2 = 1) ou 1 ≤ x∗3 ≤ 4 (si x∗2 = 2).
— Si nous perdons (s3 = 1 ou 0), x∗3 ≥ 0 (mais le pari est perdu !).
7.5 Notes
Ce chapitre se base essentiellement sur les notes de cours de Bernard Gendron, 2007. Le lien avec les plus courts
chemins est développé notamment dans [1].
8
Simulation
8.1 Introduction
Simuler un système stochastique consiste à imiter son comportement pour estimer sa performance Un modèle
de simulation est une représentation du système stochastique permettant de générer un grand nombre d’événements
aléatoires et d’en tirer des observations statistiques.
Exemple 61 (Jeu de hasard). Chaque partie consiste à tirer une pièce de monnaie jusqu’à ce que la différence
entre le nombre de faces et le nombre de piles soit égale à 3. Chaque tirage coûte 1$, et chaque partie jouée rapporte
8$ au joueur. Nous aurons par exemple les jeux
— FFF: gain de 8$-3$=5$ ;
— PFPPP: gain de 8$-5$=3$ ;
— PFFPFPFPPPP: perte de 8$-11$=3$.
Nous nous demandons par conséquent s’il est intéressant de jouer. Pour répondre à cette question, nous allons
simuler le jeu. Il y a deux façons de le faire:
— nous pouvons jouer pendant un certain temps sans miser d’argent ;
— nous pouvons simuler le jeu par ordinateur.
Néanmoins, simuler une seule partie ne nous aide pas à prendre une décision. Pour cela, il faudrait voir ce qui se
passe sur un grand nombre de parties et mesurer le gain moyen (ou la perte moyenne).
Dans cet exemple, nous pouvons définir les éléments d’un modèle de simulation comme suit
système stochastique : tirages successifs ;
horloge : nombre de tirages ;
définition de l’état du système : N (t), le nombre de faces moins le nombre de piles après t tirages ;
événements modifiant l’état du système : tirage de pile ou de face ;
méthode de génération d’événements : génération d’un nombre aléatoire uniforme ;
formule de changement d’état : N (t + 1) = N (t) + 1, si F est tirée ; N (t) − 1, si P est tirée ;
performance : 8 − t, lorsque N (t) atteint +3 ou -3.
99
100 CHAPITRE 8. SIMULATION
tous les serveurs occupés rejoindront (généralement) une ou plusieurs files (ou lignes) devant les serveurs, d’où la
qualification de file d’attente. . Quelques exemples de files d’attente sont repris dans la Table 8.1. Le système de file
L = λW,
où L est le nombre moyen de clients dans le système, λ, le taux moyen d’arrivée des nouveaux clients, et W le temps
moyen dans le système.
Exemple 62 (File d’attente M/M/1). En situation d’équilibre, plusieurs résultats analytiques (obtenus par analyse
du modèle mathématique) existent. Soit λ le taux moyen d’arrivée et µ le taux moyen de service. Supposons que
λ < µ Le nombre moyen de clients dans le système vaut
λ
L= .
µ−λ
8.2. FILES D’ATTENTE 101
Pour générer un événement, nous pouvons simplement tirer deux nombres aléatoires selon une loi U [0, 1]. Si le
premier nombre est strictement plus petit que 0.259, nous aurons une arrivée. Si le deuxième nombre est strictement
inférieur à 0.393, nous considérerons un départ (si un client était en cours de service). Ceci pourrait par exemple
donner les chiffres de la Table 8.2.
D’après cet exemple, il est possible d’estimer les performances du système. Que se passe-t-il si nous voulons
mesurer W , le temps moyen passé dans le système ? Nous avons deux clients qui sont entrés dans le système
et chacun y est resté 18 minutes ou 0.3 heures, aussi peut-on estimer W par 0.3. Pourtant, la vraie valeur est
W = 1/(µ − λ) = 0.5. Il faudrait un échantillon beaucoup plus grand, et ce d’autant plus que nous devrions simuler
le système en état d’équilibre.
La génération d’événement peut se résumer comme suit:
1. faire écouler le temps jusqu’au prochain événement ;
2. mettre à jour le système en fonction de l’événement qui vient de se produire et générer aléatoirement le temps
jusqu’au prochain événement ; recueillir l’information sur la performance du système ;
3. retourner à 1.
Nous pourrions ainsi obtenir la suite d’événements reprise dans la Table 8.3.
Si nous considérons une simulation comportant l’arrivée de 10000 clients, les résultats montrent que:
— le nombre moyens de clients dans le système est L ≈ 1.5 ;
— le temps moyen dans le système est W ≈ 0.5.
Remarque: des résultats analytiques existent pour des modèles simples (comme M/M/1), mais pas pour des files
d’attente plus complexes.
102 CHAPITRE 8. SIMULATION
Planification
Horloge de du ou des pre-
simulation Initialisation miers(s) évé-
mise à 0 nement(s)
Gestion de
l’événement
actuel
Dépilement
du prochain Planification
événement et du ou des
avancement événements
de l’horloge en découlant.
de simulation
Liste
non d’événements
vide ?
oui
Arrêt
8.4 Notes
Ce chapitre se base essentiellement sur les notes de cours de Bernard Gendron, 2007. Pour plus de détails sur
la simulation à événements discrets, nous renvoyons le lecteur aux notes du cours IFT3245, du même auteur: .
104 CHAPITRE 8. SIMULATION
Annexe
8.5.2 GAMS
GAMS est l’acronyme de Generalized Algebric Modeling System. Il s’agit avant tout d’un langage servant à
la formulation et à la résolution de modèle de programmation mathématique. En pratique, il s’agit d’un paquetage
intégré qui permet de
— spécifier la structure du modèle d’optimisation ;
— spécifier et calculer les données qui entrent dans le modèle ;
— résoudre ce modèle ;
— produire un rapport sur un modèle ;
— conduire une analyse comparative.
GAMS peut être téléchargé à l’adresse [Link] La licence de GAMS et des solveurs académique est
passablement élevés, toutefois il est utilisable de manière gratuite en version de démonstration, ce qui permettra
d’illustrer certains concepts de base du cours.
Sous des environnements de type UNIX (incluant Mac OS X et la majorité des distributions Linux), GAMS
s’utilise uniquement en ligne de commande. Sous Microsoft Windows, il dispose d’une interface graphique.
105
106 ANNEXE
VARIABLES
Z Variable Z;
POSITIVE VARIABLES
X1 Variable X1
X2 Variable X2
X3 Variable X3;
EQUATIONS
Equation1 Equation 1
Equation2 Equation 2
Equation3 Equation 3;
Equation1..
Z =E= 109*X1 + 90*X2 + 115*X3;
Equation2..
X1 + X2 + X3 =L= 100;
Equation3..
6*X1 + 4*X2 + 8*X3 =L= 500;
Remarquons d’ores et déjà que chaque instruction se termine par un point-virgule. Leur omission produit une erreur
de compilation. Détaillons les instructions.
VARIABLES
Z Variable Z;
POSITIVE VARIABLES
X1 Variable X1 (Optional Text)
X2 Variable X2
X3 Variable X3;
Pour tout modèle construit avec GAMS, il convient d’identifier l’objectif à l’aide d’une variable, ici Z. Autrement
dit,
max cT x
x
devient
max z
s.c. z = cT x,
Z = CX.
8.5. LOGICIELS D’OPTIMISATION 107
Les noms de variables peuvent avoir jusqu’à 31 caractères. Il est également possible de spécifier plus précisément le
type des variables:
VARIABLE variables non restreintes
POSITIVE VARIABLE variables non négatives
NEGATIVE VARIABLE variables non positives
BINARY VARIABLE variables binaires (dans {0, 1})
INTEGER VARIABLE variables entières (naturelles)
EQUATIONS
Equation1 Equation 1
Equation2 Equation 2
Equation3 Equation 3;
Comme pour les variables, le nom d’une équation peut prendre jusqu’à 31 caractères. A droite du nom de l’équation
figure un (bref) texte d’explications.
Il nous faut de plus spécifier la structure algébrique: après avoir nommé les équations, la structure algébrique
exacte doit être spécifiée en utilisant la notation ..:
Equation1..
Z =E= 109*X1 + 90*X2 + 115*X3;
Equation2..
X1 + X2 + X3 =L= 100;
Equation3..
6*X1 + 4*X2 + 8*X3 =L= 500;
La forme algébrique exige l’utilisation d’une syntaxe speciale afin de définir la forme exacte de l’équation:
=E= contrainte d’égalité
=L= inférieur ou égal
=G= supérieur ou égal
Spécification du modèle
Le mot-clé MODEL est utilisé pour identifier les modèles à résoudre. Il convient de
1. donner un nom au modèle (par exemple Example1) ;
2. spécifier les équations à inclure, entre des barres italiques / /.
Ceci donne pour notre exemple
Spécification du solveur
Le mot-clé SOLVE indique à GAMS d’appliquer un solveur au modèle nommé, en utilisant les données définies
juste avant l’instruction SOLVE. Ainsi, dans notre exemple, nous avions:
En place de LP, nous devrions écrire MIP pour traiter un problème de programmation entière mixte:
Rapport de solution
A la fin de l’exécution, GAMS produit un rapport indiquant la solution trouvée, la valeur de la fonction
objectif en cette solution, ainsi que différentes informations permettant d’analyser le comportement de l’algorithme
d’optimisation, et diverses propriétés du problème en cours d’étude. En particulier, le résumé de rapport donne le
nombre total de cas non optimaux, non réalisables et non bornés rencontrés.
Equation1 Equation 1
Equation2 Equation 2
Equation3 Equation 3
Le point simple “.” représente un zéro, tandis que INF représente l’infini.
8.5. LOGICIELS D’OPTIMISATION 109
Sommations
P
La notation mathématique j xj se traduira par
SUM(j,x(j))
SUM(j,SUM(i,x(j,i))
ou encore
SUM((j,i),x(j,i))
Définition d’ensemble
Spécifier les variables une à une est vite fastidieux, pour ne pas dire irréaliste (par exemple si nous avons un
million de variables), c’est pourquoi en modélisation algébrique, nous utilisons des indices. GAMS met à disposition
le mot clé SET pour définir des ensembles, parcouru par un indice spécifié juste avant:
Par exemple,
défini l’ensemble {1, 2, . . . , 10}, qui peut être parcouru avec l’indice i. Il est possible d’associer un autre indice au
même ensemble au moyen de la commande ALIAS, par exemple
permet d’utiliser j au lieu de i. Cette commande est utile par exemple pour traduire une contrainte de la forme
xij + xji = 1, i = 1, . . . , n, j = 1, . . . , n,
SET i / 1*10 /
j / 1*10 /
Entrée de données
Les données sont entrées au moyen de quatre différents types de commandes GAMS:
SCALAR , pour les éléments ne dépendant pas d’ensembles ;
PARAMETERS , pour les éléments qui sont des vecteurs ;
TABLES , pour des éléments de deux dimensions ou plus ;
PARAMETERS , en affectation directe.
La manière la plus simple d’entrée des données est l’emploi de la commande SCALAR, qui prend la syntaxe suivante
dans le format basique:
110 ANNEXE
PARAMETERS
c(i) Costs / X1 109
X2 90
X3 115 /
a(i) Coeff / X1 6
X2 4
X3 8 /;
VARIABLES
Z Variable Z;
POSITIVE VARIABLES
x(i) Variables;
EQUATIONS
Equation1 Equation 1
Equation2 Equation 2
Equation3 Equation 3;
Equation1..
Z =E= sum(i, c(i)*x(i));
Equation2..
sum(i, x(i)) =L= 100;
Equation3..
sum(i, a(i)*x(i)) =L= 500;
8.6 Notes
La section sur GAMS s’inspire partiellement du cours Applied Mathematical Programming donné par Bruce A.
McCarl à l’Université Texas A&M.
112 ANNEXE
Bibliographie
[1] Dimitri P. Bertsekas. Dynamic Programming and Optimal Control, volume I. Athena Scientific, Belmont, MA,
USA, 3rd édition, 2005.
[2] Frederick S. Hillier et Gerald J. Lieberman. Introduction to Operations Research. McGraw-Hill, New York,
USA, seventh édition, 2001.
[3] Maurice Kirby. Patrick maynard stuart blackett. International Transactions in Operational Research, 10(4):405–
407, 2003.
[4] Jeffrey C. Lagarias, James A. Reeds, Margaret H. Wright et Paul E. Wright. Convergence properties of the
Nelder-Mead simplex method in low dimensions. SIAM Journal on Optimization, 9(1):112–147, 1998.
[5] Adam B. Levy. The Basics of Practical Optimization. SIAM, Philadelphia, USA, 2009.
[6] Ken I. M. McKinnon. Convergence of the Nelder-Mead simplex method to a nonstationary point. SIAM Journal
on Optimization, 9(1):148–158, 1998.
[7] John A. Nelder et Roger Mead. A simplex method for function minimization. Computer Journal, 7:308–313,
1965.
[8] Jorge Nocedal et Stephen J. Wright. Numerical Optimization. Springer, New York, NY, USA, 1999.
113