You are on page 1of 156

UNIVERSITE DU LITTORAL

Maı̂trise AES

Recherche opérationnelle

Daniel DE WOLF

Dunkerque, Septembre 2003


Table des matières

I La programmation linéaire et en nombres entiers 7

1 La programmation linéaire. 9
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Plan du cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Un simple exemple . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4 Résolution graphique . . . . . . . . . . . . . . . . . . . . . . . 13
1.5 Formulation générale . . . . . . . . . . . . . . . . . . . . . . . 17
1.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2 Algorithme du Simplexe. 21
2.1 Principe de l’algorithme . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Formes canoniques d’un programme linéaire. . . . . . . . . . . . 22
2.3 Notion de solution de base . . . . . . . . . . . . . . . . . . . . . 24
2.4 Initialisation de l’algorithme . . . . . . . . . . . . . . . . . . . . 26
2.5 Une itération Simplexe . . . . . . . . . . . . . . . . . . . . . . . 27
2.5.1 Choix de la direction . . . . . . . . . . . . . . . . . . . . 27
2.5.2 Choix de la variable sortante . . . . . . . . . . . . . . . . 27
2.5.3 Calcul du nouveau sommet . . . . . . . . . . . . . . . . 28
2.5.4 Test d’optimalité . . . . . . . . . . . . . . . . . . . . . . 30
2.5.5 Chemin suivi par l’algorithme du Simplexe . . . . . . . . 31
2.6 Algorithme du Simplexe . . . . . . . . . . . . . . . . . . . . . . 32

3 L’algorithme du Simplexe en Tableaux 33


3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3
4 Table des matières

3.2 Notion de tableau Simplexe . . . . . . . . . . . . . . . . . . . . 34


3.3 Tableaux Simplexe et pivotage . . . . . . . . . . . . . . . . . . . 35
3.4 Algorithme du Simplexe en tableaux . . . . . . . . . . . . . . . . 40
3.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4 Questions sur l’algorithme du Simplexe. 43


4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2 Initialisation de l’algorithme . . . . . . . . . . . . . . . . . . . . 43
4.3 Détermination de la variable entrante . . . . . . . . . . . . . . . 50
4.4 Détermination de la variable sortante . . . . . . . . . . . . . . . 50
4.5 Arrêt après un nombre fini d’itérations . . . . . . . . . . . . . . . 53
4.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

5 Analyse postoptimale. 57
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2 Variation par rapport au second membre . . . . . . . . . . . . . . 58
5.3 Variation des coefficients objectifs . . . . . . . . . . . . . . . . . 62
5.4 Coût réduit des variables hors base . . . . . . . . . . . . . . . . . 64
5.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

6 La programmation en nombres entiers. 69


6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.2 Formulation des problèmes mixtes . . . . . . . . . . . . . . . . . 70
6.2.1 Problèmes avec coûts fixes . . . . . . . . . . . . . . . . . 70
6.2.2 Problèmes avec contrainte logique . . . . . . . . . . . . . 71
6.2.3 Mélange avec nombre limité d’ingrédients . . . . . . . . 72
6.2.4 Choix parmi un nombre discret de valeurs . . . . . . . . . 73
6.3 Méthode de branch and bound . . . . . . . . . . . . . . . . . . . 74
6.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Table des matières 5

II Les modèles sur réseau, dynamiques et non linéaires. 81

7 Les modèles sur réseau 83


7.1 Le problème de transport simple . . . . . . . . . . . . . . . . . . 84
7.1.1 Représentation au moyen d’un graphe . . . . . . . . . . . 84
7.1.2 Formulation du problème . . . . . . . . . . . . . . . . . 85
7.2 Planification de la production . . . . . . . . . . . . . . . . . . . 87
7.3 Problème d’affectation optimale . . . . . . . . . . . . . . . . . . 89
7.4 Le problème de transport général . . . . . . . . . . . . . . . . . 90
7.4.1 Problème du plus court chemin . . . . . . . . . . . . . . 91
7.4.2 Problème du flot maximum . . . . . . . . . . . . . . . . 92
7.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

8 Résolution du problème de transport simple 95


8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8.2 Notion de coût réduit . . . . . . . . . . . . . . . . . . . . . . . . 95
8.3 Le problème de transport simple . . . . . . . . . . . . . . . . . . 99
8.4 Résolution du problème de transport simple . . . . . . . . . . . . 100
8.4.1 Résolution par le Simplexe . . . . . . . . . . . . . . . . 100
8.4.2 Résolution par la méthode du stepping stone . . . . . . . 102
8.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

9 Résolution du problème de transport général 107


9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
9.2 Notion de réseau résiduel . . . . . . . . . . . . . . . . . . . . . 107
9.3 Résolution du problème de flot à coût minimum . . . . . . . . . . 108
9.3.1 Algorithme de plus courts chemins successifs . . . . . . . 109
9.4 Application au problème d’affectation . . . . . . . . . . . . . . . 112
9.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

10 La programmation dynamique. 119


10.1 Le problème du voyageur . . . . . . . . . . . . . . . . . . . . . 119
6 Table des matières

10.2 Résolution des problèmes dynamiques . . . . . . . . . . . . . . . 123


10.3 Un problème d’affectation de ressources rares . . . . . . . . . . . 124
10.4 Application à la planification de la production. . . . . . . . . . . 126
10.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

11 Les modèles non linéaires 131


11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
11.2 Difficulté de résolution des problèmes non linéaires . . . . . . . . 132
11.3 Différence avec la programmation linéaire . . . . . . . . . . . . . 133
11.4 Les problèmes convexes . . . . . . . . . . . . . . . . . . . . . . 136
11.5 Conditions de Kuhn et Tucker . . . . . . . . . . . . . . . . . . . 138
11.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

12 Résolution des problèmes non linéaires 143


12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
12.2 Programmation séparable . . . . . . . . . . . . . . . . . . . . . 144
12.2.1 Résolution par la notion d’épigraphe . . . . . . . . . . . 146
12.2.2 Résolution par la notion d’enveloppe convexe . . . . . . . 147
12.3 La méthode de Franck-Wolfe . . . . . . . . . . . . . . . . . . . 149
12.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Partie I
La programmation linéaire et en nombres
entiers

7
Chapitre 1

La programmation linéaire.

1.1 Introduction

L’objectif de ce cours est double. Il s’agit, d’une part, de donner une introduction
à la formulation en modèles d’optimisation. Il s’agit, d’autre part, de présenter
les techniques de résolution de ces problèmes.
On parle de problème d’optimisation lorsqu’il faut maximiser une fonction
sous contraintes. Par exemple, maximiser le bénéfice d’une entreprise sous les
contraintes de satisfaire la demande et de respecter la capacité de production.
Le cours est divisé en deux parties correspondant à des types différents de
modèles d’optimisation.
Dans la première partie du cours, nous nous concentrerons sur les problèmes
linéaires et les problèmes en nombres entiers.
Nous commencerons par le cas des problèmes linéaires, c’est-à-dire les problè-
mes où la fonction objectif et les contraintes sont purement linéaires. Lorsqu’il n’y
a que deux variables de décision, un problème linéaire peut être résolu de manière
purement graphique. C’est ce que nous verrons dans ce chapitre. Lorsqu’il y a un
plus grand nombre de variables, un algorithme mis en œuvre sous la forme d’un
programme informatique s’avère nécessaire. Il s’agit de l’algorithme du Simplexe
que nous verrons au chapitre 2. Au chapitre 5, nous examinerons une question très
importante : à savoir la sensibilité de la solution à des modifications de données.
On parle d’analyse post-optimale.
Lorsque les variables doivent prendre des valeurs entières, on parle de problè-
mes en nombres entiers. On devrait à proprement parler de problèmes linéaires en
nombres entiers car on impose, en plus, aux contraintes et à la fonction objectif
d’être linéaires. Nous verrons au chapitre 6 une technique de résolution de ces
problèmes : il s’agit de la méthode de branch and bound.
Dans la seconde partie du cours, nous nous concentrerons sur les problèmes

9
10 Chapitre 1. La programmation linéaire.

dynamiques et les problèmes non linéaires.


Le chapitre 10 est consacré à la formulation et à la résolution des problèmes
dynamiques, c’est-à-dire ceux où une décision stratégique doit être prise à chaque
étape. Une application typique est la planification de production où à chaque
période de l’horizon de planification, on doit décider du niveau de production.
Lorsque les contraintes et/ou la fonction objectif sont non linéaires, on parle
de problèmes non linéaires. Nous verrons au chapitre 11 quelques méthodes de
résolution de ces problèmes.
Il est à remarquer que toutes ces méthodes de résolution étant mises en œuvre
dans des logiciels commerciaux, il ne viendrait plus à l’idée de les programmer
soi-même. Par exemple, le solveur d’Excel dispose d’une implémentation de ces
algorithmes.

1.2 Plan du cours

Partie I : les problèmes linéaires et en nombres entiers.

• La programmation linéaire.
• L’algorithme du Simplexe.
• Questions sur l’algorithme du Simplexe.
• L’analyse post-optimale.
• Les modèles en nombres entiers.
• Résolution des modèles en nombres entiers.

Partie II : les modèles sur réseau, dynamiques et non linéaires.

• Les modèles sur réseau.


• La programmation dynamique.
• Application à la planification de production.
• Les modèles non linéaires.
• Résolution des modèles non linéaires.

1.3 Un simple exemple

Nous prenons un exemple tiré de Hillier et Lieberman [10]. Il s’agit d’une ent-
reprise de fabrication de chassis qui envisage la production de deux nouveaux
Section 1.3. Un simple exemple 11

modèles au moyen des capacités résiduelles de ses trois ateliers. Il s’agit respec-
tivement d’un chassis en aluminium et d’un chassis en bois. Le premier produit
nécessite le passage dans le premier atelier pour fabriquer le cadre en aluminium et
dans le troisième atelier où le verre est monté sur le chassis. Tandis que le second
produit nécessite le passage dans le deuxième atelier pour fabriquer le cadre en
bois et dans le troisième atelier où le verre est monté sur le chassis. Les marges
unitaires, les temps de fabrication de chacun des produits dans chacun des ateliers
ainsi que les capacités hebdomadaires résiduelles de ces ateliers sont donnés au
tableau 1.1.

Produit 1 Produit 2 Capacité disponible


(heures/produit) (heures/produit) (heures/semaine)
Atelier 1 1 0 4
Atelier 2 0 2 12
Atelier 3 3 2 18
Marge 3$ 5$

Tableau 1.1: Marges, temps d’usinage et capacités.

La question qui se pose est la suivante : “Combien faut-il produire de chassis


de chaque type par semaine pour maximiser le profit net ?”
La formulation d’un problème d’optimisation comporte toujours les trois étapes
suivantes :

1. choix des variables du modèle;

2. formulation de l’objectif;

3. formulation des contraintes.

La première étape consiste à choisir les variables du problème.

Définition 1.1 On appelle variable toute quantité utile à la résolution du problème


dont le modèle doit déterminer la valeur.

Cette définition permet de différencier les variables des paramètres, qui sont des
données qui peuvent varier, par exemple d’une période à l’autre ou d’un scénario
à l’autre. Ici les quantités que le modèle doit déterminer sont les productions de
12 Chapitre 1. La programmation linéaire.

chassis par semaine. Notons donc :


x1 = nombre de chassis de type 1 produits par semaine,
x2 = nombre de chassis de type 2 produits par semaine.

La deuxième étape consiste à formuler mathématiquement l’objectif.

Définition 1.2 On appelle fonction objectif d’un problème d’optimisation le cri-


tère de choix entre les diverses solutions possibles.

Ici l’entreprise désire maximiser son profit net. La marge étant de 3 pour le premier
type de chassis et de 5 pour le second, l’objectif s’exprime comme suit :
max z = 3x1 + 5x2

La troisième étape est la formulation les contraintes du problème.

Définition 1.3 On appelle contraintes du problème toutes les relations limitant


le choix des valeurs possibles des variables.

Ces relations peuvent être de simples bornes sur les variables. Par exemple, les
quantité produites ne peuvent être négatives. Mathématiquement :
x1 , x2 ≥ 0.

Elles peuvent être plus complexes comme les contrainte de capacité de produc-
tion. Le temps pour assembler 1 chassis de type 1 dans l’atelier 1 est de 1 heure
où il reste 4 heures disponibles. D’où la contrainte de capacité de l’atelier 1 :
x1 ≤ 4
Semblablement, on peut construire les contraintes de capacités des deux autres
ateliers :
2x2 ≤ 12
3x1 + 2x2 ≤ 18

Il est alors très utile de reprendre sous une forme condensée la formulation
complète du problème. Ici, on obtient la formulation suivante :
max z = 3 x1 + 5 x2


 x1
 ≤ 4



 2x2 ≤ 12

 (1.1)
s.c.q. 
3x1 + 2x2 ≤ 18



 x1 ≥ 0




x2 ≥ 0
Section 1.4. Résolution graphique 13

1.4 Résolution graphique

Comme annoncé dans l’introduction, dans le cas de deux variables de décision,


un problème linéaire peut être résolu de manière purement graphique en suivant le
processus en trois étapes qui suit.
La première étape de la résolution consiste à représenter graphiquement la
région réalisable.

Définition 1.4 On appelle région réalisable, l’ensemble des valeurs de variables


de décision qui satisfont toutes les contraintes.

Dans le cas de l’exemple, c’est l’ensemble des points (x1 , x2 ) satisfaisant les
inégalités de (1.1).
Graphiquement une inégalité telle que 3x1 + 2x2 ≤ 18 correspond à un demi-
plan limité par la droite obtenue en prenant l’inéquation à l’égalité (3x1 +2x2 = 18).
Lorsque l’on fait l’intersection des cinq demi-plans correspondant aux cinq inéga-
lités : 

 x1
 ≤ 4 (1)



 2x2 ≤ 12 (2)



3x1 + 2x2 ≤ 18 (3)



 x1 ≥ 0 (4)




x2 ≥ 0 (5)
on obtient le polygone hachuré à la figure 1.1. En économie, cet ensemble réalisable
est encore appelé l’ensemble de production.
Généralisation. La notion de polyèdre de Rn .
Plus généralement, si on a n variables, on ne parle plus de polygone, mais bien
de polyèdre. En effet, la région de Rn correspondant aux solutions d’une inégalité
linéaire du type suivant :

ak1 x1 + ak2 x2 + . . . + akn xn ≤ bk

est un demi-espace fermé situé d’un côté de l’hyperplan de Rn d’équation :

ak1 x1 + ak2 x2 + . . . + akn xn = bk .

Définition 1.5 On appelle polyèdre de Rn l’ensemble des x ∈ Rn vérifiant un


système d’inéquations linéaires :

ak1 x1 + ak2 x2 + . . . + akn xn ≤ bk , k = 1, . . .p


14 Chapitre 1. La programmation linéaire.

x2
(4)
10

8 (1)
(2)
6

2 (3)
(5)
0 2 4 6 8 x1

Figure 1.1: Ensemble de production.

A titre d’illustration, le polyèdre de R3 défini par les inégalités suivantes :

x1 + x2 + x3 ≤ 1
x1 , x2 , x3 ≥ 0

est représenté à la figure 1.2 par le prisme OABC où O note l’origine des axes.

x3

x2
O B

x1 A

Figure 1.2: Hyperfaces d’un polyèdre dans R3 .

On voit ici clairement que le système est sous-déterminé. On va devoir choisir


entre ces différents plans de production. Pour ce faire, et c’est la deuxième étape
de la résolution, on va représenter graphiquement des lignes d’isovaleur de la
fonction objectif :
z = 3x1 + 5x2 .
Section 1.4. Résolution graphique 15

En effet, on remarquera que l’expression de la fonction objectif fait intervenir trois


variables et ne peut donc être représentée que dans l’espace. Pour se ramener dans
le plan, on va considérer des valeurs successives de l’objectif :

z = k.

Ce qui correspond graphiquement à des droites parallèles

3x1 + 5x2 = k.

Les points d’une de ces droites sont donc le lieu de tous les points donnant la même
valeur du profit (d’où le nom de droite d’isovaleur de la fonction objectif). Ceci
est fait à la figure 1.3 où l’on a représenté z = 10, 20 et 36.
x2

10

8
(2, 6)
6

4
(4 , 3)
2 z = 36

0 2 6 8 x1
z = 10 z = 20

Figure 1.3: Droites d’isoprofit.

Enfin, et c’est la troisième étape de la résolution, l’optimum sera déterminé


graphiquement comme le plan de production situé sur la droite d’isoprofit la plus
élevée, c’est-à-dire celle qui donne le profit le plus élevé. On voit à la figure 1.3
qu’il s’agit du point
x∗ = (2, 6).
Justifions ce choix. Comme on maximise le profit on a intérêt à prendre la droite
d’isovaleur la plus élevée possible. Bien sûr, il faut que le plan de production soit
encore réalisable : autrement dit, il faut se restreindre à la région réalisable. On a
alors la très important remarque suivante :
Observation 1 :
Pour maximiser l’objectif, il faut prendre la droite d’isovaleur de l’objectif qui
touche encore la région réalisable et qui donne la plus grande valeur à l’objectif.
16 Chapitre 1. La programmation linéaire.

Sur base de cet exemple, on tire une deuxième observation :


Observation 2 :
On constate que la solution optimale est à un sommet de la région réalisable.
On peut alors se demander si la solution optimale sera toujours à un sommet de
la région réalisable. En fait, lorsque la ligne d’iso-marge est parallèle à un côté du
polygone, on a que tout le côté du polygone est optimal. Par exemple, si l’objectif
avait été z = 3x1 + 2x2 , tout le segment entre (2,6) et (4,3) aurait été optimum.
Observation 3 :
Même si tout un côté du polygone est optimal, on peut toujours choisir une solution
optimale correspondant à un sommet.
En conclusion, on peut voir qu’il suffit d’évaluer la valeur de l’objectif en
chacun des sommets pour déterminer l’optimum d’un problème linéaire.
Mais on peut aller plus loin encore pour limiter le nombre de sommets à
examiner en se basant sur la quatrième observation suivante.
Observation 4 :
Le long d’un côté du polygone, la valeur de l’objectif peut être soit constante, soit
strictement croissante, soit strictement décroissante.
On peut donc suggérer l’algorithme suivant :

Algorithme 1.1 Principe de l’algorithme du Simplexe.

i) Choisir comme point de départ un sommet x∗ de la région réalisable.


ii) Déterminer les côtés passant par ce sommet x∗ . Trouver un côté le long
duquel z croı̂t. S’il n’y en n’a pas, STOP : le x∗ courant est optimal.
iii) Déterminer le sommet y∗ à l’autre bout du côté et poser x∗ = y∗ . Retour en
ii).

Nous allons voir au chapitre suivante comment généraliser cet algorithme au cas
de Rn : on obtient alors l’algorithme du Simplexe. Mais avant cela, généralisons
la notion de côté et de sommet et voyons la formulation générale d’un problème
linéaire.
Généralisation. Notion de faces d’un polyèdre.
On peut également généraliser les notions de cotés et de sommet d’un polygone.
Il s’agit, en fait, de cas particuliers de la notion de face d’un polyèdre.

Définition 1.6 On appelle face d’un polyèdre l’ensemble des points appartenant
au polyèdre et qui vérifient un certain nombre de contraintes à l’égalité :
ak1 x1 + ak2 x2 + . . . + akn xn = bk , k ∈ I ⊆ {1, . . .p}
Section 1.5. Formulation générale 17

Suivant la dimension de l’ensemble obtenu, on a des noms particuliers.

Définition 1.7 Dans l’espace Rn , on appelle hyperface, une face de dimension


n − 1, arête, une face de dimension 1 et sommet, une face de dimension 0.

Reprenons l’exemple du polyèdre OABC ci-dessus. Le triangle ABC est l’en-


semble des points du polyèdre vérifiant une contrainte à l’égalité (x1 +x2 +x3 = 1).
Il s’agit donc d’une face. Elle est de dimension 2 et donc il s’agit donc d’une hyper-
face. La droite AB est l’ensemble des points du polyèdre vérifiant 2 contraintes à
l’égalité (x1 + x2 + x3 = 1 et x3 = 0). Elle est de dimension 1 : il s’agit donc
d’une arête. Le point C est l’intersection de 3 (n = 3) hyperplans délimitants, il
est de dimension 0 : c’est donc un sommet.

1.5 Formulation générale

Nous allons généraliser l’exemple introductif. Considérons qu’il y a n produits


possibles (ici n = 2) nécessitant l’utilisation éventuelle de m ressources limitées
(ici m = 3 ateliers de capacité limitée). Notons cj , l’accroissement du profit par
unité de produit j et bi , la quantité de ressource i disponible. Notons par aij la
quantité de ressource i consommée pour produire une unité de produit j. Les
données numériques du problème sont résumées au tableau 1.2.

Ressource Produit Capacité


1 2 ... n disponible
1 a11 a12 . . . a1n b1
2 a21 a22 . . . a2n b2
..
.
m am1 am2 ... amn bm
marge c1 c2 ... cn

Tableau 1.2: Données numériques du problème.

Un programme linéaire peut donc se formuler en général de la manière sui-


vante. On veut déterminer le point qui maximise un critère, fonction linéaire
des variables de décision, tout en respectant des contraintes, elles aussi fonctions
18 Chapitre 1. La programmation linéaire.

linéaires des variables de décision. On peut écrire :

max z = c1 x1 + c2 x2 · · · + cn xn ,






a11 x1 + a12 x2 · · · + a1n xn ≤ b1 ,







a21 x1 + a22 x2 · · · + a2n xn ≤ b2 ,



 .. .. .. ..

 . . . .





 am1 x1 + am2 x2 · · · + amn xn ≤ bm ,
s.c.q. 

 x1 ≥ 0,









x2 ≥ 0,



 ..

 .





 xn ≥ 0.

On a donc un problème à n variables et à m + n contraintes d’inégalité, les n


dernières étant celles de non négativité des variables.
Matriciellement, le problème peut s’écrire comme

max z = cT x,


 Ax ≤ b, (1.2)
s.c.q. 
 x ≥ .

avec A matrice (m × n) b vecteur (m × 1)


c vecteur (n × 1) x vecteur (n × 1).

Définition 1.8 Tout point x vérifiant les contraintes de (1.2) est dit une solution
réalisable pour le problème linéaire.

Notons par S la région réalisable :


S = {x ∈ Rn |Ax ≤ b, x ≥ 0} .

Parmi ces solutions réalisables, celles qui maximisent l’objectif sont appelées
solutions optimales.

Définition 1.9 Tout point x∗ ∈ S et tel que


∀x ∈ S, cT x∗ ≥ cT x,
est dit une solution optimale pour le problème linéaire (1.2).
Section 1.6. Exercices 19

1.6 Exercices

1.1. Recyclage du papier. Une société de tri de déchets et recyclage de pa-


pier peut se fournir en déchets auprès de deux villes. Son rôle consiste à
séparer les listes d’ordinateur et les journaux. La répartition entre ménages
et sociétés est différente d’une ville à l’autre expliquant un pourcentage
différent de listes d’ordinateur et de journaux dans les déchets. Ces pour-
centages ainsi que la quantité maximum de déchets que peuvent fournir par
an ces deux villes sont reprises au tableau suivant :

Ville Listes (%) Journaux (%) Offre (tonnes par an)


Ville 1 5 20 10.000
Ville 2 15 30 20.000

La société offre aux villes un prix de 35 EURO par tonne de déchet. Elle
doit décider du montant optimal de déchets à acheter à chaque ville pour
minimiser son coût d’achat. Pour couvrir ses frais fixes, la société doit au
moins collecter 1.500 tonnes de listing d’ordinateur par an. Au delà de 6.000
tonnes de journaux mis sur le marché par an, le prix que la société reçoit
pour la vente de journaux chute et donc la compagnie ne désire pas vendre
plus que cette quantité. Combien la société doit-elle acheter de déchets par
an à chacune des villes ?

(a) Formuler mathématiquement le problème (choix des variables, expres-


sion des contraintes et de l’objectif);
(b) Déterminer graphiquement le plan d’achat optimal et en déduire le coût
d’achat minimum.

1.2. Planification de production sur coût variable. Une entreprise fabrique


deux produits P1 et P2 . Chaque produit doit passer les deux ateliers d’usinage
et de finition. Le mois dernier, 500 unités de P1 ont été produites grâce à
750 heures d’usinage et 250 heures de finition. De même, 700 unités de
P2 ont été produites, nécessitant 700 heures d’usinage et 350 heures de
finition. L’entreprise dispose également d’une section administration. Une
partie du coût de production est indépendante du nombre d’heures passées à
la production (les frais fixes), une partie est directement proportionnelle au
nombre d’heures passées à la production (les frais variables). Le mois passé,
20 Chapitre 1. La programmation linéaire.

on a observé la répartition suivantes entre frais fixes et frais variables :

Section frais fixes frais variables


Administration 50.000 0
Usinage 60.000 11.600
Finition 40.000 6.000

Il y a un coût de conditionnement de 8 euros l’unité pour P1 et de 6 euros


pour P2 . Les prix de vente sont de 55 euros et 43 euros respectivement.

(a) Calculer les marges sur coûts variables (différence entre prix de vente
et coût variable de production) par unité de chacun des deux produits.
Indication : calculer d’abord le prix de l’heure dans chacun des ateliers
et le temps nécessaire dans chacun des ateliers par produit.
(b) Les capacités de production sont de 1.200 heures par mois pour l’usi-
nage et de 500 heures pour la finition. Formuler le programme linéaire
correspondant à la maximisation de la marge sur coûts variables.
(c) Déterminer graphiquement la solution optimale.
Chapitre 2

Algorithme du Simplexe.

2.1 Principe de l’algorithme

L’algorithme du Simplexe permet la détermination d’une solution optimale d’un


programme linéaire lorsqu’une telle solution existe. Dans le cas contraire, l’al-
gorithme, lors du passage par une phase préliminaire appelée phase I, détermine
l’absence de solution réalisable. Nous verrons la phase I au chapitre 4.
Rappelons la formulation de l’exemple introductif :

max z = 3 x1 + 5 x2


 x1
 ≤ 4



 2x2 ≤ 12

 (2.1)
s.c.q. 
3x1 + 2x2 ≤ 18



 x1 ≥ 0




x2 ≥ 0

dont la représentation graphique est donnée à la figure 2.1.


Le principe de l’algorithme du Simplexe est de déterminer une solution opti-
male en allant de sommet en sommet adjacent. Partant du point (0,0), l’algorithme
va déterminer une arête le long de laquelle l’objectif s’accroı̂t : par exemple, l’arête
en direction de (0,6). Ensuite, on va aller jusqu’au bout de cette arête : c’est-à-dire
au sommet (0,6). Et le processus continue de manière itérative. On détermine une
arête le long de laquelle l’objectif s’accroı̂t : l’arête en direction de (2,6). On va
jusqu’au bout de l’arête et, là, on constate que tout mouvement, en arrière vers (0,6)
ou en avant vers (4,3), conduit à diminuer l’objectif. On est donc à l’optimum.
Nous allons maintenant voir comment effectuer ces mêmes opérations en uti-
lisant uniquement l’algèbre. C’est l’objet de l’algorithme du Simplexe.

21
22 Chapitre 2. Algorithme du Simplexe.

x1 = 0

10
(0, 9)
8 x1 = 4

(2, 6) (4 , 6)
(0, 6) 2x2 = 12

4 (4, 3)
2 3x1 + 2x2 = 18

(0 , 0) 2 (4, 0) (6 , 0) 8 x2 = 0

Figure 2.1: Un exemple de programme linéaire

2.2 Formes canoniques d’un programme linéaire.

La forme canonique d’un programme linéaire dans l’espace des variables originales
avait été vue au chapitre 1. Elle correspond à la forme matricielle suivante :

max z = cT x,


 Ax ≤ b,
s.c.q. 
 x ≥ .

avec A matrice (m × n) b vecteur (m × 1)


c vecteur (n × 1) x vecteur (n × 1).
Il s’agit d’un problème avec n variables et m + n contraintes d’inégalité.
Cependant, parmi ces dernières , il y a m contraintes qui peuvent être des contraintes
d’inégalité générales et n qui ne sont que des contraintes de positivité des variables.
Observons qu’il est toujours possible de transformer une contrainte d’inégalité
générale en une contrainte d’égalité par ajout d’une variable à laquelle on impose
d’être non négative. Considérons, par exemple, la contrainte
3x1 + 2x2 ≤ 18.
Imposer que le membre de gauche soit inférieur ou égal au membre de droite,
revient à dire qu’il faudrait ajouter une quantité non négative au membre de gauche
pour qu’il y ait égalité :
3x1 + 2x2 + x3 = 18,
avec la condition que la variable x3 soit non négative
x3 ≥ 0.
Section 2.2. Formes canoniques d’un programme linéaire. 23

Cette quantité représente un déficit ou un écart. Comme cet écart peut varier, on
l’appelle variable d’écart.

Définition 2.1 La variable d’écart est la quantité qui, ajoutée au membre de


gauche d’une contrainte, permet de transformer la contrainte en égalité.

Bien que dans la forme canonique on ne considère que des contraintes d’iné-
galités générales du type inférieur ou égal, on peut aussi envisager de transformer
des contraintes générales du type supérieur ou égal en égalité. Lorsqu’on impose

2x1 + x2 ≥ 4,

on impose que le membre de gauche dépasse le membre de droite. Il y a donc


aussi un écart qui s’avère cette fois être un surplus. Pour revenir à l’égalité, il faut
retrancher une quantité non négative du membre de gauche.

2x1 + x2 − x3 = 4,

avec x3 ≥ 0.
Appliquons ceci au problème (2.1). On obtient le problème sous forme standard
avec égalités suivant :

max z = 3x1 + 5x2




 x1


+x3 = 4

 2x2 +x4 = 12 (2.2)
s.c.q. 

 3x1 +2x2 +x5 = 18



x1 , x2 , x3 , x4 , x5 ≥ 0

Remarquons qu’il y a équivalence totale entre les deux formes. En effet,


d’une part, toute solution réalisable du problème (2.1) peut être augmentée en une
solution réalisable pour le problème (2.2). Toute solution réalisable du problème
(2.2) peut être tronquée en une solution réalisable pour le problème (2.1). Comme,
d’autre part, les fonctions objectifs sont identiques, on a bien équivalence entre les
deux problèmes.
Illustrons cette correspondance entre solutions : à la solution (3,2) du problème
(2.1) correspond la solution augmentée (3,2,1,8,5) du problème (2.2). Dans l’autre
sens, il suffit de tronquer la solution dans R5 en ne retenant que ses deux premières
composantes.
24 Chapitre 2. Algorithme du Simplexe.

2.3 Notion de solution de base

On remarquera que les égalités du problème (2.2) forment un système de m =3


égalités en n + m = 2 + 3 = 5 inconnues. Donc la valeur de n = 2 variables peut
être fixée arbitrairement. Par exemple, dans le système d’égalités :




 x1 +x3 = 4


2x2 +x4 = 12 (2.3)





 3x1 +2x2 +x5 = 18

les deux variables x1 et x2 peuvent être fixées à zéro. On dit qu’elles sont mises
hors base.

Définition 2.2 On appelle variables hors base (v.h.b.) les n variables de Rn+m
fixées à zéro. Les m variables restantes sont appelées variables de base (v.b.).

Dans l’exemple, les variables de base sont donc x3 , x4 et x5 dont on peut lire
la valeur dans (2.3) :

x3 = 4
x4 = 12
x5 = 18

Définition 2.3 On appelle solution de base une solution où en ayant choisi n
variables hors base, on obtient une solution unique en résolvant les m contraintes
d’égalités obtenues en ajoutant les variables d’écart.

Définition 2.4 On appelle solution de base réalisable une solution de base qui,
en plus, vérifie les contraintes de positivité.

Dans l’exemple, la solution de base suivante :

x1 = 0, x2 = 0 variables hors base


x3 = 4, x4 = 12, x5 = 18 variables de base
est réalisable car toutes les variables de base sont positives.
Le lien entre l’algèbre et la géométrie est alors donné par la propriété suivante.

Propriété 2.1 La notion géométrique de sommet du polygone correspond à la


notion algébrique de solution de base réalisable.
Section 2.3. Notion de solution de base 25

On peut vérifier cette propriété sur l’exemple. A la figure 2.1, les sommets
(0,0), (0,6), (2,6), (4,3), (4,0) correspondent à des solutions de base réalisables
tandis que les points (0,9), (4,6) et (6,0) correspondent à des solutions de base non
réalisables. Cette correspondance est établie au tableau 2.1.

v.h.b. (x1 , x2 ) (x3 , x4 , x5 ) sommet ?


x1 , x2 (0, 0) (4, 12, 18) oui
x1 , x4 (0, 6) (4, 0, 6) oui
x1 , x5 (0, 9) (4, −6, 0) non
x4 , x5 (2, 6) (2, 0, 0) oui
x3 , x4 (4, 6) (0, 0, −6) non
x3 , x5 (4, 3) (0, 6, 0) oui
x2 , x3 (4, 0) (0, 6, 6) oui
x2 , x5 (6, 0) (−2, 12, 0) non

Tableau 2.1: Correspondance entre solution de base réalisable et sommet.

Nous avons déjà annoncé que l’algorithme du Simplexe consiste à aller de


sommet en sommet adjacent. Interprété algébriquement, cela revient à considérer
un passage d’une solution de base réalisable à une autre solution de base réalisable.
La notion d’adjacence doit être étendue aux solutions de base.
Définition 2.5 On appelle solutions de base adjacentes deux solutions de base
dont les variables de base sont les mêmes sauf une qui est de base dans la première
base et hors base dans la seconde.
Dans l’exemple, les deux solutions de base suivantes sont adjacentes :
x1 = 0, x1 = 0,
x2 = 0, x2 = 6,
x3 = 4, x3 = 4,
x4 = 12, x4 = 0,
x5 = 18, x5 =6
car elles ne diffèrent que par une seule variable hors base. Par contre les solutions
suivantes :
x1 = 0, x1 = 2,
x2 = 0, x2 = 6
26 Chapitre 2. Algorithme du Simplexe.

ne sont pas adjacentes puisqu’elle diffèrent par plus d’une variable hors base. On
peut le vérifier à la figure 2.1.

Propriété 2.2 La notion géométrique de sommets adjacents correspond à la no-


tion algébrique de solutions de base réalisables adjacentes.

2.4 Initialisation de l’algorithme

La question qui se pose est : “Comment choisir le point de départ ?”


Si le problème est mis sous forme d’inégalités avec bi ≥ 0, i = 1, . . .n, il suffit
de prendre l’origine comme point de départ. Dans l’exemple, cela donne :

(x1 , x2 ) = (0, 0)

En termes algébriques, toutes les variables originales sont mises hors base. Auto-
matiquement , dans le système d’égalités :




 x1 +x3 = 4


 2x2 +x4 = 12 ,




 3x1 +2x2 +x5 = 18

on lit la valeur des variables de base :

x3 = 4
x4 = 12
x5 = 18

D’où la solution de base réalisable de départ :

(0, 0, 4, 12, 18).

Remarquons que si un membre de droite avait été négatif ou si une contrainte avait
été sous forme d’égalité, on n’aurait pas pu démarrer ainsi. Ces embûches peuvent
être levées en passant par une phase préliminaire appelée phase I de l’algorithme
du Simplexe (voir chapitre 4).
Que vaut la fonction objectif pour cette première solution de base ?

z = 3x1 + 5x2 = 3 · 0 + 5 · 0 = 0,

c’est-à-dire une marge bénéficiaire nulle, ce qui n’est pas étonnant vu que cela
correspond à une production nulle des deux produits.
Section 2.5. Une itération Simplexe 27

2.5 Une itération Simplexe

Pour rappel, le principe de l’algorithme du Simplexe consiste à se déplacer de


sommet en sommet adjacent de façon à améliorer la fonction objectif. On va donc
se déplacer à partir de notre solution de base de départ vers une solution de base
réalisable en suivant une arête le long de laquelle l’objectif s’accroı̂t.

2.5.1 Choix de la direction

La question qui se pose est alors : comment choisir la direction ? Remarquez


qu’algébriquement, cette question se formule de manière équivalente par : quelle
variable hors base va entrer en base ?
Le critère de sélection de la variable entrante est de prendre la variable hors
base qui fournit le plus fort taux d’augmentation de la fonction objectif :

z = 3x1 + 5x2 .

Pour une augmentation unitaire de x1 , z augmente de 3. Pour une augmentation


unitaire de x2 , z augmente de 5.
Le critère de sélection de la variable entrante est donc le suivant : on choisit
la variable avec le coefficient objectif le plus élevé.
Remarquez que pour pouvoir appliquer ce critère simple (choisir la variable
de coefficient objectif le plus élevé), la fonction objectif z doit être exprimée en
fonction des seules variables hors base.

2.5.2 Choix de la variable sortante

La question qui se pose est : quand s’arrêter le long de la direction ?


Géométriquement, on se dirige sur l’axe x2 et on s’arête en (6,0), à la première
contrainte rencontrée. Algébriquement, on constate qu’en ce point la variable
d’écart x4 s’annule et aller au delà conduirait à la rendre négative. On va donc pous-
ser x2 le plus loin possible, tant que les variables de base restent non négatives.
Le critère de sélection de la variable sortante est donc le suivant : prendre
comme variable sortante la première variable de base à s’annuler.
En maintenant x1 hors base dans (2.3), on obtient la variation des variables de
base en fonction de x2 :

x3 = 4 ≥ 0
28 Chapitre 2. Algorithme du Simplexe.

x4 = 12 − 2x2 ≥ 0
x5 = 18 − 2x2 ≥ 0

ou encore :
12
x2 ≤ =6
2
18
x2 ≤ =9
2

On en conclut que la variable sortante est x4 , c’est-à-dire la première qui


s’annule (pour x2 = 6).
De manière générale, on calcul le minimum du rapport du coefficient du membre
de droite sur le coefficient de la variable entrante dans la même ligne lorsque
celui-ci est positif. La variable sortante est celle dont on lit la valeur dans la
ligne où ce minimum se produit.

2.5.3 Calcul du nouveau sommet

La question qui se pose est : comment calculer la nouvelle solution de base ?


On va y répondre en utilisant la résolution de systèmes. Plus précisément, on
va calculer la nouvelle solution de base en explicitant le système (2.3) en fonction
des nouvelles variables de base.
Ceci peut être fait au moyen de deux types d’opérations qui ne modifient pas
l’ensemble des solutions d’un système d’équations :

1. Multiplier une égalité par une constante non nulle;


2. Additionner un multiple d’une équation à une autre équation.

Appliquons ceci à l’exemple. Ajoutons au système de départ (2.3) en première


ligne la définition de la fonction objectif :

z −3x1 −5x2 = 0 (0)


x1 +x3 = 4 (1)
2x2 +x4 = 12 (2)
3x1 +2x2 +x5 = 18 (3)

Donc x2 remplace x4 comme variable de base. On veut donc expliciter x2 dans


la contrainte (2) en lieu et place de x4 . Pour ce faire, il faut :
Section 2.5. Une itération Simplexe 29

1. Amener un 1 comme coefficient de x2 dans (2). Autrement dit, la nouvelle


contrainte notée (2’) est l’ancienne (2) multipliée par 1/2 :
1
(2 ) = (2) ×
2

2. Eliminer x2 des autres équations. Ceci en retranchant à la contrainte (3) la


contrainte (2) et en ajoutant à l’objectif (0) cinq fois la nouvelle contrainte
(2’) :

(3 ) = (3) − (2)


(0 ) = (0) + 5 × (2 )

Le nouveau système est donc le suivant :

z −3x1 + 52 x4 = 30 (0 )
x1 +x3 = 4 (1)
x2 + 12 x4 = 6 (2 )
3x1 −x4 +x5 = 6 (3 )

où l’on peut lire directement (en se souvenant que x1 et x4 sont hors base
donc nulles) :

z = 30
x3 = 4
x2 = 6
x5 = 6

On en déduit la valeur de la nouvelle solution de base :

(x1 , x2 , x3 , x4 , x5 ) = (0, 6, 4, 0, 6)

qui donne la nouvelle valeur de l’objectif :

z = 30.

Remarquez que les opérations d’élimination de x2 des lignes autres que la


deuxième se font obligatoirement en retranchant à chacune de ces lignes un mul-
tiple de la deuxième ligne. Toute autre opération détruirait les colonnes de la
matrice identité dans le système résultant comme on peut le constater en essayant,
par exemple, de faire :
(3 ) = −1 × (3) + (2).
30 Chapitre 2. Algorithme du Simplexe.

2.5.4 Test d’optimalité

La question qui se pose maintenant est la suivante : comment déterminer le fait


d’être optimum.
Un sommet est optimal si tous les sommets adjacents donnent des valeurs
inférieures ou égales à la fonction objectif. Comment peut-on voir s’il existe
encore un sommet adjacent profitable ?
Pour répondre à cette question, nous allons utiliser la ligne de définition de
l’objectif. L’équation (0’) se récrit :
5
z = 30 + 3x1 − x4 .
2
Comme x1 a un coefficient positif, il est intéressant de faire entrer x1 en base.
Le critère d’arrêt sera donc le suivant : la solution de base courante est opti-
male si tous les coefficients objectif sont négatifs ou nuls lorsque z est exprimée
en fonction des seules variables hors base.
Effectuons donc la seconde itération de l’algorithme du Simplexe. Au vu de
5
z = 30 + 3x1 − x4 .
2
on sélectionne donc pour la variable entrante x1 . En effet, c’est la variable avec
le plus grand coefficient objectif, et d’ailleurs la seule possible.
Pour déterminer la variable sortante, étudions la variation des variables de
base en fonction d’une augmentation de x1 :

x3 = 4 − x1
x2 = 6
x5 = 6 − 3x1

La variable sortante est x5 , c’est elle qui est la première à s’annuler (pour x1 = 2).
Pour calculer le nouveau sommet, on exprime le système en fonction des nou-
velles variables de base (x1 prend la place de x5 ) :

z + 32 x4 +x5 = 36
x3 + 13 x4 − 13 x5 = 2
x2 + 12 x4 = 6
x1 − 13 x4 + 13 x5 = 2
Section 2.5. Une itération Simplexe 31

Donnant la nouvelle solution de base réalisable :

(2, 6, 2, 0, 0)

Appliquons à nouveau le test d’optimalité. La ligne objectif s’écrit :


3
z = 36 − x4 − x5 .
2
Comme tous les coefficients objectifs sont négatifs, la solution courante

x∗1 = 2
x∗2 = 6

est optimale. Elle donne sa valeur maximale à l’objectif qui est de :

z ∗ = 36.

Nous verrons au chapitre suivant voir une autre façon de présenter les mêmes
calculs. Il s’agit de la présentation du Simplexe en tableaux.

2.5.5 Chemin suivi par l’algorithme du Simplexe

On peut suivre à la figure 2.1 le chemin emprunté par l’algorithme du Simplexe.


Partant du sommet (0,0), la première itération consiste à aller au sommet (0,6).
La second itération consiste à rejoindre le sommet (2,6). La troisième itération
consiste à constater que l’on est à l’optimum.
Nous verrons au chapitre 4 les différents problèmes qui peuvent se produire lors
de l’exécution de l’algorithme du Simplexe. Ces problèmes peuvent se produire
durant les trois étapes de l’algorithme :

1. Initialisations. Pourra-t-on toujours trouver une solution de base de départ


réalisable ?

2. Itérations. Pourra-t-on, à chaque itération, trouver une variable entrante ?


Pourra-t-on, à chaque itération, trouver une variable sortante ?

3. Terminaison. L’algorithme va-t-il converger en un nombre fini d’étapes ?

Mais avant cela donnons un résumé de l’algorithme du Simplexe.


32 Chapitre 2. Algorithme du Simplexe.

2.6 Algorithme du Simplexe

Terminons en donnant une description schématique de l’algorithme du Simplexe.

Algorithme 2.1 Algorithme du Simplexe.

Pas 0. Initialisations.

• Ajouter les variables d’écart.


• Sélectionner les variables originales comme variables hors base.

Pas 1. Choix de la variable entrante.

• Choisir comme variable entrante la v.h.b. donc le coefficient objectif


est le plus élevé lorsque z est exprimée en fonction des seules v.h.b.
• Si tous sont négatifs ou nuls, alors stop. Le tableau courant décrit une
solution optimale.
• Sinon, soit e l’indice de cette variable entrante.

Pas 2. Choix de la variable sortante.

• La variable sortante est la première à s’annuler : c’est celle pour laquelle


le minimum est atteint dans :
bs bi
= min
ase i|a ie >0 aie
Soit s l’indice de la ligne correspondante.

Pas 3. Déterminer la nouvelle solution de base :

• Diviser toutes les coefficients de la ligne s par ase .


• Eliminer xe des autres lignes par soustraction d’un multiple de la ligne
s.
• Retour au Pas 1.
Chapitre 3

L’algorithme du Simplexe en Tableaux

3.1 Introduction

Nous avons vu au chapitre précédent une présentation algébrique de l’algorithme


du Simplexe. Pour rappel, il s’agit, partant d’une solution de base (correspondant
à un sommet de la région réalisable), à chaque itération de

1. choisir comme variable entrante, celle de coefficient le plus élevé dans la


ligne objectif (ce qui correspond à choisir la direction assurant plus grand
taux d’accroissement à la fonction objectif);

2. choisir comme variable sortante, la première variable de base à s’annuler


(ce qui correspond à la rencontre de la première contrainte dans la direction
choisie);

3. faire le pivotage : la variable entrante prend la colonne de la variable sortante


dans le système d’équation, en ce compris dans l’expression de la fonction
objectif.

Nous allons maintenant voir une autre façon de présenter les mêmes calculs. Il
s’agit de la présentation du Simplexe en tableaux.
Nous verrons au chapitre suivant les embûches que l’on peut rencontrer à
chacune des étapes de l’algorithme.
On effectue généralement les calculs sur le tableau des coefficients qui porte
le nom de tableau Simplexe. Mais il faut bien garder à l’esprit que ce tableau et
les opérations que l’on va y effectuer ne sont qu’une traduction des opérations sur
le système d’équations algébriques correspondantes.

33
34 Chapitre 3. L’algorithme du Simplexe en Tableaux

3.2 Notion de tableau Simplexe

Définition 3.1 Un tableau Simplexe est constitué des coefficients des équations
algébriques sans le nom des variables. On aura donc :

1. les coefficients de la fonction objectif;

2. les coefficients des variables dans le membre de gauche des contraintes;

3. les coefficients du membre de droite.

où l’on sépare les coefficients de objectif des contraintes d’une barre horizontale
et les coefficients du membre de gauche des contraintes des coefficients du membre
de droite par une barre verticale.

Reprenons l’exemple du chapitre 1. Sa formulation est reprise ci-dessous :

max z = 3 x1 + 5 x2


 x1
 ≤ 4



 2x2 ≤ 12


s.c.q. 
3x1 + 2x2 ≤ 18



 x1 ≥ 0




x2 ≥ 0

Le système de départ :

z −3x1 −5x2 = 0
x1 +x3 = 4
2x2 +x4 = 12
3x1 +2x2 +x5 = 18

se met sous la forme du tableau suivant :

z x1 x2 x3 x4 x5
1 −3 −5 0 0 0 0
0 1 0 1 0 0 4
0 0 2 0 1 0 12
0 3 2 0 0 1 18
Section 3.3. Tableaux Simplexe et pivotage 35

où l’on a ajouté au dessus du tableau le nom des variables pour voir à quelle variable
correspond chaque colonne du tableau.
Plusieurs caractéristiques d’un tableau sont à remarquer.

• Tout d’abord les valeurs du membre de droite donnent les valeurs courantes
des variables de base.
• Ensuite la première ligne donne l’opposé des coefficients objectif.
• Enfin, le dernier coefficient première ligne donne la valeur courante de
l’objectif.
• On identifie des variables de base à une colonne de coefficient de la matrice
identité et à un coefficient objectif nul.

On en déduit la solution courante :

(x1 , x2 , x3 , x4 , x5 ) = (0, 0, 4, 12, 18)

3.3 Tableaux Simplexe et pivotage

A la première itération, on sélection comme variable entrante la variable x2 de


coefficient le plus négatif dans la ligne objectif. On indique ceci dans le tableau
en encadrant la colonne de la variable entrant que l’on appelle la colonne pivot :

z x1 x2 x3 x4 x5
1 −3 −5 0 0 0 0
0 1 0 1 0 0 4
0 0 2 0 1 0 12
0 3 2 0 0 1 18

On sélectionne la variable sortante comme étant la variable de base qui s’annule la


première. Comme nous l’avons vu au chapitre précédent, cela revient à calculer le
minimum du rapport du coefficient du membre de droite de chaque contrainte sur
le coefficient correspondant de la colonne pivot lorsque ce dernier est strictement
positif :  
12 18
min −, , = 6.
2 2
Dans le cas où le coefficient dans la colonne entrante est négatif ou nul, la ligne
n’entre pas en compte dans le calcul du minimum. Illustrons ceci sur un exemple.
36 Chapitre 3. L’algorithme du Simplexe en Tableaux

Supposons que le coefficient de x2 dans la première contrainte soit -1 à la place de


0. L’équation correspondante se récrit de manière équivalente comme suit :

x1 = 4 + x2

Quelle que soit la valeur de x2 > 0, la variable de base x1 reste positive.


La variable sortante est alors la variable de base dont la valeur se lit dans la
ligne où le minimum se produit : ici, il s’agit de la deuxième ligne et donc de la
variable x4 . Il suffit, dans le cas présent, de chercher la colonne identité dont le
coefficient 1 est dans la deuxième ligne. Elle correspond bien à la variable x4 .
On encadre alors la ligne où le minimum se produit. Cette ligne reçoit le nom
de ligne pivot :
z x1 x2 x3 x4 x5
1 −3 −5 0 0 0 0
0 1 0 1 0 0 4
0 0 2 0 1 0 12
0 3 2 0 0 1 18

Définition 3.2 On appelle élément pivot le coefficient situé à l’intersection de la


colonne pivot et de la ligne pivot.

C’est donc le centre de la croix ainsi formée par la ligne et la colonne pivot.
Le pas suivant de l’itération Simplexe consiste à déterminer le nouveau som-
met : ceci en exprimant x2 dans la deuxième équation en lieu et place de x4 .
Remarquez que cela revient à amener la colonne de x4 en lieu et place de celle de
x2 . Ceci peut être fait par deux types d’opérations :

1. Amener un coefficient 1 à la place du pivot en divisant la ligne pivot par le


pivot :
z x1 x2 x3 x4 x5
1 −3 −5 0 0 0 0
0 1 0 1 0 0 4
0 0 1 0 1/2 0 6
0 3 2 0 0 1 18
Section 3.3. Tableaux Simplexe et pivotage 37

2. Eliminer x2 des autres équations en retranchant chaque fois un multiple de


la nouvelle ligne pivot :

z x1 x2 x3 x4 x5
1 −3 0 0 5/2 0 30
0 1 0 1 0 0 4
0 0 1 0 1/2 0 6
0 3 0 0 −1 1 6

Rappelons que l’on doit utiliser, dans cette seconde opération, un multiple de la
ligne pivot à l’exclusion de toute autre ligne sinon on détruirait la matrice identité.
La nouvelle solution de base et la nouvelle valeur de l’objectif sont respective-
ment :

(x1 , x2 , x3 , x4 , x5 ) = (0, 6, 4, 0, 6)
z = 30.

Effectuons maintenant la deuxième itération de l’algorithme du Simplexe. Le


premier pas de la deuxième itération consiste à déterminer la variable entrante. Il
s’agit de x1 , la variable de coefficient le plus négatif dans la ligne objectif. D’où
la sélection de la colonne pivot suivante :

z x1 x 2 x 3 x4 x5
1 −3 0 0 5/2 0 30
0 1 0 1 0 0 4
0 0 1 0 1/2 0 6
0 3 0 0 −1 1 6

Le second pas de l’itération consiste à déterminer la variable sortante. On


calcul le minimum du rapport des coefficients du membre de droite sur le coefficient
correspondant de la colonne entrante lorsque celui-ci est strictement positif :
 
4 6
min , −, = 2.
1 3
Le minimum se produit dans la dernière ligne où l’on lit la valeur de x5 qui sort
38 Chapitre 3. L’algorithme du Simplexe en Tableaux

donc de base. On encadre la ligne pivot :

z x1 x 2 x 3 x4 x5
1 −3 0 0 5/2 0 30
0 1 0 1 0 0 4
0 0 1 0 1/2 0 6
0 3 0 0 −1 1 6

Le dernier pas de l’itération Simplexe consiste à déterminer la nouvelle so-


lution de base au moyen des deux types d’opérations élémentaires sur le tableau
Simplexe :

1. Amener un 1 en position pivot;

z x1 x 2 x 3 x4 x5
1 −3 0 0 5/2 0 30
0 1 0 1 0 0 4
0 0 1 0 1/2 0 6
0 1 0 0 −1/3 1/3 2

2. Eliminer x1 des autres contraintes.

Le résultat de ces deux types d’opérations est le suivant :

z x1 x2 x3 x4 x5
1 0 0 0 3/2 1 36
0 0 0 1 1/3 −1/3 2
0 0 1 0 1/2 0 6
0 1 0 0 −1/3 1/3 2

La nouvelle solution de base et la nouvelle valeur de l’objectif valent :

(x1 , x2 , x3 , x4 , x5 ) = (2, 6, 2, 0, 0)
z = 36.
Section 3.3. Tableaux Simplexe et pivotage 39

Si maintenant, on effectue par la troisième itération, on constate que lors du


premier pas de celle-ci, c’est-à-dire lors de la sélection de la variable entrante, il
n’y a aucun candidat. On arrête l’algorithme : la solution courante est optimale :

x∗1 = 2
x∗2 = 6
z ∗ = 36.

Le chemin suivi par l’algorithme du Simplexe est illustré à la figure 3.1.


Initialement, on part de l’origine des axes, soit le point P0 = (0, 0). Au cours de

x1

P 2 = (2, 6)
P 1 = (0, 6) 2x2 = 12
x1 = 4
4

3x1 + 2x2 = 18

P 0 = (0, 0) 2 4 6 x2

Figure 3.1: Chemin suivi par l’algorithme du Simplexe.

la première itération, on suit l’axe des x2 en direction du point P1 = (0, 6). A la


deuxième itération, on se dirige horizontalement vers le somme P2 = (2, 6). La
troisième itération constate l’optimalité du point P2 .
Nous verrons au chapitre suivant les embûches que l’on peut rencontrer dans
l’exécution de l’algorithme du Simplexe. En effet, nous avons ici supposé que l’on
pouvait toujours trouver une solution de base de départ réalisable et qu’à chaque
itération, il y avait toujours une variable sortant de la base. Nous verrons au chapitre
suivant comment on peut démarrer l’algorithme si toutes les contraintes initiales
ne se présentent pas sous forme de contraintes d’inégalités du type “inférieur ou
égal à” avec un membre de droite positif. Nous examinerons également ce qu’il
convient de faire si on ne trouve aucune variable candidate à sortir de la base.
Mais avant cela, résumons l’algorithme du Simplexe en tableaux.
40 Chapitre 3. L’algorithme du Simplexe en Tableaux

3.4 Algorithme du Simplexe en tableaux

Algorithme 3.1 Algorithme du Simplexe.

Pas 0. Initialisation : Pour démarrer l’algorithme,

1. Ajouter les variables d’écart aux contraintes d’inégalité.


2. Mettre les variables originales hors base et les variables d’écart en
base.
xj = 0, ∀j = 1, . . .n

Il en résulte le tableau de départ suivant :

z x1 x2 . . . xn xn+1 xn+2 . . . xn+m


1 −c1 −c2 −cn 0 0 0 0
0 a11 a12 a1n 1 0 0 b1
0 a21 a22 a2n 0 1 0 b2
.. ...
.
0 an1 an2 amn 0 0 1 b1

Pas 1. Choix de la variable entrante : sélectionner comme variable entrante la


variable hors base avec le coefficient dans la ligne objectif le plus négatif,
en se restreignant aux variables à coefficient négatif.

Soit xe telle que − ce ≤ −cj , ∀j| − cj < 0

Si une telle variable n’existe pas, stop : on a trouvé la solution optimale.


Sinon, on entoure la colonne correspondante qui est appelée colonne ent-
rante. Il en résulte le tableau suivant :

z x1 x2 xe xn xn+1 xn+2 . . . xn+m


1 −c1 −c2 −ce −cn 0 0 0 0
0 a11 a12 a1e a1n 1 0 0 b1
0 a21 a22 a2e a2n 0 1 0 b2
.. ...
.
0 an1 an2 ane amn 0 0 1 b1
Section 3.4. Algorithme du Simplexe en tableaux 41

Pas 2. Choix de la variable sortante : sélectionner comme variable sortante la


première variable de base à s’annuler. Pour cela, on calcule le minimum du
rapport du coefficient du membre de droite sur le coefficient de la variable
entrante dans la même ligne lorsque celui-ci est positif. Soit l la ligne où le
minimum se produit :
bl bi
= min{ |aie > 0}
ale aie
La variable sortante est celle dont on lit la valeur dans la ligne où le minimum
se produit. Soit xs la variable de base dont on lit la valeur en ligne l. On
entoure la ligne où le minimum se produit. Il en résulte le tableau suivant :

z x1 x2 xe xn xn+1 xn+2 . . . xn+m


1 −c1 −c2 −ce −cn 0 0 0 0
0 a11 a12 a1e a1n 1 0 0 b1
0 a21 a22 a2e a2n 0 1 0 b2
0 al1 al2 ale aln 0 0 1 0 bl
0 an1 an2 ane amn 0 0 1 b1

Pas 3. Pivotage : La variable entrante xe prend la place de la variable sortante


xs dans la base. Il faut

1. Exprimer la fonction objectif en fonction des nouvelles variables hors


base.
2. Expliciter le système d’équations des contraintes en fonctions des nou-
velles variables de base.

Pour cela, pratiquement on doit

1. Amener un coefficient 1 au croisement de la colonne pivot et de la ligne


ligne pivot en divisant celle-ci par le coefficient ale .
2. Amener des zéros dans le reste de la colonne pivote en ajoutant aux
autres lignes un multiple de la ligne où l’on a amené le 1.

Pas 4. Itérer : retour au Pas 1.


42 Chapitre 3. L’algorithme du Simplexe en Tableaux

3.5 Exercices

3.1. Algorithme du Simplexe. Résoudre en appliquant la méthode du Simplexe :

max z = 3x1 + 2x2 + 4x3


s.c.q. x1 + x2 + 2x3 ≤ 4
2x1 + 3x3 ≤ 5
2x1 + x2 + 3x3 ≤ 7
x1 , x2 , x3 ≥ 0

3.2. Planification de production. Une compagnie fabrique deux produits dans


ses deux ateliers. Les marges unitaires sont respectivement de 2 pour le
premier produit et de 1 pour le second. Le temps passé dans chacun des
ateliers pour fabriquer un produit de chaque type est donné au tableau ci-
dessous.

Temps dans pour le produit 1 pour le produit 2


l’atelier 1 1 heure 0 heure
l’atelier 2 1 heure 1 heure

Les capacités résiduelles sont de 4,5 heures par jour et de 6 heures par jour
respectivement dans le premier et le second atelier. Les productions non
entières sont permises.

(a) Formuler mathématiquement le problème.


(b) Déterminer la solution optimale au moyen de l’algorithme du Simplexe.
Préciser, pour chaque tableau, la solution de base courante et justifier
le choix des variables entrante et sortante.
(c) Illustrer sur un graphique le chemin suivi par l’algorithme du Simplexe.
Chapitre 4

Questions sur l’algorithme du Simplexe.

4.1 Introduction

L’exemple considéré au chapitre 2 pour illustrer le fonctionnement de l’algorithme


du Simplexe ne montrait pas les embûches qui peuvent surgir à chaque étape de
l’algorithme du Simplexe :

(i) Initialisation : comment construire une solution de base réalisable ?

(ii) Chaque itération : pourra-t-on, à chaque itération, trouver une variable


entrante et une variable sortante ?

(iii) Terminaison : va-t-on arriver à une conclusion (solution optimale ou ab-


sence de solution) en un nombre fini d’itérations ? Qu’est-ce qui nous
garantit que l’on ne va pas itérer à l’infini ?

Le premier point sera résolu en considérant un problème auxiliaire : le problème


dit de phase I. Ce problème sera lui-même résolu par l’application de l’algorithme
du Simplexe. En ce qui concerne les itérations, nous verrons que l’absence de
variable entrante traduit le fait que l’on est à l’optimum tandis que l’absence de
variable sortante traduit le fait que le problème est non borné. Enfin, concernant le
troisième point, nous verrons que si la fonction objectif croı̂t strictement à chaque
itération, la convergence est garantie.

4.2 Initialisation de l’algorithme

Les quelques exemples de problèmes examinés jusqu’à présent n’ont pas posé de
problème d’initialisation car nous partions d’un problème où toutes les compo-
santes du membre de droite étaient non négatives. Supposons donc qu’il existe
au moins un des coefficients du membre de droite strictement négatif.

43
44 Chapitre 4. Questions sur l’algorithme du Simplexe.

Le problème est double. D’une part, il n’est pas évident que le problème
considéré ait une solution réalisable. D’autre part, même dans le cas où une
solution réalisable existe, il n’est pas clair de savoir à quelle base elle se rapporte.
On va répondre à ces deux questions par la résolution d’un problème auxiliaire :
le problème de phase I. Nous allons illustrer ceci sur le problème suivant :

max z = x1 − x2 + x 3


 2x1 −x2 +2x3 ≤ 4,






 −2x1 +3x2 −x3 ≥ 5,
s.c.q. 

 x1 −x2 +2x3 ≥ 1,





 x1 , x2 , x3 ≥ 0.

On peut se ramener à la forme avec égalités en multipliant les deux dernières


inéquations par (-1) et en ajoutant les variables d’écart. On obtient la formulation
sous forme d’égalités suivante :

max z = x1 − x2 + x3


 2x1 −x2 +2x3 +x4 = 4,






 2x1 −3x2 +x3 +x5 = −5,
s.c.q. 

 −x1 +x2 −2x3 +x6 = −1,





 x1 , x2 , x3 , x4 , x5 , x6 ≥ 0.

Pour rendre le membre de droite non négatif, on va lui ajouter une quantité
positive x0 , ou ce qui revient au même, retrancher x0 au membre de gauche. On
obtient le système suivant :






2x1 −x2 +2x3 +x4 −x0 = 4,

 2x1 −3x2 +x3 +x5 −x0 = −5,




 −x1 +x2 −2x3 +x6 −x0 = −1.

On voit qu’en donnant à x0 la valeur 5 et en la faisant passer dans le membre


de droite, on rend non négatives toutes les composantes du membre de droite. Il
faudra cependant éliminer cette variable artificielle si on veut déterminer une base
de départ réalisable pour le problème original. Puisqu’on veut se débarrasser de x0 ,
on va chercher à minimiser cette variable, ou, ce qui revient au même, à maximiser
Section 4.2. Initialisation de l’algorithme 45

son opposé. Notons par le symbole w, la fonction objectif de sorte que l’on peut
ajouter la ligne objectif suivante correspondant à une maximisation :

max w = −x0

On obtient ainsi le problème dit de phase I de l’algorithme du Simplexe.


Notons que l’on se trouve, avec ce problème de phase I, toujours confronté
au problème de la construction d’une base de départ réalisable. Une opération de
pivotage non standard nous permet cependant de nous en tirer dans le cas présent.
On forme une base de départ non réalisable en prenant comme précédemment les
variables d’écart en base. On fait alors rentrer la variable artificielle x0 dans la
base en l’échangeant avec la variable de base la plus négative. Cette opération
correspond précisément à donner à la variable artificielle une valeur suffisante pour
qu’elle rende toutes les composantes du membre de droite non négatives.
On peut alors résoudre le problème auxiliaire par la méthode du Simplexe.
Les tableaux successifs seront les suivants :
Tableau de départ :

w x0 x1 x2 x3 x4 x5 x6
1 1 0 0 0 0 0 0
0 −1 2 −1 2 1 0 0 4
0 −1 2 −3 1 0 1 0 −5
0 −1 −1 1 −2 0 0 1 −1

Première itération spéciale :

w x0 x1 x2 x3 x4 x5 x6
1 0 2 −3 1 0 1 0 −5
0 0 0 2 1 1 −1 0 9
0 1 −2 3 −1 0 −1 0 5
0 0 −3 4 −3 0 −1 1 4
46 Chapitre 4. Questions sur l’algorithme du Simplexe.

Deuxième itération : x2 entre, x6 sort :

w x0 x1 x2 x3 x4 x5 x6
1 0 −1/4 0 −5/4 0 1/4 3/4 −2
0 0 3/2 0 5/2 1 −1/2 −1/2 7
0 1 1/4 0 5/4 0 −1/4 −3/4 2
0 0 −3/4 1 −3/4 0 −1/4 1/4 1

Troisième itération : x3 entre, x0 sort :

w x0 x1 x2 x3 x4 x5 x6
1 1 0 0 0 0 0 0 0
0 −2 1 0 0 1 0 1 3
0 4/5 1/5 0 1 0 −1/5 −3/5 8/5
0 3/5 −3/5 1 0 0 −2/5 −1/5 11/5

Nous avons obtenu la solution optimale du problème auxiliaire. La valeur


correspondante de la fonction objectif est w = 0. Ce qui revient à dire que l’on a
réussi à annuler la variable artificielle. On a donc une solution de base réalisable
pour le problème original.
On remarquera que le problème de phase I est toujours réalisable (par const-
ruction), et qu’il est toujours borné. En effet, son objectif est de minimiser la
variable artificielle qui est astreinte à être non négative. Zéro est, dans ce cas, une
borne inférieure sur la valeur de la fonction objectif (à minimiser).
Le problème de phase I a donc toujours une solution optimale. Deux cas sont
possibles quant à la valeur optimale de sa fonction objectif. Soit elle est nulle et
on a une solution de base réalisable du problème original, soit elle est non nulle
et le problème original n’est pas réalisable.
Lorsqu’on a obtenu une solution de base réalisable pour le problème original,
on passe à la phase II :

• en supprimant la variable artificielle x0 ;


• en reprenant comme fonction objectif la fonction objectif du problème
original;
• en exprimant cette fonction objectif en fonction des seules variables hors
base.
Section 4.2. Initialisation de l’algorithme 47

Appliquons ceci à l’exemple. Pour rappel, la fonction objectif originale était ici :
z = x1 − x2 + x3
Les deux premières opérations donne le tableau de phase II suivant :

z x1 x2 x3 x4 x5 x6
1 −1 1 −1 0 0 0 0
0 1 0 0 1 0 1 3
0 1/5 0 1 0 −1/5 −3/5 8/5
0 −3/5 1 0 0 −2/5 −1/5 11/5
La troisième opération peut être effectuée en ajoutant à la ligne objectif la deuxième
contrainte et en retranchant la troisième. On obtient le tableau suivant de départ
de la phase II :

z x1 x2 x3 x4 x5 x6
1 −1/5 0 0 0 1/5 −2/5 −3/5
0 1 0 0 1 0 1 3
0 1/5 0 1 0 −1/5 −3/5 8/5
0 −3/5 1 0 0 −2/5 −1/5 11/5
On peut alors procéder à la phase II car on dispose cette fois d’une base de départ
réalisable, x1 = x5 = x6 = 0, hors base, et x2 = 11 5
, x3 = 85 , x4 = 3 en base avec
la valeur correspondante de la fonction objectif z = − 35 . A la première itération
de la phase II, x6 entre et x4 sort. On obtient le tableau suivant :

z x1 x2 x3 x4 x5 x6
1 1/5 0 0 2/5 1/5 0 3/5
0 1 0 0 1 0 1 3
0 4/5 0 1 3/5 −1/5 0 17/5
0 −2/5 1 0 1/5 −2/5 0 14/5
La solution optimale vaut donc :
z∗ = 3/5
x∗1 = 0
x∗2 = 14/5
x∗3 = 17/5
48 Chapitre 4. Questions sur l’algorithme du Simplexe.

Exemple 2 : problème non réalisable. Soit le problème :

max z = 3x1 + x2

 −x1 ≥

 +x2 1,


 x +x2 ≥ 3,
1
s.c.q. 



2x1 +x2 ≤ 2,


x1 , x2 ≥ 0.
Mettons le d’abord sous forme canonique avec inégalités du type ≤ :

max z = 3x1 + x2



 x1 −x2 ≤ −1,


 −x −x2 ≤ −3,
1
s.c.q. 



2x1 +x2 ≤ 2,


x1 , x2 ≥ 0.
Puis sous forme canonique avec variables d’écart :

max z = 3x1 + x2


 x1
 −x2 +x3 = −1,


 −x −x2 +x4 = −3,
1
s.c.q. 

 2x1 +x2 +x5 = 2,


x1 , x2 , x3 , x4 , x5 ≥ 0.
Formons le tableau de départ de la phase I :

w x0 x1 x2 x3 x4 x5
1 1 0 0 0 0 0 0
0 −1 1 −1 1 0 0 −1
0 −1 −1 −1 0 1 0 −3
0 −1 2 1 0 0 1 2
On effectue un premier pivotage non standard. La variable x0 remplace dans la
base la variable la plus négative, soit x4 . La suite des tableaux est la suivante :

w x0 x1 x2 x3 x4 x5
1 0 −1 −1 0 1 0 −3
0 0 2 0 1 −1 0 2
0 1 1 1 0 −1 0 3
0 0 3 2 0 −1 1 5
Section 4.2. Initialisation de l’algorithme 49

A la première itération, la variable x1 entre et x3 sort de la base :

w x0 x1 x2 x3 x4 x5
1 0 0 −1 1/2 1/2 0 −2
0 0 1 0 1/2 −1/2 0 1
0 1 0 1 −1/2 1/2 0 2
0 0 0 2 −3/2 1/2 1 2

A la deuxième itération, la variable x2 entre et x5 sort de la base :

w x0 x1 x2 x3 x4 x5
1 0 0 0 −1/4 3/4 1/2 −1
0 0 1 0 1/2 −1/2 0 1
0 1 0 0 1/4 −3/4 −1/2 1
0 0 0 1 −3/4 1/4 1/2 1

A la troisième itération, la variable x3 entre et x1 sort de la base :

w x0 x1 x2 x3 x4 x5
1 0 1/2 0 0 1/2 1/2 −1/2
0 0 2 0 1 −1 0 2
0 1 −1/2 0 0 −1/2 −1/2 1/2
0 0 −3/2 1 0 −1/2 1/2 5/2

La phase I se termine sans que w = 0 (x0 est encore dans la base et vaut 1/2). Le
problème original n’est donc pas réalisable. En effet, les contraintes du problème
sont incompatibles. Ce verdict est confirmé par un examen de la figure 4.1.
x2

-1 1 3 x1

Figure 4.1: Problème irréalisable.


50 Chapitre 4. Questions sur l’algorithme du Simplexe.

4.3 Détermination de la variable entrante

La variable entrante doit être une variable hors base avec un coefficient cj négatif
dans la ligne objectif du tableau courant. Si une telle variable n’existe pas, alors le
tableau courant décrit une solution optimale. En effet, la ligne objectif du tableau
courant peut s’écrire 
z+ cj xj = z ∗ ,
j∈N

où N note l’ensemble des indices des variables hors base. Ceci qui peut encore
s’écrire comme suit : 
z = z∗ − cj xj .
j∈N

La solution courante où xj = 0 pour tout j ∈ N donne la valeur z ∗ à la fonction


objectif. Si cj ≥ 0 pour tout j ∈ N , alors toute solution réalisable où xj ≥ 0 pour
tout j ∈ N donne à la fonction objectif une valeur qui est au plus z ∗ . La solution
courante est par conséquent optimale.

4.4 Détermination de la variable sortante

La variable qui quitte la base est la première à bloquer l’augmentation de la


variable entrante. Cette règle est ambiguë car elle peut donner lieu à plusieurs
candidats ou à aucun candidat. Ce dernier cas est illustré à la deuxième itération
dans le problème suivant :

max z = 2x1 + x2






x1 −2x2 +x3 = 2,

s.c.q.  −2x1 +x2 +x4 = 2,




 x1 , x2 , x3 , x4 ≥ 0.

Le tableau de départ est :

z x1 x2 x3 x4
1 −2 −1 0 0 0
0 1 −2 1 0 2
0 −2 1 0 1 2

Première itération :
Au départ, x1 = x2 = 0 sont hors base et x3 = 2, x4 = 2 sont en base. On fait
Section 4.4. Détermination de la variable sortante 51

entrer x1 dans la base. Il n’y a que la variable de base x3 qui limite la croissance
de x1 . La variable x3 sort de la base lorsque x1 vaut 2.

z x1 x2 x3 x4
1 0 −5 2 0 4
0 1 −2 1 0 2
0 0 −3 2 1 6

Deuxième itération :
La variable x2 est seule candidate à l’entrée en base. Comme tous les coefficients
de la colonne x2 sont non positifs, aucune des variables de base n’est bloquante.
La variable x2 peut croı̂tre au delà de toute limite. On en conclut que le problème
est non borné. On peut le vérifier graphiquement. Le système de départ est le
suivant ;
max z = 2x1 + x2






x1 −2x2 ≤ 2,

s.c.q.  −2x1 +x2 ≤ 2,




 x1 , x2 ≥ 0.
On peut voir à la figure 4.2 qu’à partir du sommet (2,0), la région connaı̂t une
direction où x2 n’est plus bornée.
x2

-1 2 x1

-1

Figure 4.2: Solution non bornée.

On peut arriver à la même conclusion en général: s’il n’y a pas de candidat


pour quitter la base, on peut faire croı̂tre la variable entrante et donc aussi la
fonction objectif autant qu’on le veut. Dans ce cas, le problème est non borné.
52 Chapitre 4. Questions sur l’algorithme du Simplexe.

D’autre part, s’il y a plusieurs candidats pour quitter la base, alors n’importe
lequel de ces candidats peut servir. La présence de plusieurs candidats pour quitter
la base a une conséquence importante : la dégénérescence.
Illustrons ceci par l’exemple suivant :

z x1 x2 x3 x4 x5 x6
1 −2 1 −8 0 0 0 0
0 0 0 2 1 0 0 1
0 2 −4 6 0 1 0 3
0 −1 +3 4 0 0 1 2

Ayant choisi x3 pour entrer en base, on trouve que chacune des trois variables de
base, x4 , x5 et x6 bloque l’accroissement de x3 à 12 . Chacune de ces variables est
donc candidate à sortir de base. On peut choisir x4 . On obtient le tableau suivant :

z x1 x2 x3 x4 x5 x6
1 −2 1 0 4 0 0 4
0 0 0 1 1/2 0 0 1/2
0 2 −4 0 −3 1 0 0
0 −1 +3 0 −2 0 1 0

où l’on constate que les variables de base x5 et x6 ont une valeur nulle ! Des
solutions de base avec une ou plusieurs variables de base nulles sont appelées des
solutions dégénérées.
La dégénérescence peut avoir la conséquence suivante. Continuons l’exemple.
A l’itération suivante, x1 entre en base et x5 bloque son entrée à une valeur égale
à zéro ! Donc la valeur de x1 et, par voie de conséquence, des autres variables et
de l’objectif restent inchangées au cours de ce pivotage.
Des itérations Simplexe qui changent juste la base sans changer la valeur de
la solution de base sont appelées itérations dégénérées. Il est à remarquer que les
itérations dégénérées sont très souvent présentes dans la résolution de problèmes
pratiques mais, en général, ne constituent que des “accidents passagers” dans le
sens qu’après quelques itérations dégénérées la fonction objectif se remet à croı̂tre
strictement. Ceci amène directement à considérer le point suivant.
Section 4.5. Arrêt après un nombre fini d’itérations 53

4.5 Arrêt après un nombre fini d’itérations

Si, à chaque itération, la fonction objectif augmente strictement, alors on doit at-
teindre une solution optimale ou détecter que le problème est non borné après un
nombre fini d’itérations. En effet, à chaque itération, la solution de base corres-
pond à un sommet du polyèdre des contraintes. La fonction objectif augmentant
strictement à chaque itération, on ne peut pas repasser par une solution de base
déjà rencontrée. Le nombre de solutions de base réalisables, ou ce qui revient au
même le nombre de points extrêmes du polyèdre des contraintes, est majoré par
n
Cm+n , un nombre fini. Il faut en effet choisir n variables hors base parmi les n + m
variables possibles (celles de départ plus les variables d’écart). Il n’est alors pas
possible d’itérer indéfiniment.
Tout ce raisonnement repose sur l’hypothèse que la fonction objectif aug-
mente strictement à chaque itération. Comme le montre l’exemple suivant, si
cette hypothèse n’est pas satisfaite, on peut cycler, c’est-à-dire répéter à l’infini la
même suite d’itérations.

z x1 x2 x3 x4 x5 x6 x7
1 −10 57 9 24 0 0 0 0
0 0, 5 −5, 5 −2, 5 9 1 0 0 0
0 0, 5 −1, 5 −0, 5 1 0 1 0 0
0 1 0 0 0 0 0 1 1

Supposons que l’on adopte les règles suivantes en présence de candidats multiples
pour les critères d’entrée et de sortie :

(i) La variable entrante est toujours la variable hors base de coefficient le plus
négatif dans la fonction objectif. En cas d’ex aequo, on prend la variable de
plus petit indice.

(ii) En cas de plusieurs variables de base candidates à la sortie de la base, on


prend la variable de plus petit indice.

On remarquera la présence de composantes nulles dans le membre de droite.


54 Chapitre 4. Questions sur l’algorithme du Simplexe.

Première itération :
z x1 x2 x3 x4 x5 x6 x7
1 0 −53 −41 204 20 0 0 0
0 1 −11 −5 18 2 0 0 0
0 0 4 2 −8 −1 1 0 0
0 0 11 5 −18 −2 0 1 1

Deuxième itération :
z x1 x2 x3 x4 x5 x6 x7
1 0 0 −14, 5 98 6, 75 13, 25 0 0
0 1 0 0, 5 −4 −0, 75 2, 75 0 0
0 0 1 0, 5 −2 −0, 25 0, 25 0 0
0 0 0 −0, 5 4 0, 75 2, 75 1 1
Troisième itération :
z x1 x 2 x 3 x4 x5 x6 x7
1 29 0 0 −18 15 93 0 0
0 2 0 1 −8 −1, 5 5, 5 0 0
0 −1 1 0 2 0, 5 −2, 5 0 0
0 1 0 0 0 0 0 1 1
Quatrième itération :
z x1 x2 x3 x4 x5 x6 x7
1 20 9 0 0 −10, 5 70, 5 0 0
0 −2 4 1 0 0, 5 −4, 5 0 0
0 −0, 5 0, 5 0 1 0, 25 −1, 25 0 0
0 1 0 0 0 0 0 1 1
Cinquième itération :
z x1 x2 x3 x4 x5 x6 x7
1 −22 93 21 0 0 −24 0 0
0 −4 8 2 0 1 −9 0 0
0 0, 5 −1, 5 −0, 5 1 0 1 0 0
0 1 0 0 0 0 0 1 1
Section 4.5. Arrêt après un nombre fini d’itérations 55

Sixième itération :

z x1 x2 x3 x4 x5 x6 x7
1 −10 57 9 24 0 0 0 0
0 0, 5 −5, 5 −2, 5 9 1 0 0 0
0 0, 5 −1, 5 −0, 5 1 0 1 0 0
0 1 0 0 0 0 0 1 1

On retrouve le tableau initial. L’algorithme du Simplexe va donc répéter inlassa-


blement la même suite de six itérations sans jamais atteindre la solution optimale
qui existe cependant avec z = 1. On dit que l’algorithme cycle.
Notons que le phénomène de cyclage est nécessairement associé à la présence
de solutions de base où certaines variables de base sont nulles. Une base dégénérée
peut donner lieu à une ou plusieurs itérations consécutives au cours desquelles ni la
fonction objectif, ni aucune des variables ne change de valeur. La seule chose qui
change est la liste des variables qui sont en base ou hors base. Géométriquement on
se trouve en un point extrême du polyèdre des contraintes où plus de n hyperplans
s’intersectent. Il y a donc différentes façon de définir ce point extrême comme
intersection de n hyperplans. On passe d’une de ces définitions à une autre.
Il existe des règles qui permettent d’empêcher le cyclage. Par exemple, la
règle de Bland. Cette règle consiste à systématiquement choisir comme variable
entrante la première de coefficient négatif dans la ligne objectif et comme la
variable sortante, la première qui veut sortir. Insistons sur la différence par rapport
à la règle que nous avons utilisé. Nous avions chaque fois choisi la candidate de
plus petit indice parmi toutes les variables de coefficient objectif le plus négatif.
Ici, on décide de prendre la première variable de coefficient négatif rencontrée
donc pas forcément celle de coefficient minimum. On vérifiera, sur l’exemple
ci-dessus, qu’en adoptant la règle de Bland, on évite que l’algorithme ne boucle.
En effet, à la cinquième itération, on choisit x1 plutôt que x6 pour entrer en base
et on sort du phénomène de cyclage.
Le lecteur intéressé se référera à Chvatal [4, pp 34-37] pour l’exposé de deux
autres méthodes qui évitent le problème du cyclage : la méthode de perturbation
et la méthode lexicographique.
Terminons en remarquant que le cyclage est un phénomène assez rare dans
la pratique de sorte que beaucoup de logiciels mettant en œuvre la méthode du
Simplexe ignorent totalement ce problème.
56 Chapitre 4. Questions sur l’algorithme du Simplexe.

4.6 Exercices

4.1. Problème réalisable. Résoudre en appliquant le Simplexe en deux phases :

max z = 3x1 + x2




x1 −x2 ≤ −1

 −x
1 −x2 ≤ −3
s.c.q. 

 2x 1 +x2 ≤ 4


x1 , x2 ≥ 0.

4.2. Problème non réalisable. Résoudre par le Simplexe en deux phases :

max z = 3x1 + x2




x1 −x2 ≤ −1

 −x
1 −x2 ≤ −3
s.c.q.

 ≤
 2x1

+x2 2

x1 , x2 ≥ 0.

4.3. Problème non borné. Résoudre en appliquant le Simplexe en deux phases :

max z = 3x1 + x2




x1 −x2 ≤ −1

 −x
1 −x2 ≤ −3
s.c.q. 

 2x 1 −x2 ≤ 2


x1 , x2 ≥ 0.
Chapitre 5

Analyse postoptimale.

5.1 Introduction

Dans ce chapitre, nous voir comment va varier la valeur optimale de l’objectif


d’un programme linéaire lorsque l’on modifie certains coefficients du problème
(coefficients objectif ou du membre de droite). En effet, généralement la solution
numérique d’un problème linéaire est moins significative que de savoir comment
l’objectif va bouger si l’on modifie certaines données du problème. C’est l’objet
de ce que l’on appelle l’analyse postoptimale.
Pour voir l’effet de tels changements de données, une solution naı̈ve consiste à
appliquer le Simplexe au nouveau problème et bien sûr on peut en déduire l’effet
sur l’objectif. Mais nous allons voir dans ce chapitre que, si la base optimale
ne change pas, on peut prédire sans aucun nouveau calcul l’effet de variation
des données sur la fonction objectif en exploitant simplement le tableau Simplexe
optimal du problème original.
Nous allons d’abord envisager le cas de la variation des coefficients du
membre de droite des contraintes. Nous allons voir que la variation de la va-
leur optimale de l’objectif d’un programme linéaire en fonction des coefficients du
membre de droite est donnée par la valeur des “prix cachés” que l’on peut lire dans
la ligne objectif du tableau Simplexe final. Nous verrons comment déterminer le
domaine de validité de ces prix cachés.
Nous verrons ensuite, le cas de la variation des coefficients de la fonction
objectif. Ici, nous verrons que le taux de variation de l’objectif est donné par la
valeur des variables à l’optimum. Ici aussi, il y a un un domaine de validité pour
ces valeurs optimales des variables : elles restent valables tant que la base optimale
ne change pas.
Enfin, nous terminerons en donnant l’interprétation d’une autre information
que l’on peut tirer du tableau Simplexe, à savoir la valeur des coûts réduits des

57
58 Chapitre 5. Analyse postoptimale.

variables hors base.

5.2 Variation par rapport au second membre

La question qui se pose est ici la suivante : “Si on augmente la capacité disponible
d’une ressource, quel est l’impact sur la valeur optimale de la fonction objectif ?”
Pour des variations de membre de droite suffisamment faibles pour que la même
base reste optimale, on peut répondre à cette question en exploitant le tableau
Simplexe optimal de la manière suivante :
Le “prix caché” (noté yi∗ ) mesure l’augmentation de la fonction objectif si
l’on accroı̂t d’une unité la capacité disponible (bi ). Dans le tableau Simplexe
optimal, le prix caché yi∗ est le coefficient de la variable d’écart de la contrainte
dans la ligne objectif.
Nous allons illustrer ceci sur sur l’exemple introductif du chapitre 2 dont
l’énoncé est rappelé ci-dessous.
max z = 3 x1 + 5 x2


 x1
 ≤ 4



 2x2 ≤ 12


s.c.q. 
3x1 + 2x2 ≤ 18



 x1 ≥ 0




x2 ≥ 0
Considérons le tableau final qui a été déterminé au chapitre 3 :

z x1 x2 x3 x4 x5
1 0 0 0 3/2 1 36
0 0 0 1 1/3 −1/3 2
0 0 1 0 1/2 0 6
0 1 0 0 −1/3 1/3 2
Comme x3 , x4 et x5 sont les variables d’écart des contraintes de capacité des trois
ateliers, on en déduit les valeurs des prix cachés suivants :






y1∗ = 0

 y2∗ = 3/2




 y3∗ = 1
Section 5.2. Variation par rapport au second membre 59

qui correspondent aux prix cachés des ressources utilisées dans les ateliers 1, 2 et
3 dont les capacités disponibles sont :




 b1 = 4,


 b2 = 12,




 b3 = 18.

Ce résultat peut être démontré mathématiquement. Mais, plutôt que d’en don-
ner une démonstration formelle, nous allons l’illustrer graphiquement. Considé-
rons tout d’abord une augmentation de capacité du premier atelier de b1 = 4 à
b1 = 5. On peut voir à la figure 5.1 que le nouveau point optimal reste le même

x2

z = 3x1 + 5x2
9
8
(5/3, 13/2) 2x2 = 13
6
x1 = 4 2x2 = 12
x1 = 5
4

2 3x1 + 2x2 = 18

0 x1
0 2 4 6, 8
Figure 5.1: Analyse postoptimale

x∗ = x∗ = (2, 6).


En conséquence de quoi, la valeur optimale de l’objectif ne change pas :
z ∗ = z ∗ = 36
D’où une variation nulle de l’objectif, ce qui était bien prédit par la valeur nulle
du prix caché y1∗ :
∆z = z ∗ − z ∗ = 0 = y1∗ .
Une augmentation de capacité du deuxième atelier de b2 = 12 à b2 = 13 donne un
déplacement du point optimal (voir figure 5.1) vers le nouveau point :
x∗ = (5/3, 13/2).
60 Chapitre 5. Analyse postoptimale.

En conséquence de quoi, la nouvelle valeur de l’objectif est donnée par :

z ∗ = 37, 5

D’où un accroissement de l’objectif égal à la valeur du deuxième prix caché :


3
∆z = z ∗ − z ∗ = 37, 5 − 36 = = y2∗ .
2

Enfin, considérons une augmentation de capacité du troisième atelier de b3 = 18


à b3 = 19. Comme on peut le voir à la figure 5.2, cela donne un déplacement du
point optimal vers :
x∗ = (7/3, 6).
En conséquence de quoi, la nouvelle valeur de l’objectif vaut :

z ∗ = 37

D’où une augmentation d’objectif égale à la valeur du troisième prix caché :

∆z = z ∗ − z ∗ = 37 − 36 = 1 = y3∗ .

x2
z = 3x1 + 5x2
10
3x1 + 2x2 = 19
8
(7/3, 6)
6 2x2 = 12
x1 = 4
4

2
3x1 + 2x2 = 18

0 2 4 6 8 x1

Figure 5.2: Variation de capacité de l’atelier 3

Le résultat peut aussi être interprété dans l’autre sens : y3∗ est la perte de profit
si on diminue d’une unité la capacité du troisième atelier.
Remarquons, et ceci est l’objet de l’analyse de sensibilité qu’il y a une limite
de validité de chaque prix caché. En effet, dans le cas de la première ressource, si
Section 5.2. Variation par rapport au second membre 61

l’effet d’une augmentation de b1 sera nul sur la valeur optimum de l’objectif quel
que soit b1 ≥ 4, il n’en va pas de même d’une diminution. En effet, en dessous
de b1 = 2, la solution optimale va changer. On a donc déterminé le domaine de
validité de y1∗ = 0. Il s’agit de l’intervalle :
b1 ∈ [2, +∞].

Pour le deuxième atelier, au delà de b2 = 18, la solution optimale reste en (0,9).


La base optimale et y2∗ changent :
y2∗ = 0.
De même, une diminution en deçà de b2 = 6 va changer la base optimale. On en
déduit le domaine de validité de y2∗ = 3/2. Il s’agit de l’intervalle :
b2 ∈ [6, 18].

Pour le troisième atelier, au delà de b3 = 24, la solution optimale reste en (4,6).


La base optimale et y3∗ changent :
y3∗ = 0.
De même, une diminution en deçà de b3 = 12 va changer la base optimale. On en
déduit le domaine de validité de y3∗ = 1. Il s’agit de l’intervalle :
b3 ∈ [12, 24].

Ces informations sont données dans le rapport de sensibilité du solveur d’Excel.


Ces informations sont fournies sous la forme d’une augmentation admissible et
d’une diminution admissible. Elle sont reprises ci-dessous :

Contrainte augmentation diminution membre


admissible admissible de droite
Atelier 1 +∞ 2 4
Atelier 2 6 6 12
Atelier 3 6 6 18

Remarquons finalement que l’on a toujours une valeur nulle du prix caché
pour une contrainte non liante. Une contrainte non liante est une contrainte où
la variable d’écart est non nulle. Par exemple, la première contrainte
x1 ≤ 4
a un “prix caché” nul. Ceci a une interprétation économique. La ressource n’est
pas entièrement utilisée : il ne sert donc à rien d’augmenter son stock disponible.
62 Chapitre 5. Analyse postoptimale.

5.3 Variation des coefficients objectifs

La question qui se pose ici est la suivante :“Si on augmente le prix de vente unitaire
ou si l’on diminue le coût unitaire de production, quel est l’impact sur la valeur de
l’objectif ?”
A nouveau, on peut prédire cette variation de l’objectif pour autant que la
base optimale ne change pas. En effet, tant que la base optimale ne change pas,
la solution optimale x∗ = (x∗1 , x∗2 , . . .x∗n ) reste la même. Seul le profit optimal
change. Le nouveau profit vaut donc :

n
z∗ = (cj + ∆cj )x∗j
j=1

On en conclut que pour une variation unitaire du coefficient cj , l’augmentation de


z ∗ est exactement la valeur optimale de la variable x∗j .
La “valeur de la j ème variable à l’optimum” (notée x∗j ) mesure l’augmenta-
tion de la fonction objectif si l’on accroı̂t d’une unité la marge unitaire cj .
Dans le cas de l’exemple, les augmentations de profit pour une augmentation
unitaire de la marge des produits valent respectivement :

x∗1 = 2 et x∗2 = 6.

Considérons maintenant la question l’analyse de sensibilité. Nous allons à


nouveau l’illustrer sur le même exemple. Initialement :

z = 3x1 + 5x2

On veut déterminer l’intervalle de variation maximum de c1 autour de 3 tel que la


base optimale ne change pas.
A la figure 5.3, on constate que le coefficient c1 peut descendre jusqu’à ce que
l’objectif z = c1 x1 + 5x2 soit parallèle au segment

2x2 = 12,

c’est-à-dire lorsque c1 = 0. Le coefficient c1 peut augmenter jusqu’à ce que l’ob-


jectif z = c1 x1 + 5x2 soit parallèle au segment

3x1 + 2x2 = 18.

Ceci se produit lorsqu’il y a égalité des pentes :


−c1 −3
= ,
5 2
Section 5.3. Variation des coefficients objectifs 63

x2

10

8
(2, 6)
6
z = 4x1 + 5x2 = 38
4 z = 3x1 + 5x2 = 36

0 2 4 6 8 10 12 x1

Figure 5.3: Analyse de sensibilité de c1

c’est-à-dire lorsque c1 = 15/2.


La réponse à la question de l’analyse de sensibilité est donc la suivante. Tant
que
c1 ∈ [0, 15/2],
on a la même base optimale et donc la même solution optimale.
Effectuons l’analyse de sensibilité pour le second coefficient objectif. Celui-ci
peut décroı̂tre jusqu’à ce que l’objectif z = 3x1 + c2 x2 soit parallèle au segment
3x1 + 2x2 = 18.
Ceci se produit lorsqu’il y a égalité des pentes :
−3 −3
= ,
c2 2
c’est-à-dire lorsque c2 = 2. Dans l’autre sens, c2 peut augmenter jusqu’à ce que
l’objectif z = 3x1 + c2 x2 soit parallèle au segment
2x2 = 12.
Ceci ne se produit jamais. On en conclut que tant que :
c2 ∈ [2, +∞[,
on a la même base optimale et donc la même solution optimale.
Ces intervalles de sensibilité sont également donnés dans le rapport de sensi-
bilité du solveur d’Excel.
64 Chapitre 5. Analyse postoptimale.

5.4 Coût réduit des variables hors base

Pour terminer ce chapitre consacré à l’analyse postoptimale, nous allons définir une
notion importante qui peut également être déduite du tableau Simplexe optimal, il
s’agit du coût réduit d’une variable hors base.
Le “coût réduit” de la variable hors base xj , noté dj , mesure l’augmentation
de la fonction objectif si l’on accroı̂t d’une unité la valeur de la variable hors
base xj . Dans le tableau Simplexe optimal, le coût réduit dj est l’opposé du
coefficient de la variable dans la ligne objectif.
Nous illustrerons cette notion sur l’ exemple de planification de la production
de chassis auquel on adjoint un troisième chassis mixte aluminium bois, pour lequel
la marge unitaire est de 4 et les temps unitaires de fabrication dans les trois ateliers
sont respectivement de 1, 2 et 3 heures. La formulation de ce problème est reprise
ci-dessous :

z −3x1 −5x2 −4x3 = 0


x1 +x3 +x4 = 4
2x2 +2x3 +x5 = 12
3x1 +2x2 +3x3 +x6 = 18
Elle se met sous la forme du tableau Simplexe initial suivant :

z x1 x2 x3 x4 x5 x6
1 −3 −5 −4 0 0 0 0
0 1 0 1 1 0 0 4
0 0 2 2 0 1 0 12
0 3 2 3 0 0 1 18
La solution optimale de ce problème linéaire peut être déterminée par l’algorithme
du Simplexe. Le tableau Simplexe optimal final est le suivant :

z x1 x2 x3 x4 x5 x6
1 0 0 2 0 3/2 1 36
0 0 0 2/3 1 1/3 −1/3 2
0 0 1 1 0 1/2 0 6
0 1 0 1/3 0 −1/3 1/3 2
Section 5.4. Coût réduit des variables hors base 65

On en déduit la solution optimale suivante :


(x1 , x2 , x3 , x4 , x5 , x6 ) = (2, 6, 0, 2, 0, 0)
Tandis que la valeur optimale de l’objectif est donnée par :
z ∗ = 36

On constate que seuls sont rentables les productions des chassis 1 et 2. En effet,
le chassis 3, bien qu’ayant une marge unitaire supérieure au chassis 1, consomme
plus de ressources et permet, pour la même capacité disponible des trois ateliers
de faire moins de chassis 3 que de chassis 1. On peut alors se poser la question
suivante : de combien faut-il augmenter la marge du chassis 3 pour le rendre
attractif ?
On peut répondre à cette question en exploitant le tableau Simplexe optimal
de la manière suivante : les coefficients dans la ligne objectif du tableau Simplexe
final (l’opposé des coûts réduits) fournissent l’augmentation de prix nécessaire. En
effet, les coûts réduits des variables hors base s’interprètent, en général, comme
l’augmentation de la fonction objectif lorsque l’on augmente d’une unité la va-
riable. Ici, à l’optimum, ce coût réduit, noté d3 , est négatif, traduisant le fait que
si la production de ce chassis était positive, elle diminuerait le profit d’autant.
d3 = −2.
Pour qu’il devienne intéressant de le produire, il faut donc augmenter sa marge
d’au moins cette quantité. Ici, le coût réduit s’interprète comme l’opposé de l’aug-
mentation minimale de prix pour que la production devienne intéressante.
Remarquez que tous les optimiseurs fournissent en plus de la solution optimale
d’un problème linéaire, cette information : les coûts réduits des variables hors base
sont, en effet, au signe près, les coefficients des variables hors base dans la ligne
objectif du tableau Simplexe optimal.
En conclusions, nous avons vu dans ce chapitre comment interpréter tous les
coefficients dans la ligne objectif du tableau Simplexe optimal final :
• Les coûts réduits sont, au signe près, les coefficients des variables hors
base dans la ligne objectif du tableau Simplexe optimal. Ils s’interprètent,
en général, comme l’augmentation de la fonction objectif lorsque l’on
augmente d’une unité la variable hors base.
• Les prix cachés sont les coefficients des variables d’écart des contraintes
dans la ligne objectif du tableau Simplexe optimal. Ils s’interprètent comme
l’augmentation du profit pour une augmentation unitaire d’un des co-
efficients du membre de droite.
Le rapport de sensibilité d’Excel donne ces deux informations.
66 Chapitre 5. Analyse postoptimale.

5.5 Exercices

5.1. Sensibilité aux coefficients objectif. Soit le problème linéaire suivant :

Minimiser 0x1 + x2
s.c.q. 3x1 + 4x2 ≥ 9, (1)
5x1 + 2x2 ≤ 8, (2)
3x1 − x2 ≤ 0, (3)
x1 , x2 ≥ 0.

(a) Déterminer graphiquement la solution optimale.


(b) Déterminer l’intervalle maximum de variation de c1 autour de zéro qui
préserve la solution optimale.

5.2. Sensibilité du membre de droite. Pour le problème linéaire formulé à


l’exercice 2 du chapitre 1,

(a) Résoudre par l’algorithme du Simplexe.


(b) Déterminer la valeur des prix cachés à l’optimum.
(c) Si l’unité de capacité supplémentaire coût le même prix pour les deux
ateliers, a-t-on intérêt a augmenter la capacité du premier ou du second
atelier ?
(d) Jusqu’à quel niveau est-il intéressant d’augmenter cette capacité ?

5.3. Fabrication de tourbe. Une firme québéquoise de production de tourbe


met sur le marché 3 qualités de tourbe : la qualité 3 utilisée comme litière;
la qualité 2 qui sert d’engrais aux entreprises maréchaires et la qualité 1
destinée à l’empotage des plantes d’intérieur. La tourbe de qualité 3 se
commercialise en ballots de 25 kg, celle de qualité 2 en sacs plastiques de 20
kg et celle de qualité 1 en sachets de 5 kg. La tourbe s’extrait au printemps
sous forme humide et est séchée au soleil durant l’été pour être livrée à
l’automne. Un kg de tourbe humide extraite donne 100 grammes de produit
sec commercialisable. La machinerie qui extrait la tourbe humide permet
d’extraire 4 500 000 kg de tourbe humide chaque printemps.
La tourbe séchée est défibrée à l’automne, au moyen de défibreuses qui
mettent 5 minutes pour préparer un ballot de Qualité 3, 8 minutes pour un
sac de qualité 2 et 3 minutes pour un sachet de qualité 1. On dispose de 2
000 heures de défibrage pendant la période considérée. L’entrepôt permet
de stocker 20 000 mètres cubes de tourbe sèche emballée, un emballage de
Section 5.5. Exercices 67

qualité 3 requiert 1 mètre cube, un sac de qualité 2 requiert 0,75 mètre cube
et un sachet de qualité 1 requiert 0,20 mètre cube.
Le service marketing impose la fabrication maximale de 15 000 ballots de
qualité 3 dont un grossiste retient chaque année 10 000 ballots. Le même
grossiste requiert 3 000 sacs de qualité 2. Les profits que retire la société
de la vente de ces produits s’élèvent à 9 dollars le ballot de qualité 3, à 12
dollars le sac de qualité 2 et à 2 dollars le sachet de qualité 1.

(a) Formuler le problème linéaire correspondant (choix des variables, ex-


pression de l’objectif et des contraintes).
(b) Voici le tableau Simplexe final :

z x3 x2 x1 x4 x5 x6 x7 x8 x9
1 0 0 2, 2 0, 12 0 1, 20 0 0 0 198 000
0 0 1 0, 5 −0, 05 0 0, 25 0 0 0 7 500
0 0 0 0, 025 −0, 0425 1 0, 0125 0 0 0 2 375
0 0 0 0, 5 −0, 05 0 0, 25 0 0 1 4 500
0 0 0 0, 2 −0, 08 0 0, 20 1 0 0 3 000
0 0 0 −0, 2 0, 08 0 −0, 20 0 1 0 2 000
0 1 0 −0, 2 0, 08 0 −0, 20 0 0 0 12 000

Donnez la solution optimale, déterminez les variables en base et hors


base.
(c) Dites ce qui se passerait pour l’objectif si on produisait un sachet de
qualité 1. En déduire quel devrait être le profit minimal que la société
devrait tirer de la mise sur le marché d’un sachet de qualité 1 pour que
cette production devienne rentable.
(d) Le solveur d’Excel vous fournit les intervalles de sensibilité suivant
pour les coefficients cj de l’objectif et bi du membre de droite :

coefficient valeur présente valeur minimum valeur maximum


c3 9 7, 50 15
c2 12 7, 60 14, 4
c1 2 −∞ 4, 20

b1 450 000 425 000 487 500


b2 20 000 17 625 +∞
b3 120 000 105 000 130 000
b4 15 000 12 000 ∞
b5 10 000 −∞ 12 000
b6 3 000 −∞ 7500
68 Chapitre 5. Analyse postoptimale.

Combien la société serait prête à dépenser au maximum pour porter de


4 500 000 à 4 750 000 kg la capacité printanière d’extraction ?
(e) Si le profit unitaire associé à un emballage de qualité 3 passait de 9 à
11 dollars, le plan de production optimal resterait-il le même ? Si oui,
le profit optimal serait-il augmenté ou diminué ? de combien ?
Chapitre 6

La programmation en nombres entiers.

6.1 Introduction

L’algorithme du Simplexe fournit une méthode de résolution générale pour tous


les problèmes linéaires quelle que soit leur forme. Au contraire, en programma-
tion en nombres entiers, on ne dispose pas d’un algorithme général qui permette
de résoudre efficacement tous les problèmes en nombres entiers. Cependant, il
existe une classe générale de méthodes connue sous le nom de branch and bound
(séparation et borne) qui permet de résoudre bon nombre de problèmes en nombres
entiers. On appelle problèmes mixtes (MIP en anglais pour Mixed Integer Program-
ming) les problèmes comportant un certain nombre de variables linéaires (donc
continues) et un certain nombre de variables en nombres entiers (donc discrètes).
Nous allons ici décrire cette méthode qui commence par la résolution du
problème linéaire obtenu en relaxant les conditions d’intégralité des variables.
C’est pourquoi on appelle ce programme la relaxation linéaire du problème.
Les problèmes de flots (programmation sur les graphes) sont eux à mi-chemin
entre les problèmes linéaires et les problèmes mixtes. En effet, si les données du
problème de flot à coût minimum (la formulation la plus générale d’un problème
de flot) sont toutes entières (demandes aux sommets entières, capacités des arcs
entières et coefficients de coût entiers), la solution du problème linéaire fournit au-
tomatiquement une solution entière. Autrement dit, ici la solution de la relaxation
linéaire fournit la solution optimale du problème mixte. Pour ces problèmes, ou
pour ceux qui peuvent s’y ramener, on en conclut que l’on dispose d’un algorithme
performant de calcul : l’algorithme du Simplexe.
Malheureusement, un grand nombre de problèmes en nombres entiers ne peu-
vent se mettre sous la forme de problèmes de flot. Il convient donc pour ces
problèmes d’avoir une méthode tenant compte explicitement du caractère discret
des variables.

69
70 Chapitre 6. La programmation en nombres entiers.

6.2 Formulation des problèmes mixtes

Nous allons voir quelques problèmes classiques nécessitant le recours à la pro-


grammation mixte entière.

6.2.1 Problèmes avec coûts fixes

Exemple 6.1 Problèmes avec coût fixe de mise en route de la production. On


veut représenter un coût de production qui est nul en l’absence de production et
qui, dans le cas contraire, vaut la somme d’un coût fixe de production, noté K, et
d’un coût proportionnel, le taux marginal étant m.

On veut donc pouvoir exprimer la fonction suivante :


Si x = 0, c(x) = 0;
(6.1)
Si x > 0, c(x) = K + mx.
où x dénote le niveau de production.
Cette fonction est représentée à la figure 6.1.

c(x)

x
Figure 6.1: Représentation d’un coût fixe

La représentation mathématique de ce coût fixe nécessite :

1. l’ajout d’une variable indicatrice d’une production positive :



1 si x > 0
y=
0 si x = 0

2. la modification de la fonction objectif en :


c(x, y) = Ky + mx
qui devient donc purement linéaire;
Section 6.2. Formulation des problèmes mixtes 71

3. l’ajout des contraintes suivantes :


x ≤ M y, et y ∈ {0, 1} (6.2)
avec M une borne supérieure sur la quantité produite (x).

Remarquons que si x > 0, par les relations (6.2), on a que y = 1 et on tient


compte du coût fixe de mise en route de production. Par contre, lorsque x = 0, (6.2)
permet les choix y = 0 ou y = 1. Cependant, comme on minimise, l’optimiseur
va automatiquement choisir y = 0, la solution qui évite le coût fixe !
Il y a de nombreuses applications de cette modélisation des coûts fixes par la
programmation mixte entière. Un exemple de mise en application de ces coûts
fixes est fournit par l’exemple de localisation d’entrepôts où il y a un coût fixe
d’ouverture de ces entrepôts.

6.2.2 Problèmes avec contrainte logique

Parfois des problèmes de gestion comportent une condition logique. Un exemple


typique est celui des problèmes de gestion de projets avec contrainte disjonctive.
Dans ces problèmes, on doit déterminer l’enchaı̂nement des tâches d’un projet de
manière à le réaliser dans le meilleur délai, il se peut que deux tâches doivent être
effectuées par la même équipe d’ouvriers, soit mettent en œuvre la même machine.
Les deux tâches ne peuvent donc avoir lieu simultanément, sans que l’on puisse
dire laquelle doit être effectuée en premier lieu. Mathématiquement, on peut écrire
ceci par la condition suivante :

ti + di ≤ tj si i est réalisée avant j
soit (6.3)
tj + dj ≤ ti si j est réalisée avant i
où ti est la variable indiquant le temps de début au plus tôt de la tâche i et di , sa
durée, est donnée.
Cette disjonction peut être résolue par la programmation mixte binaire. En
effet, définissons la variable binaire yij , dont la valeur est 1 si la tache i est réalisée
avant la tâche j et 0 si la tâche j est réalisée avant la tâche i.
On remplace alors la condition de disjonction (6.3) par les contraintes suivantes :


 ti + di ≤ tj + M (1 − yij )
tj + dj ≤ ti + M yij (6.4)


yij ∈ {0, 1}
où M note une borne supérieure sur la date de fin des travaux.
Démontrons l’équivalence. Deux cas sont possibles pour la variable binaire :
72 Chapitre 6. La programmation en nombres entiers.

1. Cas où yij = 1. Dans ce cas, le système (6.4) devient :



ti + di ≤ tj
tj + dj ≤ ti + M
La première contrainte exprime donc que la tâche i doit être finie avant que ne
commence la tâche j. La seconde contrainte est automatiquement satisfaite.
2. Cas yij = 0. Dans ce cas, le système (6.4) devient :

ti + di ≤ tj + M
tj + dj ≤ ti
La première contrainte est automatiquement satisfaite. La seconde contrainte
exprime que la tâche j doit être finie avant que ne commence la tâche i.

6.2.3 Mélange avec nombre limité d’ingrédients

Il s’agit également d’un problème générique conduisant à une formulation mixte


entière, les variables binaires indiquant la présence où non d’un ingrédient dans le
mélange.
C’est le cas, par exemple, d’un problème de mélange d’huiles où cinq huiles
sont disponibles mais où des contraintes techniques impliquent que seulement trois
huiles différentes peuvent être présentes dans le mélange. Un autre exemple, est
celui du chargement de hauts fourneaux où le nombre de charbons disponibles
est souvent nettement supérieur au nombre de charbons qui peuvent être chargés
simultanément dans le haut fourneau. Ce nombre étant limité par le nombre de
portes de chargement du haut fourneau.
Ce problème peut être résolu par la programmation mixte zéro/un. Si xi
note la quantité d’ingrédient i dans le mélange, définissons la variable binaire yi
indiquant la présence de l’ingrédient i dans le mélange. Autrement dit :
yi = 1 si xi > 0;
yi = 0 si xi = 0.
On introduit alors les contraintes suivantes :
xi ≤ Mi yi et yi ∈ {0, 1} (6.5)
où Mi est une borne supérieure sur xi .
La condition du nombre maximum d’ingrédients dans le mélange s’exprime
alors simplement par :

n
yi ≤ k, (6.6)
i=1
Section 6.2. Formulation des problèmes mixtes 73

avec k, le nombre maximum d’ingrédients dans le mélange.


Démontrons l’équivalence. Deux cas sont possibles pour la variable xi :

1. Soit xi > 0. Alors, par les contraintes (6.5), la variable yi doit valoir 1 et
exprime bien que l’ingrédient i est dans le mélange.

2. Soit xi = 0. Alors, par les contraintes (6.5), la variable yi peut valoir 0 ou


1. La contrainte (6.6), exprimera donc bien que au plus k ingrédients seront
pris dans le mélange.

Remarquez que si on veut que yi soit une parfaite indicatrice de xi > 0, il faut
ajouter la contrainte suivante :
m i yi ≤ xi
avec mi , la teneur minimum d’un ingrédient dans le mélange. Cette nouvelle
contrainte forcera yi à zéro lorsque xi est nul.

6.2.4 Choix parmi un nombre discret de valeurs

Dans beaucoup de problèmes industriels, lors du dimensionnement d’un appareil-


lage, on doit choisir sa capacité parmi les valeurs commerciales existant sur le
marché. Par exemple, lors du dimensionnement d’une canalisation de transport
d’eau, on doit choisir parmi les valeurs suivantes pour le diamètre :

12 cm, 17 cm, 24 cm ou 47 cm.

On peut à nouveau modéliser ce choix par l’utilisation de variables binaires. En


effet, définissons la variable x comme étant le diamètre choisi et définissons yi une
indicatrice du fait que le diamètre numéro i a été choisi. On peut alors écrire la
relation suivante pour le choix du diamètre :

x = 12y1 + 17y2 + 24y3 + 47y4

avec la contrainte qu’un seul diamètre doit être choisi :

y1 + y2 + y3 + y4 = 1 (6.7)

et bien sûr en imposant le caractère binaire de chaque indicatrice :

yi ∈ {0, 1}, ∀i = 1, 2. . .4

La contrainte (6.7) fera en effet qu’une seule indicatrice vaudra un tandis que toutes
les autres seront à zéro.
74 Chapitre 6. La programmation en nombres entiers.

6.3 Méthode de branch and bound

La méthode de “branch and bound” ou encore appelée méthode de séparation et


évaluation que nous allons maintenant décrire est destinée à résoudre les problèmes
en nombres entiers du type suivant :
z ∗ = max cT x
Ax ≤ b,
s.c.q.
x ≥ 0 et entiers.
Cette méthode peut également être appliquée aux problèmes avec variables binaires
(zéro-un). Elle peut également être appliquée aux problèmes mixtes (MIP), c’est-
à-dire aux problèmes comportant un certain nombre de variables entières et un
certain nombre de variables continues.
Nous illustrons la méthode sur l’exemple suivant tiré de Norbert et al [15] :

z ∗ = max z = 10x1 + 50x2




 −x1 + 2x2 ≤ 5,






 x1 + 2x2 ≤ 14, (6.8)
s.c.q. 

 x1 ≤ 8,





 x1 , x2 ≥ 0 et entiers

La région réalisable est représentée à la figure 6.2.

x2
P0
5
P1 P2
P3
4
P5

0
0 1 2 3 4 5 6 7 8 x1

Figure 6.2: Représentation de la région réalisable.

Remarquons qu’une façon de résoudre le problème serait de construire une


Section 6.3. Méthode de branch and bound 75

borne supérieure sur z ∗ et une borne inférieure sur z ∗ et ensuite de raffiner ces
bornes jusqu’à les égaliser.
Question 1 : comment construire une borne inférieure sur z ∗ ?
La réponse à cette question est à la fois simple et difficile. En effet, pour trouver
une borne inférieure, il suffit de donner une solution réalisable pour (6.8). Comme
l’objectif est de maximiser, l’optimum du problème ne pourra qu’être supérieur à
la valeur de z en ce point. Cependant trouver en général une solution réalisable
pour un problème en nombres entiers n’est pas une mince affaire.
Question 2 : comment construire une borne supérieure sur z ∗ ?
Une façon de répondre à cette question est de résoudre le problème linéaire
que l’on obtient à partir de (6.8) en laissant tomber les contraintes d’intégralité des
variables. Comme on maximise sur un ensemble réalisable plus large, l’optimum
ainsi obtenu ne pourra qu’être supérieur à l’optimum du problème en nombres
entiers. C’est aussi le premier pas de la méthode de branch and bound que nous
allons maintenant décrire sur l’exemple.
Pas 0. Résoudre la relaxation linéaire.
Pour cet exemple, on obtient comme solution de la relaxation linéaire le point noté
P0 à la figure 6.2 :

x1 = 4, 5
x2 = 4, 75
z0 = 282, 5.

Cette solution est inacceptable car elle viole les contraintes d’intégralité des va-
riables. Cependant, elle fournit une première borne supérieure sur z ∗ :

z ∗ ≤ 282, 5.

Pas 1. Brancher sur une variable non entière.


La seconde idée de la méthode de branch and bound est (comme le nom l’indique)
d’opérer une séparation : la région réalisable va être séparée en deux sous-régions
dont aucune ne peut contenir la solution optimale non entière P0 . Cette séparation
nécessite le choix d’une variable de séparation. Le choix de cette variable est
heuristique. Différents choix sont possibles et de ce choix peut dépendre l’efficacité
de la méthode de résolution. Une façon simple de choisir cette variable est de
prendre la variable la plus distante d’un entier. Une alternative, parfois utilisée,
est de prendre la variable la plus proche d’un entier.
Dans notre exemple, il s’agit de la variable x1 . On va effectuer un branchement
sur cette variable. Comme x1 ne peut prendre que des valeurs entières, il n’y a
76 Chapitre 6. La programmation en nombres entiers.

aucune perte de généralité d’imposer que

soit x1 ≤ 4 soit x1 ≥ 5

Cependant imposer cette condition va éliminer la solution courante P0 de la relaxa-


tion linéaire. En général si la variable choisie xk a la valeur fractionnaire N + ,
on imposera :
soit xk ≤ N soit xk ≥ N + 1

En imposant séparément l’une et l’autre conditions, on obtient deux sous-


modèles, un modèle fils et un modèle fille. Ce que l’on représente par une dia-
gramme du type de celui de la figure 6.3. Chaque nœud de cette figure correspond

z 0 = 282, 5
x1 = 4, 50
x2 = 4, 75
x1 4 x1 5

z1 = 265 z2 = 275
x1 = 4 x1 = 5
x 2 = 4, 5 x 2 = 4, 5
x2 4 x2 5 x2 4 x2 5

z5 = 240 z6 = ∞ z3 = 260 z4 = ∞
x1 = 4 Problème x1 = 6 Problème
x2 = 4 non réalisable x2 = 4 non réalisable

Figure 6.3: Arbre de branch and bound.

à un problème linéaire. Le nœud 0 au modèle original. Le nœud 1 est le modèle


original avec en plus la restriction x1 ≤ 4, tandis que le nœud 2 correspond au
modèle original avec en plus la restriction x1 ≥ 5. On a ici numéroté les nœuds
dans l’ordre où ils ont été générés.
On peut maintenant résoudre les relaxations linéaires correspondant aux pro-
blèmes fils et fille. Dans notre exemple, on obtient les deux solutions suivantes :

Noeud 1 : x1 = 4, x2 = 4, 5, z1 = 265.
Noeud 2 : x1 = 5, x2 = 4, 5 z2 = 275.

Remarquez que les valeurs atteintes par la fonction objectif sont moins élevées
que dans la relaxation linéaire précédente. Ceci n’est pas étonnant : on a, en
Section 6.3. Méthode de branch and bound 77

effet, ajouté des contraintes et donc restreint l’espace des solutions réalisables.
Comme les deux sous-régions forment une représentation contenant l’ensemble
des solution entières, on peut en conclure que la borne supérieure sur z ∗ est :

z ∗ ≤ max(z1 , z2 ) = 275.

Pas 2. Diviser à nouveau un nœud fils ou fille en deux.


Ici, aucune des deux solutions n’est acceptable car toutes les deux comportent des
parties fractionnaires. On va donc continuer en choisissant un des deux nœuds
pour le diviser à nouveau. Le choix du nœud à diviser est à nouveau heuristique
et peut à nouveau avoir une grande influence sur le temps total mis pour résoudre
le problème.
Pour l’illustration de la méthode, nous adoptons la règle de choix heuristique
suivante : choisir le problème dont la relaxation linéaire fournit la meilleure (c’est-
à-dire la plus grande en cas de maximisation) valeur de la fonction objectif.
Pour cet exemple, on choisit donc le nœud 2 et on répète le Pas 1.
Pas 1. Choisir une variable pour brancher.
Ici seule la variable x2 est non entière. On la choisit donc pour opérer le branche-
ment suivant :
soit x2 ≤ 4 soit x2 ≥ 5
On ajoute séparément chacune de ces contraintes aux contraintes du problème 2
et on génère ainsi les nœuds 3 et 4. Ceci est illustré à la figure 6.3. On résout
graphiquement les relaxations linéaires (voir figure 6.2) et on obtient les solutions
suivantes :

Noeud 3 : x1 = 6, x2 = 4, z3 = 260.
Noeud 4 : non réalisable

Noter que, au nœud 3, on a obtenu une solution entière dont la valeur correspon-
dante de la fonction objectif est 260. On a une première borne inférieure sur la
valeur optimale de la fonction objectif et on a donc que :

260 ≤ z ∗ ≤ 275

Si la fourchette n’est pas trop grande, on peut se satisfaire de cette solution non
optimale plutôt que de continuer de longs calculs. Il est clair également qu’il n’y
a aucune raison de continuer à diviser le nœud 3 pour lequel la solution optimale
du problème en nombres entiers a été obtenue. On dit que le nœud est coupé.
Remarquons aussi que le nœud 4 a conduit à un problème non réalisable. Ce
n’est pas étonnant vu que l’on rajoute de plus en plus de contraintes. A nouveau,
78 Chapitre 6. La programmation en nombres entiers.

dans ce cas, il ne sert à rien de continuer à diviser ce nœud. Continuons la division


des autres nœuds.
Pas 2. Diviser à nouveau un nœud fils ou fille en deux.
On choisit le nœud 1 qui est le seul à encore diviser. Remarquez que c’est parce
que la valeur de z1 = 265 est supérieure à la borne inférieure 260 que l’on doit
continuer. On a en effet un espoir de trouver ici une solution entière meilleure que
260. Dans le cas contraire, on aurait également coupé cette branche et la méthode
était terminée.
Pas 1. Brancher sur une variable non entière.
On branche ici sur x2 en créant les nœuds 5 et 6 par la séparation suivante :
soit x2 ≤ 4 soit x2 ≥ 5
On résout les relaxations linéaires correspondantes. On obtient :
Noeud 5 : x1 = 4; x2 = 4, z5 = 240
Noeud 6 : impossible

La méthode est terminée puisqu’il n’existe plus de nœud à diviser. On déter-


mine la solution optimale comme étant la meilleure solution entière trouvée. Il
s’agit du point P3 suivant :
x∗1 = 6
x∗2 = 4
auquel correspond une valeur optimale de l’objectif de z ∗ = 260. On a ainsi, pour
notre exemple, trouvé et aussi prouvé que la solution du nœud 3 était la solution
optimale du problème en nombres entiers.
En conclusions, il y a trois raisons de couper une branche dans l’arbre :

1. lorsque la relaxation linéaire obtenue est non réalisable,


2. lorsque la relaxation linéaire obtenue fournit une solution entière,
3. lorsque la valeur de la borne supérieure est inférieure à la valeur de la meil-
leure solution entière obtenue.

Enfin terminons par la remarque générale suivante. Si la région réalisable de


la relaxation linéaire n’est pas bornée, il n’y a pas de garantie de convergence de la
méthode de branch and bound. Pour éviter ce problème, certaines implémentations
demandent une borne inférieure et supérieure sur chaque variable. On est ainsi
garanti d’un nombre fini de branches dans l’arbre.
Section 6.4. Exercices 79

6.4 Exercices

6.1. Mélange de maximum 4 charbons. Pour produire du coke, on mélange des


charbons dans un haut fourneau où ensuite, une réaction à haute température
produit le coke. On suppose qu’il y a 8 charbons disponibles. Ces charbons
sont entrés par des bandes porteuses qui sont au nombre de 4, permettant
d’avoir au maximum 4 charbons différents dans le mélange. De plus, si un
charbon est présent dans le mélange, il doit l’être à hauteur de minimum
5%. De plus, on exige que la teneur du mélange en Silicium soit d’au plus
1,8 % Le tableau 6.1 reprend les prix et teneur en Si des charbons. On

Charbon Prix Teneur Si Charbon Prix Teneur Si


Charbon 1 12 2,0 % Charbon 5 13 1,0 %
Charbon 2 14 2,5 % Charbon 6 9 5,0 %
Charbon 3 17 1,0 % Charbon 7 15 2,0 %
Charbon 4 10 5,0 % Charbon 8 11 1,5 %

Tableau 6.1: Teneurs en Si et prix des différents charbons.

veut déterminer le mélange répondant aux spécifications qui soit de coût


minimum.
6.2. Localisation optimale d’émetteurs de télévision. Etant donné une région
comportant quatre villes (Lille, Dunkerque, Valencienne et Basieux), on
veut savoir où implanter, parmi divers emplacements disponibles (au nombre
de 5), un ensemble d’émetteurs de télévision susceptibles de desservir ces
différentes villes au moindre coût. La dernière colonne représente le coût
de construction de chaque émetteur.

Ville Lille Dunkerque Valencienne Basieux Coût


Emetteur 1 1 1 25
Emetteur 2 1 1 30
Emetteur 3 1 1 15
Emetteur 4 1 1 35
Emetteur 5 1 1 1 90

Tableau 6.2: Accessibilité des villes à partir des émetteurs.

On demande d’écrire le programme correspondant à la détermination du


nombre d’émetteurs à construire afin que chaque ville soit desservie par au
moins un émetteur et ceci à coût d’investissement total minimum.
80 Chapitre 6. La programmation en nombres entiers.

6.3. Problème d’affectation de lignes aériennes. Une petite compagnie aérien-


ne dispose de six avions de 150 places. Elle désire affecter sa flotte d’avions
aux deux lignes intérieures ouvertes à la concurrence (les lignes OM et OT).
Le nombre de passagers désirant effectuer chaque jour un parcours sur la
ligne OM par cette nouvelle compagnie est 500, et de 200 sur la ligne OT. Le
coût marginal (frais variables tels que le carburant, les taxes d’atterrissage,
etc. . . ) d’un voyage sur la ligne OM est de 4 et de 3 sur la ligne OT. On
désire minimiser le coût d’exploitation en satisfaisant la demande.

(a) Formuler mathématiquement le problème de la meilleure affectation


de la flotte de cette compagnie.
(b) Résoudre par la méthode de Branch and bound en résolvant chaque
fois la relaxation linéaire de manière purement graphique !
Partie II
Les modèles sur réseau, dynamiques et non
linéaires.

81
Chapitre 7

Les modèles sur réseau

Dans ce chapitre, nous allons introduire différents modèles qui utilisent un graphe
dans leur formulation, soit pour représenter un réseau (comme dans les problèmes
de transport), soit que le graphe soit une façon commode de représenter le problème
(comme dans les problèmes d’ordonnancement de projets).
Les origines des modèles sur réseaux sont nombreuses et débordent largement
le cadre des seuls problèmes de transport. On peut citer :

• Les problèmes de distribution : il s’agit de déterminer à partir de quel


lieu de production servir les différents points de consommation de manière à
minimiser les coûts de transport : il existe plusieurs algorithmes de résolution
pour ce problème (voir chapitre 9).
• Les problèmes d’affectation optimale : il s’agit d’affecter des personnes à
des postes de travail de manière à maximiser l’efficacité générale : il s’agit
d’un problème en nombres entiers (on affecte entièrement une personne à
un poste ou pas du tout) qui peut être résolu sans recourir à la méthode de
“Branch and Bound” (voir chapitre 6).
• Les problèmes de planification des tâches : il s’agit ici de déterminer l’en-
chaı̂nement des tâches d’un projet de manière à terminer au plus vite en
tenant compte des relations d’antériorité de certaines tâches par rapport à
d’autres. Il existe deux méthodes de résolution : la méthode potentiel et la
méthode PERT (voir cours de licence).
• Les problèmes de plus court chemin : il s’agit ici de trouver le chemin le plus
court ou le moins coûteux entre deux points donnés d’un réseau. Il existe
un algorithme spécialisé : l’algorithme de Dijkstra (voir cours de licence).

Les modèles sur réseau sont le plus souvent des modèles linéaires qui peuvent
donc être résolus par l’algorithme du Simplexe mais pour lesquels il existe souvent
un algorithme spécialisé plus efficace que le Simplexe.

83
84 Chapitre 7. Les modèles sur réseau

7.1 Le problème de transport simple

Le problème de transport simple se rencontre lorsque l’on a un bien homogène


(gaz, eau, électricité,. . . ) à transporter entre m lieux de production de capacité
de production Ki connue et n lieux de consommation de demande dj connue de
manière à minimiser le coût total de transport sur le réseau. On connaı̂t cij ,
le coût de fourniture d’une unité du producteur i au client j pour chaque couple
(producteur, client).
La question qui se pose est la suivante : “Comment satisfaire la demande des
consommateurs à coût total de transport minimum tout en respectant les contraintes
de capacité des producteurs ?”
Illustrons ceci sur un exemple tiré de Williams [17]. Supposons qu’il y ait 3
producteurs (m = 3) dont les capacités annuelles sont données au tableau 7.1.

Fournisseur 1 2 3
Capacité 135 56 93

Tableau 7.1: Capacité annuelle des fournisseurs

Il y a quatre 4 points de consommations (n = 4). Les demandes annuelles de


ces clients sont reprises au tableau 7.2.

Client 1 2 3 4
Demande 62 83 39 91

Tableau 7.2: Demandes annuelles des clients


Les coûts de transport entre producteurs et clients sont repris au tableau 7.3.
Les coûts manquants indiquent que le fournisseur ne peut satisfaire le client.

Coût unitaire Client 1 Client 2 Client 3 Client 4


Fournisseur 1 132 - 97 103
Fournisseur 2 85 91 - -
Fournisseur 3 106 89 100 98

Tableau 7.3: Coûts unitaires de fourniture

7.1.1 Représentation au moyen d’un graphe

Nous allons voir comment le problème de transport simple peut être représenté
par un graphe. Rappelons la définition de graphe.
Section 7.1. Le problème de transport simple 85

Définition 7.1 Un graphe est défini comme la paire G = (N, A) ou N représente


un ensemble de nœuds et A un ensemble de couples (i, j), appelés arcs, avec i ∈ N
et j ∈ N .

Ici, les nœuds représentent les lieux de production ou de consommation alors que
les arcs représentent les liens physiques existant entre lieux de production et lieux
de consommation.
Le graphe associé au problème de transport simple peut être représenté comme
à la figure 7.1. Il s’agit en fait d’un cas particulier de graphe : il s’agit d’un
graphe bipartite. On peut, en effet, isoler deux groupes de nœuds : les nœuds de
production, d’une part, et les nœuds de consommation, d’autre part, et il n’existe
de liens (d’arcs) qu’entre les nœuds du premier ensemble et les nœuds du second
ensemble. Autrement dit, on ne peut aller d’un lieu de production vers un client
que directement (sans passer par des points intermédiaires).

s1 135 D1 = 62
1 1

D2 = 83
s2 56 2
2
D3 = 39
3

s3 93 D4 = 91
3 4

Figure 7.1: Exemple de problème de transport simple

7.1.2 Formulation du problème

Nous allons formuler le problème de manière classique (choix des variables,


expression de la fonction objectif et des contraintes ).

1. Choix des variables : notons


xij la quantité transportée annuellement du producteur i au client j;
si la quantité prélevée annuellement chez le producteur i.
86 Chapitre 7. Les modèles sur réseau

2. Expression de la fonction objectif : l’objectif est simplement la minimisation


de la somme des coûts de transport entre producteurs et clients :

min z = cij xij
(i,j)∈A

3. Formulation des contraintes : on a deux types de contraintes (cfr figure 7.1) :

(a) Contraintes de satisfaction de la demande : la somme des quantités


fournies par tous les producteurs à un client donné j doit être égale à
sa demande : 
xij = Dj , j = 1, . . .n
i|(i,j)∈A

(b) Contraintes de capacité des producteurs : la somme des quantités


fournies par un producteur i à tous ses clients doit être inférieure ou
égale à sa capacité de production :

xij = si ≤ Ki
j|(i,j)∈A

Une condition nécessaire de réalisabilité du problème est que la somme des


capacités de production des producteurs soit suffisante pour couvrir la somme des
demande des clients : m  n 
Ki ≥ Dj
i=1 j=1

Il ne faut évidemment pas ajouter cette relation comme contrainte au modèle.


Mais il convient de vérifier si cette condition est satisfaite avant de se lancer dans
la résolution du modèle. Si par exemple, la condition était violée d’une certaine
quantité, il faudrait recourir, pour cette quantité à la sous-traitance.
Remarquez également que cette condition n’est pas suffisante dans le cas où
tous les producteurs ne peuvent servir tous les clients. Il existe au moins trois
manière d’interdire les chemins impossibles :

1. On peut imposer explicitement : xij = 0 pour tout (i, j) impossible.

2. On peut pénaliser l’utilisation de tels chemins par un coefficient objectif cij


très élevé.

3. On peut aussi restreindre les sommations aussi bien dans l’objectif que dans
les contraintes aux seuls chemins (i, j) existants. C’est la solution retenue
dans notre formulation.
Section 7.2. Planification de la production 87

7.2 Planification de la production

Le problème de transport permet de modéliser des problèmes qui à priori n’ont


rien avoir avec la distribution, ainsi le problème de planification de la production
suivant tiré de Williams [17].
Le problème de planification de la production s’énonce ainsi. On produit un
bien unique pour lequel la demande est connue pour les prochains mois. On connaı̂t
aussi la capacité de production pour les prochains mois. La production en heures
supplémentaires est également possible moyennant un surcoût. Le tableau 7.4
reprend les capacités (en heures normales et en heures supplémentaires) ainsi que
la demande pour les 4 premiers mois de l’année.

Mois Janvier Février Mars Avril


capacité (heures normales) 100 150 140 160
capacité (heures supplémentaires) 50 75 70 80
Demande 80 200 300 200

Tableau 7.4: Capacités et demandes

Le coût de production est de 1 par unité produite en heures normales, alors


qu’il est de 1,5 par unité produite en heures supplémentaires. Le coût de stockage
est de 0,3 par mois et par unité stockée.
Nous allons maintenant formuler ce problème en problème de transport :
1. Choix des variables :
Désignons par xij la quantité produite en heures normales à la période i pour
satisfaire une demande de période j avec i = 1, 2, . . .4 et j = i, i + 1, . . .4.
De manière semblable, yij désigne la quantité produite en heures supplé-
mentaires à la période i pour satisfaire une demande de période j avec
i = 1, 2, . . .4 et j = i, i + 1, . . .4.
Remarquez que l’on aurait également pu utiliser une seule variable à trois
indices xijk où k indiquerait le mode de production (k = 1 pour les heures
normales et k = 2 pour les heures supplémentaires).
2. Expression de l’objectif :
Au coût de production (en heures normales ou en heures supplémentaires),
il faut ajouter autant de fois le coût de stockage qu’il n’y a de mois séparant
la production de la demande. Le tableau 7.5 reprend le calcul du coût total
de production et stockage.
Il n’y a évidemment pas de coût de production pour une production posté-
rieure à la période de demande.
88 Chapitre 7. Les modèles sur réseau

Demande
Production Janvier Février Mars Avril
Janvier h.norm. 1 1,3 1,6 1,9
h.supp. 1,5 1,8 2,1 2,4
Février h.norm. - 1 1,3 1,6
h.supp. - 1,5 1,8 2,1
Mars h.norm. - - 1 1,3
h.supp. - - 1,5 1,8
Avril h.norm. - - - 1
h.supp. - - - 1,5

Tableau 7.5: Coûts de production et de stockage

3. Expression des contraintes :


Outre les contraintes de positivité (xij , yij ≥ 0, i = 1, . . .4, j = 1, . . .4),
il existe deux types de contraintes :
• Les contraintes de satisfaction de la demande s’écrivent ici comme :
x11 + y11 = 80,
x12 + y12 + x22 + y22 = 200,
x13 + y13 + x23 + y23 + x33 + y33 = 300,
x14 + y14 + x24 + y24 + x34 + y34 + x44 + y44 = 200.

• Les contraintes de capacité s’écrivent ici comme :


x11 + x12 + x13 + x14 ≤ 100,
y11 + y12 + y13 + y14 ≤ 50,
x22 + x23 + x24 ≤ 150,
y22 + y23 + y24 ≤ 75,
x33 + x34 ≤ 140,
y33 + y34 ≤ 70,
x44 ≤ 160,
y44 ≤ 80.

Remarquez que si l’on raisonne en termes de problème de transport, les quan-


tités xij sont des quantités transportées de la production au mois i vers une demande
au mois j et la somme des coûts de production et de stockage joue ici le rôle de
coût de transport.
Section 7.3. Problème d’affectation optimale 89

7.3 Problème d’affectation optimale

Le problème s’énonce de la manière suivante. On a n personnes à affecter à n


postes. On connaı̂t tij , le temps moyen mis par la personne i pour effectuer le
travail au poste j. La question qui se pose est la suivante : “Comment affecter les
personnes aux différents postes pour minimiser le temps total de réalisation des
tâches ?”
Le problème se formule de la manière suivante.

1. Choix des variables :


On note xij = 1 si personne i affectée au poste j, xij = 0, dans le cas contraire.
2. Formulation de l’objectif :
L’objectif est de minimiser l’inefficacité totale de l’affectation :

n 
n
min z = tij xij
i=1 j=1

3. Formulation des contraintes : Il y a deux types de contraintes :


• chaque poste j doit être pourvu :

n
xij = 1, j = 1, . . .n
i=1

Cette contrainte exprime qu’exactement une personne est affectée à


chaque poste.
• chaque personne i est employée :

n
xij = 1, i = 1, . . .n
j=1

Cette contrainte exprime qu’exactement un poste est affecté à chaque


personne.
• et bien sûr, il faut ajouter les contraintes d’intégrité des variables :
xij ∈ {0, 1}

Le problème d’embauche se rencontre lorsqu’il y a plus de personnes que de


postes à pourvoir. Autrement dit, on a m personnes pour n postes avec m ≥ n.
La seconde contrainte devient une inégalité.
Le problème de transport simple peut être généralisé en permettant des nœuds
intermédiaires qui ne soient pas des nœuds source (nœud d’offre) ou des nœuds
puits (nœuds de demande). On obtient ainsi le problème de transport général.
90 Chapitre 7. Les modèles sur réseau

7.4 Le problème de transport général

Le problème de flot à coût minimum est illustré par l’exemple tiré de Williams
[17] repris à la figure 7.2. On a deux lieux de productions (deux sources) aux
nœuds 0 et 1 et trois lieux de consommation (trois puits) aux nœuds 5, 6 et 7. Les
coûts unitaires de transport sont indiqués au dessus des arcs. On veut déterminer
+10 5 5 -9
0 2 5
4 6
6
2 4 3
-10
1 6
+15 4
1 3 4
2
-6
7

Figure 7.2: Problème de flot à coût minimum

comment satisfaire la demande des différents puits par des flux circulant à travers
le réseau depuis les sources à coût total minimum.
On peut formuler le problème de transport général comme suit :

1. Choix des variables :


On appelle xij la quantité transportée entre le nœud i et le nœud j.

2. Expression de l’objectif :
L’objectif correspond simplement à la minimisation des coûts de transport :

min z = cij xij .
(i,j)∈A

où cij note le coût de transport unitaire sur l’arc (i, j).

3. Contraintes du problème :
Les contraintes expriment la conservation du flux aux nœuds. La somme des
flux entrant dans un nœud est égale à la somme des flux sortant du nœud :

10 = x02
15 = x13
x02 + x42 = x23 + x24 + x25
x23 + x13 = x34 + x37
Section 7.4. Le problème de transport général 91

x24 + x34 = x42 + x45 + x46


x25 + x45 = 9
x46 + x76 = 10
x37 = x76 + 6

En mettant toutes les variables à gauche et toutes les constantes à droite, on obtient
le système suivant d’égalités :

x02 = 10
x13 = 15
−x02 +x23 +x24 +x25 −x42 = 0
−x13 −x23 +x34 +x37 = 0
−x24 −x34 +x42 +x45 +x46 = 0
−x25 −x45 = −9
−x46 −x76 = −10
−x37 x76 = −6

En isolant les coefficients de ces contraintes, on obtient ce que l’on appelle


la matrice d’incidence nœuds/arcs qui a comme particularité que chaque co-
lonne ne comporte qu’un coefficient +1 et un coefficient -1. Chaque colonne
correspond à un arc, et il y a un +1 dans la ligne correspondant au nœud d’où est
issu l’arc et il y a un -1 dans la ligne correspondant au nœud destination de l’arc :

02 13 23 24 25 34 37 42 45 46 76
0 1
1 1
2 −1 1 1 1 −1
3 −1 −1 1 1
4 −1 −1 1 1 1
5 −1 −1
6 −1 −1
7 −1 1

Nous allons maintenant voir un certain nombre de cas particuliers de ce problème.

7.4.1 Problème du plus court chemin

Le problème du plus court chemin est celui qui se pose lorsque l’on veut aller
d’un point à un autre sur un réseau routier par la route la plus courte. A la figure 7.3,
92 Chapitre 7. Les modèles sur réseau

1 3
5
1 2
1
1
1
2 1
0 3 7
1 2 4

3 2 1
2
4
1 8
6

Figure 7.3: Problème du plus court chemin

on a représenté les distances entre les divers points. On se demande quel est le
plus court chemin entre le nœud 0 et le nœud 8. Remarquez que ce problème être
reformulé en un problème de flot à coût minimum. Au nœud origine, le nœud 0,
il suffit de mettre une source de capacité unitaire et au nœud destination, le nœud
8, un puits de demande unitaire. On utilise alors un algorithme spécialisé pour
déterminer le flot à coût minimum qui satisfait cette demande unitaire. Il existe
cependant un algorithme spécialisé pour résoudre ce problème : l’algorithme de
Dijkstra (voir cours de licence).

7.4.2 Problème du flot maximum

Le problème du flot maximum est celui que l’on rencontre lorsque l’on veut, pour
un réseau de transport, déterminer le flot maximum de voitures qu’il peut supporter
avant d’arriver à saturation. Etant donné des capacités des arcs (voir les chiffres
12 6
0 2 5
2 5
3
6 4 8
E
7 6 S
20
1 3 4
9

Figure 7.4: Problème du flot maximum

indiqués au dessus des arcs à la figure 7.4), on veut maximiser le flot entre les
sources et les puits. Si l’on rejoint toutes les sources à une source unique et tous
les puits à un puits unique, et que l’on trace l’arc de retour entre le puits unique et
la source unique, cela revient à maximiser le flux dans l’arc retour.
Section 7.5. Exercices 93

7.5 Exercices

7.1. Planification de la production de moteurs d’avions. Une entreprise de


fabrication de moteurs d’avions travaille uniquement sur commandes. Le
tableau 7.6 fournit en le nombre de moteurs à fournir en fin de chaque mois
pour les quatre prochains mois. En fonction des opérations de maintenance,
la capacité de production varie de mois en mois. Le coût unitaire de produc-
tion varie également de mois en mois (voir tableau 7.6). Au vu des données,
il est clair qu’il faudra recourir au stockage. On se demande comment orga-
niser la production du moteur pour minimiser les coûts de production et de
stockage. Formuler le problème comme un problème sur réseau.

Mois Commandes Capacité Coût de production Coût de stockage


Janvier 10 25 1,08 0,015
Février 15 35 1,11 0,015
Mars 25 30 1,10 0,015
Avril 20 10 1,13 0,015

Tableau 7.6: Production de moteurs d’avions.

7.2. Amélioration d’un réseau routier. On prévoit une augmentation du trafic


entre les villes A et F. On veut déterminer quel est le flot maximum de
véhicules entre A et F que peut supporter le réseau. Les capacités des arcs,
exprimées en milliers de voitures par heure, sont reprises au tableau 7.7.

Arc Origine Destination Capacité


1 A B 3
2 A C 7
3 C B 2
4 C D 2
5 B D 4
6 C E 4
7 E D 2
8 D F 6
9 E F 5
Tableau 7.7: Capacités des arcs d’un réseau routier.

(a) Représenter le problème sur un graphique de réseau.


(b) Formuler mathématiquement le problème.
94 Chapitre 7. Les modèles sur réseau

7.3. Tournées de véhicules. Considérons le problème d’organisation des tour-


nées de véhicules pour la collecte des déchets. La collectivité locale dispose
de 12 véhicules pour collecter dans 4 villes. Ces véhicules sont attribués à
chaque ville : 4 à la ville 1, 3 à la ville 2, 1 à la ville 3 et 4 à la ville 4. Les

Vers ville 1 ville 2 ville 3 ville 4 incinérateur


De la ville 1 0 10 ∞ ∞ 45
De la ville 2 10 0 5 ∞ ∞
De la ville 3 ∞ 5 0 5 20
De la ville 4 ∞ ∞ 5 0 ∞
De l’incinérateur 45 ∞ 20 ∞ 0

Tableau 7.8: Temps de parcours

temps de trajets entre ces villes et l’incinérateur sont donnés au tableau 7.8.
On veut minimiser le temps total pour aller à l’incinérateur.
(a) Représenter le problème sur un graphique de réseau.
(b) Formuler mathématiquement le problème.
7.4. Mutation des officiers. L’armée a une politique de mutation régulière de
ses officiers. Tous les trois ans, ces officiers sont mutés à un autre poste pour
assurer la polyvalence du commandement et éviter que trop de fraternité ne
s’installe entre les officiers et la troupe. L’armée, pour établir son plan de
mutation, tient compte du désagrément d’être muté loin de sa base d’origine.
Et il est clair que, par exemple dans le cas d’un officier marié dont la femme
travaille dans le civil, le désagrément sera d’autant plus grand que la nouvelle
affectation sera éloignée. Pour les 5 officiers à muter cette année, on a
établi le coût de les affecter à chacun des 4 autres postes occupés par les
collègues. On désire déterminer l’affectation des officiers qui minimise

Coût pour d’être muté au poste


l’officier a b c d e
A - 12 15 11 17
B 6 - 14 12 16
C 8 17 - 21 17
D 7 16 9 - 12
E 7 13 8 12 -

le désagrément total (c’est-à-dire la somme des désagréments individuels).


Formuler mathématiquement le problème.
Chapitre 8

Résolution du problème de transport


simple

8.1 Introduction

Dans ce chapitre, nous allons présenter un algorithme de résolution du problème de


transport simple introduit au chapitre 7. Pour rappel, il s’agit du problème obtenu
lorsque que le réseau ne comporte que deux types de nœuds, d’une part les nœuds
d’offre et, d’autre part les nœuds de demande et que les arcs vont uniquement des
nœuds d’offre aux nœuds de demande. L’algorithme de résolution faisant appel à
la notion de coûts réduits, nous introduirons d’abord cette notion.

8.2 Notion de coût réduit

Dans plusieurs algorithmes de résolution de problèmes sur réseau, on utilise la


notion de coût réduit d’un arc.

Définition 8.1 Supposons qu’à chaque nœud i ∈ N , on associe un nombre π(i),


que nous appellerons le potentiel du nœud. On définit le coût réduit de l’arc (i, j)
comme
cπij = cij − π(i) + π(j) (8.1)

Prenons un exemple d’utilisation de la notion de coût réduit. Il s’agit du


problème du calcul de la plus courte distance entre deux points dans un graphe
(voir cours de licence). L’algorithme de Dijkstra calcule la fonction di qui donne
la distance du plus court chemin entre le point d’entrée sur le réseau et le point i.
Considérons un arc quelconque du réseau comme illustré à la figure 8.1. Ainsi di
note la distance du plus court chemin depuis l’entrée sur le réseau jusqu’au point i
et dj note la distance du plus court chemin jusqu’au point j tandis que cij indique

95
96 Chapitre 8. Résolution du problème de transport simple

di dj
c ij
i j

Figure 8.1: Notion de coût réduit d’un arc (i, j)

la longueur de l’arc (i, j). A l’optimum, la condition suivante doit être vérifiée :

dj ≤ di + cij (8.2)

Justifions ceci. En effet, soit le plus court chemin menant de l’entrée du réseau au
nœud j passe par l’arc (i, j) et on a donc que

dj = di + cij

Soit le plus court chemin passe par un autre arc et passer par i est plus long :

dj < di + cij

Dans les deux cas, on a bien que (8.2) est satisfaite. Ce qui peut se récrire :

cij + di − dj ≥ 0, ∀(i, j) ∈ A

En posant πi = −di , il est équivalent de dire que

cπij = cij − πi + πj ≥ 0, ∀(i, j) ∈ A

Autrement dit que les coûts réduits sont tous positifs ou nuls.
Illustrons ceci sur l’exemple de la figure 8.2.
d2 = 2
2
c12 = 2 c24 = 3
d1 = 0 d4 = 3
1 c23 = 1 4

c13 = 2 c34 = 1
3
d3 = 2

Figure 8.2: Application de la notion de coût réduit.

Pour déterminer di la plus courte distance du nœud origine 1 au nœud i, on


utilise l’algorithme de Dijkstra. Pour rappel, celui-ci stocke deux informations
en chaque nœud :
Section 8.2. Notion de coût réduit 97

1. le label courant du nœud, noté di , qui indique la distance entre le nœud


origine et le nœud i par le plus court chemin trouvé jusqu’à présent;
2. le prédécesseur courant du nœud, noté pi , dans le plus court chemin trouvé
jusqu’à présent entre le nœud origine et i.

L’algorithme de Dijkstra utilise et met à jour deux ensembles :

1. L’ensemble T des nœuds dont on a déterminé exactement le plus court


chemin entre le nœud origine et ces nœuds. C’est l’ensemble des nœuds
déjà traités et qui ne nécessitent donc plus de traitement ultérieur.
2. L’ensemble S = N \ T des nœuds qui sont encore à traiter. On dit qu’ils
ont un un label provisoire qui pourra encore éventuellement être amélioré.

Rappelons le principe de l’algorithme. Soit o l’indice du nœud origine.

Algorithme 8.1 Algorithme de Dijkstra.

1. Initialisations. Mettre lo = 0; T = {o}; S = N \ T .


Pour tout nœud j ∈ S qui peut être atteint à partir de o par un arc (o, j), on
met comme label provisoire de j le temps de parcours de l’arc (o, j) :
Pour tout j ∈ S, si j tel que (o, j) ∈ A alors dj ← coj , sinon dj ← ∞;
2. Itération k. On sélectionne l’élément q ∈ S de label provisoire dq minimum :

q ∈ S|dq = min dj
j∈S

Ce nœud q est déplacé de l’ensemble S vers l’ensemble T :

T = T ∪ {q} et S = S \ {q}

On remet alors à jour les labels provisoires des éléments de S. Pour tout
nœud j ∈ S qui peut être atteint à partir de q par un arc (q, j), on examine si
le chemin menant à j en passant par q ne serait pas plus court que l’ancien
chemin menant à j. Dans ce cas, dj et pj sont remis à jour comme suit :

Si dq + cqj < dj , alors dj = dq + cqj


et pj = q

3. Terminaison. L’algorithme s’arrête dès que l’on a déterminé le label


définitif du sommet de destination d, c’est-à-dire dès que d ∈ T :
Répéter ii) jusqu’à ce que le sommet de destination d ∈ T .
La distance du plus court chemin de o à d est tout simplement ld .
98 Chapitre 8. Résolution du problème de transport simple

Voyons maintenant l’application de cet algorithme à notre exemple :

Initialisations : on marque définitivement le nœud 1 qui permet d’atteindre les


nœuds 2 et 3 :
i 1 2 3 4
di 0 2 2 +∞
pi − 1 1 −

Itération 1 : on marque définitivement le nœud 2 de label provisoire minimum.


Ce nœud permet d’atteindre le nœud 4 :

i 1 2 3 4
di 0 2 2 5
pi − 1 1 2

Itération 2 : on marque définitivement le nœud 3 de label provisoire minimum.


Ce nœud permet d’atteindre le nœud 4 plus rapidement que par le nœud 2 :

i 1 2 3 4
di 0 2 2 3
pi − 1 1 3

Itération 3 : on marque définitivement le nœud 4 et l’algorithme est terminé.

On a déterminé les plus courtes distances de 1 à tous les nœuds. En posant


πi = −di , on peut en déduire

π1 = 0, π2 = −2, π3 = −2, π4 = −3.

On en déduit le calcul des coûts réduits (cπij = cij − πi + πj ) :

cπ12 = 2+0−2=0
cπ13 = 2+0−2=0
cπ23 = 1+2−2=1
cπ24 = 3+2−3=2
cπ34 = 1+2−3=0

qui s’interprète comme le surcoût d’utiliser cet arc par rapport au plus court chemin.
Section 8.3. Le problème de transport simple 99

8.3 Le problème de transport simple

Rappelons la formulation du problème du transport simple pour lequel il existe


seulement deux types de nœuds : les nœuds d’entrée (ou encore nœuds d’offre
dont l’ensemble est noté Ns ) et les nœuds de sortie (ou encore nœuds de demande
dont l’ensemble est noté Nd ). Il n’y a donc pas de nœuds d’interconnexion. C’est
la première hypothèse simplificatrice. On suppose également, c’est la seconde
hypothèse, que les arcs liant les nœuds d’entrée aux nœuds de sortie ont une
capacité infinie. On peut donc représenter le problème par un graphe bipartite
comme illustré à la figure 8.3.

1 1
s d

2
E 2 S

m n

Figure 8.3: Problème de transport simple.

On choisit comme variable xij pour désigner la quantité transportée de i à j.


L’objectif est donc la minimisation des coûts de transport entre les nœuds d’entrée
et les nœuds de sortie. Seuls ces arcs ont un coût associé dij . L’objectif se formule
donc comme 
z = min cij xij
(i,j)∈A

où A est l’ensemble des arcs de transport (correspondant au réseau ”ouvert” obtenu
sans considérer le nœud d’entrée et le nœud de sortie).
Il est évident que si transporter du flot coûte, on va, à la solution optimale, tout
juste satisfaire la demande en chaque nœud de demande. Autrement dit, on aura
que : 
xij = dj ∀j ∈ Nd
i|(i,j)∈A

Supposons que l’offre totale soit égale à la demande globale, autrement dit que
 
si = dj
i∈Ns j∈Nd
100 Chapitre 8. Résolution du problème de transport simple

On peut, en effet, se ramener à ce cas en ajoutant un nœud de demande supplémen-



taire auquel on attribue l’excédent d’offre sur la demande ( i∈Ns si − j∈Nd dj )
et que l’on raccorde à chaque nœud d’offre par un arc de capacité infinie et de coût
de transport nul.
Dans ce cas, chaque arc d’entrée doit également être utilisé à pleine capacité
et nous aurons semblablement que

xij = si ∀i ∈ Ns
j|(i,j)∈A

On voit donc qu’avec les hypothèses faites dans le cas du réseau de transport
simple, les flux circulant sur les arcs entrant et sortant sont connus à priori. Les
seules inconnues du problème sont les flux fij dans les arcs de transport. On a
donc la formulation mathématique suivante pour le problème du transport simple.

z = min cij xij
 (i,j)∈A
 

 xij = si ∀i ∈ Ns





 j|(i,j)∈A (8.3)

s.c.q.
 xij = dj ∀j ∈ Nd



 i|(i,j)∈A



 xij ≥ 0 ∀(i, j) ∈ A

8.4 Résolution du problème de transport simple

Nous allons illustrer la résolution du problème de transport simple sur l’exemple


suivant tiré de Baglin et al [2]. Trois usines situées à Lyon, Strasbourg et Lille
peuvent approvisionner quatre dépôts situés à Saint-Brieuc, Poitiers, Melun et
Toulouse. Le tableau 8.1 fournit (en F par tonne) les tarifs des transporteurs
routiers de chaque usine vers chaque dépôt.
Le tableau donne également la capacité de production (exprimée en milliers de
tonnes) et la demande des dépôts (dans la même unité).
On cherche l’affectation usines-dépôts permettant d’aboutir à un coût de trans-
port minimum.

8.4.1 Résolution par le Simplexe

Appelons cij le coût unitaire de transport de l’usine i vers le dépôt j, CAPi , la


capacité de l’usine i et DEMj , la demande du dépôt j. Comme vu plus haut, en
Section 8.4. Résolution du problème de transport simple 101

Coût de Destination Capacité


fourniture St-Brieuc Poitiers Melun Toulouse de
venant de l’usine
Lyon 264 130 139 160 9
Strasbourg 279 244 146 307 17
Lille 200 166 66 278 9
Demande 10 14 7 4

Tableau 8.1: Résolution du problème de transport simple

appelant xij la quantité transportée de l’usine i au dépôt j, le problème se formule


comme suit :

3 
4
z = min cij xij
i=1 j=1


 
4

 xij = CAPi ∀i = 1, . . .3



 (8.4)
 j=1
s.c.q.  
3


xij = DEMj ∀j = 1, . . .4




i=1

 x ≥0
ij ∀(i, j)
Remarquez que le problème est parfaitement équilibré car :


3 
4
CAPi = DEMj
i=1 j=1

Ce problème linéaire peut être résolu par l’algorithme du Simplexe (voir chapitre
3) qui donne la solution optimale suivante :

• Lyon envoie 5.000 T à Poitiers et 4.000 à Toulouse;

• Strasbourg envoie 8.000 T à St-Brieuc et 9.000 à Poitiers;

• Lille envoie 2.000 T à St-Brieuc et 7.000 à Meulun.

Le coût global de transport de cette solution est de 6.580 kF.


102 Chapitre 8. Résolution du problème de transport simple

8.4.2 Résolution par la méthode du stepping stone

Le principe de cette méthode consiste à partir d’une solution réalisable que l’on
améliore pas à pas. D’où le nom de la méthode. Pour la détermination d’une
solution de départ, au moins deux méthodes heuristiques peuvent être utilisées :

• la méthode du coin Nord-Ouest;


• la méthode de Houthakker.

La méthode du coin Nord-Ouest :

La méthode du coin Nord-Ouest consiste à attribuer le plus grand nombre possible


à la case située le plus à l’Ouest (1er critère) et le plus au Nord (2ème critère)
possible tout en respectant les contraintes de capacité de production et de demande.
Dans notre exemple, on partira donc d’une solution consistant à livrer 9.000
T de Lyon à St-Brieuc. Toute la capacité de Lyon étant utilisée, on sature la
demande de St-Brieuc par 1.000 T venant de Strasbourg. On passe à la deuxième
colonne que l’on rempli à partir du Nord. Lyon étant saturée, on envoie 14.000
T de Strasbourg vers Poitiers dont la demande est ainsi saturée. On passe à la
troisième colonne. On utilise les 2.000 T restantes de Strasbourg complétées de
5.000 T venant de Lille pour saturer la demande de Melun. Enfin, la demande de
Toulouse est satisfaite à partir des 4.000 T restant disponibles à Lille. On obtiendra
la solution du tableau 8.2 pour un coût total de transport s’élevant à 7 805 kF.

Fourniture Destination Capacité


venant St-Brieuc Poitiers Melun Toulouse de
de l’usine
Lyon 9 9
Strasbourg 1 14 2 17
Lille 5 4 9
Demande 10 14 7 4

Tableau 8.2: Heuristique du Coin Nord-Ouest

Heuristique de Houthakker :

La méthode de Houthakker propose de commencer par saturer les liaisons (i, j)


présentant le coût de transport unitaire cij le plus faible. Melun est livrée par l’usine
Section 8.4. Résolution du problème de transport simple 103

de Lille (66 F la tonne). Ensuite Lyon approvisionnera Poitiers, à concurrence de


9.000 T. Le coût minimum suivant est 139 de Lyon à Melun mais la capacité de
Lyon est saturée. Ensuite, le coût minimum de 146 est de Strasbourg à Meulun.
Mais la demande de Meulun est saturée. Puis le coût minimum est de 160 de Lyon
à Toulouse mais à nouveau Lyon est saturée. Ensuite, on envoie 2.000 T de Lille à
Poitiers au coût unitaire de 166, la capacité de Lille étant ainsi saturée. Ensuite le
coût minimum de 200 est de Lille à St-Brieuc mais la capacité de Lille est saturée.
Ensuite, on envoie 3.000 T de Strasbourg vers Poitiers au coût unitaire de 244,
ce qui sature la demande de Poitiers. Les deux coûts unitaires minimum suivant
(264 et 278) correspondent à des capacité et demande saturées. On envoie ensuite
10.000 T de Strasbourg à St-Brieuc. On sature ainsi la demande de St-Brieuc. Et
finalement, on envoie les 4.000 T restantes de Strasbourg à Toulouse. On obtiendra
le tableau 8.3 pour un coût de 6.714 kF.

Fourniture Destination Capacité


venant St-Brieuc Poitiers Melun Toulouse de
de l’usine
Lyon 9 9
Strasbourg 10 3 4 17
Lille 2 7 9
Demande 10 14 7 4

Tableau 8.3: Heuristique du Houthakker

On voit que l’on est déjà beaucoup plus proche de la solution optimale (de coût
égal à 6.580 kF). Remarquez que si deux cases sont de coût minimum, on choisira
celle où l’on peut attribuer le plus grand nombre : ceci aura pour effet de mettre
comme coefficient du coût minimum la plus grande valeur d’une variable.

Amélioration de la solution de base :

Pour chaque case présentant une valeur nulle, on calcule le coût marginal engendré
par le déplacement d’une unité des cases affectées voisines vers celle-ci.
Par exemple, si on veut affecter une unité de Lyon à St-Brieuc, le respect
des contraintes nous oblige à enlever une unité de la case Strasbourg-St-Brieuc, à
enlever une unité de la case Lyon-Poitiers et à ajouter une unité à la case Strasbourg-
Poitiers. Ce qui représente un coût de

+264 − 130 − 279 + 244 = +99.

Le solde étant positif, l’opération n’est pas intéressante.


104 Chapitre 8. Résolution du problème de transport simple

Poitiers Melun
Lyon -1 (x 130) +1 (x 139)
Lille +1 (x 166) -1 (x 66)

Tableau 8.4: Calcul du deuxième coût marginal

L’ajout d’une unité de Lyon à Meulun est illustrée au tableau 8.4. Ce qui
représente un coût de
−130 + 139 + 166 − 66 = +109.
Le solde étant positif, l’opération n’est pas intéressante.
L’ajout d’une unité de Lyon à Toulouse est illustrée au tableau 8.5. Ce qui

Poitiers Toulouse
Lyon -1 (x 130) +1 (x 160)
Strasbourg +1 (x 244) -1 (x 307)

Tableau 8.5: Calcul du troisième coût marginal

représente un coût de
−130 + 160 + 244 − 306 = −33.
Le solde étant négatif, cette modification améliore la solution précédente. On peut
déplacer 4.000 T et gagner 4 × 33 = 132 kF.
Le même raisonnement appliqué à la case Lille-St-Brieuc permet encore de
déplacer 2.000 tonnes de la case Lille-Poitiers à la case Strasbourg-Poitiers et
aussi 2.000 T de Strasbourg-St-Brieuc à Lille-St-Brieuc, pour obtenir la solution
optimale déterminée par le Simplexe.
Toute modification se traduirait alors par une augmentation du coût global.
Notez que l’algorithme de stepping stone choisit à chaque étape comme variable
celle de coût marginal le plus négatif.

Calcul des coûts marginaux

Une méthode permet de réduire fortement le temps de calcul des coûts réduits.
En effet, on peut montrer (cela résulte du principe de dualité de la programmation
linéaire) qu’il existe des variables auxiliaires ui et vj telles que pour chaque case
de base (c’est-à-dire chaque case utilisée dans la solution de départ), on ait :
ui + vj = cij
Section 8.4. Résolution du problème de transport simple 105

Pour la solution du tableau 8.3, on a donc que :

u1 + v2 = 130
u2 + v1 = 279
u2 + v2 = 244
u2 + v4 = 307
u3 + v2 = 166
u3 + v3 = 66

Il s’agit d’un système de 6 équations à 7 inconnues. On peut donc arbitrairement


fixer à zéro la valeur d’une variable (par exemple u1 ). On en déduit immédiatement
la valeur de toutes les autres variables :

u1 = 0
v2 = 130
u2 = 114
u3 = 36
v1 = 165
v4 = 193
v3 = 30

On peut alors calculer les coûts marginaux par la formule suivante (c’est la formule
de calcul des coûts réduits de l’algorithme du Simplexe) :

dij = cij − (ui + vj )

Ceci est fait au tableau 8.6.

v1 = 165 v2 = 130 v3 = 30 v4 = 193


u1 = 0 264 - 0 130 - 0 139 -0 160 - 0
-165 =99 -130 = 0 -30 = 109 -193 = -33
u2 = 114 279 -114 244 -114 146 -114 307 -114
-165 = 0 -130 = 0 - 30 = 2 -193 = 0
u3 = 36 200 -36 166 -36 66 -36 278 -36
-165 = -1 -130 = 0 - 30 = 0 -193 = 49

Tableau 8.6: Calcul des coûts marginaux

On retrouve bien les valeurs +99, +109 et -33 déjà calculées plus haut.
106 Chapitre 8. Résolution du problème de transport simple

8.5 Exercices

8.1. Plan de transport. Une entreprise, spécialisée dans la production de sau-


cisses, dispose de 4 laboratoires où elle élabore son produit et de 5 centres
de distribution d’où elle ravitaille sa clientèle. Le tableau 8.7 indique les
distances entre les laboratoires et les centres de distribution. Le transport a

dij CD1 CD2 CD3 CD4 CD5 Offre


L1 100 300 250 450 250 26
L2 50 200 250 450 250 24
L3 250 100 50 350 300 27
L4 300 150 200 250 450 23
Demande 18 20 22 19 21
Tableau 8.7: Coûts unitaires de transport

été négocié au tarif kilométrique de 2 $ la tonne. La disponibilité (en tonne


de chair) des différents laboratoires est également donnée au tableau 8.7. La
demande des centres de distribution est donnée en dernière ligne du tableau.
L’entreprise cherche le plan d’acheminement à coût minimal des laboratoires
aux centres de distribution. Calculer une solution par l’heuristique du coin
Nord-Ouest et par celle d’Houthakker.
8.2. Problème de transport. On dispose de deux usines de production dont
les débouchés sont situés sur trois marchés distants géographiquement. On
connaı̂t la capacité de production de chacune des usines ainsi que la demande
de chacun des marchés. On dispose également (voir tableau 8.8 pour les
données précises) des distances, exprimées en milliers de miles, entre les
sites de production et les marchés.

Usines Marchés Offre


New York Chicago Topeka
Seattle 2.5 1.7 1.8 350
San Diego 2.5 1.8 1.4 550
Demande 325 300 275

Tableau 8.8: Les données numériques du problème de transport.

Les frais de transport sont de 90 $ par millier de miles. On se demande


combien d’unités du produit acheminer à chaque marché à partir de chaque
usine de manière à minimiser les coûts de transport.
Chapitre 9

Résolution du problème de transport


général

9.1 Introduction

Nous allons voir ici comment résoudre le problème de transport général introduit
au chapitre 7. Il s’agit de déterminer le flot à coût minimum dans un réseau de
transport général. L’algorithme faisant appel à la notion de coût réduit introduite
au chapitre 8. Elle fait également appel à notion de réseau résiduel. Aussi, nous
commencerons par introduire cette notion à la section 9.2.
Nous présenterons ensuite l’algorithme de plus courts chemins successifs.
Le principe de cet algorithme est le suivant : on détermine un plus court chemin
entre un nœud d’entrée et un nœud de sortie non saturés en utilisant le réseau
résiduel (celui où il reste de la capacité de transport). On détermine alors le flux
maximum qui peut être transmis le long de ce chemin. On augmente le flot et on
itère jusqu’à saturer tous les points de demande.
D’autres algorithmes existent pour résoudre ce problème. On en trouvera une
description dans Ahuja et al[1].
Nous verrons ensuite à la section 9.4 l’application de cet algorithme à la
résolution du problème d’affectation.

9.2 Notion de réseau résiduel

Dans plusieurs algorithmes, on cherche à augmenter le flot par rapport à la situation


actuelle du flot. Il est alors intéressant d’identifier non pas le réseau actuel mais
le réseau résiduel, c’est-à-dire celui qui permet de faire passer un supplément de
flux.
Considérons un arc (i, j) dont le flux doit être compris entre une borne inférieure

107
108 Chapitre 9. Résolution du problème de transport général

0 et une borne supérieure égale à la capacité de l’arc cij (voir figure 9.1). Si la
valeur actuelle du flux sur cet arc est fij , il est facile de voir que l’on peut faire
encore passer en flux dans l’arc (i, j) un supplément de flux égal à la capacité
résiduelle rij qui se calcule comme suit :
rij = cij − fij
Mais on peut également faire passer du flux dans l’autre sens en ajoutant un arc de
j à i de capacité résiduelle :
rji = fij
En effet, on peut ramener le flux à sa borne inférieure zéro, ou ce qui est équivalent,
faire circuler un flux au maximum de fij dans un arc de j à i.

rij = cij fij


di dj di dj
c ij
i j i j

r ji = fij

Figure 9.1: Notion de réseau résiduel

On construit le réseau résiduel en remplaçant systématiquement un arc (i, j)


qui n’est pas à sa borne supérieure par un arc dans le même sens avec comme
capacité résiduelle la différence entre la capacité de l’arc et le flot actuel. De
même, si le flux sur cet arc n’est pas à sa borne inférieure, on ajoute un arc en sens
opposé dont la capacité résiduelle est égale à la valeur actuelle du flux.

Définition 9.1 Le réseau résiduel, noté G(f ) consiste en les seuls arcs ayant une
capacité résiduelle rij positive

Remarquez que ce faisant, on peut être amener à remplacer un arc du réseau initial
G, soit par un arc de même sens (cas du flux nul), soit par deux arcs (cas du flux
strictement entre ses bornes inférieure et supérieure) soit par un arc dans le sens
opposé (cas du flux à sa borne supérieure). Remarquez également que la notion
de réseau résiduel est dépendante du flot actuel, ce que traduit la notation G(f ).

9.3 Résolution du problème de flot à coût minimum

Plusieurs algorithmes existent pour résoudre ce problème. Le lecteur intéressé en


trouvera quelques uns dans l’ouvrage de AHUJA et al [1]. Un de ceux-ci, que nous
allons présenter ci-dessous est l’algorithme de plus courts chemins successifs.
Section 9.3. Résolution du problème de flot à coût minimum 109

9.3.1 Algorithme de plus courts chemins successifs

Le principe de l’algorithme est le suivant. A chaque étape, on dispose d’une


solution f qui satisfait les conditions de non négativité et de capacités des arcs mais
pas nécessairement les conditions de conservation de la matière aux nœuds.

Définition 9.2 Un pseudoflot f satisfait les contraintes de capacités et de positivité


des flux. On définit l’excès au nœud i, soit e(i) comme suit
 
e(i) = s(i) + fki − d(i) − fij
k|(k,i)∈A j|((i,j)∈A

où s(i) note l’injection dans le réseau au nœud i, d(i), la demande satisfaite au
nœud i et fij , le flux dans l’arc (i, j). Donc e(i) est la partie de l’offre au nœud i
qui n’est pas encore portée plus loin.
Le principe de l’algorithme est à chaque étape de sélectionner un nœud s
avec un excès d’offre et un nœud t avec une demande non satisfaite et d’envoyer
du flot de s à t le long d’un plus court chemin du réseau résiduel (voir section 9.2
pour la notion de réseau résiduel).
On va illustrer l’algorithme sur l’exemple de la figure 9.2 où la notation des
arcs est la suivante :
(cπij , rij )
où cπij dénote le coût réduit de l’arc qui, pour rappel, se calcule comme suit :

cπij = cij − πi + πj

et rij note la capacité résiduelle. Initialement, tous les flots sont mis à zéro ainsi
que tous les potentiels aux nœuds :

fij = 0 ∀(i, j) ∈ A
πi = 0 ∀i ∈ N

Ainsi, on peut calculer facilement les excès de demande aux nœuds :

e(i) = s(i) − d(i)

Ce qui donne ici e(1) = 4, e(2) = 0, e(3) = 0 et e(4) = 0. On définit les deux
ensembles E des nœuds avec excès d’offre et D avec excès de demande :

E = {i|e(i) > 0}
D = {i|e(i) < 0}

Au départ, on a donc (voir figure 9.2) : E = {1} et D = {4}.


110 Chapitre 9. Résolution du problème de transport général

e(2) = 0
π(2) = 0
π 2
(cij , rij )=
(3,3)
(2,4) e(4) = -4
s1 = 4 π(4) = 0
1 (1,2) 4
e(1) = 4 d4 = 4
π(1) = 0 (2,2) (1,5)
3
e(3) = 0
π(3) = 0

Figure 9.2: Algorithme de plus courts chemins successifs.

Algorithme 9.1 Algorithme de plus courts chemins successifs. Tant que E = ∅,


on sélectionne k ∈ E et l ∈ D. On détermine les plus courtes distances d(j) du
nœud source k vers tous les nœuds du réseau résiduel G(f ) sur base des coûts
réduits cπij . Soit P le plus court chemin du nœud k au nœud l. On met à jour :

π(i) = π(i) − d(i), ∀i ∈ N ;

et on calcule le flux maximum que l’on peut faire passer le long du chemin par

δ = min{e(k), −e(l), rij ∀(i, j) ∈ P }

On augmente le flot le long de P de δ. On met à jour le réseau résiduel G(f), les


ensembles E, D et les coûts réduits.

Appliquons ceci à l’exemple. A l’itération 1, on sélectionne k = 1 et l = 4.


Ensuite, on détermine, par l’algorithme de Dijkstra, les plus courtes distances du
nœud 1 au nœud i, soit d(i), en se basant sur les coûts réduits. On obtient :

d = (0, 2, 2, 3)

et le plus court chemin P = 1 − 3 − 4. On met à jour les potentiels aux nœuds par
la formule π = π − d. On obtient ainsi

π(1) = 0, π(2) = −2, π(3) = −2, π(4) = −3.

On calcule le flot maximum que l’on peut faire passer le long du chemin :

δ = min{4, 4, 2, 5} = 2
Section 9.3. Résolution du problème de flot à coût minimum 111

On peut donc augmenter de 2 unités le flux le long des arcs du chemin

f13 = 2 et f34 = 2

On remet à jour le réseau résiduel G(f ) (voir figure 9.3) ainsi que les ensembles

e(2) = 0
π(2) = -2
π 2
(cij , rij )=
(2,3)
(0,4) e(4) = -2
s1 = 4 π(4) = -3
1 (1,2)
4
e(1) = 2 d4 = 4
(0,2)
π(1) = 0
(0,2) (0,3)
3
e(3) = 0
π(3) = -2

Figure 9.3: Situation au début de l’itération 2.

E et D : E = {1} et D = {4}. On remet à jour les coûts réduits :

cπ12 = 2 − 0 + (−2) = 0
cπ13 = 2 − 0 + (−2) = 0
cπ23 = 1 − (−2) + (−2) = 1
cπ24 = 3 − (−2) + (−3) = 2
cπ34 = 1 − (−2) + (−3) = 0

A la seconde itération, on sélectionne k = 1 et l = 4. Les plus courtes


distances au nœud k source basées sur les coûts réduits et sur le réseau résiduel
sont
d = (0, 0, 1, 1)
tandis que le plus court chemin est P = 1 − 2 − 3 − 4. On met à jour les potentiels
aux nœuds par la formule π = π − d :

π(1) = 0, π(2) = −2, π(3) = −3, π(4) = −4.

On calcule le maximum de flux que l’on peut faire passer le long du chemin

δ = min{2, 2, 4, 2, 3} = 2
112 Chapitre 9. Résolution du problème de transport général

On peut donc augmenter de 2 unités le flux le long des arcs du chemin

f12 = 0+2=2
f13 = 2+0=2
f23 = 0+2=2
f24 = 0+0=0
f34 = 2+2=4

On remet à jour les ensembles E et D. On peut vérifier que :

e(1) = e(2) = e(3) = e(4) = 0.

Comme E est vide, on a la solution optimale.

9.4 Application au problème d’affectation

Illustrons ceci sur l’exemple suivant. On veut affecter 4 personnes à 4 postes de


travail. Leurs compétences sont telles que la première personne ne peut travailler
que sur les postes de travail 1 ou 2, la seconde sur les postes 2 ou 3, la troisième
sur les postes 1, 3 ou 4 et la quatrième, sur les postes 3 ou 4. De plus la première
personne a une efficacité double si on la met au premier poste de travail plutôt
qu’au second. Ainsi de suite pour les autres. On détermine ainsi l’efficacité de
chaque personne à chaque poste où elle est susceptible d’être affectée.
On peut représenter le problème par un réseau de transport bipartite où les
sommets origine désignent les personnes et les sommets destination, les postes.
On trace des arcs entres les personnes et les postes uniquement dans le cas où
l’affectation de la personne au poste est possible. Ceci est fait pour notre exemple
à la figure 9.4.

1 1

2 2

3 3

4 4

Figure 9.4: Problème d’affectation.


Section 9.4. Application au problème d’affectation 113

Nous le complétons le graphique en mettant les temps pour effectuer chacune


des tâches par chacun des candidats ainsi qu’en faisant apparaı̂tre une entrée unique
et un puits unique. On obtient la figure 9.5.
0 3
5
1 5
10
0 0
0 8
8
2 6 0
0 0 3
4 12 4
0 3 9
0 0 12 0
3 15
7
0 11 0
0 15 11
4 20 8

Figure 9.5: Problème d’affectation : itération 1

Initialement, on met à zéro tous les flux ainsi que les fonctions potentielles :

π(i) = 0 ∀i et fij = 0 ∀(i, j)

On calcule l’excès aux nœuds ainsi que les ensembles E et D :

e(0) = 4 e(9) = −4 E = {0} D = {9}

Itération 1 :
On sélectionne k = 0 et l =9 et on calcule les plus courtes distances à k :

(0, 0, 0, 0, 0, 3, 8, 12, 11, 3)

Le plus court chemin est P = (0, 3, 5, 9). On met à jour les π :

(0, 0, 0, 0, 0, −3, −8, −12, −11, −3)

On détermine la maximum de flux qui peut passer sur le chemin

δ = min{4, 4, 1, 1, 1} = 1

On augmente d’une unité le flux le long de P :

f03 = f35 = f59 = 1.


114 Chapitre 9. Résolution du problème de transport général

On met à jour les coûts réduits :

c01 = 0−0+0 =0 c37 = 15 − 0 + (−12) =3


c02 = 0−0+0 =0 c38 = 11 − 0 + (−11) =0
c03 = 0−0+0 =0 c47 = 15 − 0 + (−12) =3
c04 = 0−0+0 =0 c48 = 20 − 0 + (−11) =9
c15 = 5 − 0 + (−3) =2 c59 = 0 − (−3) + (−3) =0
c16 = 10 − 0 + (−8) =2 c69 = 0 − (−8) + (−3) =5
c26 = 8 − 0 + (−8) =0 c79 = 0 + 12 − 3 =9
c27 = 12 − 0 + (−12) =0 c89 = 0 + 11 − 3 =8
c35 = 3 − 0 + (−3) =0

On remet à jour le réseau résiduel. Ceci est fait à la figure 9.6.


0 2
2
1 5
2
0 0
0 0
0
2 6 5
0 0 5
4 0 4
0 0 9
0 2 0 9
3 3
7
0 0 8
0 3 2
4 9 8

Figure 9.6: Problème d’affectation : itération 2

Itération 2 :
On sélectionne k = 0 et l = 9 et on calcule les plus courtes distances à k :

(0, 0, 0, 2, 0, 2, 0, 0, 2, 5)

Le plus court chemin est P = (0, 2, 6, 9). On met à jour les π :

(0, 0, 0, −2, 0, −5, −8, −12, −13, −8)

On détermine la maximum de flux qui peut passer sur le chemin

δ = min{3, 3, 1, 1, 1} = 1

On augmente d’une unité le flux le long de P : f02 = f26 = f69 = 1.


Section 9.4. Application au problème d’affectation 115

On met à jour les coûts réduits :

c01 = 0−0+0 =0 c37 = 15 − (−2) + (−12) =5


c02 = 0−0+0 =0 c38 = 11 − (−2) + (−13) =0
c03 = 0 − 0 + (−2) = −2 c47 = 15 − 0 + (−12) =3
c04 = 0−0+0 =0 c48 = 20 − 0 + (−13) =7
c15 = 5 − 0 + (−5) =0 c59 = 0 − (−5) + (−8) = −3
c16 = 10 − 0 + (−8) =2 c69 = 0 − (−8) + (−8) =0
c26 = 8 − 0 + (−8) =0 c79 = 0 − (−12) − 8 =4
c27 = 12 − 0 + (−12) =0 c89 = 0 − (−13) − 8 =5
c35 = 3 − (−2) + (−5) =0

On remet à jour le réseau résiduel. Ceci est fait à la figure 9.7.


0 0
0
1 5
2
0 3
2 2
0
2 6 0
0 0 5
4 0 4
0 0 9
2 0 2 4
3 5
7
0 0 5
0 3 0
4 7 8

Figure 9.7: Problème d’affectation : itération 3

Itération 3 :
On sélectionne k = 0 et l =9 et on calcule les plus courtes distances à k :

(0, 0, 2, 0, 0, 0, 2, 2, 0, 5)

Le plus court chemin est P = (0, 1, 5, 3, 8, 9). On met à jour les π :

(0, 0, −2, −2, 0, −5, −10, −14, −13, −13)

On détermine la maximum de flux qui peut passer sur le chemin

δ = min{2, 2, 1, 1, 1, 1, 1} = 1

On augmente d’une unité le flux le long de P :

f01 = f15 = f38 = f89 = 1


f35 = 0
116 Chapitre 9. Résolution du problème de transport général

On met à jour les coûts réduits :


c01 = 0−0+0 =0 c37 = 15 − (−2) + (−14) =3
c02 = 0 − 0 + (−2) = −2 c38 = 11 − (−2) + (−13) =0
c03 = 0 − 0 + (−2) = −2 c47 = 15 − 0 + (−14) =1
c04 = 0−0+0 =0 c48 = 20 − 0 + (−13) =7
c15 = 5 − 0 + (−5) =0 c59 = 0 − (−5) + (−13) = −8
c16 = 10 − 0 + (−10) =0 c69 = 0 − (−10) + (−13) = −3
c26 = 8 + 2 + (−10) =0 c79 = 0 − (−14) − 13 =1
c27 = 12 + 2 + (−14) =0 c89 = 0 − (−13) − 13 =0
c35 = 3 − (−2) + (−5) =0
On remet à jour le réseau résiduel. Ceci est fait à la figure 9.8.
0 2
0
1 5
0
0 8
2 2
0
2 6 3
0 2 2
4 0 4
0 0 9
2 0 1 1
3 3
7
0 0 0
0 1 2
4 7 8

Figure 9.8: Problème d’affectation : itération 4

Itération 4 :
On sélectionne k = 0 et l =9 et on calcule les plus courtes distances à k :

(0, 2, 2, 2, 0, 2, 2, 1, 2, 2)

Le plus court chemin est P = (0, 4, 7, 9). On détermine la maximum de flux qui
peut passer sur le chemin δ = min{1, 1, 1, 1, 1, 1} = 1. On augmente d’une unité
le flux le long de P :
f04 = f47 = f79 = 1
Comme E est vide, on a trouvé la solution optimale qui consiste donc à affecter
la première personne au premier poste, la deuxième au deuxième, la troisième au
quatrième et la quatrième au troisième poste :

x∗11 = 1
x∗22 = 1
x∗34 = 1
x∗43 = 1
Section 9.5. Exercices 117

9.5 Exercices

9.1. Le problème de la pharmacie centrale. La pharmacie centrale du Mali


doit répondre à une demande d’un médicament rare dont elle détient certains
stocks d’âges divers. Les délais de commande et de livraison sont tels que
la pharmacie centrale devra compter sur ses propres stocks pour les cinq
prochains mois. Le tableau 9.1 fournit l’état actuel des stocks.

Lot A B C D E F G H I J K L
Age (mois) 2 1 4 3 2 4 5 2 1 4 5 3

Tableau 9.1: Stocks de médicaments

Le laboratoire qui fabrique ce médicament a établi que son efficacité va dé-


croissant avec le nombre de mois écoulés depuis sa production (voir tableau
9.2).

Age (mois) 0 1 2 3 4 5 6 7 8 9
Efficacité (%) 100 99 97 94 88 83 81 78 76 75

Tableau 9.2: Efficacité des médicaments

La pharmacie prévoit avoir besoin de 12 lots au cours des 5 prochains mois,


selon la distribution indiquée au tableau 9.3. La pharmacie, qui cherche

Mois 1 2 3 4 5
Besoins 3 2 4 1 2

Tableau 9.3: Besoins de médicaments

à maximiser l’efficacité totale des lots, s’interroge sur la séquence selon


laquelle elle devra écouler ses lots.

(a) Déterminez une affectation qui corresponde à la règle du premier entré


= premier sorti et calculer son efficacité globale.
(b) Déterminez une affectation qui corresponde à la règle du dernier entré
= premier sorti et calculer son efficacité globale.
(c) Formuler le problème de la détermination de l’affectation d’efficacité
globale maximum comme un problème affectation (ne pas le résoudre).

9.2. Entreprise de construction. Une entreprise de construction doit affecter 4


ouvriers à 4 tâches. Le tableau 9.4 indique l’efficacité de la personne si elle
118 Chapitre 9. Résolution du problème de transport général

est affectée à la tâche. Une barre indique que la personne n’est pas qualifiée
pour la tâche. Utilisez l’algorithme de plus courts chemins successifs pour
identifier une affectation qui maximise l’efficacité générale.

Tâche 1 Tâche 2 Tâche 3 Tâche 4


Ouvrier 1 45 - - 30
Ouvrier 2 50 55 15 -
Ouvrier 3 - 60 25 75
Ouvrier 4 45 - - 35

Tableau 9.4: Entreprise de construction


Chapitre 10

La programmation dynamique.

La programmation dynamique a pour but de traiter les modèles où une séquence
optimale de décisions doit être prise. Elle est largement utilisée en planification de
la production pour déterminer les lancements de production en cas de coûts fixes
de lancement de production.
L’idée générale des procédures de résolution en programmation dynamique
est la suivante. On part d’un sous problème, celui de dernière étape, dont la
résolution est triviale. Ensuite, et en procédant à rebours, on étend progressivement
le problème en incluant les étapes précédentes et en calculant la politique optimale
à chaque étape en se basant sur la politique optimale de l’étape suivante.

10.1 Le problème du voyageur

Un exemple purement fictif, tiré de Hillier et Lieberman [10], va nous permettre


d’introduire la terminologie employée en programmation dynamique. Il s’agit du
problème du voyageur devant traverser l’ouest américain il y a plus d’un siècle.
Son point de départ et sa destination sont connus. Il effectue son voyage en quatre
étapes. A chaque étape, il a le choix de se diriger vers plusieurs états. A la
figure 10.1, on a représenté chaque état par un cercle. Son état de départ est l’état
1 et son état d’arrivée est l’état 10.
Le voyageur souscrit à chaque étape une police d’assurance dont le coût reflète
le degré d’insécurité du voyage. Ceux-ci sont indiqués au dessus des arcs à la
figure 10.1. Il va donc déterminer son itinéraire de manière à choisir la route la
plus sûre en minimisant la somme des polices d’assurance pour le passage d’état
en état.
Notez d’abord que l’approche très simple qui consiste à choisir à chaque étape
la police la moins chère ne conduit pas à une solution globalement la moins chère.
En effet, en suivant cette stratégie, on choisirait le chemin 1 → 2 → 6 → 9 → 10

119
120 Chapitre 10. La programmation dynamique.

7
2 5
1
4
6 4
2 8
3
3
6
4 2 10
1 3 6
3 4
4
3
9
4 1 3
3
4 5 7

Figure 10.1: Problème du voyageur

avec un coût total d’assurance de 13. Cependant en sacrifiant un peu à la première


étape, on peut gagner aux étapes ultérieures. En effet, par exemple la route 1 →
4 → 6 → 9 → 10 permet un coût total de 11.
Une autre méthode serait d’évaluer toutes les routes possibles. Cependant sur
ce petit exemple, elles sont déjà au nombre de 3 × 3 × 2 = 18 et lorsque le nombre
d’étapes et/ou le nombre d’états croı̂t, cela devient vite un travail prohibitif.
C’est ici qu’intervient la programmation dynamique qui permet de calculer
la solution optimale sans faire de l’énumération explicite. La programmation dyna-
mique commence avec une petite portion du problème original, trouve la solution
optimale pour cette portion du problème. Ensuite on élargit progressivement le
problème, en déterminant la nouvelle solution optimale à partir de la précédente.
Pour le problème du voyageur, on considère le problème de fin de voyage, lorsqu’il
n’y a plus qu’une étape à faire. Pour ce problème la solution optimale est évidente :
le voyageur doit aller directement à sa destination, l’état 10. A l’itération suivante,
on élargit d’une unité le nombre d’étapes à effectuer. On peut ensuite déduire la
stratégie optimale pour la troisième étape en fonction de la stratégie optimale pour
la dernière étape.
En programmation dynamique, deux types de variables sont associées à chaque
étape. La variable st indique l’état du système au début de l’étape t. Cette
variable doit contenir toute l’information résultant des choix effectués aux étapes
précédentes. La variable xt indique la décision stratégique prise à l’étape t. Ainsi,
dans notre exemple, notons st l’état de départ de l’étape t tandis que xt note la
destination de l’étape t.
On note par ft (st , xt ) le coût total de la meilleure stratégie pour les étapes
restantes, si l’on se trouve au début de l’étape t dans l’état du système st et que
Section 10.1. Le problème du voyageur 121

l’on prend xt comme décision stratégique à l’étape t. Notons par x∗t la valeur de
xt qui minimise ft (st , xt ) et ft∗ (st ) la valeur minimum correspondante. On a donc
que :
ft∗ (st ) = min ft (st , xt ) = ft (st , x∗t )
xt

Ainsi, dans notre exemple, ft (st , xt ) note le coût total de la meilleure stratégie
pour les étapes restantes si le voyageur est dans l’état st à l’étape t et sélectionne
comme état suivant l’état xt .
La programmation dynamique va déterminer successivement f4∗ (s4 ), f3∗ (s3 ),
f2∗ (s2 ),
f1∗ (s1 ) pour chaque état possible st à l’étape t et utiliser par exemple f2∗ (s2 )
pour calculer f1∗ (s1 ).
Nous allons maintenant appliquer ceci à l’exemple du voyageur. Pour t = 4,
c’est-à-dire lorsque le voyageur n’a plus qu’une étape à effectuer pour rejoindre sa
destination, sa route est entièrement déterminée par son état courant s4 (ici s4 = 8
ou 9) et sa destination finale x4 = 10. Le tableau 10.1 reprend les coûts minimaux
de la dernière étape ainsi que la décision optimale en fonction de l’état de départ.

s4 x∗4 f4∗ (s4 )


8 10 3
9 10 4

Tableau 10.1: Coûts minimaux de la dernière étape

Lorsque le voyageur a encore deux étapes à effectuer (t = 3), la solution


requière un peu plus de calculs. Si, par exemple, le voyageur est dans l’état 5, il
peut aller à l’étape 3 vers l’état 8 ou 9 à un coût respectif de c5,8 = 1 ou c5,9 = 4. S’il
choisit l’état 8, le coût additionnel qu’il va encourir pour rejoindre sa destination
à partir de l’état 8 est donné dans la table 10.1, il s’agit de f4∗ (8) = 3, de sorte
que son coût total est de 1 + 3 = 4. Semblablement, s’il choisit l’état 9, il devra
additionner 4 + 4 = 8. Et donc l’état qu’il va choisir comme destination est l’état
8, donc x∗3 = 8, qui donne un coût minimum pour le chemin qui reste à parcourir
de f3∗ (5) = 4. On procède de même pour les autres états possibles à l’étape 3,
c’est-à-dire les états s3 = 6 et s3 = 7 et on obtient les valeurs données dans la
table 10.2.
La solution pour le problème où il reste trois étapes (t = 2) est obtenue de
manière similaire. Elle est illustrée à la table 10.3. Les états destination sont cette
fois au nombre de trois : il s’agit de x2 = 5, x2 = 6 ou x2 = 7 tandis que les états
de départ possibles sont s2 = 2, s2 = 3 ou s2 = 4. Pour les états de départ 2 ou 4,
la destination optimale peut être au choix 5 ou 6 puisque le coût total est le même.
122 Chapitre 10. La programmation dynamique.

s3 x3 = 8 x3 = 9 x∗3 f3∗ (s3 )


5 1+3=4 4+4=8 8 4
6 6+3=9 3+4=7 9 7
7 3+3=6 3+4=7 8 6

Tableau 10.2: Coûts minimaux de la troisième étape

s2 x2 = 5 x2 = 6 x2 = 7 x∗2 f2∗ (s2 )


2 7 + 4 = 11 4 + 7 = 11 6 + 6 = 12 5 ou 6 11
3 3+ 4 =7 2+ 7 =9 4 + 6 = 10 5 7
4 4+ 4 =8 1+ 7 =8 5 + 6 = 11 5 ou 6 8

Tableau 10.3: Coût minimaux de la deuxième étape

Enfin, pour terminer, le problème de première étape (t = 1), le coût minimum


de la police optimale est à nouveau donné en fonction de l’état destination de
l’étape comme la somme du coût de première étape plus le coût minimum des
étapes ultérieures. On obtient les résultats de la table 10.4.

s1 x1 = 2 x1 = 3 x1 = 4 x∗1 f1∗ (s1 )


1 2 + 11 = 13 4 + 7 = 11 3 + 8 = 11 3 ou 4 11

Tableau 10.4: Coût minimaux de la première étape

On peut maintenant identifier une politique optimale. Pour t = 1, le voyageur


doit donc se diriger initialement vers l’état 3 ou 4. Supposons qu’il choisisse
x∗1 = 3. Pour t = 2, la stratégie optimale pour s2 = 3 est x∗2 = 5 (voir tableau
10.3), ce qui dans l’étape t = 3 conduit à l’état s3 = 5. La stratégie optimale pour
s3 = 5 consiste à choisir x∗3 = 8 (voir tableau 10.2). On se retrouve en s4 = 8 et
on choisit x∗4 = 10 à l’étape 4 (voir tableau 10.1). Une des routes optimales est
donc 1 → 3 → 5 → 8 → 10 donnant un coût total minimum de f1∗ (1) = 11. On
peut résumer la solution dans le tableau suivant :

t 1 2 3 4
st 1 3 5 8
x∗t 3 5 8 10
Section 10.2. Résolution des problèmes dynamiques 123

10.2 Résolution des problèmes dynamiques

Nous allons ici résumer la notation utilisée en programmation dynamique ainsi


que la méthode de résolution.
Rappelons qu’un problème dynamique est divisé en étapes indicées par t. A
chaque étape, l’état initial est caractérisé par st et on prend une décision stratégique
notée xt .
Les problèmes dynamiques peuvent être représentés comme à la figure 10.2.
A l’étape t, on est dans l’état st . En décidant la politique xt , on amène le système
à l’étape t + 1 à être dans l’état st+1 .

Etape Etape
t t+1
Décision stratégique
Etat : st s t+1
xt

f (s t, xt ) ft∗(s t+1 )

Figure 10.2: Résolution des problèmes dynamiques

Du point de vue de l’objectif, la politique optimale a déjà été calculée en t + 1,



et donne une valeur optimale pour les étapes ultérieures de ft+1 (st+1 ). La décision
xt donne une certaine contribution à l’objectif qui vient s’ajouter à la précédente
pour donner ft (st , xt ) au début de l’étape t.

ft (st , xt ) = cst ,xt + ft+1 (xt )

Par exemple, dans le cas du voyageur, la contribution de l’étape cst ,xt est le coût
de l’assurance pour aller de st à xt . En optimisant par rapport à xt , on obtient

ft∗ (st ) = min {ft (st , xt )}


xt

On note par x∗t la politique optimale pour l’étape courante de sorte que l’on a que :

ft∗ (st ) = ft (st , x∗t )

On procède de même pour tous les états possibles st de l’étape t et l’on


détermine ainsi tous les valeurs optimales ft∗ (st ). La procédure peut alors être
continuée à rebours.
124 Chapitre 10. La programmation dynamique.

10.3 Un problème d’affectation de ressources rares

Nous illustrons le fait que le champs d’application de la méthode de résolution


est très large sur un deuxième exemple également tiré de Hillier et Lieberman
[10] : il s’agit du problème de l’organisation mondiale de la santé. On suppose
que l’OMS dispose de 5 équipes médicales à affecter à 3 pays pour mener à
bien une campagne de vaccination. L’OMS doit déterminer combien d’équipes
envoyer dans chacun des trois pays de manière à maximiser l’efficacité générale
de l’affectation. La mesure de l’efficacité est donnée en terme d’années-homme
de vie supplémentaire. Ces données sont reprises au tableau 10.5. On suppose que
chaque pays doit bénéficier d’au moins une équipe.

Nombre d’équipes Pays 1 Pays 2 Pays 3


1 45 20 50
2 70 45 70
3 90 75 80
Tableau 10.5: Milliers d’années-homme supplémentaires

Bien qu’il n’y ait pas de succession temporelle, on peut imaginer que les trois
étapes d’un processus dynamique consistent en l’affectation successive aux trois
pays puisque lorsqu’une équipe est affectée à un pays, elle n’est plus disponible
pour les autres pays. On a donc identifié les étapes.
Comment identifier les états ? Autrement dit, quelle est l’information né-
cessaire à une étape pour pouvoir déterminer la politique optimale ? Il s’agit
simplement du nombre d’équipes médicales qui restent disponibles. Notons st le
nombre d’équipes encore disponibles au début de l’étape t.
Notons pt (xt ) la mesure de l’efficacité de l’allocation de xt équipes médicales
au pays t. Si, comme précédemment, on note par ft (st , xt ) la contribution à
l’objectif des étapes ultérieures à t et de l’étape t si l’on est dans l’état st et que
l’on prend la décision xt , on peut écrire :

ft (st , xt ) = pt (xt ) + ft+1 (st+1 )
avec pt (xt ) le bénéfice pour le pays t de recevoir xt équipes et st+1 le nombre
d’équipes encore disponibles au début de l’étape t + 1. Celui-ci est lié à st par la
relation de récurrence suivante :
st+1 = st − xt .
La relation de récurrence liant fn∗ et fn+1

s’écrit quant à elle comme suit :


ft∗ (st ) = max ft (st , xt ) = max pt (xt ) + ft+1

(st − xt ) .
xt x t
Section 10.3. Un problème d’affectation de ressources rares 125

A l’étape t = 3, les états possibles vont de 1 (il faut au moins une équipe pour
le pays 3) jusqu’à 3 (on a au moins affecté une équipe au pays 1 et une équipe
au pays 2). A la dernière étape, on a intérêt à affecter toutes les équipes encore
disponibles (voir tableau 10.6).

s3 x∗3 f3∗ (s3 )


1 1 50
2 2 70
3 3 80

Tableau 10.6: Calculs de l’étape 3

A l’étape 2, les états possibles vont de 2 (il faut au moins une équipe pour le
pays 2 et une équipe pour le pays 3) à 4 (on a au moins attribué une équipe au pays
1). A la deuxième étape, au gain de l’étape, il faut ajouter le gain résultant pour
l’étape 3 avec s3 = s2 − x2 . Le détail des calculs est donné au tableau 10.7.

s2 x2 = 1 x2 = 2 x2 = 3 x∗2 f2∗ (s2 )


2 20 + 50 = 70 − − 1 70
3 20 + 70 = 90 45 + 50 = 95 − 2 95
4 20 + 80 = 100 45 + 70 = 115 = 75 + 50 = 125 3 125

Tableau 10.7: Calculs de l’étape 2

De même à l’étape 1, au gain de l’étape, il faut ajouter ceux des étapes suivantes
avec s2 = s1 − x1 . Le détail des calculs est donné au tableau 10.8.

s1 x1 = 1 x1 = 2 x1 = 3 x∗1 f1∗ (s1 )


5 45 + 125 = 170 70 + 95 = 165 90 + 70 = 160 1 170

Tableau 10.8: Calculs de l’étape 1

La solution optimale est donc x∗1 = 1 qui donne s2 = 5 − 1 = 4 pour la


deuxième étape ou encore x∗2 = 3, ce qui donne s3 = 4 − 3 = 1 pour l’étape 3
de sorte que x∗3 = 1, ce qui donne un gain de 170 000 hommes-années. On peut
résumer la solution dans le tableau suivant :
t 1 2 3
st 5 4 1
x∗t 1 3 1
126 Chapitre 10. La programmation dynamique.

10.4 Application à la planification de la production.

Nous allons maintenant voir comment la programmation dynamique permet de


résoudre des problèmes de planification de la production en présence de coûts de
production non convexes. Illustrons ceci sur un exemple.
La demande prévisionnelle de fin de mois d’un composant est donnée au ta-
bleau 10.9. La fabrication de ce composant nécessite un certain nombre de réglages
indépendants du nombre d’unités fabriquées. Le coût fixe de lancement de la pro-
duction est de 150. Le coût direct dépend de la main d’œuvre disponible. Le coût
est de 200 en heures normales, de 250 en heures supplémentaires. Le tableau 10.9
donne la production maximale en heures normales et heures supplémentaires. On

Période t 1 2 3 4 5
Capacité de production à 200 2 2 3 3 3
Capacité de production à 250 3 3 3 3 3
Demande prévisionnelle 2 1 4 2 4

Tableau 10.9: Demande prévisionnelle et capacité de production

une capacité de stockage limitée à 2 unités. Le coût de stockage est de 10 par


unité stockée par mois. Le délai de fabrication est négligeable. On s’interdit toute
rupture de stock. Autrement dit, il faut satisfaire la demande de fin de mois.
Nous allons tout d’abord formuler le problème en un problème de pro-
grammation dynamique. Pour cela, définissons la variable d’état de la période
t suivante :
st = stock au début de la période t.
Définissons aussi la variable de décision de la période t suivante :

xt = production à la période t.

On définit la fonction
ft (st , xt )
comme étant le coût de la meilleure planification pour les périodes restantes si on
est dans l’état st au début de la période t et que l’on décide de produire xt à la
période t. Ce coût est la somme du coût de production de l’étape t, d’un coût de
possession du stock pendant le mois t ainsi que du coût des étapes ultérieures :

ft (st , xt ) = cpt (xt ) + cs st + ft+1 (st + xt − dt )
Section 10.4. Application à la planification de la production. 127

où dt note la demande prévisionnelle qui est donnée au tableau 10.9. La fonction
cpt (xt ) dénote le coût de production à l’étape t. Ce dernier est la somme d’un coût
fixe de lancement de 150, à payer pour autant qu’il y ait production, et d’un coût
direct de main d’œuvre qui est de 200 par unité produite en heures normales, de
250 par unité produite en heures supplémentaires. Remarquez qu’en présence de
coût de lancement le coût de production n’est pas convexe. Ceci peut être vérifié
à la figure 10.3 qui illustre la fonction de coût pour t = 5 :




 0 si x5 = 0;


cp5 (x5 ) =  150 + 200x5 si x5 = 1, 2 ou 3;




 150 + 600 + 250(x5 − 3) si x5 = 4, 5 ou 6.

cp 5(x5 )

1500

1250
250
1000

750

550 200

350

350

1 2 3 4 5 6 x5

Figure 10.3: Coût non convexe.

La capacité de stockage est limitée à 2 unités. Ce qui limitera à trois les états
du monde possibles à chaque étape.
Nous allons maintenant résoudre le problème par la programmation dyna-
mique. A l’étape 5, on a d5 = 4. Ce qui explique qu’il faut au moins produire
4 unités si s5 = 0 mais pas plus de 6 sinon le stock final sera supérieur à deux
128 Chapitre 10. La programmation dynamique.

unités. De plus la capacité de production est limitée à six unités. On obtient les
coûts suivants des différentes stratégies :

s5 x5 = 2 x5 = 3 x5 = 4 x5 = 5 x5 = 6 x∗5 f5∗ (s5 )


0 − − 1.000 1.250 1.500 4 1.000
1 − 760 1.010 1.260 − 3 760
2 570 770 1.020 − − 2 570
Par exemple le coût de 1.000 si s5 = 0 et x5 = 4 résulte du seul coût de production
qui se calcule comme suit :
150 + 3 × 200 + 250 = 1000.
Le coût de 760 si s5 = 1 et x5 = 3 résulte de la somme du coût de stockage d’une
unité pendant un mois et du coût de production des trois unités :
1 × 10 + 150 + 3 × 200 = 760.

A l’étape 4, on a d4 = 2. On ajoute au coût de production de l’étape, le coût


des étapes ultérieures. Ainsi, dans le cas où s4 = 0 et x4 = 2, le coût correspond
à l’application de la formule :
f4 (s4 , x4 ) = cp4 (x4 ) + f5∗ (s4 + x4 − d4 )
= (150 + 400) + 1.000
= 1.550
On obtient le tableau de coûts suivant :

s4 x4 = 0 x4 = 1 x4 = 2 x4 = 3 x4 = 4 x∗4 f4∗ (s4 )


0 − − 1.550 1.510 1.570 3 1.510
1 − 1.360 1.320 1.330 − 2 1.320
2 1.020 1.130 1.140 − − 0 1.020

A l’étape 3, on a d3 = 4. On détermine semblablement le tableau de coûts


suivant :

s3 x3 = 2 x3 = 3 x3 = 4 x3 = 5 x3 = 6 x∗3 f3∗ (s3 )


0 − − 2.510 2.570 2.520 4 2.510
1 − 2.270 2.330 2.280 − 3 2.270
2 2.080 2.090 2.040 − − 4 2.040
Section 10.4. Application à la planification de la production. 129

A l’étape 2, on a d2 = 1. On a une capacité de production à 200 limitée à deux


unités. On obtient le tableau de coûts suivant :

s2 x2 = 0 x2 = 1 x2 = 2 x2 = 3 x∗2 f2∗ (s2 )


0 − 2.860 2.820 2.840 2 2.820
1 2.520 2.630 2.600 − 0 2.520
2 2.290 2.410 − − 0 2.290

A l’étape 1, la demande est de 2 et on a le tableau de coûts suivant :

s1 x1 = 2 x1 = 3 x1 = 4 x∗1 f1∗ (s1 )


0 3.370 3.320 3.340 3 3.320

On peut ensuite déterminer la politique optimale en partant de s1 = 0. En


première étape, la stratégie optimale est de produire 3. La demande étant de 2, on
se retrouve avec un stock initial s2 = 1. La stratégie optimale pour la deuxième
période est dans ce cas de ne produire rien du tout. On se retrouve avec un stock
initial s3 = 0. La stratégie optimale est de produire x3 = 4, c’est-à-dire la demande
de la période. On se retrouve avec un stock initial s4 = 0. La stratégie optimale
est dans ce cas de produire x4 = 3, soit une unité de plus que la demande. On se
retrouve avec un stock initial s5 = 1 et on produit x5 = 3.
La planification optimale est donc la suivante :

t 1 2 3 4 5
st 0 1 0 0 1
x∗t 3 0 4 3 3
dt 2 1 4 2 4

Remarquez qu’en période 2, on a préféré ne pas produire la seule unité de-


mandée car une unité en première étape même en heures supplémentaires et avec
un coût de stockage revient mois cher (260) qu’une seule unité en heure normale
à la période 2 (350). Remarquez aussi qu’en période 4, on produit une unité de
plus que la demande pour éviter de produire à 250 en période 5 la quatrième unité
demandée cette période. Il y a, en effet, une unité disponible à 200 (+ 10 de coût
de stockage) au mois précédent.
130 Chapitre 10. La programmation dynamique.

10.5 Exercices

10.1. Ventes de livres. Un éditeur de livres éducatifs doit décider du nombre de


vendeurs qu’il envoie dans chacune des régions du pays pour maximiser le
nombre de ventes. Le tableau qui suit donne l’augmentation du nombre de
ventes dans chaque région en fonction du nombre de vendeurs envoyés.

Nombre de vendeurs Région 1 Région 2 Région 3


1 4 3 5
2 6 6 7
3 9 8 12
4 11 10 12

Il y a 6 vendeurs mais il est décidé d’en envoyer au mois un dans chaque


région. Formuler et résoudre par la programmation dynamique.

10.2. Plan de production hebdomadaire optimal. Une société de construction


automobile doit planifier la production du moteur M200. Au début de la
douzième semaine, les commandes à honorer pour les périodes 13 à 16, sont
les suivantes :
Période 13 14 15 16
Besoins totaux 4 5 2 3
La fabrication du moteur M 200 demande une semaine et le coût de lancement
dans l’atelier moteurs est estimé à 500 F. Le coût variable unitaire est de 300
F pour les trois premières unités produites au cours d’une semaine et de
400 F pour les unités suivantes. La capacité de stockage est limitée à deux
moteurs et le coût unitaire hebdomadaire de stockage est de 50 F.

(a) Formuler le problème de planification comme un problème dynamique.


(b) Sachant qu’au début de semaine 13, il ne reste aucun M200 en stock,
déterminer le plan de production optimal du moteur M200 pour les
semaines 12 à 15.
(c) Donner le plan optimal de production et de stockage.
Chapitre 11

Les modèles non linéaires

11.1 Introduction

On parle de modèle d’optimisation non linéaire lorsque l’on doit maximiser ou


minimiser une fonction sous contraintes et que la fonction objectif, ou au moins
une contrainte est non linéaire. Dans cette partie du cours, nous allons donc nous
attacher à la résolution du problème suivant :

max f (x)


 gi (x) ≤ 0, i = 1, . . .m
s.c.q.

 hk (x) = 0, k = 1, . . .p

où f (x), gi (x), k = 1, . . .m, et hk (x), i = 1, . . .p sont des fonctions continûment


différenciables définies sur Rn à valeurs dans R. Il s’agit donc de la généralisation
au cas non linéaire du problème classique de la programmation linéaire :
max cx

Ax ≤ b
s.c.q.
x ≥ 0

Comme exemple de fonction objectif non linéaire, on peut citer le cas d’un
rendement croissant d’échelle, c’est-à-dire une contribution unitaire au profit
s’accroissant avec la quantité produite. Par exemple, si la marge unitaire est de la
forme m1 (x1 ) = 550 + 2x1 , cela donnera un terme non linéaire dans l’objectif :
max z = m1 (x1 )x1 = 550x1 + 2x21 .
Comme exemple de contrainte non linéaire, on peut citer la relation entre le flot de
gaz entre les nœuds i et j, noté fij , et les pressions en ces points, pi et pj :

fij2 = Cij2 p2i − p2j

131
132 Chapitre 11. Les modèles non linéaires

11.2 Difficulté de résolution des problèmes non linéaires

Si certains problèmes particuliers d’optimisation non linéaire peuvent se ramener à


la résolution d’une suite de problèmes linéaires (comme les problèmes séparables
que nous traiteront à la section 12.2), en général, il faudra prendre en compte
explicitement le caractère non linéaire des problèmes pour les résoudre.
Beaucoup d’algorithmes de programmation non linéaire exploitent directement
les conditions d’optimalité, c’est-à-dire les conditions vérifiées à la solution opti-
male du problème. Nous allons donc d’abord nous attacher à établir ces conditions.
Ces conditions sont les extensions à Rn des conditions bien connues d’annulation
de la dérivée première pour une fonction d’une variable dans R.
Avant de passer à l’énoncé de ces conditions, soulignons quelques différences
fondamentales avec la programmation linéaire. En programmation linéaire, la
solution optimale est toujours obtenue sur la frontière du domaine réalisable et,
même si toute une arête du polygone peut être optimale, on peut toujours choisir
un sommet sur celle-ci. Autrement dit, la solution optimale est toujours en un
sommet de la région réalisable (cfr figure 11.1).

x2

cTx
P∗

x1

Figure 11.1: Problème linéaire.

Dès que l’objectif ou les contraintes deviennent non linéaires, cette propriété
n’est plus vérifiée en général. Pire encore, on peut avoir un optimum local
différent de l’optimum global. Ce problème ne se produit cependant pas pour
les problèmes convexes. Nous verrons à la section 11.4 la notion de problèmes
convexes. Nous verrons ensuite à la section 11.5 les très importantes conditions
nécessaires d’optimalité : les conditions de Kuhn et Tucker. Nous verrons au
chapitre suivant les algorithmes de résolution.
Section 11.3. Différence avec la programmation linéaire 133

11.3 Différence avec la programmation linéaire

Les modèles non linéaires sont beaucoup plus difficiles à résoudre en général que
les modèles linéaires. Nous allons souligner par quelques exemples les différences
avec la programmation linéaire.
Tout d’abord, contrairement à la programmation linéaire où la solution optimale
est toujours située en un sommet de la région réalisable, on peut avoir une solution
optimale non extrême. Ceci est illustré par l’exemple suivant :

max z = 3 x1 + 5 x2


 x1 ≤ 4


s.c.q. 
9x21 + 5x22 ≤ 216


 x1 , x2 ≥ 0

Pour pouvoir en donner une représentation graphique, remarquons que

x21 x22
+ ≤1
(4, 9)2 (6, 5)2

est l’équation d’une surface bordée par une ellipse centrée en l’origine. On peut
voir à la figure 11.2 que la seule solution optimale n’est pas situé en un point
extrême de la région réalisable.

x2 x1 = 4

(2, 6)
6
3x 1 + 5x 2 = 36
4

2 4 x1

Figure 11.2: Solution non extrême

Mais la solution ne doit même pas être située sur la frontière de la région. Ainsi,
on peut avoir une solution optimale intérieure. Ceci est illustré par l’exemple
134 Chapitre 11. Les modèles non linéaires

suivant :
min z = (x1 − 3)2 + (x2 − 3)2


 x1 ≤ 4




 2x2 ≤ 12
s.c.q. 


 3x1 + 2x2 ≤ 18



x1 , x2 ≥ 0
dont la représentation graphique est donnée à la figure 11.3 où l’on peut voir que la
solution optimale est strictement intérieure. En effet, les courbes d’isovaleurs de
la fonction objectif forment des cercles concentriques et on a intérêt à se situer au
centre de ces cercles, c’est-à-dire au point (3,3), strictement intérieur à la région.

x2

8
z = 16
z=9
6
z=4
z=1
4
z=0
(3, 3)
2

0 2 4 6 x1

Figure 11.3: Solution intérieure

Mais la principale difficulté de la programmation non linéaire est que l’on peut
avoir des optimaux locaux qui ne sont pas globaux. Illustrons ceci sur l’exemple
suivant :
max z = 3x1 + 5x2


 x1 ≤ 4


s.c.q. 
8x1 − x21 + 14x2 − x22 ≤ 49


 x1 , x2 ≥ 0
Pour pouvoir tracer sa représentation graphique, remarquons que

(x1 − 4)2 + (x2 − 7)2 ≥ 16


Section 11.3. Différence avec la programmation linéaire 135

correspond au plan moins un cercle de rayon 4 centré en (4,7). La représentation


graphique est donnée à la figure 11.4 où l’on peut voir que (4,3) minimum local
non global !

x2
(0, 7)
z = 3x 1 + 5x 2 = 35
6

4 (4, 3)
z = 3x 1 + 5x 2 = 27
2

2 4 x1

Figure 11.4: Minimum local

C’est la une des plus grandes difficultés des problèmes non convexes : on
peut avoir des optimaux locaux qui ne sont pas globaux. Remarquez que le
problème peut également se produire si la fonction objectif que l’on minimise est
non convexe. Prenons l’exemple illustré à la figure 11.5 de la minimisation de la
fonction concave y = −x2 sur l’intervalle [−1, 2]. Au point x = −1, on a un
minimum qui n’est pas global.
y
-1 2 x

-1

-4

Figure 11.5: Minimum local non global

La détermination de tous les optimaux locaux est un problème très délicat en


général. En effet, lorsqu’un optimum local est atteint, dans quelle direction faut-il
continuer la recherche ? Cependant, il existe une classe de problèmes pour lesquels
ce problème ne se produit pas dans le sens que tous les optimums locaux sont
des optimum globaux. Il s’agit des problèmes convexes (voir section suivante).
Remarquez que les logiciels commerciaux fournissent toujours un minimum local.
136 Chapitre 11. Les modèles non linéaires

11.4 Les problèmes convexes

Définition 11.1 L’ensemble S ⊂ Rn est convexe, si et seulement si quels que


soient les deux points P et Q pris dans l’ensemble S, tout le segment [P, Q] est
contenu dans l’ensemble S.

Ce cas est illustré à la figure 11.6. Ces ensembles n’ont pas de partie rentrante à

Q P

P
Q

Figure 11.6: Ensembles convexes.

la différence des ensembles non convexes illustrés à la figure 11.7.

Q
Q
P

Figure 11.7: Ensembles non convexes.

Définition 11.2 Une fonction f est convexe si l’ensemble des points situé au dessus
de son graphe, encore appelé épigraphe :

S = {(x, y) ∈ Rn × R|y ≥ f (x)} .

est un ensemble convexe.

Ceci est illustré à la figure 11.8 pour l’exemple de la fonction x2 où l’on voit que
l’épigraphe est bien un ensemble convexe. La définition de fonction convexe se
ramène donc à celle d’ensemble convexe. Remarquez également que la définition
Section 11.4. Les problèmes convexes 137

f (x)

Figure 11.8: Exemple de fonction convexe

classique pour les fonctions de R dans R, à savoir que la corde est toujours située
au dessus du graphe se déduit directement du fait que l’épigraphe constitue un
ensemble convexe.

Définition 11.3 Une fonction f est concave si la fonction −f est convexe.

Un exemple de fonction concave est illustrée à la figure 11.9.


y

f (x)

Figure 11.9: Exemple de fonction concave

Maintenant que nous avons défini les notions d’ensemble convexe et de fonction
convexe, nous pouvons définir la notion de problème convexe :

Définition 11.4 Un programme mathématique est dit convexe s’il s’agit de la


minimisation d’une fonction convexe sur une région réalisable convexe, soit de
la maximisation d’une fonction concave sur une région réalisable convexe.

Comme exemple de problèmes convexes, on peut donc citer les problèmes


avec déséconomie d’échelle puisqu’il s’agit de la maximisation d’une fonction
concave. Et comme exemple de problèmes non convexes, on peut citer les
problèmes avec économie d’échelle puisqu’il s’agit de problèmes de maximisation
d’une fonction convexe.
138 Chapitre 11. Les modèles non linéaires

11.5 Conditions de Kuhn et Tucker

Nous considérons le problème de minimisation sous contraintes suivant :

min f (x)

hi (x) = 0, i = 1, 2, . . .m (11.1)
s.c.q.
gk (x) ≤ 0, k = 1, 2, . . .p

où f (x), hi (x), i = 1, 2, . . .m et gk (x), k = 1, 2, . . .p sont des fonctions de Rn


dans R.
Une notion importante en programmation non linéaire est celle de contraintes
actives :

Définition 11.5 Une inégalité gk (x) ≤ 0 est active en x si gk (x) = 0.

Il découle immédiatement de cette définition que hi (x) = 0 sont actives pour tout
i. Par exemple, à la figure 11.10, seule g2 est active en x∗ . Le concept de con-

x∗

g2 (x) = 0
g1 (x) = 0
région
réalisable

g3 (x) = 0

Figure 11.10: Concept de contraintes actives

trainte active est important car, tout comme en programmation linéaire, seules les
contraintes actives à l’optimum importent pour le problème. On pourrait résoudre
le problème sans les autres et obtenir la même solution : ce sont uniquement les
contraintes actives qui déterminent la solution optimale.
Pour écrire les conditions d’optimalité, on a besoin qu’une condition de régu-
larité soit satisfaite.
Section 11.5. Conditions de Kuhn et Tucker 139

Définition 11.6 Définition de point régulier des contraintes. Soit x∗ satisfaisant


les contraintes :
h(x∗ ) = 0, g(x∗ ) ≤ 0 (11.2)
Alors x∗ est dit régulier pour les contraintes (11.2) si les gradients des contraintes
actives sont linéairement indépendants.

Cette définition nécessite quelques rappels mathématiques concernant la notion


de gradient et la notion d’indépendance de vecteurs.

Définition 11.7 Notion de gradient. Soit f une fonction à valeurs réelles définie
sur Rn continûment différenciable en x. C’est-à-dire une fonction continue dont
les dérivées partielles premières sont également continues. On définit le gradient
comme étant le vecteur ligne constitué des dérivées partielles :
 
∂f (x) ∂f (x) ∂f (x)
∇f (x) = , ,... .
∂x1 ∂x2 ∂xn

∂f (x)
La dérivée partielle par rapport à la variable xj , notée , est obtenue en
∂xj
dérivant f en considérant que les autres variables que xj sont des constantes.

Illustrons cette notion par un exemple. Considérons la fonction suivante :

f (x1 , x2 ) = 2x21 + 2x1 x2 + x22 − 10x1 − 10x2

Les dérivées partielles par rapport à chacune des variables se calculent en consi-
dérant les autres variables comme des constantes :

∂f /∂x1 = 4x1 + 2x2 − 10


∂f /∂x2 = 2x1 + 2x2 − 10

De sorte que le gradient peut s’écrire ici comme suit :

∇f (x) = [4x1 + 2x2 − 10, 2x1 + 2x2 − 10]

Définition 11.8 Notion d’indépendance de vecteurs. On dit que m vecteurs sont


linéairement indépendants si aucun ne peut être exprimé comme une combinaison
linéaire des autres.

Ainsi, les vecteurs (1,0) et (0,1) de R2 sont linéairement indépendants car il


est impossible d’écrire l’un comme un multiple de l’autre. Par contre les vecteurs
140 Chapitre 11. Les modèles non linéaires

(2,3), (1,0) et (0,1) ne sont pas linéairement indépendants car on peut écrire (2,3)
comme une combinaison linéaire des deux autres. En effet :
(2, 3) = 2 × (1, 0) + 3 × (0, 1).

On peut alors écrire les très importantes conditions nécessaires suivantes :

Théorème 11.1 Conditions nécessaires de Kuhn-Tucker. Soit x∗ un minimum


local pour le problème
min f(x)
h(x) = 0, (11.3)
s.c.q.
g(x) ≤ 0
et supposons x∗ régulier pour les contraintes. Alors il existe des multiplicateurs
λ ∈ Rm et µ ∈ Rp tels que

m 
p
∇f (x∗ ) + λi ∇hi (x∗ ) + µk ∇gk (x∗ ) = 0 (11.4)
i=1 k=1
µk gk (x∗ ) = 0, ∀k = 1, . . .p (11.5)
µk ≥ 0, ∀k = 1, . . .p

Les conditions (11.5) sont les conditions de complémentarité disant que si


une contrainte n’est pas active, son multiplicateur µk doit être nul. Pour bien
comprendre la signification pratique des conditions (11.4), nous allons les récrire
au moyen de la fonction de Lagrange. La fonction de Lagrange est obtenue
en multipliant le membre de gauche de chaque contrainte d’égalité (hi (x) = 0)
par un multiplicateur λi , le membre de gauche de chaque contrainte d’inégalité
(gk (x) ≤ 0) par son multiplicateur µk et en additionnant le tout à la fonction
objectif :

m 
p
L(x, λ, µ) = f (x) + λi hi (x) + µk gk (x)
i=1 k=1
Remarquez que ce faisant, on passe d’un problème d’optimisation sous contraintes
à un problème d’optimisation sans contrainte. Les conditions d’optimalité pour
une fonction définie sur Rn sont simplement l’annulation de son gradient. On
remarque que précisément les conditions de Kuhn et Tucker (11.4) ne sont rien
d’autre que l’annulation du gradient par rapport à x du gradient du Lagrangien :
∇x L(x∗ , λ∗ , µ∗ ) = 0.

Illustrons ceci sur l’exemple suivant :


min 2x21 + 2x1 x2 + x22 − 10x1 − 10x2

x21 + x22 ≤ 5
s.c.q.
3x1 + x2 ≤ 6
Section 11.5. Conditions de Kuhn et Tucker 141

Le lagrangien s’écrit de la manière suivante :

L(x, λ, µ) = 2x21 + 2x1 x2 + x22 − 10x1 − 10x2


+µ1 (x21 + x22 − 5)
+µ2 (3x1 + x2 − 6)

Les conditions de Kuhn et Tucker s’écrivent ici simplement :

∂L/∂x1 = 4x1 + 2x2 − 10 + 2µ1 x1 + 3µ2 = 0


∂L/∂x2 = 2x1 + 2x2 − 10 + 2µ1 x2 + µ2 = 0
µ1 g1 = µ1 (x21 + x22 − 5) = 0
µ2 g2 = µ2 (3x1 + x2 − 6) = 0
µ1 ≥ 0
µ2 ≥ 0

Parfois, la résolution de ces conditions permet de déterminer le point optimum.


Ainsi, supposons la première contrainte active, et la seconde inactive (µ2 = 0).
Les conditions se réduisent à :

4x1 + 2x2 − 10 + 2µ1 x1 = 0


2x1 + 2x2 − 10 + 2µ1 x2 = 0
x21 + x22 = 5

dont la solution est donnée par :

x∗1 = 1,
x∗2 = 2,
µ1 = 1,
µ2 = 0.

Comme, de plus, µ1 ≥ 0, cette solution satisfait les conditions nécessaires de Kuhn


et Tucker.
Enfin, on peut montrer la proposition suivante.

Proposition 11.1 Si le problème est un problème convexe, les conditions néces-


saires sont aussi suffisantes pour montrer que l’on est à l’optimum.

Nous présenterons au chapitre suivant les algorithmes de résolution.


142 Chapitre 11. Les modèles non linéaires

11.6 Exercices

11.1. Conditions de Kuhn et Tucker. On considère la maximisation de la fonction


14x − x2 + 6y − y 2 + 7 sous les contraintes x + y ≤ 2 et x + 2y ≤ 3.

(a) Ecrire les conditions nécessaires d’optimalité de Kuhn et Tucker.


(b) Déterminer graphiquement la solution optimale.
(c) Vérifiez que cette solution satisfait les conditions de Kuhn et Tucker.

11.2. Minimisation des risques. Un épargnant dispose de 100 francs à investir


en bourse. Son portefeuille d’actions peut comporter trois titres dont on
veut déterminer les parts optimales x, y et z. Les rendements rX , rY et rZ
de ces trois titres sont des variables aléatoires. On suppose connues leurs
moyennes respectives : 30%, 20% et 8 %. Le risque V (x, y, z) est mesuré à
partir de la matrice de variance-covariance des rendements des trois titres :
  
3 1 −0.5 x
  
V (x, y, z) = (x, y, z)  1 2 −0.4  y 
−0.5 −0.4 1 z

On veut minimiser le risque V (x, y, z) tout en s’imposant un rendement


espéré du portefeuille au moins égal à 12 %.

(a) Ecrire le programme quadratique correspondant.


(b) Ecrire les conditions de Kuhn et Tucker pour ce problème et vérifier si
la solution (x; y; z) = (20, 091; 16, 712; 32, 877) les satisfait.
Chapitre 12

Résolution des problèmes non linéaires

12.1 Introduction

Au chapitre 11, nous avons introduit la notion de modèle non linéaire. En général,
il s’agit de résoudre le problème suivant :

max f (x)


 gi (x) ≤ 0, i = 1, . . .m
s.c.q.

 hk (x) = 0, k = 1, . . .p

où au moins une des fonctions est non linéaire. Nous avons également vu les
conditions de Kuhn et Tucker qui sont nécessairement vérifiées à l’optimum
d’un tel problème.
Nous allons maintenant voir deux cas particuliers de problèmes non linéaires
qui peuvent être résolus par recours itératifs à la programmation linéaire. Il s’agit
respectivement :

• Des problèmes séparables qui ne comportent que des fonctions non liné-
aires d’une seule variable. Comme nous allons le voir à la section 12.2, ces
problèmes peuvent être résolus en considérant une suite d’approximation
linéaires par morceaux des fonctions non linéaires d’une seule variable.

• Des problèmes à contraintes linéaires. Comme nous allons le voir à la


section 12.3, ces problèmes peuvent être résolus par la méthode de Franck-
Wolfe qui considèrent une suite d’approximations linéaires de la fonction
objectif non linéaire.

143
144 Chapitre 12. Résolution des problèmes non linéaires

12.2 Programmation séparable

Il existe une classe particulière de problèmes qui ne nécessitent pas le recours à des
logiciels d’optimisation non linéaire, car ils peuvent se résoudre par utilisations
répétées de l’algorithme du Simplexe. Ce sont les programmes séparables.

Définition 12.1 Une fonction est séparable si elle peut être exprimée comme la
somme de fonctions d’une seule variable :

n
f (x) = fj (xj )
j=1

Par exemple, la fonction suivante est séparable :


3
x21 + 2x2 + ex ,
puisque somme de fonctions d’une seule variable alors que la fonction suivante :
1
x 1 x2 + + x3
1 + x1
est non séparable à cause du terme x1 x2 .
Un exemple pratique, déjà cité au chapitre 11, d’application de la programma-
tion séparable est la relation entre le flot de gaz entre les nœuds i et j, noté fij , et
les pressions en ces points, pi et pj :

fij2 = Cij2 p2i − p2j
où Cij est un paramètre constant dépendant de la longueur et du diamètre du
gazoduc.
Les modèles séparables peuvent être résolus par une suite d’approximations
linéaires par morceaux. Plus précisément, on effectuera de la manière suivant.

Algorithme 12.1 Algorithme de résolution des problèmes séparables.

1. Chaque fonction non linéaire d’une seule variable est remplacée par une
approximation linéaire par morceaux.
2. Le problème approximé est alors résolu par une version spécialisée de
l’algorithme du Simplexe traitant les problèmes linéaires par morceaux.
3. Enfin, si la solution ainsi obtenue s’écarte trop des relations non linéaires
originales, on raffine la discrétisation autour de la solution optimale du
problème approximé et on itère.
Section 12.2. Programmation séparable 145

Voyons ceci sur un exemple. Supposons que l’on ait à résoudre le problème
convexe suivant :
min x21 − 4x1 − 2x2


 x1 + x2 ≤ 4

 2x + x ≤ 5
1 2 (12.1)
scq 

 −x 1 + 4x 2 ≥ 2

x1 , x2 ≥ 0
Il s’agit bien d’un problème convexe car on minimise x21 qui est une fonction
convexe. La première chose à faire est de se donner une borne inférieure et une
borne supérieure à la valeur que pourra prendre la variable non linéaire. Supposons
ici que 0 ≤ x1 ≤ 2, 5. On choisit alors un ensemble de valeurs de x1 où la fonction
est évaluée. Ici, ce sont les points 0, 1, 2 et 2,5. On calcule la valeur de la fonction
en ces points. Ceci est fait ci-dessous :
Point O x1 = 0 y = x21 =0
Point A x1 = 1 y = x21 =1
Point B x1 = 2 y = x21 =4
Point C x1 = 2, 5 y = x21 = 6, 25
On obtient les points O, A, B et C à la figure 12.1.
y = x2 (3)

C
6

4 B

1
A
(1)
O 1 x
(2) 2

Figure 12.1: Approximation par une fonction linéaire par morceaux

On construit alors une approximation linéaire par morceaux de la fonction en


reliant par des segments de droite les points d’évaluation de la fonction. On obtient
146 Chapitre 12. Résolution des problèmes non linéaires

la courbe linéaire par morceaux indiquée par OABC à la figure 12.1.


Nous allons maintenant voir comment résoudre le problème linéaire par mor-
ceaux. En effet, l’algorithme du Simplexe ne peut traiter directement ce genre de
problème. Il existe au moins deux méthodes pour résoudre le problème linéaire
par morceaux au moyen de l’algorithme du Simplexe, à savoir

• le recours à la notion d’épigraphe;

• le recours à la notion d’enveloppe convexe des sommets.

12.2.1 Résolution par la notion d’épigraphe

Lorsque le problème est convexe, on peut remplacer la fonction linéaire par mor-
ceaux liant x1 et y par son épigraphe comme fait à la figure 12.1. On peut vérifier
que l’épigraphe correspond aux trois inégalités suivantes :

y ≥ x1 (1)
y ≥ 3x1 − 2 (2)
y ≥ 4, 5x1 − 5 (3)

Ce qui peut encore s’écrire comme suit :

x1 − y ≤ 0
3x1 − y ≤ 2
4, 5x1 − y ≤ 5

Il suffit alors de minimiser y. En effet, en minimisant y avec la contrainte que


(x1 , y) appartienne à l’épigraphe, on se retrouvera donc bien sur la limite inférieure
de l’épigraphe, donc sur la la courbe linéaire par morceaux indiquée par OABC à
la figure 12.1. Le problème original est donc remplacé par le suivant :

min y− 4x1 − 2x2




 x1 +x2 ≤ 4





2x1 +x2 ≤ 5


 −x1 +4x2
 ≥ 2
scq  x1 −y ≤ 0



 3x1 −y ≤ 2


 −y ≤ 5
 4, 5x1


 x1 , x2 ≥ 0
Section 12.2. Programmation séparable 147

12.2.2 Résolution par la notion d’enveloppe convexe

Une seconde solution est d’imposer que (x1 , y) appartiennent à l’ensemble convexe
des points extrêmes du polygone OABC comme illustré à la figure 12.2. Pour cela,

y = x2

C
6

4 B

1
A

O
1 2 x

Figure 12.2: Approximation par une fonction linéaire par morceaux

on a écrire que (x1 , y) est une combinaison convexe des sommets du polygone.
Une combinaison convexe est une combinaison linéaire dont tous les coefficients
sont positifs et dont la somme est égale à un.
On note par λi le poids attribué à chacun des points de cassure O, A, B et C de
la fonction approximée. On traduit alors le fait d’appartenir à l’enveloppe convexe
de ces quatre sommets par les relations suivantes liant x1 et y :

x1 = 0λ1 +1λ2 +2λ3 +2, 5λ4


y = 0λ1 +1λ2 +4λ3 +6, 25λ4 (12.2)
1 = λ1 +λ2 +λ3 +λ4

Si on veut se restreindre à être sur la courbe linéaire par morceaux, il faut imposer
la restriction supplémentaire que :

au plus deux λi adjacents sont non nuls. (12.3)

Les relations (12.2) traduisent le fait que le point (x1 , y) est combinaison convexe
des points extrêmes O, A, B et C alors que la condition supplémentaire (12.3)
148 Chapitre 12. Résolution des problèmes non linéaires

impose en plus que l’on se trouve sur un des segments OA, AB ou BC puisque
l’on est une combinaison convexes des deux points extrêmes adjacents.
Voyons maintenant comment résoudre le problème approximé. Remarquez
à nouveau que la fonction illustrée par la la courbe linéaire par morceaux OABC
de la figure 12.2 est une fonction non linéaire. Elle ne peut donc directement être
traitée par l’algorithme du Simplexe.
Ainsi le programme convexe (12.1) est approximé par :
min y− 4x1 − 2x2


 x1 +x2 ≤ 4





2x1 +x2 ≤ 5



 −x1 +4x2 ≥ 2
scq  −x1 +λ2 + 2λ3 + 2, 5λ4 = 0



 −y +λ2 + 4λ3 + 6, 25λ4 = 0



 λ1 + λ2 + λ3 + λ4 = 1


 y, x1 , x 2 , λ 1 , λ2 , λ3 , λ4 ≥ 0

Remarquons que la condition (12.3) sera automatiquement vérifiée pour un


programme convexe. En effet, supposons que la répartition des poids ne vérifie
pas la condition, par exemple :
λ1 = 0, 5 λ2 = 0, 25 λ3 = 0, 25
qui correspond au point :
x = 0, 75 et y = 1, 25
Comme on minimise y, on peut faire mieux en prenant :
x = 0, 75 et y = 0, 75,
c’est-à-dire précisément en se trouvant sur la limite inférieure de l’ensemble
convexe OABC. On en conclut que pour les problèmes séparables convexes,
on s’est ramené à la résolution d’un problème linéaire pur !
Pour les problèmes séparables non convexes, il faudra imposer explicitement
la condition (12.3). Par exemple, si l’on veut minimiser la fonction y = x3 qui
est convexe pour les x > 0 et concave pour les x < 0, Il faudra avoir recours à
une extension de l’algorithme du Simplexe qui impose explicitement qu’au plus
deux λi consécutifs sont non nuls (voir De Wolf et Smeers [5]). On obtiendra ainsi
l’optimum global pour des problèmes convexes et un optimum local pour des
problèmes non convexes.
Quelle que soit la méthode utilisée pour résoudre le problème approximé, on
introduit une erreur par rapport la vraie fonction. Ainsi pour x1 = 1, 5, la fonction
vraie x21 vaut 2, 25 alors que son approximation linéaire par morceaux fournit
comme valeur 2, 5. D’où la nécessité de raffiner la discrétisation et d’itérer.
Section 12.3. La méthode de Franck-Wolfe 149

12.3 La méthode de Franck-Wolfe

Nous allons voir un type particulier d’algorithme qui permet de résoudre les
problèmes d’optimisation non linéaires convexes. Il est du type séquence d’ap-
proximations linéaires. Il s’agit de l’algorithme de Franck-Wolfe.
Son principe est particulièrement simple dans le cas de problèmes avec con-
traintes linéaires. En effet, cette procédure combine des approximations linéaires
de l’objectif pour trouver la direction de recherche avec une recherche unidimen-
sionnelle pour trouver le pas suivant cette direction.
Etant donnée la solution initiale réalisable x0 , la fonction objectif du problème
suivant
max f(x)
Ax ≤ b (12.4)
scq
x ≥ 0
est approximé par son développement de Taylor d’ordre 1 :

n
∂f (x0 )
f (x) ≈ f (x ) +
0
(xj − x0j )
j=1 ∂xj

Si on substitue dans (12.4), à f (x) son approximation donnée, à une constante


près, par g(x) définie ci-dessous :

n
g(x) = cj xj
j=1

avec
∂f (x0 )
cj = ,
∂xj
on obtient un problème linéaire soluble par l’algorithme du Simplexe. Notons x1LP
sa solution optimale de ce premier problème linéaire.
Notez que l’objectif non linéaire est de moins en moins bien approximé par son
approximation linéaire lorsque x s’écarte de x0 mais que l’objectif doit s’accroı̂tre,
du moins au début, le long du segment de x0 à x1LP . Aussi va-t-on choisir le point
qui maximise f (x) le long de ce segment en résolvant le problème unidimensionnel
suivant :
max h(α) = f (x0 + α(x1LP − x0 ))
0≤α≤1

On vérifie que α = 0 correspond à rester en x0 et α = 1 correspond à aller en x1LP .


Notons α∗ , l’optimum. Le point suivant :

x1 = x0 + α∗ (x1LP − x0 )
150 Chapitre 12. Résolution des problèmes non linéaires

deviendra le point initial pour l’itération suivante.


Appliquons ceci sur l’exemple suivant :
max f(x) = 5x1 − x21 + 8x2 − 2x22
3x1 + 2x2 ≤ 6
scq
x1 , x2 ≥ 0

Calculons le gradient :
∂f
= 5 − 2x1
∂x1
∂f
= 8 − 4x2
∂x2
Il est clair que x = (0, 0) fournit une solution réalisable initiale :

x0 = (0, 0)

Donc les coefficients du gradient sont

c1 = 5
c2 = 8

On peut résoudre graphiquement le problème linéaire suivant :

 5x1 + 8x2
max z =
3x1 + 2x2 ≤ 6
scq
x1 , x2 ≥ 0

A la figure 12.3, on obtient P1 , la solution du premier problème linéaire :

x1LP = (0, 3)

Le segment entre x0 et x1LP a comme coordonnées :

x(α) = x0 + α(x1LP − x0 ) = (0, 0) + α[(0, 3) − (0, 0)]


= (0, 3α)

On va donc maximiser la fonction

h(α) = f (x(α)) = 24α − 18α2

sous les contraintes que 0 ≤ α ≤ 1. La maximisation sans contrainte conduit à


annuler la dérivée première :

24 − 36α = 0
Section 12.3. La méthode de Franck-Wolfe 151

x2
P1
3

P2
P0
1 2 x1

Figure 12.3: Méthode de Franck Wolfe

soit α = 2/3. On obtient donc le point en fin d’itération 1 :

x1 = (0, 0) + 2/3[(0, 3) − (0, 0)] = (0, 2)

Procédons à la deuxième itération :

c1 = 5 − 2 × 0 = 5
c2 = 8 − 4 × 2 = 0

On peut résoudre graphiquement le problème linéaire suivant :

max z = 5x1
3x1 + 2x2 ≤ 6
s.c.q.
x1 , x2 ≥ 0

A la figure 12.3, on obtient P2 , la solution du deuxième problème linéaire :

x2LP = (2, 0)

Le segment entre x1 et x2LP a comme coordonnées :

x1 + α(x2LP − x1 ) = (0, 2) + α[(2, 0) − (0, 2)]


= (2α, 2 − 2α)

de sorte que l’on maximise

max h(α) = 8 + 10α − 12α2


152 Chapitre 12. Résolution des problèmes non linéaires

sous les contraintes que 0 ≤ α ≤ 1. La maximisation sans contrainte conduit à


annuler la dérivée première :
10 − 24α = 0
soit α = 5/12. On obtient donc le point en fin d’itération 2 :
x2 = (0, 2) + 5/12[(2, 0) − (0, 2)] = (5/6, 7/6)

On peut résumer l’algorithme de Franck-Wolfe comme suit.

Algorithme 12.2 Algorithme de Franck-Wolfe.

1. Initialisation. Soit x0 une solution initiale réalisable. Posons k = 1.


2. Itération k. Pour j = 1, 2, ...n, évaluer
∂f (xk−1 )
cj =
∂xj

3. Calcul de la direction. Trouver, par application de l’algorithme du Sim-


plexe, xkLP la solution optimale du problème linéaire suivant :

n
max g(x) = cj xj
 j=1
Ax ≤ b
scq
x ≥ 0

4. Calcul du pas. Trouvez αk la solution optimale de


 
max f xk−1 + α(xkLP − xk−1 )
scq 0 ≤ α ≤ 1
et mettre
xk = xk−1 + αk (xkLP − xk−1 )

5. Critère d’arrêt. Si xk−1 et xk sont suffisamment proches, stop. Sinon retour


en 2.

Reste à résoudre en général, le problème de la maximisation de la fonction


d’une variable h(α). Si on peut évaluer une fonction f (x) d’une seule variable
ainsi que sa dérivée première f  (x) en tout point, on peut se baser sur la procédure
de recherche unidimensionnelle illustrée à la figure 12.4
Soit [x, x̄] l’intervalle de recherche. Chaque itération consiste en les points
suivants :
Section 12.3. La méthode de Franck-Wolfe 153

f (x) f (x)

x x x x x x x x

Figure 12.4: Recherche unidimensionnelle.

1. Calculer
x + x̄
x =
2
  
et évaluer f (x ), la dérivée de f en x .

2. Si f  (x ) ≥ 0, mettre x = x .

3. Si f  (x ) < 0, mettre x̄ = x . Retour en 1.

Illustrons ceci sur un exemple. Soit la fonction d’une seule variable suivante :

f (x) = 12x − 3x4 − 2x6

Calculons
f  (x) = 12 − 12x3 − 12x5 = 12(1 − x3 − x5 )
Les 4 premières itérations sont illustrées au tableau 12.1.

k f x x̄ x f (x )
0 0, 00 2, 000 1, 0000 7, 0000
1 −12, 00 0, 00 1, 000 0, 5000 5, 7812
2 10, 12 0, 50 1, 000 0, 7500 7, 6948
3 4, 09 0, 75 1, 000 0, 8750 7, 8439
4 −2, 19 0, 75 0, 875 0, 8125 7, 8672

Tableau 12.1: Quelques itérations de la recherche unidimensionnelle.


154 Chapitre 12. Résolution des problèmes non linéaires

12.4 Exercices

12.1. Programmation séparable. Résoudre le problème non linéaire séparable


suivant en appliquant la technique d’approximations linéaires par morceaux :

Min x21 − 4x1 − 2x2




 x1 + x2 ≤ 4

 2x1 + x2 ≤ 5
Scq 

 −x1 + 4x2 ≥ 2

x1 , x2 ≥ 0

12.2. Méthode de Franck-Wolfe. Faire la troisième itération de la méthode de


Franck-Wolfe pour l’exemple traité à la section 12.3.

12.3. Recherche unidimensionnelle. Faire trois itérations de plus pour l’exemple


de recherche unidimensionnelle traité à la section 12.3 et en déduire par
extrapolation la solution optimale du problème non linéaire.
Bibliographie

[1] Ravindra AHUJA, Thomas MAGNANTI et James ORLIN, Network Flows,


Prentice Hall, Englewood Cliffs, 1993.

[2] BAGLIN Gérard, Olivier BRUEL, Alain GARREAU, Michel GREIF et


Christian VAN DELFT, Management Industriel et Logistique, Economica,
Paris, 1996.

[3] BROOKE Anthony, David KENDRICK et Alexander MEERAUS, GAMS


User’s guide Release 2.25, The Scientific Press, San Francisco, 1992.

[4] CHVÁTAL Vas̆ek, Linear Programming, Freeman and Company, 1983.

[5] DE WOLF Daniel, Olivier JANSSENS dE BISTHOVEN et Yves SMEERS,


The Simplex algorithm extended to piecewise linearly constrained problems,
CORE DISCUSSION Paper 9119, Université Catholique de Louvain, 1991.

[6] EXCEL, Guide de l’utilisateur, Microsoft, 1992.

[7] GIARD Vincent, Gestion de la production et des flux, Economica, Paris,


2003.

[8] Christelle GUERET, Christian PRINS, Marc SEVAUX, Programmation


linéaire, Eyrolles, Paris, 2000.

[9] GUERRIEN Bernard, Initiation aux mathématiques, Economica, 1991.

[10] F.S. HILLIER et G.S. LIEBERMAN, Introduction to Operations Research,


6ème édition, Mac Graw-Hill International Editions, Singapour, 1995.

[11] F.S. HILLIER, M.S. HILLIER et G.S. LIEBERMAN, Introduction to Mana-


gement Sciences, 1ère édition, Mac Graw-Hill International Editions, Boston,
2000.

[12] LACAZE Dominique, Optimisation appliquée à la gestion et à l’économie,


Economica, 1990.

155
156 Bibliographie

[13] D. G. LUENBERGER, Linear and NonlinearProgramming, Addison-Wesley,


1984.

[14] NEMHAUSER, G.L. et L.A. WOLSEY, Integer and Combinatorial Optimi-


zation, Wiley, New York, 1988.

[15] Y. NORBERT, R. OUELLET et R. PARENT, La recherche opérationnelle,


Gaëtan Morin Editeur, Montréal-Paris, 1995.

[16] SIMMONARD Michel, La programmation linéaire, Dunod 1972.

[17] M.P. WILLIAMS, Model building in Mathematical Programming, John Wi-


ley, 1990.

[18] M.P. WILLIAMS, Model solving in Mathematical Programming, John Wiley,


1992.

[19] XPRESS-MP, User Guide and Reference Manual, Release 10, Dash Asso-
ciate, 1997.

You might also like