Telechargé par Ene Shi

OPM3001-DocDeCours (1)

publicité
OPM3001 - Techniques quantitatives de gestion
Eric L ALLET, Jean-Luc R AFFY
TELECOM É COLE DE M ANAGEMENT - 1 ÈRE A NNÉE
Décembre 2009
ii
Eric L ALLET, Jean-Luc R AFFY
Table des matières
Avant propos
vii
I Théorie des graphes
1
1
Graphes : définitions et généralités
3
1.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2
Graphes non orientés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3
Graphes orientés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.4
Matrice d’adjacence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.5
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2
3
4
5
Les problèmes d’ordonnancement
11
2.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.2
Le diagramme de GANTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.3
La méthode potentiel-tâches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.4
Recherche du plus long chemin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
2.5
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
Les Arbres
27
3.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.2
Définitions et propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.3
L’algorithme de Kruskal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.4
L’algorithme de Prim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.5
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
Recherche du plus court chemin
37
4.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.2
Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.3
Algorithme de Ford-Moore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.4
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
Flot Maximal
45
5.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
5.2
Description du problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
5.3
Exemple de problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
Eric L ALLET, Jean-Luc R AFFY
iii
5.4
L’algorithme de Ford-Fulkerson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
5.5
Exemple de flot max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
5.6
Flot maximal à coût minimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.7
L’algorithme de Busacker et Gowen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.8
Exemple flot max coût min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
5.9
Variantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
5.10 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
II Programmation linéaire
55
6
La programmation linéaire
57
6.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
6.2
La forme canonique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
6.3
Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
7
8
9
La méthode géométrique
61
7.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
7.2
La méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
7.3
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
7.4
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
Le simplexe
65
8.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
8.2
La forme standard et son tableau associé . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
8.3
L’algorithme du simplexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
8.4
Interprétation du tableau final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
8.5
Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
8.6
Plus loin au sujet des valeurs marginales . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
8.7
Unités et simplifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
8.8
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
Le problème dual
77
9.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
9.2
Création du problème dual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
9.3
Exemple de résolution par le problème dual . . . . . . . . . . . . . . . . . . . . . . . . .
78
9.4
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
10 Simplexe : le cas général
iv
81
10.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
10.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
10.3 La forme canonique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
10.4 La méthode par l’exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
10.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
Eric L ALLET, Jean-Luc R AFFY
11 Programmation linéaire en nombres entiers
87
11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
11.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
11.3 La méthode par l’exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
11.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
92
11.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
93
III Modélisation
95
12 Modélisation
97
12.1 Chemin de la question à la réponse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
12.2 Les erreurs à ne pas faire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
12.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
IV Appendix
105
A Corrections des exercices
107
A.1 Graphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
A.2 Ordonnancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
A.3 Arbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
A.4 Plus court chemin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
A.5 Flot maximal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
A.6 Méthode géométrique et Simplexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
A.7 Dual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
A.8 Simplexe : le cas général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
A.9 Programmation linéaire en nombres entiers . . . . . . . . . . . . . . . . . . . . . . . . . 142
A.10 Modélisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Eric L ALLET, Jean-Luc R AFFY
v
vi
Eric L ALLET, Jean-Luc R AFFY
Avant propos
Combien d’hommes et en combien de temps une armée peut-elle emmener sur tel ou tel terrain d’opération en cas de besoin ?
Existe-t-il des cas où une entreprise doit produire moins pour gagner plus ?
Quel est le coût minimal pour installer un réseau ? et par où le faire passer ?
Quelles sont les tâches d’un projet sur-lesquelles il ne faut pas prendre de retard sous peine de pénaliser
tout le projet ?
Tôt ou tard le directeur d’une entreprise, d’une équipe ou d’un projet devra répondre à ce genre de
questions. Évidemment il lui faudra réunir diverses informations et paramètres pour pouvoir le faire. Mais
une fois toutes les cartes en main il devra mettre en œuve des techniques de calculs pour trouver la bonne
réponse.
Ce sont ces «techniques quantitatives de gestion» qui vont être présentées dans ce cours. Elles utilisent
des algorithmes issus de deux types de théories différents : certains reposent sur la théorie des graphes, et
d’autres sur la programmation linéaire.
Cependant ce cours n’est ni un cours de théorie des graphes, ni un cours de programmation linéaire. Il va
présenter les bases nécessaires à la compréhensions des algorithmes utilisés par les différentes techniques,
mais il n’en fera pas une présentation formelle ou complète. Ainsi les algorithmes seront décrits, mais les
théories sous-jacentes ne seront qu’éffleurées, leurs preuves ne seront pas faites.
Ne pensez pas pour autant qu’il faille laisser votre intelligence au vestiaire. Certes, une fois l’algorithme
compris, il devient vite une technique «automatique» et assez facile à appliquer. Mais la vraie difficulté
n’est pas ici. Le véritable problème à résoudre est de trouver comment modéliser votre question et donc
quelle technique appliquer pour avoir la réponse. Ainsi l’enjeu de ce cours n’est pas tant de savoir comment
marchent les techniques (même si vous allez effectivement devoir le savoir !), mais plutôt de savoir à quelles
questions et à quels types de problèmes elles répondent.
Eric L ALLET, Jean-Luc R AFFY
vii
viii
Eric L ALLET, Jean-Luc R AFFY
Première partie
Théorie des graphes
Eric L ALLET, Jean-Luc R AFFY
1
Chapitre 1
Graphes : définitions et généralités
1.1 Introduction
Beaucoup d’algorithmes d’optimisations, d’ordonnancements, de recherches d’optimum reposent sur
des graphes. Un bon dessin valant souvent plus qu’un long discours, les gens formalisent naturellement
beaucoup de leur problèmes avec des graphes.
Il existe deux grandes familles de graphes : les graphes non orientés, et les graphes orientés. Nous allons
formaliser et décrire ces deux grandes familles dans les sections qui suivent.
1.2 Graphes non orientés
F IG . 1.1 – Exemple de graphe non orienté
Un graphe fini non orienté (G) se définit grâce deux ensembles finis : un ensemble de sommets (X), et
un ensemble d’arêtes (U ).
G = [X, U ] avec X = {x1 , x2 , x3 , . . . , xn } et U = {u1 , u2 , u3 , . . . , um }
Une arête uk de U est définie par une paire non-ordonnée de sommets (xi , xj ).
Sur la figure 1.1 G = [X, U ] avec X = {1, 2, 3, 4, 5, 6, 7} et U = {u1 , u2 , u3 , u4 , u5 , u6 , u7 , u8 ,
u9 , u10 , u11 }.
Définition 1.1 (extrémité) xi et xj sont appelés les extrémités de uk .
Sur la figure 1.1 les sommets 6 et 7 sont les extrémités de u9 .
Eric L ALLET, Jean-Luc R AFFY
3
Définition 1.2 (adjacent) Deux sommets reliés par une arête sont adjacents
Sur la figure 1.1 les sommets 6 et 7 sont adjacents.
Définition 1.3 (incident) Une arête est incidente aux sommets qu’elle relie. On dit aussi qu’un sommet est
incident aux arêtes qui l’ont pour extrémité.
Sur la figure 1.1 u9 est une arête incidente à 6 et 7.
Définition 1.4 (boucle) Une arête u = (xi , xi ) dont les extrémités coïncident est appelée une boucle.
Définition 1.5 (graphe simple) Un graphe est dit simple s’il ne contient aucune boucle et si aucun couple
de sommet n’est relié par deux arêtes ou plus. Un graphe qui n’est pas simple est appelé un multigraphe.
L’exemple de la figure 1.1 est un multigraphe : il y a par exemple deux arêtes entre les sommets 1 et 2,
et une boucle sur le sommet 7.
Définition 1.6 (ordre) L’ordre N d’un graphe est son nombre de sommets. N = |X|
Le graphe de la figure 1.1 est d’ordre 7.
Définition 1.7 (degré) Le degré d(xi ) d’un sommet est le nombre d’arêtes incidentes. Les arêtes qui bouclent
comptent pour 2. Le degré D(G) d’un graphe est le degré maximum de tous ses sommets.
Sur la figure 1.1 d(7) = 4, d(2) = 5, et D(G) = 5.
Définition 1.8 (graphe biparti) Un graphe est biparti si l’ensemble de ses sommets peut être partitionné
en 2 classes X1 et X2 de sorte que 2 sommets de la même classe ne soient jamais adjacents. Il se note
G = (X1 , X2 , U ).
Définition 1.9 (graphe complet) Un graphe G = (X, U ) est dit complet si pour toute paire de sommets
xi , xj il existe au moins une arête de la forme (xi , xj )
Définition 1.10 (graphe biparti complet) Un graphe bipartie G = (X1 , X2 , U ) est dit biparti complet si
tous les sommets de X1 sont reliés à tous les sommets de X2 .
X2
X1
Graphe complet K5
Graphe biparti G=(X1, X2, U)
X1
X2
Graphe biparti complet K3,2
F IG . 1.2 – Exemples de graphes bipartis ou complets
Le graphe complet simple d’ordre n est appelé Kn . Un graphe simple biparti complet G = (X1 , X2 , U )
avec |X1 | = p et |X2 | = q est appelé Kp,q . Sur la figure 1.2, G est un graphe bipartie, K5 est un graphe
complet, K3,2 est un graphe biparti complet.
Définition 1.11 (cocycle) Soit A un sous ensemble de sommets de X. Le cocycle de A (noté ω(A)) est
l’ensemble des arêtes ayant une extrémité dans A et l’autre dans X − A.
Sur la figure 1.3 on a ω(A) = {u1 , u2 , u4 , u7 , u9 , u11 }
4
Eric L ALLET, Jean-Luc R AFFY
F IG . 1.3 – Cocycle
Définition 1.12 (chaîne) Une chaîne joignant x1 à xn est une suite de la forme (x1 , u1 , x2 , u2 , x3 , u3 . . . un−1 , xn )
qui commence par x1 , se finit par xn et qui alterne sommets et arêtes incidents.
Les sommets étant implicites, la chaîne est souvent notée qu’avec ses arêtes : (u1 , u2 , u3 , . . . un−1 ). Lorsque
le graphe est simple, la chaîne peut aussi être notée qu’avec ses sommets (x1 , x2 , . . . xn ).
Définition 1.13 (chaîne élémentaire) Une chaîne est élémentaire si tous les sommets qui la composent
sont différents.
Définition 1.14 (chaîne simple) Une chaîne est simple si elle ne contient pas deux fois la même arête.
Définition 1.15 (chaîne fermée) Une chaîne est fermée si elle termine sur le sommet où elle a commencé
(x1 = xn ).
Définition 1.16 (cycle) Un cycle est une chaîne fermée simple qui n’a aucun sommet en double mis à part
le premier qui est identique au dernier.
(u8 , u4 , u6 ) est une chaîne élémentaire simple allant de 5 à 4.
(u9 , u10 ) est une chaîne simple qui va de 6 à 7. Elle n’est pas élémentaire car elle passe deux fois par 7
(5, u8 , 2, u2 , 1, u1 , 2, u8 , 5) est une chaîne fermée allant de 5 à 5, mais n’est pas un cycle.
(1, u2 , 2, u7 , 4, u5 , 1) est un cycle.
Définition 1.17 (connexité) Un graphe est dit connexe si pour tout couple de sommets xi et xj soit il existe
une chaîne allant de xi à xj , soit on a xi = xj .
Pour exprimer cette définition autrement, utilisons la relation R suivante :

 xi = xj
ou
xi Rxj ⇔

Il existe une chaîne allant de xi à xj
Cette relation R définit une relation d’équivalence (relation réflexive, symétrique, et transitive). Elle
forme ainsi des classes d’équivalence qui divisent le graphe en plusieurs partitions. Par exemple, le graphe
de la figure 1.1 est divisé en deux classes d’équivalence avec dans une classe les sommets 1, 2, 3, 4 et 5 et
dans l’autre les sommets 6 et 7.
Définition 1.18 (nombre de connexité) Le nombre p de classes d’équivalence distinctes de la relation R
est appelé le nombre de connexité du graphe.
Il existe alors une deuxième façon de définir la connexité :
Définition 1.19 (connexité (2e )) Un graphe est dit connexe si et seulement si son nombre de connexité p
vaut 1
Eric L ALLET, Jean-Luc R AFFY
5
1.3 Graphes orientés
Un graphe orienté est un graphe dont les arêtes ont un sens. On les appelle des arcs. Pour ce genre de
graphes les définitions et les propriétés définies pour les graphes non-orientés ont besoin d’être adaptées.
Un graphe fini orienté (G) se définit grâce deux ensembles finis : un ensemble de sommets (X), et un
ensemble d’arc (U ).
G = [X, U ] avec X = {x1 , x2 , x3 , . . . , xn } et U = {u1 , u2 , u3 , . . . , um }
Un arc uk de U est défini par une paire ordonnée de sommets (xi , xj ). On dit que l’arc uk va de xi à
xj .
F IG . 1.4 – Exemples de graphe orienté
Sur la figure 1.4 G = [X, U ] avec X = {1, 2, 3, 4, 5, 6, 7} et U = {u1 , u2 , u3 , u4 , u5 , u6 , u7 , u8 , u9 ,
u10 , u11 }. L’arc u1 va de 1 vers 2 et l’arc u10 va de 7 vers 7.
Définition 1.20 (extrémité initiale) Soit un arc uk = (xi , xt ). xi est dite l’extrémité initiale de uk . On
définit aussi une fonction I(uk ) = xi qui donne l’extrémité initiale d’un arc.
Définition 1.21 (extrémité terminale) Soit un arc uk = (xi , xt ). xt est dite l’extrémité terminale de uk .
On définit aussi une fonction T (uk ) = xt qui donne l’extrémité terminale d’un arc. On nome aussi cette
extrémité, l’extrémité finale.
Sur un graphe orienté chaque sommet a deux demi-degrés : le demi-degré extérieur et le demi-degré
intérieur.
Définition 1.22 (demi-degré extérieur) Le demi-degré extérieur d’un sommet xi est le nombre d’arcs
ayant xi comme extrémité initiale.
La fonction d+ , demi-degré extérieur se définit avec : d+ (x) = |{u ∈ U/I(u) = x}|.
Définition 1.23 (demi-degré intérieur) Le demi-degré intérieur d’un sommet xt est le nombre d’arcs ayant
xt comme extrémité terminale.
La fonction d− , demi-degré intérieur se définit avec : d− (x) = |{u ∈ U/T (u) = x}|.
Définition 1.24 (degré) Le degré d’un sommet est la somme de ses deux demi-degrés.
La fonction d, degré d’un sommet se définit avec : d(x) = d+ (x) + d− (x).
À la lecture de cette définition, on comprend pourquoi pour les graphes non orientés on compte deux
fois les boucles dans la définition du degré d’un sommet.
Sur le graphe de la figure 1.4 on a d+ (2) = 3, d− (2) = 2, d(2) = 5, d+ (7) = 2, d− (7) = 2, d(7) = 4.
6
Eric L ALLET, Jean-Luc R AFFY
Définition 1.25 (successeur) On dit que le sommet xt est successeur du sommet xi s’il existe au moins un
arc ayant xi comme extrémité initiale, et xt comme extrémité terminale.
Définition 1.26 (prédécesseur) On dit que le sommet xi est prédécesseur du sommet xt s’il existe au moins
un arc ayant xi comme extrémité initiale, et xt comme extrémité terminale.
Sur l’exemple le sommet 1 a 2 et 3 pour successeurs. Le sommet 7 a 6 et lui même pour successeurs.
Le sommet 2 est prédécesseur de 3, 4 et 5. Le sommet 7 est prédécesseur de 6 et de lui même.
Définition 1.27 (p-graphe) Un p-graphe est un graphe dans lequel il n’existe jamais plus de p arcs de la
forme (xi , xj ) entre 2 sommets quelconques xi et xj pris dans cet ordre.
Le graphe de l’exemple est un 2-graphe. Il existe 2 arcs de la forme (1, 2) et aucun autre arc n’est doublé
ou plus dans ce graphe.
Définition 1.28 (application multivoque) Soit une application A allant de l’ensemble E vers lui même.
On parle d’application multivoque lorsque l’application A associe à tout élément de l’ensemble, un sous
ensemble de l’ensemble.
Par exemple l’application définie sur un ensemble de personnes par «a pour enfant» est une application
multivoque.
Définition 1.29 (application multivoque Γ+ ) Soit un graphe G = [X, U ]. On définit Γ+ comme l’application qui à tout sommet x de X associe l’ensemble des sommets successeurs de x.
Sur l’exemple de la figure 1.4 Γ+ (4) = {1, 3}.
Γ+ (4) peut se noter Γ+
4.
Définition 1.30 (application multivoque Γ− ) Soit un graphe G = [X, U ]. On définit Γ− comme l’application qui à tout sommet x de X associe l’ensemble des sommets prédécesseurs de x.
Sur l’exemple Γ− (7) = {6, 7}.
Γ− (4) peut se noter Γ−
4.
Dans le cas d’un 1-graphe la connaissance de l’ensemble des sommets X et de l’application Γ+ définit
totalement le graphe. Voila pourquoi dans ce cas, il est possible de définir un graphe G comme G = [X, Γ+ ].
Définition 1.31 (cocircuit) Étant donné un sous-ensemble de sommets A d’un graphe G = (X, U ), A ⊆
X on définit :
ω + (A) : l’ensemble des arcs ayant leur extrémité initiale dans A, et leur extrémité terminale dans
(X − A).
ω + (A) = {u ∈ U/I(u) ∈ AetT (u) ∈ X − A}
ω − (A) : l’ensemble des arcs ayant leur extrémité terminale dans A, et leur extrémité initiale dans
(X − A)
ω − (A) = {u ∈ U/I(u) ∈ X − AetT (u) ∈ A}
Enfin, on a : ω(A) = ω + (A) + ω − (A).
L’ensemble des arcs formés par ω(A) est appelé le cocircuit de A.
Sur la figure 1.5 on a ω + (A) = {u4 , u7 , u11 }, ω − (A) = {u1 , u2 , u9 , }, et ω(A) = {u1 , u2 , u4 , u7 ,
u9 , u11 }
Définition 1.32 (chemin) Un chemin est une chaîne orientée.
Définition 1.33 (circuit) Un circuit est un cycle orienté (donc un chemin simple fermé avec aucun sommet
en double mis à part le premier indentique au dernier).
Sur le graphe de la figure 1.4, (1, u2 , 2, u8 , 5) est un chemin allant de 1 à 5. Et (u1 , u7 , u5 ) forme un
circuit bouclant sur 1.
Eric L ALLET, Jean-Luc R AFFY
7
u1
A
u2
1
2
u3
X−A
5
u4
3
u5
u8
u7
u11
u6
4
u10
7
u9
6
F IG . 1.5 – Cocircuit
Définition 1.34 (forte connexité) Un graphe orienté est dit fortement connexe si pour tout couple de sommets xi et xj il existe un chemin allant de xi à xj .
Pour exprimer cette définition autrement, utilisons la relation R suivant :

 xi = xj
ou
xi Rxj ⇔

Il existe un chemin allant de xi à xj et un chemin allant de xj à xi
Cette relation R définit une relation d’équivalence (relation réflexive, symétrique, et transitive). Elle
forme ainsi des classes d’équivalence qui divisent le graphe en plusieurs partitions. Par exemple, le graphe
de la figure 1.4 est divisé en 4 classes d’équivalence : {1, 2, 4}, {6, 7}, {3} et {5}. On dit que ce graphe a
4 composantes fortement connexes.
1.4 Matrice d’adjacence
Dans les cas réels, le dessin d’un graphe peut être fastidieux (car trop grand, trop complexe), et totalement illisible (trop d’arètes ou d’arcs qui se croisent dans tous les sens). Il faut alors choisir une autre
réprésentation. Il en existe plusieurs et dans ce cours on aura l’occasion d’utiliser les «matrices d’adjacence».
Une matrice d’adjacence permet la représentation d’un graphe simple orienté ou non-orienté.
Soit G = [X, U ] un graphe simple avec |X| = N .
Sa matrice A d’adjacence est une matrice N × N remplis de booléens avec
aij =
1 si (xi , xj ) ∈ U
0 sinon
On peut aussi représenter des multigraphes avec ce type de matrice en remplaçant les booléens par des
entiers :
aij = |Uij | avec Uij = {u ∈ U/(I(u) = xi et T (u) = xj )}
Pour les graphes non-orientés on peut décider de ne pas remplir une moitié de la matrice (copie de
l’autre moitié).
8
Eric L ALLET, Jean-Luc R AFFY
Voici des exemples de matrices d’adjacence.
 0







2(u1 , u2)
1(u3 )
1(u5 )
0
0
0
 0
 0
 0

 1(u5 )

 0

0
0
0
1(u4 )
1(u7 )
1(u8 )
0
0
0
1(u6 )
0
0
0
0
0
0
0
2(u1 , u2 )
0
0
0
0
0
0
1(u3 )
1(u4 )
0
1(u6 )
0
0
0
0
1(u7 )
0
0
0
0
0
0
0
0

0
2(u9 , u11 )
0
1(u8 )
0
0
0
0
0
1(u10 )
0
0
0
0
0
0
1(u11 )







0
0
0
0
0
1(u9 )
1(u10 )








1.5 Exercices
Exercice 1.1 (De mains en mains)
Arnaud, Bertrand, Carole, Dorothée, Étienne et Fanny sont des représentants d’une même societée. Ils sont
basés sur des sites differents, mais ils se croisent parfois lors de leurs voyages. Ils ont alors pour habitude
de déjeuner ensemble. La semaine prochaine Arnaud et Bertrand ont prévu de déjeuner ensemble le lundi,
tandis que Étienne et Fanny feront de même de leur coté. Mardi Dorothée et Étienne partageront leur
repas dans ville, et Arnaud et Cyril dans une autre ville. Mercredi Cyril doit manger avec Dorothée. Jeudi
Dorothée déjeune avec Étienne et enfin, vendredi Étienne retrouvera Fanny pour son repas.
Bertrand aimerait profiter de ces rencontres pour transmettre un colis à Fanny. Est-ce possible ? Et si oui
par quelles mains doit transiter le colis. Et Étienne voudrait transmettre un colis à Arnaud. Est-ce possible ?
Et si oui par quelles mains doit transiter le colis.
Correction page 107.
Exercice 1.2 (Qui triche ?)
Arnaud, Bertrand, Carole, Dorothée, Étienne, Fanny et Gabriel doivent passer un test de mémoire. Pour cela
ils reçoivent une liste d’objets qu’ils doivent aller chercher dans une autre pièce. Ils ont tout le temps qu’ils
veulent pour apprendre la liste, mais ensuite ils doivent aller dans la pièce sans liste et en un seul passage
chercher les objets de cette liste.
Mais le surveillant qui devait vérifier que les personnes n’allaient qu’une seule fois dans la pièce s’est
endormi. Cependant le portique d’entrée de la pièce a pu compter les entrées : 9. Il y a donc eu de la triche !
On interroge les candidats, et tous affirment qu’ils n’ont vu personne entrer deux fois dans la pièce
durant leur propre passage. Trop occupés à se souvenir de leur objet, ils ne se souviennent plus trop de
l’ordre des entrées sorties, par contre ils savent qui ils ont vu dans la pièce :
– Arnaud a vu Bertrand, Dorothée, et Gabriel.
– Bertrand a vu Arnaud, Cyril et Gabriel.
– Cyril a vu Bertrand, Dorothée, Fanny et Gabriel.
– Dorothée a vu Arnaud, Cyril, Étienne et Gabriel.
– Étienne a vu Dorothée, Fanny et Gabriel.
– Fanny a vu Étienne, Cyril et Gabriel.
– Gabriel a vu tout le monde !
Qui a triché ?
Correction page 108.
Eric L ALLET, Jean-Luc R AFFY
9
Exercice 1.3 (Qui triche ? (bis))
On se pose le même problème que précédement, mais cette fois ci le portique n’a pas compté les entrées, et
les témoignages sont les suivants :
–
–
–
–
–
–
–
Arnaud a vu Bertrand, Dorothée, et Gabriel.
Bertrand a vu Arnaud, et Gabriel.
Cyril a vu Dorothée et Fanny.
Dorothée a vu Arnaud, Cyril, et Étienne.
Étienne a vu Dorothée et Fanny.
Fanny a vu Étienne et Cyril.
Gabriel a vu Arnaud, Bertrand, !
Y’a-t-il eu tricheries ? Et si oui par qui ?
Correction page 109.
Exercice 1.4 (Ménager la chèvre et le choux)
Un fermier se retrouve au bord d’une rivière avec sa chèvre, son loup apprivoisé, et des choux. Il doit
franchir la rivière avec tout ce beau monde. Mais la barque qu’il peut utiliser n’a assez de place que pour
lui et soit la chèvre, soit le loup, soit le choux. De plus il ne peut pas se permettre de laisser sur une rive la
chèvre seule avec le choux, sinon elle le mangerait, ni laisser la chèvre seule avec le loup, sinon le loup la
mangerait.
Sachant que seul le fermier sait manipuler la barque, quels voyages doit faire le fermier pour que tous
traversent la rivière indemnes.
Correction page 109.
10
Eric L ALLET, Jean-Luc R AFFY
Chapitre 2
Les problèmes d’ordonnancement
2.1 Introduction
On se pose des problèmes d’ordonnancement lorsque l’on est confronté à un problème d’organisation. Il
faut accomplir de multiples tâches qui demandent un certain temps d’exécution et qui doivent être exécutées
dans un certain ordre. Il est donc nécessaire d’identifier les tâches prioritaires en fonction de l’objectif à
atteindre et, lors de leur exécution, il faut détecter les retards et les dépassements de moyens.
Les nombreuses méthodes d’ordonnancement peuvent se regrouper en deux grandes familles selon le
principe de base qu’elles utilisent. On distingue :
– les méthodes du type diagramme à barres : GANTT
– les méthodes à chemin critique : potentiel-tâches, potentiel-étapes (PERT).
Dans ce cours nous allons traiter les diagrammes de GANTT et le potentiel-tâches.
2.2 Le diagramme de GANTT
Un diagramme de GANTT se présente sous la forme d’un tableau à deux dimensions. Les colonnes représentent l’avancement du temps (par exemple chaque colonne pourra symboliser la durée d’une semaine),
et les lignes contiennent les différentes tâches à accomplir. En face de chaque tâche on va dessiner une barre
allant du temps début de la tâche à son temps de fin.
Imaginons un exemple où l’on a 8 tâches à accomplir avec les durées et les contraintes suivantes :
Tâches
A
B
C
D
E
F
G
H
Durées
3 semaines
2 semaines
5 semaines
3 semaines
3 semaines
5 semaines
2 semaines
2 semaines
Contraintes
A achevée
A, B achevées
D achevée
C, E achevées
F, G achevées
Les trois premières tâches (A, B et C) n’ont aucune contrainte. Elles peuvent commencer au temps 0.
On peut donc les représenter dans notre table en traçant une barre partant du temps 0, et parcourant la durée
de la tâche : 3 semaines pour A, 2 pour B, et 6 semaines pour C :
Eric L ALLET, Jean-Luc R AFFY
11
Tâches
1
2
3
4
5
6
7
8
9
10
11
12
13
A
B
C
Par contre la tâche D ne peut commencer qu’après la tâche A et E ne peut commencer qu’après les
tâches A et B. Comme ces tâches sont déjà dans notre diagramme, on connaît leurs temps de fin (après la
semaine 3 et 2), il est donc possible de tracer la barre ces deux tâches :
Tâches
1
2
3
4
5
6
7
8
9
10
11
12
13
A
B
C
D
E
Les contraintes de F et G sont maintenant résolues. F commence après D donc après la sixième semaine.
G ne peut commencer qu’après C et E, c’est le temps de fin de E (6) la plus grande contrainte qui va imposer
le début de G :
Tâches
1
2
3
4
5
6
7
8
9
10
11
12
13
A
B
C
D
E
F
G
Il ne reste plus que H à placer. Cette tâche commence après F et G. De ces deux tâches, c’est F qui
termine en dernier, c’est donc après la semaine 11, que H va commencer.
12
Eric L ALLET, Jean-Luc R AFFY
Tâches
1
2
3
4
5
6
7
8
9
10
11
12
13
A
B
C
D
E
F
G
H
Ce diagramme nous apprend déjà que le projet durera 13 semaines. Il va aussi permettre d’attribuer les
tâches à des équipes. On peut représenter sur le graphique l’avancement des travaux. Il suffit d’indiquer
par une barre le travail effectivement accompli depuis que les tâches A, B et C ont été commencées. Si on
procède ainsi pour toutes les tâches on saura à tout moment quel est l’état d’avancement du projet.
Sur ce graphe, les tâches D et E sont très similaires. Elles semblent devoir commencer et finir en même
temps. Pourtant on va voir dans la section suivante qu’il est tout à fait possible de reporter la tâche E de trois
semaine sans que cela ne change la durée du projet, alors que le moindre report de la tâche D allongera la
durée du projet. Cette notion importante de tâche «critique» n’apparait pas sur le diagramme de GANNT.
De plus les contraintes n’apparaissent plus sur cette version du graphe. Par exemple on voit bien que la
tâche F commence après la semaine 6, mais on ne peut pas savoir si c’est à cause de la tâche D ou de la tâche
E. On ne peut pas immédiatement déduire les conséquences d’un retard d’une tâche sur les autres. Voila
pourquoi certains logiciels proposent une version améliorée de GANTT qui fait ressortir ces dépendances.
En résumé ce diagramme présente les avantages suivants :
– clarté et simplicité de la méthode
– information très condensée
– le plan d’action peut être facilement suivi.
– le déroulement des tâches peut se suivre dans le temps.
Par contre il a ces inconvénients :
– les tâches critiques ne sont pas mises en évidence
– l’élaboration d’un plan d’action se révèle malaisé car cette méthode ne fait pas apparaître les liaisons
entre les tâches.
La mise en évidence de ces tâches critiques et de l’enchaînement des tâches est au contraire le point fort
de la méthode «potentiel-tâches» présentée dans la section suivante.
2.3 La méthode potentiel-tâches
2.3.1 Construction du graphe
Le but de cette méthode est de mettre en valeur l’enchaînement des tâches, de déterminer les dates de
début et de fin de chaque tâche, de connaître les marges de manœuvre possibles sur ces dates. Pour cela on
va construire un graphe dont les sommets seront les tâches du projet et les arcs les contraintes qui les lient.
Ces arcs seront étiquetés (valués) par la durée de la tâche dont ils sont issus.
La première étape de cette méthode va être de dessiner le graphe des tâches. Reprenons l’exemple de la
section précédente :
Eric L ALLET, Jean-Luc R AFFY
13
Tâches
A
B
C
D
E
F
G
H
Durées
3 semaines
2 semaines
5 semaines
3 semaines
3 semaines
5 semaines
2 semaines
2 semaines
Contraintes
A achevée
A, B achevée
D achevée
C, E achevées
F, G achevées
On commence le graphe en plaçant un sommet pour toutes les tâches n’ayant aucune contrainte. Pour
l’exemple, on place donc les sommets A, B et C (cf l’étape 1 sur la figure 2.1). Ensuite on ajoute étape par
étape les sommets qui ne dépendent que des sommets déjà placés. On ajoute un arc entre les sommets des
étapes pré-requises et le sommet ajouté. Sur cet arc on indique la durée de la tâche pré-requise. Donc pour
l’exemple, après les tâches A, B et C, on peut placer les tâches D et E. On trace aussi les arcs partant de A et
B vers ces deux tâches, en indiquant dessus leur durée. Donc la valeur 3 pour la tâche A et 2 pour la tâche
B (cf l’étape 2 de la figure 2.1).
3
A
A
D
3
B
B
C
C
Etape 1
2
E
Etape 2
F IG . 2.1 – Début de la construction du graphe
On continue ainsi à placer les autres tâches et les arcs qui indiquent les dépendances jusqu’à la dernière.
On arrive alors au graphe de la figure 2.2.
A
3
D
3
F
5
3
B
2
E
5
H
3
2
G
C
F IG . 2.2 – Graphe avec toutes les tâches
Il nous reste à finaliser ce graphe. Pour cela il faut ajouter deux tâches fictives de durée nulle. La
première, α va symboliser le début du projet. On va la relier à toutes les tâches sans dépendance, donc qui
n’ont pas de prédécesseur. La seconde, ω va symboliser la fin du projet. Tous les sommets sans successeur
vont y être reliés. Il faut bien sûr penser à placer sur les arcs la durée des tâches correspondantes. On arrive
alors au graphe finalisé de la figure 2.3.
14
Eric L ALLET, Jean-Luc R AFFY
F IG . 2.3 – Graphe finalisé
2.3.2 Recherche de la date au plus tôt
Pour qu’une tâche puisse commencer il faut que toutes les tâches qui la relient au début du projet soient
réalisées.
Définition 2.1 (date au plus tôt) On définit donc ti , la date au plus tôt de la tâche i comme la date au plus
tôt de l’exécution de la tâche i.
Par exemple, pour commencer la tâche E, il faut avoir finit la tâche A et B. Comme A dure 3 semaines
et B 2 semaines, ce sont les 3 semaines de A qui sont la véritable contrainte pour E. La tâche E ne pourra
donc commencer au plus tôt que 3 semaines après le début du projet. En fait pour retrouver ce temps on a
cherché le plus long chemin sur le graphe entre α et E.
Définition 2.2 (durée du projet) On définit la durée du projet comme la date au plus tôt de la tâche ω.
Cette date va donc se calculer en trouvant le plus long chemin de α à ω.
Pour trouver les dates au plus tôt des différentes tâches, il suffit d’appliquer l’algorithme de recherche
du plus long chemin1 sur le graphe (G = [X, U ]).
Algorithme 2.1 (recherche des dates au plus tôt)
1. poser tα = 0 et S = {α}.
2. chercher un sommet j ∈ S̄ tel que Γ−
/ S})
j ⊆ S (remarque : S̄ = {x ∈ X/x ∈
3. poser tj = max(ti + di )i∈Γ−
j
4. poser S = S ∪ {j}
5. si |S| = |X| fin, sinon retourner en 2.
Faisons tourner cet algorithme sur notre exemple.
Pour aller plus vite, plutôt que de prendre un seul sommet à l’étape 2, on peut prendre tous les sommets
dont les prédécesseurs sont déjà traités.
– tα = 0 et S = {α}.
– Les prédécesseurs de A, B et C sont déjà dans S. On peut donc les traiter.
tA = max( tα + dα ) = 0
|{z} |{z}
0
0
tB = max( tα + dα ) = 0
|{z} |{z}
0
0
tC = max( tα + dα ) = 0
|{z} |{z}
0
0
S = {α, A, B, C}
1 Voir
la section 2.4 à ce sujet
Eric L ALLET, Jean-Luc R AFFY
15
– Les prédécesseurs de D et E sont dans S. On peut donc les traiter.
tD = max( tA + dA ) = 3
|{z} |{z}
3
0
tE = max( tB + dB , tA + dA ) = max(2, 3) = 3
|{z} |{z} |{z} |{z}
3
0
2
0
S = {α, A, B, C, D, E}
– Les prédécesseurs de F et G sont dans S. On peut donc les traiter.
tF = max( tD + dD ) = 6
|{z} |{z}
3
3
tG = max( tE + dE , tC + dC ) = max(6, 5) = 6
|{z} |{z} |{z} |{z}
5
0
3
3
S = {α, A, B, C, D, E, F }
– Les prédécesseurs de H sont dans S. On peut donc le traiter.
tH = max( tF + dE , tG + dG ) = max(11, 8) = 11
|{z} |{z} |{z} |{z}
2
6
5
6
S = {α, A, B, C, D, E, F, G}
– Le prédécesseur de ω est dans S. On peut donc le traiter.
tω = max( tH + dH ) = 13
|{z} |{z}
2
11
S = {α, A, B, C, D, E, F, G, ω}
– Fin
Plutôt que de dérouler cet algorithme sur une feuille ligne après ligne, il est plus simple de le faire dans
un tableau.
On débute avec un tableau où seul le tα est connu :
Tâches
di
Γ−
i
ti
α
0
A
3
α
B
2
α
C
5
α
D
3
A
E
3
A,B
F
5
D
G
2
C,E
ω
0
H
H
2
F,G
0
Ensuite on ajoute dans la ligne ti tous les temps que l’on sait calculer : ceux dont le Γ− est déjà traité.
Comme pour l’instant seul tα est connu, on peut traiter A, B et C :
16
Tâches
di
Γ−
i
α
0
ti
0
A
3
α
↓
tα + dα = 0
B
2
α
↓
tα + dα = 0
C
5
α
↓
tα + dα = 0
Eric L ALLET, Jean-Luc R AFFY
D
3
A
E
3
A,B
F
5
D
G
2
C,E
H
2
F,G
ω
0
H
Maintenant on peut traiter D et E :
Tâches
di
Γ−
i
α
0
ti
0
A
3
α
B
2
α
C
5
α
0
0
0
D
3
A
↓
tA + dA = 3
E
3
A
↓
tA + dA = 3
B
↓
hh(
((
h=
tB(
+h
dB(
2
hh
(
F
5
D
G
2
C, E
h
2
F,G
ω
0
H
H
2
F, G
ω
0
H
Maintenant on peut traiter F et G :
Tâches
di
Γ−
i
α
0
ti
0
A
3
α
B
2
α
C
5
α
D
3
A
E
3
A,B
F
5
D
↓
tD + dD = 6
0
0
0
3
3
A
3
α
B
2
α
C
5
α
D
3
A
E
3
A,B
F
5
D
G
2
C,E
0
0
0
3
3
6
6
G
2
C
↓
hhh
(
(
(=
t(
+(
dCh
5
h
C(
h
E
↓
tE + dE = 6
On continue avec H :
Tâches
di
Γ−
i
α
0
ti
0
H
2
F
↓
tF + dF = 11
G
↓
hh(
(
(
(
h=
tG(
+h
dG
8
h
(
h
ω
0
H
Et on termine avec ω :
Tâches
di
Γ−
i
α
0
A
3
α
B
2
α
C
5
α
D
3
A
E
3
A,B
F
5
D
G
2
C, E
h
2
F,G
ti
0
0
0
0
3
3
6
6
11
ω
0
H
↓
tH + dH = 13
2.3.3 Recherche de la date au plus tard
On sait maintenant quand une tâche pourra commencer au plus tôt. On va maintenant calculer quand il
sera possible de commencer au plus tard une tâche sans que cela ne retarde la fin du projet.
Définition 2.3 (date au plus tard) On définit donc Ti , la date au plus tard de la tâche i comme la date au
plus tard où l’on puisse commencer i sans augmenter la durée du projet.
Par exemple, prenons la tâche G. Cette tâche dure 2 semaines et doit être faite pour commencer la tâche
H. La tâche H commence la 11eme semaine. Donc on peut décider de commencer la tâche G que 2 semaines
avant c’est à dire la 9eme semaine sans que le projet ne prenne de retard. En résumé on peut commencer au
plus tôt G la 6eme semaine et au plus tard la 9eme semaine (TG = 9).
Pour trouver les dates au plus tard des différentes tâches on va appliquer l’algorithme suivant :
Algorithme 2.2 (recherche des dates au plus tard)
1. poser Tω = tω et S = {ω}.
2. chercher un sommet j ∈ S̄ tel que Γ+
j ⊆ S
3. poser Tj = min(Ti )i∈Γ+ − dj
j
Eric L ALLET, Jean-Luc R AFFY
17
4. poser S = S ∪ {j}
5. si |S| = |X| fin, sinon retourner en 2.
Faisons tourner cet algorithme sur notre exemple.
Pour aller plus vite, plutôt que de prendre un seul sommet à l’étape 2, on peut prendre tous les sommets
dont les successeurs sont déjà traités.
– Tω = 13 et S = {ω}.
– Le successeur de H est déjà dans S, On peut donc le traiter.
TH = min( Tω ) − dH = 11
|{z}
|{z}
2
13
S = {H, ω}
– Les successeurs de F et G sont déjà dans S, On peut donc les traiter.
TF = min( TH ) − dF = 6
|{z}
|{z}
5
11
TG = min( TH ) − dG = 9
|{z}
|{z}
2
11
S = {F, G, H, ω}
– Les successeurs de C, D et E sont déjà dans S, On peut donc les traiter.
TC = min( TG ) − dC = 4
|{z}
|{z}
5
9
TD = min( TF ) − dD = 3
|{z}
|{z}
3
6
TE = min( TG ) − dE = 6
|{z}
|{z}
3
9
S = {C, D, E, F, G, H, ω}
– Les successeurs de A et B sont déjà dans S, On peut donc les traiter.
TA = min( TD , TE ) − dA = 3 − 3 = 0
|{z}
|{z} |{z}
3
6
3
TB = min( TE ) − dB = 6 − 2 = 4
|{z}
|{z}
2
6
S = {A, B, D, C, E, F, G, H, ω}
– Les successeurs de α sont déjà dans S, On peut donc le traiter.
Tα = min( TA , TB , TC ) − dα = 0 − 0 = 0
|{z}
|{z} |{z} |{z}
0
4
0
4
S = {α, A, B, C, D, E, F, G, H, ω}
– Fin.
Plutôt que de dérouler cet algorithme sur une feuille ligne après ligne, il est plus simple de le faire dans
un tableau.
On débute avec un tableau où tous les ti sont connus, mais seul le Tω est fixé.
Tâches
di
Γ−
i
ti
Γ+
i
Ti
18
α
0
0
A, B, C
A
3
α
0
D,E
B
2
α
0
E
C
5
α
0
G
D
3
A
3
F
E
3
A,B
3
G
F
5
D
6
H
G
2
C, E
6
H
H
2
F,G
11
ω
ω
0
H
13
13
Eric L ALLET, Jean-Luc R AFFY
Ensuite on ajoute dans la ligne Ti tous les temps que l’on sait calculer : ceux dont les dates au plus de
tous les Γ+
i sont connues. Comme pour l’instant seul Tω est connu, on peut traiter H :
α
0
Tâches
di
Γ−
i
ti
Γ+
i
0
A, B, C
A
3
α
0
D,E
B
2
α
0
E
C
5
α
0
G
D
3
A
3
F
E
3
A,B
3
G
F
5
D
6
H
G
2
C, E
6
H
ω
0
H
13
H
2
F, G
11
ω
↓
Tω − dH = 11
Ti
13
Maintenant on peut traiter F et G :
α
0
Tâches
di
Γ−
i
ti
Γ+
i
0
A, B, C
A
3
α
0
D,E
B
2
α
0
E
C
5
α
0
G
D
3
A
3
F
E
3
A,B
3
G
F
5
D
6
H
↓
TH − dF = 6
H
2
F, G
11
ω
ω
0
H
13
11
13
F
5
D
6
H
G
2
C, E
6
H
H
2
F, G
11
ω
ω
0
H
13
6
9
11
13
G
2
C, E
6
H
↓
TH − dG = 9
Ti
Maintenant on peut traiter C, D et E
Tâches
di
Γ−
i
ti
Γ+
i
α
0
0
A, B, C
A
3
α
0
D,E
B
2
α
0
E
C
5
α
0
G
↓
TG − dC = 4
D
3
A
3
F
↓
TF − dD = 3
E
3
A,B
3
G
↓
TG − dE = 6
Ti
On continue avec A et B :
Tâches
di
Γ−
i
ti
Γ+
i
Ti
α
0
0
A, B, C
A
3
α
0
D
↓
TD = 3
TD − dA = 0
E
↓
X
X=
TE
6
X
X
B
2
α
0
E
↓
C
5
α
0
G
D
3
A
3
F
E
3
A,B
3
G
F
5
D
6
H
G
2
C, E
6
H
H
2
F,G
11
ω
ω
0
H
13
4
3
6
6
9
11
13
TE − dB = 4
Eric L ALLET, Jean-Luc R AFFY
19
On finit avec α
Tâches
di
Γ−
i
ti
Γ+
i
α
0
0
A
↓
TA = 0
TA − dα = 0
B
C
↓
↓
X
X
X
X
T
=
4
T
4
X
X
B X C =X
Ti
A
3
α
0
D,E
B
2
α
0
E
C
5
α
0
G
D
3
A
3
F
E
3
A,B
3
G
F
5
D
6
H
G
2
C, E
6
H
H
2
F,G
11
ω
ω
0
H
13
0
4
4
3
6
6
9
11
13
2.3.4 Calcul des marges
Définition 2.4 (marge totale) La marge totale Mi d’une tâche i est le délai dont on peut retarder cette
tâche sans affecter l’achèvement du projet.
Cette marge est donnée par la différence entre la date au plus tard et la date au plus tôt : Mi = Ti − ti .
Dans notre exemple on obtient :
Tâches
di
Γ−
i
ti
Γ+
i
Ti
Mi
α
0
0
A,B,C
0
0
A
3
α
0
D,E
0
0
B
2
α
0
E
4
4
C
5
α
0
G
4
4
D
3
A
3
F
3
0
E
3
A,B
3
G
6
3
F
5
D
6
H
6
0
G
2
C, E
6
H
9
3
H
2
F,G
11
ω
11
0
ω
0
H
13
13
0
Les tâches critiques sont celles qui ont une marge nulle. Il est impossible de prendre du retard dessus
sans retarder tout le projet. Le chemin critique passe par les tâches critiques. On le visualise sur le graphe
en doublant les arcs de ce chemin (voir figure 2.4).
F IG . 2.4 – Graphe avec le chemin critique
2.3.5 Calcul sur le graphe
Il est tout à fait possible de calculer les dates au plus tôt, les dates au plus tard et marges directement sur
le graphe. Pour cela on va le présenter un peu différemment. Les sommets vont être remplacer par des cases
avec 3 emplacements : un pour la date au plus tôt, un pour la date au plus tard et le dernier pour la marge.
20
Eric L ALLET, Jean-Luc R AFFY
F IG . 2.5 – Calcul de la date au plus tôt : état initial
Un premier parcours du graphe va permettre de calculer les dates au plus tôt. On débute avec un graphe
avec des cases vides, sauf pour le tα qu’on initialise à 0 (voir figure 2.5).
Ensuite on déroule le même algorithme que précédemment. On regarde tous les sommets dont les prédécesseurs sont déjà traités. Pour chaque arc arrivant sur le sommet, on calcule la somme la valeur du ti du
sommet initial de l’arc et de la valeur de l’arc. On met le maximum sur le sommet terminal.
Pour la première étape, on peut remplir les sommets A, B et C. Ils n’ont qu’un seul prédécesseur chacun,
et donc la maximum est vite trouvé (voir figure 2.6).
F IG . 2.6 – Calcul de date au plus tôt : première étape A, B et C
Pour la seconde étape, le calcul est simple pour D. Il n’y a qu’un seul prédécesseur, il suffit donc de
faire la somme du sommet initial (A=0) et de l’arc (3).Par contre E à 2 prédécesseurs. La somme en partant
A est plus grande, c’est donc cette valeur (3) que l’on prend (voir figure 2.7).
F IG . 2.7 – Calcul de la date au plus tôt : seconde étape D et E
La troisième étape permet de remplir la date au plus tôt de F et G. Pour F il n’y a que l’arc venant de D
à prendre en compte, mais pour G il y a deux choix. La plus grande valeur vient par E (voir figure 2.8).
En continuant avec la même logique on remplit la date au plus tôt de H (un maximum à choisir parmi 2
arcs) et de ω (voir figure 2.9).
Maintenant il faut remonter le graphe depuis le sommet ω pour calculer Ti , les dates au plus tard de
Eric L ALLET, Jean-Luc R AFFY
21
F IG . 2.8 – Calcul de la date au plus tôt : troisième étape F, et G
F IG . 2.9 – Calcul de la date au plus tôt : fin
chaque tâche. On initialise Tω , la date au plus tard d’ω avec la valeur de sa date au plus tôt que l’on vient
de calculer. On obtient le graphe initial de la figure 2.10.
F IG . 2.10 – Calcul de la date au plus tard : état initial
Ensuite on déroule l’algorithme du calcul de la date au plus tard. On regarde tous les sommets dont les
successeurs sont déjà traités. On choisit parmi les successeurs celui qui à le plus petit Ti , et on lui retire la
valeur de l’arc.
Pour la première étape, on peut remplir le sommet H. Il n’a qu’un seul successeur et donc la minimum
est vite trouvé (voir figure 2.11).
Le seconde étape permet de trouver la date au plus tard pour F et G. Ces deux sommets n’ont qu’un seul
successeur, donc il suffit de retirer la valeur de l’arc au Ti du successeur. On arrive au graphe de la figure
2.12
Lorsque deux étapes plus loin, les dates au plus tard de A, B et C sont calculés, on peut trouver celle de
α. Il a trois successeur, et c’est A qui avec TA = 0 a le Ti minimum alors que B avec TB = 4 et C avec
TC = 3 sont rejetés.
22
Eric L ALLET, Jean-Luc R AFFY
F IG . 2.11 – Calcul de date au plus tard : première étape H
F IG . 2.12 – Calcul de la date au plus tard : seconde étape (F et G)
F IG . 2.13 – Calcul de la date au plus tard : fin
Maintenant il nous reste à calculer les marges (Mi ) de chaque étape. Pour cela il suffit de faire la
différence entre la date au plus tard (Ti ) et la date au plus tôt (ti ) pour chaque sommet du graphe. On va
aussi doubler les arcs du chemin critique.
F IG . 2.14 – Calcul des marges et du chemin critique
Eric L ALLET, Jean-Luc R AFFY
23
2.4 Recherche du plus long chemin
L’algorithme utilisé pour la recherche de la date au plus tôt est une recherche de plus long chemin. Il est
donc possible d’utiliser le même algorithme sur des graphes qui ne sont pas liés à des problèmes d’ordonnancement lorsqu’on a besoin de trouver un plus long chemin. Cette technique peut être très pertinente lors
de la recherche d’un «maximum». Les exercices 2.2 et 2.3 à la fin de chapitre illuste ce cas.
2.5 Exercices
Exercice 2.1 (Organisation d’un colloque)
Vous avez été choisi par vos pairs lors d’une conférence sur les techniques quantitatives pour organiser
la suivante à Paris. La date a été fixée. Ce sera du 17 au 20 décembre 2009 pour que vos collègues puissent
en profiter, s’ils le souhaitent, pour prolonger leur séjour à Paris lors des fêtes.
C’est la première fois que vous êtes organisateur. Vous demandez donc conseil à un collègue expérimenté qui vous explique ce qu’il faut faire, mais de manière «non linéaire» :
«La première chose à faire est de trouver le site de la conférence. Par exemple un hôtel qui pourra
héberger les participants et qui possède des salles de conférence. Il faut compter 3 semaines pour le
trouver.
D’ailleurs pour toutes ces recherches, et tout l’aspect logistique, tu dois t’entourer d’une équipe, le
comité d’organisation, à qui tu délégueras l’essentiel de ces tâches. Choisir cette équipe devrait te
prendre 1 semaine.
Il te faut aussi choisir le comité de programme. Ça sera l’équipe chargée de l’aspect scientifique du
colloque. Compte 3 semaines pour ce choix. Ce comité de programme devra se réunir 2 fois avant
la conférence. Une première fois, avant l’appel à communications, pour fixer les grandes lignes du
programme qui seront indiquées dans cet appel. Et une seconde fois, après la sélection finale des
articles, et au moins 3 semaines avant le colloque, pour fixer en détail le programme final.
Le temps que les articles soient écrits et envoyés, il faut laisser aux auteurs, un délais de 8 semaines
entre l’appel à communications et la sélection. Il faut aussi laisser 8 semaines au jury entre la réception
des articles, et la sélection finale.
Tu dois aussi te mettre d’accord avec un imprimeur pour l’édition des «proceedings». En général il faut
compter 6 semaines pour l’impression à condition que tous les articles aient été mis en forme selon
les conventions de l’imprimeur. Pour cela, accorde 4 semaines après la sélection finale aux différents
auteurs pour qu’ils fassent cette mise en forme. Il faut que tu aies reçu les livres imprimés au moins 1
semaine avant le colloque.
Prévoie aussi un programme «social» pour occuper les conférenciers en dehors du temps des conférences. Le temps fort sera un banquet lors d’une soirée. Ton comité d’organisation devrait pouvoir
choisir le lieu de ce banquet en 2 semaines. Il devra aussi se mettre d’accord avec l’hôtel pour les
menus et les prix des repas lors de la conférence. Pour cela compte 1 semaine après le choix de
l’hôtel. Une fois tout cela connu, laisse encore 1 semaine au comité d’organisation pour fixer le prix
que devront payer les conférenciers. Ce prix et le programme «social» devront figurer dans l’appel à
communications.
De plus, comme j’ai compris que tu avais des sponsors généreux, tu devrais profiter des deux réunions
du comité de programme pour tester l’hôtel et le lieu du banquet. Donc programme la première réunion
du comité de programme dans l’hôtel, et prévoie un dîner sur le lieu du banquet le soir de la seconde
réunion.
Voila, je pense que je n’ai rien oublié.»
Et bien quand devez-vous commencer au plus tard à organiser tout cela pour que le colloque puisse bien
débuter le 17 décembre ?
Il n’est jamais simple de fixer une date de réunion. . . Quelles sont les marges dont vous disposez pour
les deux réunions du comité de programme pour fixer une date sans que cela ne ralonge votre préparation ?
Correction page 110
24
Eric L ALLET, Jean-Luc R AFFY
Exercice 2.2 (Le banquet)
2
Apollodore, un jeune traiteur, vient de se mettre à son compte et propose ses services pour des banquets.
En une journée de travail il arrive à produire 50 repas. Par contre il ne possède pas encore ses cuisines. Il
a cependant trouvé une grosse collectivité qui possède des cuisines sous-utilisées trois jours par semaine
et qui loue alors des espaces de travail. La location, même d’une seule journée, donne aussi l’accès durant
la semaine à un espace de stockage en chambre froide où le traiteur peut conserver jusqu’à 100 repas. Cet
espace doit être totalement libéré le vendredi soir.
En tenant compte du prix de location (variable), et des matières premières utilisées, Apollodore a calculé
le prix d’une journée de production (50 repas) suivant la journée :
Jour
Prix
lundi
2k euros
mardi
2k euros
jeudi
1k euros
Pour la semaine à venir il a trouvé trois demandes pour 100 repas (chaque demande est pour 100 repas)
qui pourraient lui convenir. S’il les accepte (il peut accepter certaines et refuser d’autres), voici les jours et
les prix convenus :
Jour
Prix
mardi
7k euros
mercredi
4k euros
vendredi
4k euros
Les jours où il sert un banquet, il n’a pas le temps de produire des repas. De plus chaque banquet lui
coûte 1k euros de frais divers (transport, services. . . ) à soustraire aux revenus indiqués ci dessus.
Est-ce qu’Apollodore a intérêt à travailler cette semaine ?
– Si oui, selon quel planning ?
– Sinon pourquoi ?
Correction page 112
Exercice 2.3 (Le banquet, suite)
Apollodore connaît un ami, Aristodème, exactement dans les mêmes conditions que lui. Ils peuvent
travailler ensemble durant cette semaine. Aristodème devra lui aussi payer la location d’un espace de travail,
donc le prix des repas supplémentaires produits reste le même. Par contre il peut très bien continuer à
produire des repas les jours où Apollodore sert les banquets (s’il a accès aux cuisines ce jour là !).
Leur conseillez-vous de travailler ensemble cette semaine (notez qu’ils peuvent très bien ne pas travailler
les mêmes jours ni le même nombre de jours) ?
– Si oui, selon quel planning ?
– Sinon pourquoi ?
Exercice 2.4 (Tarte Tatin)
Profitant d’un week-end bien mérité Apollodore et Aristodème se décident presque à la dernière minute
de faire une tarte tatin pour recevoir des amis qui doivent arriver 1 heure plus tard. Ils veulent l’accompagner
d’une crème anglaise. Voici les diverses actions qu’ils doivent réaliser ainsi que leur durée.
Pour la pâte brisée :
– Préparer la pâte (5 minutes)
– Laisser reposer la pâte (30 minutes)
– Étaler la pâte (5 minutes)
Pour la tarte Tatin :
– Préparation du moule (5 minutes) : Prendre un moule à manquer... Verser 125g de sucre sur le fond.
Parsemer sur le dessus 120g beurre coupé en petits morceaux.
– Préparation des pommes (10 minutes) : Peler 8 belles pommes, enlever le coeur et les couper en
quartiers.
2 Attention, cet exercice et le suivant ne concernent pas des problèmes d’ordonnancement, mais ils illlustrent l’usage des algorithmes
du potentiel-tâche sur d’autres types de graphes pour retrouver un chemin le plus long
Eric L ALLET, Jean-Luc R AFFY
25
– Mise en place des pommes (10 minutes) : Placer les quartiers de pommes dans le moule, sur le sucre
et le beurre. Saupoudrer avec 125g de sucre
– Caramélisation des pommes (5 minutes) : Placer le moule sur un feu vif, jusqu’à ce que le caramel
commence à dorer.
– Mise en place de la pâte (5 minutes) : Recouvrir les pommes de la pâte étalée. Rentrer le bord à
l’intérieur du moule. Faire quelques trous pour laisser échapper la vapeur.
– Cuisson (15 minutes) : Enfourner dans un four chaud, thermostat 9 pendant 15 minutes, le temps que
la pâte soit bien dorée.
Pour la crème anglaise :
– Préparer la crème (15 minutes).
– Laisser refroidir (15 minutes).
– Mettre au réfrigérateur (30 minutes minimum).
Apollodore se propose pour préparer la pâte, et s’occuper ensuite de la tarte Tatin, pendant qu’Aristodème s’occupera de préparer la crème anglaise puis étalera la pâte.
Aristodème suggère qu’Apollodore commence immédiatement la préparation de la Tarte pendant que
lui commencera la pâte brisé. Il préparera la crème anglaise durant le temps de repos de la pâte, et ensuite
étalera la pâte.
Lequel des deux scénarios conseillez-vous de mettre en œuvre ?
Correction page 116
26
Eric L ALLET, Jean-Luc R AFFY
Chapitre 3
Les Arbres
3.1 Introduction
F IG . 3.1 – Quel est le réseau de coût minimum permettant de relier toutes les succursales ?
Imaginons que l’on veuille construire un réseau privé pour faire communiquer N succursales d’une
entreprise avec pour objectif d’obtenir le coût le plus bas. On connaît tous les raccordements possibles
et leur coût (voir la figure 3.1). Comme le but est d’avoir le prix le plus bas, on ne va garder que les
raccordements strictement nécessaires. On s’aperçoit déjà que l’on n’a pas besoin de cycles dans ce graphe.
Par contre pour que toute succursale puisse joindre toutes les autres, le graphe devra permettre de trouver
un chemin entre tous les sommets (on aura donc un graphe connexe).
Ainsi la solution est de trouver un graphe connexe simple sans cycle qui offre le moindre coût de
construction. Or un graphe connexe simple sans cycle est un arbre. Nous allons donc étudier les arbres,
leurs propriétés et deux algorithmes qui permettront de trouver la solution à ce genre de problème.
3.2 Définitions et propriétés
Définition 3.1 (arbre) Un arbre est un graphe connexe simple sans cycle.
Par exemple une rivière et ses affluents forme un arbre. On utilise aussi beaucoup les arbres pour classifier. Par contre, avec notre définition, en théorie de graphe, un «arbre généalogique» ne reste un arbre que
Eric L ALLET, Jean-Luc R AFFY
27
si on ne remonte pas trop loin (on finira souvent par trouver deux ancêtres communs à deux conjoints, et
donc on formera un cycle).
Définition 3.2 (sous graphe) On dit qu’un graphe G′ = [X ′ , U ′ ] est un sous-graphe de G = [X, U ] si
X ′ ⊆ X et U ′ ⊆ U .
Définition 3.3 (sous graphe couvrant) Un sous graphe G′ = [X ′ , U ′ ] est dit couvrant si X ′ = X et G′
est connexe.
Définition 3.4 (poids d’un graphe) Soit un graphe G = [X, U ] où chaque arête ui est valuée avec un
poids pi . Le poids du graphe est la somme des poids des arêtes du graphe.
Les arbres sont des graphes qui ont de nombreuses propriétés. En voici quelques-unes :
1. un arbre est toujours un graphe simple.
2. un arbre à N sommets possède N-1 arêtes.
3. Un sous-graphe de G couvrant et sans cycle est un arbre couvrant de G. On appelle ces arbres, des
«arbres de recouvrement» du graphe G.
4. Si un graphe a toutes ses arêtes de poids positif ou nul, il admet un sous-graphe couvrant de poids
minimal, et ce sous-graphe couvrant de poids minimal est un arbre.
Pour résoudre le problème de l’introduction, il faut donc trouver le graphe de recouvrement de poids
minimum. Ce graphe est un arbre. Comme le nombre d’arbres de recouvrement croît de façon exponentielle
avec le nombre de sommets, il n’est pas du tout interessant de tous les calculer pour connaître celui qui a
le poids minimum. Pour éviter cela, il existe des algorithmes qui permettent de construire d’entrée un arbre
de poids minimal et dont le nombre d’étapes est une fonction linéaire du nombre d’arêtes. Nous allons voir
ces algorithmes.
3.3 L’algorithme de Kruskal
Soit un graphe G = [X, U ], avec |X| = N et |U | = M .
On va construite un arbre recouvrement de G de poids minimum : τ = [X, T ].
Algorithme 3.1 (Kruskal)
1. Classer les arêtes par ordre croissant de poids. U = {u1 , u2 , u3 , ...., um }.
2. Poser T = ∅ et i = 1.
3. Si T ∪ ui est sans cycle ajoute ui à T : T ← T ∪ ui .
Sinon aller à l’étape 4.
4. Incrémenter i de 1.
Si |T | = N − 1 Stop, sinon retourner à l’étape 3.
On peut remarquer que durant les phases intermédiaires de l’algorithme de Kruskal, le sous graphe
formé par T n’est pas forcement connexe. On a un ensemble d’arbres disjoints. Un graphe de cette forme
s’appelle une «forêt».
Faisons tourner cet algorithme sur l’exemple de l’introduction : N = 6 et M = 10. Après classement
des arêtes par ordre croissant de poids on obtient U = {u1 , . . . , u10 } de la figure 3.2.
On pose T = ∅ et i = 1.
Donc on commence par ajouter u1 dans notre arbre : T = {u1 } et i = 2.
Ensuite on ajoute u2 :T = {u1 , u2 } et i = 3.
On peut ajouter u3 toujours sans créer de cycle, donc T = {u1 , u2 , u3 } et i = 4.
À l’étape suivante u4 peut aussi être ajouter, donc T = {u1 , u2 , u3 , u4 } et i = 5.
A ce stade on obtient la figure 3.3.
28
Eric L ALLET, Jean-Luc R AFFY
S2
8
1
U2
S3
6
U10
S1
U9
6
U8
2
U6
5
S4
U7
2
2
U3
U5
2
U4
S5
1
S6
U1
F IG . 3.2 – Kruskal : tri des arêtes (les ui numérotées dans par ordre croissant de poids)
S2
8
S1
S2
1
U2
S3
6
U10
8
U9
6
U8
2
U6
2
U3
U5
U9
6
U8
2
U6
U7
2
5
S4
U7
2
2
t=(X,T)
U4
S3
6
U10
S1
5
S4
1
U2
2
U3
U5
2
t=(X,T)
U4
S5
1
S6
S5
U1
1
S6
U1
F IG . 3.3 – Kruskal : étape avec 4 arêtes et étape finale
On tente alors d’ajouter u5 . Mais (u1 , u4 , u5 ) forment un cycle. u5 est donc rejeté, et i = 6.
On tente alors d’ajouter u6 . Mais (u1 , u4 , u6 , u2 ) forment un cycle. u6 est donc rejeté, et i = 7
Par contre u7 peut aussi être ajoutée. On obtient T = {u1 , u2 , u3 , u4 , u7 }, et i = 8. Comme |T | = 5 =
N − 1, l’algorithme est terminé. On a τ = [X, T ] un arbre de recouvrement minimal (voir la figure 3.3).
On peut maintenant évaluer le coût du réseau à mettre en place : c’est le poids de notre arbre de recouvrement minimal. Donc si pi est le poids de l’arête ui :
coût = p1 + p2 + p3 + p4 + p7 = 1 + 1 + 2 + 2 + 5 = 11.
Notez qu’un arbre de recouvrement minimal n’est pas obligatoirement unique. D’autres peuvent peser
le même poids. On va d’ailleurs en trouver un autre pour notre problème lorsqu’on va utiliser l’algorithme
de Prim dans la section suivante.
3.4 L’algorithme de Prim
3.4.1 Description
Soit un graphe G = [X, U ], avec |X| = N et |U | = M .
On va construite un arbre recouvrement minimal de G : τ = [X, T ].
Voici le principe de l’algorithme de Prim :
Algorithme 3.2 (Prim)
1. Pour tous les sommets xi de X, construire tous les cocycles élémentaires1 ωi = ω({xi }).
1 Ces cocycles élémentaires sont utilisés à l’étape 3 de l’algorithme pour calculer de façon itérative le cocycle de l’ensemble des
sommets déjà traités. Si le graphe est simple et les cocycles simples à trouver, cette étape n’est pas utile.
Eric L ALLET, Jean-Luc R AFFY
29
2. Prendre un sommet quelconque du graphe (par exemple x1 ) et poser :
A = {x1 }
q = ωx1
T =∅
3. Choisir dans q, une arête u de poids minimale. Soit xj l’extrémité de u dans X − S. On pose :
T ← T ∪ {u}
A ← A ∪ {xj }
q ← q∆ωj (Différence symétrique :Y ∆Z = (Y ∪ Z − (Y ∩ Z)
(remarque : cet algorithme donne toujours q = ω(A)).
4. Si |T | = N − 1, fin,
sinon retourner en 3.
3.4.2 Exemple sur un graphe dessiné
Faisons tourner cet algorithme sur notre exemple.
– Pour démarrer, on va choisir d’initialiser A avec S1 (voir figure 3.4)2
A = {S1 }
q = ω(A) = ωS1 = {u1 , u2 , u3 , u4 }
T =∅
S2
S2
1
u5
8
A
6
u1
S1
8
u6
6 u7
2
2
2
u1
u6
6 u7
S1
2
2
2
u8
u4
5
S4
u2
u10
2
u3
S3
6
A
5
S4
u2
1
u5
S3
u10
2
u8
u3
u4
S5
1
u9
S6
S5
1
u9
S6
F IG . 3.4 – Prim : Initialisation de l’algorithme et première étape (u2 ajoutée)
– On doit choisir une arête de moindre poids dans q. L’arête u1 (de poids 8) est donc exclue. Les 3
autres (de poids 2) peuvent convenir. On va prendre u2 . Elle est reliée à S4 qui rentre donc dans
l’ensemble A (voir figure 3.4).
T = {u2 }
A = {S1 , S4 }
q = ω(A) = {u1 , u3 , u4 , u6 , u7 , u8 }
– Les trois arêtes de poids 2 de q sont éligibles : u3 , u4 et u8 . On va choisir u3 . Son extrémité S6 entre
donc dans A (voir la figure 3.5).
T = {u2 , u3 }
A = {S1 , S4 , S6 }
q = ω(A) = {u1 , u4 , u6 , u7 , u9 , u10 }
2 Notez que pour cette algorithme les arêtes n’ont pas besoin d’être triées. Donc leur numérotation a juste été faite «au vol» lors du
dessin du graphe
30
Eric L ALLET, Jean-Luc R AFFY
S2
S2
1
8
S3
6
u1
8
u6
S1
2
2
2
2
u10
2
2
u8
u3
5
S4
u2
5
S4
2
u6
6 u7
S1
u2
S3
6
u1
A
6 u7
A
1
u5
u5
u10
2
u8
u3
u4
u4
1
S5
S6
1
S5
u9
S6
u9
F IG . 3.5 – Prim : Deuxième étape (u3 ajoutée) et troisième étape (u9 ajoutée)
– A cette étape, seule l’arête de poids 1, u9 peut être choisie. On ajoute son extrémité S5 dans l’ensemble A (voir la figure 3.5).
T = {u2 , u3 , u9 }
A = {S1 , S4 , S5 , S6 }
q = ω(A) = {u1 , u6 , u7 , u10 }
– L’arête de plus faible poids de q est u10. Son extrémité S3 entre dans A (voir la figure 3.6).
T = {u2 , u3 , u9 , u10}
A = {S1 , S3 , S4 , S5 , S6 }
q = ω(A) = {u1 , u6 , u5 }
S2
S2
1
u5
8
6
u1
8
u6
6 u7
A
S1
2
2
2
u1
u6
6 u7
S1
2
2
2
u8
u4
5
S4
u2
u10
2
u3
S3
6
A
5
S4
u2
1
u5
S3
u10
2
u8
u3
u4
S5
1
S6
S5
u9
1
S6
u9
F IG . 3.6 – Prim : Quatrième étape (u10 ajoutée) et dernière étape (arbre trouvé)
– L’arête u5 de poids 1 complète notre arbre. Le nombre d’arêtes vaut N − 1 et A enrichi de S2
l’extrémité de u5 couvre maintenant tout l’ensemble. L’algorithme se termine donc ici (voir figure
3.6).
T = {u2 , u3 , u5 , u9 , u10}
A = {S1 , S2 , S3 , S4 , S5 , S6 }
q = ω(A) = ∅
L’arbre trouvé ici n’est pas le même que dans la section précédente, mais il pèse bien le même poids
(11). Aussi bien pour Kruskal que pour Prim, il y a des choix à faire (par exemple, lorsqu’il y a plusieurs
arêtes avec le même minimum), et il y a donc plusieurs «bonnes» solutions.
Eric L ALLET, Jean-Luc R AFFY
31
3.4.3 Exemple sur la matrice du graphe
Pour ce genre de problème, le graphe dessiné est parfois illisible : le graphe n’est pas planaire et plein
d’arêtes se croisent dans tous les sens. Essayer de trouver sur le dessin le cocycle des sommets déjà traités
devient vite impossible. On peut bien sûr dérouler l’algorithme à la main, mais il est aussi possible de
travailler sur la matrice d’adjacence qui représente le graphe. Dans ce cas le booléen qui indique s’il existe
une arête entre deux sommets est remplacé par le poids de l’arête.
La matrice d’adjacence du graphe des succursales donne :
S1
S1
S2
S3
S4
S5
S6
S2
S3
1
6
6
S4
S5
2
1
S6
8
2
2
2
5
Les cocycles élémentaires d’un sommet sur une telle matrice sont très simples à trouver : il s’agit de la
colonne et de la ligne du sommet.
Donc la matrice qui donne les arêtes du cocycle élémentaire de S4 est :
S1
S2
S3
S4
S5
S6
S1
S2
S3
2
6
6
S4
S5
S6
2
Imaginons maintenant qu’on veuille ajouter S6 à notre ensemble (pour former l’ensemble de sommets
{ S4 , S6 }). Comment trouver le nouveau cocycle ?
On a vu que le cocycle de l’union de deux ensembles de sommets était l’union des deux cocycles moins
l’intersection. Pour faire l’union, il faut ajouter le cocycle élémentaire de S6 (sa ligne et sa colonne), et pour
retirer l’intersection il faut rayer toutes les arêtes qui étaient déjà présentes.
On obtient :
S1
S2
S3
S4
S5
S6
S1
S2
S3
2
6
6
2
5
S4
S5
2A
1
S6
Si on ajoute S1 à l’ensemble, on procède de la même manière pour trouver le cocycle du nouvel ensemble ({ S1 , S4 , S6 }). On ajoute la ligne et la colonne de S1 mais en rayant les éléments déjà présents.
Cela donne :
S1
S1
S2
S3
S4
S5
S6
32
S2
S3
6
6
S4
S5
2A
1
8
2
A
2
2
A
5
Eric L ALLET, Jean-Luc R AFFY
S6
Utilisons ce principe sur l’algorithme de Prim.
Imaginons un cas d’étude : Six fleuves majeurs coulent dans la province de Primlande : l’Armoise, la
Bellis, le Comaret, la Douve, l’Erine et le Fragon. Le gouverneur de Primlande voudrait créer un réseau
de canaux pour permettre de naviguer d’un fleuve à l’autre. Il veut aussi que ça lui coûte le moins cher
possible. Il a demandé une étude pour évaluer le coût de la jonction des fleuves pris deux à deux. Voici le
résultat :
Armoise
Bellis
Comaret
Douve
Erine
Fragon
Armoise
Bellis
Comaret
Douve
Erine
10
6
4
9
3
8
2
4
3
4
7
3
2
1
5
Fragon
Il faut maintenant trouver quels canaux creuser pour que tous les fleuves ne forment plus qu’un seul
réseau qui coûte le moins cher possible. Prim est parfaitement adapté. On va donc le dérouler, mais sur la
matrice.
Pour démarrer, on va choisir d’initialiser A avec Armoise. On sélectionne donc l’Armoise (en soulignant) dans la matrice et on ajoute son cocycle. Sur une matrice d’adjacences, le cocycle d’un sommet
correspond à sa ligne et sa colonne :
Armoise
Armoise
Bellis
Comaret
Douve
Erine
Fragon
Bellis
Comaret
Douve
Erine
Fragon
10
6
4
9
3
La plus petite arête présente dans la matrice est celle qui va de l’Armoise au F ragon. On ajoute cette
arête à notre arbre (en ajoutant un «oui» dans la case de l’arête),
On ajoute le F ragon dans l’ensemble A (on le souligne dans la matrice).
On ajoute aussi son cocycle (donc on fait l’union avec le cocycle du graphe déjà dans la matrice), mais
en rayant les éléments s’ils sont déjà présents (on supprime l’intersection avec le cocycle déjà présent). On
obtient le cocycle du nouvel ensemble :
Armoise
Bellis
Comaret
Douve
Erine
Fragon
Armoise
Bellis
Comaret
Douve
Erine
10
6
4
9
3 oui
A
3
3
1
5
Fragon
Dans le nouveau cocycle, c’est l’arête Douve-F ragon qui doit être sélectionnée. On ajoute cette arête
à notre arbre.
On ajoute la Douve dans l’ensemble A. On ajoute son cocycle mais en rayant les arêtes qui sont déjà
présentes dans la matrice :
Armoise
Bellis
Comaret
Douve
Erine
Fragon
Armoise
Bellis
Comaret
10
6
4
A
9
3 oui
A
2
4
3
3
Douve
Erine
2
A1 oui
5
Eric L ALLET, Jean-Luc R AFFY
Fragon
33
Dans le nouveau cocycle, deux arêtes peuvent être choisies : soit Erine-Douve, soit Douve-Bellis.
On va choisir d’ajouter l’arête Douve-Bellis.
On ajoute aussi la Bellis dans l’ensemble A. On ajoute son cocycle mais en rayant les arêtes qui sont
déjà présentes dans la matrice :
Armoise
Bellis
Comaret
Douve
Erine
Fragon
Armoise
Bellis
Z
1
0
Z
6
4
A
9
3 oui
A
8
2
A oui
4
3
A
Comaret
Douve
Erine
2
A1 oui
5
Fragon
4
3
Cette fois, c’est au tour de l’arête Erine-Douve d’être choisie.
On ajoute aussi l’Erine dans l’ensemble A. On ajoute son cocycle mais en rayant les arêtes qui sont
déjà présentes dans la matrice :
Armoise
Bellis
Comaret
Douve
Erine
Fragon
Armoise
Bellis
Comaret
Douve
Erine
Z
10
Z
6
4
A
9
A
3
A oui
8
2 oui
A
4
A
3
A
4
7
3
A2 oui
1A oui
5A
Fragon
On doit maintenant prendre l’arête F ragon-Comaret. On obtient les 5 arêtes utiles à notre arbre, on
peut s’arrêter là :
Armoise
Bellis
Comaret
Douve
Erine
Fragon
Armoise
Bellis
Comaret
Douve
Erine
Z
10
Z
6
A
4
A
9
A
3 oui
A
8
A
2 oui
A
4
A
3
A
A4
A7
A3 oui
A2 oui
A1 oui
5A
Fragon
L’arbre de recouvrement minimal est donc composé de (Douve-Bellis, Erine-Douve, F ragon-Armoise,
F ragon-Comaret, F ragon-Douve).
Il pèse donc : 2 + 2 + 3 + 3 + 1 = 11.
3.5 Exercices
Exercice 3.1 (Promesse électorale)
Le réseau routier d’une petite commune rurale a été laissé à l’abandon si longtemps qu’une bonne partie des
routes sont devenues des chemins. Lors des dernières élections le maire a promis qu’il allait remettre en état
suffisamment de routes pour que toutes les habitations de la commune puissent rejoindre le centre-bourg
par une route digne de ce nom. Il lui faut maintenant tenir sa promesse, mais bien sûr, il voudrait engager
un minimum de dépenses pour cela.
La carte de la commune et la liste des habitations à relier au centre-bourg sont sur la figure 3.7. Le coût
de la remise en état d’une route est directement proportionnel à sa longueur. Voici la longueur des différents
chemins :
34
Eric L ALLET, Jean-Luc R AFFY
ch1=500m
ch7=1300m
ch13=1300
ch2=1200m
ch8=1500m
ch14=1500
ch3=1400
ch9=1400
ch15=1700
ch4=800m
ch10=500
ch16=1300
ch5=1400m
ch11=1400m
ch6=1600
ch12=1600m
F IG . 3.7 – Carte de la commune
Correction page 118
Eric L ALLET, Jean-Luc R AFFY
35
36
Eric L ALLET, Jean-Luc R AFFY
Chapitre 4
Recherche du plus court chemin
4.1 Introduction
Les problèmes de cheminement dans les graphes sont parmi les plus anciens de la théorie des graphes.
Ce type de recherche se rencontre soit directement, soit sous la forme d’un problème dans de nombreuses
applications.
Quelques exemples :
– les problèmes de tournées
– les problèmes de gestion de stock, d’investissements
– les problèmes d’optimisation de réseaux.
4.2 Définitions
Définition 4.1 (graphe valué) Étant donné un graphe G = (X, U ), on associe à chaque arc u ∈ U un
nombre l(u) ∈ R. On dit que G est valué par la longueur l(u).
Définition 4.2 (plus court chemin) Le problème du plus court chemin (PCCH) entre 2 sommets i et j sera
de trouver un chemin pi,j dont la longueur totale l(pi,j ) est minimale.
Avec l(pi,j ) =
X
l(u)
u∈pi,j
L’interprétation de l(u) peut être un coût de transport, une dépense de construction ou un temps nécessaire pour parcourir u.
Voici deux exemples pour illustrer des cas où on est confronté à ce type de problème :
– Considérons une carte routière et cherchons la route la plus courte pour se rendre d’une localité à une
autre. Le graphe est obtenu en prenant comme sommets les localités et en remplaçant chaque route
entre deux localités par 2 arcs d’orientations opposées, et ayant pour longueur la longueur de la route.
– Considérons le projet de construction d’une autoroute entre les villes A et K. Sur le graphe les arcs
représentent les différents tronçons possibles de l’autoroute ; chaque arc est valué par le coût total de
réalisation du tronçon correspondant.
4.3 Algorithme de Ford-Moore
4.3.1 Description
Voici l’algorithme de Ford avec l’amélioration de Moore :
Soit un graphe G = [X, U ] connexe valué. |X| = N . La longueur de l’arc allant de xi à xj est l(ij).
Eric L ALLET, Jean-Luc R AFFY
37
On va trouver les plus courts chemins, λ(xi ), allant du sommet x1 vers chacun des sommets xi du
graphe. Cet algorithme est itératif : à chaque étape on va réévaluer la longueur du chemin de x1 à xi . La
valeur de cette longueur à l’étape m sera notée λ(xi , m),
Algorithme 4.1 (Algorithme de Ford-Moore)
1. Poser
λ(x1 , 0) = 0 et S0 = Γ(x1 ) et S1 = ∅
λ(xi , 0) = ∞ pour xi ∈ X et xi 6= x1
m=0
2. Pour tout xi ∈ Sm faire :
λ(xi , m + 1) = min(λ(xi , m), λ(xk , m) + l(ki) ) k ∈ Γ− (xi )
si λ(xi , m + 1) < λ(xi , m) alors Sm+1 ← Sm+1 ∪ Γ(xi )
3. Si λ(xi , m + 1) = λ(xi , m) pour tout xi ∈ X Fin
Sinon aller en 4.
4. Sm+2 = ∅ et m ← m + 1. Retouner en 2.
4.3.2 Exemple sur le graphe dessiné
Trouvons le plus court chemin allant du sommet A au sommet H du graphe de la figure 4.1. Notez que
sur ce graphe certains arcs ont des chemins avec des longueurs négatives. Tant qu’il n’y a pas de circuits de
longueur négative l’algorithme va fonctionner.
4
E
B
2
−2
5
3
A
4
3
C
1
0
F
5
−1
G
7
H
8
D
F IG . 4.1 – Quel est le plus court chemin allant de A à H ?
On commence en initialisant λ(A, 0) = 0 et tous les autres λ(x, 0) = ∞. Pour alléger le graphe on va
considérer que les sommets sans λ sont marqués avec ∞. La première itération de l’algorithme (m = 1) va
faire évoluer les succésseurs de A : B, C et D (voir figure 4.2).
À la seconde itération la propagation atteint tous les sommets. Mais la valeur du sommet C évolue à
nouveau. En effet ses prédécesseurs B et D ayant changés on doit réévaluer la valeur de son chemin. Et
celui arrivant par le sommet B est plus court. C’est donc lui qui devient le chemin le plus court pour le
sommet C (voir la figure 4.3).
À la troisième itération, les sommets A, B, C et D sont stabilisés. mais il faut réévaluer tous les autres.
Pour le sommet E la valeur qui arrive pas le sommet F est la même que celle déjà arrivée par le sommet
B. Donc pour l’instant on a deux estimations équivalentes du chemin le plus court pour le sommet E. Mais
cela va évoluer puisque à cette itération la valeur du sommet F change à nouveau. Les valeurs des sommets
G et H changent aussi (voir figure 4.4).
À la quatrième itération le sommet G est lui aussi stabilisé. Le sommet F va rester inchangé, car la
valeur qui arrive par le G est plus grande. Celle du sommet E diminue, et donc le chemin le plus court pour
ce sommet arrive maintenant par le sommet F . Pour le sommet H, une seconde estimation du chemin le
38
Eric L ALLET, Jean-Luc R AFFY
F IG . 4.2 – Première itération de l’algorithme de Ford-Moore
F IG . 4.3 – Seconde itération de l’algorithme de Ford-Moore
F IG . 4.4 – Troisième itération de l’algorithme de Ford-Moore
plus court apparait : celui qui arrive par le sommet G a (pour l’instant) la même valeur que celui qui arrive
par le sommet E (voir figure 4.5).
Enfin, à la cinquième et dernière itération, seul le sommet H évolue. La propagation venant du sommet
E est plus basse. Comme H n’a pas de successeur, ce changement n’aura plus de répercution sur le graphe.
L’algorithme s’arète là. Le chemin le plus court allant de A à H passe donc par B, C, F et E et la valeur de
sa longueur est 8 (voir figure 4.6).
Eric L ALLET, Jean-Luc R AFFY
39
F IG . 4.5 – Quatrième itération de l’algorithme de Ford-Moore
F IG . 4.6 – Cinquième et dernière itération de l’algorithme de Ford-Moore
4.3.3 Exemple sur un tableau
Il est possible de dérouler l’exemple sur un tableau plutôt que sur le dessin du graphe. On crée un tableau
avec une colonne pour chaque sommet, une pour la liste des sommets qui ont changé, et une dernière pour
leurs successeurs. Il y a une nouvelle ligne pour chaque itération.
Le tableau commence donc avec λ(A, 0) = 0 et les autres ∞.
m
λ(A)
λ(B)
λ(C)
λ(D)
λ(E)
λ(F )
λ(G)
λ(H)
0
0
∞
∞
∞
∞
∞
∞
∞
Sommets
changés
A
Γ+
B,C,D
À l’étape suivante on traite tous les sommets qui apparaissent dans la colonne Γ+ de la ligne précédente.
Ici il faut donc faire évoluer B, C et D en fonction de leur prédécesseur A. En plus de la valeur de la
longueur du chemin, on note aussi sur la case le prédécesseur pour pouvoir retrouver à la fin les sommets
du chemin le plus court.
40
m
λ(A)
λ(B)
λ(C)
λ(D)
λ(E)
λ(F )
λ(G)
λ(H)
0
1
0
H
∞
H
5/A
H
∞
H
4/A
H
∞
H
3/A
∞
∞
∞
∞
Eric L ALLET, Jean-Luc R AFFY
Sommets
changés
A
B
C
D
Γ+
B,C,D
C,E
F,G
H,C
Pour l’itération 2, les sommets C, E, F, G et H doivent être réévaluer.
m
λ(A)
λ(B)
λ(C)
λ(D)
λ(E)
λ(F )
λ(G)
λ(H)
0
1
0
H
∞
H
5/A
H
∞
H
H
4/A
H
H
∞
H
3/A
H
∞
H
H
∞
H
H
∞
H
H
∞
H
9/B
7/C
3/C
11/D
2
3/B
Sommets
changés
A
B
C
D
C
E
F
G
H
Γ+
B,C,D
C,E
F,G
H,C
F,G
H
E
F, H
Les sommets E, F, G et H présents dans la colonne Γ+ doivent être révalués.
m
λ(A)
λ(B)
λ(C)
λ(D)
λ(E)
λ(F )
λ(G)
λ(H)
0
1
0
H
∞
H
5/A
H
∞
H
H
4/A
H
H
∞
H
3/A
H
∞
H
H
∞
H
H
∞
H
H
∞
H
9/B
H
7/C
H
H
3/C
H
X
X
X
11/D
6/C
H
8/G
H
2/C
9/E
X
X
X
10/G
2
3/B
3
9/F
Sommets
changés
A
B
C
D
C
E
F
G
H
F
G
H
Γ+
B,C,D
C,E
F,G
H,C
F,G
H
E
F,H
E
F,H
À cette itération, il faut réévaluer E, F et H.
m
λ(A)
λ(B)
λ(C)
λ(D)
λ(E)
λ(F )
λ(G)
λ(H)
0
1
0
H
∞
H
5/A
H
∞
H
H
4/A
H
H
∞
H
3/A
H
∞
H
H
∞
H
H
∞
H
H
∞
H
H
9/B
H
H
7/C
H
H
3/C
H
X
X
X
11/D
6/C
H
8/G
H
2/C
9/E
X
X
X
10/G
2
3/B
3
H
9/F
H
4
8/F
H
7/G
H
9/G
Eric L ALLET, Jean-Luc R AFFY
Sommets
changés
A
B
C
D
C
E
F
G
H
F
G
H
E
Γ+
B,C,D
C,E
F,G
H,C
F,G
H
E
F,H
E
F,H
H
41
Seul H doit être réévaluer.
m
λ(A)
λ(B)
λ(C)
λ(D)
λ(E)
λ(F )
λ(G)
λ(H)
0
1
0
H
∞
H
5/A
H
∞
H
H
4/A
H
H
∞
H
3/A
H
∞
H
H
∞
H
H
∞
H
H
∞
H
H
9/B
H
H
7/C
H
H
3/C
H
X
X
X
11/D
6/C
H
8/G
H
2/C
H
9/E
H
X
X
X
10/G
2
3/B
H
9/F
H
3
4
5
8/F
H
7/G
H
H
9/G
H
8/E
Sommets
changés
A
B
C
D
C
E
F
G
H
F
G
H
E
H
Γ+
B,C,D
C,E
F,G
H,C
F,G
H
E
F,H
E
F,H
H
La colonne Γ+ est vide. L’algorithme est donc fini. La longueur du plus court chemin est donc 8.
Pour connaître ce chemin le plus court, il suffit de partir de la colonne de H et de remonter la route :
H → 8/E → 8/F → 6/C → 3/B → 5/A.
4.4 Exercices
Exercice 4.1 (Voyage Lyon-Agen)
Un voyageur doit aller en voiture de Lyon à Agen. En regardant les cartes il a dégagé diverses options
pour faire sa route (voir figure 4.7).
– Il peut couper le massif-central par les nationales en passant le Le Puy-en-Velay, Brioude et Cahors.
– Il peut passer par les autoroutes du sud de la France, en passant par Orange, Montpellier, Narbonne,
Toulouse et Montauban.
– Il peut passer par les autoroutes du centre de la France, en rejoingnant l’A72 à Feurs, et ensuite en
passant par Clermont-Ferrand, Brive, Cahors, Montauband.
– Il peut enfin faire un mélange de tout cela en profitant éventuellement de l’A75 qui coupe toutes ces
routes.
Sachant qu’il réalise une moyenne de 70km/h sur les nationales et départementales et de 110km/h sur
les autoroutes quel chemin doit-il emprunter pour faire le trajet le plus rapidement possible ? Et quel est le
temps de ce trajet ?
Correction page 121.
Exercice 4.2 (Le banquet)
Refaites l’exercice 2.2 (page 25) mais cette fois en le modélisant avec une recherche de plus court
chemin.
Correction page 123.
Exercice 4.3 (Le banquet (suite))
Refaites l’exercice 2.3 (page 25) mais cette fois en le modélisant avec une recherche de plus court
chemin.
Correction page 125.
42
Eric L ALLET, Jean-Luc R AFFY
F IG . 4.7 – Les routes entre Lyon et Agen
Eric L ALLET, Jean-Luc R AFFY
43
44
Eric L ALLET, Jean-Luc R AFFY
Chapitre 5
Flot Maximal
5.1 Introduction
Dans ce chapitre nous allons voir un algorithme qui permet de trouver le flot maximal entre deux points
d’un graphe. De nombreux problèmes de natures très différentes se modélisent avec ce genre de graphe :
le calcul de la capacité d’un réseau routier ou informatique, le calcul de flux migratoires ou financiers, le
calcul des possibilités logistiques d’une armée. . .
En ajoutant des coûts de transit sur les arcs, on verra aussi comment trouver le flot maximal qui ne
dépasse pas un coût donné, ou bien comment trouver le coût minimal pour faire transiter un flot donné.
5.2 Description du problème
Le problème du flot maximal consiste à faire passer un flot optimal à traver un «réseau de transport».
Un réseau de transport est un graphe G = [X, U ] orienté sans boucle, dont chaque arc est valué par un
nombre représentant sa capacité de transport. On distingue deux sommets particuliers dans ce graphe : S, la
source, et P , le puits. Le problème sera de trouver la capacité du transit maximal entre la source et le puits.
La capacité d’un arc u sera notée c(u), et le flot attribué à cet arc sera noté ϕ(u).
Le réseau de transport ne doit pas générer l’apparition d’un flot venu de nulle part. Donc pour tous les
sommets il faut verifier que la somme des flots sortants est égale à la somme des flots entrants.
∀x ∈ X on a
X
ϕ(u) =
u/I(u)=x
X
ϕ(u′ )
u′ /T (u′ )=x
Pour que cette propriété soit vraie y compris pour le puits et la source, il faut placer un arc allant du
puits vers la source. Même si par la suite cet arc ne sera généralement pas représenté sur les graphes de ce
cours, il faudra imaginer sa présence, et surtout vérifier la propriété sous-jacente : le flot arrivant au puits
vaut celui sortant de la source.
5.3 Exemple de problème
Pour illustrer ce chapitre, imaginons un exemple :
Un producteur de betteraves de Picardie décide de faire circuler sa production d’Épénancourt jusqu’à
Maizy. Il veut profiter pour cela du réseau de voies navigables. Après s’être renseigné, il sait qu’il a la
capacité de faire circuler deux péniches par jour entre Épénancourt et Maizy sur le canal qui passe par
Noyon et Quierzy. Mais en profitant du canal qui passe par Chauny, il peut aussi faire circuler deux péniches
supplémentaires entre Épénancourt et Quierzy. De plus à partir de Noyon, il a possibilité de faire passer vers
Maizy une péniche de plus en utilisant le canal qui passe par Venizel (voir figure 5.1).
On va déterminer combien de péniches ce producteur peut faire passer chaque jour.
Eric L ALLET, Jean-Luc R AFFY
45
2
2
Noyon
2
Épénancourt
2
Maizy
Quierzy
1
F IG . 5.1 – Capacités de transport entre Épénancourt et Maizy
5.4 L’algorithme de Ford-Fulkerson
5.4.1 Introduction
L’algorithme de Ford-Fulkerson part d’un graphe avec un premier flot établi. Ce premier flot est quelconque, il peut même être nul. Mais pour diminuer le nombre d’itérations mieux vaut essayer de faire passer
«au jugé» le meilleur flot possible. Ensuite on va déterminer dans quelle mesure ce flot peut être amélioré.
Pour cela on va répéter de façon cyclique trois phases :
1. Le marquage du graphe : on va faire utiliser un premier algorithme pour marquer le graphe. Ce
marquage permettra de trouver un chemin où le flot peut être augmenté, si un tel chemin existe.
2. Le calcul de l’amélioration : si on a réussi à marquer un chemin, on détermine ensuite le gain que
l’on peut obtenir sur le flot grâce à celui-ci.
3. L’augmentation du flot : enfin, avant de reboucler sur le marquage, on augmente le flot du graphe du
gain calculé à la phase 2.
5.4.2 Le marquage du graphe
Cette première phase va permettre soit de trouver un chemin non saturé allant de source S au puits P ,
soit de trouver une chaîne permettant de dérouter une partie du flot pour désaturer un arc au profit d’un flot
parallèle. Pour cela on va construire «une chaîne améliorante» allant de S à P .
Algorithme 5.1 (Algorithme de Ford-Fulkerson : phase du marquage)
1. Marquer la source S d’une *.
2. Pour tout sommet x marqué :
– s’il existe des arcs (x, y), avec y non marqué tel que ϕ(x, y) < c(x, y) marquer y par +x.
– s’il existe des arc (y, x), avec y non marqué tel que ϕ(y, x) > 0 marquer y par −x.
3. Tant que P n’est pas marqué et qu’il est possible de marquer d’autres sommets, retourner en 2.
Sinon FIN.
A fin du marquage, si le puits P n’est pas marqué, le flot est déjà à son maximum. Sinon, il peut être
amélioré. On calcule alors la valeur du gain grâce à l’algorithme de la seconde phase.
5.4.3 Le calcul du gain
La marquage a créé une «chaîne améliorante» C allant de la source au puits composée d’arcs parcourus
dans le bon sens (orientation directe), d’arcs parcourus à contre sens (orientation inverse)
On va appelé C+, l’ensemble des arcs d’orientation directe de la chaîne améliorante, et C−, l’ensemble
des arcs d’orientation inverse. On a donc C = C+ ∪ C−.
Les arcs de C+ sont des arcs non-saturés sur lesquels il va être possible de faire passer un flot supplémentaire. Les arcs de C− sont des arcs sur lesquels il existe déjà un flot que l’on va pouvoir rediriger pour
augmenter le flot des arcs de C+. Il faut calculer ce flot supplémentaire.
Soit δ+ = min(c(u) − ϕ(u)) ∀u ∈ C+. C’est le flot maximal que l’on peut rediriger vers les arcs de
C+ avant de saturer l’un d’entre eux.
46
Eric L ALLET, Jean-Luc R AFFY
Soit δ− = min(ϕ(u)) ∀u ∈ C−. C’est le flot maximal que peut puiser dans les arcs de C− avant
d’épuiser l’un d’entre eux.
Le gain que l’on peut gagner sur le flot grâce à la chaîne améliorante C est donc δ = min(δ+, δ−).
L’algorithme pour calculer ce gain part du puits, et remonte la chaîne jusqu’à la source :
Algorithme 5.2 (Algorithme de Ford-Fulkerson : Calcul du gain)
1. Poser g ← ∞ et x ← P
2. – si x est marqué +y alors g ← min(g, c(y, x) − ϕ(y, x)).
– si x est marqué −y alors g ← min(g, ϕ(x, y))
x ← y.
3. Si x = S alors FIN
Sinon aller en 2.
Une fois ce gain évalué, il faut le reporter sur le flot du graphe.
5.4.4 L’augmentation du flot
Maintenant que l’on connaît la valeur du gain, il suffit de reparcourir la chaîne améliorante comme on
vient de le faire, mais cette fois ci, en ajoutant le flot aux arc de C+, et en le prélevant sur les arcs de C−.
Algorithme 5.3 (Algorithme de Ford-Fulkerson : Augmentation du flot)
1. Poser x ← P
2. – si x est marqué +y alors augmenter ϕ(y, x)) de g.
– si x est marqué −y alors diminuer ϕ(x, y)) de g.
x ← y.
3. Si x = S alors FIN
Sinon aller en 2.
5.5 Exemple de flot max
Reprenons l’exemple de la figure 5.1. Pour accélérer le calcul de la solution, on va déjà considérer qu’un
flot de deux péniches emprunte le canal direct Épénancourt, Noyon, Quierzy, Maizy. Si on garde ces deux
péniches ainsi, il n’est pas possible d’en faire passer par le canal Épénancourt-Quierzy puisqu’au delà de
Quierzy le canal est saturé. Et il n’est pas possible de profiter du canal Noyon-Maizy, puisque la section qui
mène à Noyon est saturée (Voir Figure 5.2).
F IG . 5.2 – Ford-Fulkerson : Établissement d’un flot au jugé
On va donc utiliser l’algorithme de Ford-Fulkerson pour voir s’il est possible de faire mieux que ces
deux péniches. On débute par la phase de marquage.
– La source Épénancourt est marquée d’une *.
– Seul Épénancourt est marqué. L’arc Épénancourt-Quierzy n’est pas saturé, donc on marque Quierzy
avec «+Épénancourt». Aucun arc n’arrive sur Épénancourt, donc aucun sommet ne peut être marqué
de «-Épénancourt».
Eric L ALLET, Jean-Luc R AFFY
47
– Quierzy est marqué. Tous les arcs partant de Quierzy sont saturés. Donc aucun sommet ne peut être
marqué «+Quierzy». Par contre l’arc qui arrive de Noyon a un flot non nul, et Noyon n’est pas encore
marqué, donc on marque Noyon avec «-Quierzy».
– Noyon est marqué. Son seul voisin non marqué est Maizy. L’arc qui va de Noyon à Maizy n’est pas
saturé. On peut donc marquer Maizy avec «+Noyon».
– Le puits Maizy est marqué, on arrête le marquage (voir Figure 5.3).
2/2
zy
Quierzy
−Q
+N
ui
oy
er
Épénancourt
Maizy
2/2
on
Noyon
2/2
+É
*
pé
na
nc
ou
rt
0/2
0/1
F IG . 5.3 – Ford-Fulkerson : Premier marquage
On peut maintenant calculer le gain qu’il est possible d’ajouter au flot grâce à la chaîne améliorante
que l’on vient de marquer. Pour cela on démarre du puits (Maizy) et on remonte le marquage de la chaîne
jusqu’à la source (Épénancourt).
– g ← ∞ et x ← M aizy
– Maizy est marqué par «+Noyon». La capacité de l’arc Noyon-Maizy est de 1 et son flot de 0. Donc
g = min(∞, 1 − 0) = 1.
x ← Noyon.
– Noyon est marqué de «-Quierzy». Le flot de l’arc Noyon-Quierzy est de 2. Donc g = min(1, 2) = 1.
x ← Quierzy.
– Quierzy est marqué «+Épénancourt». La capacité de l’arc Épénancourt-Quierzy est de 2 et son flot
de 0. Donc g = min(1, 2 − 0) = 1.
x ← Épénancourt.
– x est vaut la source, on arrête l’algorithme ici. Le gain possible grâce à cette chaîne est donc de 1.
Donc, cette itération nous permet de faire passer une troisème péniche dans le flot. On va reporter ce gain
sur les flots du graphe. On reparcourt la même chaîne en ajoutant le gain lorsqu’on remonte un marquage
«+» et en prélevant lorsqu’on remonte un marquage «-».
1/2
Maizy
2/2
Quierzy
on
Épénancourt
Noyon
oy
2/2
−Q
ui
er
zy
*
+N
1/2
+É
pé
na
nc
ou
rt
– x ← M aizy
– Maizy est marqué par «+Noyon». Le flot de l’arc Noyon-Maizy était de 0. On l’augmente de 1. Il
passe donc à 1.
x ← Noyon.
– Noyon est marqué de «-Quierzy». Le flot de l’arc Noyon-Quierzy était de 2. On le diminue de 1. Il
passe donc à 1.
x ← Quierzy.
– Quierzy est marqué «+Épénancourt». Le flot de l’arc Épénancourt-Quierzy était de 0. On l’augmente
de 1. Il passe donc à 1.
x ← Épénancourt.
– x est la source, on arrête l’algorithme ici (Voir figure 5.4).
1/1
F IG . 5.4 – Ford-Fulkerson : Augmentation du flot
L’exemple est simple et une seule itération a suffit à saturer tous les canaux arrivants à Maizy. Donc
on sait que le flot est maximal. Mais on va quand même continuer l’algorithme de Ford-Fulkerson pour
montrer que dans ce cas on ne trouve plus de chaîne améliorante.
48
Eric L ALLET, Jean-Luc R AFFY
On recommence la phase de marquage.
– La source Épénancourt est marquée d’une *.
– Seul Épénancourt est marqué. L’arc Épénancourt-Quierzy n’est pas saturé, donc on marque Quierzy
avec «+Épénancourt». Aucun arc n’arrive sur Épénancourt, donc aucun sommet ne peut être marqué
de «-Épénancourt».
– Quierzy est marqué. Tous les arcs partant de Quierzy sont saturés. Donc aucun sommet ne peut être
marqué «+Quierzy». Par contre l’arc qui arrive de Noyon a un flot non nul, et Noyon n’est pas encore
marqué, donc on marque Noyon avec «-Quierzy».
– Noyon est marqué. Son seul voisin non marqué est Maizy. L’arc qui va de Noyon à Maizy est saturé.
On ne peut donc pas marquer Maizy.
– Plus aucun marquage n’est possible, le puits n’est pas marqué. Il n’existe plus de chaîne améliorante
(voir Figure 5.5).
1/2
2/2
Maizy
Quierzy
−Q
ui
er
Épénancourt
+É
Noyon
2/2
zy
*
pé
na
nc
ou
rt
1/2
1/1
F IG . 5.5 – Ford-Fulkerson : Deuxième marquage, et fin de l’algorithme
Notre cultivateur pourra donc faire passer 3 péniches par jour entre Épénancourt et Maizy.
Comme on vient de le voir dans cette exemple, le flot max sera toujours au mieux égal à la capacité qui
sort le source ou qui arrive dans le puits :
X
X
c(u′ ))
c(u),
ϕmax ≤ min(
u∈ω + (source)
u′ ∈ω − (puits)
5.6 Flot maximal à coût minimal
On va ajouter une composante à notre problème : le coût du transit. Donc maintenant le graphe G =
[X, U ] va être doublement valué. Chaque arc u est muni d’une capacité c(u) mais aussi d’un coût unitaire
de transit a(u). Donc si le flot transitant par l’arc u est ϕ(u), le coût de transit de ce flot par cet arc est
ϕ(u) × a(u). Dans ces conditions, le coût global du flot sur tout le graphe est :
X
coût global =
ϕ(u) × a(u)
u∈U
Dans un premier temps, le problème que l’on va résoudre consiste à trouver quel est le coût minimal
pour faire passer le flot maximal (calculé précédemment par l’algorithme de Ford-Fulkerson)
Pour cela on va utiliser l’algorithme de Busacker et Gowen.
5.7 L’algorithme de Busacker et Gowen
Cet algorithme utilise de façon itérative la recherche d’un plus court chemin pour trouver où faire passer
un flot à moindre coût. Flot après flot, on va saturer le graphe jusqu’à atteindre le coût ou le flot fixé. À
chaque fois qu’on va ajouter un flot, cela va saturer des arcs ou éventuellement en libérer d’anciens qui
étaient saturés. Il va donc falloir à chaque étape construire un nouveau graphe associé qui représentera les
véritables capacités restantes une fois pris en compte les flots déjà envoyés.
Regardons comment construire ce graphe associé :
Soit le graphe G = [X, U ] où c(u) est la capacité de transit de l’arc u, et a(u) le coût de transit unitaire
de cet arc. On notera ϕ(u) le flot qui transit sur l’arc u.
Eric L ALLET, Jean-Luc R AFFY
49
Le graphe associé sera G′ = [X, U ′ ] avec c′ (u) la capacité de transit, a′ (u) le coût de transit unitaire.
On le construit de la façon suivante :
– Pour tout arc (x, y) ∈ U tel que ϕ(x, y) < c(x, y) ajouter un arc (x, y) dans U ′ avec c′ (x, y) =
c(x, y) − ϕ(x, y) et a′ (x, y) = a(x, y).
– Pour tout arc (x, y) ∈ U tel que ϕ(x, y) > 0 ajouter un arc (y, x) dans U ′ avec c′ (y, x) = ϕ(x, y) et
a′ (y, x) = −a(x, y).
Pour la première version de l’algorithme de Busacker et Gowen, on se fixe le but d’atteindre ϕmax ,
la valeur du flot maximal qui peut transiter sur ce graphe (valeur calculée grâce à l’algorithme de FordFulkerson). S est sommet source et P le sommet puits.
Algorithme 5.4 (Algorithme de Busacker et Gowen)
a) On part avec le graphe vierge de tout flot (ϕ(u) = 0 ∀u ∈ U ), et on pose ϕ = 0.
b) Calculer le graphe G′ associé à G.
c) Chercher sur G′ un plus court chemin P CCH de S à P , la longueur des arcs étant le coût de transit
(avec l’algorithme de Ford-Moore).
d) Calculer ∆ϕ , la valeur de flot pouvant transiter par P CCH.
∆ϕ = M in(c′ (u))u∈P CCH
e) Pour tout arc (x, y) ∈ P CCH
– Si l’arc (x, y) ∈ U alors faire ϕ(x, y) ← ϕ(x, y) + ∆ϕ .
– Sinon faire ϕ(y, x) ← ϕ(y, x) − ∆ϕ .
f) ϕ ← ϕ + ∆ϕ .
Si ϕ = ϕmax alors FIN
Sinon allez en «b».
5.8 Exemple flot max coût min
Pour illustrer cet algorithme, prenons le graphe de la figure 5.6.
A
c(u)
a(u)
3
100
S
2
100
2
200
B
3
100
3
500
2
100
C
P
2
300
F IG . 5.6 – Busacker et Gowen : le graphe exemple
Avant d’utiliser Busacker et Gowen, on va calculer le flot maximal de ce graphe. Pour cela on commence
par lancer deux flots au jugé : le premier de 2 unités par le chemin S → B → C → P et le second de 3
unités par le chemin S → A → P (voir la figure 5.7).
Comme la capacité maximale de la source est saturée avec les 5 unités envoyées, on sait que l’on a le
flot maximal.
On peut maintenant commencer l’algorithme de Busacker et Gowen :
1. a) On démarre avec les flots à 0 et avec ϕ = 0. Le ϕmax à atteindre est de 5.
b) Comme les flots sont nuls, le graphe associé est exactement le même que le graphe de référence
(celui de la figure 5.6).
50
Eric L ALLET, Jean-Luc R AFFY
A
3/3
100
S
2/2
100
2
200
B
2/3
100
3/3
500
2/2
100
C
P
2
300
F IG . 5.7 – Flots au jugé
c) On recherche le plus court chemin (au sens du coût) de S à P sur ce graphe. On trouve le chemin
S → B → C → P (pour une «longueur» de 300).
d) ∆ϕ = M in(c(S, B), c(B, C), c(C, P )) = M in(2, 3, 2) = 2
Le coût de ce premier flot est donc de 2 × longueur(S → B → C → P ) = 2 × 300 = 600.
e) On ajoute ce flot au graphe d’origine (voir figure 5.8).
f) ϕ ← ϕ + ∆ϕ = 0 + 2 = 2
ϕ < ϕmax donc on refait une itération de l’algorithme de Busacker et Gowen.
2. b) On calcule le nouveau graphe associé. Seul l’axe S → B → C → P évolue : les arcs S → B
et C → P saturés disparaissent du graphes. La capacité de l’arc B → C tombe à 1. Et les arcs
P → C, C → B et B → S apparaissent avec un coût de −100 et une capacité de 2 (voir figure
5.8).
F IG . 5.8 – Busacker et Gowen : deuxième itération
c) Le nouveau plus court chemin de S à P sur ce graphe est S → A → C → B → P (pour une
longueur de 500 ; attention à C → B qui a une longueur négative de -100).
d) ∆ϕ = M in(c(S, A), c(A, C), c(C, B), c(B, P )) = M in(3, 2, 2, 2) = 2.
Le coût de ce second flot est donc 2 × longueur(S → A → C → B → P ) = 2 × 500 = 1000.
e) On ajoute ce flot au graphe d’origine (voir figure 5.9).
f) ϕ ← ϕ + ∆ϕ = 2 + 2 = 4
ϕ < ϕmax donc on refait une itération de l’algorithme de Busacker et Gowen.
3. b) On calcule le nouveau graphe associé. Plutôt que de repartir de zéro, on peut prendre pour base
le dernier graphe associé (celui de la figure 5.8) et ajouter dessus notre nouveau flot. Donc sur le
chemin de ce flot, l’arc S → A perd 2 sur sa capacité, et un arc A → S apparaît avec une capacité
de 2 et un coût de −100. Ensuite l’arc A → C disparaît, mais un arc C → A apparaît avec une
capacité de 2 et coût de −200. L’arc B → C retrouve une capacité de 3 et l’arc C → B qui
était apparu sur le premier graphe associé n’existe plus. Enfin l’arc B → P disparaît mais un arc
P → B apparaît avec une capacité de 2 et un coût de −300 (voir figure 5.9).
c) Le nouveau plus court chemin de S à P sur ce graphe est S → A → P (pour une longueur de
600).
d) ∆ϕ = M in(c(S, A), c(A, P )) = M in(1, 3) = 1.
Le coût de ce troisième flot est donc 1 × longueur(S → A → P ) = 1 × 600 = 600.
Eric L ALLET, Jean-Luc R AFFY
51
F IG . 5.9 – Busacker et Gowen : troisième itération
e) On ajoute ce flot au graphe d’origine (voir figure 5.10).
f) ϕ ← ϕ + ∆ϕ = 4 + 1 = 5
ϕ = ϕmax . On a donc atteint notre objectif et l’algorithme se finit là.
A
3/3
100
S
2/2
100
B
2/2
200
3
100
1/3
500
2/2
100
C
P
2/2
300
F IG . 5.10 – Busacker et Gowen : le flot maximal à coût minimum
L’algorithme s’est fini en trois itérations. Le premier flot a un coût de 600, le deuxième de 1000 et le
dernier de 600. Donc le coût total de notre flot est de 2200.
5.9 Variantes
Il est possible de changer la condition de fin de l’algorithme de Busacker et Gowen.
On peut décider d’arrêter pour tout flot inférieur au flot maximal. On peut donc trouver ainsi le coût
minimal pour tout flot compris entre 0 et le flot maximal.
On peut aussi décider d’arrêter lorsqu’on a atteint un coût fixé. On peut alors trouver le flot maximal
que l’on peut faire passer pour un coût donné. Dans ce cas, il faut aussi vérifier à chaque itération que l’on
a pas atteint le flot maximal. Si tel est le cas, cela signifie que l’on peut faire passer le flot maximal pour un
coût inférieur ou égal au coût donné.
5.10 Exercices
Exercice 5.1 (Cursus de formation)
Un organisme qui vend des formations sous-traite ses enseignements dans trois écoles. Une formation
qu’elle propose à son catalogue nécessite la validation des trois unités de valeur (U V1 , U V2 , et U V3 ). Il faut
avoir validé l’U V1 pour suivre l’U V2 , et avoir validé l’U V2 pour suivre l’U V3 .
La deuxième école a des accords d’équivalence avec les deux autres. Elle peut recevoir des élèves ayant
validés des U V dans les deux autres écoles, et ses élèves peuvent aussi continuer leur cursus dans les deux
autres écoles.
52
Eric L ALLET, Jean-Luc R AFFY
La troisième école a réuni les U V2 et U V3 au sein d’un seul module indivisible. Voici le tableau des
dates, capacités (en nombre d’élèves) et coût (en k euros/élève) pour les différentes U V et école.
Première
école
Seconde
école
Troisième
école
U V1
Début : 1er septembre
Fin : 30 novembre
Capacité : 40
Coût : 10 k euros
Début : 1er octobre
Fin : 15 décembre
Capacité : 30
Coût : 8 k euros
Début : 15 octobre
Fin : 15 janvier
Capacité : 20
Coût : 13 k euros
U V2
Début : 10 décembre
Fin : 15 février
Capacité : 20
Coût : 10 k euros
Début : 5 janvier
Fin : 15 mars
Capacité : 35
Coût : 8 k euros
Début : 20 janvier
Fin : 15 juin
Capacité : 35
Coût : 20 k euros
U V3
Début : 1er février
Fin : 15 mai
Capacité : 25
Coût : 15 k euros
Début : 1er avril
Fin : 15 juin
Capacité : 30
Coût : 8 k euros
À première lecture, la première école peut former 20 élèves, la seconde 30 et la troisième 20. Donc
on pourrait former 70 élèves. Mais en profitant des équivalences entre la seconde école et les deux autres,
l’organisme de formation doit pouvoir proposer mieux. Combien de formations peut-elle proposer cette
année ?
Correction page 128.
Exercice 5.2 (Cursus de formation (suite))
Finalement l’organisme de formation a reçu une demande pour 63 formations. Quel cursus l’organisme
doit proposer à ces 63 élèves pour obtenir ces formations à moindre prix ?
Correction page 130.
Eric L ALLET, Jean-Luc R AFFY
53
54
Eric L ALLET, Jean-Luc R AFFY
Deuxième partie
Programmation linéaire
Eric L ALLET, Jean-Luc R AFFY
55
Chapitre 6
La programmation linéaire
6.1 Introduction
Un des problèmes le plus classique en gestion consiste à optimiser un gain, un coût, ou toutes autres
valeurs fonctions de nombreux paramètres. De plus ces paramètres ne peuvent généralement pas être fixés
à volonté, mais sont soumis à des contraintes.
La valeur à optimiser et les contraintes sont très souvent des fonctions linéaires des paramètres. Il existe
alors diverses techniques pour résoudre ce problème. Nous allons présenter deux d’entre elles : la méthode
géométrique et le simplexe.
6.2 La forme canonique
L’objectif de la programmation linéaire est de trouver la valeur optimale d’une fonction linéaire sous
contraintes linéaires. La fonction à optimiser est baptisée fonction coût ou fonction économique. On la
nomme généralement Z.
Un problème de programmation linéaire se modélise de la façon suivante :
Soit la fonction économique Z que l’on souhaite optimiser (maximiser ou minimiser).
Z = C1 × X1 + C2 × X2 + ... + Cn × Xn
où les Xi sont des variables qui influent sur la valeur de Z, et les Ci les poids respectifs de ces variables
modélisant l’importance relative de chacune de ces variables sur la valeur de la fonction économique.
Les contraintes relatives aux variables s’expriment de la façon suivante :
avec Xi ≥ 0 ∀i

A1.1 × X1 + A1.2 × X2 + . . . + A1.n × Xn ≤ B1



 A2.1 × X1 + A2.2 × X2 + . . . + A2.n × Xn ≥ B2
..

.



Am.1 × X1 + Am.2 × X2 + . . . + Am.n × Xn ≤ Bm
Le modèle ci-dessus contient des contraintes de type «≤» et d’autres de type «≥». Cependant lorsqu’on
voudra résoudre un problème, la première étape consistera à le modéliser sous une forme dite «canonique».
Pour un problème de maximisation la forme canonique se décrit qu’avec des contraintes de type «≤» et
pour un problème de minimisation la forme canonique se décrit qu’avec des contraintes de type «≥». Si
lors de la modélisation des contraintes de l’autre type sont apparues, il suffit de multiplier par −1 les deux
membres pour renverser l’opérateur.
Eric L ALLET, Jean-Luc R AFFY
57
La forme canonique d’un problème de type maximisation est :
Trouver la valeur maximale de Z pour :

Z = C1 × X1 + C2 × X2 + ... + Cn × Xn









 A1.1 × X1 + A1.2 × X2 + . . . + A1.n × Xn ≤ B1
A2.1 × X1 + A2.2 × X2 + . . . + A2.n × Xn ≤ B2

.


 ..



 Am.1 × X1 + Am.2 × X2 + . . . + Am.n × Xn ≤ Bm


avec Xi ≥ 0 ∀i
La forme canonique d’un problème de type minimisation est :
Trouver la valeur minimale de Z pour :

Z = C1 × X1 + C2 × X2 + ... + Cn × Xn









 A1.1 × X1 + A1.2 × X2 + . . . + A1.n × Xn ≥ B1
A2.1 × X1 + A2.2 × X2 + . . . + A2.n × Xn ≥ B2

 ..

.




A
× X1 + Am.2 × X2 + . . . + Am.n × Xn ≥ Bm


 m.1
avec Xi ≥ 0 ∀i
Nous allons dans un premier temps nous intéresser au problème de type maximisation
6.3 Exemple
Pour illustrer les deux prochains chapitres nous allons modéliser jusqu’à la forme canonique un exemple :
Un atelier d’ébénisterie a obtenu un contrat de sous-traitance de meubles pour deux modèles de bibliothèques. Ces deux modèles utilisent du chêne et du hêtre pour être fabriqués. Le modèle «petit chêne»
utilise 2 stères de chêne et 4 stères de hêtre. Le modèle «grand hêtre» utilise 8 stères de hêtre et 1 stère de
chêne. La construction des 2 modèles nécessite 10 heures de travail chacun. La marge obtenu sur le modèle
«petit chêne» est de 600 euros, et celle sur le modèle «grand hêtre» de 400 euros.
Sachant que cet atelier dispose chaque année d’un stock de 8.000 stères de hêtre et 2.000 stères de
chêne, et qu’il peut fournir 12.500 heures de travail, quelle quantité de chaque modèle doit-il produire pour
optimiser sa marge ?
La première étape du problème est la modélisation.
Il faut en général commencer par trouver la fonction économique. Cela permet de définir les variables
du problème. Pour notre exemple, en appelant M1 le nombre de modèles «petit chêne» et M2 le nombre de
modèles «grand hêtre» fabriqués, la marge dégagée par l’atelier sera de 600 × M1 + 400 × M2 euros. Donc
la fonction économique à maximiser est :
Z = 600 × M1 + 400 × M2 (unité : euro)
.
Mais l’atelier ne peut pas produire à l’infini ces deux modèles. Il est limité par ses stocks de bois et son
volume horaire de travail. Le stock de chêne est de 2.000 stères, il en faut 2 pour le modèle M1 et 1 pour le
modèle M2 . Donc on obtient la contrainte suivante :
2 × M1 + M2 ≤ 2000
Avec le même raisonnement sur les stères de hêtre il faut respecter la contrainte :
4 × M1 + 8 × M2 ≤ 8000
Enfin, il faut 10 heures de travail pour chaque meuble, et l’atelier en dispose de 12.500, donc :
10 × M1 + 10 × M2 ≤ 12500
58
Eric L ALLET, Jean-Luc R AFFY
Donc en résumé on obtient le modèle suivant :
Z = 600 × M1 + 400 × M2

2 × M1 + M2 ≤ 2000



4 × M1 + 8 × M2 ≤ 8000
avec
10 × M1 + 10 × M2 ≤ 12500



M1 ≥ 0 et M2 ≥ 0
Eric L ALLET, Jean-Luc R AFFY
59
60
Eric L ALLET, Jean-Luc R AFFY
Chapitre 7
La méthode géométrique
7.1 Introduction
Dans ce chapitre nous allons décrire la méthode géométrique. Pour les cas simples (c’est à dire, généralement pas plus de deux variables une fois le modèle simplifié), sa mise en œuvre est très facile et rapide.
De plus elle permettra plus tard dans ce cours d’illustrer le comportement des autres méthodes, et ainsi de
donner une compréhension intuitive des algorithmes.
7.2 La méthode
La méthode géométrique consiste à matérialiser dans un espace à n (le nombre de variables de la fonction économique) dimensions les contraintes sur les variables. Ensuite on représente dans cet espace la
fonction économique, et on essaie de faire monter «Z» jusqu’au maximum possible tout en restant dans
l’espace limité par les contraintes.
Cette méthode s’applique facilement lorsque le nombre de dimensions est réduit, car dans ce cas la
représentation géométrique est facile, mais dès que ce nombre est important (plus de 3), cette méthode n’est
plus envisageable.
L’exemple de la section précédente utilise 2 variables. On peut donc l’appliquer. Notre espace est juste
un plan. On va mettre sur l’axe x (horizontal) la variable M1 est sur l’axe y (vertical) la variable M2 .
Comme on sait que l’on doit avoir M1 ≥ 0 et M2 ≥ 0, la solution de notre problème se trouve dans le
premier quadrant (le quart haut droit) de notre espace (voir figure 7.1.)
Il faut maintenant mettre en place les trois autres contraintes. Pour indiquer que 2 × M1 + M2 ≤
2000, il faut tracer la droite 2 × M1 + M2 = 2000 et supprimer de l’espace de solution tout ce qui se
trouve au dessus. On fait de même pour les deux autres contraintes (droites 4 × M1 + 8 × M2 = 8000 et
10 × M1 + 10 × M2 = 12500). On obtient le schéma de la figure 7.2.
Maintenant que l’on a cerné l’espace des possibilités, il faut trouver le (ou les) point(s) qui nous
donne(nt) la plus grande valeur pour la fonction économique Z = 600 × M1 + 400 × M2 . Pour cela
on va commencer par dessiner la droite avec Z = 0, et on va faire glisser cette droite jusqu’à faire monter
Z au maximum tout en restant dans l’espace de solution. Quand on aura atteint ce maximum, le (ou les)
point(s) commun(s) à la droite et l’espace des solutions sera notre optimum (voir figure 7.3).
Il reste alors à interpréter le résultat. Sur le schéma, lorsqu’on a fait monter Z, l’ultime point commun
entre Z et l’espace des solutions admissibles était pour M1 = 750 et M2 = 500. Donc la solution qui
apporte la plus grande marge possible à notre atelier consiste à construire 750 bibliothèques «petit chêne»
et 500 bibliothèques «grand hêtre». Sa marge sera alors de 750 × 600 + 500 × 400 = 650.000 euros.
Eric L ALLET, Jean-Luc R AFFY
61
F IG . 7.1 – Espace possible pour M1 et M2 positifs
F IG . 7.2 – Espace des «solutions admissibles» après prise en compte des contraintes
7.3 Conclusion
Très simple à utiliser cette méthode atteint vite ses limites pour des problèmes correspondant aux cas
réels. En dehors des cas d’école, il est rare de pouvoir construire une modèle avec seulement deux variables.
Et quand ce n’est pas le cas, il faut alors utiliser d’autres méthodes. Le chapitre suivant présente une des
méthodes les plus utilisées, car très performante : le simplexe.
62
Eric L ALLET, Jean-Luc R AFFY
F IG . 7.3 – Recherche du Z optimum
7.4 Exercices
Voir les exercices 8.1 et 8.2 page 74.
Eric L ALLET, Jean-Luc R AFFY
63
64
Eric L ALLET, Jean-Luc R AFFY
Chapitre 8
Le simplexe
8.1 Introduction
Le méthode du simplexe a été mise au point par Georges Dantzig dans les années 1950. Elle implémente
une heuristique qui permet dans une très grande majorité des cas d’atteindre l’optimum du problème très
rapidement. Son principe consiste à parcourir un chemin sur les frontières du domaine des solutions admissibles, en s’approchant à chaque étape un peu plus de l’optimum. L’heuristique essaye de trouver parmi
tous les chemins un qui soit très court.
8.2 La forme standard et son tableau associé
L’algorithme du simplexe sert à résoudre un problème de programmation linéaire de type maximisation
qui s’exprime sous la forme canonique suivante :
Il faut trouver le maximum d’une fonction économique Z exprimée par :
Z = C1 × X1 + C2 × X2 + ... + Cn × Xn
en respectant les contraintes :


 A1.1 × X1 + A1.2 × X2 + . . . + A1.n × Xn ≤ B1



 A2.1 × X1 + A2.2 × X2 + . . . + A2.n × Xn ≤ B2
..
.



A
× X1 + Am.2 × X2 + . . . + Am.n × Xn ≤ Bm


 m.1
Xj ≥ 0 ∀j
Pour résoudre ce problème, on va commencer par transformer les inégalités en égalités en introduisant
une variable «d’écart» positive ou nulle pour chacune des contraintes. Par exemple avec une nouvelle variable E1 , on peut transformer l’inégalité A1.1 × X1 + A1.2 × X2 + . . . + A1.n × Xn ≤ B1 pour la faire
devenir l’égalité A1.1 × X1 + A1.2 × X2 + . . . + A1.n × Xn + E1 = B1 .
Avec les m variables d’écart, notre problème devient :
Avec Xj ≥ 0 ∀j et Ei ≥ 0 ∀i, trouver le maximum de Z pour :

A1.1 × X1 + A1.2 × X2 + . . . + A1.n × Xn + E1 = B1





 A2.1 × X1 + A2.2 × X2 + . . . + A2.n × Xn + E2 = B2
..
.



A
× X1 + Am.2 × X2 + . . . + Am.n × Xn + Em = Bm


 m.1
C1 × X1 + C2 × X2 + ... + Cn × Xn = Z
Ceci est la forme standard du problème.
Eric L ALLET, Jean-Luc R AFFY
65
Avant de mettre en œuvre l’algorithme du simplexe on transforme ces équations sous la forme d’un
tableau qui aura n + m + 2 colonnes, et m + 2 lignes :
– La première ligne contiendra le nom de nos colonnes.
– Il y aura une ligne pour chacune des équations 1 à m.
– La dernière ligne sert pour la fonction économique.
– La première colonne sert à connaître ce qu’on va appeler les «variables en base». Au début on y
placera la variable d’écart Ei de la ligne. Les variables qui ne seront pas dans cette colonne seront
«hors base».
– Ensuite on place n colonnes, une pour chaque variable Xj .
– Ensuite on place m colonnes, une pour chaque variable Ei .
– Enfin on place une dernière colonne qui contiendra la somme de chaque ligne (Bi ).
– Enfin la valeur «Somme» de la ligne ∆j est initialisée avec 0 (sauf exception expliquée plus loin).
Donc le tableau obtenu est le suivant :
E1
E2
..
.
Em
∆j
X1
A1.1
A2.1
X2
A1.2
A2.2
...
...
...
Xn
A1,n
A2,n
E1
1
0
E2
0
1
...
0
0
Em
0
0
Somme
B1
B2
Am.1
C1
Am.2
C2
...
...
Am,n
Cn
0
0
0
0
0
0
1
0
Bm
0
Avant d’aller plus loin, décryptons le sens de ce tableau. Tout le long de l’algorithme du simplexe ce
tableau va donner des solutions (de plus en plus optimales pour la valeur de Z) du système d’équations
de la forme standard. Dans cette solution toutes les variables hors base ont une valeur nulle. La valeur des
variables en base se lit dans la dernière colonne (la colonne «Somme»). Enfin le ∆j de la colonne «Somme»
donne l’opposé de la valeur de Z. Donc ce premier tableau du simplexe donne la solution de départ qui va
servir à amorcer l’algorithme du simplexe : toutes les variables Xi sont à 0, toutes les variables d’écart Ei
valent le Bi de leur ligne d’équation et la valeur de Z est 01 .
Sur ce tableau la dernière ligne (∆j ) donne les gains (ou les coûts, si la valeur est négative) marginaux
des variables de leur colonne. Autrement dit, elle permet de savoir de combien va augmenter (ou diminuer
si la valeur est négative) la valeur de Z si on augmente de 1 la variable de cette colonne. Par exemple,
si on arrive à trouver une solution admissible qui augmente de 1 la valeur de X2 , alors la valeur de Z va
augmenter de C2 .
Revenons à l’exemple de l’atelier d’ébénisterie de la section 6.3, et construisons son tableau pour le
simplexe :
Z = 600 × M1 + 400 × M2 (unité : euro)

2 × M1 + M2 ≤ 2000



4 × M1 + 8 × M2 ≤ 8000
avec
10 × M1 + 10 × M2 ≤ 12500



M1 ≥ 0 et M2 ≥ 0
Mis sous la forme standard, avec l’ajout de 3 variables d’écarts E1 , E2 et E3 telles que :
– E1 désigne le nombre de stères de chêne qui restent sans usage pour la solution courante.
– E2 désigne le nombre de stères de hêtre qui restent sans usage pour la solution courante.
– E3 désigne le nombre d’heures de travail qui restent sans usage pour la solution courante.
1 Certains
problèmes donnent un modèle où cette solution de départ n’est pas admissible car certains Bi sont négatifs. Il faut alors
trouver un autre point de départ. Nous verrons dans le chapitre 10 page 81 comment le trouver. D’autre part, dans certains cas, la
valeur de Z de la solution initiale n’est pas nulle, il faut alors mettre l’opposé de cette valeur dans le ∆j de la colonne «Somme».
66
Eric L ALLET, Jean-Luc R AFFY
2 × M1
4 × M1
10 × M1
600 × M1
+
M2
+ 8 × M2
+ 10 × M2
+ 400 × M2
+
E1
+
E2
+ E3
= 2000
= 8000
= 12500
=
Z
Ce qui donne le tableau :
E1
E2
E3
∆j
M1
2
4
10
600
M2
1
8
10
400
E1
1
0
0
0
E2
0
1
0
0
E3
0
0
1
0
Somme
2000
8000
12500
0
8.3 L’algorithme du simplexe
Pour décrire cet algorithme, on va noter le tableau du simplexe sous la forme suivante2 :
y1
..
.
yi
..
.
ym
∆
x1
a1,1
x2
a1,2
...
...
xj
a1,j
...
...
xp
a1,p
Somme
SM1
ai,1
ai,2
...
ai,j
...
ai,p
SMi
am,1
∆1
am,2
∆2
...
...
am,j
∆j
...
...
am,p
∆p
SMm
Res
Dans ce tableau la colonne des variables yi est appelé la base. Au cours de l’algorithme certaines variables xi vont pivoter et vont venir se mettre en base. Au tout début de l’algorithme les variables de base
sont les m variables d’écart.
L’algorithme du simplexe est un algorithme itératif qui à chaque tour va trouver une nouvelle solution
qui augmente la valeur de Z jusqu’à ce qu’on ne puisse plus l’améliorer. Chaque tour de cet algorithme se
passe en deux grandes étapes.
– La recherche du pivot (grâce à une heuristique qui permet généralement de converger rapidement vers
la solution)
– La mise en base de la variable du pivot, et le calcul du nouveau tableau
Algorithme 8.1 (Algorithme du simplexe)
1. La recherche du pivot :
a) Premier critère de Dantzig :
On a vu que la dernière ligne donnait le gain marginal des variables. Comme le but est d’augmenter
la valeur de Z et d’arriver le plus vite possible à la solution optimale, on va choisir la variable qui
a le plus grand gain.
Ainsi le pivot se trouve sur la colonne j qui a le ∆j strictement positif le plus grand.
b) Second critère de Dantzig : Le premier critère nous a indiqué la variable qui allait passer en base.
Le second critère sert à indiquer la variable qui va sortir de la base (et donc passer à 0) pour
augmenter le plus possible la variable choisie tout en gardant une solution admissible pour le
système d’équations.
Le pivot se trouve sur la ligne i qui un ai,j strictement positif et le rapport SMi /ai,j le plus petit.
2 Dans
ce tableau il y a p=n+m variables x : les n variables de la fonction économique, plus les m variables d’écart
Eric L ALLET, Jean-Luc R AFFY
67
2. Le pivotement : soit ai,j le pivot trouvé à l’étape 1.
a) Mise en base de xj
Lors du pivotement, la variables yi de la base est remplacée par xj .
b) Modification de la ligne du pivot :
On divise la ligne par le pivot.
Pour l allant de 1 à p faire :
a′i,l ←
ai,l
ai,j
Notez que le pivot passe donc à 1.
c) Modification des autres lignes
On soustrait à toutes les lignes k, avec k 6= i la ligne du pivot proportionnellement à ak,j /ai,j :
SMk′ ← SMk −
(SMi × ak,j )
ai,j
Res′ ← Res −
(SMi × ∆j )
ai,j
Pour l allant de 1 à p faire :
a′k,l ← ak,l −
∆′l ← ∆l −
(ai,l × ak,j )
ai,j
(ai,l × ∆j )
ai,j
Notez que sur la colonne du pivot, mis à part le pivot lui même, toutes les valeurs sont passées à
0.
3. La boucle
Si après le nouveau calcul il existe encore un ∆j strictement positif, on peut encore augmenter Z :
retournez à l’étape 1.
Pour simplifier la description de l’étape «2c» de l’algorithme, il y une formule qui fonctionne pour
toutes les valeurs qui ne sont pas sur la ligne du pivot (même sur la colonne «Somme» ou sur la ligne
«∆j ») :
On recherche v ′ , la nouvelle valeur de v. Soit p le pivot, x et y les valeurs qui sont à l’intersection des
lignes et colonnes de v et du pivot, alors : v ′ = v − x × y/p
p
..
.
...
x
..
.
y
...
v ′ = v − x × y/p
8.4 Interprétation du tableau final
À la fin de l’algorithme, le tableau du simplexe continue à se lire de la même manière. Ainsi les solutions
du problème d’origine se lisent directement dans ce tableau.
Les valeurs des variables Xj passées en base à la place de Ei se lisent dans la colonne «Somme» : SMi .
Les variables Xj qui ne sont pas passées en base sont nulles.
La valeur optimale de Z est l’opposé de la valeur de «Res».
Les valeurs des variables d’écart qui ont quitté la base sont nulles.
Les variables d’écart Ei qui sont toujours en base indiquent qu’une contrainte n’a pas atteint son maximum. La valeur de cette variable d’écart se lit dans la colonne «Somme» : SMi .
68
Eric L ALLET, Jean-Luc R AFFY
Si à la fin de l’algorithme il y a des variables hors base avec un ∆j nul, alors il existe d’autres solutions
optimales (une infinité en fait). Vous pouvez faire un pivotement de plus en choisissant la colonne d’une de
ces variables pour trouver la solution optimale qui privilégie cette valeur.
Si alors qu’il reste des ∆j strictement positifs, il n’est plus possible de trouver un pivot strictement
positif sur leur colonne, alors la fonction économique n’est pas bornée. Il existe des solutions qui permettent
de monter sa valeur à l’infini . Mais dans le cadre de modèles de gestion, il est peu probable que vous
puissiez dégager des bénéfices infinis. Ce diagnostic cache dont très certainement un problème dans votre
modélisation (probablement des contraintes oubliées).
8.5 Exemple
Reprenons l’exemple de l’ébénisterie. On avait déjà construit le
tableau du simplexe suivant. Il correspond à une première solution
(non optimale pour Z) du système d’équations : M1 = 0 et M2 = 0.
E1
E2
E3
∆j
M1
2
4
10
600
M2
1
8
10
400
E1
1
0
0
0
E2
0
1
0
0
E3
0
0
1
0
Somme
2000
8000
12500
0
Il y a des ∆j strictement positifs : on peut trouver une meilleure
solution. Faisons la première itération :
1. a) Le premier critère de Dantzig (le plus grand ∆j ) permet de sélectionner la colonne de M1 pour le
pivot.
b) Le second critère de Dantzig (le plus petit SMi /ai, j) permet de sélectionner la ligne de E1 pour
le pivot.
M1
M2
E1
E2
E3
Somme
E1
2
1
1
0
0
2000
E2
E3
∆j
4
10
600
8
10
400
0
0
0
1
0
0
0
1
0
8000
12500
0
2. a) La variable M1 passe en base à la place de E1 .
b) La ligne du pivot est divisée par 2.
c) on retire à la ligne de E2 4/2 = 2 fois la ligne du pivot.
on retire à la ligne de e3 10/2 = 5 fois la ligne du pivot.
on retire à la ligne des ∆j 600/2 = 300 fois la ligne du pivot.
On obtient un nouveau tableau du simplexe. Son interprétation
correspond à la solution M1 = 1000 et M2 = 0.
M1
E2
E3
∆j
M1
1
0
0
0
M2
1/2
6
5
100
E1
1/2
-2
-5
-300
E2
0
1
0
0
Eric L ALLET, Jean-Luc R AFFY
E3
0
0
1
0
Somme
1000
4000
2500
-600000
69
3. Il reste un ∆j strictement positif. On peut encore améliorer la valeur de Z. Donc on fait une autre
itération.
Seconde itération :
1. a) Le premier critère de Dantzig permet de sélectionner la colonne de M2 pour le pivot.
b) Le second critère de Dantzig permet de sélectionner la ligne de E3 pour le pivot.
2.
M1
E2
M1
1
0
M2
1/2
6
E1
1/2
-2
E2
0
1
E3
0
0
Somme
1000
4000
E3
0
5
-5
0
1
2500
∆j
0
100
-300
0
0
-600000
(a) La variable M2 passe en base à la place de E3
(b) La ligne du pivot est divisée par 5
(c) On retire à la ligne de M1 (1/2)/5 = 1/10 fois la ligne du pivot.
On retire à la ligne de E2 (6/5) fois la ligne du pivot.
On retire à la ligne des ∆j 100/5 = 20 fois la ligne du pivot.
On obtient un nouveau tableau du simplexe. Son interprétation
correspond à la solution M1 = 750 et M2 = 500.
M1
E2
M2
∆j
M1
1
0
0
0
M2
0
0
1
0
E1
1
4
-1
-200
E2
0
1
0
0
E3
-1/10
6/5
1/5
-20
Somme
750
1000
500
-650000
3. Il ne reste plus aucun ∆j strictement positif. La solution est optimale. L’algorithme s’arrête ici.
Il nous reste à interpréter le tableau final.
– La somme au bout de la ligne de M1 est 750 : il faut construire 750 bibliothèques M1 («petit chêne»).
– La somme au bout de la ligne de M2 est 500 : il faut construire 500 bibliothèques M2 («grand hêtre»).
– La valeur de Res est -650000 : le Z optimal est de 650000, qui sera (en euros) la marge dégagée par
la vente des bibliothèques construites.
– La variable d’écart E2 est toujours en base. La valeur dans sa colonne somme est 1000. Donc pour la
solution optimale E2 = 1000. E2 est la variable d’écart qui donne le nombre de stères de hêtre non
utilisés. Donc la solution optimale du problème laisse 1000 stères de hêtre sans usage.
Trois nombres restent à interpréter. Les valeurs des ∆j pour les colonnes des variables d’écart. Ce sont
les «coûts marginaux». Elles indiquent combien on pourrait dégager de marge en plus si on augmentait nos
stocks de chêne, de hêtre et d’heures de travail (ou au contraire à quel prix minimum il faudrait vendre ce
stock pour qu’il rapporte au moins autant que la production faite avec).
– La valeur marginale pour E1 est -200. Et E1 est la variable d’écart qui désigne les stères de chêne
non-utilisés. Cela signifie qu’augmenter de 1 E1 , c’est à dire de laisser sans usage 1 stère de chêne,
coûterait 200 Euros. Et au contraire, disposer de 1 stère de chêne de plus permettrait de gagner 200
euros supplémentaires. Donc si le stère de chêne coûte moins de 200 euros, il sera intéressant d’en
acheter pour produire plus, et s’il coûte plus de 200 euros, il vaudra mieux vendre notre stock plutôt
que de produire avec.
– La valeur marginale pour E2 est 0. Cela signifie qu’acheter du hêtre en plus ne rapporterait rien. Ce
qui est logique puisqu’on vient de voir que l’on n’avait déjà pas épuisé notre propre stock. Et donc
on peut vendre ce sur-stock à n’importe quel prix sans perdre d’argent.
70
Eric L ALLET, Jean-Luc R AFFY
– La valeur marginale pour E3 est -20. E3 est la variable qui sert à désigner le nombre d’heures de
travail non utilisées. Ainsi augmenter le nombre d’heures de travail de 1, permet de gagner 20 euros
de plus. Donc l’entreprise n’a intérêt à augmenter le nombre d’heures de travail que si cela ne lui
coûte pas plus de 20 euros de l’heure.
8.6 Plus loin au sujet des valeurs marginales
Attention l’interprétation des coûts marginaux n’est valable qu’à la marge. Dans ce type de problème
on parcourt des paliers avec des effets de seuil. Dès qu’on franchit un seuil les coûts marginaux changent.
Dans l’exemple de la section précédente, il reste 1000 stères de hêtre sans usage. Donc les coûts marginaux associés à cette variable sont nuls : on peut vendre ce bois à n’importe quel prix, cela augmentera
les gains. Mais cette remarque n’est vrai que pour le stock inutilisé. Au delà des 1000 stères, continuer à
vendre du hêtre diminuerait la production de meuble, et donc les gains. C’est le seuil à partir duquel le coût
marginal pour les bois de hêtre va changer.
Pour le cas des stocks inutilisés le seuil est assez simple à trouver (c’est la grandeur du stock), mais
pour les autres variables il faut procéder différemment.
Examinons un autre cas : le coût marginal associé au bois de chêne est de 200 euros le stère. Autrement
dit si on arrive à vendre ce bois plus cher que 200 euros le stère on a intérêt à le vendre plutôt que de produire
avec. Par contre si on arrive à trouver du chêne à moins de 200 euros le stère, on a intérêt à l’acheter et à
produire avec pour augmenter les gains. Imaginons que l’ébénisterie trouve un marché où elle peut acheter
du chêne à 150 euros le stère. Elle devrait l’acheter. Chaque stère obtenu ainsi va lui permettre d’augmenter
ses gains de 50 euros. Mais ce gain ne peut monter que jusqu’à un certain seuil : la production est limitée
par le stock de hêtre et le nombre d’heure de travail dont dispose l’ébénisterie. Au delà de ce seuil, elle
ne pourra plus produire de meubles avec le chêne acheté, et elle dépensera donc 200 euros pas stère sans
pouvoir rien en faire.
Quel est ce seuil ? On retombe sur un nouveau problème de programmation linéaire. Si l’ébénisterie
accepte d’acheter du chêne tant que c’est rentable, on retrouve le même problème que précédemment avec
une contrainte de moins : celle concernant le stock de chêne. Sa modélisation est donc identique à avant,
excepté l’inégalité concernant cette contrainte qui disparaît :
Z = 600 × M1 + 400 × M2
 hhh
(
(
(
(
h
h
h

2×
M
+(
M(
≤h
2000
la contrainte sur le chêne n’existe plus
1(
2h
(

(
h
h
(
4 × M1 + 8 × M2 ≤ 8000
contrainte sur le hêtre
avec

10 × M1 + 10 × M2 ≤ 12500
contrainte sur les heures de travail


M1 ≥ 0 et M2 ≥ 0
On obtient ainsi le même tableau du simplexe que précédemment mais avec la variable E1 (celle concernant le chêne) en moins :
E2
E3
∆j
M1
4
10
600
M2
8
10
400
E2
1
0
0
E3
0
1
0
M2
4
1
-200
E2
1
0
0
E3
-2/5
1/10
-60
Somme
8000
12500
0
Ce simplexe se résout en une seule itération :
E2
M1
∆j
M1
0
1
0
Somme
3000
1250
750000
Grâce à l’achat de stères supplémentaires, une nouvelle solution optimale se dessine :
– M1 vaut 1250. Il faut produire 1250 bibliothèques «petit chêne».
– M2 n’est pas en base, donc M2 vaut 0. Il ne faut plus produire de bibliothèques «petit hêtre»
Eric L ALLET, Jean-Luc R AFFY
71
– E2 vaut 3000. Il reste donc 3000 stères de hêtre inutilisé.
Chaque bibliothèque «petit chêne» consomme 2 stères de chênes. Il a donc fallu un total de 1250 × 2 =
2 500 stères de chêne pour la production. Comme le stock initial était de 2 000, il a fallu acheter 500 stères
supplémentaires. Le coût de cet achat est : 150 × 500 = 75 000 euros.
Et attention le nouveau gain pour l’ébénisterie est donc de 675 000 euros. En effet, même si le gain qui
apparaît dans le dernier tableau du simplexe est 750 000 euros, il faut penser à lui soustraire le prix des
stères de chêne qu’il fallut acheter pour obtenir la nouvelle solution : 750 000 − 75 000 = 675 000.
Il existe un autre moyen de calculer ce nouveau gain : dans le problème précédent le gain était de
650 000 euros. On a vu qu’en achetant le chêne à 150 euros le stère, on augmentait le gain de 50 euros par
stères. Donc les 500 stères ont augmenté le gain de 500 × 50 = 25 000. Et 650 000 + 25 000 redonne bien
la même valeur : 675 000.
8.7 Unités et simplifications
8.7.1 Les unités des variables
Un risque important d’erreurs dans l’interprétation du tableau du simplexe est de se tromper dans les
unités. En effet entre les données originales du problème, leur interprétation, la mise en équation, les simplifications, la construction du tableau et les pivotements il y a de nombreuses occasions d’erreurs. Dans le
tableau du simplexe les nombres qui ont besoin d’être interprétés sont dans la dernière ligne et la dernière
colonne. Leurs unités sont directement liées aux variables dans la première ligne et la première colonne. Il
faudra donc veiller à toujours bien indiquer le nom de ces variables lors de la création du tableau et lors des
divers pivotements.
L’unité d’un nombre sur la dernières colonne est celle de la variable en première colonne. Attention,
celle-ci peut changer lors d’un pivotement.
L’unité d’un nombre sur la dernière ligne est celle de Z divisée par celle de la variable en première
ligne.
Y1
..
.
Ym
∆j
X1
...
Xp
Unité de Z/Unité de X1
...
Unité de Z/Unité de Xp
Somme
Unité de Y1
..
.
Unité de Ym
Unité de Z
Dans un problème classique les unités des variables du problème et l’unité de Z sont généralement bien
identifiées. Par contre il y a souvent plus d’incertitudes sur les unités des variables d’écart. Tant qu’on ne
cherchera qu’à connaître la valeur de Z et des variables du problèmes il sera possible de laisser ce flou sur
les variables d’écart, mais si on doit interpréter les valeurs marginales liées à ces variables, il faudra être
très rigoureux.
Un des risques majeurs de se tromper dans leur unités apparaît lors de la simplification des inégalités du
problème. Reprenons l’exemple traité précédemment, mais cette fois ci en simplifiant les nombres lorsque
cela est possible.
8.7.2 Simplification de la fonction économique
Toutes les simplifications faites sur la fonction économique apportent un changement d’unité de Z.
Pour illustrer cela, reprenons l’exemple de la modélisation de la page 58. On avait décrit Z avec la
fonction : Z = 600 × M1 + 400 × M2 .
M1 et M2 étaient le nombre de modèles de chaque étagère. Chaque modèle M1 rapporte 600 euros,
et chaque modèle M2 , 400 euros. Donc ici l’unité de Z est l’euro. Mais on peut décider de simplifier les
nombres, et dire que chaque modèle M1 rapporte 6 «hecto euros3 » et chaque modèle M2 4 «hecto euros».
Alors on obtient une fonction Z ′ = 6 × M1 + 4 × M2 exprimée en «hecto euros».
31
72
hecto euro = 100 euro
Eric L ALLET, Jean-Luc R AFFY
8.7.3 Simplification des inégalités
Les simplifications faites sur les inégalités obtenues grâce aux diverses contraintes laissent inchangées
les unités des variables du modèle, mais changent les unités des variables d’écarts.
Reprenons encore le problème de la page 58 pour illustrer ce type de simplification. Le modèle avait 3
contraintes, et donc trois inégalités.
– La première concernait la consommation des stères de chêne à disposition. Chaque modèle M1
consomme 2 stères de chêne et chaque modèle M2 consomme 1 stère de chêne. Comme on ne dispose que de 2000 stères de chêne on a : 2 × M1 + M2 ≤ 2000. L’unité des variables du modèle
M1 et M2 est «le nombre de modèle». Mais les coefficients placés devant (2 pour M1 et 1 pour M2 )
sont en «stère de chêne par modèle». Donc l’unité des membres de cette inégalité est le «stère de
chêne». Lors du passage à la forme standard, la variable d’écart ajoutée (E1′ ) sera homogène avec les
autres membres de cette inégalité, et sera donc exprimée en «stère de chêne». Il n’y aucun intérêt à
simplifier cette inégalité qui va donc rester inchangée.
– Le seconde contrainte concernait la consommation de stères de hêtre. Chaque modèle M1 consomme
4 stères de hêtre et chaque modèle M2 consomme 8 stères de hêtre. Comme on ne dispose que de
8000 stères de hêtre on a : 4 × M1 + 8 × M2 ≤ 8000. L’unité des variables du modèle M1 et M2 reste
toujours «le nombre de modèle», mais les coefficients placés devant (4 pour M1 et 8 pour M2 ) sont
en «stère de hêtre par modèle». Donc l’unité des membres de cette inégalité est le «stère de hêtre».
Il est intéressant de simplifier cette inégalité par 4. On obtient : M1 + 2 × M2 ≤ 2000. Mais si on
devait maintenant interpréter cette inégalité, il faudrait changer d’unités. Il faudrait parler le «4 stères
de hêtre». Chaque modèle M1 consomme 1 «4 stères de hêtre», chaque modèle M2 consomme 2 «4
stères de hêtre», et on dispose de 2000 «4 stères de hêtres». Donc l’unité des membres de l’inégalité
simplifiée est «4 stères de hêtre». La variable d’écart qui sera ajoutée lors du passage à la forme
standard (E2′ ) devra être homogène avec les autres membres, et aura donc pour unité «4 stères de
hêtre».
– Enfin, la troisième contrainte concernait la consommation d’heures de travail. Chaque modèle M1
et M2 nécessite 10 heures de travail. Comme on ne dispose que de 12500 heures de travail on a :
10 × M1 + 10 × M2 ≤ 12500. Les unités de M1 et M2 reste «le nombre de modèle», mais les
coefficients placés devant (10 pour M1 et M2 ) sont en «heure de travail par modèle». Donc l’unité
des membres de cette inégalité est «l’heure de travail». Il est intéressant de simplifier cette inégalité
par 10. On obtient : M1 + M2 ≤ 1250. Les coefficients devant M1 et M2 ont (en apparence) disparu.
Et une lecture rapide pourrait interpréter cette inégalité en «nombre de modèle». Mais en fait devant
les variable M1 et M2 se cache un «1×» qui dit 1× «10 heures de travail» par modèle. Donc la
véritable unité des membres de cette inégalité est «10 heures de travail». La variable d’écart qui sera
ajoutée lors du passage à la forme standard (E3′ ) devra être homogène avec les autres membres, et
aura donc pour unité «10 heures de travail».
En résumé on obtient, trouver le maximum de Z ′ avec :

2 × M1 + M2 ≤ 2000 unité des membres : stère de chêne




 M1 + 2 × M2 ≤ 2000 unité des membres : 4 stères de hêtre
M1 + M2 ≤ 1250 unité des membres : 10 heures de travail
avec


 Z ′ = 6 × M1 + 4 × M2 unité des membres : 100 euros


M1 ≥ 0 et M2 ≥ 0
8.7.4 Calculs et interprétations
Il faut ensuite tenir compte de ces changements d’unités lors des calculs et des interprétations.
Durant la phase de calcul il n’y en fait aucun changement, sauf bien sûr des nombres plus simples à
manipuler. Continuons le traitement de l’exemple après la simplification :
Lorsque l’on passe à la forme standard il faut ajouter 3 variables d’écart au problème. Ces 3 variables
vont récupérer l’unité de leur équation. On va donc avoir :
– E1′ : le nombre de stères de chêne non utilisés.
– E2′ : le nombre de «4 stères de hêtre» non utilisés.
– E3′ : le nombre de «10 heures de travail» non utilisés.
Ainsi l’unité de E1′ est «1 stère de chêne», celle de E2′ est «4 stères de hêtre» et celle de E3′ est «10
Eric L ALLET, Jean-Luc R AFFY
73
heures de travail».
Mis sous la forme du simplexe, on obtient :
E1′
E2′
E3′
∆j
M1
2
1
1
6
M2
1
2
1
4
E1′
1
0
0
0
E2′
0
1
0
0
E3′
0
0
1
0
M2
1/2
3/2
1/2
1
E1′
1/2
-1/2
-1/2
-3
E2′
0
1
0
0
E3′
0
0
1
0
Somme
1000
1000
250
-6000
M2
0
0
1
0
E1′
1
1
-1
-2
E2′
0
1
0
0
E3′
-1
-3
2
-2
Somme
750
250
500
-6500
Somme
2000
2000
1250
0
Après le premier pivotement on a :
M1
E2′
E3′
∆j
M1
1
0
0
0
Après le second pivotement on a :
M1
E2′
M2
∆j
M1
1
0
0
0
Le simplexe s’arrête ici. Il faut maintenant faire l’interprétation des résultats.
L’interprétation des variables M1 et M2 ne posent aucun problème. Leur unité n’a pas changé. Il faut
donc construire 750 modèles 1 et 500 modèles 2.
L’interprétation de Z ′ demande plus de vigilance : son unité est «100 euros». Donc la marge dégagée
sera de 6500 «100 euros», autrement dit 650000 euros.
La valeur de E2′ est de 250. Mais attention, son unité est «4 stères de hêtre». Donc à la fin, il reste 250
«4 stères de hêtre» sans usage, autrement dit 1000 stères de hêtre sans usage.
La valeur marginale dans la colonne de E3′ est −2. Son unité est celle de Z ′ divisée par celle de E3′ , donc
«100 euros»/«10 heures de travail». Donc le coût marginale de l’heure de travail est de 2 «100 euros»/«10
heures de travail», autrement dit 20 euros par heure de travail.
Ainsi, une fois interprétés avec leurs bonnes unités les nombres donnés par le tableau du simplexe des
équations simplifiées donnent heureusement la même solution que précédemment.
8.8 Exercices
Exercice 8.1 (Une histoire de fromage)
Une laiterie s’est spécialisée dans deux fromages. Le premier est un AOC qui exige plus d’heures de
travail et un lait en provenance d’une région bien précise. Le second demande moins de travail, et peut être
fabriqué avec n’importe quel lait. Par contre sa vente dégage une marge moindre.
La laiterie dispose de 21 000 heures de travail annuel, elle reçoit 4 millions de litres de lait de la zone
AOC, et 6 millions de litres d’autres zones.
74
Eric L ALLET, Jean-Luc R AFFY
Le tableau suivant indique les ressources nécessaires pour produire 1 tonne de fromage.
Fromage
Fromage 1 (AOC)
Fromage 2
heures de travail
par tonne de fromage
30 h
15 h
litres de lait
par tonne de fromage
10 000 l
7 500 l
Sachant qu’un kilo du fromage AOC dégage une marge de 3 euros et qu’un kilo de l’autre fromage
seulement 1 euro, quelle production doit fabriquer cette laiterie pour optimiser ses bénéfices ?
Correction page 132.
Exercice 8.2 (Une histoire de fromage (bis))
Même question, mais cette fois ci, avec une marge de 2 euros par kilo pour le fromage AOC et toujours
d’un seul euro pour le second fromage.
Correction page 134.
Exercice 8.3 (Problème électrique)
Un revendeur d’électricité a promis à sa clientèle qu’au moins 25% de son électricité serait d’origine
renouvelable. Il a calculé que pour l’année qui arrive il aura un marché de 18 TWh (térawattheure). Il a
aussi pré-sélectionné trois fournisseurs à qui il va acheter son électricité en gros. Voici les quantités (en
TWh), le taux d’électricité renouvelable et la marge dégagée (en k euro/TWh) que peuvent lui fournir ces
trois producteurs.
Producteur 1
Producteur 2
Producteur 3
% d’électricité
renouvelable
10 %
46 %
100 %
Quantité d’électricité
achetable (TWh)
25
6
4
Marge
(k Euro/TWh)
900
700
500
Chez quels producteurs et en quelle quantité ce revendeur doit-il acheter son électricité pour avoir le
meilleurs bénéfice possible ?
Correction page 135.
Exercice 8.4 (Problème électrique (bis))
Même problème mais avec ces nouvelles marges :
Producteur 1
Producteur 2
Producteur 3
% d’électricité
renouvelable
10 %
46 %
100 %
Quantité d’électricité
achetable (TWh)
25
6
4
Marge
(k euros/TWh)
850
710
500
Pour des raisons politiques le revendeur aimerait privilégier le second producteur. Est-il possible d’acheter une partie de l’électricité chez lui sans faire baisser les profits ?
Correction page 137.
Eric L ALLET, Jean-Luc R AFFY
75
76
Eric L ALLET, Jean-Luc R AFFY
Chapitre 9
Le problème dual
9.1 Introduction
En programmation linéaire à tout problème où il faut trouver le maximum d’une fonction économique
encadrée par des contraintes de type «inférieur ou égal», il existe un problème associé où il faut trouver le
minimum d’une fonction économique encadrée par des contraintes de type «supérieur ou égal» (et réciproquement). Chaque problème est le «dual» de l’autre.
Ces deux problèmes sont liés par de nombreuses propriétés. Par exemple la valeur maximale de la
fonction économique de l’un est exactement la valeur minimale de la fonction économique de l’autre. En
fait résoudre un des deux problèmes permet de connaître la solution de l’autre.
Voila pourquoi dans certains cas, plutôt que de résoudre le problème, on va chercher à résoudre son
dual. Cela peut être par exemple, un moyen de réduire le nombre de variables pour utiliser la méthode
géométrique.
Dans les sections suivantes nous allons utiliser cette métode pour transformer un problème de type
«minimisation» en problème de type «maximisation» afin de pouvoir utiliser le simplexe pour le résoudre.
9.2 Création du problème dual
Si problème primal avec ses «m» contraintes et sa fonction économique Z dont on cherche le maximum
s’exprime ainsi :
n variables
m contraintes :
z
(1)
A1.1
A2.1







Z=
Am.1
C1
×X1 +
×X1 +
..
.
×X1 +
×X1 +
(2)
A1.2
A2.2
Am.2
C2
}|
{
×X2 + . . . +
×X2 + . . . +
(n)
A1.n
A2.n.
×Xn
×Xn
≤
≤
(Z ′ )
B1
B2
×X2 + . . . +
×X2 + . . . +
Am.n
Cn
×Xn
×Xn
≤
Bm
Xi ≥ 0 ∀i
alors son problème dual avec ses «n» contraintes et sa fonction économique Z’ dont on cherche le
minimum s’exprimera ainsi :
Eric L ALLET, Jean-Luc R AFFY
77
m variables
n contraintes :















z
}|
{
A1.1 × Y1
+A2.1 × Y2
+ . . . +Am.1 × Ym
≥ C1
(2)
A1.2 × Y1
..
.
+A2.2 × Y2
+ . . . +Am.2 × Xm
≥ C2
(n)
A1.n × Y1
+A2.n × Y2
+ . . . +Am.b × Ym
≥ Cn
+B2 × Y2
+ . . . +Bm × Ym
(1)
Z ′ = B1 × Y1
Yi ≥ 0 ∀i
Quelques remarques :
– Le dual d’un problème de maximisation est un problème de minimisation (et réciproquement).
– Le dual du dual est identique au primal
– Il y a autant de variables dans le dual que de contraintes dans le primal.
– Il y a autant de contraintes dans le dual que de variables dans le primal.
– Le sens des inégalités dans le dual est l’inverse de celui du primal.
– Les seconds membres des inégalités du primal deviennent les coefficients de la fonction économique
Z’ du dual.
– Les coefficient de la fonction économique du primal deviennent les seconds membres des inégalités
du dual.
– Les lignes de coefficients des contraintes du primal deviennent les colonnes des contraintes du dual
(et réciproquement).
– Les variables du primal et celles du dual doivent êtres positives ou nulles.
Les deux problèmes ont aussi d’autres liaisons très intéressantes qui vont pouvoir être exploitées pour
résoudre certains problèmes :
– La valeur optimale Z de la fonction économique du primal est identique à la valeur optimale Z’ de la
fonction économique du dual.
– Lorsque le problème primal est résolu, l’opposé des valeurs marginales des «m» variables d’écart des
équations du problème primal sont les valeurs des «m» variables de la solution du problème dual (et
réciproquement).
Imaginons que l’on doive résoudre un problème où il faut minimiser une fonction économique avec sur
les variables (positives ou nulles) des contraintes «supérieures ou égales». En passant au problème dual on
tombe sur un problème que le simplexe sait résoudre. Grâce à la solution du simplexe on connaît la valeur
marginale des variables d’écart du problème dual, et donc on connaît la valeur des variables du problème
primal.
9.3 Exemple de résolution par le problème dual
Le directeur de l’atelier d’ébénisterie s’est rendu compte que sa production optimale n’utilisait que 7000
des 8000 stères de hêtre qu’on lui livrait chaque année. Il décide donc de renégocier son approvisionnement.
Après un appel d’offre, il se retrouve avec la possibilité d’acheter son bois par lots. Il peut acheter deux types
de lots. Le lot 1 est composé de 140 stères de hêtre et 20 stères de chêne. Le lot 2 est composé de 70 stères
de hêtre et 30 stères de chêne. Les deux types de lots sont vendus à 10k euros l’unité.
Sachant la production de cet atelier utilise 7000 stères de hêtre et 2000 stères de chêne, combien faut-il
acheter de chaque lots pour obtenir un coût d’achat minimal ?
La première étape est la modélisation du problème. Si on nomme L1 la variable pour le nombre de lots
1 et L2 celle pour les lots 2, la fonction économique à minimiser est Z = 10 × L1 + 10 × L2 (avec Z
exprimé en «k euros»).
78
Eric L ALLET, Jean-Luc R AFFY
Les contraintes de production imposent un minimum d’achats. On les modélise par :
140 × L1 + 70 × L2 ≥ 7000 (au moins 7000 stères de hêtre)
20 × L1 + 30 × L2 ≥ 2000 (au moins 2000 stères de chêne)
Une fois les équations simplifiées, on obtient donc le problème suivant :
Minimiser la fonction Z avec :












Z=



(Z ′ )
(1)
(2)
2 ×L1
2 ×L1
10 ×L1
L1 ≥ 0 et
+1
+3
+10
L2
×L2
×L2
×L2
≥0
≥
≥
100
200
En passant sur le problème dual, on tombe sur un problème que le simplexe sait résoudre. Le problème
dual s’exprime ainsi :
Maximiser la fonction Z ′ avec

(1)



(2)



2 ×X1
1 ×X1
Z ′ = 100 ×X1
X1 ≥ 0 et X2 ≥ 0
+2 ×X2
+3 ×X2
+200 ×X2
≤
≤
10
10
On obtient le tableau du simplexe suivant :
E1
E2
∆j
X1
2
1
100
X2
2
3
200
E1
1
0
0
E2
0
1
0
Somme
10
10
0
Selon les critères de Dantzig la colonne du pivot est celle de X2 , et sa ligne celle E2 .
– On passe donc X2 en base à la place de E2 .
– On divises la ligne du pivot par 3.
– On retire 2/3 de la ligne du pivot à celle de E1 .
– On retire 200/3 de la ligne du pivot à celle des ∆j
On obtient ce nouveau tableau :
E1
X2
∆j
X1
4/3
1/3
100/3
X2
0
1
0
E1
1
0
0
E2
-2/3
1/3
-200/3
Somme
10/3
10/3
-2000/3
Cette fois ci le pivot est sur la colonne de X1 et la ligne de L1 .
– E1 passe en base à la place de E1 .
– La ligne du pivot est divisée par 4/3 (donc multipliée par 3/4)
– On retire ((1/3)/(4/3)) = 1/4 de la ligne du pivot à celle de X2 .
– On retire ((100/3)/(4/3)) = 25 fois la ligne du pivot à celle des ∆j
On obtient ce nouveau tableau :
X1
X2
∆j
X1
1
0
0
X2
0
1
0
E1
3/4
-1/4
-25
E2
-1/2
1/2
-50
Somme
5/2
5/2
-750
Il ne reste plus de ∆j strictement positif. L’algorithme du simplexe s’arrête ici.
Les valeurs marginales (les ∆j ) des colonne de E1 et E2 sont les solutions de notre problème de départ.
Il suffit de prendre l’opposé de leur valeur.
L’atelier doit donc acheter 25 lot 1, et 50 lot 2. Ce qui lui coûtera 750k Euros.
Eric L ALLET, Jean-Luc R AFFY
79
9.4 Exercices
Exercice 9.1 (Achat d’électricité)
Un revendeur d’électricité a promis à sa clientèle qu’au moins 25% de son électricité serait d’origine
renouvelable. Il a calculé que pour l’année qui arrive il aura un marché de 18 TWh (térawattheure). Après un
appel d’offre auprès de ses fournisseurs, il a reçu trois propositions pour répondre à ses besoin en électricité.
Voici les quantités (en TWh), le taux d’électricité renouvelable et le prix (en millions d’euros/TWh) que
peuvent lui fournir ces trois producteurs.
Producteur 1
Producteur 2
Producteur 3
% d’électricité
renouvelable
10 %
45 %
100 %
Quantité d’électricité
achetable (TWh)
pas de limite
6
4
Prix
(M Euro/TWh)
65
73
83
Chez quels producteurs et en quelle quantité ce revendeur doit-il acheter son électricité pour l’avoir à
moindre prix ?
Correction page 138.
80
Eric L ALLET, Jean-Luc R AFFY
Chapitre 10
Simplexe : le cas général
10.1 Introduction
On a vu que l’algorithme du simplexe était un algorithme itératif qui allait de solution admissible en
solution admissible jusqu’à trouver une optimale. Mais pour que cet algorithme fonctionne il faut que
la solution initiale (celle du premier tableau de l’algorithme) soit effectivement une solution admissible.
Jusqu’à présent on est toujours parti de la solution «Xi = 0 ∀i». Mais il y a des cas où cette solution n’est
pas dans le domaine admissible. Dans cette situation il faut changer le point de départ de l’algorithme du
simplexe.
Cette situation se produit si la formalisation du problème contient un mélange d’inégalités de type «≤»
et de type «≥». Ou plus exactement, si la forme canonique du problème de maximalisation (la forme avec
que des inégalités de type «≤») contient des seconds membres (les Bi ) strictement négatifs.
10.2 Exemple
Prenons un exemple pour illustrer cette situation et décrire la méthode à suivre dans ce cas.
Un revendeur de café propose de vendre son stock sous la forme de dosettes expresso prête à l’usage.
A la base il possède deux types de café brut : 40 tonnes d’arabica et 20 tonnes de robusta. Il sait produire
deux types de dosettes :
– la première 100% arabica utilise 10 grammes du café arabica brut et dégage une marge de 1,2 centime
d’euro par dosette vendue.
– la seconde 50% arabica, 50% robusta utilise 5 gramme de chaque café et dégage une marge de 1
centime d’euro par dosette vendue.
Une chaîne de cafétérias est prête à lui acheter sa production mais à deux conditions : il doit lui fournir
au moins 5 millions dosettes dont au moins 2,5 millions arabica pur.
Ce revendeur peut-il répondre à cette demande, et si oui quelle production lui donnera une marge maximale ?
10.3 La forme canonique
La première étape reste celle que l’on a faite jusqu’à présent : formaliser le problème pour arriver à sa
forme canonique.
Le but est d’optimiser la marge. Celle-ci s’exprime en fonction des dosettes 100% arabica (D1 ) et des
dosettes 50% arabica 50% robusta (D2 ) : Z = 1.2 × D1 + D2 avec Z exprimé en centime d’euro.
– Le revendeur dispose de 20 tonnes de robusta. Chaque dosette D2 en consomme 5g, donc : 5 × D2 ≤
20000000
– Le revendeur dispose de 40 tonnes d’arabica. Une dosette D1 en consonne 10g et une dosette D2 5g,
donc 10 × D1 + 5 × D2 ≤ 40000000.
– Le revendeur doit fournir au moins 5 millions dosettes : D1 + D2 ≥ 5000000.
Eric L ALLET, Jean-Luc R AFFY
81
– Le revendeur doit fournir au moins 2,5 millions dosettes arabica : D1 ≥ 2500000.
En changeant les unités pour que D1 et D2 soient en «million de dosettes» et pour que Z soit exprimé
en «k euro», on obtient :
Maximiser la fonction Z avec
Mis sous la forme canonique :

D2 ≤ 4




2 × D1 + D2 ≤ 8



D1 + D2 ≥ 5
D

1 ≥ 2.5



Z
= 12 × D1 + 10 × D2



D1 ≥ 0 et D2 ≥ 0
Maximiser la fonction Z avec

D2 ≤ 4




2 × D1 + D2 ≤ 8



−D1 − D2 ≤ −5
−D1 ≤ −2.5




Z
= 12 × D1 + 10 × D2



D1 ≥ 0 et D2 ≥ 0
On a deux inégalités avec un second membre strictement négatif. On est donc bien dans un cas où la
solution D1 = 0 et D2 = 0 n’est pas dans le domaine admissible. Il va falloir trouver un autre point de
départ.
10.4 La méthode par l’exemple
Étape 1 : mise sous la forme standard.
La première étape consiste à passer le problème sous sa forme standard. On a joute donc 4 variables
d’écart (Ei ) et on obtient :
Avec Dj ≥ 0 ∀j et Ei ≥ 0 ∀i, trouver le maximum de Z pour :

D2 + E1 = 4




 2 × D1 + D2 + E2 = 8
−D1 − D2 + E3 = −5


 −D1 + E4 = −2.5


Z = 12 × D1 + 10 × D2
On transforme les équations pour que tous les seconds membres soient positifs ou nuls :
Avec Dj ≥ 0 ∀j et Ei ≥ 0 ∀i, trouver le maximum de Z pour :

(1) D2 + E1 = 4




 (2) 2 × D1 + D2 + E2 = 8
(3) D1 + D2 − E3 = 5


(4) D1 − E4 = 2.5



Z = 12 × D1 + 10 × D2
Dans cette expression, ce sont donc les contraintes (3) et (4) qui posent problème. En effet si on débute
avec D1 = 0 et D2 = 0 il n’est pas possible de garder E3 et E4 positifs conformément aux hypothèses.
82
Eric L ALLET, Jean-Luc R AFFY
Étape 2 : ajout de variables artificielles.
Pour rendre ce point de départ possible, on va ajouter une nouvelle variable artificielle pour chacune des
contraintes problématiques. Soit X1 et X2 avec X1 ≥ 0 et X2 ≥ 0. Et on transforme les deux contraintes
problématiques de cette façon :
(3) devient D1 + D2 + X1 − E3 = 5
(4) devient D1 + X2 − E4 = 2.5
Maintenant il va falloir tout faire pour que notre recherche de solution annule ces deux variables artificielles. Comme le simplexe tend à trouver le maximum de Z, on va faire en sorte que cette recherche pousse
à annuler ces deux variables. Pour cela on va changer le Z à maximaliser en ajoutant X1 et X2 dans son
expression.
Le nouveau Z devient : Z = 12 × D1 + 10 × D2 − k × X1 − k × X2
Et on dit juste que k est une constante positive très grande. Donc la première chose à faire pour maximiser Z sera d’annuler X1 et X2 . Si à la fin de l’algorithme du simplexe on n’y arrive pas, cela signifiera
que les contraintes du problème étaient contradictoires et qu’il n’y avait pas de solution.
Maintenant le problème s’exprime ainsi :
Avec D1 ≥ 0, D2 ≥ 0, X1 ≥ 0, X2 ≥ 0 et Ei ≥ 0∀i trouver le maximum de Z pour :

(1) D2 + E1 = 4




 (2) 2 × D1 + D2 + E2 = 8
(3) D1 + D2 + X1 − E3 = 5


(4) D1 + X2 − E4 = 2.5



Z = 12 × D1 + 10 × D2 − k × X1 − k × X2
Étape 3 : calcul de la solution admissible de départ.
Grâce à l’ajout des variables artificielles on peut à nouveau construire une solution admissible évidente :
on fixe toujours D1 et D2 à zéro et on fixe aussi les variables d’écarts des contraintes problématiques (E3
et E4 ) à zéro.
– La contrainte (1) donne E1 = 4
– La contrainte (2) donne E2 = 8
– La contrainte (3) donne X1 = 5
– La contrainte (4) donne X2 = 2.5
Les quatre variables non nulles de notre solution admissible de départ sont donc E1 , E2 , X1 , X2 . Ce
seront donc les quatre variables en base sur le premier tableau du simplexe.
Il faut aussi réussir à exprimer la valeur des coûts (ou gains) marginaux des diverses variables pour notre
point de départ. Il faut pour cela faire disparaître de l’expression de Z les variables en base.
– X1 est en base, et la contrainte (3) permet de dire : X1 = 5 − D1 − D2 + E3
– X2 est en base, et la contrainte (4) permet de dire : X2 = 2.5 − D1 + E4
Donc Z = 12 × D1 + 10 × D2 − k × (5 − D1 − D2 + E3 ) −k × (2.5 − ×D1 + E4 ).
|
{z
}
{z
}
|
X1
X2
Z = (12 + 2k) × D1 + (10 + k) × D2 − k × E3 − k × E4 − 7.5k.
En résumé : Avec D1 ≥ 0, D2 ≥ 0, X1 ≥ 0, X2 ≥ 0 et Ei ≥ 0∀i il faut trouver le maximum de Z
pour :

(1) D2 + E1 = 4




 (2) 2 × D1 + D2 + E2 = 8
(3) D1 + D2 + X1 − E3 = 5


(4)
D1 + X2 − E4 = 2.5



(12 + 2k) × D1 + (10 + k) × D2 − k × E3 − k × E4 = Z + 7.5k
Avec pour solution admissible de départ : E1 = 4, E2 = 8, X1 = 5, X2 = 2.5 et donc Z = −7.5k
Eric L ALLET, Jean-Luc R AFFY
83
Étape 4 : le simplexe.
On a tout ce qu’il faut pour commencer le simplexe1 :
D1
0
2
1
1
12+2k
E1
E2
X1
X2
∆j
D2
1
1
1
0
10+k
X1
0
0
1
0
0
X2
0
0
0
1
0
E1
1
0
0
0
0
E2
0
1
0
0
0
E3
0
0
-1
0
-k
E4
0
0
0
-1
-k
Somme
4
8
5
2.5
7.5k
k est une constante positive «très grande» donc le premier pivot est sur la colonne D1 . La ligne du pivot
est sur la ligne de X2 .
D1
0
0
0
1
0
E1
E2
X1
D1
∆j
D2
1
1
1
0
10+k
X1
0
0
1
0
0
X2
0
-2
-1
1
-12-2k
E1
1
0
0
0
0
E2
0
1
0
0
0
E3
0
0
-1
0
-k
E4
0
2
1
-1
12+k
E3
1
1
-1
0
10
E4
-1
1
1
-1
2
Somme
4
3
2.5
2.5
-30+2.5k
Le second pivot est sur la colonne de D2 et la ligne de X1 .
E1
E2
D2
D1
∆j
D1
0
0
0
1
0
D2
0
0
1
0
0
X1
-1
-1
1
0
-10-k
X2
1
-1
-1
1
-2-k
E1
1
0
0
0
0
E2
0
1
0
0
0
Somme
1.5
0.5
2.5
2.5
-55
Le troisième pivot est sur la colonne de E3 et la ligne de E2 .
E1
E3
D2
D1
∆j
D1
0
0
0
1
0
D2
0
0
1
0
0
X1
0
-1
0
0
-k
X2
2
-1
-2
1
8-k
E1
1
0
0
0
0
E2
-1
1
1
0
-10
E3
0
1
0
0
0
E4
-2
1
2
-1
-8
Somme
1
0.5
3
2.5
-60
L’algorithme s’arrête là. On a réussi à faire sortir de la base les variables artificielles X1 et X2 , il y avait
donc une solution possible. Cette solution est D1 = 2.5, D2 = 3, et Z = 60.
Donc pour optimiser sa marge le revendeur devra produire 2,5 millions de dosettes 100% arabica, 3
millions de dosettes 50% arabica 50% robusta, et sa marge sera de 60 000 euros.
10.5 Exercices
Exercice 10.1 (Noix et cacahouètes)
Un traiteur doit renouveler ses stocks de noix de pécan et noix de cajou. Il a besoin de 25 tonnes de noix
de pécan et de 6 tonnes de noix cajou. Il fait un appel d’offre et deux types de lots retiennent son attention :
– Un fournisseur lui propose des «lots 1» composés de 5kg de noix de pécan et 2kg de noix de cajou
au prix unitaire de 110 euros.
1 Noter que dans la forme standard exprimée au dessus le Z + 7.5k a été volontaire mis dans le membre de droite pour bien montrer
qu’ici la colonne «Somme» du ∆j ne débute pas avec 0, mais avec 7.5k, la valeur opposée de Z pour la solution initiale.
84
Eric L ALLET, Jean-Luc R AFFY
– Un autre fournisseur lui propose des «lots 2» composés de 15kg de noix de pécan, 2kg de noix de
cajou et 30 kg de cacahouètes au prix unitaire de 224 euros. Par contre il ne peut fournir que 2000
lots.
Le traiteur n’a actuellement pas besoin de cacahouètes. Mais il peut éventuellement écouler les cacahouètes obtenues avec les lots 2 : un confrère est prêt à lui racheter des lots composés de 5kg de noix de
pécan et 20kg de cacahouètes au prix unitaire de 60 euros.
Combien de lots le traiteur doit-il acheter et revendre pour renouveler ses stocks à prix minimum.
Correction page 139
Eric L ALLET, Jean-Luc R AFFY
85
86
Eric L ALLET, Jean-Luc R AFFY
Chapitre 11
Programmation linéaire en nombres
entiers
11.1 Introduction
Jusqu’à présent on a oublié de considérer un problème important : le simplexe ne travaille pas avec
des nombres entiers. Les solutions que l’on parcourt sont des points à des intersections de droites (plans,
etc. . . ) et dans le cas de problèmes réels il y a fort peu de chance d’obtenir des nombres entiers. Lorsque
les variables représentent des éléments fractionnables (des litres de pétrole, des tonnes de blé, des kilowattheures, . . . ) cela ne pose aucun problème. Mais dans le cas contraire (des passagers transportés, des
meubles vendus, . . . ) il n’est pas possible de donner une solution non entière. Arrondir les chiffres de la
solution fractionnaire pour obtenir une solution entière n’est pas une bonne méthode : d’une part il n’est
pas sûr que cette solution soit encore dans le domaine admissible, et d’autre part il se peut que la solution
entière optimale soit très loin de la solution fractionnaire optimale.
Pour les problèmes en nombres entiers, il n’existe pas d’algorithme simple1 qui trouve à coup sûr la
solution optimale. Il existe juste des algorithmes qui pour un nombre d’itérations acceptable, ont beaucoup
de chances de la donner et qui en tout cas donne une solution proche de l’optimale. Nous allons voir l’un
d’entre eux.
11.2 Exemple
Prenons un exemple pour illustrer ce problème.
Un constructeur immobilier a trouvé le terrain pour bâtir 10 petits immeubles. Il construit ses immeubles
selon trois plans standards qui offrent trois types d’appartements différents allant du F1 au F3. Voici un
tableau donnant le nombre d’appartements suivant le modèle d’immeuble :
Modèle 1
Modèle 2
Modèle 3
Appartements
F3
3
1
2
Appartements
F2
3
6
1
Appartements
F1
5
5
12
Quelque soit le modèle d’immeuble il fait une marge de 15k euros sur les F1, 50k euros sur les F2 et
80k euros sur les F3.
Il a sur son carnet de commandes des demandes pour 24 F3, 35 F2 et 150 F1. Combien doit-il construire
de chacun des modèles pour optimiser sa marge ?
Si on résout ce problème avec un simplexe classique, la solution optimale loge 58 demandeurs de F1 et
tous les demandeurs de F2 et de F3. Elle dit de construire 45/7 du modèle 1, 17/7 du modèle 2 et 8/7 du
modèle 3. Elle dégage une marge de 4,540 millions d’euros.
1 au
sens de la complexité. Donc qui se termine dans un temps «acceptable».
Eric L ALLET, Jean-Luc R AFFY
87
Mais évidement, les immeubles ne se construisent pas par 1/7. Il faut donc trouver une solution en
nombres entiers.
11.3 La méthode par l’exemple
La méthode débute comme un simplexe classique : il faut modéliser pour trouver le premier tableau du
simplexe et son premier pivot.
On commence par modéliser notre problème sous sa forme canonique.
– Un immeuble de modèle 1 permet de dégager une marge de 3 × 80 + 3 × 50 + 5 × 15 = 465 k euros.
– Un immeuble de modèle 2 permet de dégager une marge de 1 × 80 + 6 × 50 + 5 × 15 = 455 k euros.
– Un immeuble de modèle 3 permet de dégager une marge de 2 × 80 + 1 × 50 + 12 × 15 = 390 k euros.
Donc si M1 , M2 , et M3 sont les variables qui représentent le nombre d’immeubles de modèle 1, 2 et 3,
la fonction économique Z à maximiser est : Z = 465 × M1 + 455 × M2 + 390 × M3 .
– (1) : M1 ≥ 0, M2 ≥ 0, M3 ≥ 0.
– (2) : Il y a 24 commandes de F3, donc 3 × M1 + M2 + 2 × M3 ≤ 24
– (3) : Il y a 35 commandes de F2, donc 3 × M1 + 6 × M2 + M3 ≤ 35
– (4) : Il y 150 commandes de F1, donc 5 × M1 + 5 × M2 + 12 × M3 ≤ 150.
– Il y a assez de commandes pour remplir 10 immeubles (les commandes permettent au moins de
remplir 10 immeubles de modèle 3), donc on est sûr de bâtir les 10 immeubles : M1 + M2 + M3 = 10
On utilise la dernière égalité pour faire disparaître une des variables du problème : M3 = 10−M1 −M2 .
Donc en reportant cette information dans les autres équations on obtient la forme canonique suivante :
Maximiser Z avec :





(1)



(2)
 (3)



 (4)


M1 ≥ 0 M2 ≥ 0
M1 + M2 ≤ 10 (M3 ≥ 0)
M1 − M2 ≤ 4
2 × M1 + 5 × M2 ≤ 25
−7 × M1 − 7 × M2 ≤ 30
Z = 75 × M1 + 65 × M2 + 3900





 (1)
(2)


(3)



M1 ≥ 0 M2 ≥ 0
M1 + M2 ≤ 10 (M3 ≥ 0)
M1 − M2 ≤ 4
2 × M1 + 5 × M2 ≤ 25
Z = 75 × M1 + 65 × M2 + 3900
Comme M1 et M2 sont positifs, la contrainte (4) est toujours vraie. On peut la retirer du modèle sans
perdre d’information. On obtient la forme standard suivante :
Maximiser Z avec :
Notez que pour la solution initiale M1 = 0 et M2 = 0, Z vaut 3900. On en tient compte pour initialiser
la case «Res» dans le premier tableau du simplexe qui suit :
E1
E2
E3
∆j
M1
1
1
2
75
M2
1
-1
5
65
E1
1
0
0
0
E2
0
1
0
0
E3
0
0
1
0
Somme
10
4
25
-3900
C’est à partir de cette étape que la méthode du simplexe est modifiée.
Pour obtenir une solution entière, on va réduire le domaine des solutions admissibles en lui retirant à
chaque itération un petit morceau dans lequel on est sûr qu’il n’existe aucune solution entière. Réduction
après réduction, l’algorithme va réussir à faire coïncider l’optimum obtenu par le simplexe avec une solution
entière.
88
Eric L ALLET, Jean-Luc R AFFY
À chaque itération du simplexe deux cas peuvent se produire :
– Le pivot vaut 1 : on ne peut pas réduire le domaine de solution sans perdre de solutions entières. On
procède alors avec la méthode habituelle du simplexe. Et on est sûr que les valeurs du tableau vont
rester entières.
– Le pivot ne vaut pas 1 : on va réduire le domaine de solution en effectuant une troncature. Cette troncature va consister à ajouter une contrainte supplémentaire qui va éliminer un morceau du domaine
admissible, mais en s’assurant qu’aucune solution entière ne sera dans la partie rejetée. Cette troncature va aussi assurer que la nouvelle solution admissible obtenue après cette itération sera toujours
entière.
La méthode pour effectuer la troncature passe par 4 étapes :
– Étape 1 : réécrire l’inégalité correspondant à la ligne du pivot :
Cela consiste à retirer de la ligne le coefficient de la colonne correspondant à sa variable en base et
rétablir l’inégalité.
Prenons le cas d’un pivot (p = ai,j ) sur la colonne d’une variable hors base Xj , et sur la ligne d’une
variable en base Vi .
X
... X
X=
X1 . . .
Xj
... Somme
Xk
XV
n
Xi
..
.
0
Vi ai,1 . . . p=ai,j . . .
. . . ai,n
Bi
A1
..
.
0
L’inégalité correspondante est donc :
ai,1 × X1 + . . . + ai,j × Xj + . . . + ai,k−1 × Xk−1 + ai,k+1 × Xk+1 + . . . + ai,n × Xn ≤ Bi
– Étape 2 : faire la troncature de cette inégalité :
Pour cela il faut diviser cette inégalité par le pivot et ne garder que les parties entières des coefficients.
La partie entière d’une valeur M sera notée [M ] et si n ≤ M < n + 1 avec n ∈ Z alors [M ] = n.
ai,1
ai,j
ai,n
Bi
× X1 + . . . +
× Xj + . . . +
× Xn ≤
ai,j
ai,j
ai,j
ai,j
h
i
a
Notez que ai,j
= 1.
i,j
– Étape 3 : créer une nouvelle variable d’écart (T ) :
On ajoute une nouvelle variable d’écart T ≥ 0 telle que :
ai,1
ai,j
ai,n
Bi
× X1 + . . . +
× Xj + . . . +
× Xn + T =
ai,j
ai,j
ai,j
ai,j
Cette variable d’écart permet d’ajouter cette nouvelle égalité au tableau du simplexe. Ce tableau est
ainsi agrandi d’une ligne pour cette égalité, et d’une colonne pour la nouvelle variable d’écart (T ). Il
devient :
X1
...
Xj
. . . Xk = Vi . . .
Xn
T Somme
V1
a1,1
...
a1,j . . .
0
...
a1,n
0
B1
..
..
.
.
Vi
ai,1
...
ai,j
...
1
...
ai,n
0
Bi
..
..
.
.
Vm
T
∆j
am,1
[ai,1 /ai,j ]
C1
...
...
...
am,j
1
Cj
...
...
...
0
0
0
...
...
...
am,n
[ai,n /ai,j ]
Cn
Eric L ALLET, Jean-Luc R AFFY
0
1
0
Bm
[Bi /ai,j ]
Res
89
– Étape 4 : pivoter sur ce nouveau pivot
On pivote sur la ligne de T et la colonne j. Donc la variable Xj passe en base à la place de T .
La nouvelle égalité introduite dans la tableau du simplexe par la troncature est une nouvelle contrainte
qui réduit le domaine des solutions admissibles. Mais la méthode assure que la partie «perdue» par ce découpage ne contenait aucune solution entière. Itération après itération, et donc découpage après découpage,
l’algorithme va faire coïncider l’optimum du nouveau domaine admissible avec une solution entière.
Revenons à notre exemple. La tableau du simplexe obtenu était le suivant :
M1
1
1
2
75
E1
E2
E3
∆j
M2
1
-1
5
65
E1
1
0
0
0
E2
0
1
0
0
E3
0
0
1
0
Somme
10
4
25
-3900
Le premier pivot est sur la colonne de M1 et la ligne de E2 . Comme il vaut 1, on procède à une itération
normale du simplexe :
M1
0
1
0
0
E1
M1
E3
∆j
M2
2
-1
7
140
E1
1
0
0
0
E2
-1
1
-2
-75
E3
0
0
1
0
Somme
6
4
17
-4200
Regardons l’interprétation géométrique de cette première itération.
Le simplexe est parti de la solution admissible (mais pas optimale !) S0 de départ où M1 = 0 et M2 = 0. Le premier critère de
Dantzig a sélectionné la variable qui fait augmenter le plus vite la
fonction économique (M1 : chaque unité de M1 en plus augmente
de 75 la valeur de Z). Ensuite on a augmenté du maximum possible
cette variable tout en restant dans le domaine admissible. Donc M1
est passé à 4 (etM2 est toujours à 0). Cela donne une nouvelle solution admissible au problème (S1). Elle n’est toujours pas optimale,
mais elle est meilleur que la solution S0 de départ.
Pour la seconde itération le nouveau pivot (colonne M2 , ligne E3 )
vaut 7. Il faut faire une troncature.
1. Retour à l’inégalité :
On réécrit l’inégalité correspondant à la ligne de E3 (la ligne du pivot).
E3
M1
0
M2
7
E1
0
E2
-2
Z
E
3
Z
1A
Somme
17
On obtient :
7 × M2 − 2 × E2 ≤ 17
2. Troncature de l’inégalité :
On divise par le pivot et on garde les parties entières.
7
−2
17
× M2 +
× E2 ≤
7
7
7
90
Eric L ALLET, Jean-Luc R AFFY
On obtient2 :
M2 − E2 ≤ 2
3. Ajout d’une variable d’écart :
On crée une variable d’écart T1 ≥ 0 telle que : M2 − E2 + T1 = 2. On ajoute cette nouvelle égalité
dans le tableau du simplexe :
E1
M1
E3
T1
∆j
M1
0
1
0
0
0
M2
2
-1
7
1
140
E1
1
0
0
0
0
E2
-1
1
-2
-1
-75
E3
0
0
1
0
0
T1
0
0
0
1
0
Somme
6
4
17
2
-4200
4. Pivotement sur cette nouvelle ligne :
On pivote sur ce nouveau pivot (celui de la ligne T1 , colonne M2 ) :
E1
M1
E3
M2
∆j
M1
0
1
0
0
0
M2
0
0
0
1
0
E1
1
0
0
0
0
E2
1
0
5
-1
65
E3
0
0
1
0
0
T1
-2
1
-7
1
-140
Somme
2
6
3
2
-4480
Regardons l’interprétation géométrique de cette seconde itération.
Pour cette itération le premier critère de Dantzig a sélectionné la colonne de la variable M2 . Mais si on avait
appliqué l’algorithme classique du simplexe, la nouvelle
solution trouvée n’aurait pas été entière. On a donc fait
une troncature. Celle-ci s’est traduite par l’inégalité M2 −
E2 ≤ 2. La variable E2 est la variable d’écart que l’on
avait introduite pour l’équation (2) de la forme standard du
problème : M1 − M2 + E2 = 4. Donc E2 = 4 − M1 + M2 .
Ainsi l’expression de la troncature en fonction des variables M1 et M2 dit : M1 ≤ 6. Grâce à cette troncature
la nouvelle solution (S2) tombe sur une solution entière :
M1 = 6 et M2 = 2. Par contre, même en tenant compte
de la réduction du domaine des solutions admissibles, la solution S2 n’est toujours pas la solution optimale
de ce domaine.
Passons à la troisième itération : Il reste des ∆j strictement positifs. On peut encore essayer d’augmenter
Z. Le pivot est sur la colonne de E2 et la ligne de E3 . Il vaut 5, il faut faire une troncature.
1. On revient à l’inégalité correspondant à la ligne du pivot :
E3
M1
0
M2
0
E1
0
E2
5
Z
E
3
Z
A1
T1
-7
Somme
3
On obtient :
5 × E2 − 7 × T1 ≤ 3
2. On divise par le pivot et on garde les parties entières :
5
−7
3
× E2 +
× T1 ≤
5
5
5
2 Attention
aux parties entières des nombres négatifs :
ˆ −2 ˜
7
= −1 et non pas 0 !
Eric L ALLET, Jean-Luc R AFFY
91
On obtient3 :
E2 − 2 × T1 ≤ 0
3. On crée une variable d’écart T2 et on ajoute cette nouvelle inégalité dans le tableau du simplexe :
E1
M1
E3
M2
T2
∆j
M1
0
1
0
0
0
0
M2
0
0
0
1
0
0
E1
1
0
0
0
0
0
E2
1
0
5
-1
1
65
E3
0
0
1
0
0
0
T1
-2
1
-7
1
-2
-140
T2
0
0
0
0
1
0
Somme
2
6
3
2
0
-4480
T2
-1
0
-5
1
1
-65
Somme
2
6
3
2
0
-4480
4. On pivote sur ce nouveau pivot (celui de la ligne T2 , colonne E2 ).
E1
M1
E3
M2
E2
∆j
M1
0
1
0
0
0
0
M2
0
0
0
1
0
0
E1
1
0
0
0
0
0
E2
0
0
0
0
1
0
E3
0
0
1
0
0
0
T1
0
1
3
-1
-2
-10
Regardons l’interprétation géométrique de cette troisième itération.
La variable d’écart E2 passe en base lors de cette nouvelle itération. Les valeurs de M1 , M2 et donc de Z restent inchangée. Par contre, cette étape ajoute une nouvelle
troncature :E2 − 2 × T1 ≤ 0. T1 est la variable d’écart introduite pour que M2 −E2 +T1 = 2, on a 2×M2 −E2 ≤ 4.
De plus E2 = 4 − M1 + M2 . Ainsi la contrainte exprimée
avec les variables M1 et M2 devient M1 + M2 ≤ 8. On
reporte cette contrainte sur la représentation géométrique.
On constate alors que la solution optimale du nouveau domaine admissible coïncide avec la solution entière découverte à l’étape précédente. Donc cette itération a permis
de prouver grâce à une troncature supplémentaire (qui à
chaque fois n’élimine aucune solution entière) que la solution S2 était la solution entière optimale.
Voila pourquoi, après cette itération, tous les ∆j sont négatifs ou nuls. On a donc obtenu la preuve que
la solution entière optimale était : M1 = 6, M2 = 2 et M3 = 10 − M1 − M2 = 2. Enfin Z = 4480.
Donc le constructeur doit construire 6 immeubles du modèle 1, et 2 des modèles 2 et 3. Il aura une marge
de 4,48 millions d’euros. Comme pour la solution optimale en nombre fractionnaire les 24 commandes
de F3 sont satisfaites, par contre 3 commandes de F2 ne le sont plus. En contrepartie 6 commandes F1
supplémentaires sont réalisées.
11.4 Conclusion
L’exemple de la section précédente a été spécialement construit pour obtenir une convergence très rapide. Avec des cas réels, la plupart du temps la solution entière proposée converge très vite vers la solution
entière optimale. Par contre le nombre de troncatures qu’il faut faire pour prouver que c’est bien la solution
optimale peut être beaucoup plus élevé. En fait même si ces modèles ne correspondent généralement pas à
ceux obtenus pour des problèmes économiques réels, il est possible de concevoir des cas où la convergence
ne se fera pas. On aura très probablement trouvé la bonne solution, mais on ne pourra pas le prouver.
3 Attention
92
ˆ −7 ˜
5
vaut -2 et non pas -1 !
Eric L ALLET, Jean-Luc R AFFY
Malheureusement les problèmes de programmation linéaire en nombre entier étant très complexe, il
n’existe aucun algorithme qui permettra dans tous les cas d’obtenir avec un nombre raisonnable d’itérations
la bonne solution et la preuve qu’elle est bien la bonne solution.
Cependant, l’algorithme de la section précédente a un grand avantage. À toutes les étapes il propose une
solution entière admissible. Celle-ci ne peut que progresser vers son optimum. Et si la solution ne progresse
plus, mais que l’algorithme ne se termine pas pour autant, il est tout à fait possible de l’arrêter et d’accepter
la solution courante. Il est fort probable qu’elle soit la solution optimale même si on n’en a pas la preuve.
11.5 Exercices
Exercice 11.1 (Meubles de rangement)
Un client d’un magasin obtient régulièrement des points cadeaux. Il peut les échanger contre divers
cadeaux. Il vient de s’apercevoir qu’il avait 59 points cadeaux qui arrivaient à échéance. Il doit les échanger
rapidement, ou les perdre. En consultant la liste des cadeaux accessibles pour ce nombre de points il n’en
trouve que deux qui l’intéressent :
– Contre 10 points, il peut obtenir un petit meuble rectangulaire qui permet de ranger 10 CD.
– Contre 12 points, il peut obtenir un petit meuble en forme de tour qui permet de ranger 11 CD.
Comme ces meubles ont été conçus pour s’emboîter les uns avec les autres, il peut en prendre plusieurs
pour en composer un qui lui permettra de ranger ces CD.
Comment doit-il faire l’échange pour obtenir le plus de rangements possible ?
Correction page 142.
Eric L ALLET, Jean-Luc R AFFY
93
94
Eric L ALLET, Jean-Luc R AFFY
Troisième partie
Modélisation
Eric L ALLET, Jean-Luc R AFFY
95
Chapitre 12
Modélisation
12.1 Chemin de la question à la réponse
D’une manière générale, les problèmes auxquels on est confronté dans le monde réel sont d’une complexité telle qu’il est difficile, voire impossible, de les résoudre directement
On dispose également d’une masse d’informations dont certaines ne sont pas utiles à la résolution du
problème considéré.
C’est pour cette raison que l’on passe par une phase de modélisation. Un modèle est UNE représentation
simplifiée du monde réel, pertinente au regard du problème à résoudre. Il doit inclure toutes les informations
utiles mais uniquement celles-ci.
Le choix du modèle dépend donc directement du type de problème à résoudre mais aussi de la technique
de résolution que l’on a choisie.
Des simplifications peuvent être éventuellement effectuées sur le modèle de façon à réduire le nombre
d’itérations de l’algorithme.
La solution du problème trouvée, il faut revenir à la réalité pour apporter la réponse à la question initiale.
F IG . 12.1 – Modélisation et résolution d’un problème
La principale difficulté est dans l’étape de modélisation. On vient cependant de voir des techniques
permettant de répondre à certaines questions.
– Ordonner, planifier des tâches : Gantt et potentiel-tâches.
– Construire un réseau à moindre coût : Arbre de recouvrement minimal.
– Minimiser un stock, un coût, une tournée,. . . : le plus court chemin.
– Maximaliser un flot, une production, un transport, . . . : le flot max.
Eric L ALLET, Jean-Luc R AFFY
97
– Maximaliser un flot, une production, un transport à moindre coût : le flot max coût min.
– Optimiser un problème à multiples variables et multiples contraintes : programmation linéaire
Mais il faut aussi savoir les utiliser dans des cas moins attendus :
– Le chemin critique du potentiel-tâche est en fait une recherche du plus long chemin. Donc cette
technique peut servir aussi à maximaliser un gain, ou tout autre chose.
– Les marges totales d’un potentiel-tâche peuvent être vu comme du «temps disponibles» dans un
emploi du temps. On peut s’en servir pour synchroniser des plannings pour trouver une date de
réunion sur des emplois du temps a priori déjà plein.
– Le flot max à coût min peut être décliné de bien des façons. On peut essayer d’obtenir le maximum
de choses (objets, services, . . . ) pour un coût donné. Il suffit de décider d’arrêter l’algorithme quand
on atteint le coût fixé plutôt que de l’arrêter quand on atteint le flot maximum. On peut aussi s’en
servir pour connaître le coût minimum pour tout flot inférieur au maximum.
– ...
12.2 Les erreurs à ne pas faire
Il est bien d’apprendre de ses erreurs. Mais parfois ces erreurs se payent un peu cher. Alors autant
apprendre des erreurs des autres. Dans cette section vous allez trouver une collection d’erreurs trouvées
dans diverses copies lors des contrôles. Essayez de bien comprendre quelle erreur a été faite, et ne la faites
pas vous même à l’avenir.
Erreur 12.1 (Diagramme de GANTT) Utiliser un diagramme de GANTT pour trouver le chemin critique
et les marges totales des tâches.
Le diagramme de GANTT est parfait pour calculer la durée d’un projet et donner un planning facilement
lisible à une équipe. Mais il n’est pas adapté à la recherche du chemin critique. Pour ce genre de recherche
il faudra par exemple utiliser un potentiel-tâches.
Erreur 12.2 (Potentiel-tâches) Placer sur le graphe d’un potentiel-tâches, la durée des tâches sur les arcs
entrants.
Sur le graphe d’un potentiel-tâches la durée des tâches se place sur les arcs qui partent de la tâche, et non
pas sur ceux qui y arrivent. Le graphe erroné pourra éventuellement vous donner la durée du projet, mais
par contre les dates au plus tôt et les dates au plus tard seront toutes fausses. Ainsi, de par leur construction
les arcs qui partent du sommet α ajouté à la source du graphe doivent obligatoirement être valués avec une
durée nulle (voir figure 12.2).
Erreur 12.3 (Potentiel-tâches) Placer des valeurs différentes sur deux arcs partants d’un même sommet
(c’est à dire d’une même tâche).
L’arc qui part d’un sommet est valué par la durée de la tâche qui est modélisée par ce sommet. Une tâche
ne peut pas avoir plusieurs durées. Donc obligatoirement, tous les arcs qui partent d’un sommet reçoivent
la même valeur.
F IG . 12.2 – Sur un potentiel-tâches, la durée des tâches se place sur les arcs SORTANT des sommets
98
Eric L ALLET, Jean-Luc R AFFY
Erreur 12.4 (Graphes avec arcs valués) Mettre la valeur (capacité, longueur, coût, durée) sur les sommets.
Les valeurs des graphes valués vus dans ce cours (potentiel-tâches, plus court chemin, flot max, flot-max
coût-min. . . ) se placent sur les arcs et non pas sur les sommets. Même pour le potentiel-tâches, les valeurs
que l’on place lorsqu’on déroule l’algorithme directement sur le graphe sont les résultats de l’algorithme
et non pas les valeurs obtenues lors de la modélisation. Pour tous ces graphes, si dans votre modélisation
une valeur est apparue sur un sommet, c’est qu’il y a une erreur. Généralement vous avez tout simplement
oublié des arcs dans votre modèle.
Erreur 12.5 (Modélisation et simplifications) Simplifier votre modèle avant d’avoir fini la modélisation.
Il faut éviter de simplifier votre modèle trop tôt. Même si des arcs ou des contraintes sont visiblement inutiles, gardez les dans votre modèle s’ils en font vraiment partie. Ensuite une fois la modélisation finie, avant
de mettre la technique en œuvre, simplifier ce qui peut l’être. Les arcs ou les contraintes a priori inutiles
peuvent devenir nécessaires après le changement de la valeur d’un simple paramètre de votre problème. Ils
peuvent aussi être très utiles pour donner une interprétation complète et correcte de votre solution.
Prenons un exemple pour illustrer cette démarche. Imaginons un problème de programmation linéaire
où il faut trouver le maximum de Z avec le modèle suivant :

(1)X1 + X2 ≤ C1




 (2)X1 + X2 ≤ C2
(Modèle 1)
(3)X1 ≤ C3


Z = 2 × X1 + X2



M1 ≥ 0 et M2 ≥ 0
Si C1 ≤ C2 on peut faire disparaître l’inégalité (2) pour obtenir le modèle :

(1)X1 + X2 ≤ C1



(3)X1 ≤ C3
(Modèle 2)
Z = 2 × X1 + X2



M1 ≥ 0 et M2 ≥ 0
Et par contre si C2 ≤ C1 on peut faire disparaître l’inégalité (1) pour obtenir le modèle :

(2)X1 + X2 ≤ C2



(3)X1 ≤ C3
(Modèle 3)
Z = 2 × X1 + X2



M1 ≥ 0 et M2 ≥ 0
Lors de votre modélisation vous serez forcement dans l’un des deux cas. Donc vous serez fortement
tenté de faire disparaître de votre modèle l’inégalité inutile. Il est vrai que si votre problème est bien fixe et
que les paramètres ne risquent pas de changer, le modèle simplifié fera très bien l’affaire. Mais imaginons
qu’immédiatement après ce premier problème, vous rencontrez le même avec juste des paramètres qui
changent (par exemple de C1 ≤ C2 on est passé à C2 ≤ C1 ). Si vous avez modélisé avec le modèle
complet (modèle 1), votre modélisation reste exacte, vous avez juste à procéder à la bonne simplification
avant d’utiliser la technique de résolution (par exemple un simplexe). Si vous avez d’office utilisé un modèle
simplifié, il ne correspond plus au nouveau problème et vous devez refaire une nouvelle modélisation.
Erreur 12.6 (Simplexe) Utiliser le simplexe pour ensuite refaire les calculs à la main.
Le simplexe est un algorithme très complet. Il ne se contente pas de trouver la valeur des variables de votre
problème, il calcule aussi celles de la fonction économique, des variables d’écarts, des valeurs marginales.
Alors évitez d’utiliser le simplexe en ne calculant que la valeur des variables en base pour ensuite faire le
calcul à la main pour trouver la valeur de la fonction économique. Par contre à titre de vérification, vous
pouvez effectivement recalculer à la main la valeur de la fonction économique à partir de la valeur des
variables pour la comparer à celle trouver par votre simplexe : une différence démontre une erreur de calcul.
Eric L ALLET, Jean-Luc R AFFY
99
12.3 Exercices
Dans les chapitres précédents il était aisé de deviner la technique à mettre en œuvre pour les exercices
puisqu’ils concernaient le sujet traité juste au dessus. Voila pourquoi la plupart des exercices ont été placés
dans ce chapitre. Ainsi vous n’aurez plus d’a priori sur le type de modélisation que vous devrez utiliser pour
les résoudre. Il faudra le trouver par votre analyse du problème.
Exercice 12.1 (Commerce de guilde)
Une guilde du «Seigneur des Anneaux Online» a décidé de faire commerce de son artisanat. Elle vient
de recevoir une commande pour un ensemble de 10 arbalètes, 10 sets complets d’armures lourdes, et 10
épées. Pour réaliser cette commande il faut récolter deux types de fer (le fer de nain et le fer ancien), du
bois et du cuir. Il faut ensuite faire divers alliages de fer, traiter le bois et le cuir. Enfin il faut réaliser les
objets. Elle décide de confier ces tâches à trois de ses membres :
– Tawar : Elfe chasseur menuisier, il aura pour tâche d’aller récolter le bois, de chasser pour rapporter le
cuir. C’est aussi lui qui fera le traitement du bois et du cuir. Enfin c’est lui qui réalisera les arbalètes.
– Gorog : Nain prospecteur et ferronnier, il aura pour tâche de ramasser le fer de nain. C’est aussi lui
qui aura la tâche de faire les armures. Mais attention, Gorog exige d’avoir le droit à une pause de 15
minutes à la taverne entre ses 2 tâches !
– Albin : Humain prospecteur et fabriquant d’arme, il aura pour tâche de ramasser le fer ancien. C’est
lui qui transformera tout le fer (fer de nain, et fer ancien) afin d’obtenir les alliages utiles aux arbalètes,
aux armures et aux épées. Enfin c’est lui qui réalisera les épées.
Tawar prévoit de passer 45 minutes pour récolter la totalité du cuir et du bois. Il lui faudra 15 minutes
pour en faire le traitement. Les arbalètes sont fabriquées avec du bois traités et un alliage de fer. Il lui faudra
20 minutes pour toutes les faire.
Gorog prévoit de passer 1h pour récolter le fer de nain. La fabrication de ses armures utilisent des
alliages de fer et du cuir traité. Il pense pouvoir faire toutes les armures en 25 minutes.
Albin passera 1h à ramasser le fer ancien. Il lui faudra 20 minutes pour réaliser les alliages. Ensuite
pour fabriquer toutes les épées qui ne nécessitent que des alliages de fer, il lui faudra 10 minutes.
Une fois tout réalisé, Albin doit réunir la commande pour aller la livrer. Cela doit lui prendre 10 minutes.
Combien de temps faut-il prévoir pour livrer cette commande ?
Gorog a-t-il retardé la livraison à cause de sa pause à la taverne ? Quelle est la pause maximale qu’il
peut faire sans retarder la livraison ?
Correction page 143
Exercice 12.2 (Commerce de guilde (suite))
Les épées et les arbalètes ont satisfait les clients. La guilde a reçu de nombreuses commandes. Elle
décide de les produire en série. Pour fabriquer une arbalète il faut ramasser 25 morceaux de bois, et 20
blocs de fer de nain. Pour fabriquer une épée il faut 25 blocs de fer ancien et 20 blocs de fer de nain. Tawar
peut ramasser 1000 morceaux de bois par semaine, Gorog 1000 blocs de fer de nain et Albin 1000 blocs de
fer ancien.
Sachant que la guilde vend une épée pour 1 pièce d’or (1 pièce d’or = 1000 pièces d’argent) et une
arbalète pour 500 pièces d’argent, quel est le gain maximal qu’elle peut faire par semaine.
Gorog a négocié de recevoir 1 chope de bière par épée vendue, et 2 chopes par arbalète vendue. Or cette
semaine c’est lui qui dirige la production. Sachant qu’il va privilégier son intérêt (la bière !) quelles vont
être les pertes de gain pour la guilde cette semaine ?
Correction page 144
Exercice 12.3 (Commerce de guilde (fin))
Un client se propose d’acheter le stock de matières premières (bois, fer de nain, et fer ancien). A quel
prix minimum la guilde doit-il le vendre pour ne pas perdre d’argent par rapport à la vente optimale des
produits fabriqués ? (on sait dors et déjà que le prix minimum du stock total est celui de la vente optimale
du problème 12.2. Il faut trouver la modlélisation qui le justifie.)
Correction page 146
100
Eric L ALLET, Jean-Luc R AFFY
Exercice 12.4 (Reconstruction)
Vous êtes le Ministre du Budget d’un petit pays victime d’une catastrophe naturelle qui a détruit toute
infrastructure et quasiment toutes les ressources de production sauf celles situées dans la ville de Coudebolle.
Le Ministre de l’Equipement a fait chiffrer par ses services les coûts de reconstruction du réseau routier
entre les principales villes (seules peuvent être construites, les routes dont les coûts sont indiqués dans le
tableau suivant)
Coudebolle
Coudebolle
Borivage
Ollala
Pompays
Tecuge
Borivage
3000
Ollala
7000
2000
Pompays
2000
Tecuge
7000
4000
3000
6000
Quelle solution allez-vous adopter pour obtenir un réseau routier minimal au moindre coût ? On entend
par réseau routier minimal, un réseau permettant d’aller de n’importe quelle ville vers n’importe quelle
autre.
Correction page 146
Exercice 12.5 (Reconstruction (suite))
Le Ministre de l’Industrie intervient alors et vous reproche d’avoir une vue à court terme et qu’il faut
aussi prendre en compte le fait que toutes les ressources de production sont maintenant concentrées à Coudebolle.
Il vous transmet donc les coûts de transport (par tonne) estimés entre les différentes villes.
Coudebolle
Coudebolle
Borivage
Ollala
Pompays
Tecuge
Borivage
3
4
6
Ollala
7
2
4
8
8
Pompays
2
3
6
Tecuge
7
4
3
6
8
(Vous aurez remarqué que le coût de transport de A vers B n’est pas obligatoirement le même que de B
vers A).
En supposant que le réseau routier est complet (toutes les routes possibles existent), optimisez les coûts
de transport à partir de Coudebolle vers toutes les villes.
Correction page 147
Exercice 12.6 (Reconstruction (fin))
Comme tout Ministre du Budget, vous tentez de concilier les intérêts de l’Etat (reconstruire au coût
minimum) et des acteurs économiques (ici, coûts de transport minimum).
Quelle solution adopteriez-vous et pourquoi ?
Quel sera le surcoût par rapport à ce que vous avez calculé à la première question ?
Correction page 148
Eric L ALLET, Jean-Luc R AFFY
101
Exercice 12.7 (Donjon et trésors)
Vous avez inventé un jeu vidéo très simple dont le scénario est le suivant :
Le joueur doit découvrir une salle aux trésors dans un donjon hanté. Pour cela il doit parcourir des salles
et dans chaque salle il est soumis à certaines épreuves. Il n’existe bien sûr pas de chemin unique pour aller
à la salle aux trésors mais suivant le parcours du joueur, le nombre d’épreuves qu’il aura à affronter peut
être différent.
Votre jeu connaît un succès appréciable et votre éditeur vous demande d’organiser un grand tournoi.
Vous adaptez les règles pour ce tournoi. Le nombre de points sera déterminé par le nombre d’épreuves
passées et le temps départegera les joueurs ex-aequo.
Pour des raisons d’organisation, l’organisateur veut savoir combien de temps il faut au minimum pour
parvenir à la salle au trésor en ayant passé le maximum d’épreuves. De plus il veut que vous déterminiez
pour chacune des salles un temps maximum pour y parvenir au-delà duquel le joueur est éliminé. Ce temps
est fixé a priori de façon à ce que le joueur ne puisse plus terminer le jeu moins d’une heure après le temps
minimal quelque soit le chemin qu’il emprunte ensuite.
Le château possède 8 salles (plus la salle aux trésors). Le tableau suivant vous indique le nombre
d’épreuves par salle.
Salle
S1
S2
S3
S4
S5
S6
S7
S8
Nombre
d’épreuves
2
4
3
5
4
2
6
3
Le temps minimum pour chaque épreuve est de 10 minutes.
Le tableau qui suit indique les possibilités de passage d’une salle à l’autre.
S1
S1
S2
S3
S4
S5
S6
S7
S8
S2
X
S3
X
X
S4
S5
X
X
X
S6
S7
S8
X
X
X
X
X
Le joueur part de la salle S1 et doit se rendre à la salle S8 qui lui donne l’accès à la salle aux trésors.
Quel chemin doit emprunter un joueur pour avoir le maximum de points possibles ?
Quelle est l’heure maximale d’arrivée dans chaque salle pour ne pas être éliminé (l’heure 0, étant l’heure
d’entrée dans la salle 1, et le joueur aura le droit d’emprunter un chemin qui ne donne pas le maximum de
points) ?
Correction page 148.
Exercice 12.8 (Préparation des secours)
Un pays tropical doit faire face avec ses propres et maigres moyens à un cyclone en approche. Les
prévisions indiquent que le cyclone arrivera sur le sud d’une île du pays et qu’il risque de dévaster la région
dont la ville principale, Farniente est hautement touristique. Le gouvernement a fait évacuer la zone et
décide de préparer des équipes de secours pour réparer au plus vite les infrastructures après le passage du
102
Eric L ALLET, Jean-Luc R AFFY
cyclone. Il veut pouvoir disposer d’un maximum de personnel qualifié dans une ville hors du chemin du
cyclone, mais à proximité : Estival. Actuellement ce personnel est cantonné dans la capitale : Aunor.
Le gouvernement dispose de quelques jours pour transporter le plus de personnes possible depuis la
capitale jusqu’à Estival. Pour cela il dispose de plusieurs moyens de transport (voir figure 12.3) :
F IG . 12.3 – Les infrastructures de transports
– Par bateau : Le voyage se fait en trois étapes. Depuis Aunor jusqu’à Bordelot la capacité de transport
sera au total de 1000 personnes. Depuis Bordelot jusqu’à Danlo la capacité de transport sera au
total de 1000 personnes. Et depuis Danlo jusqu’à Estival la capacité totale de transport sera de 700
personnes.
– Par avion : Le voyage se fait en deux étapes. Depuis Aunor jusqu’à Danlo la capacité de transport
sera de 1000 personnes. Et depuis Danlo jusqu’à Estival la capacité totale de transport sera de 700
personnes.
– Par route : Une fois arrivée à Bordelot, une route mène en deux étapes à Estival en passant par
Campagne. Entre Bordelot et Campagne la capacité totale sera de 1000 personnes. Entre Campagne
et Estival la capacité totale sera de 700 personnes.
Toutes ces capacités de transports prennent en compte la totalité des gens que l’on peut transporter sur
les quelques jours de préparation. Elle concernent des horaires qui permettent des correspondances pour
acheminer les personnes jusqu’à Estival.
Combien de personnes au maximum sera-t-il possible d’acheminer depuis Aunor jusqu’à Estival ?
Pour chaque étape en bateau, le coût de transport d’une personne est de 1 galet (l’unité monétaire du
pays). Pour chaque étape en avion le coût monétaire de transport d’une personne est de 6 galets. Pour chaque
étape de route le coût monétaire de transport d’une personne est de 2 galets. Le gouvernement dispose d’un
budget de 5400 galets pour le transport des personnes.
Combien pourra-t-il en transporter ?
Correction page 149
Eric L ALLET, Jean-Luc R AFFY
103
Exercice 12.9 (Déploiement des secours)
Le cyclone est passé, l’heure de la reconstruction est venue. Par chance les routes, le port et l’aéroport
de Farniente ne sont que partiellement endommagés. Il est possible de les utiliser avec des transports légers
pour acheminer le personnel et le matériel nécessaire. Une équipe de reconstruction est composée de 20
personnes et de 1 tonne de matériel. Toutes les équipes ont été composées à Estival et pour des raisons
logistiques et d’organisation il faut transporter les 20 personnes d’une même équipe dans le même transport.
De même chaque lot de 1 tonne de matériel ne doit pas être divisé durant la transport. Enfin, même si le
matériel peut voyager sur un autre transport que le personnel, il faut qu’à l’arrivée il y ait autant d’équipes
de 20 personnes que de lots de matériel.
Trois moyens de transports sont disponibles :
– Des avions : ils peuvent transporter chacun 2 équipes. Chaque voyage coûte 250 galets.
– Des bateaux : ils peuvent transporter chacun 1 équipe et 7 lots de matériel. Chaque voyage coûte 150
galets.
– Des camions : ils peuvent transporter chacun 3 équipes et 1 lot de matériel. Chaque voyage coûte 150
galets.
Pour cette phase des opérations le gouvernement dispose d’un budget de 3500 galets.
Combien pourra-t-il déployer d’équipes (avec son matériel) sur place ?
Correction page 154
104
Eric L ALLET, Jean-Luc R AFFY
Quatrième partie
Appendix
Eric L ALLET, Jean-Luc R AFFY
105
Annexe A
Corrections des exercices
A.1
Graphe
A.1.1 Correction de l’exercice 1.1 de la page 9
Pour ce problème il faut construire le graphe des rencontres. Mais ils ne suffit pas de relier les gens
entre eux, car il faut tenir compte de la notion du temps. Après chaque rencontre les personnages sont
«nouveaux». Il faut donc créer un nouveau sommet pour chaque personnage après chaque rencontre.
Arnaud fait 2 rencontres, il sera donc représenté par 3 sommets : A, A1 et A2.
Bertrand ne fait qu’une rencontre. Il faudra 2 sommets : B, B1.
Cyril fait 2 rencontres. il faudra 3 sommets : C, C1, C2.
Ainsi de suite jusqu’à Fanny et ses 2 rencontres (F, F1, F2).
On arrive au graphe de la figure A.1.
F IG . A.1 – Graphe des rencontres
Maintenant il faut être capable de trouver un chemin pour acheminer les colis. Il en existe bien un allant
de Bertrand à Fanny : Il passe par A1, C1, D2, E3 et finit sur F2. Donc il faut que Bertrand donne son colis
à Arnaud lundi qui le donne à Cyril le mardi, qui le transmet à Dorothée le mercredi. Jeudi Étienne le reçoit
pour l’acheminer à Fanny le vendredi.
Par contre aucun chemin n’existe entre Étienne et Arnaud. Il n’est pas possible d’acheminer ce colis.
Eric L ALLET, Jean-Luc R AFFY
107
A.1.2 Correction de l’exercice 1.2 de la page 9
À la lecture des témoignages, au moins Gabriel ne semble pas très net. Mais analysons le problème de
près. Déjà dessinons le graphe des rencontres (comme tous les témoignages sont cohérents, on va utiliser
un graphe non orienté : les rencontres sont réciproques). Voir la figure A.2.
C
G
B
F
A
E
D
F IG . A.2 – Graphe des rencontres
Comment peut-on interpréter ce graphe ? Chaque sommet est en fait un (ou plusieurs pour les tricheurs !)
intervalle de temps. Les autres personnes qui y sont reliés sont les personnes qui ont été présentes dans la
salle durant cet intervalle de temps. Réduisons ce graphe à F, E, D A (voir figure A.3). On voit que Fanny a
vu Étienne mais pas Dorothée. Comme Étienne a vu Dorothée, on peut en conclure que le passage d’Étienne
s’est passé entre celui de Fanny et Dorothée avec un peu de temps en commun avec chacune des deux. Donc
un chemin du style F,E,D,A correspond au déroulement du temps (même si on ne peut pas dire dans quel
sens va le temps).
G
F
F
A
E
A
E
D
D
F IG . A.3 – Réductions du graphe à des sous-ensembles
Si on prends la réduction du graphe à F, E, D, A, G (voir figure A.3). On a toujours notre ligne de temps,
mais avec Gabriel relié à tous. Cela veut juste dire qu’il a été témoin de toutes les autres rencontres. Mais
comme sa présence est continue, il a pu faire cela sans quitter la pièce. Donc ce sous graphe ne pose aucun
problème avec les règles du test.
Prenons par contre la réduction du graphe à A, B, C, D (voir figure A.4). Ici on a cycle. Et comme on
a toujours une personne qui n’a pas été vu d’une autre, cela prouve que personne n’est resté en continu
dans la salle. Comme le temps ne cycle pas, seul le double passage d’une des 4 personnes peut expliquer ce
cycle. Il y a donc un tricheur parmi elles.
De la même manières tout cycle de 4 ou plus personnes où les gens ne sont reliés qu’à deux autres
prouvera l’existence d’une tricherie. On peut trouver 2 cycles de genre sur le graphe. On les voit en réduisant
le graphe à A,B,C,D et à C, D, E, F (voir figure A.4).
Il y a eu ici 2 boucles temporelles. Dans le cycle A, B, C, D au moins un acteur est entrée deux fois dans
la pièce, et la même chose pour le cycle C, D, E, F. En fait, si on retire C du graphe d’origine, on obtient un
graphe sans anomalies (voir la figure A.5).
Ce graphe dernier permet de bien faire ressortir la chronologie des événements (sauf pour ce qui est du
«sens» du temps : on va supposer que temps commence avec l’arrivée de F dans la salle, mais il est possible
que le temps doive être pris dans sens inverse et donc F soit le dernier a quitté la salle).
En ne tenant pas compte de Cyril, on obtient : Fanny ou Gabriel est entré en premier. Étienne est arrivé
avant le départ de Fanny. Fanny est sortie. Dorothée est alors arrivée. La sortie d’Étienne a précédé l’arrivée
d’Arnaud. Dorothée est sortie avant que n’arrive Bertrand.
Comme Fanny a vu Cyril sans que Étienne ne le voit, Cyril était déjà dans la pièce avant Fanny, mais il
108
Eric L ALLET, Jean-Luc R AFFY
C
C
B
F
A
E
D
D
F IG . A.4 – Des sous-graphes incompatibles
G
B
F
A
E
D
F IG . A.5 – Sous graphe sans anomalies
est sorti avant l’arrivée d’Étienne. Dorothée a vu Cyril, mais ni Étienne ni Arnaud ne l’ont vu. Donc Cyril
est repassé dans la pièce entre l’arrivée de Dorothée et l’arrivée d’Arnaud. Bertrand a aussi vu Cyril, mais
Arnaud non. Donc Cyril est repassé une troisième fois après le départ d’Arnaud. Comme Gabriel n’a vu
entrer personne deux fois de suite on peut aussi déduire qu’il est entrée dans la pièce après le premier départ
de Cyril (donc après Fanny), et qu’il l’a quitté avant le troisième passage de Cyril (donc avant Bertrand).
On a donc la chronologie complète des passages.
Comme Cyril a fait 3 passages, on a l’explication des 2 entrées en trop. Il n’y a donc qu’un seul tricheur.
A.1.3 Correction de l’exercice 1.3 de la page 10
Le graphe des rencontres est dessiné sur la figure A.6.
C
G
B
F
A
E
D
F IG . A.6 – Graphe des rencontres
Il y a bien un cycle anormal : F, C, D, E. On est donc sûr qu’il y a eu tricherie. Mais on est incapable de
dire combien il y a eu de tricheries et qui a triché. Les informations fournies ne permettent pas de le dire.
A.1.4 Correction de l’exercice 1.4 de la page 10
Pour cet exercice il faut commencer par établir la liste de tous les dispositions autorisées de nos 4
protagonistes. Pour cela on va symboliser le fermier par un F, le loup par un L, la chèvre par un C, le choux
par un X et la rivière par un /. Donc par exemple l’état de départ est «FLCX/» et l’état final voulu est
«/FLCX». L’état où le loup et le choux sont sur la rive d’origine alors que le fermier et la chèvre sur l’autre
rive s’écrit : «LX/FC»
Les dispositions autorisées sont celles où on ne trouve pas la chèvre sur la même rive que le loup ou
Eric L ALLET, Jean-Luc R AFFY
109
le choux alors que le fermier est sur l’autre rive. Donc toutes les combinaisons 3/1 ou 1/3 avec le fermier
parmi les 3 sont possibles, mais les seules combinaisons 2/2 possibles sont FC/LX ou LX/FC. On obtient la
liste sur la figure A.7.
FLCX/
FLX/C
FLC/X
FCX/L
FC/LX
LX/FC
L/FCX
X/FLC
C/FLX
/FLCX
F IG . A.7 – Les dispositions possibles
Maintenant on trace une arête entre deux sommets lorsqu’il est possible de passer d’une disposition à
l’autre par un voyage en barque du fermier (et de son éventuel passager). On obtient un graphe biparti avec
dans un ensemble (en haut) les sommets où le fermier est sur la rive d’origine, et dans l’autre (en bas) les
sommets où le fermier est sur la rive d’arrivée (voir figure A.8).
FLCX/
FLX/C
FLC/X
FCX/L
FC/LX
LX/FC
L/FCX
X/FLC
C/FLX
/FLCX
F IG . A.8 – Les connexions possibles entre les dispositions
Pour résoudre le problème, il suffit maintenant d’emprunter un chemin allant de la disposition FLCX/ à
la disposition /FLCX.
A.2
Ordonnancement
A.2.1 Correction de l’exercice 2.1 de la page 24
Suite à ces explications très claires de votre collègue, la première étape va être d’identifier toutes les
tâches et leurs dépendances.
Commençons par l’aspect logistique, qui ne dépend pas de l’aspect scientifique :
Tâche A : Choix du comité d’organisation. Sans lui, aucune tâche logistique ne peut se faire. Durée : 1
semaine.
Tâche B : Choix de l’hôtel. Il est fait par le comité d’organisation : après A. Durée : 3 semaines.
Tâche C : Choix des menus et prix des repas. Il faut avoir choisi l’hôtel : après C : Durée : 1 semaine.
Tâche D : Choix du lieux du banquet. Il est fait par le comité d’organisation : après A. Durée : 2 semaines.
Tâche E : Détermination du prix payé par les conférenciers. Cela dépend du banquet et des menus : après
C et D. Durée : 1 semaine.
Traitons maintenant l’aspect scientifique :
Tâche F : Choix du comité de programme. De lui dépend tout l’aspect scientifique. Durée : 3 semaines.
Tâche G : Première réunion. Il faut que le comité scientifique et l’hôtel soient choisis : après B et F. Durée :
0 semaine.
Tâche H : Appel et attente des communications : Cette tâche arrive après la première réunion et la détermination du prix : après G et E. Durée : 8 semaines.
Tâche I : Sélection des articles. Elle arrive après les réponses à l’appel : après H. Durée 8 semaines.
110
Eric L ALLET, Jean-Luc R AFFY
Tâche J : Second réunion. Elle suit la sélection des articles et arrive après le choix du lieux de banquet :
après I et D. Elle doit arriver au moins 3 semaines avant le colloque : durée 3 semaines.
Tâche K : Mise en forme des articles sélectionnés. Elle arrive après la sélection des articles : après I. Durée
4 semaines.
Tâche L : Impression des «Proceedings». Elle arrive après la mise en forme des articles : après K. Durée
6 semaines.
Tâche M : Réception des livres. Elle suit l’impression : après la tâche L. Il faut les recevoir au moins 1
semaine avant le colloque : durée 1 semaine.
Tâche ω : Le début du colloque. Il faut que tous les aspects logistiques soit réglés que le programme final
soit fixé (deuxième réunion), et que les livres soient reçus : après E, J et M.
Après avoir ajouté une tâche fictive α de durée nulle placée avant les tâches sans dépendances, on obtient
le graphe de la figure A.9
F IG . A.9 – Le graphe des tâches
On peut simplifier un peu ce graphe. Lorsqu’on a un chemin X → Y → Z, avec Y seul successeur de
X, et Z seul successeur de Y, on peut supprimer Y, et remplacer le chemin par X → Z. La durée du nouvel
arc reçoit la somme des durées des deux anciens. À la fin pour retrouver la date au plus tôt et la date au
plus tard de Y, il suffira d’ajouter la durée de la tache X aux dates de X (et donc la marge totale de Y sera
exactement la même que celle de X ).
Donc une fois simplifié on obtient le graphe de la figure A.10 :
F IG . A.10 – Le graphe simplifié des tâches
Maintenant, il suffit de mettre en œuvre le potentiel-tâches pour avoir la réponse à toutes les questions.
Cela donne le graphe de la figure A.11
La durée minimale du projet est donc de 33 semaines. Vous devez à tout prix commencer 33 semaines
avant le 17 décembre c’est à dire avant le 30 avril.
Vous avez une marge de 2 semaines sur la date de la première réunion (tâche G) et 8 semaines sur la
date de la seconde (tâche J).
Eric L ALLET, Jean-Luc R AFFY
111
F IG . A.11 – Le résultat du potentiel-tâches
A.2.2 Correction de l’exercice 2.2 de la page 25
La modélisation de ce problème ne saute pas aux yeux. Mais l’énoncé indique qu’il faut le modéliser
avec un graphe et une recherche de plus long chemin. On va donc le modéliser ainsi. Mais notez que
exactement le même exercice est aussi proposé dans la section de la recherche du plus court chemin. Donc
la modélisation qui suit est une modélisation parmi d’autres, et non pas la seule possible !
La recherche d’un plus long chemin est bien adaptée à une recherche de maximum. Dans notre problème
on trouve des gains et des coûts. Il est évidemment bien plus pertinent de trouver le maximum des gains.
On va donc modéliser avec un graphe où les arcs seront valués avec des gains. Pour réussir à modéliser les
coûts sur ce graphe, on va les interpréter comme des gains négatifs. Une fois le graphe obtenu, il faudra
trouver le chemin qui nous donnera le gain maximal. Ce gain pourra être positif ou négatif. Suivant le cas
on pourra conseiller à Apollodore de travailler ou non.
La première étape consiste à trouver un graphe qui modélise les possibilités d’Apollodore. Chaque
jour le travail d’Apollodore va faire évoluer son stock de repas. Il pourra soit l’augmenter de 50 (le lundi,
le mardi et le jeudi), soit le diminuer de 100 (le mardi et le vendredi), soit le laisser inchangé (tous les
jours). L’état de ce stock à la fin de chaque journée convient parfaitement pour modéliser les possibilités
d’Apollodore. Comme il produit ses repas par 50, qu’il les consomme pas 100 et que son stock maximal
est de 100, à la fin de chaque journée son stock a trois états possibles : 0 repas, 50 repas ou 100 repas. Si
modélise immédiatement la contrainte qui l’oblige à finir avec un stock nul le vendredi soir, notre graphe
devra passer par les états de la figure A.24.
F IG . A.12 – Tous les états possibles du stock d’Apollodore
Il faut maintenant placer les arcs entre ces états. Le lundi Apollodore peut ne rien faire (le stock reste à
0) ou produire 50 repas (le stock passe à 50 -état Lun 50-). S’il produit 50 repas, cela va lui coûter 2k euros
(donc un gain de -2k). On va donc valuer cet arc avec la valeur -2 (notre unité sera le kilo euros). L’état Lun
100 ne peut pas être atteint, il faudra le retirer du graphe. Le mardi le stock d’Apollodore ne lui permet pas
112
Eric L ALLET, Jean-Luc R AFFY
de répondre à la demande du premier banquet. Il n’a donc que 2 choix possibles : ne rien faire (son stock ne
bouge pas), ou produire 50 repas pour un coût de 2k euros (son stock monte de 50). Le mercredi il n’a pas
accès aux cuisines pour produire. Il n’a que deux choix : ne rien faire, ou servir les 100 repas du banquets
de mercredi (si son stock le lui permet). Ce banquet lui rapporte 3k euros (il faut penser à retirer le 1k euros
que lui coûte le service de chaque banquet). L’arc va être valué avec la valeur 3. On continue ainsi jusqu’à
la fin de la semaine et on arrive à la figure A.13
F IG . A.13 – Ajouts des arcs suivants les actions d’Apollodore
Sur le graphe de la figure A.13, l’état «Jeu 50» se trouve en dehors de tout chemin menant au seul état
final acceptable (stock vide vendredi soir). Il faut donc le retirer de notre modélisation. On obtient le graphe
de la figure A.14.
F IG . A.14 – Graphe nettoyé des états impossibles
On peut encore maintenant simplifier ce graphe avant de faire tourner l’algorithme de recherche de plus
long chemin : on supprime les états sur lesquels il n’y qu’un seul arc entrant et un seul arc sortant. On
remplace les 2 arcs par un nouvel arc valué par la somme des deux valeurs. On obtient le graphe de la figure
A.15.
Il nous reste plus qu’à appliquer le même algorithme que pour le potentiel-tâches. Attention, même si
on parle du même algorithme, ce graphe n’est absolument pas celui d’un potentiel-tâches (petit rappel :
par construction, sur un graphe d’un potentiel-tâches les valeurs des arcs partant du premier sommet sont
toutes nulles, et les valeurs des arcs partant d’un même sommet sont toutes identiques. Ce n’est pas le cas
du graphe que l’on a construit ici !). On obtient le graphe de la figure A.16.
Eric L ALLET, Jean-Luc R AFFY
113
F IG . A.15 – Graphe simplifié avant algorithme
F IG . A.16 – Recherche du plus long chemin
Sur ce graphe on a stoppé l’algorithme dès l’étape du calcul équivalent à la recherche des «dates au
plus tôt». Ces valeurs correspondent à celles du plus long chemin menant vers chacun des sommets. Or la
valeur obtenue pour le sommet en bout de graphe est 0. Il n’est donc même pas la peine de chercher par quel
chemin on arrive à cette valeur (cette recherche consisterait à rechercher ce qui correspondrait au chemin
critique sur le potentiel-tâches), puisque le meilleurs scénario n’est pas intéressant pour Apollodore. Dans
le meilleurs de cas, même s’il travaille, il ne peut pas gagner d’argent ! Donc il vaut mieux lui conseiller de
ne rien faire cette semaine.
A.2.3 Correction de l’exercice 2.3 de la page 25
La modélisation de cet exercice est exactement identique à celle du précédant. Par contre l’aide apportée
par Aristodème va enrichir le nombre de scénarios possibles. Grâce à cette main d’œuvre supplémentaire il
sera possible de produire jusqu’à 100 repas le lundi, mardi et jeudi. De plus même si l’un des deux sert le
banquet du mardi, l’autre pourra produire 50 repas le même jour. Ainsi il est envisageable de ne diminuer
le stock que de 50 repas tout en servant ce banquet.
On obtient le graphe de la figure A.17.
114
Eric L ALLET, Jean-Luc R AFFY
F IG . A.17 – Ajouts des arcs en tenant compte des actions d’Apollodore et d’Aristodème
Sur le graphe de la figure A.17, l’état «Jeu 50» se trouve en dehors de tout chemin menant au seul état
final acceptable (stock vide vendredi soir). Il faut donc le retirer de notre modélisation. On obtient le graphe
de la figure A.18.
F IG . A.18 – Graphe nettoyé des états impossibles
On peut encore maintenant simplifier ce graphe avant de faire la recherche du plus long chemin : on
supprime les états sur lesquels il n’y qu’un seul arc entrant et un seul arc sortant. On remplace les 2 arcs par
un nouvel arc valué par la somme des deux valeurs. On obtient le graphe de la figure A.19.
On applique l’algorithme utilisé sur les graphes d’un potentiel-tâches pour obtenir le graphe de la figure
A.20.
Cette fois on obtient la valeur 3 sur le sommet final du graphe. Donc le meilleurs scénario permet de
dégager un gain de de 3k euros. Apollodore et Aristodème ont donc intérêt à travailler ensemble cette
semaine.
Le chemin critique du graphe permet de dégager ce meilleurs scénario. Interprétons-le :
– Il faut commencer par augmenter le stock de 100 dès le lundi. Donc les 2 traiteurs doivent travailler
en cuisine le lundi.
– Ensuite le stock repasse à 0 le mardi. Donc l’un des deux doit servir le banquet du mardi pendant que
l’autre se repose.
– Mercredi le stock reste à 0. Donc les deux traiteurs se reposent.
Eric L ALLET, Jean-Luc R AFFY
115
F IG . A.19 – Graphe simplifié avant algorithme
F IG . A.20 – Recherche du plus long chemin
– Il faut remonter le stock à 100 le jeudi. Donc les deux doivent travailler en cuisine.
– Et vendredi le stock repasse à 0. Donc l’un sert le banquet du vendredi pendant que l’autre se repose.
A.2.4 Correction de l’exercice 2.4 de la page 25
Apollodore et Aristodème se demandent comment organiser leurs tâches pour être le plus efficace possible. Il s’agit donc évidemment d’un problème d’ordonnancement. La question porte juste sur le choix
entre deux scénarios possibles. Il suffit donc de calculer le temps pris par les deux scénarios et de choisir
le plus rapide. Il n’est même pas utile de trouver les tâches critiques, donc un simple diagramme de Gantt
suffira. Bien sûr un potentiel-tâches répond tout aussi bien à la question. Pour cette correction nous allons
faire un diagramme de Gantt.
La première étape consiste à trouver les dépendances des tâches.
Pour le premier scénario, Apollodore doit commencer par préparer la pâte brisé avant de faire la tarte
elle même. Aristodème étalera cette pâte après la préparation de crème anglaise.
On obtient donc les dépendances suivantes :
116
Eric L ALLET, Jean-Luc R AFFY
Nom de la
tâche
A
B
C
D
E
F
G
H
I
J
K
L
Description
Préparer la pâte
Laisser reposer la pâte
Préparer la crème
Étaler la pâte
Laisser refroidir la crème
Mettre la crème au réfrigérateur
Préparer le moule
Préparer les pommes
Mettre en place des pommes
Caraméliser les pommes
Placer la pâte
Cuisson
Durée
(en minute)
5
30
15
5
15
30
5
10
10
5
5
15
dépendances
après A
après B et C
après C
après E
après A
après G
après H
après I
après D et J
après K
Traduit sous la forme d’un diagramme de GANTT, on obtient :
Tâches
05
10
15
20
25
30
35
40
45
50
55
60
65
A
B
C
D
E
F
G
H
I
J
K
L
Donc avec ce scénario, en 60 minutes tout est prêt.
Regardons maintenant le second scénario : seule la tache A change d’acteur. Donc Apollodore peut
commencer la tâche G immédiatement, par contre Aristodème doit reporter le début de la tâche C après la
fin de la tache A.
On obtient les dépendances suivantes :
Eric L ALLET, Jean-Luc R AFFY
117
Nom de la
tâche
A
B
C
D
E
F
G
H
I
J
K
L
Description
Préparer la pâte
Laisser reposer la pâte
Préparer la crème
Étaler la pâte
Laisser refroidir la crème
Mettre la crème au réfrigérateur
Préparer le moule
Préparer les pommes
Mettre en place des pommes
Caraméliser les pommes
Placer la pâte
Cuisson
Durée
(en minute)
5
30
15
5
15
30
5
10
10
5
5
15
dépendances
après A
après A
après B et C
après C
après E
après G
après H
après I
après D et J
après K
Traduit sous la forme d’un diagramme de GANTT, on obtient :
Tâches
05
10
15
20
25
30
35
40
45
50
55
60
65
A
B
C
D
E
F
G
H
I
J
K
L
Donc avec ce second scénario il faut 65 minutes pour que tout soit prêt.
Apollodore et Aristodème devraient suivre la premier scénario pour terminer leur préparation le plus
vite possible.
A.3
Arbre
A.3.1 Correction de l’exercice 3.1 de la page 34
Aucun doute possible pour cette exercice, il s’agit de trouver un arbre de recouvrement minimal. De
plus le graphe est presque déjà dessiné par le plan de la commune. Il faut juste penser à considérer tous
points déjà reliés par une route en bon état comme étant un seul et même sommet du graphe.
118
Eric L ALLET, Jean-Luc R AFFY
Donc le réseau du Centre-Bourg forme un seul sommet. Il est relié aux Fays par ch1, à la Bergerie par
ch3, à la Dauberie par ch9, à la Croisée par ch8 et enfin aux Haies par ch11.
De plus les Iris et la Croisée ne forme qu’un seul et même sommet. Pour la suite de ce problème, on ne
parlera plus que du sommet «la Croisée» relié aux Haies par ch13 et aux Joncs par ch15.
En nommant «CB» le sommet du Centre-Bourg et les habitations par leur initiale, on obtient la matrice
d’adjacence suivante (les distances sont exprimées en hectomètre) :
CB
A
B
C
D
E
F
G
H
J
CB
A
B
C
ch3=14
ch8=15
ch9=14
ch5=14
ch7=13
ch6=16
ch1=5
ch4=8
ch2=12
D
E
F
G
H
J
ch10=5
ch11=14
ch13=13
ch15=17
ch14=15
ch16=13
ch12=16
Le même graphe dessiné donne la figure A.21.
ch1=5
F
ch3=14
ch2=12
B
ch4=8
ch5=14
ch10=5
D
ch11=14
G
ch12=16
H
ch8=15
ch6=16
ch7=13
A
ch9=14
CB
ch13=13
ch15=17
C
J
ch14=15
ch16=13
E
F IG . A.21 – Le réseau de chemin de la commune
On va par exemple utiliser l’algorithme de Prim en utilisant les matrices. La premier sommet (qui peut
être choisi au hasard) placé va être «CB».
CB
CB
A
B
C
D
E
F
ch3=14
ch8=15
ch9=14
G
H
J
ch11=14
A
B
C
D
E
F
G
H
J
ch1=5
OUI
La plus petite arête partant de «CB» est celle allant vers «F». On ajoute donc «F» à notre ensemble de
sommets traités. On calcule le nouveau cocycle (on ajoute la ligne et la colonne de «F» mais en supprimant
les arêtes reliées aux éléments déjà dans l’ensemble).
Eric L ALLET, Jean-Luc R AFFY
119
CB
CB
A
B
C
D
E
F
ch3=14
ch8=15
ch9=14
G
H
J
ch11=14
X
X
ch1=5
X
OUI
A
B
ch4=8
OUI
ch2=12
C
D
E
F
G
H
J
Dans le nouveau cocycle, la plus petite arête est celle allant de «F» à «A». On ajoute «A» à l’ensemble
des sommets traités, et on calcule le nouveau cocycle.
CB
A
CB
A
B
C
D
E
F
ch3=14
ch8=15
ch9=14
ch5=14
ch7=13
X
X
ch1=5
X
OUI
X
X
ch4=8
X
OUI
G
H
J
ch11=14
B
C
D
E
F
G
H
J
ch2=12
OUI
C’est maintenant au tour de l’arête allant de «F» à «B». On ajoute le sommet «B» à l’ensemble :
CB
A
B
C
D
E
F
G
H
J
CB
A
B
X
X
X
ch3=14
X
ch8=15
X
X
X
ch5=14
X
ch7=13
OUI
ch6=16
X
X
ch4=8
X
OUI
X
X
X
ch2=12
X
OUI
C
D
E
F
G
H
J
ch9=14
X
X
ch1=5
X
OUI
ch11=14
À cette étape c’est l’arête allant de «A» vers «C» qui est prise. Et quelques itérations plus tard on obtient
au final :
120
Eric L ALLET, Jean-Luc R AFFY
CB
A
B
C
D
E
F
CB
A
B
X
X
ch3=14
X
X
X
XX
ch8=15
X
X
X
X
ch5=14
X
X
X
X
ch7=13
X
OUI
X
X
X
ch6=16
X
X
X
ch4=8
X
OUI
X
X
X
ch2=12
X
OUI
X
X
X
ch9=14
X
OUI
X
X
ch1=5
X
OUI
C
D
G
H
h
h(
(
h(
h
(
ch13=13
OUI
h
h(
(
h(
(
h
ch15=17
h
h(
(
h(
h
(
ch11=14
J
E
X
X
X
ch10=5
X
OUI
F
h
h(
(
h(
h
(
ch14=15
OUI
h
h(
(
h(
(
h
ch16=13
OUI
G
H
J
h
h(
(
h(
h
(
ch12=16
Les 9 chemins à transformer en route sont donc : ch1, ch2, ch4, ch7, ch9, ch10, ch13, ch14, ch16.
La longueur totale à payer sera donc : 5+12+8+13+14+5+13+15+13=98 hm.
Et le nouveau plan de la commune est visible sur la figure A.22.
Centre Bourg
ch1
Bergerie
Fays
ch3
ch2
ch4
ch5
ch6
ch9
Dauberie
Aqueduc
ch10 Grignon
ch7
ch8
ch12
Croisée
ch11
Haies
ch13
Légende:
: Chemin
: Route
ch14
Iris
Epis d’or
ch15
ch16
Joncs
F IG . A.22 – Nouveau plan de la commune
A.4
Plus court chemin
A.4.1 Correction de l’exercice 4.1 de la page 42
Pour ce problème il faut rechercher un «plus court chemin» au sens du temps entre Lyon et Agen.
Il faut commencer par trouver le graphe qui va servir à résoudre le problème. Il n’est pas utile de
conserver les noeuds intermédiaires qui ne concernent que les changements de noms des routes (comme
Feurs, Orange, . . . ). Seuls les noeuds aux intersections des routes sont intéressants pour notre modèle.
Eric L ALLET, Jean-Luc R AFFY
121
Il faut aussi calculer le temps de parcours entre chacun des ces noeuds :
– Entre Lyon et Clermont-Ferrand : il y a 77km de nationales et 88 km d’autoroutes. (77/70+88/110)×
60 = 114 minutes de trajet.
– Entre Lyon et Montpellier : il y a 308km d’autoroutes. (308/110) × 60 = 168 minutes de trajet.
– Entre Lyon et Brioude : il y a 182km de nationales. (182/70) × 60 = 156 minutes de trajets.
– Entre Montpellier et Brioude : il y a 275km d’autoroutes. (275/110) × 60 = 150 minutes de trajet.
– Entre Brioude et Clermont-Ferrand : il y a 66km d’autoroutes. (66/110) × 60 = 36 minutes de trajet.
– Entre Clermont-Ferrand et Cahors : il y a 275km d’autoroutes. (275/110) × 60 = 150 minutes de
trajet.
– Entre Brioude et Cahors : il y a 238km de nationales. (238/70) × 60 = 204 minutes de trajet.
– Entre Montpellier et Montauband : il y a 275km d’autoroutes. (275/110) × 60 = 150 minutes de
trajet.
– Entre Cahors et Montauband : il y a 88km d’autoroutes. (88/110) × 60 = 48 minutes de trajet.
– Entre Cahors et Agen : il y a 105km de nationales. (105/70) × 60 = 90 minutes de trajet.
– Entre Montauband et Agen : il y a 66km d’autoroutes. (66/110) × 60 = 36 minutes de trajets.
On n’a pas d’aprioris sur le sens de parcours de l’axe transversal entre Montpellier et Clermont-Ferrand.
Il faudra donc mettre les arcs dans les deux sens pour ces routes.
On obtient le graphe de la figure A.23.
Clermont
150
11
4
36
36
Cahors
90
Agen
iou
de
182
48
Lyon
204
Br
36
150
8
150
16
Montauband
150
Montpellier
F IG . A.23 – Graphe modélisant les temps de trajet
Il nous reste à trouver le chemin le plus court (au sens du temps). On utilise l’algorithme de Ford-Moore.
m
0
1
λ(Ly)
0
λ(Cl)
H
∞
H
114/Ly
2
X
X
X
218/Br
3
X
X
X
186/Br
λ(Br)
H
∞
H
X
X
X
182/Ly
150/Cl
X
X
X
318/Ml
X
λ(M l)
H
∞
H
168/Ly
λ(Ca)
H
∞
H
λ(M b)
H
∞
H
X
X
X
332/Br
X
X
264/Cl X
318/Ml
X
X
X
386/Br
X
X
X
X
300/Br
X
X
X
354/Br
312/Ca
4
λ(Ag)
H
∞
H
X
X
354/Ca
X
X
X
X
354/Mt
X
348/Mb
changés
Ly
Cl
Br
Ml
Br
Ca
Mb
Mb
Ag
Ag
Γ+
Cl, Br, Ml
Ca, Br
Cl, Ca, Ml
Br, Mb
Cl, Ca, Ml
Mb, Ag
Ag
Ag
Le voyageur prendra donc 5h48 (348 minutes) pour faire le trajet. Il passera par les sommets Lyon,
Clermont, Cahors et Montauband.
Donc son plan de route consiste à commencer son voyage sur des nationales et des départementales
jusqu’à Feurs. Là, il passe sur le réseau autoroutier en rejoignant Clermont-Ferrand par l’A72. Il emprunte
alors l’A71 jusqu’à Combronde où il passe sur l’A89 jusqu’à Brive la Gaillarde. Il change alors en passant
sur l’A20 jusqu’à Montauband, où il rejoint l’A62 qui le mènera jusqu’à Agen.
122
Eric L ALLET, Jean-Luc R AFFY
A.4.2 Correction de l’exercice 4.2 de la page 42
Nous allons modéliser ce problème avec une recherche de plus court chemin, mais on a vu précédemment (page 25) qu’il était possible de le modéliser avec une recherche du chemin le plus long.
La recherche du plus court chemin sert à trouver un optimum reposant sur un graphe orienté. L’optimum
en question est un minimum. Que peut-on chercher à minimiser pour optimiser notre problème ? On a des
coûts et des gains. . . Les deux étant en fait un peu la même chose : un gain est un coût négatif, et un coût est
un gain négatif. Pour optimiser notre problème on doit soit maximiser les gains, soit minimiser les coûts.
La technique de la rechercher du plus court chemin est parfaite pour le recherche d’un minimum. On va
donc chercher à minimiser les coûts (en transformant les gains en coûts négatifs). La semaine de travail sera
rentable que si le minimum obtenu est un nombre négatif. Sinon cela signifiera qu’elle coûtera de l’argent.
Comment modéliser la semaine de travail d’Apollodore sur un graphe faisant apparaître les coûts ? On
va construire un graphe où chaque état représentera l’état du stock des repas d’Apollodore à la fin de chaque
journée. Il démarre avec un stock vide, et doit finir le vendredi avec un stock vide. Sa production est de 50
repas, et un banquet en utilise 100. Le stock maximal est de 100 repas. Donc à la fin de chaque journée il y
a trois états possibles pour ce stock : 0 repas, 50 repas ou 100 repas. Notre graphe devra donc passer par les
états de la figure A.24
F IG . A.24 – Tous les états possibles du stock d’Apollodore
Il faut maintenant placer les arcs entre ces états. Le lundi Apollodore peut ne rien faire (le stock reste
à 0) ou produire 50 repas (le stock passe à 50 -état Lun 50-). S’il produit 50 repas, cela va lui coûter 2k
euros. On va donc valuer cet arc avec la valeur 2 (notre unité sera le kilo euros). L’état Lun 100 ne peut pas
être atteint, il faudra le retirer du graphe. Le mardi le stock d’Apollodore ne lui permet pas de répondre à
la demande du premier banquet. Il n’a donc que 2 choix possibles : ne rien faire (son stock ne bouge pas),
ou produire 50 repas pour 2k euros (son stock monte de 50). Le mercredi il n’a pas accès aux cuisines pour
produire. Il n’a deux que deux choix : ne rien faire, ou servir les 100 repas du banquets de mercredi (si son
stock le lui permet). Ce banquet lui rapporte 3k euros (il faut penser à retirer le 1k euros que lui coûte le
service de chaque banquet). Comme ici on modélise avec des coûts, ce gain va être reporté comme un coût
négatif. L’arc va être valué avec la valeur -3. On continue ainsi jusqu’à la fin de la semaine et on arrive à la
figure A.25
Sur le graphe de la figure A.25, l’état «Jeu 50» se trouve en dehors de tout chemin menant au seul état
final acceptable (stock vide vendredi soir). Il faut donc le retirer de notre modélisation. On obtient le graphe
de la figure A.26.
On peut encore maintenant simplifier ce graphe avant de faire tourner l’algorithme de Ford-Moore : on
supprime les états sur lesquels il n’y qu’un seul arc entrant et un seul arc sortant. On remplace les 2 arcs par
un nouvel arc valué par la somme des deux valeurs. On obtient le graphe de la figure A.27.
Eric L ALLET, Jean-Luc R AFFY
123
F IG . A.25 – Ajouts des arcs suivants les actions d’Apollodore
F IG . A.26 – Graphe nettoyé des états impossibles
F IG . A.27 – Graphe simplifié avant algorithme
On applique l’algorithme de Ford-Moore sur ce graphe :
124
Eric L ALLET, Jean-Luc R AFFY
m
λ(D)
λ(L0)
λ(L50)
λ(M a50)
λ(M a100)
λ(M e0)
λ(J100)
λ(V 0)
0
1
0
∞
Z
Z
0/D
∞
Z
Z
2/D
∞
Z
Z
∞
Z
Z
∞
Z
Z
∞
Z
Z
∞
Z
Z
2/L0
2/L50
4/L50
2
3
0/L0
h
(
(
h
(h
(
h
1/Ma100
3/Ma50
h
(
(
h
(h
(
h
4/Ma100
0/Me0
0/J100
4
Sommets
changés
D
L0
L50
Ma50
Ma100
Me0
J100
Γ+
L0, L50
Me0, Ma50
Ma50, Ma100
J100
J100, Me0
V0
V0
V0
Le plus court chemin vers Ven0 a pour valeur 0. Donc le coût minimal pour une semaine de travail
d’Apollodore est de 0. Autrement dit, son gain (la valeur opposé du coût pour ce modèle) est de 0. Il vaut
mieux conseiller à Apollodore de ne pas travailler dans ces conditions.
A.4.3 Correction de l’exercice 4.3 de la page 42
Pour la seconde partie de ce problème, la modélisation est exactement la même, sauf que la présence
d’Aristodème permet d’ajouter d’autres chemins sur le graphe. En effet les jours de productions les deux
amis peuvent produire 100 repas. Et mardi, il est possible de consommer 100 repas pour le banquet et d’en
produire 50 par ailleurs et donc au bilan de n’en consommer que 50. On obtient donc le graphe de la figure
A.28
F IG . A.28 – Ajouts des arcs en tenant compte des actions d’Apollodore et d’Aristodème
Sur le graphe de la figure A.28, l’état «Jeu 50» se trouve en dehors de tout chemin menant au seul état
final acceptable (stock vide vendredi soir). Il faut donc le retirer de notre modélisation. On obtient le graphe
de la figure A.29.
On peut encore maintenant simplifier ce graphe avant de faire tourner l’algorithme de Ford-Moore : on
supprime les états sur lesquels il n’y qu’un seul arc entrant et un seul arc sortant. On remplace les 2 arcs par
un nouvel arc valué par la somme des deux valeurs. On obtient le graphe de la figure A.30.
Eric L ALLET, Jean-Luc R AFFY
125
F IG . A.29 – Graphe nettoyé des états impossibles
F IG . A.30 – Graphe simplifié avant algorithme
126
Eric L ALLET, Jean-Luc R AFFY
On applique alors l’alogorithme de Ford-Moore :
m
λ(D)
λ(L0)
λ(L50)
λ(L100)
λ(M a0)
λ(M a50)
λ(M a100)
λ(M e0)
λ(J100)
λ(V 0)
0
1
0
∞
Z
Z
0/D
∞
Z
Z
2/D
∞
Z
Z
4/D
∞
Z
Z
∞
Z
Z
∞
Z
Z
∞
Z
Z
∞
Z
Z
∞
Z
Z
X
X
0/L0
X
X
2/L0
X
X
2/L50
X
-2/L100
0/L100
2
3
Eric L ALLET, Jean-Luc R AFFY
4
5
4/L0
4/L50
4/L100
-2/Ma0
X
X
1/Ma50
X
h
(
h
(
(
(
h
h
(h
(h
(
h (
h
1/Ma100
4/Ma100
0/Me0
X
X
X
-2/Me0
X
X
-2/J100
X
-3/J100
Sommets
changés
D
L0
L50
L100
Ma0
Ma50
M100
Me0
J100
J100
V0
V0
Γ+
L0, L50, L100
Ma0, Ma50, Ma100
Ma50, Ma100
Ma0, Ma50, Ma100
Me0
J100
Me0, J100
J100, V0
V0
V0
127
Pour ce graphe le plus court chemin fait -3 : il passe par Début, Lun100, Mar0, Mer0, Jeu100 et Ven 0.
Cela signifie qu’Apollodore et Aristodème peuvent travailler ensemble cette semaine pour un coût de
-3k euros, autrement dit un gain de 3k euros. Ils ont donc intérêt à le faire.
Interprétons le chemin pour leur donner le bon scénario :
Début → Lun 100 Ils doivent monter leur stock à 100 dès le premier jour. Ils doivent donc travailler en
cuisine tous les deux le lundi.
Lun 100 → Mar 0 Ils doivent consommer les 100 repas (en servant le banquet du mardi), sans en produire
d’autres. Donc un seul des deux doit travailler le mardi au service du banquet du mardi, l’autre peut
se reposer.
Mar 0 → Mer 0 Leur stock ne bouge pas ce jour là. Le mercredi est un jour de repos pour les deux amis.
Mer 0 → Jeu 100 Ils doivent remonter leur stock à 100 le jeudi. Ils doivent donc travailler en cuisine tous
les deux.
Jeu 100 → Ven 0 Ils doivent consommer les 100 repas (en servant le banquet du vendredi), sans en produire d’autres. Donc un seul des deux doit travailler le vendredi au service du banquet du vendredi,
l’autre peut se reposer.
A.5
Flot maximal
A.5.1 Correction de l’exercice 5.1 de la page 52
Il s’agit d’un problème de flot maximal.
La première étape consiste à dessiner le graphe des cursus possibles pour les élèves. Ils vont devoir
passer par l’acquisition des trois U V . Comme la seconde école a des accords d’équivalence avec les deux
autres, il peut y avoir des échanges entre cette école et les autres à chaque étape de la formation. Mais
encore faut-il que les dates le permettent. Comme la première école commence plus tôt, les seuls transferts
possibles avec elle vont de la première vers la seconde. Et comme la troisième école termine toujours ses
U V après le début de la seconde, les transferts possibles entre elles vont de la deuxième vers la troisième.
On arrive au graphe de la figure A.31. Sur cette figure «D» signale les débuts de formation, «F» les fins.
Le premier nombre qui suit désigne l’école, et après le point le second nombre désigne l’U V . Donc par
exemple «D2.3» désigne le début de la formation pour l’U V3 dans l’école 2.
F IG . A.31 – Graphe modélisant le cursus des élèves
Ce premier modèle peut être simplifié. Il est possible de supprimer les noeuds qui n’ont qu’une seule
arête entrante et une seule arête sortante. On remplace alors ces deux arêtes par une arête ayant la capacité
minimale des deux arêtes.
c1
S1
−→
c2
S2
−→
min(c1 , c2 )
S3
devient
S1
−→
S3
On obtient alors le graphe de la figure A.32.
Maintenant il faut trouver le flot maximal que l’on peut faire circuler sur ce graphe. Pour cela on va
commencer avec un flot représentant le cas où chaque élève essaye de suivre la totalité de son cursus dans
une seule école. En saturant chaque école on arrive au flot de la figure A.33.
128
Eric L ALLET, Jean-Luc R AFFY
F IG . A.32 – Graphe simplifié
F IG . A.33 – Premier flot. Chaque élève reste dans son école de départ
Ensuite on utilise l’algorithme de Ford-Fulkerson pour voir s’il est possible d’améliorer ce flot. La figure
A.34 montre le marquage d’une chaîne qui permet de marquer le puits (on n’a laissé sur le graphe que les
marquages appartenant à cette chaîne).
F IG . A.34 – Marquage d’une chaîne améliorante
On obtient la donc chaîne suivante :
40 − 20 = 20
Début
−→
∞−0 = ∞
F1.1
−→
30
D2.2
←−
∞−0 =∞
F2.1
−→
35 − 20 = 15
D3.2+3
−→
Fin
On calcule les capacités restantes sur les arcs directs de cette chaîne et le flot passant sur les arcs inverses
(il n’y qu’un seul arc inverse pour notre cas), et on prend le minimum de ces valeurs : 15. Il est donc possible
d’augmenter de 15 le flot entre Début et Fin. Il faut ajouter 15 aux flots des arcs directs de la chaîne et retirer
15 à l’arc inverse. On obtient le nouveau flot de la figure A.35
Le flot est maintenant de 85 élèves.
On tente une nouvelle itération de l’algorithme de Ford-Fulkerson. On n’arrive plus à marquer le puits
(voir figure A.36). Donc le flot maximal est déjà atteint.
Le flot maximal est de 85.
Pour obtenir la formation de 85 élèves, l’organisme doit envoyer 35 élèves suivre l’U V1 dans la première
école. 20 de ces élèves continueront la formation dans celle-ci, mais 15 autres iront faire les U V2 et U V3
dans la deuxième école. Il doit aussi envoyer 30 élèves suivre l’U V1 dans la deuxième école. 15 continueront
dans celle-ci, mais 15 autres iront suivre le module qui regroupe les U V2 et U V3 dans la troisième école.
Enfin 20 élèves feront toutes les U V dans la troisième école.
Eric L ALLET, Jean-Luc R AFFY
129
F IG . A.35 – Nouveau flot après amélioration
F IG . A.36 – Nouveau marquage : impossible de trouver une chaîne améliorante
A.5.2 Correction de l’exercice 5.2 de la page 53
Il s’agit d’un problème de type flot-maximal à coût minimal. Mais attention, on sait que la capacité de
notre réseau est de 85 élèves. On veut n’en faire passer que 63. Donc il faudra arrêter l’algorithme avant le
flot maximal.
Le schéma modélisant notre problème est celui de la figure A.37.
F IG . A.37 – Graphe modélisant la recherche du flot maximal à coût minimal
Il est possible de simplifier ce graphe. On peut supprimer tous les noeuds n’ayant qu’une seule arête
entrante et une seule arête sortant. On remplace ces deux arêtes par une arête ayant la capacité minimale et
la somme des coûts des deux arêtes.
cap1 /coût1
S1
−→
cap2 /coût2
S2
−→
min(cap1 ,cap2 )/coût1 +coût2
S3
devient
S1
−→
S3
On obtient le graphe de la figure A.38.
Il faut mettre en œuvre l’algorithme de Busacker et Gowen. Pour cela on démarre avec un flot nul, et on
recherche le chemin le plus court (au sens du coût) allant de la source au puits. Il s’agit du chemin1 passant
pas les U V de l’école 2 . Le coût de ce chemin est de 24k euros. Sa capacité maximale est de 30 élèves.
On peut donc déjà placer un premier flot de 30 élèves sur le graphe (voir figure A.39) dont le coût global
1 Pour
130
alléger la correction de cet exercice, les calculs de recherche des chemins les plus courts ne seront pas reportés ici
Eric L ALLET, Jean-Luc R AFFY
F IG . A.38 – Graphe simplifié
est 24k × 30 = 720k euros. On peut aussi calculer le nouveau graphe associé pour l’étape suivante (figure
A.39).
F IG . A.39 – Premier flot de 30 élèves
Sur le nouveau graphe associé, le plus court chemin passe par Début → F1.1 → D2.2 → F2.1 → D3.2+3
→ Fin. Son coût est de 30k euros. Sa capacité est de 30 élèves (concrètement à cette étape de l’algorithme,
on demanderait à 30 élèves de l’école 2 de poursuivre leur scolarité dans l’école 3 pour que 30 élèves de
l’école 1 puissent finir à moindre coût leur apprentissage dans l’école 2). Le coût globale de ce flot est de
30k × 30 = 900k euros. On obtient les nouveaux graphes de la figure A.40.
On n’a toujours pas atteint le flot de 63 élèves. On doit donc continuer l’algorithme. Sur le nouveau
graphe associé, le chemin le plus court est celui qui passe par l’école 3. Son coût est de 33k euros, et sa
capacité de 5 élèves. Mais il ne nous manque que 3 élèves pour atteindre le flot recherché. Il suffit donc de
rajouter 3 élèves pour un coût de 33k × 3 = 99k euros. On obtient le flot de la figure A.41.
La solution optimale coûte 720k + 900k + 99k = 1719k euros. Elle consiste à envoyer 30 élèves faire
l’U V1 dans l’école 1, et les U V2 et U V3 dans l’école 2. 30 autres élèves feront l’U V1 dans l’école 2, et
suivront le module réunissant les U V2 et U V3 dans l’école 3. Enfin les 3 derniers feront toutes les U V dans
l’école 3.
Eric L ALLET, Jean-Luc R AFFY
131
F IG . A.40 – Un second flot de 30 autres élèves
F IG . A.41 – Solution optimale pour 63 élèves
A.6
Méthode géométrique et Simplexe
A.6.1 Correction de l’exercice 8.1 de la page 74
Il s’agit d’un problème de programmation linéaire.
Commençons par trouver la fonction économique à optimiser. Si on nomme F1 le nombre de tonnes
de fromage AOC vendues en une année et F2 le nombres de tonnes de l’autre fromage, la marge annuelle
(exprimée en k euros) de l’entreprise est : Z = 3 × F1 + F2 .
Les ressources imposent des contraintes sur la production :
– La laiterie reçoit 4 millions de litres de lait de la zone AOC, et la tonne de fromage AOC en utilise
10 000 litres : 10000 × F1 ≤ 4 000 000
– La laiterie reçoit 10 millions de litres de lait (4 millions de la zone AOC et 6 millions d’autres zones),
et tout ce qui n’est pas utilisé par le fromage AOC (10 000 × F1 ) peut être utilisé pour le second
fromage qui en utilise 7 500 litres par tonne : 7 500 × F2 ≤ 10 000 000 − 10 000 × F1
– La tonne de fromage AOC nécessite 30 heures de travail, et celle de l’autre fromage 15 heures. La
laiterie dispose de 21 000 heures : 30 × F1 + 15 × F2 ≤ 21 000.
Donc on obtient (après avoir repasser la variable F1 de la seconde contrainte dans le membre de
gauche) :

10 000 × F1 ≤ 4 000 000




 10 000 × F1 + 7 500 × F2 ≤ 10 000 000
30 × F1 + 15 × F2 ≤ 21 000


Trouver
le max de Z = 3 × F1 + F2



Avec F1 ≥ 0 et F2 ≥ 0
132
Eric L ALLET, Jean-Luc R AFFY
Après simplifications :

F1 ≤ 400




 4 × F1 + 3 × F2 ≤ 4 000
2 × F1 + F2 ≤ 1 400


Trouver
le max de Z = 3 × F1 + F2



Avec F1 ≥ 0 et F2 ≥ 0
Ici deux techniques sont utilisables : le simplexe et la méthode géométrique. On va utiliser cette dernière.
La délimitation du domaine de solution est visible sur le figure A.42
F IG . A.42 – Domaine de solution
On place ensuite la droite représentant la fonction économique Z = 3 × F1 + F2 et on la monte jusqu’à
atteindre les limites du domaine. Elle atteint sont maximum lorsqu’elle passe par le point F1 = 400 et
F2 = 600 (voir figure A.43) Donc le meilleurs choix économique consiste à utiliser tout le lait de la zone
AOC pour fabriquer 400 tonnes du fromage AOC (la maximum que l’on puisse faire), et à utiliser l’autre
lait pour fabriquer 600 tonnes fromages de l’autre catégorie. Le bénéfice sera alors de 3×400+600 = 1800
k euros, c’est à dire 1,8 millions d’euros.
Notez que les deux contraintes qui bloquent la production sont d’une part la quantité de lait AOC
(F1 ≤ 400) et d’autre part le nombre d’heures de travail (2 × F1 + F2 ≤ 1400) (les deux droites qui se
croisent au point optimal). La contrainte sur l’autre lait ne bloque pas. D’ailleurs la solution n’utilise que
4,5 millions de litres de lait de la zone non AOC. Il en reste donc 1,5 millions de litres sans usage.
F IG . A.43 – Résolution géométrique pour Z = 3 × F1 + F2
Eric L ALLET, Jean-Luc R AFFY
133
A.6.2 Correction de l’exercice 8.2 de la page 75
La modélisation du problème est identique à celle de la question du précédente exceptée pour Z qui
change : Z = 2 × F1 + F2 (toujours en k euros).

F1 ≤ 400




 4 × F1 + 3 × F2 ≤ 4 000
2 × F1 + F2 ≤ 1400


Trouver
le max de Z = 2 × F1 + F2



Avec F1 ≥ 0 et F2 ≥ 0
Le domaine de solution ne change pas, on retrouve celui de la figure A.42. Par contre la droite qui va
représenter Z n’a plus la même pente. Elle a exactement la même pente que la troisième contrainte. Donc
lorsqu’on fait monter cette droite vers son maximum, elle va se confondre avec la droite qui exprime la
troisième contrainte (voir figure A.44).
F IG . A.44 – Résolution géométrique pour Z = 2 × F1 + F2
Dans ce cas la solution optimale est donnée par tout un segment de droite : le segment compris entre
les points (F1 = 100, F2 = 1200) et (F1 = 400, F2 = 600). Donc la solution optimale consiste à fabriquer
entre 100 et 400 tonnes du fromage AOC et à utiliser tout le reste du temps de travail pour fabriquer entre
1200 et 600 tonnes de l’autre fromage. Toutes ces solutions rapporteront 1,4 millions d’euros. La solution
qui consiste à fabriquer 400 tonnes du fromage AOC et 600 tonnes de l’autre fromage va laisser 1,5 millions
de litres de lait (non AOC) sans usage. Si la laiterie arrive à les valoriser autrement, il sera certainement
judicieux de choisir cette solution.
Voici une seconde correction du même exercice, mais obtenue avec le simplexe :
Le tableau du simplexe est :
E1
E2
E3
∆j
F1
1
4
2
2
F2
0
3
1
1
E1
1
0
0
0
E2
0
1
0
0
E3
0
0
1
0
Somme
400
4000
1400
0
La premier pivot est sur la colonne de F1 et la ligne de E1 . Après pivotement de F1 à la place de E1 on
obtient :
F1
E2
E3
∆j
F1
1
0
0
0
F2
0
3
1
1
E1
1
-4
-2
-2
E2
0
1
0
0
E3
0
0
1
0
La second pivot est sur la colonne de F2 et la ligne de E3 .
134
Eric L ALLET, Jean-Luc R AFFY
Somme
400
2400
600
-800
F1
E2
F2
∆j
F1
1
0
0
0
F2
0
0
1
0
E1
1
2
-2
0
E2
0
1
0
0
E3
0
-3
1
-1
Somme
400
600
600
-1400
Tout les ∆j sont négatifs ou nuls, on a donc une solution optimale (400 tonnes de fromage AOC, et 600
tonnes de l’autre fromage pour un gain de 1,4 millions d’euros). Mais la variable E1 n’est pas en base et
a un ∆j nul. Il existe donc d’autres solutions optimales. On peut faire pivoter cette variable pour connaître
l’autre sommet du segment de solutions (la ligne du pivot est celle de E2 ) :
F1
E1
F2
∆j
F1
1
0
0
0
F2
0
0
1
0
E1
0
1
0
0
E2
-1/2
1/2
1
0
E3
1.5
-3/2
-2
-1
Somme
100
300
1200
-1400
Donc l’autre solution consiste à fabriquer 100 tonnes du fromage AOC, 1200 tonnes de l’autre fromage
pour le même bénéfice (et bien sûr, toutes les solutions intermédiaires sont aussi valables).
Comme dit précédemment, choisir de fabriquer 400 tonnes de fromage AOC permet de laisser 1,5
millions de litres de lait non AOC sans usage. Et comme il sera probablement possible de le revendre pour
augmenter les profits, on choisira certainement cette solution.
A.6.3 Correction de l’exercice 8.3 de la page 75
Il s’agit d’un problème de programmation linéaire.
Il faut commencer par trouver la fonction économique à optimiser. Il faut maximaliser la marge de
l’entreprise. Si on nome P1 l’électricité achetée au producteur 1, P2 celle du producteur 2, et P3 celle du
producteur 3, cette marge se définit par : Z = 900 × P1 + 700 × P2 + 500 × P3 (unités : k euro et TWh).
Il faut ensuite mettre les contraintes en équation :
– On ne pourra pas vendre plus de 18 TWh : P1 + P2 + P3 ≤ 18. Avec les chiffres de cet exemple
où les producteurs offrent plus de 18 TWh et où chaque TWh vendu rapporte de l’argent, on pourrait
remplacer le «≤» par un «=», et donc faire disparaître du problème une des trois variables. Mais en
faisant ainsi on perdrait le coté général de la modélisation. Le modèle «≤» demeure valable si on
modifie les chiffres et que par exemple on ne trouve plus assez d’électricité sur le marché, ou que
certains fournisseurs nous obligeraient à avoir des marges négatives sur leur électricité.
– Le producteur 1 nous propose au maximum 25 TWh : P1 ≤ 25. Évidemment, la contrainte précédente
est bien plus forte que celle-ci, mais à cette étape, on modélise : les simplifications viendront plus
tard.
– Le producteur 2 nous propose au maximum 6 TWh : P2 ≤ 6
– Le producteur 3 nous propose au maximum 4 TWh : P3 ≤ 4
– Il faut 25% d’électricité renouvelable dans le total vendu. La part d’électricité renouvelable est 0.1 ×
P1 + 0.46 × P3 + P3 . Le total de l’électricité vendu est P1 + P2 + P3 . Il faut donc 0.1 × P1 + 0.46 ×
P3 + P3 ≥ 0.25 × (P1 + P2 + P3 ), ce qui revient à dire : 0.15 × P1 − 0.21 × P1 − 0.75 × P3 ≤ 0
En résumé on obtient :

P1 + P2 + P3 ≤ 18




P1 ≤ 25




 P2 ≤ 6
P3 ≤ 4


0.15 × P1 − 0.21 × P2 − 0.75 × P3 ≤ 0




Trouver le max de Z = 900 × P1 + 700 × P2 + 500 × P3



Avec P1 ≥ 0, P2 ≥ 0, P3 ≥ 0
Maintenant que toutes les contraintes ont été bien modélisées, on peut simplifier certaines choses :
Comme on a P2 ≥ 0, et P3 ≥ 0 la contrainte P1 + P2 + P3 ≤ 18 implique P1 ≤ 18. Donc elle implique
aussi P1 ≤ 25 que l’on peut retirer de notre problème sans perte d’information. En simplifiant les équations
cela donne :
Eric L ALLET, Jean-Luc R AFFY
135

P1 + P2 + P3 ≤ 18




P2 ≤ 6



P3 ≤ 4
5 × P1 − 7 × P2 − 25 × P3 ≤ 0




Trouver le max de Z = 9 × P1 + 7 × P2 + 5 × P3



Avec P1 ≥ 0, P2 ≥ 0, P3 ≥ 0
Avec Z exprimé en «100 k euros».
Le tableau du simplexe donne :
P1
1
0
0
5
9
E1
E2
E3
E4
∆j
P2
1
1
0
-7
7
P3
1
0
1
-25
5
E1
1
0
0
0
0
E2
0
1
0
0
0
E3
0
0
1
0
0
E4
0
0
0
1
0
Somme
18
6
4
0
0
Selon le premier critère de Dantzig, le premier pivot est sur la colonne de P1 . Ensuite le second critère
de Dantzig donne le pivot de sur la ligne de E4 (attention, il est tout à fait correct de choisir un 0 dans la colonne «Somme», par contre dans les colonnes des variables on ne peut sélectionner qu’un pivot strictement
positif).
On pivote donc P1 à la place de E4 (attention, soustraire un nombre négatif, veut dire l’ajouter).
E1
E2
E3
P1
∆j
P1
0
0
0
1
0
P2
2.4
1
0
-1.4
19.6
P3
6
0
1
-5
50
E1
1
0
0
0
0
E2
0
1
0
0
0
E3
0
0
1
0
0
E4
-0.2
0
0
0.2
-1.8
Somme
18
6
4
0
0
Il reste des ∆j strictement positifs, donc on continue. Le second pivot est sur la colonne de P3 , et la
ligne de E1 . On pivote P3 à la place de E1 .
P3
E2
E3
P1
∆j
P1
0
0
0
1
0
P2
0.4
1
0
0.6
-0.4
P3
1
0
1
0
0
E1
1/6
0
0
5/6
-25/3
E2
0
1
0
0
0
E3
0
0
1
0
0
E4
-1/30
0
1/30
1/30
-1/5
Somme
3
6
1
15
-150
Tous les ∆j sont négatifs ou nuls. Le simplexe s’arrête là.
On a P1 = 15, P3 = 3. P2 n’est pas en base, donc P2 = 0. Et Z = 150.
L’entreprise doit donc acheter 15 TWh au premier producteur, 3 au troisième producteur et elle fera une
marge de 150 «100 k euros», c’est à dire 15 millions d’euros.
136
Eric L ALLET, Jean-Luc R AFFY
A.6.4 Correction de l’exercice 8.4 de la page 75
Pour la modélisation, seule la fonction économique change par rapport à l’exercice précédent : Z =
850 × P 1 + 710 × P 2 + 500 × P 3
Donc on obtient :

P1 + P2 + P3 ≤ 18




P1 ≤ 25




 P2 ≤ 6
P3 ≤ 4


0.15 × P1 − 0.21 × P2 − 0.75 × P3 ≤ 0




Trouver le max de Z = 850 × P1 + 710 × P2 + 500 × P3



Avec P1 ≥ 0, P2 ≥ 0, P3 ≥ 0
En simplifiant et en exprimant Z en «10 k Euros» :

P1 + P2 + P3 ≤ 18




P2 ≤ 6



P3 ≤ 4
5 × P1 − 7 × P2 − 25 × P3 ≤ 0




Trouver
le max de Z = 85 × P1 + 71 × P2 + 50 × P3



Avec P1 ≥ 0, P2 ≥ 0, P3 ≥ 0
D’où le tableau du simplexe suivant :
P1
1
0
0
5
85
E1
E2
E3
E4
∆j
P2
1
1
0
-7
71
P3
1
0
1
-25
50
E1
1
0
0
0
0
E2
0
1
0
0
0
E3
0
0
1
0
0
E4
0
0
0
1
0
Somme
18
6
4
0
0
Les deux pivotements vont êtres les mêmes que dans l’exercice précédent, et seule la ligne des ∆j
change.
Premier pivotement :
E1
E2
E3
P1
∆j
P1
0
0
0
1
0
P2
2.4
1
0
-1.4
190
P3
6
0
1
-5
475
E1
1
0
0
0
0
E2
0
1
0
0
0
E3
0
0
1
0
0
E4
-0.2
0
0
0.2
-17
E1
1/6
0
0
5/6
-475/6
E2
0
1
0
0
0
E3
0
0
1
0
0
E4
-1/30
0
1/30
1/30
-7/6
Somme
18
6
4
0
0
Second pivotement :
P3
E2
E3
P1
∆j
P1
0
0
0
1
0
P2
0.4
1
0
0.6
0
P3
1
0
1
0
0
Somme
3
6
1
15
-1425
On arrive à une solution optimale (toujours en prenant 15 TWh chez le premier producteur, et 3 chez
les troisièmes), qui rapporte 14,25 millions d’euros.
Mais cette fois ci, à la fin du second pivotement il y a une variable hors base qui a son ∆j nul (P2 ). Cela
signifie qu’il y a d’autres solutions optimales. En faisant un troisième pivotement pour faire entrer P2 dans
la base on obtient (selon le second critère de Dantzig la ligne de pivotement est celle de E2 ) :
Eric L ALLET, Jean-Luc R AFFY
137
P3
P2
E3
P1
∆j
P1
0
0
0
1
0
P2
0
1
0
0.6
0
P3
1
0
1
0
0
E1
1/6
0
0
5/6
-475/6
E2
-0.4
1
0
-0,6
0
E3
0
0
1
0
0
E4
-1/30
0
1/30
1/30
-7/6
Somme
0.6
6
1
11.4
-1425
On obtient alors une autre solution optimale qui consiste à acheter 11,4 TWh chez le premier constructeur, 6 TWh chez le second et 0,6 chez le troisième (toujours pour un profit de de 14,25 millions d’euros). Il
y a en fait tout un segment de droite compris entre les deux solutions qui donneront ce même profit optimal.
Le revendeur peut donc acheter les 6 TWh du second producteur tout en gardant le meilleurs profit.
A.7
Dual
A.7.1 Correction de l’exercice 9.1 de la page 80
Il s’agit d’un problème de programmation linéaire, avec une fonction à minimiser. On va donc passer par
le problème dual pour résoudre avec le simplexe un problème de programmation linéaire avec une fonction
à maximiser.
Il faut commencer par modéliser le problème et établir sa forme canonique.
Si on nomme P1 la production électrique achetée au fournisseur 1, P2 celle du fournisseur 2, et P3 celle
du fournisseur 3, la fonction économique à minimiser est (Z exprimé en M euros) :
Z = 65 × P1 + 73 × P2 + 83 × P3
Il faut aussi respecter les diverses contraintes :
– Il faut acheter au moins 18 TWh d’électricité (peut-être est-il rentable d’en acheter plus pour avoir
le quota d’électricité renouvelable, quitte à revendre le surplus à un autre vendeur d’électricité) :
P1 + P2 + P3 ≥ 18
– Il faut fournir au moins 25% d’électricité renouvelable : 0.1 × P1 + 0.45 × P2 + P3 ≥ 18 × 0.25
– Le fournisseur 2 est limité à 6 TWh : P2 ≤ 6
– Le fournisseur 3 est limité à 4 TWh : P3 ≤ 4
En mettant toutes ces inégalités sous leur forme canonique, on obtient :
Minimiser Z avec :




















Z=



(1)
(2)
1 ×P1
0.1 ×P1
+1
×P2
+0.45 ×P2
−1
×P2
65 ×P1
P1 ≥ 0,
+73 ×P2
P2 ≥ 0 et
(Z ′ )
(3)
+1
+1
×P3
×P3
−1 ×P2
+83 ×P3
P3 ≥ 0
≥
≥
≥
≥
18
4.5
−6
−4
Pour résoudre ce problème de minimisation, on va passer à son problème dual de maximisation et
ensuite utiliser le simplexe. Le problème dual est donc :
Trouver le maximum de Z ′ avec

(1)




 (2)
(3)


Z′ =



1
1
1
18
Y1
×Y1
×Y1
×Y1
×Y1
≥ 0,
+0.1 ×Y2
+0.45 ×Y2
+1
×Y2
+4.5 ×Y2
Y2 ≥ 0,
−1 ×Y3
−6 ×Y3
Y3 ≥ 0 et
−1 ×Y4
−4 ×Y4
Y4 ≥ 0
≤
≤
≤
65
73
83
Nous allons éviter de simplifier les inégalités. Cela apporterait des changements d’unité pour les valeurs
marginales dans le tableau du simplexe. Comme nous traitons le dual du problème d’origine ce sont juste138
Eric L ALLET, Jean-Luc R AFFY
ment ces valeurs qui contiendront la solution. Pour éviter de compliquer le suivi des unités, nous allons les
garder ainsi (ce sont des TWh achetés en million d’euros).
Voici le tableau du simplexe pour la première itération :
E1
E2
E3
∆j
Y1
1
1
1
18
Y2
0.10
0.45
1
4.50
Y3
0
-1
0
-6
Y4
0
0
-1
-4
E1
1
0
0
0
E2
0
1
0
0
E3
0
0
1
0
Somme
65
73
83
0
Le premier pivot est sur la colonne de Y1 et la ligne de E1 . Après avoir pivoté, on obtient :
Y1
1
0
0
0
Y1
E2
E3
∆j
Y2
0.10
0.35
0.90
2.70
Y3
0
-1
0
-6
Y4
0
0
-1
-4
E1
1
-1
-1
-18
E2
0
1
0
0
E3
0
0
1
0
Somme
65
8
18
-1170
Il reste un ∆j strictement positif, l’algorithme continue. Le second pivot est sur la colonne de Y2 et la
ligne de E3 . Après avoir pivoté, on obtient :
Y1
E2
Y2
∆j
Y1
1
0
0
0
Y2
0
0
1
0
Y3
0
-1
0
-6
Y4
1/9
7/18
-10/9
-1
E1
10/9
-11/18
-10/9
-15
E2
0
1
0
0
E3
-1/9
-7/18
10/9
-3
Somme
63
1
20
-1224
Tous les ∆j sont négatifs ou nuls. L’algorithme s’arrête ici. La valeur marginale pour E1 est -15, pour
E2 0, et E3 -3. Z ′ vaut 1224.
Donc lorsqu’on revient au problème primal, on a P1 = 15, P2 = 0, P3 = 3 et Z = 1224.
Le revendeur d’électricité doit donc acheter 15 TWh d’électricité au fournisseur 1, rien au fournisseur
2, et 3 TWh au fournisseur 3. Celui lui coûtera 1224 M euros, c’est à dire 1,224 milliard d’euros.
A.8
Simplexe : le cas général
A.8.1 Correction de l’exercice 10.1 de la page 84
Il s’agit d’un problème de programmation linéaire, avec une fonction à minimiser.
Il faut commencer par modéliser le problème et établir sa forme canonique.
Pour éviter de manipuler des nombres avec trop de zéro, les variables choisies désigneront 1000 lots.
Ainsi les variables utilisées seront :
– L1 : le nombre de «1000 lots 1» achetés par le traiteur (c’est à dire 5 tonnes de noix de pécan, 2
tonnes de noix de cajou).
– L2 : le nombre de «1000 lots 2» achetées par le traiteur (c’est à dire 15 tonnes de noix de pécan, 2
tonnes de noix de cajou, et 30 tonnes de cacahouètes).
– L3 : le nombre de «1000 lots» revendus par le traiteur à son confrère (c’est à dire 5 tonnes de noix de
pécan, et 20 tonnes de cacahouètes).
La fonction économique à minimiser est Z = 110 × L1 + 224 × L2 − 60 × L3 , avec Z exprimé en k
euros.
Il faut traduire les contraintes en équations :
– Il n’y a que 2000 lots 2 en vente : L2 ≤ 2
– Le traiteur a besoin de 25 tonnes de noix de pécan : 5 × L1 + 15 × L2 − 5 × L3 ≥ 25
– Le traiteur a besoin de 6 tonnes de noix de cajou : 2 × L1 + 2 × L2 ≥ 6
– Il faut acheter les cacahouètes des lots revendus : 30 × L2 ≥ 20 × L3
Eric L ALLET, Jean-Luc R AFFY
139
Donc en mettant toutes ces contraintes sous la forme canonique, il faut minimiser Z avec :












(1)
5
2
(2)
×L1
×L1








Z = 110 ×L1



L1 ≥ 0,
(Z ′ )
(3)
−1 ×L2
+15 ×L2
+2 ×L2
30
×L2
+224 ×L2
L2 ≥ 0 et
−5
×L3
−20 ×L3
−60 ×L3
L3 ≥ 0
≥
≥
≥
≥
−2
25
6
0
Pour résoudre ce problème de minimisation, on va passer à son problème dual de maximisation et
ensuite utiliser le simplexe. Le problème dual est donc :
Trouver le maximum de Z ′ avec

(1)




−1 ×Y1
 (2)
(3)


Z ′ = −2 ×Y1



Y1 ≥ 0,
5
×Y2
+15 ×Y2
−5 ×Y2
+25 ×Y2
Y2 ≥ 0,
+2 ×Y3
+2 ×Y3
+6 ×Y3
Y3 ≥ 0 et
+30 ×Y4
−20 ×Y4
≤
≤
≤
110
224
−60
Y4 ≥ 0
Le second membre de l’inégalité (3) de la forme canonique est négatif. La solution Y1 = 0, Y2 = 0,
Y3 = 0 et Y4 = 0 n’est donc pas dans le domaine de solutions admissibles. Il faudra utiliser la méthode du
cas général et utiliser une variable artificielle pour construire la première solution évidente utile au simplexe.
De plus nous n’allons pas simplifier les inégalités. Celles-ci apporteraient des changements d’unité pour
les valeurs marginales dans le tableau du simplexe. Comme nous traitons le dual du problème d’origine ce
sont justement ces valeurs qui contiendront la solution. Pour éviter de compliquer le suivi des unités, nous
allons les garder ainsi (ce sont des «milliers lots» achetés ou revendus).
Transformons le problème sous la forme standard :
Il faut trouver le maximum de Z ′ avec :

(1) 5 × Y2 + 2 × Y3 + E1 = 110




 (2) −Y1 + 15 × Y2 + 2 × Y3 + 30 × Y4 + E2 = 224
(3) −5 × Y2 − 20 × Y4 + E3 = −60


Z ′ = −2 × Y1 + 25 × Y2 + 6 × Y3



Y1 ≥ 0, Y2 ≥ 0, Y3 ≥ 0, Y4 ≥ 0, E1 ≥ 0 E2 ≥ 0, E3 ≥ 0
Pour construire une première solution admissible évidente on inverse les signes de l’équation (3) pour
obtenir un second membre positif, et on lui ajoute une variable artificielle (X1 ≥ 0 ). Pour que l’algorithme
du simplexe tende à annuler X1 en cherchant à maximiser Z ′ , ajoute «−k × X1 » à son expression avec k,
une constante positive très grande :

(1) 5 × Y2 + 2 × Y3 + E1 = 110




 (2) −Y1 + 15 × Y2 + 2 × Y3 + 30 × Y4 + E2 = 224
(3) 5 × Y2 + 20 × Y4 + X1 − E3 = 60


Z ′ = −2 × Y1 + 25 × Y2 + 6 × Y3 − k × X1



Y1 ≥ 0, Y2 ≥ 0, Y3 ≥ 0, Y4 ≥ 0, E1 ≥ 0 E2 ≥ 0, E3 ≥ 0, X1 ≥ 0
Et partant de la solution Y1 = 0, Y2 = 0, Y3 = 0, Y4 = 0 et E3 = 0 :
– (1) donne E1 = 110
– (2) donne E2 = 224
– (3) donne X1 = 60
X1 est en base au début de l’algorithme du simplexe. On va donc le faire disparaître de l’expression de
Z ′ . L’équation (3) donne : X1 = 60 + E3 − 5 × Y2 − 20 × Y4 . Donc :
Z ′ = −2 × Y1 + 25 × Y2 + 6 × Y3 − k (60 + E3 − 5 × Y2 − 20 × Y4 )
{z
}
|
X1
Z = −2 × Y1 + (25 + 5k) × Y2 + 6 × Y3 + 20k × Y4 − k × E3 − 60k
′
140
Eric L ALLET, Jean-Luc R AFFY
En résumé, il faut trouver le maximum de Z ′ avec :

(1) 5 × Y2 + 2 × Y3 + E1 = 110




 (2) −Y1 + 15 × Y2 + 2 × Y3 + 30 × Y4 + E2 = 224
(3) 5 × Y2 + 20 × Y4 + X1 − E3 = 60


−2 × Y1 + (25 + 5k) × Y2 + 6 × Y3 + 20k × Y4 − k × E3 = Z ′ + 60k



Y1 ≥ 0, Y2 ≥ 0, Y3 ≥ 0, Y4 ≥ 0, E1 ≥ 0, E2 ≥ 0, E3 ≥ 0, X1 ≥ 0
avec pour solution admissible de départ : Y1 = 0, Y2 = 0, Y3 = 0, Y4 = 0, E3 = 0, E1 = 110,
E2 = 224 et X1 = 60.
Cela donne ce premier tableau pour le simplexe :
E1
E2
X1
∆j
Y1
0
-1
0
-2
Y2
5
15
5
25+5k
Y3
2
2
0
6
Y4
0
30
20
20k
X1
0
0
1
0
E1
1
0
0
0
E2
0
1
0
0
E3
0
0
-1
-k
Somme
110
224
60
60k
k est une constante positive très grande. Donc le premier pivot est sur la colonne Y4 et sur la ligne de
X1 .
E1
E2
Y4
∆j
Y1
0
-1
0
-2
Y2
5
15/2
1/4
25
Y3
2
2
0
6
Y4
0
0
1
0
X1
0
-3/2
1/20
-k
E1
1
0
0
0
E2
0
1
0
0
E3
0
3/2
-1/20
0
Somme
110
134
3
0
E2
0
1
0
0
E3
1
3
-1/5
5
Somme
50
44
12
-300
E2
-1
1/2
0
-3
E3
-2
3/2
-1/5
-4
Somme
6
22
12
-432
Le second pivot est sur la colonne de Y2 et la ligne de Y4 .
E1
E2
Y2
∆j
Y1
0
-1
0
-2
Y2
0
0
1
0
Y3
2
2
0
6
Y4
-20
-30
4
-100
X1
-1
-3
1/5
-5-k
E1
1
0
0
0
Le troisième pivot est sur la colonne de Y3 et la ligne de E2 .
E1
Y3
Y2
∆j
Y1
1
-1/2
0
1
Y2
0
0
1
0
Y3
0
1
0
0
Y4
10
-15
4
-10
X1
2
-3/2
1/5
4-k
E1
1
0
0
0
Le quatrième pivot est sur la colonne de Y1 et la ligne de E1 .
Y1
Y3
Y2
∆j
Y1
1
0
0
0
Y2
0
0
1
0
Y3
0
1
0
0
Y4
10
-10
4
-20
X1
2
-1/2
1/5
2-k
E1
1
1/2
0
-1
E2
-1
0
0
-2
E3
-2
1/2
-1/5
-2
Somme
6
25
12
-438
Le simplexe se termine là. À la fin les coûts marginaux correspondant à E1 , E2 et E3 sont respectivement -1, -2 et -2, donc pour le problème primal on a L1 = 1, L2 = 2 et L3 = 2. Z ′ vaut 438, et donc Z
vaut aussi 438.
Ainsi pour minimiser ses coûts le traiteur devra acheter 1000 lots 1, les 2000 lots 2 et il revendra à son
confrère 2000 lots de 5kg de noix de pécan et 20 kg de cacahouètes. Cela lui coûtera 438 k euros.
Eric L ALLET, Jean-Luc R AFFY
141
A.9
Programmation linéaire en nombres entiers
A.9.1 Correction de l’exercice 11.1 de la page 93
On a faire un problème de programmation linéaire. S’il n’était pas en nombres entiers, il serait même
trivial. Le meuble rectangulaire est plus rentable que le meuble en forme de tour (10 rangements pour 10
points, contre 11 rangements pour 12 points). Il faudrait ne prendre que des meubles rectangulaire. . . 5,9
tours pour 59 rangements !
Oui, mais les meubles doivent être entiers ! Il faut donc appliquer une méthode de programmation
linéaire en nombres entiers. Et au final, la solution en nombres entiers sera très loin de la solution fractionnaire.
Il faut commencer par modéliser notre problème.
On doit maximiser le nombre de rangements. Si on nomme M1 le nombre de meubles rectangulaires à
10 rangements et M2 le nombre de meubles en forme de tour à 11 rangements, on obtient : Z = 10 × M1 +
11 × M2
Le nombre de meubles échangeables est limité par le nombre de points. Il en faut 10 pour les meubles
rectangulaires, et 12 pour les tours. Le client dispose de 59 points : 10 × M1 + 12 × M2 ≤ 59.
La forme canonique du modèle est donc :
Trouver le maximum de Z avec :

 10 × M1 + 12 × M2 ≤ 59
Z = 10 × M1 + 11 × M2

M1 ≥ 0 et M2 ≥ 0
Donc le premier tableau du simplexe est :
E1
∆j
M1
10
10
M2
12
11
E1
1
0
Somme
59
0
Le premier pivot est sur la colonne de M2 et la ligne de E1 . Il vaut 12, il faut procéder à une troncature.
La ligne exprime la contrainte : 10 × M1 + 12 × M2 ≤ 59
En divisant par le pivot et gardant les parties entières on obtient :
10
12
59
× M1 +
× M2 ≤
12
12
12
C’est à dire : M2 ≤ 4.
Avec une nouvelle variable d’écart T1 , on peut ajouter cette contrainte au tableau du simplexe. On
obtient :
E1
T1
∆j
M1
10
0
10
M2
12
1
11
E1
1
0
0
T1
0
1
0
Somme
59
4
0
Ensuite on pivote sur la ligne de T1 et la colonne de M2 :
E1
M2
∆j
142
M1
10
0
10
M2
0
1
0
E1
1
0
0
T1
-12
1
-11
Eric L ALLET, Jean-Luc R AFFY
Somme
11
4
-44
Pour la seconde itération le pivot est sur la colonne de M1 et la ligne de E1 . Il vaut 10, il faut procéder
à une troncature.
La ligne exprime la contrainte : 10 × M1 − 12 × T1 ≤ 11.
En divisant par le pivot et gardant les parties entières on obtient :
−13
11
10
× M1 +
× T1 ≤
10
10
10
C’est à dire : M1 − 2 × T1 ≤ 1
Avec une nouvelle variable d’écart T2 , on peut ajouter cette contrainte au tableau du simplexe. On
obtient :
E1
M2
T2
∆j
M1
10
0
1
10
M2
0
1
0
0
E1
1
0
0
0
T1
-12
1
-2
-11
T2
0
0
1
0
Somme
11
4
1
-44
T2
-10
0
1
-10
Somme
1
4
1
-54
Ensuite on pivote sur la ligne de T2 et la colonne de M1 :
E1
M2
M1
∆j
M1
0
0
1
0
M2
0
1
0
0
E1
1
0
0
0
T1
8
1
-2
9
Il reste un ∆j positif. Il faut donc continuer. En fait il reste encore 5 itérations supplémentaires qui
vont ajouter 5 troncatures supplémentaires. Par contre la solution obtenue à la seconde itération ne va plus
évoluer. Les 5 autres itérations vont juste réussir à prouver qu’il n’y a pas de meilleur solution entière dans
le domaine admissible.
Pour alléger la correction les 5 autres itérations ne vont pas être reportées ici. Voici juste le dernier
tableau :
E1
M2
M1
T1
T2
T3
T4
T5
∆j
M1
0
0
1
0
0
0
0
0
0
M2
0
1
0
0
0
0
0
0
0
E1
1
0
0
0
0
0
0
0
0
T1
0
0
0
1
0
0
0
0
0
T2
0
0
0
0
1
0
0
0
0
T3
0
0
0
0
0
1
0
0
0
T4
0
0
0
0
0
0
1
0
0
T5
0
0
0
0
0
0
0
1
0
T6
-2
1
-1
-1
-1
-1
-1
-1
-1
T7
0
-5
6
5
4
3
2
1
-5
Somme
1
4
1
0
0
0
0
0
-54
Ainsi au final, M1 = 1 et M2 = 4 et Z = 54. Donc le client devra échanger ses 59 points contre 1
meuble rectangulaire à 10 emplacements et 4 meubles en forme de tour à 11 emplacements. Il aura dépenser
58 points, 1 sera inutilisé (E1 = 1 dans la solution finale) et aura obtenu 54 emplacements de rangement.
A.10 Modélisation
A.10.1 Correction de l’exercice 12.1 de la page 100
Il faut résoudre un problème d’ordonnancement de tâches. Pour la première questions, on a le choix
entre GANTT et le potentiel-tâches. Mais le deuxième pose clairement la recherche du chemin critique et
Eric L ALLET, Jean-Luc R AFFY
143
de la marge totale d’une tâche. Il faudra donc faire un potentiel-tâches. Autant commencer par là dès la
première question.
Pour modéliser ce potentiel-tâches, il faut identifier toutes les tâches et leur dépendances.
Il y a trois tâches de récoltes qui ne dépendent de rien d’autre :
Tâche A : La récolte du bois et du cuir par Tawar qui dure 45 minutes.
Tâche B : La récolte du fer de nain par Gorog qui dure 1 heure.
Tâche C : La récolte du fer ancien par Albin qui dure 1 heure.
Il y a deux tâches de traitement qui dépendent de certaines récoltes :
Tâche D : Le traitement du cuir et du bois par Tawar qui dure 15 minutes. Elle arrive après la tâche A.
Tâche E : Le traitement de tout le fer par Albin qui dure 20 minutes. Elle arrive après les deux récoltes de
fer (tâche B et C).
Il y a la pause de Gorog :
Tâche F : Cette pause dure 15 minutes et arrive après la récolte fer de nain (tache B).
Il y a les trois tâches de production :
Tâche G : La production d’arbalètes par Tawar qui dure 20 minutes et arrive après le traitement du fer et
du bois (tâche E et D).
Tâche H : La production d’armure par Gorog qui dure 25 minutes et arrive après sa pause, mais aussi après
le traitement du cuir et du fer (tâche F, D et E).
Tâche I : La production d’épée qui dure 10 minutes ne dépend que du traitement du fer (tâche E).
Enfin il y a la tache de livraison :
Tâche J : Cette livraison prend 10 minutes et arrive après les 3 productions (tâches G, H I).
Cela donne le graphe potentiel-tâches de la figure A.45.
F IG . A.45 – Graphe potentiel-tâches
Il nous reste à l’interpréter :
– La livraison se fera au bout de 115 minutes (1h55).
– La pause de Gorog (tache F) n’est pas sur le chemin critique. Il n’a pas retardé la livraison avec cette
pause.
– La marge totale de cette pause est de 5 minutes. Il peut donc rester encore 5 minutes de plus à la
taverne sans retarder le projet. Sa pause maximale est donc de 20 minutes.
A.10.2 Correction de l’exercice 12.2 de la page 100
Ici il faut résoudre un problème de programmation linéaire.
Il faut optimiser le gain de la guilde. Si on appelle A le nombre d’arbalètes vendues, et E celui des
épées, la fonction à optimiser est (gain exprimé en pièces d’or) :
Z = 0, 5 × A + E
.
On ne peut pas produire à l’infini ces armes : on a des contraintes sur les ressources.
144
Eric L ALLET, Jean-Luc R AFFY
Tout le bois est utilisé pour les arbalètes (25 morceaux par arbalètes), on a donc : 25 × A ≤ 1000.
Tout le fer ancien est utilisé pour les épées (25 blocs par épée), on a donc : 25 × E ≤ 1000
Le fer de nain sert aux deux production (20 blocs par arbalète, 20 blocs par épée), on a donc : 20 × A +
20 × E ≤ 1000.
Donc en résumé et après simplifications des inégalités on doit résoudre :

A ≤ 40




 E ≤ 40
A + E ≤ 50


Trouver le max de : Z = 0, 5 × A + E



avec A ≥ 0 et E ≥ 0.
Ici deux techniques sont parfaitement adaptées : soit la résolution géométrique, soit le simplexe. Pour cette
correction je choisis le simplexe.
On a trois inégalités, il faut ajouter trois variables d’écart : E1 , E2 , E3 .
E1
E2
E3
∆j
A
1
0
1
0,5
E
0
1
1
1
E1
1
0
0
0
E2
0
1
0
0
E3
0
0
1
0
Somme
40
40
50
0
Le premier pivot est sur la colonne de E et la ligne de E2 . Donc après pivotement de E à la place de
E2 , on obtient ce second tableau :
E1
E
E3
∆j
A
1
0
1
0,5
E
0
1
0
0
E1
1
0
0
0
E2
0
1
-1
-1
E3
0
0
1
Somme
40
40
10
-40
Le second pivot est sur la colonne de A et la ligne de E3 . Après le pivotement de A à la place de E3 , on
obtient le troisième tableau :
E1
E
A
∆j
A
0
0
1
0
E
0
1
0
0
E1
1
0
0
0
E2
1
1
-1
-0,5
E3
-1
0
1
-0,5
Somme
30
40
10
-45
Tous les ∆j sont négatifs ou nuls, l’algorithme s’arrête là. Donc la solutions donne A = 10, E = 40 et
Z = 45.
Interprétons ces chiffres : la guilde doit vendre 10 arbalètes et 40 épées. Elle fera un gain de 45 pièces
d’or.
Lorsque Gorog prend les commandes de l’opération, la seule chose qui change c’est la fonction à optimiser. Cette fois ci, on doit optimiser le nombre de chopes : Z = 2 × A + E. Et il nous reste à résoudre le problème avec cette nouvelle fonction. Alors soit on refait tous les calculs (pas bien longs vus les
chiffres), soit on réfléchit un peu, et on se dit que si on parle en «double chopes» la fonction à optimiser
est : Z = A + 0, 5 × E.
Donc il faut résoudre :

A ≤ 40




 E ≤ 40
A + E ≤ 50


Trouver le max de : Z = A + 0, 5 × E



avec A ≥ 0 et E ≥ 0
Eric L ALLET, Jean-Luc R AFFY
145
C’est à dire EXACTEMENT le même problème que précédemment si ce n’est que les E remplacent
les A et réciproquement. Donc on connaît déjà la solution, il suffit d’inverser le A et le E de la solution
précédente.
Pour notre nouveau problème : A = 40 et E = 10.
Donc pour satisfaire Gorog, la guilde produit 40 arbalètes et 10 épées. La vente rapporte 40×0, 5+10 =
30 pièces d’or, soit une perte de 15 pièces d’or par rapport à la solution optimale.
A.10.3 Correction de l’exercice 12.3 de la page 100
Trouver le prix minimal de vente des ressources utiles à la production est en fait le problème dual
de celui qui consiste à trouver la vente optimale faite grâce à cette production. Voila pourquoi les deux
problèmes ont la même solution (45 pièces d’or).
Pour bien montrer que ce problème est le dual du premier on va le formaliser.
Il faut optimiser la vente des ressources. Si on appelle BO le prix d’un morceau de bois, F A celui d’un
bloc de fer de ancien, et F N celui d’un bloc de fer de nain, la fonction Z ′ dont on doit trouver le minimum
est : Z ′ = 1000 × BO + 1000 × F A + 1000 × F N .
Chaque arbalète rapporte 0, 5 pièce d’or, donc il faut garantir que les ressources vendues rapporte au
moins autant : 25 × BO + 20 × F N ≥ 0, 5
Chaque épée rapporte 1 pièce d’or, donc la vente de ressource doit garantir : 25 × F A + 20 × F N ≥ 1
On obtient :

Trouver le min de : Z ′ = 1000 × BO + 1000 × F A + 1000 × F N



25 × BO + 20 × F N ≥ 0, 5
25
× F A + 20 × F N ≥ 1



avec BO ≥ 0 et F A ≥ 0 et F N ≥ 0
Si on passe à l’expression du dual on obtient :

Trouver le max de : Z = X1 + 0, 5 × X2




 25 × X1 ≤ 1000
25 × X2 ≤ 1000


20
× X1 + 20 × X2 ≤ 50



avec X1 ≥ 0 et X2 ≥ 0
Ce qui est bien exactement l’expression du premier problème dont on connaît déjà la solution : 45 pièces
d’or.
A.10.4 Correction de l’exercice 12.4 de la page 101
On reconnaît ici un problème de recherche d’arbre de recouvrement minimal. Pour cette correction on
va appliquer l’algorithme de Kruskal. Pour le mettre en œuvre on va dessiner le graphe et ordonner les
arêtes par ordre croissant (voir figure A.46).
B
u5
4000
u1
2000
u3
3000
O
u2
2000
u6
6000
u4
3000
u7
7000
C
P
u8
7000
F IG . A.46 – Les routes triées par ordre de coût
146
Eric L ALLET, Jean-Luc R AFFY
T
Maintenant en appliquant Kruskal on s’aperçoit que l’on peut prendre les 4 premières arêtes sans former
de cycle. Ce sont donc elles qui forment notre arbre de recouvrement minimal (voir figure A.47).
B
u5
4000
u1
2000
u3
3000
O
P
u2
2000
u6
6000
u4
3000
u7
7000
T
u8
7000
C
F IG . A.47 – Les routes à reconstruire pour un réseau à moindre coût
Donc les 4 routes à reconstruire en priorité sont : celle entre Coudebolle et Borivage, celle entre Borivage
et Ollala, celle entre Ollala et Pompays et celle entre Ollala et Tecuge. Le coût de cette reconstruction sera
de 2000 + 2000 + 3000 + 3000 = 10 000 unités monétaires.
A.10.5 Correction de l’exercice 12.5 de la page 101
Cette fois ci c’est un problème de recherche de plus court chemin. Le graphe servant à cette recherche
est celui de la figure A.48.
B
2
3
4
4
8
4
2
P
7
6
6
3
O
8
3
6
7
T
C
8
F IG . A.48 – Graphe des coût de transports
Mais on va plutôt utiliser un tableau pour faire tourner l’algorithme de Ford-Moore.
m
0
1
2
3
4
λ(C)
0
H
7/B
H
X
X
X
13/O
X
X
15/T
X
X
X
11/O
λ(B)
H
∞
H
3/C
X
X
X
11/O
X
X
16/T
H
9/O
H
λ(O)
H
∞
H
H
7/C
H
5/B
X
X
14/T
X
X
12/P
X
X
10/P
λ(P )
H
∞
H
H
9/O
H
X
X
16/T
7/O
λ(T )
H
∞
H
7/C
7/B
X
X
X
10/O
H
8/O
H
X
X
15/P
X
X
13/P
changés
C
B
O
T
O
P
Γ+
B, O T
C, O, T
C, B, P, T
C, B, O, P
C, B, P, T
O, T
P
O, T
Depuis Coudebolle, pour aller à :
– Borivage, il faut prendre la route directe. Cela coûte 3 unités/tonne
– Ollala, il faut passer par Borivage. Cela coûte 5 unités/tonne
– Pompays, il faut passer par Borivage et Ollala. Cela coûte 7 unités/tonne
– Tecuge, il faut soit prendre la route directe soit passer par Borivage. Cela coûte 7 unités/tonne
Eric L ALLET, Jean-Luc R AFFY
147
A.10.6 Correction de l’exercice 12.6 de la page 101
B
4
2
3
2
P
Ou
O
7
T
C
F IG . A.49 – Routes pour les transports à moindre coût
Si on compare les routes qu’il faudrait utiliser pour un transport à moindre coût (figure A.49) avec
celles qu’il faudrait construire pour une reconstruction à moindre coût (figure A.47) on trouve beaucoup de
similitudes. La seule différence se trouve sur le chemin allant à Tecuge. Si on garde le réseau de reconstruction à moindre coût, la seule route permettant d’aller à Tecuge coûtera 8 unités/tonne à la place des 7
possibles par les deux autres routes. Par contre si on décide ne remplacer la route Ollala-Tecuge, par la route
Borivage-Tecuge, on aura un transport à moindre coût pour toutes les destinations pour une reconstruction
1000 unités plus chère.
Si on envisage de transporter plus de 1000 tonnes vers Tecuge l’investissement sera rentabilisé. Alors il
vaudra mieux faire ce choix et reconstruire le réseau de la figure A.50 pour 11 000 unités monétaires.
B
u5
4000
u1
2000
u3
3000
O
u2
2000
u6
6000
u4
3000
u7
7000
C
P
u8
7000
T
F IG . A.50 – Réseau à reconstruire si on transporte plus de 1000 tonnes vers Tecuge
A.10.7 Correction de l’exercice 12.7 de la page 102
La première question demande de trouver le «plus long chemin» au sens du nombres d’épreuves entre
la salle 1 et la salle aux trésors. On peut obtenir ce résultat en trouvant le chemin critique du diagramme
potentiel tâche avec un modèle où les noeuds sont les salles, et la durées le nombre d’épreuves (voir figure
A.51).
F IG . A.51 – Le chemin à suivre pour marquer le plus de points
Il font donc faire les salles dans l’ordre 1,2,3,5,4,6 et 8. Il faudra passer 23 épreuves.
148
Eric L ALLET, Jean-Luc R AFFY
Par le chemin qui donne le plus de points aux joueurs, le temps minimal pour y arriver est donc de 230
minutes, c’est à dire 3h50. Pour ne pas être éliminé, les joueurs doivent arriver à la salle aux trésors avant
4h50 (290 minutes).
Ensuite pour trouver l’heure d’arrivée maximale pour chaque salle du donjon, il faut trouver le chemin
le plus court entre les salles et la salle aux trésors et ensuite calculer le temps de ce chemin. Enfin on retirera
ce temps à l’heure d’arrivée éliminatoire de la salle aux trésors.
On commence par renverser le graphe pour faire une recherche de chemin le plus court entre la salle
aux trésors et toutes les autres salles(voir figure A.52).
F IG . A.52 – Graphe avec chemin renversé pour le calcul des chemins les plus courts
Pour calculer ces chemins on va utiliser l’algorithme de Ford-Moore.
m
λ(ST )
λ(S8)
λ(S7)
λ(S6)
λ(S5)
λ(S4)
λ(S3)
λ(S2)
λ(S1)
0
1
2
0
∞
Z
Z
3/ST
∞
Z
Z
∞
Z
Z
∞
Z
Z
∞
Z
Z
∞
Z
Z
∞
Z
Z
∞
Z
Z
9/S8
5/S8
3
13/S7
10/S6
4
X
X
X
14/S4
X
X
X
16/S5
13/S4
5
14/S4
X
X
X
17/S3
15/S3
X
X
X
16/S2
Sommets
changés
ST
S8
S7
S6
S5
S4
S3
S2
S1
Γ+
S8
S7, S6
S5
S4
S3
S5, S3, S2
S2, S1
S1
Le chemin ayant le moins d’épreuves depuis l’entrée de la salle 1 jusqu’à la salle aux trésors passe par
15 épreuves. Donc il faut au moins 150 minutes pour le parcourir. Pour avoir une chance d’arriver au bout
avant l’heure éliminatoire (4h50 = 290 minutes), il faut entrer dans la salle avant 290-150=140 minutes,
c’est à dire avant 2h20.
En faisant le même raisonnement pour les autres salles, voici les heures d’arrivée maximale pour ne pas
être éliminé :
S1
S2
S3
S4
S5
S6
S7
S8
290-150=140 minutes = 2h20
290-140=150 minutes = 2h30
290-130=160 minutes = 2h40
290-100=190 minutes = 3h10
290-130=160 minutes = 2h40
290-50=240 minutes = 4h
290-90=200 minutes = 3h20
290-30=260 minutes = 4h20
A.10.8 Correction de l’exercice 12.8 de la page 102
On reconnaît ici un problème de flot maximal. Et la seconde question sera celui d’un flot maximal à
coût minimal.
Pour résoudre ce problème il faut déjà modéliser le réseau transport par un graphe. Un premier jet donne
la figure A.53
Même s’il existe deux moyens de transport différents entre Danlo et Estival, du point de vue du modèle,
rien ne les distingue. Ils ont donc été unifiés en un seul arc de capacité 1400.
Eric L ALLET, Jean-Luc R AFFY
149
F IG . A.53 – Réseau de transport entre Aunor et Estival
Mais il est possible d’apporter des simplification à ce graphe :
Lorsqu’un sommet n’a qu’un seul arc entrant et un seul arc sortant, il est possible de le supprimer en
remplaçant les deux arcs par un seul arc ayant la capacité minimale des deux arcs.
c1
S1
−→
c2
S2
−→
min(c1 , c2 )
S3
devient
S1
−→
S3
Donc on peut supprimer le sommet «Campagne» pour ne mettre qu’un arc de capacité 700 entre Bordelot et Estival.
On obtient ainsi le réseau de transport de la figure A.54
F IG . A.54 – Réseau de transport entre Aunor et Estival après simplifications
Il reste à utiliser l’algorithme de Ford-Fulkerson sur ce graphe. Pour cela on commence par un flot initial
en envoyant 1000 personnes en bateau jusqu’à Danlo. Ensuite ces 1000 personnes utilisent bateau et avion
pour aller à Estival. Cela laisse la possibilité à 400 personnes de voyager en avion depuis Aunor jusqu’à
Danlo, où ils peuvent continuer en bateau ou avion. On obtient le flot de la figure A.55.
F IG . A.55 – Flot initial pour commencer l’algorithme de Ford-Fulkerson
Lorsqu’on regarde si ce flot peut être amélioré, le marquage de l’algorithme de Ford-Fulkerson arrive
jusqu’au puits (voir figure A.56).
Il existe donc une chaîne améliorante :
Aunor
150
1000 − 400 = 600
−→
Danlo
1000
←−
Bordelot
Eric L ALLET, Jean-Luc R AFFY
700 − 0 = 700
−→
Estival
F IG . A.56 – Ford-Fulkerson : marquage d’une chaîne améliorante
Le gain que l’on peut obtenir sur cette chaîne améliorante est de 600 personnes. On ajoute donc 600
personnes sur les trajets entre Aunor et Danlo et entre Bordelot et Estival. On retire ce flot sur l’arc inverse,
entre Danlo et Bordelot. On obtient le nouveau flot de la figure A.57. Comme le flot sortant de la source est
saturé, on sait que le flot maximal est atteint. Il est de 2000 personnes.
F IG . A.57 – Flot après amélioration : il s’agit du flot maximal
Les capacités de transports autorisent donc le gouvernement à acheminer 2000 personnes depuis Aunor
jusqu’à Estival. Une solution pour obtenir ce flot consiste à faire partir 1000 personne en bateau depuis Aunor jusqu’à Bordelot. 600 prennent alors la route pour Estival en passant par Campagne, et 400 continuent
en bateau jusqu’à Danlo. Là ils sont rejoints par 1000 autres personnes qui arrivent en avion depuis Aunor.
Les 1400 personnes arrivées à Danlo continuent jusqu’à Estival en empruntant avion ou bateau.
Maintenant il faut savoir combien de personnes le gouvernement a les moyens de transporter. Il s’agit
d’un problème de type «flot maximal à coût minimal». Le figure A.58 illustre le premier jet pour modéliser
le réseau de transport en intégrant les coûts. Cette fois ci il va falloir distinguer le moyen de transport
entre Danlo et Estival, car le coût va changer suivant que l’on prend l’avion ou le bateau. Pour cela il va
falloir introduire deux sommets artificiels pour séparer les deux routes. On va donc placer un «port» et un
«aéroport» sur notre graphe.
F IG . A.58 – Réseau de transport avec coûts entre Aunor et Estival
Lorsqu’un sommet n’a qu’un seul arc entrant et un seul arc sortant, il est possible de le supprimer en
remplaçant les deux arcs par un seul arc ayant la capacité minimal des deux arcs et la somme des coûts des
deux arcs :
cap1 /coût1
S1
−→
cap2 /coût2
S2
−→
min(cap1 ,cap2 )/coût1 +coût2
S3
devient
S1
Eric L ALLET, Jean-Luc R AFFY
−→
S3
151
Donc on peut remplacer les deux arcs adjacents à Campagne par un seul ayant 700 de capacité et 4
galets par personne pour coût. On obtient le modèle de le figure A.59. Il n’est pas possible de faire cette
simplification pour les arcs entre Danlo et Estival, car cela placerait deux arcs différents entre le même
couple de sommets (on obtiendrait un «multigraphe»), et les algorithmes utilisés par la suite (par exemple
la recherche de plus court chemin utilisé pour Busacker et Gowen) ne fonctionne pas sur ce type de graphe.
F IG . A.59 – Réseau de transport avec coûts après simplification
À partir de ce modèle on peut mettre en œuvre l’algorithme de Busacker et Gowen. Mais attention, la
condition d’arrêt sera le coût de transport. Si on atteint le coût maximal autorisé (5400 galets) avant que le
flot maximal ne soit atteint, il faudra s’arrêter.
Il faut commencer par faire circuler un premier flot par le chemin le plus court au sens du coût2 : c’est
le transport en bateau de bout en bout qui coûte le moins cher, 3 galets par personne :
1000/1
Aunor
−→
1000/1
Bordelot
−→
700/1
∞/0
Danlo
−→
Port
−→
Estival
On peut transporter 700 personnes par ce chemin pour un coût global 700 × 3 = 2100 galets. On reporte
ce flot sur le réseau de transport et on calcule le graphe associé pour trouver le nouveau chemin le plus court
(voir figure A.60).
F IG . A.60 – Busacker et Gowen : premier flot et graphe associé
Le chemin le plus court consiste à transporter les personnes en bateau jusqu’à Bordelot pour ensuite
prendre la route jusqu’à Estival pour un coût de 5 galets par personne.
300/1
Aunor
−→
700/4
Bordelot
−→
Estival
On peut transporter 300 personnes par ce chemin pour un coût global de 300 × 5 = 1500 galets. Donc
en cumulant les deux flots, on peut transporter 1000 personnes pour un coût de 3600 galets. Le budget
maximal pour le transport n’est pas encore atteint, on peut continuer l’algorithme.
2 Pour
152
alléger la correction, les recherches de chemin le plus court ne sont pas reportées ici.
Eric L ALLET, Jean-Luc R AFFY
Après report du nouveau flot sur le graphe, on obtient la figure A.61.
F IG . A.61 – Busacker et Gowen : graphes après ajout du second flot
Le nouveau chemin le plus court part d’Aunor, passe par Danlo et Bordelot et arrive à Estival. Il consiste
à acheminer par la route une partie des personnes qui prenaient le bateau à Bordelot pour laisser leur place
aux personnes qui arrive en avion à Danlo (et qui peuvent ainsi continuer en bateau). Cela revient à 9 galets
par personne.
1000/6
Aunor
−→
700/-1
Danlo
←−
400/4
Bordelot
−→
Estival
On peut transporter 400 personnes par ce chemin pour un coût global de 400 × 9 = 3600 galets. En
cumulant ce flot avec les précédents on atteindrait 7200 galets de coût de transport. Ce qui dépasserait le
budget maximal. On ne peut donc pas saturer ce nouveau chemin. Le budget restant après les 3600 galets
utilisés pour les deux premiers flots est de 5400 − 3600 = 1800 galets. Avec un coût unitaire de 9 galets
par personne, on peut donc transporter 200 personnes de plus. La figure A.62 illustre le flot maximal (1200
personnes) pour le budget fixé (5400 galets).
F IG . A.62 – Flot maximal pour le budget fixé
Pour 5400 galets de budget de transport, le gouvernement peut acheminer 1200 personnes. 1000 prendront le bateau depuis Aunor jusqu’à Bordelot. de là 700 continueront par la route jusqu’à Estival. 300
autre reprendront le bateau jusqu’à Danlo. Là ils seront rejoints par 200 personnes arrivées en avion depuis
Aunor. Ces 500 personnes finiront leur voyage en bateau jusqu’à Estival.
Eric L ALLET, Jean-Luc R AFFY
153
A.10.9 Correction de l’exercice 12.9 de la page 104
La question de ce problème ressemble beaucoup à celle du problème précédent. On pourrait donc penser
qu’il s’agit encore d’un problème de flot maximal à coût minimal. Mais dès qu’on essaie de le modéliser,
on se rend vite compte que le problème s’exprime avec des contraintes qui sont des fonctions linéaires de
variables. Il faut combiner dans de bonnes proportions les divers moyens de transport pour gérer au mieux
le budget. Il s’agit donc d’un problème de programmation linéaire.
Le but est d’envoyer le plus possible d’unités de secours sur place. Le nombre d’unités transportées va
dépendre des moyens de transports affrétés. Si on nome U le nombre des unités transportées, A le nombre
d’avions, B le nombre de bateaux, et C le nombre de camions on obtient le problème suivant :
– Il faut maximiser Z = U .
– Il faut assez de moyens de transport pour emporter le personnel. Chaque avion peut transporter 2
unités de personnel, chaque bateau 1 seule, et chaque camion 3. Donc U ≤ 2 × A + B + 3 × C
– Il faut assez de transports pour emporter les unités de matériel. Les avions ne peuvent pas en transporter, les bateaux peuvent en transporter 7, et les camions 1. Donc U ≤ 7 × B + C
– Il ne faut pas dépasser le budget de 3500 galets. Chaque voyage en avion coût 250 galets, ceux en
bateau coûtent 150 galets, et ceux en camion 150 galets. Donc : 250×A+150×B +150×C ≤ 3500
En mettant toutes ces équations sous leur forme canonique, et en simplifiant la dernière par 50, on
obtient :

Trouver le max de : Z = U




 U −2×A−B−3×C ≤0
U −7×B−C ≤0


5 × A + 3 × B + 3 × C ≤ 70



avec U ≥ 0,A ≥ 0, B ≥ 0 et C ≥ 0
Il ne reste plus qu’à utiliser le simplexe. Mais comme il n’est pas question d’affréter des morceaux
d’avion, de bateau ou de camion il faudra utiliser la méthode en nombres entiers.
Voici le premier tableau du simplexe :
E1
E2
E3
∆j
U
1
1
0
1
A
-2
0
5
0
B
-1
-7
3
0
C
-3
-1
3
0
E1
1
0
0
0
E2
0
1
0
0
E3
0
0
1
0
Somme
0
0
70
0
Pour la première itération, deux pivots sont possibles (colonne de U , ligne E1 ou E2 ), et valent tous les
deux 1. On va choisir celui de la ligne E1 . Comme le pivot vaut 1, il n’y a pas besoin de troncature. On
obtient ce second tableau :
U
E2
E3
∆j
U
1
0
0
0
A
-2
2
5
2
B
-1
-6
3
1
C
-3
2
3
3
E1
1
-1
0
-1
E2
0
1
0
0
E3
0
0
1
0
Somme
0
0
70
0
Pour la second itération, le pivot est sur la colonne de C et la ligne de E2 . Comme le pivot vaut 2, il faut
faire une troncature. La ligne de E2 exprime la contrainte :
2 × A − 6 × B + 2 × C − E1 ≤ 0
Donc en divisant par le pivot et prenant la partie entière, on obtient :
−6
2
−1
2
×A+
×B+
×C+
× E1 ≤ 0
2
2
2
2
154
Eric L ALLET, Jean-Luc R AFFY
C’est à dire :
A − 3 × B + C − E1 ≤ 0
Avec une variable d’écart T1 , on peut ajouter cette troncature au tableau pour obtenir :
U
E2
E3
T1
∆j
U
1
0
0
0
0
A
-2
2
5
1
2
B
-1
-6
3
-3
1
C
-3
2
3
1
3
E1
1
-1
0
-1
-1
E2
0
1
0
0
0
E3
0
0
1
0
0
T1
0
0
0
1
0
Somme
0
0
70
0
0
On pivote sur la ligne T1 colonne de C et on obtient (avec ajout anticipé de la ligne de la troncature de
l’itération suivante) :
U
1
0
0
0
0
0
U
E2
E3
C
T2
∆j
A
1
0
2
1
0
-1
B
-10
0
12
-3
1
10
C
0
0
0
1
0
0
E1
-2
1
3
-1
0
2
E2
0
1
0
0
0
0
E3
0
0
1
0
0
0
T1
3
-2
-3
1
-1
-3
T2
0
0
0
0
1
0
Somme
0
0
70
0
5
0
Attention, pour alléger la correction les lignes et colonnes des troncatures ont été mises de façon anticipées dans le tableau. Avant l’ajout de la variable T 2, le pivot était sur la colonne de B et la ligne de E3 .
Comme le pivot valait 12, il fallait faire une troncature. Celle-ci à été ajoutée avec la variable d’écart T2 .
On pivote sur la ligne T2 et la colonne de C. On obtient ce quatrième tableau (toujours avec ajout anticipé
de la troncature) :
U
1
0
0
0
0
0
0
U
E2
E3
C
B
T3
∆j
A
1
0
2
1
0
0
-1
B
0
0
0
0
1
0
0
C
0
0
0
1
0
0
0
E1
-2
1
3
-1
0
0
2
E2
0
1
0
0
0
0
0
E3
0
0
1
0
0
0
0
T1
-7
-2
9
-2
-1
1
7
T2
10
0
-12
3
1
-2
-10
T3
0
0
0
0
0
1
0
Somme
50
0
10
15
5
1
-50
Avant l’ajout de la ligne et colonne de troncature, le pivot était sur la colonne de T1 et la ligne de E3 . Il
valait 9. On a donc ajouté une troncature et sa variable d’écart (T3 ). Après pivotement sur la ligne de T3 et
colonne de T1 , on obtient ce cinquième tableau.
U
E2
E3
C
B
T1
T4
∆j
U
1
0
0
0
0
0
0
0
A
1
0
2
1
0
0
0
-1
B
0
0
0
0
1
0
0
0
C
0
0
0
1
0
0
0
0
E1
-2
1
3
-1
0
0
0
2
E2
0
1
0
0
0
0
0
0
E3
0
0
1
0
0
0
0
0
T1
0
0
0
0
0
1
0
0
T2
-4
-4
6
-1
-1
-2
1
4
T3
7
2
-9
2
1
1
-2
-7
T4
0
0
0
0
0
0
1
0
Somme
57
2
1
17
6
1
0
-57
À ce moment de l’algorithme, la solution entière optimale est trouvée. Mais comme il reste des ∆j
strictement positifs, on ne le sait pas encore. Il faut ajouter deux nouvelles itérations pour le prouver. Voici
les deux tableaux de ces itérations sans (presque) aucun commentaire :
Eric L ALLET, Jean-Luc R AFFY
155
Le pivot initial (colonne T2 , ligne E3 ) valait 6. On a donc ajouté une troncature et sa variable d’écart
T4 . Après pivotement on obtient :
U
E2
E3
C
B
T1
T2
T5
∆j
U
1
0
0
0
0
0
0
0
0
A
1
0
2
1
0
0
0
0
-1
B
0
0
0
0
1
0
0
0
0
C
0
0
0
1
0
0
0
0
0
E1
-2
1
3
-1
0
0
0
1
2
E2
0
1
0
0
0
0
0
0
0
E3
0
0
1
0
0
0
0
0
0
T1
0
0
0
0
0
1
0
0
0
T2
0
0
0
0
0
0
1
0
0
T3
-1
-6
3
0
-1
-3
-2
1
1
T4
4
4
-6
1
1
2
1
-2
-4
T5
0
0
0
0
0
0
0
1
0
Somme
57
2
1
17
6
1
0
0
-57
Le pivot initial (colonne E1 , ligne E3 ) valait 3. On a donc ajouté une troncature et sa variable d’écart
T5 . Après pivotement on obtient :
U
E2
E3
C
B
T1
T2
E1
∆j
U
1
0
0
0
0
0
0
0
0
A
1
0
2
1
0
0
0
0
-1
B
0
0
0
0
1
0
0
0
0
C
0
0
0
1
0
0
0
0
0
E1
0
0
0
0
0
0
0
1
0
E2
0
1
0
0
0
0
0
0
0
E3
0
0
1
0
0
0
0
0
0
T1
0
0
0
0
0
1
0
0
0
T2
0
0
0
0
0
0
1
0
0
T3
1
-7
0
1
-1
-3
-2
1
-1
T4
0
6
0
-1
1
2
1
-2
0
T5
2
-1
-3
1
0
0
0
1
-2
Somme
57
2
1
17
6
1
0
0
-57
Tous les ∆j sont négatifs ou nuls, la solution optimale est donc atteintes : A est hors base, et vaut donc
0, B vaut 6 et C 17. Donc avec le budget alloué, on peut transporter 57 unités (1140 personnes, et 57 tonnes
de matériels) en utilisant 6 bateaux et 17 camions.
Quelques interprétations supplémentaires :
– E2 = 2. E2 est la variable d’écart sur la contrainte du transport du matériel. Donc, la capacité de
transport de matériel n’est pas totalement utilisée. Avec les moyens mobilisés on pourrait transporter
2 tonnes de matériel en plus. Mais on n’aurait pas les équipes pour l’utiliser.
– E3 = 1. E3 est la variable d’écart sur la contrainte de coût. Donc tout le budget n’est pas utilisé.
Comme on avait divisé cette contrainte par 50 pour simplifier l’équation, la somme non utilisée est
de 50 galets.
156
Eric L ALLET, Jean-Luc R AFFY
Index
adjacence, 32
algorithme,
arbre de recouvrement minimal, 28, 29, 119
Busacker et Gowen, 49, 50, 52, 53, 129, 130,
152
dates au plus tôt, 15, 21
dates au plus tard, 17, 22
Ford-Fulkerson, 45, 52, 128, 150
Ford-Moore, 37, 122, 125, 127, 147, 149
Kruskal, 28, 147
plus court chemin, 37, 49, 122, 125, 127, 147,
149
Prim, 29, 30, 32, 119
simplexe, 67
arête, 3
arête,
boucle, 4
cocycle, 4
extrémité, 3
incidence, 4
arbre, 26, 27, 118, 146
arbre de recouvrement minimal, 28, 29, 97
arbre,
Kruskal, 28
recouvrement (de), 28, 118, 146
arc, 6
arc,
extréminité initiale, 6
extrémité terminale, 6
flot max, 42, 97, 128, 149
flot max,
Busacker et Gowen, 49, 50, 52, 53, 129
coût minimal, 49, 50, 52, 53, 97, 129, 151
Ford-Fulkerson, 45, 52, 128
Ford-Fulkerson, 45, 52, 128, 150
Ford-Moore, 37, 122, 125, 127, 147, 149
forme canonique, 57, 65, 81, 82, 88, 138, 140, 142,
154
forme standard, 65, 66, 73, 82, 88, 140
GANTT, 11, 25, 98, 110, 116, 117
GANTT,
diagramme, 11
graphe, 13, 107
graphe
prédécesseur, 7
successeur, 6
graphe,
Γ+ , 7, 17
Γ− , 7, 15
adjacence, 8
arête, 3
arc, 6
biparti, 4, 110
biparti complet, 4
boucle, 4
chaîne, 4
chemin, 7, 107, 110
circuit, 7
Busacker et Gowen, 49, 50, 52, 53, 129, 130, 152
cocircuit, 7
cocycle, 4, 29
chemin, 7
complet, 4
chemin critique, 11, 13, 20, 22, 98, 110, 111, 143,
connexité, 5
148
couvrant, 28
cicuit, 7
cycle, 5
cocircuit, 7
degré, 4, 6
cocycle, 4, 29, 32
demi-degré, 6
connexité, 5
forte connexité, 7
connexité,
multigraphe, 4, 8
forte, 7
multivoque, 7
nombre, 5
non orienté, 3, 8, 108
ordre, 4
date au plus tôt, 14
orienté, 3, 5, 8, 107
date au plus tard, 17
p-graphe, 7
degré, 4, 6
poids, 28
degré,
simple, 4, 8
demi-degré, 6
sommet, 3
demi-degré exterieur, 6
sous-graphe, 28
demi-degré intérieur, 6
valué, 37
durée de projet, 15, 143, 148
Eric L ALLET, Jean-Luc R AFFY
157
Kruskal, 28, 147
méthode géométrique, 59, 133, 145
marge totale, 20, 22, 144
matrice,
adjacence, 8, 32
multivoque, 7
sommet, 3
sommet,
adjacence, 4
prédécesseur, 7
successeur, 6
successeur, 6
nombres entiers, voir PLNE
ordonnancement, 11, 110, 111, 116
PERT, 11, 110
PLNE, 85, 92, 93, 154
PLNE,
troncature, 89–93, 154
plus court chemin, 35, 42, 49, 97, 121, 123, 125, 147,
149
plus court chemin,
Ford-Moore, 37, 125, 127
plus long chemin, 23, 25, 98, 112, 114
poids, 28
potentiel-tâches, 11, 13, 97, 98, 110, 111, 116, 143,
148
potentiel-tâches,
date au plus tôt, 14
date au plus tard, 17
durée de projet, 15, 143, 148
marge totale, 20, 22, 144
prédécesseur, 7
Prim, 29
programmation linéaire, 57, 59, 63, 80, 85, 98, 132–
134, 137–140, 144, 146, 154
nombres entiers (en), voir PLNE
programmation linéaire en nombres entiers, voir PLNE
programmation linéaire,
dual, 75, 78, 138, 140, 146
forme canonique, 57, 65, 81, 82, 88, 138, 140,
142, 154
forme standard, 65, 66, 73, 82, 88, 140
méthode géométrique, 59, 133, 145
simplexe, 63, 80, 84, 85, 134, 137, 139, 140,
145, 154
simplexe cas général, 80, 139, 140
simplexe, 63, 84, 85, 88, 98, 99, 134, 137, 145, 154
simplexe,
algorithme, 67
base, 66, 67
cas général, 80, 139, 140
dual, 75, 78, 138, 140, 146
forme canonique, 57, 59, 65, 81, 82, 88, 138,
140, 142, 154
forme standard, 65, 66, 73, 82, 88, 140
marge, 70
pivot, 67
premier critère de Dantzig, 67
second critère de Dantzig, 67
valeur marginale, 70, 78
variable d’écart, 65, 68, 78, 89
158
Eric L ALLET, Jean-Luc R AFFY
Bibliographie
[1] Jean-Claude Papillon. Eléments de recherche opérationnelle. Dalloz-Sirey, 1992.
[2] Roseaux. Exercices et problèmes résolus de recherche opérationnelle : Tome 3 : Programmation linéaire et extensions - Problèmes classiques. DUNOD, 1985.
[3] Roseaux. Exercices et problèmes résolus de recherche opérationnelle : Tome 1, Graphes : leurs usages,
leurs algorithmes. DUNOD, 1998.
[4] Daniel Thiel. Recherche opérationnelle et management des entreprises. Economica, 1990.
Eric L ALLET, Jean-Luc R AFFY
159
Téléchargement