Vous êtes sur la page 1sur 73

Cours de recherche opérationnelle

Hamid Zouaki
ii
Introduction

La Recherche Opérationnelle (RO) est la discipline des méthodes scientifiques utili-


sables pour élaborer de meilleures décisions. Elle permet de rationaliser, de simuler et
d’optimiser l’architecture et le fonctionnement des systèmes de production ou d’organi-
sation. La RO propose des modèles conceptuels pour analyser des situations complexes
et permet aux décideurs de faire les choix les plus efficaces.

On peut décrire une étude de recherche opérationnelle par les trois étapes suivantes :
– Modélisation du problème: batir un modèle scientifique (mathématique) repré-
sentant schématiquement la réalité.
– Résolution du problème: résoudre le modèle mathématique construit à travers
la mise en oeuvre de méthodes numériques permettant d’obtenir des réponses ef-
fectives.
– Retour au problème pratique et confrontation des résultats du modèle et de la
réalité.
La RO apparaît comme une discipline carrefour associant les mathématiques, l’écono-
mie et l’informatique. Elle est par nature en prise directe sur l’industrie et joue un rôle-clé
dans le maintien de la compétitivité. Les apports de la RO sont visibles tout autour de
nous et dans les domaines les plus divers.

Ce cours se veut une introduction à la recherche opérationnelle. Il est composé de


deux parties.
La première partie est consacrée à la présentation de la théorie des graphes. Discipline, au
départ, des mathématiques discrètes et qui fournit des outils efficaces pour la résolution
de grand nombre de problèmes. Après avoir présenté les propriétés de base des graphes,
on aborde les techniques de recherche du plus court chemins et leurs application. On
s’arrétera sur le problème important de la gestion de projets.
La deuxième partie de ce support est une introduction à l’optimisation appliquée. On
consacrera cette partie à l’étude des problèmes de programmation linéaires, leurs réso-
lutions effectives ainsi que leur interprétation économique. La méthode du simplexe est
étudiée d’une manière détaillée. On consacrera aussi un petit chapitre pour introduire la
théorie importante de la dualité.

iii
Recherche opérationnelle Prof. Hamid Zouaki

iv
Recherche opérationnelle Prof. Hamid Zouaki

PARTIE I

Théorie des Graphes

1
Recherche opérationnelle Prof. Hamid Zouaki

2
Chapitre 1

Définitions et concepts fondamentaux

1.1 Introduction
La théorie des graphes ou théorie mathématique de l’interconnection, constitue un
domaine des mathématiques qui s’est développé aussi au sein de disciplines diverses telles
que la chimie (modélisation de structures), la biologie (génome), le sciences sociales (mo-
délisation de relations) et dans beaucoup d’applications industrielles. Elle constitue un
outil efficace pour résoudre des problèmes discrets de la recherche opérationnelle.
Un graphe permet de représenter simplement la structure et les cheminements d’un en-
semble comprenant un grand nombre de situations, en exprimant les relations de dé-
pendances entre ses éléments. On peut citer les réseaux de communication, les réseaux
routiers et ferroviaires, les diagrammes de succession de tâches dans la gestion d’un projet
... etc.
Le graphe est aussi une structure de donnée puissante en informatique. Mais, au-delà
de la représentation de données, les graphes servent aussi et surtout pour proposer des
solutions à certains problèmes.

1.1.1 Exemples
1. Problème du voyageur de commerce:
Un voyageur de commerce ayant n villes à visiter souhaite établir une tournée qui lui
permette de passer une fois et une seule dans chaque ville pour finalement revenir à
son point de départ, ceci en minimisant le chemin parcouru. Il s’agit donc en terme
de graphe, étant donné un réseau R = (X, U, d). (X, U) étant un graphe orienté
dont les sommets représentent les villes et d : U → R qui à chaque arc associe un
coût de parcours, de trouver un circuit élémentaire contenant tous les sommets du
graphe dont la longueur, égale à la somme des longueurs des arcs le constituant,
soit minimale.
2. Fiabilité dans les réseaux:
Un réseau est un système de communication dans lequel des sites communiquent
entre eux soit directement, soit par l’intermédiaire d’autres sites, en envoyant des
messages qui circulent le long de lignes de communication. La représentation de tels
réseaux par des graphes est telle que, les sites et les lignes correspondant respecti-
vement aux sommets et aux arcs.

3
Recherche opérationnelle Prof. Hamid Zouaki
Dans un réseau, il peut se produire qu’une ligne de communication soit coupée, ne
transmettant plus aucun message. Il en est de même pour un site dont la panne
peut être assimilée à la coupure de toutes les lignes qui y aboutissent ou qui en
partent. Supposons que, dans un réseau, on achemine des informations d’un som-
met A vers un sommet B, éventuellement via des sites intermédiaires servant de
relais. De telles informations doivent emprunter des chemins allant de A vers B.
Ainsi, une information issue de A parviendra à B si et seulement si au moins un
chemin est valide (c’est à dire la séquence d’arcs qui le constitue ne comporte que
des arcs non détériorés). Le problème posé est alors le suivant : quel est le nombre
maximum de pannes auquel cet acheminement peut résister ? Autrement dit, quel
est le nombre maximum de chemins indépendants existant entre A et B ? (deux
chemins sont indépendants si et seulement si ils sont disjoints au sens des arcs et
des sommets intermédiaires).
3. Problème d’ordonnancement:
Un projet complexe est en général décomposé en tâches élémentaires ayant chacune
une durée donnée. Ces tâches étant reliées les unes aux autres par des contraintes de
précédence. Il s’agit de déterminer un calendrier d’éxecution des tâches qui respecte
les contraintes de précédence et permette l’achèvement du projet dans une durée
optimale.

1.2 Notion de graphe


Définition 1.2.1. Un grahe est un couple G = (X, U) constitué par
– Un ensemble fini X = {x1 , . . . , xn }. Les éléments de X sont appelés sommets du
graphe
– une famille U = {u1 , . . . , um } d’éléments du produit cartésien X × X = {(x, y) :
x ∈ X, y ∈ X}. Les éléments de U sont appelés des arcs.

Un graphe est représenté par un schéma dans le plan où les sommets sont représentés
par des points et les arcs par des branches orientées reliant deux sommets.

E B

D C

Pour un arc u = (xi , xj ) ∈ U on dit que l’arc u relie le sommet xi au sommet xj .


Examinons l’exemple simple suivant :

4
Recherche opérationnelle Prof. Hamid Zouaki
u1
u2

A B

u3
u4

G = (X, U) avec X = {A, B, C}, U = {u1, u2, u3, u4, u5}.


u1 = (A, B), u2 = (A, B), u3 = (A, B), u4 = (B, C) et u5 = (C, C).
G est un graphe ayant 3 sommets et 5 arcs.

On appelle ordre du graphe le nombre n de ses sommets.


• Un graphe est un p-graphe si ∀xi , xj sommets de G, le nombre d’arcs de xi vers xj est
au maximum égale à p.
• Une boucle est un arc de la forme (xi , xi ).
Dans l’exemple ci dessus, G est un 3-graphe avec une boucle (C, C).

Dans le cas d’un 1-graphe, tous les éléments de U sont distincts et on peut alors définir
G d’une manière fonctionnelle :
Définition 1.2.2. Un graphe est un doublet G = (X, Γ) constitué par
– X = {x1 , . . . , xn } un ensemble fini de sommets.
– Γ fonction de X dans l’ensemble des parties de X.
Ainsi, à tout sommet x est associé l’ensemble Γ(x) ⊂ X.
Γ(xi ) = {xj ∈ X : (xi , xj ) ∈ U}.
Considérons le 1-graphe G :

x1 x2 x3

x4

G peut être défini par G = (X, Γ) où :


Γ(x1 ) = {x2 }, Γ(x2 ) = {x3 , x4 }, Γ(x3 ) = {x4 } et Γ(x4 ) = ∅.
Pour certaines applications, l’orientation des arcs importe peu : on s’intéressera aux paires
de sommets reliés et on parle de graphe non orienté. Au lieu de parler d’un arc u =
(x, y) on parle de l’arête e = [x, y]. On n’utilise pas la notation ensembliste {x, y} car elle
désignerait le sommet x dans le cas où x = y et non pas l’arête.
L’ensemble des arêtes d’un graphe non orienté est souvent noté E.

5
Recherche opérationnelle Prof. Hamid Zouaki
Vocabulaire :
Soit G = (X, U) un gaphe où X = {x1 , . . . , xn }.
• Si u = (xi , xj ) est un arc de G, on dit que xi est l’extrémité initiale de u et xj l’extrémité
terminale.
• Un sommet xi est voisin d’un sommet xj s’ils appartiennet au même arc. On dit qu’ils
sont adjacents.
• Un sommet x est isolé s’il n’est voisin d’aucun sommet.
• Un sommet x est pendant s’il n’existe qu’un seul arc qui le relie à un autre sommet.
• Un arc u est incident à un sommet x vers l’extérieur, si x est l’extrémité initiale de u
et l’extrémité terminale de u est différente de x.
• Un arc u est incident à un sommet x vers l’intérieur, si x est l’extrémité finale de u et
l’extrémité initiale de u est différente de x.
• On définit le demi-degré extérieur d+ (x) du sommet x comme le nombre d’arcs incidents
vers l’extérieur à x.
• d− (x) le demi-degré intérieur est le nombre d’arcs incidents vers l’intérieur à x.
• On appelle degré du sommet x la quantité d(x) = d+ (x) + d− (x).

Définition 1.2.3. Soit un graphe G = (X, U). On appelle chemin de G toute suite de
sommets x0 , x1 , . . . , xn , telle que chaque couple (xi , xi+1 ) soit un arc de U.
Un chemin formé de n arcs successifs sera dit chemin de taille n.
Si un arc rend compte d’une liaison ou influence directe, un chemin rendra compte
d’une liaison ou influence indirecte ou généralisée.
On peut aussi définir un chemin comme une suite d’arcs consécutifs :
µ = (u1 , u2 , . . . , ui , ui+1, . . . , uq ) de sorte que l’extrémité terminale de ui coincide avec
l’extrémité initiale de ui+1 .
• Un chemin est dit élémentaire s’il n’y a pas répétition d’arcs.
• Un chemin est dit simple s’il n’y a pas répétition de sommets.
• Un circuit σ = (u1, . . . , uq ) = [x1 , x2 , . . . , x1 ] est un chemin tel que l’extrémité finale
de uq coincide avec l’extrémité initiale de u1 .

E C

A B

µ = [A, B, C, D] est un chemin simple et élémentaire de taille (longueur) 3.


σ = [A, B, C, E, A] est un circuit simple et élémentaire de longueur 4.
• Soit G = (X, U) un graphe. On appelle sous-graphe de G tout graphe G′ = (X ′ , U ′ )

6
Recherche opérationnelle Prof. Hamid Zouaki
′ ′
où X ⊂ X et U ⊂ U.
• On appelle graphe partiel de G tout graphe G′ = (X, U ′ ) avec U ′ ⊂ U.

Graphes remarquables:
Soit G = (X, U) un graphe dont l’ensemble des sommets est X = {x1 , . . . , xn }.
• G est dit complet si deux sommets différents sont automatiquement adjacents : il
comprend tous les arcs possibles. On appelle clique un sous-graphe complet.

• G est dit symétrique si ∀xi , xj ∈ X (xi , xj ) ∈ U ⇒ (xj , xi ) ∈ U


• G est dit réflexif s’il possède une seule boucle en tout sommet.
• G est dit transitif si à toute paire d’arcs consécutifs (xi , xj ) et (xj , xk ) correspond
un troisième arc (xi , xk ).
• L’inverse G−1 du graphe G s’obtient en inversant le sens des arcs de G : G−1 = (X, V )
où V = {(x, y) : (y, x) ∈ U}.

1.2.1 Concepts non orienté


Soit G = (X, U) un graphe non orienté ou multigraphe : un graphe où il n’y a pas
d’orientation.
La notion d’arc est remplacée par la notion d’arête : si u = (x, y) est une arête, on dit
que x, y sont les extrémités de u. Si cette arête n’est pas une boucle, on dit que u est
incidente aux sommets x et y
• Deux arêtes sont dites adjacentes, si elles ont une extrémité en commun.
• Le degré d’un sommet x noté d(x) est le nombre d’arêtes qui lui sont incidentes.
• Une arête u est incidente à un sous-ensemble de sommets A si une et une seule de ses
extrémités se trouve dans A.
• On appelle pseudo chaine une suite consécutives d’arêtes telle que l’arête ui est reliée
à l’arête ui−1 par une extrémité et à l’arête ui+1 par l’autre.
• Une chaîne est une pseudo chaîne dans laquelle, lorsqu’il y a répétition d’une arête,
celle ci est parcourue dans le même sens.
• Un cycle est un chaîne qui part d’un sommet et aboutit au même sommet.
• Une chaîne ou cycle est élémentaire lorsqu’il n’y a pas répétition d’une arête.
• Une chaîne est dite simple si on ne passe pas plus d’une fois par chacun des sommets.

1.2.2 Représentation d’un graphe


Un cetains nombre de représentations existent pour décrire un graphe. Du point de
vue algorithmique, ces représentation ne sont pas forcément équivalentes. On distingue
principalement la représentation par matrice d’adjacence, par matrice d’incidence et par
dictionnaire ou liste d’adjacence.

1.2.2.1 Matrice d’adjacence


La matrice d’adjacence fait correspondre les sommets origine des arcs (placés en lignes)
aus sommets destination (placés en colonnes).
Soit G = (X, U) un p-graphe d’ordre n. Si mij désigne le nombre d’arcs allant du sommet

7
Recherche opérationnelle Prof. Hamid Zouaki
xi vers le ommet xj , alors La matrice M = (mij )i,j=1...,n est la matrie d’adjacence associée
à G.
Dans le cas d’un 1-graphe, l’existence d’un arc (xi , xj ) se traduit par la présence d’un 1
à l’intersection de la ligne i et la colonne j et l’absence d’arc se traduit par la présence
d’un 0. On parle alors de matrice booléenne associée au graphe.
Soit donné le graphe

E C

A B

 
0 1 1 0 0
0 0 1 0 0
 
Sa matrice d’adjacence est donnée par M = 
1 0 0 1 1
0 0 0 0 0
1 0 0 1 0

1.2.2.2 Matrice d’incidence


On considère le cas d’un graphe simple G = (X, U) où X = {x1 , . . . , xn } et U =
{u1 , . . . , um}. La matrice d’incidence sommets arcs est la matrice M = (mij ) d’ordre
n × m où 
 1, si xi est l’extrémité initiale de uj ;
mij = −1, si xi est l’extrémité terminale de uj ;

0, si xi n’est pas une extrémité de uj .
Pour le graphe ci-dessous
u2
x1 u1 x2 x3

u3 u4

x4
u5

 
1 0 0 0 −1
−1 1 1 0 0
sa matrice d’incidence est la matrice 4 × 5 donnée par M = 
 0 −1 0

1 0
0 0 −1 −1 1

8
Recherche opérationnelle Prof. Hamid Zouaki
On remarque que dans chaque colonne apparaît exactement un 1 et un -1 (chaque
arête étant incidente à deux sommets), les autres éléments sont tous nuls.
La matrice d’incidence est une matrice unimodulaire, i.e toutes ses sous-matrices carrées
ont pour déterminant soit +1, -1 ou 0.

1.2.2.3 Dictionnaire
Tableau à simple entrée dont chaque ligne se référe à un sommet différent et donne
la liste des suivants de ce sommet. C’est tout simplement la description sous forme de
tableau de la multi application Γ.
Pour le graphe précédant, on obtient le dictionnaire :
xi Γxi
x1 x2
x2 x3 , x4
x3 x4
x4 x1
Pour un 1-graphe G = (X, Γ), l’avantage de la représentation par listes d’adjacences est
la gain obtenu en place mémoire.

1.2.2.4 Listes d’adjacence


L’avantage d’une telle représentation par rapport à celle par matrice d’adjacence est
le gain obtenu en place mémoire.
Chaque arc est représenté par son extrémité finale, son extrémité initiale et définie impli-
citement. A chaque arc est associé le noeud destination et le pointeur au prochain sommet
dans la liste.

1.2.3 Préordre associé à un graphe


Définition 1.2.4. Le pré ordre associé au graphe G est une relation réflexive et transitive
telle que :
xi ≤ xj ⇔ xi = xj ou il existe un chemin µ reliant xi à xj .
Vocabulaire :
– x ∈ X est un ascendant de y ∈ X ⇔ x ≤ y
– y ∈ X est un descandant de x ∈ X ⇔ x ≤ y
– x ∈ X est un précédant de y ∈ X ⇔ (x, y) ∈ U (i.e il existe un chemin de longueur
1 entre x et y)
– y ∈ X est un suivant de ∈ X ⇔ x ≤ y
Dans le cas où G est un 1-graphe défini par G = (X, Γ). La multi-application Γ est vue
comme la relation "suivant de " : Γxi = {xj : (xi , xj ) ∈ U}.
Intéressons nous aux composées de Γ :
Γ2 xi = Γ(Γxi ) = {xj ∈ X : ∃xk ∈ X tel que (xi , xk ) ∈ U et (xk , xj ) ∈ U}
= {descendants de xi de longueur 2}..
Γk xi = {descendants de xi de longueur k}.

9
Recherche opérationnelle Prof. Hamid Zouaki
L’inverse de Γ est la relation "précedant de" définie par :

Γ−1 xi = {xj ∈ X : (xj , xi ) ∈ U} = { précédants de xi }

Par composition
Γ−k xi = {ascendants de xi de longueur k}.
Définition 1.2.5. Soit G = (X, U) un graphe et A ⊂ X.
xi ∈ X est un majorant de A ⇔ xj ≤ xi ∀xj ∈ A
xi ∈ X est un minorant de A ⇔ xi ≤ xj ∀xj ∈ A
Un maximum (resp. minimum) est un majorant (resp. minorant) qui appartient à A.
On appelle racine un minimum de X.
Définition 1.2.6 (sous graphe). GA = (A, V ) est un sous graphe de G = (X, U) engendré
par A ⊂ X
V = {(xi , xj ) ∈ U : xi ∈ A, xj ∈ A)}
Si G est un 1-graphe, G = (X, Γ) alors GA = (A, ΓA ) où ΓA xi = Γxi ∩ A.
Définition 1.2.7 ( graphe partiel). le graphe (X, V ) est le graphe pariel de G = (X, U)
engendré par V ⊂ U si dans G on garde les sommets et on élimine les arcs de U \ V .
Définition 1.2.8 (Forte connexité). On dit que xi et xj sont reliés par la relation de
connexité forte qu’on note Rf s’il existe un chemin de xi vers xj et un chemin de xj vers
xi .
xi Rf xj ⇔ xi ≤ xj et xj ≤ xi
La relation Rf est une relation d’équivalence. Elle permet donc de décomposer X
en classes d’équivalences, qu’on appelle composantes fortement connexes de X. On
verra plus loin comment déterminer d’une manière efficace les composantes connexes d’un
graphe.
Un graphe G est dit fortement connexe s’il n’admet qu’une seule composante connexe.

En enlevant l’orientation des arcs dans un graphe (en considérant le multigraphe


associé), la relation de forte connexité est remplacée par la simple connexité. On dit que
deux sommets sont reliés par une relation de simple connexité, si on peut les relier par
une chaîne. On définit ainsi une relation d’équivalence, dont les classes d’équivalence sont
appelées composantes connexes.

1.2.4 Relations et opérateurs entre graphes


On considère les 1-graphes G1 = (X, Γ1 ) et G2 = (X, Γ2 ).

Relation d’ordre
La relation
G1  G2 ⇔ Γ 1 ⊂ Γ 2
et qui se lit G1 est un graphe partiel de G2 est une relation d’ordre sur l’ensemble des
graphes ayant X comme ensemble de sommets.

10
Recherche opérationnelle Prof. Hamid Zouaki
Union

G1 ∪ G2 = (X, Γ1 ∪ Γ2 )

Composition
le graphe G3 = G1 ◦ G2 = (X, Γ3 ) est défini par

y ∈ Γ3 (x) ⇔ ∃z ∈ X : z ∈ Γ1 (x) et y ∈ Γ2 (z)

On écrit souvent Γ1 ◦ Γ2 pour désigner le graphe composé G1 ◦ G2 .


Cet opérateur est associatif mais n’est pas commutatif. Il est compatible à droite et à
gauche avec la relation d’ordre définie ci dessus :

G1  G2 ⇔ G1 ◦ G3  G2 ◦ G3 et G3 ◦ G1  G3 ◦ G2

Proposition 1.2.1. Soient G1 = (X, U), G2 = (X, V ) deux graphes ayant le même
ensemble de sommets et soient M = (mij ) et N = (nij ) leurs matrices associées. Alors,
on a
1. La matrice M + N est la matrice associée au graphe réunion G1 ∪ G2
2. La matrice produit M.N est la matrice associée au graphe G1 ◦ G2 .
Démonstration:
1. Le nombre d’arcs de xi à xj dans G1 ∪ G2 = (X, U ∪ V ) est mij + nij .
2. Le nombre de chemins distincts [xi , xk , xj ] tels que (xi , xk ) ∈ U et (xk , xj ) ∈ V est
Xn
mik .nkj . Donc le nombre total de chemins distincts [xi , xk , xj ] est égal à mik .nkj
k=1
qui n’est autre que l’élément ij de la matrice M.N.

Puissance d’un graphe


On définit par récurrence sur p le graphe Gp de la manière suivante :

G0 = (X, ∆) où ∆ = {(x, x) : x ∈ X}
p ≥ 1 Gp = Gp−1 ◦ G = G ◦ Gp−1

Comme corollaire de la proposition précédante, si M est la matrice d’adjacence de G,


alors la matrice associée au graphe Gp n’est autre que M p .
Considérons le graphe :

D C

A B

11
Recherche opérationnelle Prof. Hamid Zouaki
sa matrice d’adjacence est donnée par
   
1 1 1 0 2 1 2 1
0 0 1 0 1 0 0 1
M = 1 0
 M2 =  
0 1 2 1 1 0
1 0 0 0 1 1 1 0
En consultant le graphe, on voit qu’il y’a 2 chemins de longueur 2 allant de C vers A.
Chose qu’on peut retrouver en consultant la ligne 3 de la matrice M 2 .
Proposition 1.2.2. Soit Gp la puissance d’ordre p du graphe G(X, Γ). Alors (x, y) st un
arc de Gp si, et seulement si, il existe un chemin de longueur p allant de x à y. Autrement
dit G = (X, Γp ) où Γp est la composée de la multi application Γ et qui a été présentée au
paragraphe précédant.

Transposé d’un graphe


Le graphe transposé du graphe G = (X, Γ) est le graphe Gt = (X, Γt ) défini par

y ∈ Γt (x) ⇔ x ∈ Γ(y)

1.2.5 Fermeture transitive d’un graphe


Ce paragraphe traite du problème de l’existence de chemins entre tous les couples de
sommets d’un graphe.
Soit G = (X, Γ) un graphe. On appelle fermeture transitive de G le graphe G+ = (X, Γ+ )
défini par

y ∈ Γ+ (x) ⇔ il existe un chemin de G allant de x vers y.


Nous donnons dans ce paragraphe le résultat théorique qui permettra de construire un
tel graphe. Intuitivement, on obtient G+ à partir de G en ajoutant juste ce qu’il faut
pour rendre le graphe transitif.
Proposition 1.2.3.
G+ = G ∪ G2 ∪ . . . ∪ Gk ∪ . . .
Proposition 1.2.4. Les deux propositions sont équivalentes :
1. Dans G il existe un chemin entre x et y
2. Dans G il existe un chemin élémentaire entre x et y.
Démonstration :
Supposons qu’il existe un chemin µ allant de x vers y, si ce chemin n’est pas élémentaire
alors la suite de sommets le constituant comporte au moins une répétition d’un sommet
z. On peut alors écrire µ = µ1 ∪ µ2 ∪ µ3 = [x, z] ∪ [z, z] ∪ [z, y]. En éliminant le circuit
[z, z], on obtient un chemin u′ = [x, z] ∪ [z, y]. On réitère le même raisonnement jusqu’à
ce que l’on obtienne nécessairement un chemin élémentaire reliant x à y.
Proposition 1.2.5. Soit k la longueur maximum des chemins élémentaires du graphe G
d’ordre n. Alors :

12
Recherche opérationnelle Prof. Hamid Zouaki
1. k ≤ n − 1
[k k+1
[
j
2. G = Gj
j=1 j=1

3. G+ = G ∪ G2 ∪ . . . ∪ Gk .

Avant de clôre ce chapitre, consacré aux définitions et propriétés de base, on présente


un certain nombre d’exemples d’illustration mettant en avant le rôle de l’objet graphe
comme élément de modélisation.

1.2.6 Exemples
Graphe d’incompatibilité
Pour le transport de produits chimiques par rail, certains de ces produits ne peuvent
être transportés dans un même wagon (des produits co-combustibles sont placés dans
des wagons distincts). La situation peut être représentée par le graphe d’incompatibilité
de transport (deux sommets adjacents ne peuvent être placés dans le même wagon). On
demande de minimiser le nombre de wagons nécessaires au transport. Ce problème se
ramène donc à un problème de coloriage : déterminer le nombre de couleurs nécessaire et
suffisant pour colorier les sommets d’un multi-graphe donné, de manière telle que deux
sommets adjacents ne reçoivent pas la même couleur.
Ce problème sera traité un peu plus loin dans ce cours.

Arbre couvrant
Une société de téléphonie souhaite câbler entièrement, au moyen de nouvelles fibres
optiques, une ville en minimisant le nombre de connexions à réaliser. Le nouveau cablage
s’appuie sur le réseau électrique existant et il faut que tous les points de la ville soient
déservis. La question posée est de rechercher un sous-graphe (ou un sous-arbre) couvrant
(dont les arêtes couvrent tous les sommets du graphe) de poids minimal dans un graphe
donné.

Routage
On considère le problème de routage de paquets de données devant transiter sur
un réseau (du type internet). Si un utilisateur désire accéder au contenu d’une page
web présente sur un serveur, une connexion entre ce serveur et la machine doit être
´établie. Cette connexion n’est en général pas directe mais doit passer par une série de
machines relais. Pour préserver la bande passante, pour accélérer le transfert ou encore
pour minimiser les coûts, on essaie de minimiser le nombre de machines relais utilisées.
Si chaque ordinateur, routeur, passerelle ou serveur présent sur l’internet représente un
sommet d’un graphe dont les arcs représentent les connexions entre ceux-ci, il s’agit
du problème important de déterminer, dans un graphe donné, le chemin le plus court
permettant de relier deux sommets quelconques.

13
Recherche opérationnelle Prof. Hamid Zouaki

14
Chapitre 2

Problèmes de cheminement dans un


graphe

2.1 Existence de chemins dans un graphe


Rappelons que lorsque G est un 1-graphe, sa matrice associée est une matrice boo-
lèenne (qui ne contient que des 0 et des 1). On verra dans ce paragraphe que l’existence
d’un chemin dans G peut être vérifiée en utilisant des opérations boolèennes sur cette
matrice.
Soient ⊕ la somme booléenne (ou logique) et ⊗ le produit booléen (et logique).
Mn
On peut définir la somme multiple : xk = x1 ⊕ x2 ⊕ . . . ⊕ xn .
k=1
On définit la puissance booléenne x[n] = x
| ⊗x⊗
{z. . . ⊗ x} où x apparaît n fois.
La somme booléenne de deux matrices booléennes M et N est définie par

S = M ⊕ N ⇔ sij = mij ⊕ nij

Le produit booléen de deux matrices est défini par


n
M
P = M ⊗ N ⇔ pij = (mik ⊗ nkj )
k=1

pij = 1 ⇔ ∃k tq mik ⊗ nkj = 1 i.e mik = 1 et nkj = 1


On les propriétés suivantes :

M ⊕N =N ⊕M
M ⊕ (N ⊕ Q) = (M ⊕ N) ⊕ Q
M ⊗ (N ⊕ Q) = (M ⊗ N) ⊕ (M ⊗ Q).

On définit la puissance de la matrice M par

M [0] = I
M [n] = M [n−1] ⊗ M.

15
Recherche opérationnelle Prof. Hamid Zouaki
Proposition 2.1.1.
∀k ≥ 1 (I ⊕ M)[k] = I ⊕ M ⊕ M [2] ⊕ . . . ⊕ M [k] .
Démonstration par récurrence sur k:
La propriété est vraie pour k = 1.
On suppose l’hypothèse vraie à l’ordre k − 1.
(I ⊕ M)[k] = (I ⊕ M)[k−1] ⊗ (I ⊕ M)
= (I ⊕ M ⊕ M [2] ⊕ . . . ⊕ M [k−1] ) ⊗ (I ⊕ M)
= I ⊕ M ⊕ M [2] ⊕ . . . ⊕ M [k−1]
⊕ M ⊕ M [2] ⊕ . . . ⊕ M [k−1] ⊕ M [k]
= I ⊕ M ⊕ M [2] ⊕ . . . ⊕ M [k−1] ⊕ M [k] (X ⊕ X = X).
Théorème 2.1.1. Soient G1 = (X, Γ1 ) et G2 = (X, Γ2 ) deux 1-graphes, M1 et M2 leurs
marices boolèennes. Alors
1. M1 ⊕ M2 est la matrice booléenne associée au graphe (X, Γ1 ∪ Γ2 )
2. M1 ⊗ M2 est la matrice booléenne associée au graphe (X, Γ1 ◦ Γ2 ) .
Corollaire 2.1.1. Soit M la matrice booléenne associée au 1-graphe G = (X, Γ), alors
la puissance booléenne M [k] est la matrice booléenne associée au graphe G = (X, Γk ) qui
possède un arc (xi , xj ) si, et seulement si, il existe un chemin de xi vers xj de longueur
k.
Remarque :
On a déjà vu que la matrice puissance M k nous donne l’information sur le nombre d’arcs
de longueur k allant d’un sommet du graphe vers un autre. En utilisant la matrice puis-
sance booléenne M [k] on répond juste à la question : est ce qu’il existe un chemin de
longueur k entre deux sommets du graphe.

Corollaire 2.1.2. Soit M la matrice booléenne associée au 1-graphe G = (X, Γ), alors
k
[
la matrice N = (I ⊕ M)[k] est la matrice booléenne associée au graphe G = (X, Γl ) qui
l=0
possède un arc (xi , xj ) si, et seulement si, il existe un chemin de xi vers xj de longueur
≤ k.
Démonstration :
On utilise le fait que (I ⊕ M)[k] = I ⊕ M ⊕ M [2] ⊕ . . . ⊕ M [k] . L’expression de droite,
d’après les derniers résultats, n’est autre que la matrice booléenne associée au 1-graphe
k
[
G = (X, Γl ).
l=0

Théorème 2.1.2 (matrice associée à la fermeture transitive). Soit M la matrice boo-


léenne associée au 1-graphe G = (X, Γ) d’ordre n. Alors la matrice M + = (I ⊕ M)[n−1]
n’est autre que la matrice booléenne associée à la fermeture transitive G+ = (X, Γ+ ) dont
on rappelle la définition : y ∈ Γ+ (x) ⇔ il existe un chemin de G allant de x vers y. Donc
y ∈ Γ+ (x) ⇔ m+
ij = 1

16
Recherche opérationnelle Prof. Hamid Zouaki
+
Grâce à ce théorème, on peut envisager l’utilisation de M pour caractériser la fer-
meture transitive d’un graphe. Mais ce procédé est assez lourd et demanderait des calculs
énormes pour des graphes de grande taille.

2.1.1 Algorithme pour la détermination de la fermeture transi-


tive
Soit G = (X, Γ) un 1-graphe d’ordre n. x, y ∈ X deux sommets de G. On définit
l’écart entre x et y par

 longueur du plus court chemin reliant x, y si x ≤ y et x 6= y ;
d(x, y) = 0, si x = y ;

∞, si x ≤ y est non satisfaite.

• d vérifie l’inégalité triangulaire : d(x, y) ≤ d(x, z) + d(z, y).


• d(x, y) n’est pas une métrique : elle n’est pas symétrique.

On définit l’ensemble des descendants d’ordre k du sommet x par :

Dk (x) = {y ∈ X : d(x, y) = k}

On a les propriétés importantes suivantes (à démontrer en exercice) :


k−1
[
k
• Dk (x) = Γ (x)\ Γl (x)
l=0
• ∀k 6= l Dk (x) ∩ Dl (x) = ∅
n−1
[
• Γ+ (x) = Dk (x)
k=0

Algorithme 1 (marquage)
Soit xi un sommet de G. On considère la procédure :
• marquer 0 le sommet xi
• marquer 1 les sommets suivant de xi non marqués
• marquer k + 1 tout sommet non marqué suivant d’un sommet marqué k
• continuer jusqu’à ce qu’il soit impossible de marquer.

Cet algorithme permet la construction des ensembles Dk comme le résume le théorème


suivant :

Théorème 2.1.3. On considère l’algorithme 1.


Pour k = 0, 1, . . . , n on note Xk = {x ∈ X : x marqué k}, alors
1. Xk = Dk (xi )
2. Dk (xi ) = ∅ ∀k ≥ n.

Démonstration :

17
Recherche opérationnelle Prof. Hamid Zouaki
1. par récurrence :
D0 (xi ) = {xi } = X0
hypothèse : Xm = Dm ∀m = 0, 1, . . . , k − 1
(a) Xk ⊂ Dk (xi )
Soit xj ∈ Xk ⇒ xj ∈ / Xm = Dm ∀m = 0, 1, . . . , k − 1. On a donc d(xi , xj ) >
k − 1.
xj ∈ Xk ⇒ xj est le suivant d’un xl ∈ Xk−1 = Dk−1 et donc
d(xi , xj ) ≤ d(xi , xl ) + d(xl , xj ) = k − 1 + 1 = k. Finalement, on a

k − 1 < d(xi , xj ) ≤ k ⇒ d(xi , xj ) = k et donc xj ∈ Dk

(b) Dk (xi ) ⊂ Xk
xj ∈ Dk (xi ) ⇒ xj ∈
/ Dm (xi ) = Xm pour m = 0, 1, . . . , k − 1.
xj ∈ Dk (xi ) ⇒ xj est le suivant d’un xl ∈ Dk−1 (xi ) = Xk−1 . C’est le principe
d’optimalité de Bellman : si µ[xi , xj ] est un chemin de longueur minimale k
de xi vers xj et si xl est le précédant de xj sur ce chemin, alors µ[xi , xl ]
est un chemin de longueur minimale k − 1. "Une politique optimale est
composée de sous-politiques optimales".
Donc xj est précédé par un sommet marqué k − 1 ⇒ xj ∈ Xk .
2. Il suffit de remarquer que la procédure engendre des chemins élémentaires allant de
xi de longueur minimale k. Comme la longueur d’un chemin élémentaire ne dépasse
pas n − 1, on aura Dk (xi ) = ∅ ∀k ≥ n.
La propriété 2) montre que la procédure de marquage s’arrête après un nombre fini
d’itérations.

2.2 Décomposition en niveaux : tri topologique


La relation d’accessibilité d’un graphe est un préordre qui n’est pas nécessairement un
ordre (partiel). Cette relation est un ordre si, et seulement si, le graphe est sans circuit. Les
graphes sans circuit, qui constituent une généralisation des arborescences, interviennent
dans de nombreuses applications, par exemple pour représenter une relation de précédence
entre tâches, ou une relation de partage de sous-expressions. Un tri topologique d’un
graphe sans circuit est une extension linéaire de l’ordre partiel sur les sommets déterminé
par les arêtes, c’est-à-dire un ordre compatible avec ce dernier. En d’autres termes, il
s’agit d’un ordre de visite des sommets tel qu’un sommet soit toujours visité avant ses
successeurs.

Théorème 2.2.1. Soit G = (X, U) un graphe. [


Pour A ⊂ X on note S(A) = { suivants de A} = Γ(x). Alors,
x∈A

G est sans circuit ⇔ ∀A ⊂ X, A 6= ∅ A\S(A) 6= ∅.

D’une manière équivalente

G admet au moins un circuit ⇔ ∃A ⊂ X, A 6= ∅ A\S(A) = ∅

18
Recherche opérationnelle Prof. Hamid Zouaki
A\S(A) = ∅ ⇔ ∀a ∈ A, a n’admet pas de précédant dans A
Algorithme S 2 (Décomposition en niveaux) :
Notation Ti = ij=0 Nj , Ri = X \ Ti
Initialisation : T−1 = ∅, R−1 = X, N0 = X \ S(X) : sommets n’ayant pas de précédant.
Itération générale : i = 0, 1, . . .
si Ni = ∅ on arête : G admet un circuit
si Ni 6= ∅ on cosidère le reste Ri
si Ri = ∅ on arête : X est décomposé en niveaux N0 , N1 , . . . , Ni .
si Ri 6= ∅
• On considère le sous-graphe engendré par Ri
• On identifie Ni+1 = Ri \ S(Ri ) : sommets de Ri n’ayant aucun précédant dans Ri .
• On pose i ← i + 1
• On recommence l’itération générale.
Les ensembles Ni sont appelés les niveaux de rang i du graphe G.
Les éléments de Ni sont appelés sommets de rang i.

Le fait de décomposer un graphe en niveaux permet de classer ses sommets de sorte à


avoir i < j pour tout arc (xi , xj ) comme le montre le théorème suivant. Un tel classement
est appelé tri topologique des sommets de G. L’intérêt d’un tel tri est d’accélérer
certains algorithmes en faisant traiter un sommet avant ses successeurs. C’est le cas pour
l’algorithme de Bellman pour le calcul du plus court chemin, qu’on verra dans les chapitres
suivants.
Théorème 2.2.2. Soit G = (X, U) un graphe auquel on a appliqué l’algorithme 2 de
décomposition. Nous avons les propriétés suivantes :
1. ∀i 6= j Ni ∩ Nj = ∅
2. Les sommets d’un même niveau ne sont pas reliés entre eux par un chemin
3. Aucun sommet d’un niveau Ni ne possède d’ascendants d’un niveau supérieur Nj .
4. Tout sommet d’un niveau Ni possède un précédant dans le niveau précédant Ni−1 .
5. Le premier niveau N0 n’a pas de précédant.
6. Si G se décompose en niveaux, le dernier niveau n’a pas de suivant.
Théorème 2.2.3. Soit G = (X, U) un graphe auquel on a appliqué l’algorithme 2
X est décomposable en niveaux ⇔ G est sans circuit
Application :
Pour illustrer la notion de tri topologique, on considère un ordinateur parallèle équipé de
plusieurs processeurs, et fonctionnant par cycles de durées égales. Au cours d’un cycle,
chaque processeur peut traiter une opération à un ou deux opérandes et range le résultat
dans une variable temporaire Ti .
En combien de cycles au minimum l’expression mathématique suivante peut être évaluée ?

sin(a2 + b2 ) − cos(a2 + bc)


1 + c + a2

19
Recherche opérationnelle Prof. Hamid Zouaki
On décompose d’abord la formule en expressions élémentaire :
T1 = a ∗ a T2 = T1 + b T3 = sin(T2 ) T4 = b ∗ c
T5 = T1 + T4 T6 = cos(T5 ) T7 = T3 − T6 T8 = 1 + c
T7
T9 = T8 + T1 T10 = .
T9
On définit le graphe G = (X, U) où X désigne l’ensemble des instructions. l’arc
(x, y) ∈ U si le résultat de x est nécessaire pour l’évaluation de y. S’il existe un chemin de
longueur k pour arriver au sommet x, c’est qu’il faut k cycles pour réaliser l’expression
associée.
G est sans cycle. En utilisant l’algorithme 2, on obtient la décomposition en niveaux :
N1 = {T1 , T4 , T8 }
N2 = {T2 , T5 , T9 }
N3 = {T3 , T6 }
N4 = {T7 }
N5 = {T10 }
On peut schématiser cette décomposition comme suit :

T1 T2 T3

T4 T5 T6 T7

T8 T9 T10

On peut donc évaluer l’expression en 5 cycles. On remarque qu’il y’a au plus 3 ins-
tructions par cycle. On en conclut que 3 processeurs sont suffisants pour le calcul de la
formule donnée.

Si le graphe G est représenté par sa matrice d’adjacence M, l’algorithme 2 peut être


appliqué en considérant cette matrice de la manière suivante :
[i
Désignons par Mi la matrice associée au sous graphe engendré par X \ Nj , avec
j=0
M−1 = M. Le schéma pourra s’écrire :
i
[
1. Considérer X \ Nj revient à considérer Mi
j=0
2. Ni+1 est identifié en identifiant les colonnes nulles de Mi , i.e. les sommets n’ayant
pas de précédant.
3. Mi+1 est obtenu à partir de Mi en enlevant les lignes et colonnes correspondant aux
éléments de Ni+1 .

20
Recherche opérationnelle Prof. Hamid Zouaki
2.3 Composantes connexes
On rappelle qu’un graphe est connexe s’il existe une chaîne entre toute paire de som-
mets. Si le graphe n’est pas connexe (n’est pas un seul bloc), on peut identifier p > 1
sous-graphes connexes maximaux, au sens de l’inclusion, dont la réunion forme le graphe
G. Ces sous-graphes sont les composantes connexes de G. p est appelé le nombre de
connexité de G.
Les composantes connexes peuvent aussi être définies comme étant les classes d’équiva-
lences pour la relation définie précédament :

xRy ⇔ il existe une chaîne entre x et y

On appelle point d’articulation un sommet augmantant le nombre de connexité du


graphe si on l’enlève.
On appelle isthme un arc ou une arête que si on l’enlève on augmente le nombre de
connexité.
Dans la réalité, beaucoup de graphes doivent être connexes. On peut citer les réseaux
éléctriques, routiers ou d’adduction d’eau. En saisissant ces exemples dans des fichiers,
on peut commettre une erreur de saisie qui peut le rendre non connexes. Un test de
connexité permet de détecter ce genre d’erreurs.

Les points d’articulation et les isthmes peuvent mesurer la vulnérabilité d’un réseau.
Comme exemple, un réseau téléphonique peut être neutralisé en détruisant un point
d’articulation.

Algorithme 3 (Identification de composantes connexes) :


1. Prendre un sommet xi , déterminer C(xi ) = {xj ∈ X : xj Rxi } et l’éliminer :
(a) Marquer * le sommet xi .
(b) Marquer * tout sommet non marqué adjacent à un sommet marqué.
(c) Lorsqu’aucun sommet ne peut plus être marqué, les sommets marqués consti-
tuent C(xi ).
(d) Supprimer les sommets de C(xi ), leurs arcs incidents et leurs boucles.
2. Dans le sous-graphe restant, recommencer le premier point jusqu’à épuisement de
tous les sommets.

2.4 Composantes fortement connexes


Un graphe G(X, U) est fortement connexe si pour toute paire de sommets x, y il existe
un chemin de x vers y et un chemin de y vers x : il existe un circuit passant par x et y.
Si G n’est pas fortement connexe, il est formé de P > 1 sous-graphes fortement connexes
qu’on appelle composantes fortement connexes de G, et qu’on peut aussi voir comme
les classes d’équivalences de la relation de connexité forte :

x Rf y ⇔ il existe un chemin de x vers y et un chemin de y vers x.

21
Recherche opérationnelle Prof. Hamid Zouaki
On note Cf (xi ) la composante fortement connexe du sommet xi .

Cf (xi ) = {xj ∈ X : xj Rf xi }

Exemple :
Si une municipalité veut introduire ou modifier un système de rues à sens unique, elle
doit (faire) vérifier que l’ensemble des rues ainsi orientées, totalement ou partiellement,
constitue toujours un graphe fortement connexe. Sinon, certains points de la ville devien-
draient inaccessibles, d’autres se transformeraient en pièges...

Le théorème suivant permettra la caractérisation des composantes fortement connexes et


donnera un moyen pratique pour leur identification.

Théorème 2.4.1. Soit G = (X, U) un graphe et soit x un sommet de G. On désigne par


A(x) l’ensemble des ascendants de x. On désigne par D(x) l’ensemble des descendants de
x. Alors ∀xi ∈ X
1. Cf (xi ) = {xj ∈ X : xj ∈ A(xi ) ∩ D(xi )}
2. Cf (xi ) = {xj ∈ X : xj ∈ D(xi ) = D(xj )}.

Si G est un 1-graphe, on a :

Cf (xi ) = {xj ∈ X : xj ∈ Γ+ (xi ) ∩ Γ− (xi )}


Cf (xi ) = {xj ∈ X : xj ∈ Γ+ (xi ) = Γ+ (xj )}.

Algorithme 4 (Identification de composantes fortement connexes) :


1. Prendre un sommet xi , déterminer Cf (xi ) et l’éliminer :
Cf (xi ) = {xj ∈ X : xj ∈ A(xi ) ∩ D(xi )}
(a) Marquer + et - le sommet xi .
(b) Marquer + tout sommet non marqué suivant d’un sommet marqué +.
(c) Marquer - tout sommet non marqué précédant d’un sommet marqué -.
(d) Lorsqu’aucun sommet ne peut plus être marqué ni + ni -, les sommets marqués
+ et - constituent Cf (xi ).
(e) Supprimer les sommets de Cf (xi ), leurs arcs incidents et leurs boucles.
2. Dans le sous-graphe restant, recommencer le premier point jusqu’à épuisement de
tous les sommets.

2.5 Chemins et circuits Hamiltoniens


Définition 2.5.1. Soit G = (X, U) un graphe. Un chemin µ = [x1 , . . . , xk ] est dit Ha-
miltonien si, et seulement si, il passe une fois et une seule par chaque sommet de G.
Un circuit est dit Hamiltonien s’il passe une fois et une seule par chaque sommet sauf les
sommets initial et final qui doivent coincider.

22
Recherche opérationnelle Prof. Hamid Zouaki
Le problème du voyageur de commerce consiste à trouver un cycle hamiltonien de
coût total minimum. Ce problème est très célébre et souvent présenté comme celui d’un
représentant de commerce qui doit visiter des clients dans un ensemble de villes. Le
graphe associé a alors pour sommets l’ensemble des villes des clients et le domicile du
représentant. Le coût d’une arête est la distance parcourue entre deux villes. Le but pour
le représentant est de visiter chacun des clients une fois et une seule et revenir à son
domicile tout en minimisant le kilométrage parcouru.

Malgré cette formulation simple, le problème du voyageur de commerce reste actuelle-


ment un problème difficile à résoudre. Il sert d’essai pour mettre à l’épreuve les différentes
techniques en optimisation combinatoire. Du point de vue de la complexité algorithmique,
c’est un problème NP-complet.

Exemple d’application( fabrication de peinture) :


Une usine doit fabriquer tous les jours le même ensemble de n lots de peinture. Le lot i
nécessite une durée de fabrication de pi minutes. Le reacteur doit être nettoyé entre deux
lots. La duréee dij du nettoyage entre les lots i et j est connue et elle varie selon la couleur
et la composition des peintures. Le but est de minimiser la durée totale de fabrication
des lots.
Le problème est modélisé par un graphe orienté complet et valué. Un arc (i, j) indique la
possibilité d’enchainer le lot j après le lot i et valué par dij (c’est un problème d’ordon-
nancement). Le graphe est orienté car la durée de nettoyage entre i et j n’est pas la même
pour j et i. Si chaque lot doit être fait en une seule fois et si le même ordre d’application
est maintenu chaque jour, le problème revient à la recherche d’un circuit hamiltonien de
durée minimale.

Remarque :
Dans un graphe d’ordre n, un circuit Hamiltonien est un circuit élémentaire de longueur
n.
Il existe plusieurs résultats qui donnent des conditions suffisantes pour qu’un graphe soit
Hamiltonien. Nous donnons ci dessous une caractérisation dans le cas de graphe complet.

Théorème 2.5.1. Soit G = (X, Γ) un 1-graphe complet. Alors G admet un circuit Ha-
miltonien si, et seulement si, il est fortement connexe.

Démonstration:
⇒)
Soient xi , xj deux sommets distincts de G. Il s appartiennent à un même circuit (Hamil-
tonien). Il existe donc un chemin µ[xi , xj ] et un chemin µ[xj , xi ]. Ils appartiennent donc
à la même composante fortement connexe. G est donc fortement connexe.
⇐)
On considère un circuit élémentaire σ = [x1 , x2 , . . . , xk , xk+1 = x1 ] de longueur maximale
k. Supposons que G n’admet pas de circuit Hamiltonien. Il existe donc un sommet xi ∈ σ.
Par la maximalité de σ et parce que G est complet, on obtient en notant par xj−1 , xj , xj+1

23
Recherche opérationnelle Prof. Hamid Zouaki
des sommets successifs de σ les deux alternatives :
xj ∈ Γ(xi ) ⇒ xi ∈
/ Γ(xj−1 ) ⇒ xj−1 ∈ Γ(xi )
ou bien
xi ∈ Γ(xj ) ⇒ xj+1 ∈
/ Γ(xi ) ⇒ xi ∈ Γ(xj+1 )
xj étant un sommet arbitraire de σ on a :
ou bien tout xj ∈ σ est suivant de xi , ou bien tout xj ∈ σ est précédant de xi .
On peut donc partitionner les sommets xi non utilisés par le circuit en deux ensembles :
C 1 = {x1i ∈
/ σ : xj ∈ Γ(x1i ) ∀xj ∈ σ}
C 2 = {x2i ∈
/ σ : xj ∈ Γ−1 (x2i ) ∀xj ∈ σ}
Par hypothèse C 1 ∪ C 2 6= ∅.
G étant fortement connexe, on a aussi C 1 6= ∅ et C 2 6= ∅
G étant fortement connexe, il existe aussi un arc (x2i , x1i ) dirigé de C 2 vers C 1 .
Tout ceci permet de construire un circuit élémentaire [x1 , . . . , xk , x2i , x1i ] de longueur k +2,
d’où la contradiction avec le fait que σ est maximal.
Corollaire 2.5.1. Si le 1-graphe G = (X, Γ) est complet, il admet un chemin Hamilto-
nien.

2.6 Chaines et cycles Eulériens


Définition 2.6.1. Soit G = (X, U) un graphe non orienté (multigraphe). Une chaîne
Eulerienne (un cycle Eulerien) est une chaîne (cycle) qui utilise toute arête de G une
fois et une seule.
La ville de Königsberg est traversée par la rivière Pregolya, et comporte deux iles. Ces
iles sont reliées entre elles et aux berges par des ponts, comme sur la figure ci-dessous.
Est-il possible de passer d’une berge à l’autre de la ville en passant, une et une seule fois,
par tous les ponts que la ville comporte ? Est-il possible de passer une et une seule fois
par chaque pont, et de revenir à son point de départ ?

Ce problème est connu dans l’histoire comme le problème des sept ponts de König-
sberg. Il a été résolu par Euler, en le formulant par un graphe, et est considéré comme
un des problèmes à l’origine de la théorie des graphes.

a1

a2 a0

a3

24
Recherche opérationnelle Prof. Hamid Zouaki
Dans le cas des multi-graphes finis non orientés. Il est évident que pour que G possède
un circuit eulérien, i.e., pour que G soit eulérien, il est nécessaire que G soit connexe et que
le degré de chaque sommet soit pair. Comme le montre le résultat suivant, ces conditions
sont également suffisantes :

Théorème 2.6.1. Pour qu’un multigraphe G admette une chaîne Eulerienne, il faut et
il suffit qu’il soit connexe (à des points isolés près) et que le nombre de sommets de degré
impair soit 0 (cycle) ou 2 (chaîne non fermée).

L’algorithme suivant permet de construire un circit Eulerien (lorsqu’il existe) :

Agorithme 5 (Tracé d’un d’un cycle Eulérien)


Choisir un sommet x0
i=1
Répéter tant que possible
Choisir une arête ei = (xi−1 , xi ) telle que
– ei diffère des arêtes déjà choisies e1 , . . . , ei−1
– ei ne doit pas être un isthme du graphe partiel Gi = G \ {e1 , . . . , ei−1 }
i = i + 1.

Le fait de ne pas choisir un isthme permet de maintenir le multigraphe partiel Gi dans


les conditions d’application du théorèm d’Euler.

25
Recherche opérationnelle Prof. Hamid Zouaki

26
Chapitre 3

Problème du plus court chemin

3.1 Présenation du problème


Le problème de recherce d’un plus court chemin dans un graphe compte parmi les
problèmes les plus importants en théorie des graphes gràce surtoût à ses applications
diverses et quotidiennes.
On considère un graphe simple G = (X, U) = (X, Γ). On suppose qu’il existe une appli-
cation p qui joue le rôle de poids ou valuation des arcs du graphe :

p:U → R
u = (xi , xj ) 7→ p(u) = pij

On parle de graphe valué ou réseau.

Le problème de recherche du chemin de poids minimal consiste à chercher parmi tous


les chemins issus d’un sommet xr et arrivant à un sommet xi , un chemin de poids (ou
longueur) minimal. Le poids d’un chemin étant défini comme la somme des poids des arcs
le constituant : si on note µri le chemin allant de xr à xi , il s’agit de résoudre
X
min p(µri ) = min p(u)
µri µri
u∈µri

Les algorithmes de reherche d’un chemin de poids minimal se distinguent par les objectifs
à atteindre et les contraintes sur la nature du graphe et la valuation.
Nature du problème:
– le problème de la détermination d’un plus court chemin entre deux sommets,
– le problème de la détermination des plus courts chemin d’un sommet vers l’ensemble
des autres sommets du graphe,
– le calcul du plus court chemin pour l’ensemble des couples de sommets du graphe.
Contraintes:
– les longueurs sont toutes positives ou nulles
– le graphe et les longueurs sont quelconques
– le graphe est sans circuit
– le graphe est connexe ou fortement connexe.

27
Recherche opérationnelle Prof. Hamid Zouaki
Exemple d’application :
Les applications des chemins optimaux sont nombreuses, mais le premier qui vient à l’es-
prit est celui des transports.
Les logiciels d’optimisation de tournées de véhicules ont besoin de répondre des milliers
de fois à des requêtes du type : "quelle est la distance en km ou en temps de parcours
pour aller d’un endroit à un autre ?". Dans le graphe G du réseau routier, les sommets
correspondent à des villes, les arcs aux tronçons routiers et les valuations aux distances
ou aux temps de parcours. Les fournisseurs de base de données donnent un distancier ou
matrice contenant la valeur des plus courts chemins entre les différents couples de villes.
Mais parfois les utilisateurs ont besoin de calculer au jour le jour ces distances, pour
pouvoir géréer les différents imprévus qui modifient les distances. Pour celà, on utilise des
algorithme de type Dijkstra ou Bellman.

Définition 3.1.1. Soit G = (X, Γ) un graphe simple. On dit qu’un chemin de G allant
du sommet xr et arrivant à xi est ri-minimal si, parmi tous les chemins partant de xr et
aboutissant à xi , son poids est minimal.
On dira qu’un arc est r-minimal s’il est utilisé par au moins un chemin ri-minimal.

La recherche d’un chemin de coût minimal n’a de sens que si le graphe G ne contient
pas de circuit de coût négatif. En effet, on pourrait diminuer indéfiniment le coût d’un
chemin en tournant dans un tel circuit. Un tel circuit est appelé circuit absorbant.
En l’absence de circuit absorbant, on peut restreindre le recherche des plus courts chemins
aux seuls chemins élémentaires.

3.2 Théorème fondamental


Théorème 3.2.1 (Caractérisation des poids minimaux). Soit G = (X, Γ) un graphe
simple et soient pij des poids réels associés aux arcs (xi , xj ).
Soient πri avec πrr = 0 des nombres réels définis pour tous les xi ∈ Γ+ (xr ). Alors,
Les nombres πri représentent les poids de chemins ri-minimaux de G

⇐⇒

1. πrj ≤ πri + pij ∀i, j tel que xi ∈ Γ+ (xr )


2. Les arcs (xi , xj ) avec xi ∈ Γ+ (xr ) tq. le graphe Gr déduit de G en conservant
– les sommets xi avec xi ∈ Γ+ (xr )
– les arcs pour lesquels l’inégalité précédante est une égalité : πrj = πri + pij ,
admettent le sommet xr comme racine.

3.3 Algorithme de Bellman-Kalaba


Permet de déterminer le poids et le tracé des chemins ri-minimaux. On suppose que le
graphe est simple. Il possède n sommets numérotés 1, . . . , n. r est le numéro du sommet
dont sont issus les chemins ri- minimaux.
Tout sommet i est muni de deux marques : [pred(i), s(i)].

28
Recherche opérationnelle Prof. Hamid Zouaki
pred(i) : précédant de i sur un chemin ri- minimal.
s(i) : poids d’un chemin ri-minimal.
pij est le poids de l’arc (i, j), il est ∞ si (i, j) ∈
/ U.
L’algorithme est basé sur le principe de la programmation dynamique et qui énonce le
fait que les sous-chemins des plus courts chemins sont des plus courts chemins.

Algorithme (Bellman-Kalaba)
• Initialisation: Pour i = 1 à n s(i) ← ∞; pred(i) ← 0, s(r) ← 0.
• k←0
• Répéter
– stable ← vrai
b
– pour tout j ∈ Γ(r)
pour tout i ∈ Γ−1 (j)
si s(j) > s(i) + pij alors
s(j) = s(i) + pij
pred(j) = i
stable ← faux
– k ←k+1
• jusqu’à stable = vrai ou k > n − 1
• si k > n − 1 alors présence d’un circuit de poids négatif (absorbant).

Remarque 3.3.1. Lorsque le graphe est sans circuit il peut être décomposé en niveaux.
On peut donc simplifier le schéma précédant : la longueur du chemin de la racine à tous
les autres sommets est obtenue en considérant les sommets dans l’ordre topologique (rang
croissant) et en calculant
s(i) = min (s(j) + p(j, i))
j∈Γ
−1 (i)
.

Remarque 3.3.2. On utilisera, dans un chapitre ultérieur, l’algorithme de Bellman pour


la détermination d’un chemin critique dans un graphe d’ordonnancement (PERT ou Po-
tentiels tâches). Le fait que ce genre de graphe soit sans circuit, facilitera la mise en
oeuvre de l’algorithme de Bellman.

Exemple 1 :
On considère le graphe suivant pour lequel on cherche les chemins 1i-minimaux.

x2 2 x3

6
x1 1
5 2

1 x5
4
x4

29
Recherche opérationnelle Prof. Hamid Zouaki
b
Γ(1) = {1, 2, 3, 4, 5}.
Progression de l’algorithme :
Notations :
NM ← sommet non marqué.
TPM ← tout précédant est marqué.
• pred(1) = s(1) = 0, pred(i) = 0, s(i) = ∞ ∀i 6= 1.
• i = 2 : NM; T P M; s(2) = s(1) + p(1, 2) = 6 et pred(2) = 1.
• i = 3 : NM ; TPM : on passe.
• i = 4 : NM; T P M; s(4) = 1 et pred(4) = 1.
• i = 3 : NM; T P M; s(3) = 3 et pred(3) = 4.
• i = 5 : NM; T P M; s(5) = 4 et pred(5) = 3.
• Tout sommet dans Γ(1) b est marqué : stop.
Le théorème suivant, donné sans démonstration, permet, à l’aide du théorème fondamen-
tal, de justifier l’algorithme de Bellman-Kalaba :
Théorème 3.3.1. Supposons que l’algorithme de Bellman-Kalaba, appliqué au graphe
b en partant
G = (X, Γ) où X = {1, 2, . . . , n} est parvenu à marquer tout sommet j ∈ Γr
du sommet r. On a que
b πrj = s(j)
∀j ∈ Γr

3.4 Algorithme de Dijkstra


L’algorithme de Dijkstra n’est valable que pour les graphes à aluations positives. A
chaque itération, un sommet x reçoit son étiquette définitive (il est fixé). L’itération
principale sélectionne le sommet x d’étiquette minimale parmi ceux déjà atteints par un
chemin provisoire d’origine r.
A chaque sommet i, on associe trois marques [marque(i), pred(i), s(i)] :
marque(i) : marquage booléen.
pred(i) : précédant de i sur le plus court chemin de l’orgine à i sur le sous-graphe des
sommets marqués.
s(i) : plus courte distance du sommet origine à i.
r est le sommet origine et t est le sommet destination.
On notera T l’ensemble des sommets non marqués.
Algorithme (Dijkstra)
• Initialisation: Pour i = 1 à n s(i) ← ∞; pred(i) ← 0, s(r) ← 0.
• Por i = 1, . . . , n marque(i) ← 0. marque(r) ← 1
• recent ← r % sommet qui vient d’être marqué
• Tant que marque(t) = 0 faire
– pour chaque successeur i de recent
si marque(i) = 0
si s(i) > s(recent) + p(recent, i)
alors s(i) ← s(recent) + p(recent, i)
pred(i) ← recent
– soit y tel que s(y) = min s(x)
x∈T
– marque(y) ← 1.
– recent ← y.

30
Recherche opérationnelle Prof. Hamid Zouaki
Remarque 3.4.1. Une petite modification dans le corps de l’algorithme permet de trouver
non seulement le chemin rt-minimal, mais tous les chemins ri-minimaux. Si on note D
l’ensemble des sommets marqués définitivement, le test d’arrêt devient D = X.
L’exemple suivant permet d’illustrer cette démarche.

Exemple 2 : On reprend le même graphe que pour l’exemple 1 :


On indique les phases que l’on rencontre.
1) [pred(1), s(1)] = [0, 0]; [pred(i), s(i)] = [0, ∞] ∀i 6= 1.
2) recent ← 1; D ← {1}; T ← {2, 3, 4, 5}.
3) (1, 2) ∈ U s(1) + p(1, 2) = 0 + 6 < s(2) = ∞ ⇒ [pred(2), s(2)] = [1, 6]
(1, 3) ∈
/U
(1, 4) ∈ U s(1) + p(1, 4) = 0 + 1 < s(4) = ∞ ⇒ [pred(4), s(4)] = [1, 1]
(1, 5) ∈
/U
4) recent ← 4; s(4) = minj∈T {s(j)} = {6, ∞, 1, ∞}
D ← {1, 4}; T ← {2, 3, 5}.
3) (4, 2) ∈
/U
(4, 3) ∈ U s(4) + p(4, 3) = 1 + 2 < s(3) = ∞ ⇒ [pred(3), s(3)] = [4, 3]
(4, 5) ∈ U s(4) + p(4, 5) = 1 + 4 < s(5) = ∞ ⇒ [pred(5), s(5)] = [4, 5]
4) recent ← 3; s(3) = minj∈T {s(j)} = {6, 3, 5, }
D ← {1, 4, 3}; T ← {2, 5}.
3) (3, 2) ∈
/U
(3, 5) ∈ U s(3) + p(3, 5) = 3 + 1 < s(5) = 5 ⇒ [pred(5), s(5)] = [3, 4]
4) recent ← 5; s(5) = minj∈T {s(j)} = {6, 4}
D ← {1, 4, 3, 5}; T ← {2}.
3) (5, 2) ∈
/U
4) recent ← 2; s(2) = minj∈T {s(j)} = {6}
D = X ⇒ stop.

3.5 Algorithme de Floyd


Cet algorithme est applicable à un graphe simple et sans circuit absorbant. Il permet
de déterminer le poids de tous les chemins ij-minimaux : permet donc de calculer un dis-
tancier n × n. Contrairement aux algorithmes à origine fixée, qui supposent que le graphe
est représenté par une liste d’adjacence, l’algorithme de Floyd utilise une représentation
par matrice d’adjacence.
P = (pij )1≤i,j≤n est la matricedes poids, où pii = 0 et pij = ∞ ∀(i, j) ∈
/ U.
0, si pij = ∞;
pred est définie par predij =
i, sinon.
A la fin de l’algorithme :
pij donnera la longueur du plus court chemin entre le sommet i et le sommet j,
predij indiquera le prédecesseur du sommet j sur le plus court chemin entre i et j.

Algorithme (Floyd) :
Pour k = 1 à n
pour i = 1, . . . , n; i 6= k

31
Recherche opérationnelle Prof. Hamid Zouaki
si pik + pki < 0 Stop (présence d’un circuit absorbant)
si pik 6= ∞ alors
pour j = 1, . . . , n; j 6= i
γ = pik
si γ + pkj < pij
pij ← γ + pkj
predij ← predkj .

L’algorithme de Floyd se base sur l’application n fois de l’opérateur Tk , k = 1, . . . , n :

Tk : Mn (R) → Mn (R)
P → Tk P


(Tk P )ij = min(pij , pik + pkj )
L’application de l’opérateur Tk correspond à l’intercallage du sommet d’extension k dans
les couples de sommets (i, j). k désigne l’index des itérations (sommet d’extension).
P (k) est la matrice résultant de l’itération k : P (k) = Tk P (k−1) , avec P (0) = P la matrice
des poids.
Avec ces notations, on aura
P (n) = Tn Tn−1 . . . T2 T1 P
On va montrer que cette matrice représente la matrice des poids des chemins ij-minimaux.

Proposition 3.5.1. Si le graphe G ne possède pas de circuit absorbant, alors

Tk Tm P = Tm Tk P ∀m, k (3.1)
Tk Tk P = Tk P ∀k. (3.2)

Définitions :
1. Soient P, Q deux matrices n × n

P ≥ Q ⇔ pij ≥ qij ∀i, j.

2. On désigne par MinQ la matrice des poids des chemins minimaux d’un graphe
simple dont la matrice des poids est Q.
On a la proposition suivante :

Proposition 3.5.2. la matrice Q est la matrice des poids minimaux si, et seulement si,
l’intercallage d’un sommet ne permet plus d’améliorer aucun poids :

Q = MinQ ⇔ Tk Q = Q ∀k.

Théorème 3.5.1. Soit P la matrice des poids du graphe simple auquel on a appliqué
l’algorithme de Floyd.
Si Q = Tn Tn−1 . . . T2 T1 P alors Q = MinQ.

32
Recherche opérationnelle Prof. Hamid Zouaki
Démonstration :
On a, par la proposition 1,

Tk Q = Tk (Tn Tn−1 . . . T2 T1 P )
= Tn Tn−1 . . . Tk Tk . . . T2 T1 P
= Tn Tn−1 . . . Tk . . . T2 T1 P
= Q.

d’où, par la proposition 2, Q = MinQ.


En plus, on a

P ≥ T1 P ≥ T2 T1 P ≥ . . . ≥ Tn Tn−1 . . . T2 T1 P = Q

d’où P ≥ Q et donc MinP ≥ MinQ.


Comme Q est une matrice représentant des poids de chemins reliants les sommets i, j, on
a Q ≥ MinP . Finalement

MinP ≥ MinQ = Q ≥ MinP.

Il s’en suit que Q = MinP 

Exemple 3 :
Illustrons le déroulement de l’algorithme de Floyd à travers l’exemple du graphe ci-dessus :

3
3
x1 x2
2

−2 2 4 2

1
x3 x4
4

33
Recherche opérationnelle Prof. Hamid Zouaki

   
0 3 ∞ 3 1 1 0 1
 2 0 2 2 2 2 2 2
P (0) = −2 ∞
 pred(0) = 
0 1 3 0 3 3
∞ 4 4 0 0 4 4 4
   
0 3 ∞ 3 1 1 0 1
 2 0 2 2 2 2 2 2
P (1) = −2 1
 pred(1) = 
0 1 3 1 3 3
∞ 4 4 0 0 4 4 4
   
0 3 5 3 1 1 2 1
 2 0 2 2 2 2 2 2
P (2) = 
−2 1
 pred(2) = 
0 1 3 1 3 3
6 4 4 0 2 4 4 4
   
0 3 5 3 1 1 2 1
 0 0 2 2 3 2 2 2
P (3) = 
−2 1
 pred(3) = 
0 1 3 1 3 3
2 4 4 0 3 4 4 4
   
0 3 5 3 1 1 2 1
 0 0 2 2 3 2 2 2
P (4) = 
−2 1
 pred(4) = .
0 1 3 1 3 3
2 4 4 0 3 4 4 4

34
Chapitre 4

Ordonnancement de projets

Un projet est un ensemble de tâches ou opérations permettant d’atteindre un cer-


tain nombre d’objectifs. Les tâches sont elles mêmes soumises à un certain nombre de
contraintes :
1. Contraintes potentielles :
– contraintes d’antériorité : une tâche A ne peut commencer que si la tâche B est
achevée.
– contraintes de localisation temporelle : A ne peut débuter avant une date imposée
(appareils non diponibles ...etc.) ou ne peut se terminer après une date imposée.
2. Contraintes disjonctives :
imposent la non réalisation simultanée de deux tâches A et B.
3. Contraintes non cumulatives :
tiennent compte de tous les facteurs productifs : hommes, machines et moyens
financiers. Elles limitent les possibilités d’ordonnancement.
Les techniques d’ordonnancement ont pour objet d’aider à la résolution des
problèmes de planification des tâches et de contrôle de l’exécution du projet:
peut-on réaliser un planning prévisionnel et si possible un planning optimal,
c’est à dire un planning qui permet de réaliser le projet en un temps minimal ?

Nous allons voir que, aussi bien pour sa formulation que pour sa résolution, ce pro-
blème utilise la notion de graphe ainsi que les techniques, déjà vues, de calcul du chemin
le plus court.

4.1 Formulation du problème


Nous avons n tâches à exécuter, notées (i), i = 1, . . . , n. On introduit artificiellement
une tâche (0) associée au début du projet et une tâche (n + 1) associée à la fin du projet.
On utilise également la notation di pour désigner la durée d’éxécution de la tâche (i).
Une contrainte d’antériorité reliant les tâches (i) et (j) sera notée (i, j) : la tâche (i) doit
être éxécutée totalement avant qu’on puisse commencer à exécuter la tâche (j). La tâche
(0) est antérieure à toutes les tâches, la tâche (n + 1) est postérieure à toutes les tâches.

35
Recherche opérationnelle Prof. Hamid Zouaki
Une méthode d’ordonnancement est un ensemble de méthodes qui permettent au res-
ponsable du projet de prendre des décisions nécessaires dans de meilleures condditions
possibles. Elle doit permettre d’analyser le problème en profondeur, en le décomposant
en tâches, mettre sur pied un plan d’action en respectant les contraintes et contrôler le
bon déroulement du projet.

Prenons un exemple. On veut construire un nouveau bâtiment de manière à pou-


voir déménager au plus tôt. Certaines tâches ne peuvent s’exécuter qu’après que d’autres
soient terminées. Par exemple, on ne peut commencer les fondations que lorsque le ter-
rassement est fini. D’autres tâches peuvent s’exécuter simultanèment. Par exemple, les
travaux d’électricité et de plomberie peuvent être menés de pair. Les données sont résu-
mées dans le tableau ci-dessous :

Tâche Description Durée (jours) précédants


1 terrassement 5 -
2 fondations 4 1
3 colonnes porteuses 2 2
4 charpente toiture 2 3
5 couverture 3 4
6 maçonnerie 5 3
7 plomberie, éléctricité 3 2
8 coulage dalle 3 7
9 chauffage 4 8 et 6
10 plâtre 10 9 et 5
11 finitions 5 10
On appelle planning un ensemble de dates affectées à chaque tâche.
Les variables du problème sont les suivantes :
on note par ti le temps de début d’éxécution de la tâche (i).
t0 note la date de début du chantier que l’on fixe à 0.
tn+1 note la date de fin du chantier.

L’objectif est de minimiser le temps de réalisation du chantier :


min z = tn+1 − t0 .
Les contraintes du problème sont de trois types :
– Les contraintes de localisation temporelle exprimant que la tâche (i) ne peut com-
mencer avant le début du chantier :
ti ≥ t0 .
– Les contraintes de succession temporelle exprimant que la contrainte (j) ne peut
débuter avant que toute tâche la précédant ne soit finie :
ti + di ≤ tj pour toute tâche (i) antérieure à (j).
– Les contraintes de fin de chantier qui expriment que toute tâche doit se terminer
avant la fin du chantier :
ti + di ≤ tn+1 ∀i = 1, . . . , n.

36
Recherche opérationnelle Prof. Hamid Zouaki
4.2 Formulation potentiels-tâches
4.2.1 Graphe d’ordonnacement
Le graphe G = (X, U) associé au problème est construit comme suit :
– A toute tâche (i) est associé un sommet.
– A toute contrainte d’antériorité (i, j), on associe un arc u = (i, j) de G.
– A chaque arc u = (i, j) est associé un coût d(u) = di durée de la tâche (i).
– On relie le sommet (0) à tous les sommets qui n’ont de précédant.
On relie les sommets qui n’ont pas de successeur au sommet (n + 1).

Remarque 4.2.1. Un graphe d’ordonnacement est sans circuit.


Ceci va permettre de décomposer le graphe en niveaux et, comme on le verra plus loin,
simplifiera la procédure d’ordonnacement.

Pour l’exemple d’introduction, on obtient le graphe suivant :

3 2 4 2 5
4 2 3
0 0 1 5 2 6 10 10 11 5 12
4 5 4
7 3 8 3 9

4.2.2 Calcul d’un planning optimal


Définitions:
– Pour une tâche (i), la date au plus tôt, notée πi , est la date minimale à laquelle
on peut démarrer l’éxécution de la tâche (i) compte tenu des données et contraintes
du problème.
– Pour une tâche (i), la date au plus tard, notée ηi , est la date limite à laquelle
on doit commencer l’éxécution de la tâche (i) sous peine de retarder l’éxécution du
projet, quand on se place dans une situation de planning optimal.
– La marge mi est le délai dont on dispose pour la réalisation de la tâche (i) :

mi = ηi − πi

– On note par ti la plus longue distance (le coût du chemin le plus long) entre le
sommet (0) et le sommet (n + 1).
– t′i dénote la plus longue distance entre le sommet (i) et le sommet (n + 1).

Théorème 4.2.1. Les dates au plus tôt et plus tard sont données par :

πi = ti (4.1)
ηi = tn+1 − t′i . (4.2)

37
Recherche opérationnelle Prof. Hamid Zouaki
Démonstration :
Pour un sommet (i) de G, soit Ci l’ensemble des chemins d’origine (0) et d’éxtrémité (i).
Si Ck = {(i1 , i2 , . . . , ip ) : i1 = (0), ip = (n + 1)} chemin d’origine (0) et d’éxtrémité (i)
et de longueur
p−1
X
l(Ck ) = d ij
j=1

on a πi ≥ l(Ck ) : car la tâche i ne peut débuter qu’une fois les tâches i1 , i2 , . . . , ip sont
éxécutées. On a donc
πi ≥ max l(Ck ) = ti
Ck ∈Ci

Il suffit donc de montrer que l’ensemble des ti définit bien un planning :


on a
tj − ti ≥ di

sinon le plus long chemin entre (0) et (j) est de coût supérieur à tj . En effet, le plus long
chemin entre (0) et (i) suivi de l’arc (i, j) définirait un chemin de longueur > à tj .
D’autre part, on a t0 = 0.
La preuve de la deuxième propriété est similaire.

Ce théorème montre que pour trouver le planning optimal, il suffit de calculer, dans
le graphe G, les plus long chemins et plus longues distances entre le sommet (0) et les
autres sommets. Pour celà, on peut appliquer l’algorithme de Bellman-Kalaba, traité au
chapitre 3, dans sa version "plus long chemin".
Comme on l’a énoncé plutôt, le graphe d’ordonnancement est sans circuit. On peut donc
le décomposer en niveaux. Ceci facilitera d’une manière siginficative l’utilisation de l’al-
gorithme de Bellman.

Pour trouver les dates au plus tard, il suffit, pour le calcul des t′i , d’appliquer l’al-
gorithme de Bellman-Kalaba, dans sa version plus long chemin, en inversant le sens des
arcs dans G et en partant du sommet (n + 1).

Chemins critiques, tâches critiques

– Un plus long chemin entre (0) et (n + 1) est appelé chemin critique.


Les tâches situées sur un chemin critique sont appelées tâches critiques. Ce sont les
tâches dont il faut suivre l’éxécution avec attention. Tout retard pris dans l’éxécu-
tion d’une tâche critique entrainera un retard dans la réalisation du projet.
– Les tâches critiques ont une marge nulle.

On résume dans le tableau ci-dessous, les résultats relatifs à l’ordonnancement de


l’exemple d’illustration de ce chapitre. Nous avons appliqué l’algorithme de Bellman deux
fois. Une fois entre (0) et (12) et une fois à rebours.

38
Recherche opérationnelle Prof. Hamid Zouaki
Tâche date au plus tôt date au plus tard la marge
0 0 0 0
1 0 0 0
2 5 5 0
3 9 9 0
4 11 15 4
5 13 17 4
6 11 11 0
7 9 10 1
8 12 13 1
9 16 16 0
10 20 20 0
11 30 30 0
12 35 35 0

La durée optimale pour la réalisation de notre projet est t12 = 35 jours.


Les tâches critiques sont les tâches ayant une marge nulle. Il s’agit des tâches 1, 2, 3, 6, 9, 10, 11.
Elles correspondent aux sommets qui se trouvent sur le chemin optimal entre le sommet
(0) et le sommet (12).

4.3 Formulation PERT

A la fin des années cinquante, la marine américaine conçoit une nouvelle technique
d’ordonnancement qui devait conduire à des gains de temps importants dans la réalisation
de ses missiles à ogive nucléaire Polaris : c’est la technique PERT (Programm Evaluation
and Review Technique - technique d’ordonnancement et de contrôle des programmes).
Cette technique a permis de coordonner les travaux de près de 6000 constructeurs dans
les délais imposés par le gouvernement américain.
Le projet POLARIS représentait entre autres : 250 fournisseurs, 9000 sous-traitants, 7
ans de réalisation.
L’utilisation du PERT a permis de ramener la durée globale de réalisation du projet de
7 à 4 ans. Cette méthode s’est ensuite étendue à l’industrie américaine puis à l’industrie
occidentale.
Le PERT est « une méthode consistant à mettre en ordre sous forme de réseau plusieurs
tâches qui grâce à leur dépendance et à leur chronologie concourent toutes à l’obtention
d’un produit fini ».
Elle se distingue de la méthode du potentiel par le fait que les tâches ne sont plus associées
aux noeuds mais bien aux arcs du réseau. L’algorithme de résolution est très semblable à
celui de la méthode du potentiel. La différence majeure réside donc dans la construction
du graphe : le graphe de la méthode PERT est souvent plus difficile à construire que celui
de la méthode du potentiel car on peut être amené à introduire des arcs fictifs qui ne
correspondent à aucune tâche.

39
Recherche opérationnelle Prof. Hamid Zouaki
4.3.1 Graphe d’ordonnancement
– Les sommets d’un graphe PERT, G = (X, U) correspondent aux étapes de l’éxécu-
tion du projet.
Il y’a une étape début et une étape fin.
– Les arcs u du graphe correspondent aux tâches du projet. la valuation d(u) de l’arc
u est alors la durée de la tâche associée.
Parfois, il est nécessaire d’introduire des tâches fictives exprimant les contraintes
d’antériorité. Une tâche fictive a une durée nulle. Elle ne modifie pas le délai final.
– Une étape x est ateinte lorsque toutes les tâches, réelles ou fictives, dont x est
l’éxtrémité terminale sont achevées.
– On ne peut commencer l’éxécution d’une tâche u = (x, y) avant que l’étape x ne
soit atteinte.

On ne peut pas, en général, associer de graphe PERT unique. Cependant, il est possible
de construire un réseau de manière systématique :

1. A chaque tâche on fait correspondre un arc.

2. Les sommets du graphe sont d’une part l’éxtrémité initiale I(u) et finale T (u) des
arcs, d’autre part le sommet D (début du projet) et le sommet F (fin du projet).

3. Si u et v sont les arcs associés respectivement aux tâches (i) et (j), si (i, j) ∈ U ((i)
doit s’exécuter avant le début de (j)), on crée l’arc (T (u), I(v)).

4. Joindre le sommet D à tous les sommets constitués aux étapes précédantes et


n’ayant pas de sommet antécédant.

5. Joindre les sommets n’ayant pas de successeur au sommet F .

En général, les arcs représentant des tâches réelles sont tracés en traits pleins. Les
arcs dessinés en traits pointillés représentent des tâches fictives.

Le graphe systématique, obtenu après ces étapes, est en général beaucoup trop com-
pliqué pour avoir un intérêt pratique.
On peut réduire ce graphe en identifiant les sommets entre eux. Il faut surtoût prendre
garde que les opérations de réduction préservent toutes les contraintes d’antériorité et
n’en ajoutent pas de nouvelles.

Quand ajouter une tâche fictive?


C’est une tâche de durée nulle. Son rôle est de lever les ambiguités :
Le recours à une tâche fictive s’impose chaque fois que deux tâches admettent comme
ensemble de leurs prédécesseurs immédiats des ensembles différents et non disjoints.
Exemple :
(l) succède à (j). (k) succède à (i) et (j).
Une représentation correcte de cette situation :

40
Recherche opérationnelle Prof. Hamid Zouaki
1 i 2 k 3

4 j 5 l 6

Exemple : (Illustration du graphe PERT)


On considère le projet d’implantation d’un réseau informatique. Ce projet compte une
phase de planification, une phase de mise en place du matériel et une phase d’élaboration
des procédures. Chacune de ces procédures se ramifie en plusieurs tâches.
Le tableau ci-dessous donne la description des différentes tâches du projet, leur durée
ainsi que les relations d’antériorité :

Tâche Description prédécesseurs immédiats Durée en jours


A Evaluation initiale - 5
B Elaboration de la structure du réseau A 10
C Plan de formation du personnel A 3
D Analyse des coûts B, C 5
E Approbation du budget B, C, D 5
F Mise en place du cablage E 5
G Montage du serveur F 5
H Montage des stations G 3
I Installation logiciels du réseau H 4
J Montage des lignes téléphoniques G 5
K Montage des ponts G 3
L Documentation de la structure I, J, K 5
M Formation du personnel L 8
N Politique d’entretien H, J, K 2
O Elaboration procédures d’exploitation L, N 5
P Elaboration procédures de sécurité O 5
Q Elaboration procédures d’entretien O 5

Le graphe PERT associé à ce projet d’oronnancement est donné ci-dessous :

41
Recherche opérationnelle Prof. Hamid Zouaki

1 A 2 C 4 D 5 E 6 F 7 G 8 H 10 I 12 L 13 M 17

B F1
K J F3 F4 F5
3

9 F2 11 N 14 P F6

15 Q 16

4.3.2 Calcul d’un planning optimal

On applique l’algorithme de Bellman-Kalaba au réseau PERT :


– On note t(x) la plus longue distance entre le sommet D et le sommet x ∈ X
– On note ν(x) la plus longue distance entre le sommet x et le sommet F .
On a le résultat important :

Théorème 4.3.1. Si (i) est une tâche représentée par un arc (x, y) dans G, alors on a

πi = t(x) (4.3)
ηi = π(F ) − ν(y) − d(u) (4.4)
mi = ηi − πi . (4.5)

On donne ci dessous les résultats de l’ordonnancement de l’exemple PERT présenté


au paragraphe précédant.
Après application de Bellman dans les deux sens, on construit le tableau contenant pour
chaque tâche la date au plus tôt, la date au plus tard ainsi que sa marge :

42
Recherche opérationnelle Prof. Hamid Zouaki
Tâche date au plus tôt date au plus tard marge
A 0 0 0
B 5 5 0
C 5 12 7
D 15 15 0
E 20 20 0
F 25 25 0
G 30 30 0
H 35 35 0
I 38 38 0
J 35 37 2
K 35 39 4
L 42 42 0
M 47 49 2
N 40 45 5
O 47 47 0
P 52 52 0
q 52 52 0

La durée optimale pour la réalisation du projet est de 57 jours.

43
Recherche opérationnelle Prof. Hamid Zouaki

PARTIE II

Programmation Linéaire

44
Chapitre 5

La méthode du simplexe

5.1 Introduction et définitions de base


L’optimisation peut être généralement définie comme une opération permettant d’ob-
tenir le meilleur de quelque chose, dans des conditions bien définies.
Le développement de l’informatique et des techniques numériques permet maintenant une
bonne modélisation de phénomènes complexes.
Dans une première étape, on détermine les paramètres d’un modèle pour l’adapter à
chaque cas précis : problème de modélisation. Dans une deuxième étape, on utilise ce
modèle pour maîtriser et améliorer le phénomène : problème d’optimisation.

Du point de vue mathématique, l’objet de la théorie de l’optimisation est essentiel-


lement d’étudier sous tous ses aspects la minimisation d’une fonction numérique sur un
domaine définie.
Parmi les problèmes d’optimisation, beaucoup sont d’un type particulier :le coût à opti-
miser ainsi que les contraintes reliants les différents paramètres sont linéaires. On parle
de programme linéaire.
La programmation linéaire a pour objet l’étude et la résolution de programmes linéaires.
Il s’agit d’une des techniques les plus célébres en calcul numérique et en recherche opé-
rationnelle. Celà est dû au fait que de nombreux problèmes concrets provenant de do-
maines aussi divers que l’industrie pétrolière, les transports, l’agriculture, la gestion . . .
etc. peuvent être modélisés comme des programmes linéaires. Ces problèmes apparaissent
aussi comme sous-produits dans des algorithmes conçus pour résoudre des problèmes plus
difficiles. La résolution des problèmes correspondant à ces modèles a permis des progrès
notables.

Avant de donner l’écriture générale d’un programme linéaire, nous présentons deux
exemples simples illustrant la notion de programme linéaire :
1. Problème de production :
Une entreprise fabrique 2 produits X et Y . Pour sa conception, chaque produit fini
nécessite 3 produits intermédiaires A, B et C. Pour fabriquer une unité du produit
X, on a besoin de 2 unités du produit A, de 2 unités du produits B et de 1 unité
du produit C. De même, pour fabriquer une unité de Y , on a besoin de 3 unités de
A, 1 unité de B et de 3 unités de C. En outre, l’entreprise dispose d’une quantité

45
Recherche opérationnelle Prof. Hamid Zouaki
limitée de produits A, B et C. Elle a 180 unités de A, 120 de B et 150 de C. Sachant
que le prix de revient d’une unité de X est 3 unités monétaires (um) et que celui
de Y est de 4 um, combien d’unités de X et Y faut-il fabriquer pour maximiser le
profit ?

On modélise ce problème par un prigramme linéaire. Soit x et y les quantités de


produits X et Y fabriqués.
La quantité totale du produit A utilisée est 2x + 3y. Cette quantité ne doit pas
dépasser 180, d’où la contrainte

2x + 3y ≤ 180

De même pour les produits B et C :

2x + y ≤ 120
x + 3y ≤ 150

Les quantités x et y sont bien entendu positives

x, y ≥ 0

Le profit, qu’on tente de maximiser, est le total des bénéfices sur la vente des
produits X et Y :
max 3x + 4y
2. Problème de transport :
Une entreprise de construction automobile possède 3 usines situées respectivement
dans les villes V1 , V2 et V3 . Un certain métal nécessaire à la construction est dispo-
nible aux ports P1 , P2 .
La quantité de métal nécessaire à la construction aux trois usines chaque semaine
est respectivement400, 300 et 200 tonnes.
Les qunatités disponibles dans les deux ports sont de 550 et 350 respectivement.
Les coûts de transports sont supposés varier proportionnellement aux quantités
transportées. Les coûts unitaires sont donnés par :
V1 V2 V3
P1 5 6 3
P2 3 5 4
Le problème consiste à trouver quels sont les poids de métal à envoyer depuis chaque
port vers chaque usine de sorte que :
(a) les demandes soient satisfaites,
(b) les quantités demandées à chaque port n’exèdent pas les quantités disponibles,
(c) le coût total de transport est minimum, compte tenu des contraintes.
Notons xij la quantité de tonnes de métal acheminée chaque semaine du port Pi
vers l’usine Vj .
Le programme linéaire associé s’écrit :

46
Recherche opérationnelle Prof. Hamid Zouaki
(a) satisfaire les demandes :

x11 + x21 ≥ 400


x12 + x22 ≥ 300
x13 + x23 ≥ 200

(b) disponibilité :

x11 + x12 + x13 ≤ 550


x21 + x22 + x23 ≤ 350
xij ≥ 0

(c) rendre minimum le coût global de transport :

5x11 + 6x12 + 3x13 + 3x12 + 5x22 + 4x23 .

Exercice de modélisation (coupe de bobines) :


Les papetiers fabriquent des rouleaux de papier dont la largeur est fixée par les caracté-
ristiques des machines qu’ils utilisent. Ils les désignent sous le vocable de bobines mères.
Par contre, leurs clients réclament des rouleaux de diverses largeurs et parfois de diverses
longueurs. Comme il est fréquent que ni la largeur ni la longueur des bobines mères ne
soient multiples de celles des rouleaux commandés, les papetiers encourent souvent, pour
satisfaire les commandes, des pertes de papier qu’ils désignent sous le nom de chutes.
On supppose que toutes les bobines mères dont dispose un papetier ont une largeur de
215cm et une longueur de 250m, et qu’il a accepté les commandes données au tableau
ci-dessous :
Largeur (en cm) Longueur (en m) Nombre de rouleaux
64 250 360
60 250 180
35 250 180

Comme la longueur des rouleaux commandés est identique à celle des bobines mères, il
suffit d’assurer la coupe transversale d’un certain nombre de bobines mères.
Quel est l’objectif poursuivi par le papetier ? Comment modéliser un tel problème ?

Définition 5.1.1. On appelle programme linéaire (PL), tout problème d’optimisation de


la forme, dite forme canonique :

max < C, X >


AX ≤ b
X ≥ 0.

A : matrice m × n ;
b : vecteur de Rm ,
C : vecteur de Rn .

47
Recherche opérationnelle Prof. Hamid Zouaki
L’application X 7→< C, X > est appelée fonction économique ou objectif.
Les inéquations AX ≤ b, X ≥ 0 sont les contraintes.
Ce même problème peut se mettre sous la forme

min < C ′ , X >


A′ X ≥ b′
X ≥ 0.

Il suffit de prendre A′ = −A, b′ = −b et C ′ = −C.


Si le vecteur X satisfait toutes les contraintes, X est dite solution admissible ou réa-
lisable.
L’ensemble de toutes les solutions admissibles est l’ensemble admissible ou la région ad-
missible.
Dans le cas d’un programme linéaire, l’ensemble des solutions réalisables est un polyèdre
convexe.

Remarque 5.1.1. Les contraintes X ≥ 0, auraient


  pû être incluses dans les contraintes
A b
e=
AX ≤ b. Il suffit de prendre A et eb = , le problème s’écrit alors
−I 0

max < C, X >


e ≤ eb.
AX

Cependant, l’usage prévaut de séparer les contraintes de positivité, qui ont en général une
origine physique, des autres contraintes. Chose qui est très pratique, comme on verra lors
de la résolution de ce genre de problème.
Définition 5.1.2. Deux programmes mathématiques (P1 ) et (P2 ) sont dits équivalents,
si à toute solution réalisable de l’un, on sait faire correspondre une solution réalisable
de l’autre, de telle sorte que les fonctions objectives soient égales pour cette paire de
solutions.
Proposition 5.1.1. Le problème d’optimisation général :

max < r, x >+ < s, y >


B.x + D.y ≥ f
M.x + N.y ≤ g
P.x + Q.y = h
x≥0

est un programme linéaire. Autrement dit, tout programme linéaire peut être ramené,
d’une manière équivalente, à un programme linéaire sous forme canonique.
Voici quelques exemples illustrant cette proposition :
– Si une variable est négative, on la remplace par une variable positive : x′ = −x.
– Si une variable n’a pas de contrainte de signe, on l’écrit comme différence de deux
variables positives : x = x′1 − x′2 .

48
Recherche opérationnelle Prof. Hamid Zouaki
– Si on a une contrainte de supériorité Ai X ≥ bi , on la remplace par −Ai X ≤ −bi .
– Une contrainte d’égalité Ai X = bi est remplacé par

Ai X ≤ bi
−Ai X ≤ −bi

Définition 5.1.3. On appelle forme standard d’un programme linéaire, la form sui-
vante :

max < C, X >


AX = b
X ≥ 0.

Proposition 5.1.2. Tout programme linéaire sous forme canonique peut être écrit sous
forme standard.

Démonstration :
L’inéquation Ai .x ≤ bi est équivalente à la paire équation-inéquation :

Ai x + ξi = bi
ξi ≥ 0.

La variable ξi , introduite, est appelée variable d’écart associée à la contrainte Ai .x ≤ bi .


On ajoute autant
 de variables d’écarts qu’il y’a d’inégalités (lignes de la matrice A). En
ξ1
 .. 
notant ξ =  . , le programme linéaire est équivalent à :
ξm

max < C, X >


AX + I.ξ = b
X ≥ 0, ξ ≥ 0.

Remarque 5.1.2. C’est pour les problèmes sous forme standard que sont mis au point
les principaux algorithmes de calcul. Le plus célébre étant la méthode du simplexe.

Avant de présenter l’algorithme de résolution, on aura besoin de rappeler certaines


notations d’algèbre linéaire :

Notations et définitions :
A : matrice m × n, (m lignes et n colonnes).
X : vecteur de taille n.
A = (aij )1≤i≤m,1≤j≤n . i indice de ligne, j indice de colonne.
On note Aj le vecteur colonne correspondant à la colonne j de A.
On note Ai le vecteur ligne correspondant à la ligne i de A.

49
Recherche opérationnelle  Prof. Hamid Zouaki
A1
  
Une matrice A peut être vue de 2 manières : A =  ...  = A1 . . . An
Am
 
x1
 .. 
Si X =  .  alors l’opération A.X peut être exprimée suivant l’écriture de A :
xn
 
A1 .X
 A2 .X 
 
1. A.X =  .. .
 . 
Am .X
C’est la vision ligne.
2. A.X = x1 A1 + x2 A2 + . . . + xn An .
C’est la vision colonne : A.X est une combinaison linéaire des colonnes de A.
On peut étendre cette présentation au produit matriciel :
A matrice m × p, B matrice p × n. On définit le produit matriciel C = AB comme la
matrice m × n définie par
p
X
cij = aik bkj
k=1

qu’on peut voir de plusieurs manières, suivant l’écriture ligne ou colonne :


1. AB = (AB 1 , . . . , AB p )
 
A1 B
 A2 B 
 
2. AB =  .. 
 . 
Am B
3. (AB)ij = Ai .B j
4. AB = A1 B1 + A2 B2 + . . . + An Bn .

Maintenant, on considère un ensemble d’indices K ⊂ {1, 2, . . . , n}.


XK est le vecteur colonne dont les composantes sont xj : j ∈ K.
C K est le vecteur ligne dont les composantes sont cj : j ∈ K.

Exemple :
 
2 1 1 0 0
A = 1 2 0 1 0 m = 3, n = 5.
0 0 0 0 1
 
x1  
x2  8
  
 
X = x3  , b = 7 ,
 c= 4 5 0 0 0 ;
x4  3
x5

50
Recherche opérationnelle Prof. Hamid Zouaki
Si on prend K = {1, 2, 5}, alors
   
2 1 0 x1
AK = {Aj : j ∈ K} = 1 2 0 , XK = x2 

0 0 1 x5

K désignera le complémentaire de K.
 
1 0  
x3
AK = 0 1 , XK =
x4
0 0

Le produit AX s’écrit :

AX = x1 A1 + x2 A2 + x3 A3 + x4 A4 + x5 A5
= x1 A1 + x2 A2 + x5 A5 + x3 A3 + x4 A4
= AK XK + AK XK

Le produit scalaire CX s’écrit :

CX = c1 x1 + c2 x2 + c3 x3 + c4 x4 + c5 x5
= c1 x1 + c2 x2 + c5 x5 + c3 x3 + c4 x4
= C K XK + C K XK .

5.2 Principe de l’algorithme du simplexe


Pour pouvoir appliquer la méthode du simplexe, on met d’abord notre problème sous
forme standard.
Soit donc le P.L.

max < C, X >


AX = b
X ≥ 0.

où A est une matrice m × n.


Hypothèses : n > m et rang(A) = m.

Remarque 5.2.1 (Interprétation géométrique). L’ensemble des contraintes ou l’ensemble


réalisable P = {x ∈ Rn : Ax = b, x ≥ 0} est un polyèdre convexe. Il pourra s’écrire, dans
le cas borné, comme enveloppe convexe d’un nombre fini de points qui sont les sommets
du polyèdre. On peut montrer que la solution du problème d’optimisation est forcèment
parmi ces sommets.
La méthode du simplexe, malgré sa présentation algèbrique, consiste, en réalité, en une
balade sur différents sommets du polyèdre. A chaque itération (passage d’un sommet vers
un autre sommet voisin), on améliore la fonction objectif.

51
Recherche opérationnelle Prof. Hamid Zouaki
5.2.1 Notion de solution de base
Définition 5.2.1. On appelle base, un ensemble d’indices K ⊂ {1, . . . , n} tel que :

|K| = m, AK est régulière

AK est la matrice formée par les colonnes Ak de A avec k ∈ K.


|K| désigne la cardinal de l’ensemble K.
AK est appelée matrice de base associée à K.

Définition 5.2.2. A une base K d’un programme linéaire (P ), on associe une solution
du système linéaire AX = b par :

XK = (AK )−1 b
XK = 0.

Cette solution est dite "solution de base" correspondant à la base K.

Remarque 5.2.2. Etant donné une base K, tout vecteur Y de Rn pourra se décomposer
en :

YK : variable de base
YK : variable hors base

Exemple :

max 4x1 + 5x2


2x1 + x2 + x3 = 8
x1 + 2x2 + x4 = 7
x2 + x5 = 3
xi ≥ 0, i = 1, . . . , 5.

K = {3, 4, 5} est une base de (P ).


 
1 0 0
AK = 0 1 0 , La solution de base correspondante est :
0 0 1
x1 = x2 = 0, x3 = 8, x4 = 7, x5 = 3.

Définition 5.2.3. Une base K est dite réalisable si la solution de base associée est réa-
lisable. Autrement dit, elle vérifie (AK )−1 b ≥ 0.

Théorème 5.2.1. On suppose que P = {X ∈ Rn : AX = b, X ≥ 0} est non vide et


que rang(A) = m. Alors,
l’ensemble des solutions réalisables de base du problème (P ), n’est autre que l’ensemble
des sommets du polyèdre P .

52
Recherche opérationnelle Prof. Hamid Zouaki
D’après une remarque précédante, ce théorème nous dit que pour trouver la solution
optimale de notre problème (P ), il suffit de la chercher parmi les solutions réalisables de
base.

Le résultat suivant donne une caractérisation de la solution de base optimale. Ce qui


va fournir un moyen pratique pour trouver cette solution.

Caractérisation :
Soit K une base et soit X ∈ Rn vérifiant la contrainte AX = b.

AX = AK XK + AK XK

AX = b ⇔ AK XK + AK XK = b
⇔ AK XK = b − AK XK
⇔ XK = (AK )−1 b − (AK )−1 AK XK

Notations :

t(K) = (AK )−1 b


T (K) = (AK )−1 A
 
t(K)
On remarque que n’est autre que X(K) la solution de base associée à la base K.
0
On remarque aussi que T K = Im la matrice identité et que T K = (AK )−1 AK .
Avec ces notations, nous avons

AX = b ⇔ XK = t(K) − T K XK

On exprime les variables de base (XK ) en fonction des variables hors base (XK ).
Ecrivons maintenant la fonction objectif en exprimant les variables de base en fonction
des variables hors base :

 
K KXK
CX = (C , C ). = C K XK + C K XK
XK
= C K (t(K) − T K XK ) + C K XK
= C K t(K) + (C K − C K T K ).XK

On pose
d(K) = C − C K T
On a

dK (K) = C K − C K T K = 0
dK (K) = C K − C K T K .

53
Recherche opérationnelle Prof. Hamid Zouaki
Ceci permet finalement d’écrire
AX = b ⇔ CX = CK t(K) + dK XK
Or C K t(K) n’est autre que C.X(K), la valeur de la fonction objectif au point X(K) la
solution de base associée à la base K.
Nous avons donc
CX ≤ CX(K) ⇔ dK XK ≤ 0.
Si X est une solution réalisable, elle vérifie en plus X ≥ 0, d’où le résultat :
Proposition 5.2.1. Une condition nécessaire et suffisante pour que K soit une base
optimale (la solution de base associée soit solution de (P )) est que
dK ≤ 0, i.e. di ≤ 0 ∀i ∈ K.

5.2.2 Algorithme du simplexe


Soit K une base réalisable. On suppose que K n’est pas optimale, i.e. ne vérifie pas
dK ≤ 0. Donc ∃s ∈ K tel que ds > 0. On aura alors deux situations :
1. soit T s ≤ 0 (la colonne s a tous ses éléments négatifs ou nuls), on peut alors montrer
que le programme linéaire (P ) est non borné ;
2. soit on peut trouver une nouvelle base K ′ = (K ∪ {s}) \ {r} : un indice s entre dans
la base et un indice r sort de la base, de sorte à améliorer la fonction objectif.
tr tk
L’indice r est tel que Trs > 0 et s = min{ s : k ∈ K, Tks > 0}.
Tr Tk
Si X(K) 6= X(K ′ ), alors CX(K ′ ) > CX(K).
Détails de l’algorithme :
On suppose que l’on dispose d’une base réalisable de départ K 0 .
1. K 0 base réalisable de départ. Itération k = 0.
2. k = k + 1  
XK
3. K la base courante, X = solution de base courante. On calcule
XK
t(K) = (AK )−1 b
T K (K) = (AK )−1 AK
dK (K) = C K − C K T K .

4. si dK (K) ≤ 0, stop l’optimum est atteint


sinon ∃s ∈ K; tel que ds > 0, alors
5. si T s ≤ 0, stop le problème est non borné
tr tk
sinon, soit r tel que s = min{ s : k ∈ K, Tks > 0}.
Tr Tk
tr
6. t = col(r). La variable s prend la valeur x′s = s .
Tr

La variable t sort de la base (xt s’annule).
La nouvelle base devient K ′ = (K ∪ {s}) \ {t}; col(r) = s.

On calcule (AK )−1 et on retourne en 2).

54
Recherche opérationnelle Prof. Hamid Zouaki
5.2.3 Calcul pratique : méthode des tableaux
A chaque base K, on associe un tableau, dit tableau du simplexe, où l’on résume toute
l’information nécessaire à une itération donnée du simplexe.
Le tableau de dimension (m + 1) × (n + 1) est le suivant :

T(K) t(K)
d(K) -CX(K)

Les bases K et K ′ étant adjacentes, il est naturel qu’il existe des relations de passage
entre les valeurs de t, T et d.
Ces relations, que l’on obtient en utilisant les règles de base d’algèbre linéaire, permettent
le passage direct d’un tableau à un autre.

Formules de passage :

1
1. On multiplie la ligne (pivot) r, associée à l’indice qui sort de la base, par .
Trs
Tis
2. On ajoute à la ligne i 6= r, le produit par − de la ligne pivot.
Trs
3. On ajoute à la dernière ligne (calcul de d et la fonction objectif), le produit par
ds
− s de la ligne pivot.
Tr
Exemple d’illustration :
Soit à résoudre le programme linéaire (P ) :

max x1 + 2x2 − x3
2x1 + x2 + x3 ≤ 14
4x1 + 2x2 + 3x3 ≤ 28
2x1 + 5x2 + 5x3 ≤ 30
xi ≥ 0, i = 1, . . . , 3.

D’abord on écrit le programme sous forme standard, en ajoutant les variables d’écart
x4 , x5 et x6 :

max x1 + 2x2 − x3
2x1 + x2 + x3 + x4 = 14
4x1 + 2x2 + 3x3 + x5 = 28
2x1 + 5x2 + 5x3 + x6 = 30
xi ≥ 0, i = 1, . . . , 5.

m = 3, n = 6    
2 1 1 1 0 0 14
A = 4 2 3 0 1 0 b = 28
2 5 5 0 0 1 30

55
Recherche opérationnelle Prof. Hamid Zouaki

C = 1 2 −1 0 0 0
K = {4,
 5, 6} estune base réalisable :  
1 0 0 14
AK = 0 1 0 = I3 et t(K) = (AK )−1 b = b = 28 ≥ 0.
0 0 1 30
C = 0 (coût associé aux variables d’écart) ⇒ d = C − C K T = C.
K

Finalement, T = (AK )−1 A = A.


Le premier tableau du simplexe est donc :

x1 x2 x3 x4 x5 x6 t
x4 2 1 1 1 0 0 14
x5 4 2 3 0 1 0 28
x6 2 5 5 0 0 1 30
1 2 -1 0 0 0 0

2
s = 2indice
 entrant (d = 2 > 0) .
1 14
T = 2 , t = 28.
s   
5 30
ti 14 28 30
On calcule s pour Tis > 0 : min{ , , } = 6. Ce minimum est atteint pour i = 3
Ti 1 2 5
qui correpond à la variable de base x6 .
Donc, r = 6 et le pivot Trs = 5. La variable x6 sort de la base et x2 entre dans la base.
On note li les lignes du tableau courant et li′ les lignes du nouveau tableau.
Nouvelle base K = {4, 5, 2}, K = {1, 6, 3}.

1
l3′ = l3 (ligne pivot)
5
l1 = l1 − l3′

l2′ = l2 − 2l3′
l4′ = l4 − 2l3′

D’où le tableau :

x1 x2 x3 x4 x5 x6 t
x4 8/5 0 0 1 0 -1/5 8
x5 16/5 0 1 0 1 -2/5 16
x2 2/5 1 1 0 0 1/5 6
1/5 0 -3 0 0 -2/5 -12

1
s = 1 indice entrant (d1 = > 0) .
5
8 16 6
min{ , , } = min{5, 5, 15} = 5.
8/5 16/5 2/5
16
r = 5 (indice sortant) et le pivot Trs = .
5
56
Recherche opérationnelle Prof. Hamid Zouaki
Nouvelle base K = {4, 1, 2}, K = {5, 6, 3}.
5
l2′ = l2 (ligne pivot)
16
8
l1′ = l1 − l2′
5
2
l3 = l3 − l2′

5
1
l4 = l4 − l2′

5
D’où le tableau :
x1 x2 x3 x4 x5 x6 t
x4 0 0 -1/2 1 -1/2 0 0
x1 1 0 5/16 0 5/16 -1/8 5
x2 0 1 7/8 0 -1/8 1/4 4
0 0 -49/16 0 -1/16 -3/8 -13
On remarque que toutes les composantes de la direction réduite d sont ≤ 0 :

d = 0 0 − 49 16
0 − 161
− 83

On est donc à l’optimum. La solution optimale est X ∗ = 5 4 0 0 0 0 .
La valeur optimale est −(−13) = 13.
La base optimale est K ∗ = {1, 2, 4}.

5.3 Recherche d’une solution de base de départ


La première étape de l’algorithme du simplexe consiste à trouver une base admissible
initiale, ce qui n’est pas toujours évident (par exemple, pour un problème de minimisa-
tion de coût où les contraintes d’objectif ne permettent pas le choix des variables d’écart
comme variables de base) :
Jusqu’ici nous avons vu comment trouver une solution réalisable de base initiale lorsque
toutes les contraintes sont sous forme d’inégalités du type ” ≤ ”. Dans ce cas, en ajoutant
une variable d’écart à chaque contrainte pour la transformer en une égalité, la matrice A
qui correspond à l’ensemble des contraintes Ax = b prend la forme : A = (R, I) où I est
la matrice identité d’ordre (m × m), puisqu’ il y a m contraintes.
L’intérêt d’obtenir au départ une matrice identité comme sous-matrice de A est évident.
En effet, comme AK = I est une matrice de base, une solution réalisable de base est im-
médiatement trouvée sous la forme : X K = (AK )−1 b = b. De plus, les autres composantes
du premier tableau du simplexe sont obtenues directement, sans calculs supplémentaitres.
Il faut noter que cette matrice identité peut apparaître sans que les variables d’écart aient
été rajoutées. Dans ce cas, la méthode du simplexe s’applique également, à la différence
près que les prix associés aux variables de base ne sont pas nuls.
Cependant, il n’existe pas, le plus souvent, de sous-matrice identité dans la matrice A.
C’est le cas par exemple lorsque des contraintes n’ont pas besoin de l’adjonction de va-
riables d’écart (contraintes déjà sous forme d’égalités).

57
Recherche opérationnelle Prof. Hamid Zouaki
5.3.1 Méthode grand M
On peut supposer, sans perte de généralités, que le second membre b ≥ 0.
En effet, si bi ≤ 0, il suffit de multiplier l’équation correspondante par -1.
La méthode big M consiste, lorsque dans un programme linéaire la matrice A ne contient
pas de sous matrice identité, à ajouter des variables artificielles au niveau de chaque
contrainte et à pénaliser ces variables au niveau de la fonction objectif par une valeur
−M, où M est choisi suffisamment grand. Ce choix fait que les variables artificielles vont
sortir de la base à l’optimum.
On considère donc le problème augmenté :

m
X
max CX − Mvi
i=1
n
X
aij xj + vi = bi i = 1, . . . , m
j=1

xi ≥ 0, i = 1, . . . n
vj ≥ 0, j = 1, . . . , m.

Remarque 5.3.1. Nous avons ajouté, dans le problème augmenté, m variables artifi-
cielles, ce qui n’est pas toujours nécessaire. En effet, lorsque la matrice A contient déjà
une partie de la matrice identité, il suffit d’ajouter les variables artificielles qui complètent
cette matrice.

On illustre la méthode à travers l’exemple suivant :


Soit à résoudre

max 2x1 − 5x2 − 3x3 + 4x4


4x1 + 2x2 − x3 ≤ −5
x1 + 4x2 + x4 = 7
8x1 − 7x2 ≥ 10
xi ≥ 0, i = 1, . . . , 4.

On écrit d’abord le problème sous forme standard (en ajoutant les variables d’écart x5 , x6 ),
et en prenant soin de rendre le second membre non négatif. Ici, on doit multiplier la
première contrainte par -1.
Le problème s’écrit :

max 2x1 − 5x2 − 3x3 + 4x4


−4x1 − 2x2 + x3 − x5 = 5
x1 + 4x2 + x4 = 7
8x1 − 7x2 − x6 = 10
xi ≥ 0, i = 1, . . . , 6.

58
Recherche opérationnelle Prof. Hamid Zouaki
En écriture matricielle, on a :
 
x1
    x2 
−4 −2 1 0 −1 0 5  
x3 
A= 1 4 0 1 0 0 , 
b= 7  et X =  
x4  .
8 −7 0 0 0 −1 10  
x5 
x6

On remarque que dans la matrice A, il y’a un début de matrice identité correspondant aux
colonnes 3 et 4. Il suffit donc d’ajouter une variable artificielle au niveau de la troisième
contrainte. Le problème augmenté peut s’écrire :

max 2x1 − 5x2 − 3x3 + 4x4 − Mv1


−4x1 − 2x2 + x3 − x5 = 5
x1 + 4x2 + x4 = 7
8x1 − 7x2 − x6 + v1 = 10
xi ≥ 0, i = 1, . . . , 6; v1 ≥ 0.
 
x3

Pour ce problème, on dispose d’une base réalisable de départ : XK = x4 .
v1 
K
On peut construire le premier tableau du simplexe, en remarquant que C = 0 0 −M :

x1 x2 x3 x4 x5 x6 v1 t
x3 -4 -2 1 0 -1 0 0 5
x4 1 4 0 1 0 0 0 7
v1 8 -7 0 0 0 -1 1 10
8M − 14 −7M − 27 0 0 -3 −M 0 10M − 13

s = 1 indice entrant (d1 = 8M − 14 > 0).


On note que chaque fois que M est comparé à un autre nombre, il sera considéré comme
plus grand.
7 10
min{ , } = 1.25 atteint pour r = 3 correspondant à la variable v1 .
1 8
Donc x1 entre dans la base et c’est v1 qui sort de la base.
Nouvelle base K = {3, 4, 1}.
Le nouveau tableau :
x1 x2 x3 x4 x5 x6 v1 t
x3 0 -5.5 1 0 -1 -0.5 0.5 10
x4 0 4.875 0 1 0 0.125 -0.125 5.75
x1 1 -0.875 0 0 0 -0.125 0.125 1.25
0 -39.25 0 0 -3 -1.75 1.75 − M 4.5
Dans ce tableau, la direction réduite d ≤ 0. On est donc à l’optimum. On remarque aussi
que toutes les variables auxilliaires sont hors base et donc nulles. Le problème (P ) admet
donc une solution optimale, donnée par x1 = 1.25, x2 = 0, x3 = 10 et x4 = 5.75.

59
Recherche opérationnelle Prof. Hamid Zouaki
La valeur optimale est Z = −(4.5) = −4.5.

En général, on peut avoir les situations suivantes :


1. Si la méthode du simplexe, appliquée au problème augmenté, se termine
avec une solution (X ∗ , V ∗ ), avec V ∗ = 0, alors X ∗ est une solution optimale
du problème d’origine. On rappelle que V ∗ est le vecteur des variables
artificielles.
2. Si V ∗ 6= 0, alors le problème d’origine est non admissible.
3. Si le problème augmenté est non borné (la procédure du simplexe s’arrête
avec T s ≤ 0), alors le problème d’origine est non admissible ou non borné
ou les deux.

5.3.2 Méthode des deux phases


Soit à résoudre le problème (P ) :

max < C, X >


AX = b
X ≥ 0.

On peut supposer,comme noté précédemment, que b ≥ 0.


On considère le programme linéaire auxilliaire (P A), défini par :

max − v1 − v2 − . . . − vm
Ai X + vi = bi i = 1, . . . , m
X ≥ 0, V ≥ 0.

– Le problème (P A) est toujours réalisable. En effet, le point (0, . . . , 0, b1 , . . . , bm )


respecte les contraintes puisqu’on a supposé que b ≥ 0.
– La fonction objectif de (P A) est majorée par 0.
Si bien que le problème (P A) admet toujours une solution optimale.

Il existe une relation entre le problème (P A) et le problème d’origine (P ) et qui


s’exprime à travers la proposition suivante :
Proposition 5.3.1. Le programme linéaire (P ) admet une solution réalisable si, et seule-
ment si, la valeur optimale du problème (P A) est égale à zéro.
La question : comment trouver une solution de base réalisable de (P ) à tra-
vers la résolution du programme linéaire (P A) ?

Avec
 (P A), on dispose d’une base réalisable de départ formée des variables auxilliaires :
e = 0 . On peut donc appliquer la procédure du simplexe à (P A).
X
b
On note K la base optimale obtenue à la fin de la procédure. Deux cas sont alors possibles :

60
Recherche opérationnelle Prof. Hamid Zouaki
Xm
1. vi > 0, (P ) est alors non réalisable.
i=1
2. vi = 0, i = 1, . . . , m. On note J = {1, 2, . . . , n}. Deux situations peuvent se
présenter :
(a) K ⊂ J :
la base K ne contient pas de variables auxilliaires. K est aussi une base réali-
eJ (K) est solution de base de départ.
sable pour le problème d’origine (P ) et X
(b) K ∩ J 6= ∅ :
K contient une ou plusieurs variables artificielles. On les fait sortir de la base :
soit k ∈ K ∩ J et soit r tel que k = col(r)
– Si Trs 6= 0 pour s ∈ J ∩K. On fait entrer s dans la base. K ′ = (K ∪{s})\{k}
est une base de (P A).
– Si ∀s ∈ J ∩ K, Trs = 0, on peut montrer que la ligne r de (P ) est redon-
dante. On supprime dans (P A) l’équation correspondante.

En répétant cette démarche, on obtient, après un nombre fini d’itérations, une


base de (P A) qui ne contient pas de variables auxilliaires et donc une base
réalisable de départ pour (P ) ainsi que le premier tableau du simplexe associé.

61
Recherche opérationnelle Prof. Hamid Zouaki

62
Chapitre 6

La dualité

La dualité est un aspect très important de l’optimisation et en particulier de la pro-


grammation linéaire. Elle permet d’apporter une grande richesse du point de vue théorique
ainsi que beaucoup d’éclairages sur les diverses interprétations économiques et physiques.
On va pouvoir associer à tout programme linéaire un autre programme dit dual. On mon-
trera les liens étroits entre les deux programmes et comment ils ne représentent que deux
aspects du même problème.

6.1 Interprétation économique


Exemple introductif :
Une entreprise de menuiserie produit des tables, des chaises et des ramoires. Les resources
de cette entreprise sont limités par trois contraintes : les resources en bois, le nombre
d’heures d’assemblage et de finition dont dispose l’usine.
Le problème de l’entreprise est formulé à travers le programme linéaire (P ) suivant :

max Z = 2x1 + 4x2 + 3x3


3x1 + 4x2 + 2x3 ≤ 60 (mètres cube de bois disponibles)
2x1 + x2 + 2x3 ≤ 40 (heures d’assemblage)
x1 + 3x2 + 2x3 ≤ 80 (heures de finition)
xi ≥ 0, i = 1, . . . , 3.

x1 = nombre de tables fabriquées


x2 = nombre de chaises fabriquées
x3 = nombre d’armoires fabriquées

On utilise la méthode du simplexe pour résoudre notre problème (P ), après l’avoir écrit
sous forme standard en ajoutant les variables d’écarts x4 , x5 , x6 .
Le tableau optimal du simplexe est alors :

63
Recherche opérationnelle Prof. Hamid Zouaki
x1 x2 x3 x4 x5 x6 t
x2 1/3 1 0 1/3 -1/3 0 20/3
x3 5/6 0 1 -1/6 2/3 0 50/3
x6 -5/3 0 0 -2/3 -1/3 1 80/3
-11/6 0 0 -5/6 -2/3 0 -230/3

La lecture du tableau permet de voir que pour optimiser ses gains l’entreprise doit pro-
duire 0 tables (x1 = 0), 20/3 chaises et 50/3 armoires. Pour un gain de 230/3.
On voit aussi que la quantité de bois ainsi les heures d’assemblage doivent être consom-
mées en totalité (x4 = x5 = 0) : les contraintes 2 et 3 sont saturées. Par contre, on ne
consommera pas la totalité des heures de finition (x6 = 80/3).

On considère la variable d’écart x4 qui lui est associé le coût réduit d4 = −5/6.
D’après le développement déjà vu de la méthode du simplexe, le coût s’exprime :

C.X = C.X(K) + dK .XK


230
= + d1 x1 + d4 x4 + d5 x5
3
230 11 5 2
= − x1 − x4 − x5
3 6 6 3
Donc, une augmentation d’une unité de x4 engendre une diminution du gain de 5/6.
Donc, si on dispose d’un m3 supplémentaire de bois, la variable d’écart x4 devient égale
à 1. Or, à l’optimum, x4 est une variable hors base. Elle doit donc s’annuler. Donc, en
ramenant x4 à zéro (on utilise le mètre cube de bois supplémentaire) on engendre une
augmentation de 5/6.
Interprétation : si on dispose d’un m3 cube supplémentaire de bois, on peut l’utiliser dans
la production et obtenir un gain de 5/6. On n’est donc pas disposé à payer plus que 5/6
ce mètre cube de bois.
La variable d4 représente donc la valeur marginale d’un m3 cube de bois.
D’après le tableau, la valeur marginale d’une heure d’assemblage est de 2/3.
Concernant les heures de finition, on dispose encore de 80/3 heures non utilisées.

6.2 Interprétation par la dualité


On considère toujours le même problème. On veut placer une valeur monétaire sur les
différentes resources.
On suppose qu’un autre producteur s’intéresse à l’achat de toutes les resources de notre
entreprise. A quels prix cette dérnière serait disposer à les lui vendre ?
On note y1 le prix de vente d’un m3 de bois, y2 le prix d’une heure d’assemblage et y3 le
prix d’une heure de finition.

– Objectif de l’acheteur :
Minimiser le prix à payer pour toutes ces resources. Sa fonction objectif est donc

min 60y1 + 40y2 + 80y3

64
Recherche opérationnelle Prof. Hamid Zouaki
– Le vendeur n’acceptera pas n’importe quel prix : il faut que le revenu rapporté par
la vente des resources nécessaires à la prouction d’une unité d’un produit donné
soit au moins égale au revenu engendré à travers la production par l’entreprise de
cette unité.
Par exemple, la production d’une table demande 3m3 de bois, 2 heures d’assemblage
et 1 heures de finition. Sa vente rapporte 2 unités monétaires. En vendant les
resources associées à la production d’une table, celà doit rapporter à l’entreprise
3y1 + 2y2 + y3 . On doit donc avoir
3y1 + 2y2 + y3 ≥ 2
En examinant les autres produits, le problème (D) de l’acheteur s’écrit :
min 60y1 + 40y2 + 80y3
3y1 + 2y2 + y3 ≥ 2
4y1 + y2 + 3y3 ≥ 4
2y1 + 2y2 + 2y3 ≥ 3
yi ≥ 0, i = 1, . . . , 3.
Le problème (D) ainsi modélisé est appelé programme dual du problème (P ).

Après avoir écrit le programme (D) sous forme standard, on peut, pour sa résolution,
lui appliquer la méthode du simplexe. Le tableau optimal est donné par :
y1 y2 y3 y4 y5 y6
y1 1 0 2/3 0 -1/3 1/6 5/6
y4 0 0 5/3 1 -1/3 -5/6 11/6
y2 0 1 1/3 0 1/3 -2/3 2/3
0 0 80/3 0 20/3 50/3 -230/3
La solution optimale est :
y1 = 5/6, y2 = 2/3, y3 = 0, y4 = 11/6, y5 = 0, y6 = 0.
La valeur optimale est 230/3 égale à la valeur optimale du primal ! !
Remarque 6.2.1. La variable de décision yi du dual correspond à la ieme contrainte du
primal et donc à la variable d’écart associée.
En fait, on peut retrouver la solution optimale du dual à partir du tableau optimal du
primal et vice versa :
pour x4 , d4 = −5/6 −→ y1 = 5/6
pour x5 , d5 = −2/3 −→ y2 = 2/3
pour x6 , d6 = 0 −→ y3 = 0.
Résultats qu’on peut vérifieren consultant le tableau optimal de (D).
Remarque 6.2.2. Le primal a décidé de ne pas produire de tables (x1 = 0 à l’optimum).
Ceci peut s’expliquer par le fait que les resources nécessaires à la fabrication d’une table
engendrent un gain :
3y1 + 2y2 + y3 = 20/3
Ce gain est supérieur au profit engendré par la vente d’une table qui est égale à 2.
"Les prix qu’accorderait le dual aux resources du primal amènent celui-ci à
ne pas produire de tables".

65
Recherche opérationnelle Prof. Hamid Zouaki
6.3 Formulation de la dualité
Définition 6.3.1. On appelle dual du programme linéaire (P ) sous forme canonique :

max < C, X >


AX ≤ b
X ≥ 0.

le programme linéaire (D) défini par :

min < b, Y >


At Y ≥ C
Y ≥ 0.

Exemple :

max 4x1 + 5x2


2x1 + x2 ≤ 8
x1 + 2x2 ≤ 7
x2 ≤ 3
x1 , x2 ≥ 0.

son dual s’écrit :

min 8y1 + 7y2 + 3y3


2y1 + y2 ≥ 4
y1 + 2y2 + y3 ≥ 5
y1 , y2 , y3 ≥ 0.

Théorème 6.3.1. Le dual du dual est le primal.

Remarque 6.3.1. Nous avons vu que tout programme linéaire peut être mis sous forme
canonique. Par conséquent, tout programme linéaire admet un dual.
La correspondance entre (P ) et son dual (P ) peut néanmoins être obtenue directement :
– A toute contrainte du primal on associe une variable du dual. A toute variable du
primal on associe une contrainte du dual.
– Si une contrainte est une égalité, la variable duale associée est sans contrainte de
signe.
– Si une variable du primal est sans contrainte de signe, la contrainte qui lui est
associée dans le dual est une égalité.

Le tableau suivant résume la situation :

66
Recherche opérationnelle Prof. Hamid Zouaki
Primal Dual
Fonction objectif à maximiser Fonction objectif à minimiser
contrainte i ≥ variable i ≤ 0
contrainte i ≤ variable i ≥ 0
contrainte i = variable i sans contrainte
variable j ≥ 0 contrainte j ≥
variable j ≤ 0 contrainte j ≤
variable j sans contrainte contrainte j =
La théorie de la dualité repose sur deux résultats essentiels : le théorème de dualité
et le théorème d’équilibre.

Théorème 6.3.2. (Théorème de dualité)


On considère les deux programmes duaux (P ) et (D) :
lorsqu’un des deux programmes a une solution optimale, l’autre en a également et leurs
valeurs optimales sont égales.
Théorème 6.3.3. Un programme linéaire réalisable est borné si, et seulement si, son
dual est réalisable.
Plusieurs cas peuvent se présenter. On peut illustrer certaines de ces situations dans
les exemples suivants :
1.
max x1 + x2
2x1 + x2 ≤ 4
x1 + 2x2 ≤ 4
Son dual s’écrit :
min 4y1 + 4y2
2y1 + y2 = 1
y1 + 2x2 = 1
y1 , y2 ≤ 0.
X ∗ = (4/3, 4/3) et Y ∗ = (1/3, 1/3) réalisent l’optimum respectif de (P ) et (D).
2.
min 3x1 − 3x2
−x1 − x2 ≥ 2
x1 , x2 ≥ 0.
Son dual s’écrit
max 2y
−y ≤ 3
−y ≤ −3
y≥0
P = ∅, D 6= ∅. Donc (D) est non borné.

67
Recherche opérationnelle Prof. Hamid Zouaki
3. Il se peut que (P ) et (D) soient non réalisables :

max 5x1 + 5x2


−x1 − x2 ≤ −1
−x1 + x2 ≤ −1
x1 , x2 ≥ 0.

son dual

min −y1 − y2
−y1 − y2 ≥ 5
y1 + y2 ≥ 5
y1 , y2 ≥ 0.

P = ∅ et D = ∅.
Définition 6.3.2. Soit X ∈ P . La contrainte i est dite :
– saturée ou serrée si Ai X = bi
– non saturée ou lâche si Ai X < bi .
Le résultat suivant constitue une caractérisation de l’optimalité pour un programme
linéaire :

Théorème 6.3.4. (théorème d’équilibre ou des écarts complémentaires)


Une condition nécessaire et suffisante pour qu’un couple de solutions réalisables des pro-
grammes linéaires duaux (P ) et (D) soit optimal est que :
1. si une contrainte de l’un des programmes est non saturée, la variable correspondante
du dual est nulle.
2. Si une variable de l’un des programmes duaux est strictement positive, la contrainte
correspondante est saturée.
Si le programme linéaire (P ) est

max < C, X >


AX ≤ b
X ≥ 0.

son dual (D) est défini par :

min < b, Y >


At Y ≥ C
Y ≥ 0.

Si X, Y sont solutions réalisables de (P ) et (D) respectivement, le théorème peut se


formuler ainsi :

68
Recherche opérationnelle Prof. Hamid Zouaki
X, Y sont solutions optimales de (P ) et (D) respectivement si, et seulement si :
n
X
Yi .(bi − aij Xj ) = 0 i = 1, . . . , m.
j=1
m
X
( aij Yi − cj ).Xj = 0 j = 1, . . . , n.
i=1

Le théorème des écarts complémentaires est très important et permet de montrer l’op-
timalité ou non d’une solution proposée. Il montre aussi le lien entre les deux programmes
duaux.

69

Vous aimerez peut-être aussi