001-Syllabus Exercices
001-Syllabus Exercices
001-Syllabus Exercices
Recherche Opérationnelle
13UMQ20
ICHEC
Année académique 2017-2018
Table des matières
1 Modélisation 5
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Notion de modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Construction d'un modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Dénitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 Un autre exemple, le Knapsack problem . . . . . . . . . . . . . . . . . . . . . . 8
1.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 Programmation linéaire 13
2.1 Rappels sur les fonctions linéaires . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Dénitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Formes de programme linéaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 Résolution graphique en deux dimensions (Rappels) . . . . . . . . . . . . . . . . 17
2.5 Déduction d'une résolution non graphique . . . . . . . . . . . . . . . . . . . . . 20
2.6 Vers l'algorithme du simplexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.7 Les deux phases de l'algorithme du simplexe . . . . . . . . . . . . . . . . . . . . 24
2.7.1 Solutions de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.7.2 La Phase 2 de Progression . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.7.3 Cas particuliers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.7.4 La Phase 1 d'Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.8 Dualité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.8.1 Motivation du problème dual : la recherche d'une borne supérieure sur la
valeur optimale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.8.2 Problème dual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.8.3 Propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.8.4 Construction du dual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.8.5 Interprétation économique des variables duales . . . . . . . . . . . . . . . 38
2.8.6 Les écarts complémentaires . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.9 Rappel : Résolutions de systèmes d'équations linéaires . . . . . . . . . . . . . . . 41
2.9.1 Systèmes linéaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.9.2 Méthode des combinaisons linéaires d'équations . . . . . . . . . . . . . . 42
2.9.3 Erreurs à éviter ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.9.4 Forme échelonnée d'un système . . . . . . . . . . . . . . . . . . . . . . . 44
2.9.5 La méthode d'élimination de Gauÿ . . . . . . . . . . . . . . . . . . . . . 44
2.9.6 Implémentation de la méthode de Gauÿ . . . . . . . . . . . . . . . . . . . 45
2.10 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
1
3 La gestion des stocks 59
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.2 Rappels sur l'optimisation des fonctions d'une variable . . . . . . . . . . . . . . 60
3.3 Les données des problèmes de gestion des stocks . . . . . . . . . . . . . . . . . . 65
3.4 Le modèle classique de Wilson . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.5 Le "Manufacturing Model" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.6 Un modèle avec rabais lié à la quantité . . . . . . . . . . . . . . . . . . . . . . . 72
3.7 Modèle avec demande aléatoire . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.7.1 Rappels statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.7.2 Modèle simple de réapprovisionnement périodique . . . . . . . . . . . . . 78
3.7.3 Stock de sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.8 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
2
Introduction
Comme on peut le constater via ces questions, le champ des applications est très vaste !
Si on va se renseigner sur wikipédia, on apprend que la ROPE peut être dénie comme l'en-
semble des méthodes, des outils et des techniques qui visent à déterminer une meilleure façon
d'opérer des choix ou d'arriver au meilleur résultat possible pour atteindre un objectif visé.
Elle fait partie des aides à la décision dans la mesure où elle propose des modèles conceptuels
en vue d'analyser et de maîtriser des situations complexes pour permettre aux décideurs de
comprendre et d'évaluer les enjeux et de faire des choix plus ecaces.
0.2 Historique
Dès le 17ème siècle, certains mathématiciens ont tenté de résoudre des problèmes de décision.
Mais c'est pendant la Seconde Guerre Mondiale que cette branche commença à être activement
étudiée dans le but de résoudre des problèmes tels que l'amélioration (optimisation) du trans-
port des vivres, l'implémentation optimale des radars,...
3
dépassé le cadre militaire, et les techniques de ROPE sont utilisées aujourd'hui, entre autres,
pour :
gérer les soins de santé dans les hôpitaux,
organiser les services policiers ou ambulanciers,
planier des systèmes de livraison,
gérer la production, les stocks, la distribution de produits,
concevoir des systèmes de communication,
concevoir des algorithmes utilisés dans des GPS,
établir des horaires,
choisir des politiques d'économie,
···
A l'heure actuelle, la plupart des sociétés possèdent un département de ROPE en leur sein an
d'optimiser leur fonctionnement.
1. La modélisation
2. La programmation linéaire
3. La gestion de stock
Le but de ce cours est de vous donner les outils nécessaires de base à la ROPE an que vous
soyez capables, en cas de besoin (dans votre mémoire ou parcours professionnel), d'aller chercher
vous-même les réponses aux questions d'optimisation que vous vous poserez.
4
Chapitre 1
Modélisation
1.1 Introduction
Les problèmes traités en ROPE (et donc, dans ce cours) vont au-delà des aspects mathéma-
tiques. Comme vu dans le chapitre d'introduction, le champ des applications des techniques
ROPE est très vaste. On peut résumer les diérentes étapes qu'il convient de franchir an
de, partant d'une situation à optimiser (quel que soit le contexte), parvenir à une solution
satisfaisante de la façon suivante :
5
1.2 Notion de modèles
Dénition 1.2.1 Un modèle est une construction qui a pour but de représenter ou reproduire
les caractéristiques et le fonctionnement du système étudié.
L'utilisation d'un modèle est poussée par le fait que l'expérimentation peut être envisageable.
Ces modèles peuvent être concrets (via des maquettes) ou abstraits. Nous nous intéressons à
cette deuxième catégorie.
Exemple : Deux implantations d'une même ranerie distillent du pétrole venant de deux
sources diérentes : l'une en Arabie Saoudite, et l'autre au Vénézuéla.
Chaque baril provenant d'Arabie Saoudite rapporte 0, 3 baril d'essence, 0, 4 baril de kérosène et
0, 2 baril de lubriant. Chaque baril provenant du Vénézuéla rapporte 0, 4 baril d'essence, 0, 2
baril de kérosène et 0, 3 baril de lubriant. Dans chaque baril, les 10% restant sont perdus.
La ranerie peut acheter au plus 9000 barils d'Arabie Saoudite par jour au prix de 20 dollars
l'unité, et au plus 6000 barils du Vénézuéla par jour au prix de 15 dollars l'unité.
An de satisfaire les demandes, la ranerie doit produire chaque jour au moins 2000 barils
d'essence, 1500 de kérosène et 500 de lubriant.
Combien de barils d'Arabie Saoudite et du Vénézuéla la ranerie doit-elle distiller an de mi-
nimiser ses coûts ?
Dans l'exemple, les variables apparaissent clairement dans la question : il s'agit du nombre
de barils saoudiens et vénézuéliens ranés par jour. On identie donc deux variables :
6
Il faut garder en tête que les variables représentent des nombres ! ! !
x1 6 9 brut saoudien
x2 6 6 brut vénézuélien
Attention, ne pas oublier la contrainte implicite, liée à la nature des variables ! ! ! Dans
le cas de l'exemple, on ajoute la contrainte
x1 , x2 ∈ Z+
7
min 20 000x1 + 15 000x2
scq 0, 3x1 + 0, 4x2 > 2
0, 4x1 + 0, 2x2 > 1, 5
0, 2x1 + 0, 3x2 > 0, 5
x1 6 9
x2 6 6
x1 , x2 > 0
1.4 Dénitions
Dénition 1.4.1 Une solution réalisable est une solution qui satisfait toutes les conditions
du problème.
Dénition 1.4.2 Une solution optimale est une solution réalisable dont la valeur de la fonc-
tion objectif atteint une valeur au moins aussi bonne (c'est-à-dire aussi grande si on a un pro-
blème de maximisation, aussi petite si c'est un problème de minimisation) que toutes les autres
solutions réalisables.
Cas particuliers :
Un modèle peut avoir plusieurs solutions optimales diérentes.
Un modèle peut n'avoir aucune solution réalisable (on dit que le problème est non-
réalisable).
Exemple :
max x1 + x2
scq x1 + x 2 > 3
x1 + x 2 6 1
x1 , x2 > 0
Un modèle peut avoir des solutions réalisables qui permettent d'améliorer la fonction
objectif à l'inni (on dit que le problème est non-borné).
Exemple :
max x1 + x2
scq x1 + x2 > 3
x1 , x2 > 0
8
possible ?
1. Les variables. Ici, il s'agit, pour chaque objet i (i = 1, · · · , n), de décider si on le prend
dans notre sac-à-dos ou non. On introduit donc une variable xi pour chacun des n objets
qui va encoder notre choix :
1 si l'objet i va dans le sac-à-dos
xi :=
0 sinon
n
X
w i xi 6 W
i=1
les contraintes liées à la nature des variables. Ici, nos variables doivent valoir 0 ou 1.
On écrit les contraintes
xi ∈ {0, 1} , ∀i = 1, · · · , n
3. L'objectif. On veut maximiser le prot. Comme pour la contrainte de capacité, on ne
veut tenir compte du prot que des objets sélectionnés dans le sac, ce qui est donné par
p 1 x1 + p 2 x2 + · · · + p n xn . L'objectif est donc
n
X
max p i xi
i=1
.
max P ni=1 pi xi
P
n
scq i=1 wi xi 6 W
xi ∈ {0, 1} , ∀i = 1, · · · , n
9
1.6 Exercices
Rappels sur les symbôles de sommation
A = {ai | i = 1, · · · , 6} = {1, 1, 0, 4, 3, 3}
et
B = {bi | i = 1, · · · , 6} = {0, 1, 2, 2, 1, 3}
Ecrire et calculer les sommes suivantes
P6
a) ai
Pi=1
3
b) ai
Pi=1
6
c) ai
Pi=4
6
d) 2ai
Pi=1
4
e) (ai + bi )
Pi=1
4 P4
f) i=1 ai + i=1 bi
P6
g) (2ai + 3bi )
Pi=1
6 2
h) i=1 ai
P3
i) (ai + 5)
Pi=1
3
j) ai + 5
Pi=1
6
k) ( i=1 ai )2
P6
l) kk∈R
P4i=1
m) i=1 ai (ai − 1)
Modélisation
1. Un modèle d'optimisation doit décider comment allouer les ores de p sources s1 , · · · , sp
an de satisfaire les q demandes r1 , · · · , rq de ses clients. En utilisant les variables de
décisions suivantes
10
b) La quantité allouée depuis chaque source i ne peut excéder l'ore disponible de la
source i.
c) La quantité allouée au client n doit être égale à la demande du client n.
d) La quantité allouée à chaque client j doit être égale à la demande du client j.
3. Vous devez sélectionner des projets parmi une collection de 16 projets d'investissement.
En utilisant les variables de décisions suivantes
1 si le projet j est sélectionné
wj =
0 sinon
c) Soit le projet 4 ou soit le projet 9 doivent être sélectionnés, mais pas les deux.
e) Vous devez sélectionner les projets 1 et 5 tous les deux, ou aucun des deux.
f ) Vous devez sélectionner soit au moins un des projets 1, 2 ou 3, soit au moins deux des
projets 2, 4, 5 ou 6.
5. Un organisateur d'une soirée cocktails dispose des alcools suivants : 1.2 litres de whisky,
1.8 litres de vodka, 1.6 litres de vermouth rouge, 0, 6 litre de cognac, 0, 5 litre de liqueur
et 0, 5 litre de vermouth blanc. Il veut orir 5 cocktails diérents, à savoir :
11
6. Supposons que m jobs doivent être exécutés par n personnes. Chaque job doit être ef-
fectué par une seule personne, et chaque personne ne peut faire plus d'un job. Le coût
d'assignation du job i à la personne j est donné par cij . Le problème d'aectation est
d'aecter les jobs aux personnes tout en minimisant le coût total d'aectation. Modélisez
ce problème.
12
Chapitre 2
Programmation linéaire
Dans ce chapitre nous allons voir comment résoudre un ensemble de problèmes appelés "pro-
blèmes de programmation linéaire".
f (x1 , x2 , · · · , xn ) = c1 x1 + c2 x2 + · · · + cn xn
avec c1 , c2 , · · · , cn qui sont des constantes réelles, est une fonction linéaire.
Dénition 2.1.2 Une famille de fonctions f (x) = ax + b avec a xé et b variable représente
un faisceau de droites parallèles dans le plan.
4
Exemple : f (x) = x2 = − x1 + b est un faisceau de droites parallèles. Toutes les droites de
3
4
ce faisceau ont une pente égale à − . Mais quand b varie, l'intersection avec l'axe des y varie
3
également. Dans la gure suivante, on a représenté les droites de ce faisceau pour diérentes
valeurs de b.
a1 x1 + a2 x2 + · · · + an xn 6 b
ou
a1 x 1 + a2 x 2 + · · · + an x n < b
Remarque : On peut bien sûr avoir l'inégalité dans l'autre sens (il sut de multiplier les deux
côtés par −1).
13
Si n = 2, alors l'inéquation a1 x 1 + a2 x 2 6 b représente un demi-plan dans le plan. Pour déter-
miner graphiquement celui-ci, il sut de tracer la droite a1 x1 + a2 x2 = b. Une fois que c'est fait
on n'a plus que deux demi-plans possibles qui peuvent être délimités par cette droite. Il sut
alors de prendre n'importe quel point au hasard qui n'appartient pas à la droite et de vérier
analytiquement si celui-ci fait partie du demi-plan que l'on cherche ou non.
Exemple : On veut tracer 0, 3x1 + 0, 4x2 > 2 (c'est bien une inéquation linéaire car elle est
équivalente à −0, 3x1 − 0, 4x2 6 −2). Ce demi-plan est le demi-plan délimité par la droite
0, 3x1 + 0, 4x2 = 2 (passant, entre autre, par les points (0; 5) et (4; 2)) et qui ne contient pas le
point (0; 0) (car 0, 3 · 0 + 0, 4 · 0 2). La gure suivante représente ce demi-plan.
14
2.2 Dénitions
Dénition 2.2.1 La programmation linéaire est une branche de la recherche opérationnelle
qui vise à maximiser ou minimiser une fonction linéaire dont les variables sont soumises à des
contraintes qui peuvent être décrites par des égalités ou des inégalités linéaires.
Pn
max ou min j=1 cj xj
Pn 6
scq j=1 aij xj > bi ∀1 6 i 6 m
=
6 0
xj > 0 ∀1 6 j 6 n
libre
Remarques :
On ne peut évidemment pas modéliser tous les problèmes avec des contraintes et un
objectif linéaires. Toutefois, nous verrons qu'il y a quand même beaucoup de problèmes
qui peuvent l'être.
L'avantage de la programmation linéaire c'est qu'il existe des méthodes (comme l'algo-
rithme du simplexe) pour résoudre ce genre de problème (ce qui n'est en général pas le
cas de la programmation non-linéaire).
Attention, si on remplace une des variables xj > 0 par xj ∈ Z+ , alors on n'a plus un
programme linéaire mais un programme linéaire en nombres entiers. Pour ces derniers
problèmes, nous ne pourrons utiliser l'algorithme du simplexe.
Remarque : Si certaines contraintes sont des inégalités linéaires et d'autres des égalités li-
néaires, on dit que le PL est sous sa forme mixte.
15
Proposition 2.3.2 Tout PL sous forme standard peut se réécrire, de façon équivalente, sous
forme canonique, et inversement.
Démonstration :
1. Partons d'un PL sous sa forme standard, c'est-à-dire
Pn
max ou min cx
Pnj=1 j j
scq j=1 aij xj = bi ∀1 6 i 6 m .
xj > 0 ∀1 6 j 6 n
et voyons qu'on peut le réécrire sous une forme canonique. Pour cela, il sut de remplacer
les m égalités par 2m inégalités : m inégalités dans un sens, et m dans l'autre :
Pn
max ou min cx
Pnj=1 j j
scq aij xj 6 bi ∀1 6 i 6 m
Pj=1
n .
j=1 aij xj > bi ∀1 6 i 6 m
xj > 0 ∀1 6 j 6 n
Ensuite il sut de multiplier les m inégalités avec un > par −1 :
Pn
max ou min cx
Pnj=1 j j
scq a x 6 bi ∀1 6 i 6 m
Pn j=1 ij j .
j=1 −aij xj 6 −bi ∀1 6 i 6 m
xj > 0 ∀1 6 j 6 n
On a donc bien un PL sous forme canonique.
et voyons qu'on peut le réécrire sous une forme standard. Pour cela, introduisons m
variables d'écart t1 , t2 , · · · , tm an d'obtenir des égalités :
Pn
max ou min j=1 cj xj
Pn
scq j=1 aij xj + ti = bi ∀1 6 i 6 m
.
xj > 0 ∀1 6 j 6 n
ti > 0 ∀1 6 i 6 m
ce qui est un PL sous forme standard.
16
Mettons-le d'abord sous sa forme canonique avec toutes les inégalités dans le même sens :
Attention, cette résolution graphique n'est possible que dans le cas où on a deux variables.
Mais elle donne une bonne intuition géométrique sur ce qui se passe quand on a n variables.
La première étape de cette résolution consiste à représenter l'ensemble des solutions réali-
sables, c'est-à-dire l'ensemble des couples (x1 , x2 ) du plan qui respectent toutes les inégalités.
Pour cela, prenons un système d'axe orthogonal (on peut utiliser une échelle diérente sur les
deux axes) où l'axe des abscisses représente la variable x1 et l'axe des ordonnées la variable x2 .
Nous allons maintenant représenter les diérentes contraintes. Commençons par la première
inégalité : 0, 3x1 + 0, 4x2 > 2. Comme déjà obtenu auparavant, il s'agit du demi-plan délimité
par la droite 0, 3x1 + 0, 4x2 = 2 et ne contenant pas le point (0, 0). On procède de la même
façon pour les 4 autres inégalités. L'ensemble des points satisfaisant les 5 contraintes sont donc
les points qui se trouvent simultanément dans les 5 demi-plans. Or, par souci de visibilité, il
est plus facile de repérer des points non-colorés que colorés par 5 couleurs diérentes, c'est
pourquoi nous prenons la convention de laisser en blanc le demi-plan qui correspond à
l'inégalité et de colorer la partie du demi-plan qui correspond à des points ne satisfaisant pas
17
l'inégalité ! Nous obtenons alors le dessin suivant :
L' ensemble des solutions réalisables est donné par un polygone (non nécessairement borné)
à l'intérieur duquel chaque point est une solution possible du problème. Ce polygone est tou-
jours convexe. Pour notre problème on obtient le polygone ABCDE .
A présent nous devons chercher parmi tous les points de l'ensemble des solutions réalisables,
un qui donne une valeur optimale (minimale dans notre cas) à l'objectif. On veut minimiser les
coûts :
min c = 20x1 + 15x2
18
Ce qui revient à dire qu'on cherche la plus petite valeur de c = 20x1 + 15x2 telle que (x1 , x2 )
appartient à l'ensemble des solutions réalisables. Or les équations
4 c
c = 20x1 + 15x2 ⇔ x2 = − x1 +
3 15
4
représentent un faisceau de droites parallèles dont la pente est de − et dont l'ordonnée à
3
c
l'origine (ou intersection avec l'axe des y) est égale à . De plus, quand on minimise la valeur
15
c
de c, on minimise en même temps la valeur de . Donc, parmi toutes les droites de ce faisceau,
15
on en cherche une sur laquelle il y a une ou plusieurs solutions à notre problème (autrement
dit qui possède une intersection non-vide avec le polygone ABCDE ) et qui a la plus petite
ordonnée à l'origine possible.
Pour faire cela, commençons par tracer une des droites appartenant au faisceau
4 c
x2 = − x1 + .
3 15
4
Par exemple, la droite x2 = − x1 . Tous les points qui se trouvent sur cette droite correspondent
3
à des valeurs de x1 et x2 entraînant un coût nul. En eet, l'ordonnée à l'origine de cette droite
c
(= ) est égale à 0, par conséquent on a c = 0. Par contre, comme on le voit sur la gure
15
suivante, aucun des points de cette droite ne correspond à une solution réalisable car il n'y a
aucune intersection entre cette droite et le polygone ABCDE .
4
Il nous reste à identier une droite parallèle à la droite x 2 = − x1 qui possède une intersection
3
non-vide avec le polygone ABCDE et qui a la plus petite ordonnée à l'origine. Sur le graphique,
on peut tracer cette droite qui intercepte le polygone au point D.
On peut se convaincre sur cet exemple que, quelle que soit la fonction linéaire à optimiser sur
un domaine réalisable convexe, la solution optimale, si elle est unique, sera forcément sur un
sommet du polygone. Si la solution n'est pas unique, alors on aura toute une arête de solutions
équivalentes, et donc en particulier on aura deux sommets.
19
Maintenant qu'on a repéré graphiquement le sommet, on doit calculer ses coordonnées ana-
lytiquement. On remarque sur le graphique que D est le point d'intersection de la droite
0, 4x1 + 0, 2x2 = 1, 5 et de la droite 0, 3x1 + 0, 4x2 = 2. On résout donc le système suivant :
0, 4x1 + 0, 2x2 = 1, 5
0, 3x1 + 0, 4x2 = 2
Ce qui nous donne le point (2; 3, 5). Ainsi, la réponse optimale pour notre problème est unique
et révèle que nous devons distiller 2000 barils d'Arabie Saoudite et 3500 barils du Vénézuéla.
Ainsi, nous minimisons la fonction objectif qui a alors un coût de
c(2; 3, 5) = 20 · 2 + 15 · 3, 5 = 92, 5
Remarque : Comme la solution trouvée (si elle existe) est un sommet du polygone, si celui-ci
ne possède pas des coordonnées entières, la solution sera fractionnaire (comme dans ce cas où
x2 = 3, 5). C'est pourquoi, on ne peut généraliser telle quelle cette méthode pour des problèmes
où les variables doivent être entières. Ce qu'on peut alors faire, c'est résoudre notre problème et,
si la solution donnée est fractionnaire, on regarde les solutions entières les plus proches et pour
chacune d'elles on calcule la valeur de l'objectif correspondant. On termine en sélectionnant
la meilleure. Attention, cette étape peut devenir très compliquée si la dimension du problème
(c'est-à-dire son nombre de variables) est grand.
Lors de la résolution graphique, nous avons remarqué que la solution optimale de notre problème
se trouvait en un sommet du polygone des solution réalisables. Formalisons ceci :
Proposition 2.5.1 Si un PL est réalisable et borné, alors tous les optima se trouvent sur le
bord du domaine réalisable.
20
Il est facile de s'en convaincre par dessin. La démonstration, elle, nécessite plus de formalisme.
Proposition 2.5.2 Si un PL est réalisable et borné, alors il existe (au moins) une solution
optimale qui est un sommet du polyèdre.
Ceci nous donne une idée de résolution non graphique : comme on sait qu'une solution optimale
se trouve en un sommet du polygone, il nous sut d'inspecter les sommets ! ! !
Notre nouvelle méthode consisterait donc à déterminer les coordonnées des 5 sommets ABCDE
du polygone et d'évaluer la valeur de l'objectif pour chacun de ces 5 sommets. C'est ce que
nous faisons maintenant :
On voit sur le graphique que le sommet A est la solution du système
x1 = 9
x2 = 0
dont la solution (triviale) est le point (9; 0) dont la valeur de l'objectif est c(9; 0) =
20 · 9 = 180.
On voit sur le graphique que le sommet B est la solution du système
x1 = 9
x2 = 6
dont la solution (triviale) est le point (9; 6) dont la valeur de l'objectif est c(9; 6) =
20 · 9 + 15 · 6 = 270.
21
On voit sur le graphique que le sommet C est la solution du système
0, 4x1 + 0, 2x2 = 1, 5
x2 = 6
soit le point (0, 75; 6) dont la valeur de l'objectif est c(0, 75; 6) = 20 · 0, 75 + 15 · 6 = 105.
On voit sur le graphique que le sommet D est la solution du système
0, 4x1 + 0, 2x2 = 1, 5
0, 3x1 + 0, 4x2 = 2
0, 3x1 + 0, 4x2 = 2
x2 = 0
soit le point (6, 67; 0) dont la valeur de l'objectif est c(6, 67; 0) = 20 · 6, 67 = 133, 4.
Avec cette méthode, on obtient bien sûr la même solution que dans la section précédente !
Il reste que nous avons malgré tout encore utilisé notre représentation graphique des contraintes
pour déterminer les sommets... Nous devons donc encore rééchir à une méthode qui nous per-
mettrait dedéterminer les coordonnées des sommets sans avoir recours à la repré-
sentation graphique. On constate dans l'exemple ci-dessus que, comme on a un problème
à deux variables, chaque sommet est la solution d'un système formé par deux contraintes du
problème mises à l'égalité. Ainsi, on peut complètement se passer à présent de la représentation
graphique. On obtient l'algorithme suivant :
1. Pour chaque paire de contraintes, on résout le système formé par ces deux contraintes
mises à l'égalité.
3. On sélectionne le meilleur" sommet (c'est-à-dire celui ayant la plus grande valeur pour
la fonction objectif si c'est un problème à maximum, ou celui qui a la plus petite valeur
si c'est un problème à minimum).
Cet algorithme est très simple à adapter pour les problèmes qui possèdent n variables : à
l'étape un, au lieu de prendre des systèmes de 2 contraintes, on prend des systèmes formés par
n contraintes.
Pour se faire une idée, regardons comment cet algorithme s'appliquerait à notre exemple : nous
avons 7 inégalités (les 5 contraintes du problème ainsi que les deux contraintes liées à la nature
2 7·6
des variables) que nous devons associer par paires : il y a donc C7 = = 21 systèmes
2
possibles ! ! ! Or, on sait que seulement 5 d'entre eux mènent à une solution réalisable. En eet,
la résolution du système
0, 4x1 + 0, 2x2 = 1, 5
0, 2x1 + 0, 3x2 = 0, 5
22
mène à la solution (0, 3; 1, 47) qui ne satisfait pas la contrainte 0, 3x1 + 0, 4x2 > 2.
On remarque donc que, même sur un petit exemple, l'application de cet algorithme peut prendre
beaucoup de temps ! Essayons d'évaluer combien de temps cela prendrait de résoudre un PL de
n variables avec m contraintes : pour déterminer chaque sommet, on doit résoudre un système
3
de m équations à m inconnues, ce qui prend de l'"ordre" de m opérations pour un ordinateur.
Combien de tels systèmes doit-on résoudre ? On doit pour chaque sommet choisir m variables
m
parmi n, c'est-à-dire qu'il y a Cn . Si les nombres m et n sont petits, c'est faisable, mais si m
et/ou n sont grands, le nombre d'opérations explose et l'algorithme devient vite impossible à
appliquer même par un ordinateur ! En eet, déjà quand n = 20 et m = 10, on obtient alors de
8
l'ordre de 2 · 10 opérations à eectuer !
Nous allons devoir adapter notre algorithme an qu'il fasse moins d'opérations.
Reprenons le graphique, et supposons que le premier sommet trouvé soit le sommet A, de coor-
données (9; 0) Comment trouver une stratégie
et dont la valeur pour l'objectif est de 180.
qui nous permette de ne pas visiter tous les sommets ? L'idée sera de parcourir le po-
lygone de sommet en sommet en améliorant toujours la valeur de notre objectif.
23
graphique que pour passer de A à B, il faut augmenter la valeur de x2 sans modier la valeur
de x1 . Ceci aura pour conséquence d'augmenter la valeur de la fonction objectif à minimiser.
Par contre, si on passe du sommet actuel A au sommet E , on devra diminuer la valeur de x1
sans modier la valeur de x2 , ce qui aura pour eet de diminuer la valeur de l'objectif. On peut
donc voir graphiquement qu'il vaut la peine de passer par le sommet E = (6, 67; 0) et qui a
pour valeur de la fonction objectif 133, 4.
A présent nous sommes au sommet E . On ne va pas revenir en A, on peut juste aller au sommet
D. Pour cela, on diminue la valeur de x1 (d'environ 4 unités), mais x2 va augmenter (d'environ
3 unités). Il n'est donc pas évident que ce passage va entraîner une diminution de la fonction
objectif. Toutefois, dans ce cas, ce passage au sommet D de coordonnées (2; 3, 5) diminue bien
la valeur de la fonction objectif à 92, 5.
En partant du sommet D, on se demande s'il faut se rendre au sommet C = (0, 75; 6). La valeur
de la fonction objectif en ce sommet a augmenté, elle est de 105. On décide donc de rester au
sommet D qui est notre solution optimale.
Remarque : on n'a pas visité tous les sommets ! De plus, on n'a pas eu besoin de résoudre les
systèmes qui menaient à des sommets non réalisables !
Phase 2 : Progression
On passe d'un sommet réalisable à un autre sommet réalisable an d'améliorer la valeur
de la fonction objectif.
Nous pouvons voir cette progression sur le schéma (voir page 187 livre (3)) suivant qui représente
le polyèdre des solutions réalisables pour un PL de 3 variables.
Il y a donc deux points essentiels qui doivent être abordés :
1. Comment déterminer un sommet réalisable de départ (ou détecter qu'il n'en existe pas) ?
24
2.7.1 Solutions de base
An de traduire de façon algorithmique, et sans représentation graphique, la méthode géomé-
trique vue plus haut, nous aurons besoin de diérentes dénitions.
Dénition 2.7.1 Une solution de base d'un PL sous forme standard est une solution obtenue
en xant n−m variables à 0 de telle sorte que le système restant (de m équations à m inconnues)
possède une unique solution.
Les n−m variables xées à 0 sont les variables hors base, et les autres sont les variables
en base.
Remarque : ceci correspond aux sommets que nous cherchions dans notre exemple à deux
variables.
Remarque : On peut donc xer les variables hors base à 0, et du coup les variables en base
seront déterminées par le système.
Dénition 2.7.2 Une solution de base est réalisable si xj > 0 pour toutes les variables.
Une solution de base est non-réalisable s'il existe un indice j tel que xj < 0.
25
max 6x1 + 4x2
scq 3x1 + 9x2 6 81
4x1 + 5x2 6 55 .
2x1 + x2 6 20
x1 , x2 > 0
qui possède 2 (= n) variables et 3 (= m) contraintes. Or, nous avions supposé que m < n...
Mais quand le problème est écrit sous sa forme standard ! Pour écrire ce PL sous sa forme
standard, nous allons introduire les variables d'écart s1 , s2 et s3 :
qui possède bien une solution unique. La solution correspondante (0, 0, 81, 55, 20) est bien une
solution de base réalisable puisqu'elle satisfait toutes les contraintes.
Ici, on a juste introduit une terminologie plus spécique pour déterminer les sommets. On va
maintenant voir comment on passe d'un sommet à un autre.
qui est associée à la base B = {s1 , s2 , s3 }. La valeur de la fonction objectif (qui est à maximiser)
associée est de 0 (= 6 · 0 + 4 · 0). La phase 1 est donc terminée.
Principe : Faire entrer en base une variable hors-base, et faire sortir de la base une variable
en base.
Géométriquement, cela revient à se déplacer d'un sommet vers un autre le long d'une arête.
26
Il y a donc deux questions à se poser :
Pour répondre à ces questions, nous allons analyser notre exemple qui peut être réécrit de la
façon suivante : on exprime les variables en base en fonction des variables hors base :
s1 = 81 −3x1 −9x2
s2 = 55 −4x1 −5x2
s3 = 20 −2x1 −x2
z = 6x1 +4x2
A. Variable entrante
Pour choisir la variable entrante dans notre exemple, on a le choix entre x1 et x2 . Pour l'instant,
comme ce sont des variables hors base on a x1 = x2 = 0. En observant la ligne de l'objectif
z = 6x1 + 4x2 , on se rend compte que si on augmente la valeur de x1 , la valeur de l'objectif va
s'améliorer car le coecient de x1 à la dernière ligne, appelé le coût réduit, est positif. Si on
augmente x2 également.
Conclusion, la solution actuelle (ou solution courante) xB = (0, 0, 81, 55, 20) n'est pas opti-
male vu qu'on peut améliorer l'objectif !
Comment choisir entre x1 et x2 ? Quand les deux variables peuvent entrer en base, on choisit
celle qui permet une meilleure progression de l'objectif, à savoir x1 dans notre cas.
On choisit donc la variable hors base ayant le coût réduit positif le plus grand si
c'est un problème de maximisation, négatif le plus petit si c'est un problème de
minimisation.
Attention : si tous les coûts réduits étaient négatifs pour notre exemple, cela signierait que
si on rentrait en base une des variables hors-base cela aurait pour conséquence de diminuer la
valeur de l'objectif. On ne pourrait donc plus augmenter la valeur de l'objectif ce qui entraine-
rait que la solution courante est optimale.
B. Variable sortante
Maintenant qu'on a décidé de faire entrer x1 en base, il faut choisir quelle variable en base (s1 ,
s2 ou s3 ) va sortir (ce qui aura pour conséquence que cette variable serait mise à 0). Reprenons
notre tableau
27
s1 = 81 −3x1 −9x2 (1)
s2 = 55 −4x1 −5x2 (2)
s3 = 20 −2x1 −x2 (3)
On va choisir comme variable sortante la première variable à bloquer l'augmentation de la
variable entrante. Comme on veut maximiser l'objectif, on veut augmenter la valeur de la
variable entrante x1 autant que possible, mais tout en gardant une solution réalisable. Or,
à cause de l'équation (1), on sait que x1 6 27, sinon la variable s1 serait négative et la
solution de base serait non réalisable.
à cause de l'équation (2), on sait que x1 6 13, 75, sinon la variable s2 serait négative et
la solution de base serait non réalisable.
à cause de l'équation (3), on sait que x1 6 10, sinon la variable s3 serait négative et la
solution de base serait non réalisable.
En assemblant ces trois données on a qu'on peut faire passer x1 au maximum de 0 à 10. Ceci
entraînera que s3 = 0. C'est donc s3 qui sort de la base.
1 1
x1 = 10 − x2 − s3
2 2
1 1
s1 = 81 − 3(10 − x2 − s3 ) − 9x2
2 2
1 1
s2 = 55 − 4(10 − x2 − s3 ) − 5x2
2 2
1 1
z = 6(10 − x2 − s3 ) + 4x2
2 2
ou encore
1 1
x1 = 10 − x2 − s3
2 2
15 3
s1 = 51 − x2 + s 3
2 2
s2 = 15 − 3x2 + 2s3
z = 60 + x2 − 3s3
La solution de base réalisable associée à notre nouvelle base B ∗ = {x1 , s1 , s2 } est (10, 0, 51, 15, 0)
et la valeur de l'objectif en ce point est de 60. On a bien amélioré la valeur de l'objectif. A
présent on doit revenir à l'étape 2 de la progression. On constate que si on fait entrer x2 en
base cela aura pour conséquence d'améliorer l'objectif. Donc x2 entre en base.
On obtient alors que c'est s2 qui va être mis à 0. C'est donc s2 qui sort. La mise à jour du
dictionnaire est
28
1 2
x2 = 5 − s2 + s3
3 3
15 1 5
x1 = + s2 − s3
2 6 6
27 5 7
s1 = + s2 − s3
2 2 2
1 7
z = 65 − s2 − s3
3 3
15 27
La solution de base réalisable associée à notre nouvelle base {x1 , x2 , s1 } est ( , 5, , 0, 0) et
2 2
la valeur de l'objectif en ce point est de 65.
On constate que, si on fait entrer s2 ou s3 , la valeur de l'objectif ne fera que diminuer. On peut
donc s'arrêter, la solution courante est optimale.
1 1
x2 = 5 −x1 + s1 − s2
2 2
x3 = 20 −5x1 −s2
1 3
z = 15 −2x1 + s1 − s2
2 2
On décide de faire entrer s1 dans la base. Mais aucune des variables en base x2 ou x3
n'impose une limite sur la croissance de s1 . On peut donc accroître s1 autant que l'on
veut et du coup augmenter la valeur de l'objectif à l'inni. On peut donc conclure que le
problème est non-borné.
2. Un autre cas particulier est celui où on a plusieurs variables qui peuvent sortir. On prend
alors celle qui a le plus petit indice (idem si on a plusieurs candidats possibles qui peuvent
entrer en base).
s1 = 1 −2x3
s2 = 3 −2x1 +4x2 −6x3
s3 = 2 +x1 −3x2 −4x3
z = 2x1 −x2 +8x3
29
Supposons qu'on fasse entrer x3 en base. Chacune des 3 variables de s1 , s2 et s3 limite
1
à l'augmentation de x3 . Choisissons s1 pour sortir de la base. On obtient le nouveau
2
dictionnaire :
1 1
x3 = − s1
2 2
s2 = −2x1 +4x2 +3s1
s3 = x1 −3x2 +2s1
z = 4 +2x1 −x2 −4s1
1
La solution courante est xB = (0, 0, , 0, 0). Ainsi, malgré que s2 et s3 sont en base, elles
2
sont nulles.
Dénition 2.7.3 Une solution de base avec une ou plusieurs variables en base nulle(s)
est une solution dite solution de base dégénérée.
Voyons l'itération suivante de notre exemple : x1 entre en base et c'est s2 qui sort. Le
dictionnaire correspondant est :
3 1
x1 = 2x2 + s1 − s2
2 2
1 1
x3 = − s1
2 2
7 1
s3 = −x2 + s1 − s2
2 2
z = 4 +3x2 −s1 −s2
On remarque que la valeur de l'objectif ne change pas. Une telle itération est une itéra-
tion dite dégénérée.
Dans les problèmes concrets, il peut y avoir parfois quelques dizaines, voire quelques
centaines d'itérations dégénérées avant de voir une amélioration de l'objectif !
A titre d'exemple essayons de déterminer une première solution de base réalisable pour le PL
suivant :
max x1 − x2 + x 3
Scq 2x1 − x2 + 2x3 6 4
2x1 − 3x2 + x3 6 −5
−x1 + x2 − 2x3 6 −1
x1 , x2 , x3 > 0
Passons à la formulation standard de ce PL :
30
max x1 − x2 + x3
Scq 2x1 − x2 + 2x3 + s1 = 4
2x1 − 3x2 + x3 +s2 = −5
−x1 + x2 − 2x3 +s3 = −1
x1 , x2 , x3 , s1 , s2 , s3 > 0
Si on prend, comme d'habitude, la base constituée par les variables d'écart {s1 , s2 , s3 }, on
constate que la solution de base associée n'est pas réalisable (s2 et s3 seront négatifs).
Une façon systématique d'aborder ce problème est de poser un problème auxiliaire. Suppo-
sons de façon générale qu'on doive résoudre le problème suivant :
Pn
max cx
Pnj=1 j j
Scq j=1 aij xj = bi ∀i = 1, · · · , m
xj > 0 ∀j = 1, · · · , n
et supposons qu'on ne trouve à priori aucune solution de base réalisable (remarque : on peut
supposer que tous les bi sont positifs, car sinon on multiplie l'égalité par −1). Considérons alors
le problème suivant :
Pm
min P i=1 ei
n
Scq j=1 aij xj + ei = bi ∀i = 1, · · · , m
xj > 0 ∀j = 1, · · · , n
ei > 0 ∀i = 1, · · · , m
Ce problème auxiliaire n'est bien sûr pas équivalent au problème original, mais on peut remar-
quer que le problème original possède une solution (problème réalisable) si et seulement si le
problème auxiliaire possède une solution réalisable avec tous les ei = 0 ∀1 6 i 6 m. Or, comme
on impose que les variables ei soient positives ou nulles pour tout i, si une solution avec tous
les ei = 0 existe, elle est forcément optimale. On a donc que
soit sa solution optimale est supérieure à 0, auquel cas on sait que le problème original
est non réalisable, il n'y a donc rien à optimiser.
Exemples :
31
max x1 − x2 + x3
Scq 2x1 − x2 + 2x3 + s1 = 4
2x1 − 3x2 + x3 +s2 = −5
−x1 + x2 − 2x3 +s3 = −1
x1 , x2 , x3 , s1 , s2 , s3 > 0
Comme nous l'avons déjà vu, la solution de base correspondant à la base {s1 , s2 , s3 } n'est
pas réalisable. On va devoir passer au problème auxiliaire an de déterminer une pre-
mière solution de base réalisable. Avant cela, multiplions par −1 la deuxième et troisième
contrainte an de rendre positifs tous les membres de droites :
max x1 − x2 + x3
Scq 2x1 − x2 + 2x3 + s1 = 4
−2x1 + 3x2 − x3 −s2 = 5
x1 − x2 + 2x3 −s3 = 1
x1 , x2 , x3 , s1 , s2 , s3 > 0
On introduit maintenant les nouvelles variables e1 , e2 et e3 pour formuler notre problème
auxiliaire :
min e1 + e2 + e3
Scq 2x1 − x2 + 2x3 + s1 +e1 = 4
−2x1 + 3x2 − x3 −s2 e2 = 5
x1 − x2 + 2x3 −s3 +e3 = 1
x1 , x2 , x3 , s1 , s2 , s3 > 0
e1 , e2 , e3 > 0
Ce problème possède une solution de base réalisable associée à la base {e1 , e2 , e3 } :
xB = (0, 0, 0, 0, 0, 0, 4, 5, 1)
| {z } | {z } | {z }
xj sj ei
32
e1 = 3 −x1 −s1 −s3 +e3
11 3 2 1 2 1
x2 = + x1 + s2 + s3 − e 2 − e 3
5 5 5 5 5 5
8 1 1 3 1 3
x3 = − x1 + s2 + s3 − e 2 − e 3
5 5 5 5 5 5
w = e1 +e2 +e3
Tous les coûts réduits sont positifs, on a une solution optimale. Comme la valeur de
l'objectif pour cette solution (3, 4, 1, 0, 0, 0, 0, 0, 0) est nulle, on en déduit que la solution
(3, 4, 1, 0, 0, 0) est une solution de base réalisable pour le problème original ! On peut le
vérier en injectant cette solution dans le système des contraintes. La phase 1 d'initia-
lisation est (enn) terminée, et on va pouvoir commencer la phase 2 de progression en
démarrant avec le dernier tableau de la phase 1 (on peut supprimer les variables e1 , e2 et
e3 ) :
x1 = 3 −s1 −s3
3 2 2
x2 = 4 − s 1 + s 2 − s 3
5 5 5
1 1 4
x3 = 1 − s 1 + s 2 − s 3
5 5 5
3 1 7
z = − s1 − s2 − s3
5 5 5
Le problème original est un problème de maximisation. Ici, tous les coûts réduits sont
négatifs, on a donc à faire à une solution optimale.
33
max 3x1 + 5x2
Scq x1 +s1 = 4
2x2 +s2 = 12
3x1 + 2x2 = 18
x1 , x2 , s1 , s2 > 0
On ne trouve pas de solution. On introduit une variable e1 :
min e1
Scq x1 +s1 = 4
2x2 +s2 = 12
3x1 + 2x2 +e1 = 18
x1 , x2 s1 s2 e1 > 0
Cette manière de procéder est appelée algorithme du simplexe en deux phases :
Première phase : résoudre le problème auxiliaire an de déterminer une première so-
lution de base réalisable ou déterminer que le problème est non réalisable.
2.8 Dualité
2.8.1 Motivation du problème dual : la recherche d'une borne supé-
rieure sur la valeur optimale
Partons du problème suivant :
Remarque : au plus la borne inférieure sera grande et au plus la borne supérieure sera petite,
au plus la fourchette des valeurs possibles de la valeur optimale sera restreinte, et donc meilleure
sera l'information.
Toute solution réalisable nous en donne une ! Par exemple, x1 = 4 et x2 = 4 est une solution
réalisable dont la valeur pour l'objectif est de 280. On sait par conséquent que
z ∗ > 280
34
Comment trouver une borne supérieure ?
On peut donc conclure que la valeur de la fonction objectif est comprise entre 280 et 960.
De façon générale, pour obtenir une borne supérieure, on essaie de déduire, à partir des
contraintes du problème, une inégalité où chaque coecient est supérieur ou égal au coecient
correspondant de la fonction objectif. Pour notre exemple, on peut aussi sommer la première
inégalité multipliée par 40 et la deuxième multipliée par 30 :
z ∗ 6 880.
40 6 y1 + y3
30 6 y2 + 2y3
Si ces deux inégalités sont satisfaites, on peut alors conclure que
Pn
max cx
Pnj=1 j j
Scq j=1 aij xj 6 bi ∀i = 1, · · · , m
xj > 0 ∀j = 1, · · · , n
alors le problème dual est
min P m
P
i=1 bi yi
m
Scq i=1 aij yi > cj ∀j = 1, · · · , n
yi > 0 ∀i = 1, · · · , m
On observe que le dual d'un problème de maximisation est un problème de minimisation. Pour
chaque contrainte du primal, on a une variable du dual (m variables duales). De façon symé-
trique, à chaque contrainte du dual correspond une variable du primal (n variables primales).
Comme vu dans l'exemple précédent, toute solution du dual donne une borne supérieure sur la
valeur optimale du primal. En eet
Pn Pn
( m
P
j=1 cj xj 6 j=1 i=1 aij yi )
xj
Pm Pn
= i=1 j=1 aij xj yi
Pm
6 i=1 bi yi
Par conséquent, si on obtient une solution réalisable primale (x∗1 , · · · , x∗n ) et une
solution réalisable duale (y1∗ , · · · , ym∗ ) telle que
n
X m
X
cj x∗j = bi yi∗
j=1 i=1
n
X m
X
cj x∗j = bi yi∗
j=1 i=1
2.8.3 Propriétés
Proposition 2.8.2 Le dual du dual est le primal.
36
qui est équivalent à
max P m
P
i=1 (−bi )yi
m
Scq i=1 (−aij )yi 6 −cj ∀j = 1, · · · , n
yi > 0 ∀i = 1, · · · , m
Construisons le dual :
Pn
min −c x
Pnj=1 j j
Scq j=1 −a ij xj > −bi ∀i = 1, · · · , m
xj > 0 ∀j = 1, · · · , n
qui est équivalent à
Pn
max cx
Pnj=1 j j
Scq j=1 ij xj 6 bi ∀i = 1, · · · , m
a
xj > 0 ∀j = 1, · · · , n
ce qui correspond bien au primal.
Théorème 2.8.3 Etant donné un problème primal (P ) et son problème dual (D), une et une
seule des 3 situations suivantes peut avoir lieu :
Les deux problèmes possèdent chacun des solutions optimales (les valeurs optimales sont
égales)
Un des problèmes possède une solution réalisable avec un optimum inni (problème non
borné), alors l'autre n'a pas de solution réalisable (problème non réalisable)
(D)
(P ) Pm
Pn min Pmi=1 bi yi
max cx
Pnj=1 j j Scq i=1 aij yi = cj ∀j = 1, · · · , n
Scq j=1 ij xj 6 bi ∀i = 1, · · · , m
a
yi > 0 ∀i = 1, · · · , m
(P ) Pn (D) Pm
max cx min
Pnj=1 j j Pmi=1 bi yi
Scq j=1 aij xj 6 bi ∀i = 1, · · · , m Scq i=1 aij yi > cj ∀j = 1, · · · , n
xj > 0 ∀j = 1, · · · , n yi > 0 ∀i = 1, · · · , m
(P ) Pn (D)
max cx
Pnj=1 j j
Pm
min Pmi=1 bi yi
Scq j=1 aij xj = bi ∀i = 1, · · · , m Scq i=1 aij yi > cj ∀j = 1, · · · , n
xj > 0 ∀j = 1, · · · , n
37
Exemple : Le dual du problème suivant
max 6x1 − x2 + 13x3
Scq 3x1 + x2 + 2x3 = 7
5x1 − x2 6 6
x2 + x3 > 2
x1 > 0 x2 6 0
est
L'entreprise acceptera de lui vendre toutes ses ressources si et seulement si cela lui rap-
porte une recette au moins aussi importante que celle qu'elle obtiendrait en vendant ses
produits.
38
Ainsi, on obtient le PL dual
m
X
aij yi∗ = cj ou x∗j = 0, j = 1, · · · , n
i=1
et
n
X
aij x∗j = bi ou yi∗ = 0, i = 1, · · · , m
j=1
Démonstration : Pour démontrer ce résultat rappelons que, par le théorème de dualité forte,
si les solutions (x∗1 , x∗2 , · · · , x∗n ) et (y1∗ , y2∗ , · · · , ym
∗
) sont des solutions optimales pour le problème
primal et le problème dual respectivement alors on a
n
X m
X
cj x∗j = bi y i
j=1 i=1
n n m
! m
X X X X
cj x∗j 6 aij yi∗ x∗j car aij yi∗ = cj
j=1 j=1 i=1 i=1
m n
!
X X
= aij x∗j yi∗
i=1 j=1
Xm
6 bi yi∗
i=1
Comme, dans une solution optimale, il n'y a que des égalités, on veut que les deux inégalités
ci-dessus soient des égalités. Or, ces deux inégalités sont vériées à l'égalité si et seulement si
39
m
X
aij yi∗ = cj ou x∗j = 0, j = 1, · · · , n
i=1
et n
X
aij x∗j = bi ou yi∗ = 0, i = 1, · · · , m
j=1
Ces conditions sont particulièrement utiles quand on veut tester si une solution réalisable donnée
pour le primal est optimale ou non. En eet, supposons que pour un PL primal on désire
vérier que la solution (x1 , x2 , · · · , xn ) est optimale. Il faudrait alors vérier que la solution
duale associée est réalisable (alors la solution donnée du primal est optimale) ou non réalisable
(alors la solution donnée du primal n'est pas optimale). An de déterminer la solution duale
associée on dresse le système suivant :
Pm
Si x∗j > 0 alors i=1 aij yi∗ = cj , j = 1, · · · , n
Pn
Si j=1 aij x∗j < bi alors yi∗ = 0, i = 1, · · · , m
Exemple : On a le PL suivant
max 18x1 − 7x2 + 12x3 + 5x4 + 8x6
Scq 2x1 − 6x2 + 2x3 + 7x4 + 3x5 + 8x6 6 1
−3x1 − x2 + 4x3 − 3x4 + x5 + 2x6 6 −2
8x1 − 3x2 + 5x3 − 2x4 + 2x6 6 4
4x1 + 8x3 + 7x4 − x5 + 3x6 6 1
5x1 + 2x2 − 3x3 + 6x4 − 2x5 − x6 6 5
x1 , x2 , x3 , x4 , x5 , x6 > 0
Supposons que l'on veuille tester si la solution (2, 4, 0, 0, 7, 0) est optimale. On construit alors
le système :
Comme x1 > 0, alors on a
40
Comme la deuxième inégalité n'est pas satisfaite à l'égalité on a
y2∗ = 0
Comme la cinquième inégalité n'est pas satisfaite à l'égalité on a
y5∗ = 0
La résolution de ce système nous donne la solution duale
1 5
, 0, , 1, 0
3 3
Nous devons encore vérier que cette solution satisfait les conditions du dual. Cette vérication
est laissée à titre d'exercice.
Pour résoudre ce genre d'exercices, il faut pouvoir résoudre des systèmes d'équations linéaires
non-homogènes. Pour cela, nous rappelons à la section suivante la méthode de Gauÿ pour
résoudre ce genre de systèmes.
où inconnues du système, les réels a11 , a12 , · · · , amn sont les coe-
x1 , x2 , · · · , xn sont les
cients du système et les nombres b1 , · · · , bm sont les termes indépendants.
Un vecteur (x1 , x2 , · · · , xn ) est une solution du système si (x1 , x2 , · · · , xn ) est une solution de
toutes les équations du système.
Le système est dit homogène lorsque les termes indépendants b1 , b2 , · · · , bm sont tous nuls. Si
l'un d'entre eux est non-nul, alors le système est dit non-homogène.
Par exemple, le vecteur (0, 0, · · · , 0) est une solution du système homogène, mais n'est jamais
une solution du système non-homogène.
41
1. déterminer si un système donné admet des solutions et, dans le cas armatif, si la solution
est unique ou s'il y a plusieurs solutions.
La méthode de substitution.
1. Une technique de transformation du système qui garantit que le système transformé est
un système équivalent au système initial (c'est-à-dire qui admet les mêmes solutions que
le système initial).
Théorème 2.9.1 Lorsque dans un système d'équations, on remplace une équation par une com-
binaison linéaire d'équations renfermant cette équation, on obtient un système équivalent
au système initial.
Exemple :
On désire résoudre le système
2x2 − x3 = −7 (1)
x1 + x2 + 3x3 = 2 (2)
−3x1 + 2x2 + 2x3 = −10 (3)
Commençons par éliminer x1 : on remplace alors la troisième équation par (3) + 3 × (2).
42
A présent, nous ne travaillons plus sur l'équation (2). Les équations (1) et (4) forment un sys-
tème de deux équations à deux inconnues.
On peut décider d'éliminer x2 . On remplace l'équation (4) par 5 × (1) − 2 × (4). Le système est
équivalent à
2x2 − x3 = −7 (1)
x1 + x2 + 3x3 = 2 (2)
− 27x3 = −27 (5)
On déduit de (5) que x3 = 1. En injectant cette donnée dans (1) on trouve x2 = −3. En
injectant ces deux données dans (2) on trouve x1 = 2 . La solution de ce système est donc
S : {(2, −3, 1)}.
1. Remplacer deux ou plusieurs équations par une combinaison linéaire de ces équations :
(1)
Incorrecte : (2) ⇔ (2) − (1)
(3) (3)
(1) (1)
Correcte : (2) ⇔ (2) − (1)
(3) (3)
2. Remplacer une équation par une combinaison linéaire de ces équations ne renfermant pas
cette équation
(1) (1)
Incorrecte : (2) ⇔ (2)
(3) (2) − (1)
(1) (1)
Correcte : (2) ⇔ (2)
(3) (3) − (1)
Remplacer arbitrairement des équations par des combinaisons linéaires d'équations ; pra-
tiquement cela revient à commettre simultanément plusieurs des fautes signalées aux deux
premiers points ci-dessus.
43
(1) (2) − (1)
Incorrecte : (2) ⇔ (3) − (1)
(3) (3) − (2)
Nous rappelons dans cette sous-section quelques dénitions qui nous seront utiles an d'établir
la méthode de Gauÿ.
Dénition 2.9.2 On dit qu'un système linéaire est échelonné si le nombre de coecients
nuls au début de chaque équation est strictement croissant quand on passe d'une équation à
l'équation suivante.
La méthode de Gauÿ se base alors sur l'idée de "transformer" le système de départ en un sys-
tème équivalent dont il est plus simple de décrire l'ensemble des solutions (système échelonné).
Voici les opérations élémentaires que l'on peut eectuer sur le système an d'obtenir un système
équivalent sous forme échelonnée :
44
0 2 −1 x1 −7
1 1 3 x2 = 2
−3 2 2 x3 −10
Qu'on peut encore écrire de façon plus compacte :
0 2 −1 −7
1 1 3 2
−3 2 2 −10
On appelle cette matrice, la matrice augmentée du système.
La méthode de Gauÿ consiste à appliquer des opérations élémentaires sur la matrice augmentée
an d'obtenir un système équivalent échelonné :
0 2 −1 −7 −3 2 2 −10
1 1 3 2 ⇐⇒L1 ↔L3 1 1 3 2
−3 2 2 −10 0 2 −1 −7
1 −2/3 −2/3 10/3
L1 ←L1 /(−3)
⇐⇒ 1 1 3 2
0 2 −1 −7
1 −2/3 −2/3 10/3
L2 ←L2 −L1
⇐⇒ 0 5/3 11/3 −4/3
0 2 −1 −7
1 −2/3 −2/3 10/3
L2 ←L2 /(5/3)
⇐⇒ 0 1 11/5 −4/5
0 2 −1 −7
1 −2/3 −2/3 10/3
L3 ←L3 −2L2
⇐⇒ 0 1 11/5 −4/5
0 0 −27/5 −27/5
On a maintenant un système équivalent au système de l'énoncé mais sous une forme échelonnée.
Le système sous cette forme est simple à résoudre et nous mène à la solution
Pour garder une trace des opérations eectuées sur les lignes, on peut écrire en marge des
calculs les opérations eectuées, comme par exemple
45
pour signier que dans le nouveau système équivalent, la nouvelle première ligne est la combi-
naison décrite des autres lignes.
Pour démarrer la méthode, on choisit de mettre en première ligne une équation dont le
coecient multipliant x1 est non nul et on prend la matrice augmentée (A|b) du système écrit
dans cet ordre.
Remarque : Dans le cas inintéressant où tous les coecients multipliant x1 sont nuls, la
première colonne est identiquement nulle (on peut donc la supprimer) et x1 est indéterminé.
On démarre dans ce cas la méthode en renumérotant les inconnues et en choisissant la première
inconnue de sorte qu'elle apparaisse dans au moins une équation du système.
a12 a1n b1
x1 + x2 + . . . + xn = (L10 )
a11 a11 a11
La deuxième opération consiste à utiliser la nouvelle première ligne pour faire apparaître
des zéros dans la première colonne de la matrice (A|b), de la deuxième à la dernière ligne. On
fait donc les opérations
On recommence successivement ces étapes sur les lignes suivantes pour faire apparaître la struc-
ture échelonnée.
La procédure s'achève lorsqu'on a épuisé toutes les variables ou toutes les équations. On se
retrouve alors avec
• des équations qui ne comportent plus d'inconnues :
46
les équations du type 0=0 peuvent être supprimées,
si une équation est du type 0 = constante 6= 0, le système n'a pas de solution.
• des équations qui comportent (au moins) une inconnue multipliée par un co-
ecient non nul.
Parmi ces équations, on commence à traiter la dernière équation du système :
si elle ne contient qu'une seule inconnue, celle-ci est alors xée par l'équation ;
pour une équation qui comporte plus d'une inconnue, on exprime l'inconnue ayant le
plus petit indice en fonction des autres inconnues (qui apparaissent alors comme des
paramètres arbitraires).
On substitue maintenant les valeurs déjà déterminées par la dernière équation dans les équa-
tions précédentes et on traite l'avant-dernière équation comme on vient de traiter la dernière.
La solution est alors exprimée en fonction des paramètres arbitraires, ce qui permet d'écrire
une base du système homogène associé et une solution particulière.
Considérons le système
2x + y − z = 8
−3x − y + 2z = −11
−2x + y + 2z = −3
2 1 −1 8
−3 −1 2 −11
−2 1 2 −3
et divisons la première ligne par 2 (L10 = (L1)/2), ce qui donne
1 1/2 −1/2 4
−3 −1 2 −11 .
−2 1 2 −3
La première ligne peut maintenant servir à annuler la première composante dans les deuxième
0 0 0 0
et troisième lignes (L2 = L2 + 3 ∗ L1 et L3 = L3 + 2 ∗ L1 ), ce qui donne
1 1/2 −1/2 4
0 1/2 1/2 1 .
0 2 1 5
00
Multiplions la deuxième ligne (L2 = 2 ∗ L20 ) et utilisons-la pour éliminer la deuxième inconnue
dans la troisième ligne. Nous obtenons
1 1/2 −1/2 4
0 1 1 2 .
0 0 −1 1
La matrice est maintenant échelonnée et le système à résoudre est
x + y/2 − z/2 = 4
y+z =2
−z = 1
47
ce qui mène à la solution (2, 3, −1).
Autre exemple :
1 3 1 9 1 3 1 9
1 1 −1 1 → 0 −2 −2 −8
3 11 5 35 0 2 2 8
1 3 1 9
→ 0 −2 −2 −8
0 0 0 0
1 0 −2 −3
→ 0 1 1 4
0 0 0 0
Les équations utiles dans le système échelonné sont
x − 2z = −3 et y + z = 4.
Dans la deuxième équation, laissons z comme paramètre libre. On en déduit la forme générale
des solutions
1 2 1 1 1 2 1 1
1 −1 2 0 → 1 −1 2 0 .
2 1 3 2 0 0 0 1
Le système équivalent est obtenu en soustrayant de la troisième ligne, les deux premières. Le
rang du système homogène est 2 alors que celui du système augmenté est 3.
48
2.10 Exercices
1. Déterminez pour chaque modèle suivant s'il s'agit d'un programme linéaire ou non, sa-
chant que les yi représentent des variables, et que tous les autres symbôles représentent
des constantes.
a)
min α(3y1 + 11y4 )
P5
scq j=1 dj yj 6 β
yj > 0 ∀j = 1, · · · , 9
b)
min α(3y1 + 11y4 )2
P5
scq j=1 dj yj 6 β
yj > 0 ∀j = 1, · · · , 9
c)
P9
max j=1 yj
scq y1 y2 6 100
yj > 1 ∀j = 1, · · · , 9
Résolution graphique
2. Dessinez dans un repère les diérents domaines réalisables correspondant aux systèmes
suivants :
x1 + x2 6 2 x1 + x2 6 2
(a) 3x1 + x2 > 3 (b) 3x1 + x2 = 3
x1 , x2 > 0 x1 , x2 > 0
3. Déterminez graphiquement pour chaque programme linéaire suivant s'il possède une
unique solution optimale, ou s'il en existe plusieurs.
4. Déterminez graphiquement pour chaque programme linéaire suivant s'il est réalisable ou
non.
49
max 3x1 + x2
scq x1 + x2 6 1, 8
(c)
x1 + x2 > 1, 2
x1 , x2 ∈ Z+
5. Déterminez graphiquement pour chaque programme linéaire suivant s'il est borné ou non.
6. Dans la gure suivante, le domaine réalisable est représenté par le polygone non-borné
blanc. Indiquez pour chaque point donné s'il peut s'agir d'un point optimal, d'un point
optimal unique, d'un point non optimal.
7. Une usine fabrique les produits P1 et P2 . Pour cela, elle utilise les matières premières M1 ,
M2 et M3 , à raison de
7 tonnes de M1 , 4 tonnes de M2 et 3 tonnes de M3 par unité produite de produit P1 .
2 tonnes de M1 , 8 tonnes de M2 et 11 tonnes de M3 par unité produite de produit P2 .
Elle dispose mensuellement de 80 tonnes de M1 , de 60 tonnes de M2 et de 64 tonnes de
M3 . Le bénéce net est de 4000 euros par unité de P1 et de 5000 euros par unité de P2 .
Quelles quantités (non nécessairement entières) des deux produits l'entreprise doit-elle
fabriquer pour maximiser son bénéce ?
8. L'entreprise Top Toys souhaite faire une nouvelle campagne de publicité. La diusion
d'un spot publicitaire à la radio coûte 300 euros et la diusion d'un spot publicitaire à la
50
télé coûte 2000 euros. L'entreprise dispose d'un budget total de 20 000 euros pour sa cam-
pagne. Par ailleurs, l'entreprise souhaite que chaque média soit susamment représenté,
c'est pourquoi elle décide que le coût alloué pour chaque média ne peut pas dépasser
80% du budget total (c'est-à-dire que le coût total des publicités à la radio ne peut pas
dépasser 80% du budget total, idem pour les publicités à la télévision). Il a été estimé
que la première diusion du spot à la radio touchera 5000 personnes, et chaque diusion
supplémentaire touchera 2000 nouvelles personnes en plus. La première diusion du spot
à la télévision touchera elle 4500 personnes, et chaque diusion supplémentaire touchera
3000 nouvelles personnes en plus. Combien de diusions doit-on attribuer à la radio et à
la télévision an de toucher le plus grand nombre de personnes ?
Les fruits sont d'importantes matières premières pour la fabrication des rafraîchissements.
Le stock mensuel de fruits s'élève à 300 tonnes. La fabrication d'un litre de jus requiert
2 kg de fruits et celle d'un litre de limonade 0,5 kg. Les bouteilles ont une contenance de
25 cl.
Modélisez ce problème
51
max x1 + x2
scq x1 + x2 6 10
x1 , x2 > 0
max x1 + x2
scq x1 + x2 = 10
x1 , x2 > 0
12. Mettez le programme linéaire suivant sous sa forme canonique, et ensuite sous sa forme
standard :
max x1 + x2
scq x1 + x2 > 10
x1 , x2 > 0
13. Mettez le programme linéaire suivant sous sa forme canonique, et ensuite sous sa forme
standard :
max x1 + x2
scq x1 + x2 > 10
x1 > 0
x2 6 0
Solutions de base
52
16. Supposons qu'on étudie le programme linéaire dont les contraintes sont les suivantes :
4x1 − x2 + x3 = 1
3x1 + 2x2 − 2x3 = 8
x1 , x2 , x3 > 0
Déterminez la solution de base correspondant à la base formée de x1 et x2 .
18. L'ensemble des contraintes d'un programme linéaire mis sous sa forme standard est donné
par
−x1 + x2 − x3 = 0
x1 + x4 = 2
x2 + x5 = 3
x1 , x 2 , x 3 , x 4 , x 5 > 0
a) En supposant que les variables x 3 , x4 et x5 sont des variables d'écart qui ont été
ajoutées an de mettre le programme sous sa forme standard, dessinez la domaine
réalisable en fonction des variables originelles x1 et x2 .
b) Déterminez la solution correspondant aux diérents ensembles de variables en base
suivants, et déterminez si la solution de base correspondante est réalisable :
B1 = {x3 , x4 , x5 }
B2 = {x2 , x4 , x5 }
B3 = {x1 , x2 , x5 }
B4 = {x1 , x2 , x4 }
B5 = {x1 , x3 , x5 }
c) Vériez, pour chaque solution de base déterminée au point précédent, que les solutions
de base réalisables correspondent à un sommet du polygone dessiné au point a), et
que les solutions de base non réalisables se trouvent en dehors du polygone.
L'algorithme du simplexe
19. Résoudre par l'algorithme du simplexe le programme linéaire suivant :
max x 1 + x2
scq x1 + 3x2 6 3
x 1 + x2 6 2
3x1 + x2 6 3
x1 , x2 > 0
53
20. Résoudre par l'algorithme du simplexe le programme linéaire suivant :
max x1 + 3x2 − x3
scq 2x1 + 2x2 − x3 6 10
3x1 − 2x2 + x3 6 10
x1 − 3x2 + x3 6 10
x1 , x2 , x3 > 0
min −10x1 + x2
scq −5x1 + 3x2 6 15
3x1 − 5x2 6 8
x1 , x2 > 0
max 3x1 + x2
scq x1 − x2 6 −1
−x1 − x2 6 −3
2x1 + x2 6 4
x1 , x2 > 0
54
26. Résoudre par l'algorithme du simplexe le programme linéaire suivant :
max 3x1 + x2
scq x1 − x2 6 −1
−x1 − x2 6 −3
2x1 − x2 6 2
x1 , x2 > 0
max 9x1 + x2
scq −2x1 + x2 > 2
x2 6 1
x1 , x2 > 0
Dualité
55
32. Démontrez que le dual du dual du problème suivant est équivalent à ce problème :
max 6x1 + x2
scq x1 6 1
2x1 + x2 6 4
x1 , x2 > 0
a) Déterminez le dual de ce problème.
34. Déterminez graphiquement que le programme linéaire suivant est non-borné et vériez ce
que cela implique pour son dual :
max x1
scq −x1 + x2 > 1
x2 > 2
x1 , x2 > 0
35. Déterminez graphiquement que le dual du programme linéaire suivant est non-borné et
vériez ce que cela implique pour le primal :
min x1 + x2
scq 2x1 + x2 > 3
5x1 + x2 6 0
x1 , x2 > 0
36. Un vieux menuisier fabrique des portes en bois de 2 dimensions diérentes. Il dispose
pour ce faire de grands panneaux en bois qu'il scie en 3, pour réaliser des portes grand
format et en 4 pour réaliser des portes petit format.
Les travaux de gros-oeuvre et de gnolage lui prennent 1h par porte grand format et
2h par porte petit format.
Pour satisfaire la demande de sa clientèle, le menuisier doit travailler 6 heures par jour à
raison de 20 jours par mois.
56
Sachant que cette production artisanale lui rapporte 16 euros par porte grand format et
20 euros par porte petit format, quelle quantité de chaque article doit-il fabriquer par
mois ?
37. A l'occasion du mariage de votre soeur, votre père a décidé d'organiser une soirée. Il a
à sa disposition deux listes de personnes auxquelles il doit lancer des invitations : une
liste d'amis et une liste de relations qu'il serait de bon ton d'inviter. Inviter un ami lui
procure 2 unités de satisfaction et lui coûte 150 euros (ses amis sont de joyeux lurons)
alors qu'inviter une relation lui procure 1 unité de satisfaction mais ne lui coûte que 100
euros. Il veut retirer de sa soirée au moins 90 unités de satisfaction mais ne veut en aucun
cas dépenser plus de 7500 euros. Il désire aussi avoir au moins autant d'amis dans la salle
que de relations et veut faire participer le plus de monde possible à sa joie. Sachant que
la salle ne peut contenir plus de 100 personnes, quel est le nombre de personnes dans les
deux listes que vous proposeriez à votre père d'inviter ? Formulez le problème dual.
57
39. Soit le PL suivant
58
Chapitre 3
La gestion des stocks
Dans ce chapitre nous allons nous focaliser sur une classe bien précise de problèmes de recherche
opérationnelle : les problèmes liés à la gestion des stocks.
3.1 Introduction
En guise d'introduction nous allons étudier diérentes solutions du problème suivant, an de
nous convaincre de la nécessité d'optimiser méthodiquement la manière de gérer les stocks.
Exemple : Une entreprise qui fabrique des moteurs électriques doit faire face à une demande
approximativement constante de 3600 moteurs par an.
Un des composants de ces moteurs est acheté chez un fournisseur qui accepte une commande de
n'importe quelle quantité à n'importe quel moment mais avec des frais de mise en route de 2200
euros par commande (coût de lancement). D'autre part, le coût de stockage de ces composants
par l'entreprise est évalué à 26 euros par unité et par an. Les ruptures de stock sont exclues car
l'entreprise ne peut se permettre de ne pas livrer un moteur à ses clients.
La question est de déterminer la quantité de composants que l'entreprise doit commander en
une fois pour minimiser ses coûts.
Remarquons que le coût annuel d'approvisionnement est constitué essentiellement des coûts de
lancement et des coûts de stockage, nous donnant ainsi la formule générale :
Remarquons que pour déterminer les coûts de stockage sur une période, il est important de
déterminer quel sera le stock moyen durant toute la période où la marchandise sera stockée.
Pour cela, représentons la situation sur un graphique. On commence avec un stock de Q unités
(la quantité stockée est donnée sur l'axe des ordonnées) qui diminue linéairement en fonction
du temps (représenté par l'axe des abscisses). La variable T représente le temps qu'il faut pour
écouler la quantité Q.
Q
On peut se convaincre sur le graphique qu'en moyenne on va stocker unités durant une
2
période T. Ceci va nous aider à calculer le coût annuel d'approvisionnement.
59
Tentons une première solution pour notre problème : on pourrait commander 3600 composants
en début d'année. Ceci réduirait au minimum les frais liés aux coûts de lancement, mais maxi-
miserait les coûts liés au stockage de la marchandise. Le coût annuel d'approvisionnement dans
ce cas serait égal à :
3600
C = 2200 + · 26
2
= 2200 + 46800 = 49000 euros
3600
C = 2200 · 12 + · 26
2 · 12
= 26400 + 3900 = 30300 euros
On voit que le coût de cette nouvelle solution est signicativement plus bas que celui de la
solution précédente. Il apparaît naturellement que la stratégie à adopter ne doit pas être déter-
minée par le fruit du hasard. Au cours de ce chapitre, vous pourrez déterminer que la solution
optimale de ce problème est de passer une commande tous les 79 jours environ, et que le coût
total d'approvisionnement lié à cette solution est de 20 294 euros. Il y a donc moyen de faire
de belles économies pour l'entreprise à utiliser des moyens d'optimisation !
60
En x = a, il y a un minimum absolu/global.
En x = b, il y a un maximum local.
En x = c, il y a un minimum local.
En x = d, il y a un maximum absolu/global.
On rassemble tous ces types de points sous l'expression points extrêmes ou extrema.
Remarque : Dans la suite de ce chapitre, nous chercherons à caractériser les extrema locaux
uniquement.
Tentons à présent de trouver une caractéristique qui nous permettra de déterminer les extrema
locaux d'une fonction d'une variable. Observons la gure suivante :
61
On observe que la tangente à la courbe y = f (x) en c (maximum local) et en d (minimum local)
est horizontale, et donc que
f 0 (c) = 0 et f 0 (d) = 0.
Dénition 3.2.5 Un point c intérieur au domaine de f tel que f 0 (c) = 0 est appelé point
stationnaire.
On observe donc que pour avoir un point extrême local (attention, ceci n'est pas vrai pour les
extrema absolus de façon générale), il faut que ce point soit un point stationnaire. Ceci nous
mène à la proposition suivante :
Proposition 3.2.6 Soit f dérivable sur un intervalle I, soit c un point intérieur de I . Une
condition nécessaire pour que f admette un point maximum local ou minimum local en x = c
est que
Cette proposition est connue sous le nom de condition nécessaire de premier ordre.
ATTENTION : Il s'agit bien d'une condition nécessaire, mais malheureusement pas su-
sante. Cela signie que le fait de répérer qu'un point est un point stationnaire ne sut pas à
pouvoir établir le fait que ce point est un extrema local. En eet, il existe des points station-
3
naires qui ne sont pas des extrema ! Analysons la fonction f (x) = x dont le graphe est donné
0 2
ci-dessous. La dérivée de cette fonction est f (x) = 3x qui s'annule en x = 0. On peut donc
conclure qu'en x = 0 on a un point stationnaire. Mais, comme on peut l'observer sur le graphe,
il n'y a ni maximum local ni minimum local en x = 0. Il s'agit simplement d'un point où la
tangente au graphe en ce point est horizontale.
Nous devons donc nous demander comment distinguer un point stationnaire qui correspond à
un extremum local de celui qui n'y correspond pas.
62
On observe sur ces graphiques que lorsque le point stationnaire correspond à un maximum local,
il faut nécessairement que juste avant ce maximum la fonction soit croissante (et donc sa dérivée
doit être positive ou nulle), et que juste après la fonction soit décroissante (et donc sa dérivée
doit être négative ou nulle). Avec un même raisonnement, si le point stationnaire correspond à
un minimum local, la dérivée de la fonction doit être négative juste avant ce point, puis positive
3
juste après. Observons également que pour le point stationnaire de la fonction x , on n'observe
pas un tel changement dans le signe de la dérivée. Nous tenons donc ici une caractéristique
propre aux points stationnaires qui correspondent à des extrema : leur dérivée doit changer de
signe ! Ceci nous amène à la proposition suivante :
Proposition 3.2.7 Soit f dérivable sur son domaine Dom(f ). Soit c un point intérieur de
Dom(f ) tel que f 0 (c) = 0. Soit I un intervalle contenu dans Dom(f ) et contenant c.
f admet un maximum local en c si
63
f 0 (x) 6 0 ∀x ∈ I et x6c
f 0 (x) > 0 ∀x ∈ I et x>c
Cette proposition est connue sous le nom de condition susante du premier ordre (car
elle fait intervenir la dérivée première).
Nous avons à présent une caractéristique qui va nous permettre de déterminer les extrema
locaux d'une fonction. Toutefois, cette condition fait que nous devons déterminer le tableau de
signe de la fonction dérivée, ce qui peut, pour certaines fonctions, être dicile à déterminer.
Nous allons tenter de trouver une autre condition susante. Pour cela, observons les graphiques
suivants :
Cette proposition est connue sous le nom de condition susante du deuxième ordre (parce
qu'elle fait intervenir la dérivée seconde).
64
3.3 Les données des problèmes de gestion des stocks
Les problèmes de gestion des stocks traitent de la diculté de savoir comment gérer le stock
d'une marchandise an de satisfaire les uctuations de la demande. Il faut évidemment garder à
l'esprit que stocker une trop grande quantité engendrera des coûts de stockage importants, mais
stocker trop peu peut perturber la production ou la vente, voire entraîner une rupture de stock.
Il faut donc gérer les stocks et l'approvisionnement avec une grande minutie en minimisant une
fonction de coût. Cette fonction dépendra toujours des élément suivants :
1. Déterministe et constante, c'est-à-dire que la demande reste constante sur une année
(ne varie pas en fonction des mois) et on connaît exactement la quantité demandée
chaque mois.
3. Aléatoire et constante, c'est-à-dire qu'on sait que la demande reste la même tout au
long de l'année, mais on ne la connaît pas exactement.
4. Aléatoire et variable.
Le premier cas est le plus facile à traiter, le dernier étant le plus complexe.
Les coûts de lancement d'une commande ou d'une fabrication. Ce sont des coûts xes à
payer par commande, et qui ne dépendent pas de la quantité commandée.
Les coûts de stockage, qui comprennent l'intérêt sur le capital immobilisé, les frais de
loyer, d'entretien, de surveillance, d'assurance, ...
Le coût de rupture de stock qui peut parfois être estimé directement, ou xé indirecte-
ment au moyen d'une probabilité de rupture.
Essentiellement, dans tous les problèmes de gestion des stocks, il s'agit de répondre à deux
questions :
65
La demande est connue avec certitude, elle est constante et continue, exprimée par unité
de temps. Nous la noterons r.
Nous avons déjà abordé un tel problème dans l'introduction de ce chapitre (voir page 59).
Parmi les données du problème on retrouve la valeur CS , comme étant le coût de stockage par
unité et par unité de temps, CR le coût de lancement d'une commande et CA le coût d'achat
unitaire de la marchandise.
Le problème est toujours le même : on se demande quand et combien commander an de mi-
nimiser les coûts. La diculté réside donc dans l'écriture de cette fonction de coût. Dans le
modèle de Wilson comme pour les autres modèles que nous aborderons, il est souvent salutaire
de commencer par faire un dessin de la situation. Ce dessin comprend deux axes : l'axe ver-
tical représentant les quantités de marchandises, et l'axe horizontal le temps. Comme nous ne
savons pas encore combien nous allons commander ni à quelle fréquence, nous allons, comme
toujours en mathématiques, donner des noms à ces inconnues : Q sera la quantité que nous
commanderons, et T le temps entre deux commandes (le temps qui sépare deux commandes
est généralement appelé un cycle).
On doit maintenant écrire la fonction de coût que l'on désire minimiser. On sait que le coût
total par cycle est constitué du coût de lancement, du coût de stockage et du coût d'achat. On
peut donc écrire
Q
Ccycle (T, Q) = CR + · T · CS + Q · CA
2
Attention, on doit minimiser la fonction de coût par unité de temps, et pas la fonction de coût
par cycle ! Il faut donc multiplier par le nombre de cycles ! Or, le nombre de cycles peut être
exprimé en fonction de sa durée T.
66
Si on commande r pièces en une fois, la longueur du cycle est
r
T = =1 année
r
r
Si on commande pièces en une fois, la longueur du cycle est
2
r/2 1
T = = année
r 2
Il y a deux cycles par an.
r
Si on commande pièces en une fois, la longueur du cycle est
5
r/5 1
T = = année
r 5
Il y a 5 cycles par an.
···
Q
T = année
r
1
Il y a cycles par an.
T
Il suit que, comme le coût de réapprovisionnement par unité de temps (l'année ici) est égal au
coût de réapprovisionnement par cycle multiplié par le nombre de cycles, il sut de multiplier
1
la fonction Ccycle (T, Q) par :
T
1 Q Q
C(T, Q) = · CR + · CS + · CA
T 2 T
Q
On élimine une des deux variables grâce à la relation T = :
r
r Q
C(Q) = · CR + · CS + r · CA
Q 2
Notons que la partie liée au coût d'achat est constante. Elle n'interviendra donc pas dans notre
stratégie optimale (en eet, à partir du moment où on sait qu'on doit commander r pièces en
tout sur l'année au prix unitaire de CA , il est logique que ce prix soit le même qu'on passe nos
commandes en une ou 15 fois). Cette fonction est donc la somme d'une hyperbole, d'une droite
et d'une constante. La gure suivante donne une représentation graphique d'une telle fonction.
Il apparait sur le graphique que cette fonction admet un minimum à l'intersection de l'hyperbole
avec la droite. Vérions cela analytiquement. Comme rappelé lors de la section 3.2, nous devons,
pour déterminer un minimum local de cette fonction, déterminer les points stationnaires. Pour
cela, commençons par dériver la fonction :
r 1
C 0 (Q) = − 2
· CR + CS
Q 2
67
En un minimum, la dérivée doit être nulle. On cherche donc une valeur de Q telle que
r 1
− 2
· CR + CS = 0
Q 2
c'est-à-dire
r 1
2
· CR = CS
Q 2
Ceci est bien équivalent à (en multipliant par Q) :
r Q
· CR = CS
Q 2
Ce qui conrme que le minimum se trouve au point d'intersection de l'hyperbole et de la droite.
Déterminons donc la valeur de Q pour laquelle nous avons un point stationnaire :
r 1
2
· CR = CS
Q 2
CR
Q2 = 2r ·
CS
r
CR
Q = 2r ·
CS
De par le contexte nous ne considérons que la racine positive. Notons par Q∗ ce point station-
naire. Il nous reste à vérier que ce point stationnaire correspond bien à un minimum. On peut
choisir d'utiliser la condition susante du premier ou du deuxième ordre. Nous utilisons ici la
condition susante du deuxième ordre :
r 1
C 00 (Q) = (− 2
· CR + CS )0
Q 2
2r
= · CR
Q3
68
ce qui est bien positif quelle que soit la valeur de Q > 0. Il s'agit donc bien d'un minimum local.
Notons qu'il apparait clairement sur le graphique que ce minimum local est bien un minimum
absolu.
On peut donc nalement conclure que la meilleure stratégie à adopter est de commander à
chaque commande une quantité
r
∗ CR
Q = 2r ·
CS
La longueur optimale d'un cycle est de
r
Q 2 CR
T = = ·
r r CS
Le coût associé à cette solution est de
r Q∗
C(Q∗ ) = · C R + · CS + r · CA
Q∗ 2
r r
CS CS CR
= r· + 2r · + r · CA
2rCR 2 CS
r r
CR · CS · r CR · CS · r
= + + r · CA
r 2 2
CR · CS · r
= 2 + r · CA
p 2
= 2 · CR · CS · r + r · CA
69
Comme spécié sur le graphique, nous appellerons L le temps mis à être réapprovisionné.
Comme la relation obtenue dans le modèle de Wilson concernant le taux d'épuisement du stock
Q
r= on peut établir la relation concernant le taux de réapprovisionnement
T
Q
p=
L
La question à se poser est de savoir ce que ce délai d'approvisionnement change pour notre
problème d'optimisation. A priori, notre fonction de coût par cycle ou par unité de temps sera
toujours composée des frais liés au coût de lancement et au coût d'achat (qui eux ne seront
pas modiés par rapport au modèle de Wilson) et des frais liés aux coûts de stockage. Ce sont
ces derniers qui vont être modiés. En eet, pour connaître les coûts de stockage, il faut savoir
quelle quantité on stocke pendant combien de temps. Comme pour le modèle de Wilson, une
représentation graphique de la situation nous aidera :
DE
On voit sur le dessin que le stock moyen est donné par oùDE correspond au niveau
2
maximum de stock. Commençons donc par exprimer la valeur de DE en fonction des variables
et paramètres du problème :
DE = Q − CD
= Q−r·L
= p·L−r·L
p
= p·L− ·r·L
p
r
= p·L 1−
p
r
= Q· 1−
p
Q r
Le stock moyen est donc de · 1− . Les coûts de stockage par cycle sont donc donnés
2 p
par
Q r
· 1− · T · CS
2 p
70
On peut donc écrire la fonction de coût par cycle :
Q r
Ccycle (T, Q) = CR + · 1 − · T · CS + Q · CA
2 p
On en déduit la fonction de coût par unité de temps (rappelons que le nombre de cycles est
1
égal à ) :
T
1 Q r Q
C(T, Q) = · CR + · 1 − · CS + · CA
T 2 p T
Q
On remplace la variable T par :
r
r Q r
C(Q) = · CR + · 1 − · CS + r · CA
Q 2 p
Il nous reste à minimiser cette fonction. A nouveau, la fonction de coût s'obtient par l'addition
d'une hyperbole avec une droite, nous donnant le même genre de courbe que pour le modèle de
Wilson. On peut donc à nouveau se convaincre que le minimum de cette fonction correspondra
à l'intersection de l'hyperbole et de la droite. Cherchons à présent les points stationnaires :
0 r 1 r
C (Q) = − 2 · CR + · 1 − · CS
Q 2 p
Il faut annuler la dérivée :
r 1 r
− 2 · CR + · 1 − · CS = 0
Q 2 p
1 r r
· 1− · CS = · CR
2 p Q2
2 · r · CR
Q2 =
r
1− · CS
p
v
u 2·r·C
Q = u
u R
r
1− · CS
t
p
A nouveau, nous ne considérons que la racine positive. Comme pour le modèle de Wilson, le
critère de la dérivée seconde nous assure que ce point stationnaire est bien un minimum. Il faut
donc commander une quantité de
v
u 2·r·C
∗
Q = u
u R
r
1− · CS
t
p
an d'optimiser les coûts. Le coût associé àQ∗ est égal à
v
r 1 uu 2 · r ·CR r
C(Q∗ ) = v · CR + · u · 1− · CS + r · CA
u 2·r·C 2 t r p
u R 1− · CS
u
r p
1− · CS
t
p
71
Comme nous pouvons vérier qu'à l'optimalité les frais liés aux coûts de lancement et les frais
liés aux coûts de stockage sont égaux, on obtient
v
r
u
u r · CR · CS · 1 −
u
∗
t p
C(Q ) = 2 · + r · CA
2
s
r
= 2 · r · CR · CS · 1 − + r · CA
p
L'importation d'un lot d'axes de distributeur lui coûte 5 euros par pièce plus 200 euros par lot
pour frais de commande et de transport.
La réalisation d'un lot d'axes de distributeur dans ses ateliers lui coûte 25 euros en frais de
lancement de la production, plus 6, 25 euros par pièce. Un seul ouvrier est capable de réaliser
ce travail, et il ne peut en produire que 10 par jour.
A nouveau, nous devons écrire cette fonction de coût par unité de temps. Remarquons que
dans les deux précédents modèles le coût d'achat n'a jamais inuencé notre stratégie optimale
(pourquoi ?). Ici, ce coût d'achat aura clairement un impact puisque celui-ci est variable. La
fonction de coût sera donc composée de trois parties : les frais liés aux coûts de lancement, les
frais liés aux coûts de stockage et enn les frais liés au prix d'achat de la marchandise. Notons
par
72
p2 le prix avec rabais de la marchandise (si on commande une quantité supérieure ou
égale à A).
Nous faisons ici l'hypothèse que le prix de stockage, noté CS est proportionnel au prix unitaire,
c'est-à-dire
CS = CS0 · p
Ecrivons à présent la fonction de coût que l'on doit supporter si on commande une quantité
Q < A. Nous pouvons reprendre du modèle de Wilson (on suppose le réapprovisionnement
instantané)
r
les frais liés aux coûts de lancement : · CR
Q
Q Q
les frais liés aux coûts de stockage : · CS = · CS0 · p1 .
2 2
Il reste à inclure les frais liés au coût d'achat de la marchandise. Si on décide de commander
à chaque cycle une quantité inférieure à A, nous devrons payer les r unités sur l'année au prix
de p1 unité monétaire l'unité. Le coût d'achat sera donc p1 · r . Ainsi, on obtient la fonction de
coût dans le cas où Q<A :
r Q
C1 (Q) = · CR + · CS0 · p1 + p1 · r
Q 2
Par un même raisonnement nous obtenons la fonction de coût dans le cas où, an de bénécier
du rabais, nous commandons à chaque cycle une quantité Q>A :
r Q
C2 (Q) = · CR + · CS0 · p2 + p2 · r
Q 2
Remarque : Observons que cette fonction aura la même allure que dans les autres modèles
précédents : il s'agit de la somme d'une hyperbole, d'une droite et d'une constante. L'allure
du graphique de ces fonctions sera donc de même nature que le graphique du modèle de Wilson.
Comme à chaque fois, une représentation graphique de la situation peut grandement nous aider.
Etant données les deux courbes C1 et C2 , le graphique de la fonction objectif considérée est
donc déni par morceaux : il faut considérer le graphique de
73
C1 pour des quantités comprises entre 0 et A.
Notons par Q∗1 le minimum de la fonction C1 et par Q∗2 le minimum de la fonction C2 (ces
quantités se déterminent exactement de la même façon que pour le modèle de Wilson). Il ap-
paraît sur le graphique que le point le plus bas de ces deux courbes correspond à la quantité
Q∗2 . Donc, si pour la quantité Q∗2 on peut bénécier du prix p2 (autrement dit si Q∗2 > A),
∗ ∗
alors la quantité optimale est Q2 . En revanche, si Q2 < A, on ne bénéciera pas de ce prix en
Q∗2 . Regardons de manière plus précise les diérents graphes que l'on peut obtenir. La solution
optimale apparaîtra clairement.
Comme nous l'avons déjà souligné ci-dessus, dans ce cas la solution optimale est visiblement Q∗2 .
Dans la situation de gauche, on observe que le minimum se produit pour une quantité comman-
∗
dée A, car le point le plus bas que l'on obtient avec le prix p1 (autrement dit, Q1 ) correspond
à un prix supérieur au prix le plus bas que l'on obtient dans ce cas avec le prix p2 (autrement
dit pour une quantité A). On peut exprimer cela encore diéremment en disant que comme
C1 (Q∗1 ) > C2 (A), la quantité optimale à commander est A.
∗
Dans la situation de droite en revanche on observe que C1 (Q1 ) < C2 (A). Il est donc plus inté-
∗
ressant de commander une quantité Q1 même si on ne bénécie pas du rabais dans ce cas.
74
La règle de décision peut s'exprimer comme suit :
Exemple : On utilise régulièrement 480 tonnes par mois d'une certaine matière. On évalue à
50 euros les frais directs relatifs à une commande, tandis que le coût de possession est estimé,
pour cette matière, à 20% sur la valeur par an.
On reçoit une ore pour un prix de 50 euros la tonne avec une proposition de rabais d'1% pour
des livraisons de 500 tonnes et plus.
Quelle doit être la politique d'approvisionnement par année pour cette matière ?
Avant de nous intéresser à ce modèle, un petit rappel sur les notions statistiques-probabilistes
s'impose.
Il est souvent perturbant d'imaginer qu'on puisse prendre des décisions rationnelles et optimales
alors que les éléments nécessaires à la décision ne sont pas connus. Bien sûr, pour cela, il faut
que l'élément inconnu obéisse à certaines lois : si on lance un dé, le résultat est inconnu, mais
on est certain que le résultat sera un entier compris entre 1 et 6. Plus encore, on sait que la
distribution de probabilité du dé est uniforme, ce qui signie que si on lance un dé un très grand
nombre de fois, on admet que chaque résultat sera observé dans une même proportion (à savoir
1/6 dans ce cas). Il faut donc pouvoir décrire le hasard. Cela se fait au moyen, notamment, de
la fonction de distribution.
75
Histogramme et fonctions de densité
Au long de cette section, nous considérerons une demande aléatoire D pour un produit quel-
conque. En termes mathématiques, il s'agit d'une variable aléatoire, c'est-à-dire un être ma-
thématique qui à chaque fois qu'on l'évalue, prend une valeur diérente de manière imprévisible.
La source d'erreur la plus fréquente vient de la confusion entre deux outils statistiques à pre-
mière vue semblables, mais en réalité très diérents : la fonction de densité et l'histogramme.
Un histogramme est une représentation graphique d'un phénomène aléatoire qui ne peut prendre
ses valeurs que dans un ensemble dénombrable (généralement ni), tel qu'un lancement de pièce
de monnaie ou de dé, un tirage de carte... Ce phénomène est souvent mesuré par un nombre
entier ou rationnel. On parle d'un phénomène discret.
Par contre, la fonction de densité rend compte d'un phénomène aléatoire qui prend ses valeurs
dans un ensemble non dénombrable ; il s'agit généralement d'un phénomène qui se mesure dans
un sous-ensemble des nombres réels (une taille, un poids...). On parle d'un phénomène continu.
Il faut se rendre compte que très souvent, la classication entre phénomènes discrets et continus
comporte une part d'arbitraire. Par exemple, le lancement d'un dé est, par nature, discret. Mais
qu'en est-il de la demande d'un produit ? Si l'on parle de la demande de navires adressée chaque
année à un chantier naval, on parlera d'un phénomène discret ; si, par contre, on s'intéresse à
la quantité de sable commandée chaque année par une société de travaux publics, qu'en est-il ?
Si l'on compte en tonnes, on peut estimer qu'il s'agit d'un phénomène continu, puisque comp-
tabilisé par un nombre réel comme 388,232 tonnes. Bien entendu, on peut prétendre qu'aucun
comptable sensé n'utilisera dans ce cas plus de trois décimales et qu'il s'agit donc d'un nombre
entier de kilogrammes. En poussant le raisonnement plus loin, on peut également imaginer de
compter les grains de sable ! Bref, on choisit souvent d'utiliser une variable continue plutôt que
discrète pour des raisons de bon sens et de facilité, notamment mathématique.
Pour les phénomènes continus on ne peut par dénition pas faire une énumération de tous les
résultats possibles. L'utilisation d'un histogramme tel que celui décrit ci-dessus est donc impos-
sible. Les phénomènes continus sont souvent représentés par une courbe qui doit être interprétée
d'une façon radicalement diérente : la probabilité se mesure en fonction de la surface située
en dessous la courbe. La gure suivante représente une telle courbe (fonction de densité).
76
On suppose que la surface totale en dessous de la courbe (et au-dessus de l'axe horizontal)
vaut 1, c'est-à-dire 100 %. On l'interprète comme suit : si la surface comprise entre 3 et 5 sous
la courbe (partie sombre du graphe) vaut 42 % de la surface totale, alors la probabilité que
la variable aléatoire soit comprise entre 3 et 5 est de 0, 42. Ceci entraîne que la probabilité
que la variable aléatoire prenne une valeur précise est toujours nulle ! ! ! On en arrive ainsi à
la conclusion paradoxale que, pour les variables aléatoires continues, toute valeur possède a
priori une probabilité nulle d'être choisie et donc que le résultat constaté a posteriori avait une
probabilité nulle de se présenter !
Fonction de distribution
En pratique, dans la résolution des exercices de gestion de stock, on utilisera un troisième type
de graphique : la fonction de distribution ou fonction cumulative. Celle-ci a l'avantage
d'être dénie de la même façon pour les variables aléatoires continues et discrètes.
La fonction de distribution d'une variable aléatoire Q présente un graphique dont l'axe hori-
zontal représente un nombre réel x mesuré dans les mêmes unités que la variable aléatoire et
dont l'axe vertical mesure la probabilité :
FD (x) = P [Q 6 x]
c'est-à-dire la probabilité que la variable aléatoire Q soit inférieure ou égale à x. Un exemple
d'une telle fonction est donné à la gure suivante :
77
Remarque : les variables aléatoires discrètes ont une fonction de distribution en escaliers, les
variables aléatoires continues ont une fonction de distribution continue, qui peut être linéaire
par morceaux ou dérivable.
Nous travaillons ici sur un modèle alors qu'une partie des données (la variable x) est inconnue
ou incertaine. L'hypothèse généralement admise est de supposer que l'utilisateur va raisonner
en moyenne et donc supposer qu'il sera confronté un très grand nombre de fois à la même
situation ou à une situation comparable et que, l'un dans l'autre, à long terme les bons résultats
compenseront les mauvais. Il ne s'agit que d'une hypothèse et, avant de l'admettre, il convient
d'en apprécier la pertinence.
Il faut en premier lieu que les résultats puissent se compenser : jouer à la roulette russe avec une
chance sur deux de gagner 1 million de dollars ne va pas donner comme résultat un demi-mort
possédant un demi-million de dollars.
Ensuite, il faut que les gains (ou les pertes) hauts et bas soient appréciés avec le même déta-
chement. Or, dans la réalité, on ne joue pas mille dollars à pile ou face de la même façon selon
que l'on est SDF, étudiant ou milliardaire.
Par contre, il n'est pas besoin de devoir être confronté à la même situation pour admettre l'hy-
pothèse : il sut de pouvoir utiliser les mêmes principes de décision un grand nombre de fois,
même si la situation varie d'un cas à l'autre. Par exemple, si vous devez jouer 1 000 000 euros
à pile ou face, en jouant 1 million de fois 1 euro, le résultat sera très proche de l'espérance de
gain : à savoir 1 000 000 euros. Si, par contre, vous les jouez en une fois vous terminerez avec
2 000 000 euros ou rien du tout. La moyenne est la même, la variance est très diérente.
Du point de vue mathématique cette hypothèse s'avère très pratique puisqu'elle permet de
calculer la stratégie optimale en minimisant l'espérance mathématique du coût d'approvision-
nement par cycle.
78
On arrive en n de période avec un surplus de marchandise (on n'a pas tout vendu).
On obtient que le coût de réapprovisionnement dans cette situation est de CR +CS ·(S−x).
On arrive en n de période avec une rupture de stock.
Comme nous supposons que la longueur du cycle T est xée, il suit que le coût de lancement
n'a pas d'importance dans ce modèle. L'espérance mathématique du coût d'approvisionnement
par cycle s'exprime donc de la façon suivante :
Z S Z +∞
E [Ccycle (S)] = CS · (S − x) · f (x) dx + Crupt · (x − S) · f (x) dx
0 S
Il s'agit d'une fonction de la variable S. Pour déterminer la valeur de S qui minimise cette
fonction, nous devons la dériver. Nous devons pour cela nous référer au résultat suivant, donné
sans démonstration :
Théorème 3.7.1
R b(S)
Si p(S) = a(S)
f (x, S) dx, alors
Z b(S)
dP (S) ∂f (x, S) db(S) da(S)
= · dx + · f (b(S), S) − · f (a(S), S)
dS a(S) ∂S dS dS
Commençons par calculer la dérivée de la première intégrale (dans ce cas, la fonction f (x, S)
du théorème ci-dessus est la fonction (S − x) · f (x)) :
79
Z S 0 Z S 0
CS · (S − x) · f (x) dx = CS · (S − x) · f (x) dx
0 S 0
Z S
= CS · 1 · f (x) dx + 1 · (S − S)f (S) − 0
0
Z S
= CS · f (x) dx
0
Z +∞ 0 Z +∞ 0
Crupt · (x − S) · f (x) dx = Crupt · (x − S) · f (x) dx
S S S
Z +∞
= Crupt · (−1) · f (x) dx + 0 − 1 · (S − S) · f (S)
S
Z +∞
= −Crupt · f (x) dx
S
Il vient donc
S +∞
dE [Ccycle (S)]
Z Z
= CS · f (x) dx − Crupt · f (x) dx
dS 0 S
Or, par dénition, on a
Z S
f (x) dx = F (S)
0
Z +∞
f (x) dx = 1 − F (S)
S
On peut donc réécrire la dérivée de E[CCycle (S)] en fonction de cette fonction F (S) :
dE [Ccycle (S)]
= CS · F (S) − Crupt · (1 − F (S))
dS
Comme nous cherchons un point stationnaire, nous devons déterminer la (les) valeur(s) S∗ qui
annule(nt) cette dérivée :
CS · F (S ∗ ) − Crupt · (1 − F (S ∗ )) 0 =
⇔ CS · F (S ∗ ) Crupt · (1 − F (S ∗ ))
=
⇔ CS · F (S ∗ ) + Crupt · F (S ∗ ) Crupt =
⇔ F (S ∗ )(CS + Crupt ) Crupt =
Crupt
⇔ F (S ∗ ) =
CS + Crupt
80
Pour déterminer S ∗, il faut donc trouver quelle est l'abscisse de la fonction de distribution
Crupt
cumulée qui a pour image , comme indiqué sur le graphique ci-dessous :
CS + Crupt
∗
Inversement, si Crupt devient très grand ou si CS devient relativement petit, alors F (S ) tend
∗
vers 1 et S doit être grand. En d'autres termes si le coût pour une unité manquante devient
très grand ou si le coût d'approvisionnement et de stockage est très petit, il est plus intéressant
d'avoir un stock important. Ce qui est tout aussi logique.
Tout l'art de la résolution des exercices consiste donc à déterminer à partir des informations
reçues
2. Le coût subi pour une unité manquante par rapport au stock en début de période.
Les problèmes de recherche opérationnelle liés concernant les stocks de sécurité sont à la limite
de ce qu'il est possible d'aborder au sein de ce cours, que ce soit au niveau de la diculté
théorique ou de la complexité des calculs.
Dans la pratique, on recourt généralement à des logiciels spécialisés pour résoudre ces pro-
blèmes et l'important est donc d'en comprendre le fonctionnement et, surtout, les limites de la
81
modélisation qu'ils proposent. Nous nous contenterons ici d'étudier un cas très simple.
Le problème est le suivant : un gestionnaire de stock est confronté à une demande aléatoire,
un coût de réapprovisionnement, un coût de rupture et un délai de réapprovisionnement non
négligeables. Par conséquent, il est tiraillé entre le fait de commander rapidement lorsque son
stock diminue et de supporter des frais de réapprovisionnement fréquents ou de retarder ses
commandes et de risquer des coûts de rupture.
L : la durée de réapprovisionnent ;
CS : le coût de stockage exprimé en unité monétaire par unité de produit et par unité
de temps ;
CR : le coût de réapprovisionnement ;
Ssec : le niveau du stock de sécurité, c'est-à- dire le niveau du stock en dessous duquel
le gestionnaire doit lancer une nouvelle commande Q∗ .
La grande simplication que l'on pose au niveau de la résolution théorique est de supposer que
l'on peut travailler en deux étapes successives :
r
∗ CR
Q = 2r
CS
Et la durée de la période correspondante T ∗ (toujours en supposant la demande constante)
est :
Q∗
T∗ =
r
On suppose alors que le niveau de réapprovisionnement est connu et que le second
problème consiste à déterminer le stock de sécurité de façon à minimiser l'espérance des
coûts. Et l'on trouve (par une dérivation non triviale de l'espérance des coûts) que le
niveau du stock de sécurité Ssec satisfait à la relation :
CS Q∗ CS · T ∗
F (Ssec ) = 1 − =1−
Crupt r Crupt
82
Enn, quelques remarques de bon sens peuvent vous aider à évaluer la solution obtenue :
si les coûts de stockage sont élevés, le stock de sécurité sera relativement bas, le gestion-
naire se préservant de stocks minimums importants qui constituent une sorte de frais
xes importants ;
à l'inverse, des coûts de rupture importants provoquent une hausse du niveau du stock
de sécurité.
83
3.8 Exercices
1. Walmark Store compresse et met en palette les emballages vides destinés au recyclage. Le
magasin produit cinq palettes par jour. Le coût de stockage dans l'entrepôt du magasin
est de 0, 10 euros par jour.
La société qui transporte les palettes destinées au recyclage facture un montant forfaitaire
de 100 euros pour la location du matériel de manutention et un coût de transport de 3
euros par palette.
En eet, une étude de marché lui a montré qu'il pourrait vendre de façon continue 100
exemplaires la première quinzaine et 150 exemplaires la seconde quinzaine, le nombre de
pages de ces derniers étant plus important.
Votre marchand de journaux estime son coût de stockage à 0, 01 euros par journal et par
jour et son coût de rupture à 0, 40 euros par pièce. Il a, par ailleurs, la possibilité d'écouler
sur un marché extérieur les périodiques invendus, moyennant une perte de 0, 13 euros par
pièce.
3. Soit un client qui commande des pièces détachées à un rythme de 2400 pièces par an. La
compagnie qui fournit ces pièces peut les produire en n'importe quelle quantité à n'im-
porte quel moment.
Le coût de mise en route de la machine est de 105 euros. Le coût de stockage d'une pièce
détachée est de 1, 4 euros par pièce et par an. On refuse toute rupture de stock !
4. Un vendeur de produits périssables doit rendre un rapport mensuel. Son entreprise est
organisée de façon à considérer qu'un mois comporte 4 semaines de 5 jours. On sait que
la demande s'exprime uniquement en n de journée et vaut 5 unités par semaine. Le coût
de possession d'une unité est de 3 euros par jour. Quels sont les coûts de stockage si on
eectue :
84
5. La rme BETONEX est une entreprise qui fabrique des dalles et des tuyaux en béton.
Dans la mesure de son temps disponible, l'entreprise fabrique des dalles qui sont vendues
et livrées immédiatement.
Déterminez la quantité optimale de tuyaux en béton que la rme doit fabriquer lors de
chaque lancement ainsi que la période optimale de ces lancements.
La réalisation de cet article se fait en deux étapes principales : le gros oeuvre et la nition.
L'artisan eectue d'abord le gros oeuvre d'une certaine quantité d'articles au rythme de
30 gros oeuvres par jour. Il achève ensuite ces articles à raison de 20 par jour. Abandon-
nant la production, il peut alors eectuer lui-même la livraison de ses articles au prix de
5 euros la pièce. La capacité de livraison est de 60 produits nis par jour.
coût de stockage : 0, 075 euros par jour et par article entré dans le cycle de fabrication ;
coût de démarrage du matériel destiné au gros oeuvre : 150 euros ;
coût de démarrage du matériel nécessaire à la nition : 75 euros ;
coût d'utilisation du matériel de livraison : 5 euros/jour.
b) Pour avoir des livraisons plus rapprochées, le client serait disposé à payer plus cher
les articles. L'artisan se propose alors de faire le gros oeuvre d'une certaine quantité
d'articles, d'en nir la moitié et de la livrer puis de terminer l'autre moitié et de la
livrer. Quel doit être le nouveau plan de production ? De combien l'artisan doit-il
augmenter le prix de l'article pour garder le même bénéce ?
7. Une entreprise prévoit que la demande de l'article AA qu'elle distribue devrait être de 4000
unités pour l'année. Le coût de passation/lancement d'une commande est de 100 euros. Le
coût de possession en stock est de 10% de la valeur d'achat de l'article. Le fournisseur de
cet article pour inciter ses clients à augmenter l'importance de leurs commandes propose
à l'entreprise les conditions suivantes :
85
a) Quantités commandées inférieures à 2000 unités : prix unitaire de 8 euros.
(c) Que se passe-t-il si les prévisions de demande passent à 6000 unités par an ?
8. Une société de distribution vend des batteries AA à raison de 15 000 unités par an.
Cette demande est répartie uniformément sur l'année qui comporte 50 semaines. Le prix
d'achat unitaire est de 16 euros. Le coût d'une commande est de 24 euros quelle que soit
la quantité. Comme le matériel se déprécie rapidement, il faut compter qu'un matériel
détenu en stock perd (linéairement) toute sa valeur en un an.
b) Actuellement, la société utilise la politique suivante : elle dispose de deux bacs conte-
nant au maximum 500 pièces. Dès qu'un bac est vide, la société repasse une commande
de 500 pièces. Par rapport à cette stratégie, quel est le gain annuel que vous allez réa-
liser ?
c) La société vend également des batteries BB à raison de 15 000 unités par an dont le
coût d'achat unitaire est de 20 euros . Sachant que la société s'approvisionne auprès
du même fournisseur que pour les batteries AA, la société a-t-elle intérêt ou non à
grouper ses commandes ?
9. Un industriel utilise une matière dont le délai de réapprovisionnement est de deux se-
maines. D'après les statistiques du passé, il a pu arriver à certaines conclusions sur les
caractéristiques de sa consommation :
La demande globale annuelle est remarquablement stable aux environs de 39 000 kgs ;
prix : 5 euros le kg ;
coût de lancement : 195 euros ;
coût de possession : 20% sur le prix par kg et par an ;
coût de rupture : 1 euro par kg manquant et par pénurie.
10. Monsieur Léon est très connu pour ses moules au vin blanc. La preuve en est que, sur
une soirée, il espère accueillir entre 50 et 100 personnes les jours de petite auence et
entre 200 et 300 personnes les jours de grande auence. Monsieur Léon considère qu'il y
a autant de chance d'avoir un jour de petite auence qu'un jour de grande auence. Par
ailleurs, la répartition de la demande à l'intérieur de chaque intervalle est uniforme.
86
Monsieur Léon vend sa portion de moules 15 euros et réalise une marge de prot de 50%
sur sa vente.
Si, sur sa soirée, il manque des portions de moules, Monsieur Léon a toujours la possibilité
d'en préparer, mais avec un coût de 20% supérieur au coût normal. Le client qui aura pris
le temps d'attendre (en moyenne 75% des clients concernés) sera ainsi servi. Par contre,
si toutes les portions ne sont pas vendues, Monsieur Léon estime qu'il subit un coût de 1
euro de stockage (surgélation) par portion non vendue.
Combien de portions de moules notre ami Léon doit-il avoir en stock en début de sa
soirée ?
11. Un grossiste en produits pharmaceutiques doit faire face à une demande aléatoire de ME-
GARDOL : cette demande suit une distribution uniforme entre 250 et 350 acons tous
les deux jours.
Le délai d'approvisionnement normal du grossiste est de deux jours. Le prix d'achat est
de 2, 5 euros le acon ; le coût de lancement d'une commande normale est de 7, 5 euros.
Les frais de stockage du MEGARDOL sont de 0, 025 euro par jour et par acon.
b) Quel stock de sécurité lui conseillez-vous s'il ne possède que des données journalières
sur la demande et que celle-ci suit une distribution uniforme entre 100 et 200 acons
par jours ?
Les services de marketing ont déterminé qu'il y avait autant de chances d'avoir demandé
entre 300 et 350 unités qu'une demande entre 275 et 300 unités (à l'intérieur de ces deux
intervalles, la demande est uniforme).
Si l'article n'est pas vendu à la n de l'automne, il sera liquidé au cours des soldes à 50%
du prix de vente. Toute demande non satisfaite entraîne un préjudice évalué à 50 euros.
Les frais de lancement de la commande s'élèvent à 125 euros et le prix de vente d'un
PLASTICUNIK est de 200 euros.
87
13. Un boulanger a observé que dans 25% des cas la demande journalière de ses clients se
situait entre 101 et 125 pains ; dans 50% des cas, elle oscille entre 126 et 150 pains et, dans
les autres cas, elle va de 151 à 175 pains. À l'intérieur de ces intervalles, la distribution
de la demande est uniforme.
Le boulanger vend son pain à 1,50 euros. Il écoule les pains non vendus en n de journée
à une oeuvre de charité et se contente d'un prix de 0,1 euro par pain.
En outre, il estime que toute demande non satisfaite lui cause un préjudice de 0,50 euro.
14. Devant assurer la diusion d'un périodique vendu 2 euros pièce, un marchand de journaux
a relevé les données nécessaires pour déterminer la quantité optimale de commande :
88
Chapitre 4
La théorie des graphes
Dans ce chapitre, nous allons introduire la notion de graphes et nous consacrer à la résolution
de deux problèmes majeurs de la théorie des graphes : le problème de la recherche de l'arbre
couvrant de poids minimum ainsi que le problème du plus court chemin. Pour ce dernier, nous
allons voir diérentes méthodes de résolution. Avant cela, nous allons présenter un bref histo-
rique ainsi que quelques dénitions.
Est-il possible de partir d'une des 4 terres, de traverser chacun des 7 ponts exactement une
fois, et de revenir à l'endroit initial ?
Euler modélisa cette situation à l'aide d'un dessin : il représenta chaque partie de terre par un
point, et chaque pont par un trait.
89
Il est assez facile de se convaincre, sur ce graphe, qu'il n'existe pas de tel parcours. Euler
présenta la solution de ce problème à l'académie de Saint Pétersbourg en 1735. Il réussit à
déterminer une condition nécessaire et susante pour qu'un tel parcours existe, quel que soit
le graphe que l'on étudie (pouvez-vous donner cette condition ?).
4.2 Dénitions
Dans cette section, nous apportons quelques dénitions élémentaires.
90
V := {1, 2, 3, 4, 5}
A := {(2, 4); (3, 4); (4, 3); (5, 3)}
E := {(1, 2); (1, 3); (4, 5)}
Graphiquement, les noeuds sont représentés par des points, les arcs par des traits échés,
et les arêtes par des traits, dont les longueurs n'ont aucune importance. Les deux graphes ci-
dessous sont identiques :
Attention : les arcs et arêtes ne peuvent avoir des intersections qu'en des noeuds. Dans la
gure ci-dessus, les arêtes (2, 4) et (1, 3) n'ont pas de noeuds communs.
Dénition 4.2.2 Un chemin est une séquence nie alternée de noeuds et d'arcs/arêtes telle
que chaque arc/arête est sortant d'un noeud et incidant au noeud suivant. Chaque arc doit être
parcouru dans le bon sens et aucun noeud ne peut être parcouru plus d'une fois.
91
Contre-exemple : Ceci n'est pas un chemin entre le noeud 1 et le noeud 5 :
Exemple :
Dénition 4.2.4 Un graphe est connexe si toute paire de noeuds est reliée par au moins un
chemin.
Contre-exemple : le graphe suivant n'est pas connexe car il n'existe pas de chemin entre le
noeud 1 et le noeud 5 :
92
Dénition 4.2.5 Un arbre est un graphe connexe sans cycle (non orienté).
Exemple :
Dénition 4.2.6 Un arbre couvrant de G est un arbre qui inclut tous les noeuds de G (non-
orienté).
Exemple :
Bien sûr, le moyen le plus naturel de décrire un graphe est d'en donner une représentation
(attention, celle-ci n'est pas unique). Voici une représentation d'un graphe :
93
On peut aussi décrire ce graphe de manière plus algébrique en donnant la liste de ses noeuds,
arcs et arêtes :
V := {1, 2, 3, 4, 5}
A := {(2, 4); (3, 4); (4, 3); (5, 3)}
E := {(1, 2); (1, 3); (4, 5)}
Enn, la manière la plus commode (utilisée en informatique) est encore d'encoder un graphe
sous la forme d'une matrice carrée appelée matrice d'adjacence. Supposons que le graphe
possède n noeuds, il pourra alors être décrit par une matrice carrée de dimension n (c'est-à-dire
possédant n lignes et n colonnes), dans laquelle l'entrée aij décrira s'il existe un arc qui va du
noeud i au noeud j ou s'il existe une arête entre i et j . De manière plus formelle, on dénit
l'entrée aij de cette matrice de la façon suivante :
1 s'il existe un arc de i à j ou s'il existe une arête (i, j)
aij :=
0 sinon
0 1 1 0 0
1 0 0 1 0
1 0 0 1 0
0 0 1 0 1
0 0 1 1 0
Notons que si le graphe est uniquement constitué d'arêtes (c'est-à-dire s'il est non orienté) alors
la matrice d'adjacence sera symétrique (autrement dit on aura toujours aij = aji ).
Finalement, comme nous le verrons dans la suite de ce chapitre, il n'est pas rare d'associer à
chaque arc/arête du graphe un poids ou une longueur `ij . On peut également encoder un tel
graphe à l'aide d'une matrice. De manière plus formelle, on dénit l'entrée `ij de cette matrice
de la façon suivante :
94
4.4 Le problème de l'arbre couvrant de poids minimum
Considérons le problème qui consiste à relier n villes par un réseau cablé de la manière la
plus économique possible. Le réseau doit être connexe (an que toutes les villes soient reliées)
et ne doit pas admettre de cycle (pour ne pas construire de réseaux superus). Il s'agit donc
de trouver au sein du réseau un arbre couvrant de poids minimum. Nous considérerons dans
cette section que le graphe est uniquement constitué d'arêtes, c'est-à-dire que le graphe est
non-orienté.
Etant donné un graphe orienté G = (V, A, E), on associe à chaque arc (i, j) ∈ A un nombre
réel
`ij ∈ R
appelé "longueur" de l'arc. En réalité, cette longueur peut représenter autre chose qu'une dis-
tance suivant le contexte du problème.
Exemple : on désire déterminer l'arbre couvrant de poids minimum dans le graphe suivant :
95
Nous allons ici aborder l'algorithme de Kruskal pour résoudre ce problème. Nous noterons par
V l'ensemble des noeuds du graphe,
Ck l'ensemble des noeuds connectés lors de l'itération k ou avant,
C̄k l'ensemble des noeuds à connecter après l'itération k.
Algorithme de Kruskal :
Step 0 : On initialise C0 = φ et C̄0 = V
Step k : Choisir une arête de poids minimal qui a un pied dans Ck−1 et l'autre dans C̄k−1 .
Soit j le noeud de C̄k−1 qui est l'extrémité de cette arête.
Ck := Ck−1 ∪ {j} et C̄k := C̄k−1 \ {j}.
Si C̄k = φ, alors STOP
sinon k := k + 1
Cet algorithme est un algorithme de type "glouton" (greedy algorithm), c'est-à-dire qu'à chaque
itération il choisit une meilleure solution.
X
`(a)
a∈µ(i,j)
soit minimale.
96
4.5.2 Principes de programmation dynamique
Nous allons présenter ici le principe général de programmation dynamique introduit dans les
années 1950 par Bellman. Nous verrons par la suite deux célèbres exemples de ce type d'al-
gorithme pour résoudre le problème du plus court chemin : l'algorithme de Bellman-Ford et
l'algorithme de Dijkstra.
Commençons par observer la propriété suivante : supposons que nous savons que, dans un graphe
donné, le plus court chemin entre le noeud 1 et le noeud 10 est le chemin 1 − 3 − 6 − 8 − 10.
Est-ce qu'on peut en déduire que le plus court chemin entre le noeud 3 et le noeud 8 est 3−6−8 ?
Il est assez intuitif de répondre à cette question par l'absurde : supposons que le chemin 3−6−8
ne soit pas optimal. Alors, cela signie qu'il existe un autre chemin entre 3 et 8 qui soit plus
court. Il serait donc plus intéressant d'emprunter ce chemin plus court entre 3 et 8 ce qui aurait
pour eet de diminuer la longueur du chemin entre 1 et 10. Mais ceci n'est pas possible vu
qu'on a supposé le chemin 1 − 3 − 6 − 8 − 10 comme étant le plus court. La contradiction nous
permet donc d'armer que le chemin 3 − 6 − 8 est lui aussi optimal.
Il est tentant de conclure de ce qui précède que tous les sous-chemins d'un chemin optimal
sont également optimaux... Malheureusement, il existe un contre-exemple. En eet, s'il existe
un cycle de longueur négative, c'est-à-dire un cycle dont la somme des longueurs des arêtes ou
arcs le constituant est négative, alors ce principe n'est pas valable. Voyons cela sur la gure
suivante
Sur cet exemple, nous voyons que le plus court chemin entre le noeud source 1 et le noeud 3
est le chemin 1−2−3 de longueur 5. On voudrait donc pouvoir conclure que le chemin le plus
court entre 1 et 2 est le sous-chemin 1−2 de longueur 2. Or, le chemin 1−3−4−2 est plus
court car de longueur égale à −3 (notons qu'on ne peut utiliser ce sous-chemin comme chemin
pour aller de 1 à 3 car la séquence 1 − 3 − 4 − 2 − 3 n'est pas un chemin car elle passe deux fois
par le noeud 3). Heureusement, dans beaucoup de problèmes les graphes ne contiennent pas
de cycle de longueur négative. Nous devrons donc utiliser le résultat vu plus haut en vériant
d'abord que le graphe ne contient pas de cycle de longueur négative.
97
Théorème 4.5.1 Principe d'optimalité :
Dans un graphe ne contenant pas de cycle de longueur négative, tout sous-chemin d'un plus
court chemin est un plus court chemin entre ses extrémités.
v[k] := longueur du plus court chemin entre le noeud source et le noeud k (= +∞ si un tel
chemin n'existe pas).
Proposition 4.5.2 Les fonctions de récurrence pour le problème du plus court chemin d'un
noeud source s à n'importe quel noeud du graphe sont :
v[s] = 0
v[k] = min{v[i] + `ik : (i, k) ∈ A ou E}
Notons qu'en l'absence de cycle de longueur négative, les longueurs des plus courts chemins
satisfont les équations de récurrence car elles satisfont au principe d'optimalité. Evidemment,
il faudrait que ce résultat, pour pouvoir être utilisé, soit valable dans les deux sens. Ce qui est
le cas (nous donnons ce résultat sans démonstration).
Théorème 4.5.3 Dans un graphe sans cycle de longueur négative, les valeurs v[k] représentent
la longueur du plus court chemin entre le noeud source s et le noeud k si et seulement si ces
valeurs satisfont les équations de récurrence.
Remarque : Il suit de ce résultat que pour déterminer les longueurs v[k] il sut de calculer
les valeurs qui satisfont les fonctions de récurrence.
Pour nous convaincre de ce résultat (en réalité nous sommes déjà convaincus que c'est bien une
condition nécessaire, voyons qu'elle est susante, c'est-à-dire que nous devons nous convaincre
que si on a des valeurs v[k] qui satisfont les équations de récurrence alors elles correspondent
bien à des valeurs de plus courts chemins) nous allons examiner le graphe suivant dans lequel le
noeud source est le noeud 3 et pour lequel nous avons déjà calculé les valeurs v[k] satisfaisant
les équations de récurrence (voir livre (3)).
Nous allons seulement vérier que la valeur v[4] = 623 correspond bien à la longueur du plus
court chemin entre le noeud 3 et le noeud 4. Cette vérication se fait en deux temps :
1. Nous vérions d'abord que v[4] = 623 correspond bien à la longueur d'un chemin entre le
noeud source 3 et le noeud 4. Par dénition, on a
98
Dans notre cas on a
Ici on a donc que v[4] = v[5] + `54 . Déterminons quel est le prédécesseur du noeud 5 :
On continue ainsi jusqu'à arriver au noeud source (ce qui est le cas ici). On peut donc
recomposer la valeur v[4] :
On a donc bien que v[4] correspond à la longueur d'un chemin, qui est le chemin 3 − 5 − 4.
99
2. Nous devons maintenant vérier que ce chemin 3 − 5 − 4 est bien le plus court entre le
noeud 3 et le noeud 4. Prenons par exemple le chemin 3 − 1 − 2 − 4. Comme nous savons
que les valeurs v[k] satisfont les équations de récurrence, on peut écrire
On obtient donc
Nous venons de voir par le principe de la programmation dynamique que déterminer les lon-
gueurs des plus courts chemins entre un noeud source s et tous les autres noeuds du graphe
revient à calculer les quantités v[k] qui satisfont les équations de récurrence dénies plus haut.
Notre problème revient donc à trouver une méthode ecace permettant de calculer ces quanti-
tés. Notons que si le graphe ne contient pas de cycle, ces valeurs sont assez faciles à déterminer.
Les dicultés commencent quand nous avons une conguration comme celle-ci
100
Si on écrit les équations de récurrence on obtient
v[1] = min{v[3] + 5, · · · }
v[2] = min{v[1] + 2, · · · }
v[3] = min{v[2] + 4, · · · }
On constate ici que pour déterminer la valeur de v[1] nous avons besoin de la valeur de v[3] qui
elle-même nécessite la valeur de v[2] v[1]. En conclusion,
pour laquelle nous avons besoin de
pour déterminer la valeur de v[1] nous avons nécessairement besoin de la valeur de v[1]... L'idée
de l'algorithme de Bellman-Ford (1956) est d'évaluer ces valeurs à répétition.
Algorithme de Bellman-Ford : pour déterminer un plus court chemin entre le noeud source
s et tous les autres noeuds du graphe :
Step 0 : Initialisation
0 si k=s
v0 [k] := ∀k ∈ A ∪ E
+∞ sinon
t := 1
Step 1 : Evaluation
pour tout k 6= s :
vt [k] := min{vt−1 [i] + `ik : (i, k) ∈ A ∪ E}
Si vt [k] < vt−1 [k], alors stocker le noeud prédécesseur dans d[k]
Step 2 : Arrêt
On arrête l'exécution dans les cas suivants :
• vt [k] = vt−1 [k] pour tout k
si
• si t = n (nombre de noeuds dans le graphe) (attention, si des
valeurs de vt [k] ont été modiées à la dernière itération t, cela signie
que le graphe contient un cycle de longueur négative !
Step 3 : Progression
Si au moins une des valeurs vt [k] a été modiée et que t<n alors
t := t + 1 et on retourne au Step 1.
Exemple : Supposons que nous voulions déterminer les plus courts chemins depuis le noeud 1
vers tous les autres noeuds du graphe suivant :
101
Appliquons l'algorithme de Bellman-Ford :
A l'étape 0 on a :
v0 [1] := 0
v0 [2] := +∞
v0 [3] := +∞
v0 [4] := +∞
v0 [5] := +∞
v0 [6] := +∞
A l'étape t := 1, on a
v1 [1] := 0
v1 [2] := min{v0 [1] + `12 } = 0 + 2 = 2
v1 [2] < v0 [2] ⇒ d[2] := 1
v1 [3] := min{v0 [1] + `13 ; v0 [2] + `23 } = min{0 + 5; +∞} = 5
v1 [3] < v0 [3] ⇒ d[3] := 1
v1 [4] := min{v0 [1] + `14 } = 0 + 6 = 6
v1 [4] < v0 [4] ⇒ d[4] := 1
v1 [5] := min{v0 [3] + `35 } = +∞
v1 [6] := min{v0 [2] + `26 ; v0 [4] + `46 ; v0 [5] + `56 } = +∞
102
A l'étape t := 2, on a
v2 [1] := 0
v2 [2] := min{v1 [1] + `12 } = 0 + 2 = 2
v2 [3] := min{v1 [1] + `13 ; v1 [2] + `23 } = min{0 + 5; 2 + 1} = 3
v2 [3] < v1 [3] ⇒ d[3] := 2
v2 [4] := min{v1 [1] + `14 } = 0 + 6 = 6
v2 [5] := min{v1 [3] + `35 } = 5 + 1 = 6
v2 [5] < v1 [5] ⇒ d[5] := 3
v2 [6] := min{v1 [2] + `26 ; v1 [4] + `46 ; v1 [5] + `56 } = min{2 + 7; 6 + 6; +∞} = 9
v2 [6] < v1 [6] ⇒ d[6] := 2
A l'étape t := 3, on a
v3 [1] := 0
v3 [2] := 2
v3 [3] := 3
v3 [4] := 6
v3 [5] := min{v2 [3] + `35 } = 3 + 1 = 4
v3 [5] < v2 [5] ⇒ d[5] := 3
v3 [6] := min{v2 [2] + `26 ; v2 [4] + `46 ; v2 [5] + `56 } = min{2 + 7; 6 + 6; 6 + 1} = 7
v3 [6] < v2 [6] ⇒ d[6] := 5
A l'étape t := 4, on a
v4 [1] := 0
v4 [2] := 2
v4 [3] := 3
v4 [4] := 6
v4 [5] := 4
v4 [6] := min{v3 [2] + `26 ; v3 [4] + `46 ; v3 [5] + `56 } = min{2 + 7; 6 + 6; 4 + 1} = 5
v4 [6] < v3 [6] ⇒ d[6] := 5
103
A l'étape t := 5, on a
v5 [1] := 0
v5 [2] := 2
v5 [3] := 3
v5 [4] := 6
v5 [5] := 4
v5 [6] := 5
Les valeurs n'ont pas été modiées lors de cette dernière itération, on peut donc stopper l'exé-
cution de l'algorithme. Les valeurs v5 [k] nous donnent la longueur du plus court chemin du
noeud 1 jusqu'au noeud k . Par exemple, la longueur du plus court chemin du noeud 1 vers le
noeud 6 est de v5 [6] = 5. Si on veut déterminer le chemin exact, il sut de regarder le vecteur
d : Comme d[6] = 5 cela signie que le prédécesseur du noeud 6 dans le plus court chemin est
le noeud 5. Le prédécesseur du noeud 5 est le noeud d[5] = 3 qui a pour prédécesseur le noeud
d[3] = 2. Enn, le prédécesseur du noeud 2 est le noeud 1. On a donc reconstruit le chemin à
l'envers : 1 − 2 − 3 − 5 − 6.
Remarque : Grâce au critère d'arrêt énoncé, on peut appliquer cet algorithme même sur des
graphes possédant un cycle de longueur négative : l'algorithme permettra d'ailleurs de repérer
ceux-ci.
Nous présentons dans cette section un algorithme publié en 1959 par Dijkstra qui permet, lui
aussi, de déterminer les plus courts chemins qui séparent un noeud source s de tous les autres
noeuds d'un graphe donné. Si l'output de cet algorithme est le même que pour l'algorithme de
Bellman-Ford, cet algorithme dière tout de même en apportant une nouvelle manière (plus
ecace) de parcourir les noeuds du graphe. L'ecacité de cet algorithme est telle qu'il est
souvent appliqué dans les itinéraires routiers. Par contre, cet algorithme ne peut être appliqué
à des graphes possédant au moins une arête de longueur négative.
Le principe de l'algorithme de Bellman-Ford décrit plus haut est d'évaluer à chaque itération t
de l'algorithme l'ensemble des valeurs vt [k] pour tous les noeuds k ∈ A ∪ E. Avec l'algorithme
de Dijkstra nous allons gagner en ecacité en marquant un noeud de façon dénitive au fur et à
mesure des itérations, ce qui permet de ne plus devoir réévaluer des valeurs qui ne bougent plus.
104
Algorithme de Dijkstra : pour déterminer un plus court chemin entre un noeud source s et
tous les autres noeuds du graphe :
Step 0 : Initialisation :
On marque chaque noeud de façon temporaire :
0 si k = s
v[k] := ∀k ∈ A ∪ E
+∞ sinon
On note par p le prochain noeud à être marqué
de façon permanente.
On impose p := s.
Step 1 : Procédure
On marque le noeud p de façon permanente.
Pour chaque arc ou arête (p, k) du noeud p
vers un noeud marqué temporairement
on met les marquages à jour :
v[k] := min{v[k]; v[p] + `pk }
Si la valeur de v[k] a changé, alors d[k] := p.
Step 2 : Arrêt
S'il ne reste plus de noeud marqué de façon temporaire,
on s'arrête.
105
A l'étape d'initialisation on a
v[1] := 0
v[2] := +∞
v[3] := +∞
v[4] := +∞
v[5] := +∞
v[6] := +∞
On marque le noeud 1 de façon permanente. On met donc à jour les valeurs v[2], v[3] et v[4] :
On marque le noeud 2 de façon permanente. On met donc à jour les valeurs v[3] et v[6] :
On marque le noeud 4 de façon permanente. Tous les noeuds sont marqués de façon permanente.
L'algorithme s'arrête.
Théorème 4.5.4 L'algorithme de Dijkstra est l'algorithme le plus ecace pour déterminer les
plus courts chemins entre un noeud source et n'importe quel noeud dans un graphe ne contenant
pas d'arête de longueur négative.
106
Attention : Cet algorithme ne peut être utilisé que sous la condition que tous les arcs/arêtes
soient de longueur positive (voyez-vous pourquoi ?).
L'algorithme de Dijkstra est fort utilisé dans les problèmes routiers. Les longueurs des arcs/arêtes
représenteront les longueurs des routes, le temps de parcours moyen, ou même le prix du car-
burant utilisé pour parcourir une route ainsi que les éventuels péages à payer suivant que l'on
veuille minimiser la distance, le temps ou le coût du parcours. Dans tous ces cas, il est clair que
les longueurs seront des nombres positifs.
Dans le cas où il y aurait une ou plusieurs arêtes de longueur négative, on peut toujours utiliser
l'algorithme de Bellman-Ford.
Notons qu'il existe encore d'autres algorithmes de résolution du problème du plus court chemin.
107
4.6 Exercices
1. Considérons le graphe suivant :
108
a) Le noeuds 5 et 6 sont liés par une arête de longueur 2.
4. On donne la matrice suivante qui indique les distances des routes entre les villes 1 à 8
/ +∞ 35 30 10 ∞ ∞ ∞
+∞ / 20 10 15 80 30 30
35 20 / 20 20 +∞ +∞ +∞
30 10 20 / +∞ +∞ 18 +∞
10 15 20 +∞ / +∞ +∞ +∞
+∞ 80 +∞ +∞ +∞ / 40 50
+∞ 30 +∞ 18 +∞ 40 / 75
+∞ 30 +∞ +∞ +∞ 50 75 /
a) Représentez les villes et les routes par un graphe.
b) Déterminez un arbre couvrant de poids minimum sachant que la route entre la ville 2
et la ville 5 doit nécessairement être utilisée.
5. Considérons le problème de déterminer le plus court chemin du noeud source 1 à tous les
autres noeuds dans le graphe suivant :
b) Complétez
v[1] = v[2] = v[3] = v[4] = v[5] =
c) Ecrivez toutes les fonctions de récurrence et vériez que les valeurs déterminées ci-
dessous les satisfont.
109
6. Identiez tous les cycles de longueur négative dans le graphe suivant :
a) Vériez que les valeurs données v[k] satisfont les fonctions de récurrence.
c) Utilisez les fonctions de récurrence pour prouver que le chemin 1−3−2−4 doit être
de longueur supérieure ou égale à v[4].
8. Appliquez l'algorithme de Bellman-Ford pour déterminer les plus courts chemin du noeud
1 vers les autres noeuds dans le graphe dont voici la matrice des distances :
0 5 8 +∞
+∞ 0 −10 +∞
8 +∞ 0 +∞
+∞ 2 3 0
110
9. Appliquez l'algorithme de Dijkstra pour déterminer les plus courts chemin du noeud 1
vers les autres noeuds dans le graphe suivant :
10. Appliquez l'algorithme de Bellman-Ford pour déterminer les plus courts chemin du noeud
1 vers les autres noeuds dans le graphe suivant :
11. Pour le graphe suivant, quel algorithme appliqueriez-vous pour déterminer les plus courts
chemins entre le noeud 1 et tous les autres noeuds du graphe ? Expliquez votre choix.
111
Références bibliographiques
112