Professional Documents
Culture Documents
Maı̂trise AES
Recherche opérationnelle
Daniel DE WOLF
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
4 Table des matières
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
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.
• 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.
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.
2. formulation de l’objectif;
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.
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
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
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 :
x2
(4)
10
8 (1)
(2)
6
2 (3)
(5)
0 2 4 6 8 x1
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
z = k.
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
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
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.
max z = cT x,
Ax ≤ b, (1.2)
s.c.q.
x ≥ .
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.
Parmi ces solutions réalisables, celles qui maximisent l’objectif sont appelées
solutions optimales.
1.6 Exercices
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) 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.
max z = 3 x1 + 5 x2
x1
≤ 4
2x2 ≤ 12
(2.1)
s.c.q.
3x1 + 2x2 ≤ 18
x1 ≥ 0
x2 ≥ 0
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
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 ≥ .
Cette quantité représente un déficit ou un écart. Comme cet écart peut varier, on
l’appelle variable d’écart.
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,
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 :
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é.
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.
ne sont pas adjacentes puisqu’elle diffèrent par plus d’une variable hors base. On
peut le vérifier à la figure 2.1.
(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
x3 = 4
x4 = 12
x5 = 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
z = 3x1 + 5x2 .
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
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
(x1 , x2 , x3 , x4 , x5 ) = (0, 6, 4, 0, 6)
z = 30.
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
(2, 6, 2, 0, 0)
x∗1 = 2
x∗2 = 6
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.
Pas 0. Initialisations.
3.1 Introduction
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
Définition 3.1 Un tableau Simplexe est constitué des coefficients des équations
algébriques sans le nom des variables. On aura donc :
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.
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
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.
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
x1 = 4 + x2
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 :
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.
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
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
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
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
(x1 , x2 , x3 , x4 , x5 ) = (2, 6, 2, 0, 0)
z = 36.
Section 3.3. Tableaux Simplexe et pivotage 39
x∗1 = 2
x∗2 = 6
z ∗ = 36.
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
3.5 Exercices
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.
4.1 Introduction
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.
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.
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
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
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.
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
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
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.
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
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
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
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
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
max z = 2x1 + x2
x1 −2x2 +x3 = 2,
s.c.q. −2x1 +x2 +x4 = 2,
x1 , x2 , x3 , x4 ≥ 0.
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
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
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.
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
4.6 Exercices
max z = 3x1 + x2
x1 −x2 ≤ −1
−x
1 −x2 ≤ −3
s.c.q.
2x 1 +x2 ≤ 4
x1 , x2 ≥ 0.
max z = 3x1 + x2
x1 −x2 ≤ −1
−x
1 −x2 ≤ −3
s.c.q.
≤
2x1
+x2 2
x1 , x2 ≥ 0.
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
57
58 Chapitre 5. Analyse postoptimale.
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
z ∗ = 37, 5
z ∗ = 37
∆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
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, +∞].
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.
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
x∗1 = 2 et x∗2 = 6.
z = 3x1 + 5x2
2x2 = 12,
x2
10
8
(2, 6)
6
z = 4x1 + 5x2 = 38
4 z = 3x1 + 5x2 = 36
0 2 4 6 8 10 12 x1
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 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 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
Minimiser 0x1 + x2
s.c.q. 3x1 + 4x2 ≥ 9, (1)
5x1 + 2x2 ≤ 8, (2)
3x1 − x2 ≤ 0, (3)
x1 , x2 ≥ 0.
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.
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
6.1 Introduction
69
70 Chapitre 6. La programmation en nombres entiers.
c(x)
x
Figure 6.1: Représentation d’un coût fixe
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.
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.
y1 + y2 + y3 + y4 = 1 (6.7)
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.
x2
P0
5
P1 P2
P3
4
P5
0
0 1 2 3 4 5 6 7 8 x1
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.
soit x1 ≤ 4 soit x1 ≥ 5
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
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.
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.
6.4 Exercices
81
Chapitre 7
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 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
Fournisseur 1 2 3
Capacité 135 56 93
Client 1 2 3 4
Demande 62 83 39 91
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
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
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
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
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
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 :
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
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
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
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
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).
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
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
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
8.1 Introduction
95
96 Chapitre 8. Résolution du problème de transport simple
di dj
c ij
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
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
q ∈ S|dq = min dj
j∈S
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 :
i 1 2 3 4
di 0 2 2 5
pi − 1 1 2
i 1 2 3 4
di 0 2 2 3
pi − 1 1 3
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
1 1
s d
2
E 2 S
m n
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 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
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 :
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 :
Heuristique de 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.
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
Poitiers Melun
Lyon -1 (x 130) +1 (x 139)
Lille +1 (x 166) -1 (x 66)
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)
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.
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
u1 + v2 = 130
u2 + v1 = 279
u2 + v2 = 244
u2 + v4 = 307
u3 + v2 = 166
u3 + v3 = 66
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) :
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
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.
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.
r ji = fij
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 ).
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
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}
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
et on calcule le flux maximum que l’on peut faire passer le long du chemin par
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
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
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
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
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
f12 = 0+2=2
f13 = 2+0=2
f23 = 0+2=2
f24 = 0+0=0
f34 = 2+2=4
1 1
2 2
3 3
4 4
Initialement, on met à zéro tous les flux ainsi que les fonctions potentielles :
Itération 1 :
On sélectionne k = 0 et l =9 et on calcule les plus courtes distances à k :
δ = min{4, 4, 1, 1, 1} = 1
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)
δ = min{3, 3, 1, 1, 1} = 1
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)
δ = min{2, 2, 1, 1, 1, 1, 1} = 1
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
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
Age (mois) 0 1 2 3 4 5 6 7 8 9
Efficacité (%) 100 99 97 94 88 83 81 78 76 75
Mois 1 2 3 4 5
Besoins 3 2 4 1 2
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.
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.
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
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.
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
Etape Etape
t t+1
Décision stratégique
Etat : st s t+1
xt
f (s t, xt ) ft∗(s t+1 )
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
On note par x∗t la politique optimale pour l’étape courante de sorte que l’on a que :
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).
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.
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.
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
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
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 :
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
10.5 Exercices
11.1 Introduction
max f (x)
gi (x) ≤ 0, i = 1, . . .m
s.c.q.
hk (x) = 0, k = 1, . . .p
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
x2
cTx
P∗
x1
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
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
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
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
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
x2
(0, 7)
z = 3x 1 + 5x 2 = 35
6
4 (4, 3)
z = 3x 1 + 5x 2 = 27
2
2 4 x1
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
Ce cas est illustré à la figure 11.6. Ces ensembles n’ont pas de partie rentrante à
Q P
P
Q
Q
Q
P
Définition 11.2 Une fonction f est convexe si l’ensemble des points situé au dessus
de son graphe, encore appelé épigraphe :
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)
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.
f (x)
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 :
min f (x)
hi (x) = 0, i = 1, 2, . . .m (11.1)
s.c.q.
gk (x) ≤ 0, k = 1, 2, . . .p
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
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.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.
Les dérivées partielles par rapport à chacune des variables se calculent en consi-
dérant les autres variables comme des constantes :
(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).
x∗1 = 1,
x∗2 = 2,
µ1 = 1,
µ2 = 0.
11.6 Exercices
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.
143
144 Chapitre 12. Résolution des problèmes non linéaires
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
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
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)
x1 − y ≤ 0
3x1 − y ≤ 2
4, 5x1 − y ≤ 5
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
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 :
Si on veut se restreindre à être sur la courbe linéaire par morceaux, il faut imposer
la restriction supplémentaire que :
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
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
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
x1 = x0 + α∗ (x1LP − x0 )
150 Chapitre 12. Résolution des problèmes non linéaires
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)
c1 = 5
c2 = 8
5x1 + 8x2
max z =
3x1 + 2x2 ≤ 6
scq
x1 , x2 ≥ 0
x1LP = (0, 3)
24 − 36α = 0
Section 12.3. La méthode de Franck-Wolfe 151
x2
P1
3
P2
P0
1 2 x1
c1 = 5 − 2 × 0 = 5
c2 = 8 − 4 × 2 = 0
max z = 5x1
3x1 + 2x2 ≤ 6
s.c.q.
x1 , x2 ≥ 0
x2LP = (2, 0)
f (x) f (x)
x x x x x x x x
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 .
Illustrons ceci sur un exemple. Soit la fonction d’une seule variable suivante :
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
12.4 Exercices
155
156 Bibliographie
[19] XPRESS-MP, User Guide and Reference Manual, Release 10, Dash Asso-
ciate, 1997.