Vous êtes sur la page 1sur 50

Chapitre 1

Introduction à la recherche
opérationnelle

1.1 La notion de décision


Généralement on trouve des difficultés face à une décision. L’importance d’une décision dépend
de l’enjeu correspondant et du risque qui le suit. Pour cette raison, il ne suffit pas de prendre une,
mais il faut chercher à prendre la meilleure. Une décision dépend de l’objectif fixé, du contexte,
des moyens,.... En plus l’aspect de la décision présente souvent des difficultés :
— Aspect combinatoire On considère le problème du ”sac à dos” qui consiste à déterminer
les objets à prendre dans un sac de volume V parmi n objets de volumes vi et de valeurs
ci pour i = 1, ..., n afin de maximiser les valeurs des objets transportés.
— Aspect incertain Un marchand de journaux achète chaque jour une quantité de journaux.
Il paye l’exemplaire à pa et le revend à pv . Il a constaté que si la demande est supèrieure à
son stock, il y a une manque de gain de (pv − pa ) par chaque demande non satisfaite et que
chaque exemplaire non acheté est lui racheté par le groupe de presse à pv0 , soit une perte
de (pa − pv0 ) par chaque exemplaire non vendu.
— Aspect multicritère Pour décider à propos la voiture de vos rêves, il faut tenire compte
d’autant de critères ; type de carburant (Essence, diesel), marque (citroen, peugeot, volks-
wagen,...), consommation, prix, puissance,...Sans ignorer l’interactivitÃ
c de ces propriétés.

1.2 Outil d’aide à la décision


La recherche opérationnelle est essentiellement un outil d’aide à la décision au sein de l’en-
treprise. C’est une application des méthodes scientifiques (qui utilise les outils mathématiques et
informatique) pour résoudre les problèmes complexes de décision rencontrés dans la direction et
la gestion des systèmes d’individus, de machines, d’argent,...

1
Voici quelques domaines dans lesquels on fait couramment appel à la récherche opérationnelle :
conception de nouveaux systèmes (dimensionnement, localisation), organisation d’activités (ges-
tion de ressources, gammes et procédures, rentabilisation des investissements), commande de
systèmes (stabilisation, Suivi de trajectoires), surveillance et supervision (detection de dysfonc-
tionnements, diagnostics, réparation, maintenance, remplacement préventif)... gestion, politique
électorale, biologie, ingénierie, administration, militaire, transport, contrôle des réseaux,...

1.3 Classification des problèmes d’optimisation


L’étude d’un problème d’optimisation nécessite tout d’abord la classification de ce problème
par rapport au domaine d’optimisation afin de fixer les méthodes de résolution. Ceci passe par
la formulation du problème, une étape que sera détaillée prochainement, elle consiste à identi-
fier le problème considéré par ses composantes, ses enjeux, ses limites. Plus précisement, pour
formuler un problème d’optimisation, on doit identifier les décisions à prendre, définir une fonc-
tion coût (fonction objective) qui décrit l’objectif à atteindre et décrire les contraintes imposées.
Ainsi, aprés cette étape, un problème d’optimisation est définit comme l’étude d’une fonction f
(la fonction objective) sur un domaine I pour déterminer un élément x∗ ∈ I tel que f (x∗ ) ≥ f (x)
(respectivement f (x∗ ) ≤ f (x)) pour tout x ∈ I lorsqu’il s’agit d’un problème de maximisation
(respectivement lorsqu’il s’agit d’un problème de minimisation).

Il existe de nombreuses sortes de problèmes d’optimisation. Certaines caractéristiques permettent


de les distinguer : la nature de la fonction objective ( linéaire, non linéaire), les domaines de
définition de ces fonctions (discrets ou continu), le problème comport-il ou non des contraintes ?
Toutes ces caractéristiques permettent aux problèmes d’optimisation de posséder des structures
différentes et qu’ils ne soient pas traités de la même manière. En premier lieu suivant les domaines
de définition de la fonction objective, on distingue :
— L’optimisation discrète ou combinatoire : ces problèmes consistent à définir la fonction
objective sur un domaine disret fini.
— L’optimisation continue : les variables de décision appartiennent à un domaine continue.

1.3.1 Problèmes de l’optimisation Continue


Pour cette famille, on différencie les problèmes linéaires (la fonction objective ainsi que toutes
les contraintes sont dà crites
c d’une façon linéaire) qui relêvent de la programmation linéaire (le
sujet du prochain chapitre) par rapport aux problèmes non-linéaires. Les problèmes non-linéaires
ne figurent pas dans le programme, pour cette raison on cite quelques méthodes de résolution de ce
type des problèmes ; les méthodes d’optimisation convexe (si la fonction est convexe ou concave, et
l’ensemble des contraintes est convexe), Newton, quasi-Newton, le gradient conjugué, la recherche
linéaire, ...

2
1.3.2 Problèmes de l’optimisation discrète
On distingue deux familles des problèmes de l’optimisation discrète :

i) Les problèmes faciles résolus en général par des méthodes exactes spécialisées (Ford, Ford-
Fulkerson, Branch and Bound, programmation dynamique, ...) tels que les problèmes d’affectation,
problèmes de transport. En général ces problèmes sont de petite taille.

ii) Les problèmes ”NP” difficiles” dits problèmes non déterministes polynomiaux, ils sont de
grande taille, on cite par exemple, le problème de voyageur de commerce, problème du sac à
dos. Ces problèmes sont résolus par des méthodes approchées appélées ”heuristiques spécialisées”.
Notons qu’une heuristique est conçue pour un problème particulier permettant de trouver des
solutions avec un temps de calcul raisonnable et elle ne peut pas être généralisée pour d’autres
problèmes, mais aussi elle ne garantit pas l’optimalité de la solution.

Remarque
Il existe une autre famille de méthodes de résolution des problèmes d’optimisation appélée ”les
méta-heuristiques” qui contient ”des méthodes à solution unique” telles que ”le recuit simulé” ou
”la recherche tabou” et ”des méthodes à population de solutions” comme ”les colonies de fourmis”
ou ”les algorithmes génétiques”. En général, une méta-heuristique est une heuristique généraliste,
pouvant s’appliquer à plusieurs problèmes d’optimisation basée sur la mémoire et inspirée de la
physique ou de la nature. Cette famille de méthodes est destinée au domaine d’optimisation diffi-
cile qui contient les problèmes d’optimisation continue non-linéaire et les problèmes discrets ”NP”
difficiles.

3
Problème d’optimisation

Optimisation continue Optimisation discrète

Domaine d’optimisation difficile

Pb linéaire Pb non-linéaire Pb NP-difficile Pb facile

Simplexe méthodes itératives heuristiques spécialisées méthodes exactes

Les Méta-heuristiques

Recuit simulé Recherche tabou Colonies de fourmis Algorithmes génétiques

Méthodes hybrides

Classification des problèmes d’optimisation

4
Chapitre 2

Programmation linéaire

Proposée par G.B.Dantzig en 1949 la programmation linéaire a permis la résolution des pro-
blèmes d’optimisation dans la plupart des domaines. Utilisée directement ou comme partie d’un
autre algorithme, des problèmes de tailles trés variées (quelques variables jusqu’à quelques dizaines
de milliers) ont été résolus par cette méthode. Pour que ce type de résolution soit efficace, cette
méthode nécessite une formulation adéquate tenant compte de la spécificité de chaque problème
traité.

2.1 Exemple illustratif


2.1.1 Enoncé
Une entreprise fabrique 2 types de produits P1 et P2 . Chaque produit nécessite 2 opérations
sur une même machine, entre ces opérations un changement de configuration de la machine est
obligatoire, le temps de réglage est d’une heure. L’entreprise décide de fonctionner de la manière
suivante : L’opération 1 est d’abord effectuée pour les deux produits puis la machine est configuré
pour l’opération 2. Pour divers raisons cette machine est disponible 12 h en configuration 1 et 10 h
en configuration 2 par jour.

Les marges, les besoins en temps machine et les disponibilités sont donnés par ce tableau :

produit P1 produit P2 disponibilité


opération 1 4 h/pièce 3 h/pièce 12 h/jour
opération 2 2 h/pièce 5 h/pièce 10 h/jour
marge 12 d/pièce 15 d/pièce

Précisons que les pièces peuvent être fabriquées partiellement, quelle quantité doit-on fabriquer
par jour de chaque produit pour maximiser la marge totale de l’entreprise ?

5
2.1.2 Modélisation par un programme linéaire
Il s’agit tout d’abord d’identifier le problème considéré par ses composantes, ses enjeux, ses
limites. Plus précisement, pour formuler un problème d’optimisation, on doit passer par les étapes
suivantes :

— Identifier les décisions à prendre et leur affecter des variables de décision (souvent désigné
par un vecteur X ∈ Rn ) qui sont les paramètres sur lesquels l’utilisateur peut agir pour
faire évoluer le système.
— Définir une fonction coût (fonction objective) qui décrit l’objectif à atteindre en fonction
des variables de d’ecision.
— Description des contraintes imposées aux variables de décision.

Exemple
On doit suivre les étapes décrites ci-dessus pour modéliser l’exemple précédent par un (P L).

∗) La décision : quelle quantité doit-on fabriquer de chaque produit par jour ?

∗) Les variables de décision : affecter à cette décision les variables x1 et x2 qui désignent res-
pectivement le nombre de pièces à fabriquer par jour de produits P1 et P2 .

∗) Objectif : maximiser la marge

max Z = 12 x1 + 15 x2

∗) Les contraintes :
— disponibilté de la machine pour l’opération 1 :

4 x1 + 3 x2 ≤ 12

— disponibilté de la machine pour l’opération 2 :

2 x1 + 5 x2 ≤ 10

— type de variables de décision :

x1 ≥ 0, x2 ≥ 0

Aprés cette étape de modélisation, il est clair qu’un problème d’optimisation est mathématique-
ment défini comme l’étude d’une fonction dite fonction objective afin de déterminer les variables
de décision conduisant aux meilleurs conditions de fonctionnement du système, ce qui revient à
maximiser ou minimiser la fonction objective tout en respectant les contraintes.

6
On constate que, sous cette forme, toutes les contraintes ainsi que la fonction de profit s’ex-
priment de manière linéaires. Lorsqu’on cherche à maximiser une telle fonction objectif qui s’ex-
prime de manière linéaire en fonction des variables du problèmes, sous certaines contraintes éga-
lement exprimée de manière linéaire, on parle de programmation linéaire. Ainsi, le problème est
modélisé sous la forme du programme linéaire (PL) suivant :

max Z = 12 x1 + 15 x2

tels que 

 4 x1 + 3 x2 ≤ 12



2 x1 + 5 x2 ≤ 10




x1 ≥ 0 , x2 ≥ 0

2.1.3 Méthodes de résolution d’un (PL)


Parmi les méthodes de résolution des problèmes de la programmation linéaires on cite :

a) Résolution graphique : Cette méthode est limité par la dimension du programme, elle
n’est valable que lorsque la dimension est ≤ 3. (le nombre de variable de décision est ≤ 3).

b) Résolution par le simplexe : Cette méthode est valable quelque soit la dimension du
programme. Elle constitue le sujet principal de ce chapitre.

2.2 Résolution graphique du programme linéaire


Le cas considéré dans notre exemple est à deux variables, ceci nous permet de définir le principe
de la méthode graphique.

Étape 1 : Réprésentation des contraintes


On répresente graphiquement l’ensemble des données du notre programme linéaire. Ici, par exemple,
x1 qui est le nombre de pièces à fabriquer par jour du produit P1 en abcisse et x2 en ordonnée. On
représente toutes les contraintes par des droites, en hachurant à chaque fois le demi-plan interdit.

∗) A cause des contraintes de non-négativité des variables de décision, il est clair qu’on cherche
à déterminer x1 et x2 juste dans le cadran positif.

∗) Pour la contrainte (4 x1 + 3 x2 ≤ 12), tracer la droite d’équation 4 x1 + 3 x2 − 12 = 0, puis


vérifier si le point origine (0, 0) satisfait l’inégalité (4 x1 + 3 x2 ≤ 12) afin de fixer votre domaine
de recherche de x1 et x2 (au dessous ou au dessus de la droite). De même pour l’autre contrainte.

7
Étape 2 : Recherche de la solution optimale
Dans la figure, une solution est un couple (x1 , x2 ) respectant toutes les contraintes. La zone permise
des solutions respectant toutes les contraintes est une intersection de demi-plans, il s’agit donc
nécessairement d’une zone convexe. Cette zone est dite ensemble des solutions réalisables ou
le domaine réalisable.

La résolution de ce (P L) revient alors à déterminer parmi tous les points du domaine réali-
sable celui (ou ceux) qui maximise la fonction objectif.

La fonction objectif qu’on cherche à maximiser est representée par un ensemble de droites d‘équation
12 x1 + 15 x2 = Z, avec Z variable. Pour une valeur fixée de Z, cette droite représente un en-
semble de points isoprofit (l’ensemble des points qui engendre le même profit).

Toutes ces droites sont donc parallèles entre elles. Sur le graphique, on représente la droite cor-
respondante à Z = 0 avec un vecteur perpendiculaire à cette droite indiquant dans quel sens Z
grandit (puisqu’il s’agit d’un problème de maximisation).

Optimiser ce système revient donc à trouver Z maximal, c’est-à-dire un couple (x1 , x2 ) tel que
Z soit le plus grand possible. Un raisonnement géométrique élémentaire nous incite à déplacer la
droite d’équation 12 x1 + 15 x2 = Z parallèlement à elle même, dans le sens où Z grandit, jusqu’à
trouver l’intersection avec le domaine réalisable telle que Z soit le plus grand possible.

Étape 3 : Calcul de la solution optimale


Si on note l’otimum par A, alors {A} = D1 ∩ D2 d’équations respectives 4 x1 + 3 x2 = 12 et
2 x1 + 5 x2 = 10, donc A est de coordonnées x1 = 15 7
et x2 = 87 ) est l’optimum, réalisant un profit
maximal
15 8 300
Z = (12 ∗ ) + (15 ∗ ) =
7 7 7
Remarque
Pour le (P L) proposé par l’exemple, la solution optimale correspond à l’intersection de la dernière
ligne d’isoprofit avec le domaine réalisable car il s’agit d’un problème de maximisation. Lorsque
on s’intéresse à un problème de minimisation, l’optimum est l’intersection de la première ligne
d’isoprofit qui touche le Domaine réalisable.

2.3 Cas limites d’un programme linéaire


La solution du programme linéaire définie par l’intersection extrémale entre la famille des
droites de paramètre Z et le domaine réalisable peut être sous plusieurs formes :

1) Une solution optimale unique, c’est le cas de l’exemple précédent.

8
2) une famille de solutions existe, dans le cas où une ou plusieurs contraintes sont parallèles à
la fonction de profit et bordent le domaine réalisable du côté extrémal.

max Z = 2 x + 5 y

tels que 
 4 x + 3 y ≤ 12
2 x + 5 y ≤ 10
x ≥ 0, y ≥ 0

3) une solution existe, et elle est non-bornée, dans le cas où il n’y a pas de contrainte dans la
direction où Z grandit.
max Z = 12 x + 15 y
tels que 
 4 x + 3 y ≥ 12
2 x + 5 y ≥ 10
x ≥ 0, y ≥ 0

4) Toutes les contraintes sont incompatibles, et il n’y a pas de solution.

max Z = 3 x + 2 y

tels que 
 x + 2y ≤ 2
2x + 4y ≥ 8
x ≥ 0, y ≥ 0

2.4 Propriétés d’un programme linéaire


— L’ensemble des solutions réalisables d’un (P L), dit domaine réalisable est un polyèdre
convexe délimité par les droites correspondantes aux différentes contraintes.

— Les sommets du polyèdre sont dits sommets réalisables (S R) ou solutions de base


réalisables (S B R).

— S’il existe une solution optimale du (P L), alors c’est un (S R).

— S’il existe plusieurs solutions optimales, alors au moins deux entre-elles sont des (S R) ad-
jacents.

— Si un (S R) noté par exemple A n’a pas de (S R) adjacents qui sont meilleurs (améliorant
la fonction objectif) alors il n’y a pas de (S R) meilleur que A.

9
Théorème : Si un programme linéaire admet au moins une solution optimale finie alors il existe
au moins une solution de base réalisable pour laquelle la fonction objective atteint son maximum.

Remarque : La résolution d’un (P L) par énumération est basée sur le fait que si la solution
optimale existe, alors elle est l’un des (S R) pour lequelle la fonction objectif atteint son maximum
(respectivement son minimum) s’il s’agit d’un problème de maximisation (respectivement s’il s’agit
d’un problème de minimisation). Cette méthode consiste à identifier les (S R), puis calculer pour
chacun d’entre eux la valeur de la fonction objectif afin de déduire l’optimum. Malgré qu’on sait
que le nombre de (S R) est fini, cette méthode n’est plus adaptée pour un nombre elévé de (S R).
D’où la nécessité d’introduire une méthode pour résoudre les problèmes de grandes tailles.

2.5 Le simplexe
Principe du simplexe : C’est une méthode itérative basée sur l’exploration des (S R). Elle
choisit (quand c’est possible) le point origine comme état initial. Pour se déplacer d’un (S R) à
un autre, le simplexe choisit un (S R) adjacent en suivant la direction la plus améliorante de la
fonction objective. Si aucun (S R) adjacent n’améliore la fonction objective, alors le (S R) courant
est l’optimum.

Exemple :
Une entreprise de nourriture fabrique 2 types de granulés : le Wag-Tail (W) et le Bark-Mad (B).
Chacun des types utilise un mélange de légumes, boeuf et poisson, dans les proportions suivantes :
Ingrédients Quantité totale Quantité dans B Quantité dans W
Légumes 1400 kg 4 kg 4 kg
Poisson 1800 kg 6 kg 3 kg
Boeuf 1800 kg 2 kg 6 kg

On suppose que l’entreprise opère un bénefice de 12 Euros sur chaque paquet de B et de 8 euros
sur ceux de W. Comment l’entreprise peut-elle faire pour maximiser son profit ?

2.5.1 Modélisation par un (P L)


Il suffit de suivre les étapes nécessaire à la formulation d’un programme linéaire :

— La décision : quelle quantité en paquets de chaque granulés à fabriquer ?


— Les variables de décision : x1 et x2 désignent respectivement les quantités en paquets des
granulés de B et de W à fabriquer.
— Objectif : maximiser le profit, d’où la fonction objective s’écrit de la manière suivante :

max Z = 12 x1 + 8 x2

10
— Les contraintes :

Quantité disponible des légumes : 4 x1 + 4 x2 ≤ 1400

Quantité disponible de poisson : 6 x1 + 3 x2 ≤ 1800


Quantité disponible de boeuf : 2 x1 + 6 x2 ≤ 1800
Non-négativité des variables de décision : x1 ≥ 0 , x2 ≥ 0

Ainsi, le problème est modélisé sous la forme du (PL) suivant qu’on le note par (P) :

max Z = 12 x1 + 8 x2


 4 x1 + 4 x2 ≤ 1400
6 x1 + 3 x2 ≤ 1800

(s.c)

 2 x1 + 6 x2 ≤ 1800
x1 ≥ 0 , x2 ≥ 0

2.5.2 Forme standard d’un programme linéaire


Le (P L) présenté ci-dessus sous la forme (P) est dit sous la forme canonique. Pour pouvoir
appliquer le simplexe, la première étape consiste à mettre ce programme sous la forme standard,
en transformant les inéquations en équations par l’introduction des variables supplémentaires dites
variables d’écart.

En général les variables d’écart représentent les quantités de résources non utilisées donc elles
sont ≥ 0. De plus, L’imapact de ces variables sur la fonction objectif est nul, ceci justifie le fait
que leur existence est liée juste à la mise en forme du programme linéaire. Ainsi, le (P L) sous la
0
forme standard est le suivant qu’on le note par (P ) :

max Z = 12 x1 + 8 x2


 4 x1 + 4 x2 + e1 = 1400 (1)
6 x1 + 3 x2 + e2 = 1800 (2)

(s.c)

 2 x1 + 6 x2 + e3 = 1800 (3)
x1 , x 2 , e 1 , e 2 , e 3 ≥ 0

2.5.3 Propriétés algébriques du Simplexe


Nous allons développer un algorithme du simplexe à partir des principes élémentaires de l’al-
gèbre linéaire. Nous souhaitons déboucher sur un algorithme simple et facile à mettre en oeuvre.
Pour ce faire, nous devons passer par plusieurs étapes de formalisation des problèmes de program-
mation linéaire.

11
En général, un (P L) est présenté sous la forme canonique suivante :

max Z = c1 x1 + c2 x2 + ... + cn xn

tq 

 a11 x1 + a12 x2 + ... + a1n xn ≤ b1
·




·


 ·
a x + am2 x2 + ... + amn xn ≤ bm

 m1 1



xi ≥ 0 i = 1, ..., n
Remarques
- On suppose que bi ≥ 0 pour tout 1 ≤ i ≤ m (juste pour simplifier la présentation, on verra le
cas général plus tard).

- Il faut qu’aucune inéquation est combinaison linéaire des autres.

Avant d’envisager les étapes du simplexe, on doit écrire le (P L) sous la forme standard en trans-
formant les inéquations en équations par l’introduction des variables d’ecart. Ainsi on obtient

max Z = c1 x1 + c2 x2 + ... + cn xn

tq 

 a11 x1 + a12 x2 + ... + a1n xn + en+1 = b1
·




·


 ·
a x + am2 x2 + ... + amn xn + en+m = bm

 m1 1



xi ≥ 0 i = 1, ..., n , ei ≥ 0 i = n + 1, ..., n + m
Ce résultat peut être donné sous la forme matricielle suivante

max Z = C t X avec A X = B

où
   
c1 x1
   ·   · 
b1    
 · 

 · 


 · 

m  ∈ Rn+m  ∈ Rn+m
 ·  ∈ R
B =  C =  cn X =  xn

   
 0   en+1 · 
bm    
 ·   · 
·0 en+m

12
 
a11 a12 · · · a1n 1 0 0 ··· 0

 a21 a22 · · · a2n 0 1 0 ··· 0 

A=
 a31 a32 · · · a3n 0 0 1 ··· 0  ∈ Rm×n+m

 .. .. .. .. .. .. .. .. 
 . . . . . . . . 
am1 am2 · · · amn 0 0 0 · · · 1
Définitions et terminologies :
- Le (P L) est présenté ci-dessus sous la forme d’un système linéaire de m équations à (m + n)
inconnus, d’où on aura une infinité de solutions.

- Une solution de base est composée de (m + n) variables dans laquelle n variables sont fixées
à zéro appélées variables hor base (VHB) et les valeurs de m variables restantes sont calculées
par la résolution du système, elles sont dites variables de base (VB).

- Une solution de base est réalisable si elle satisfait les contraintes de positivité.

- Deux solutions de base dites adjacentes si elles ont les mêmes (VB) sauf une, qui est de base
dans l’une et hors base dans l’autre.

n (m+n)!
- Le nombre de solution de base est Cm+n = m! n!
.

Dans l’exemple précédent, le (P L) sous la forme canonique est composé de m = 3 équations


(non compris les contraintes de positivité) à n = 2 inconnues. Ainsi, la forme standard de ce (P L)
est un système linéaire de m = 3 équations et à (m + n) = 5 inconnues. Le nombre de solution de
base est alors C52 = 10 qui sont donné dans ce tableau :

x1 x2 e1 e2 e3
O 0 0 1400 1800 1800
A 0 350 0 750 −300
B 0 600 -1000 0 -1800
C 0 300 200 900 0
D 350 0 0 -300 1100
E 300 0 200 0 1200
F 900 0 -2200 -3600 0
G 250 100 0 0 700
H 75 275 0 625 0
I 180 240 -280 0 0

Il est clair que les sommets A, B, D, F et I ne sont pas des solutions réalisables (SBNR) car les
conditions de positivité ne sont pas satisfaites.

13
2.5.4 Le tableau du simplexe
Le simplexe commence toujours (quand c’est possible) par l’exploration de la (SBR) corres-
pondante à l’origine, donc les n variables de décision sont nulles d’où elles sont les (VHB), alors
que les variables d’ecart sont les (VB). Pour cette raison, le tableau du simplexe à l’etat initial est
présenté sous la forme suivante :
tableau du simplexe initialisé

x1 x2 ··· xk ··· xn en+1 en+2 ··· es ··· en+m


(VB)
en+1 a11 a12 ··· a1k ··· a1n 1 0 ··· 0 ··· 0 b1
en+2 a21 a22 ··· a2k ··· a2n 0 1 ··· 0 ··· 0 b2
.. .. .. .. .. .. .. .. .. .. .. .. ..
. . . . . . . . . . . . .
es as1 as2 ··· ask ··· asn 0 0 ··· 1 ··· 0 bs
.. .. .. .. .. .. .. .. .. .. .. .. ..
. . . . . . . . . . . . .
en+m am1 am2 ··· amk ··· amn 0 0 ··· 0 ··· 1 bm
c1 c2 ··· ck ··· cn 0 0 ··· 0 ··· 0 Z

La première étape consiste à passer à une (SBR) adjacente. Ceci doit être effectué en partant dans
la direction améliorante la fonction objectif. Donc on doit chercher la (Ve) et la (Vs) à et de la
base. La (VE) correspond à la variable la plus améliorante de la fonction Z. On note par exemple
xk la (VE) où xk correspond au coefficient ck dans la fonction objectif tel que
ck = max ci , avec ci > 0
1≤i≤n+m

x1 x2 ··· xk ··· xn en+1 en+2 ··· es ··· en+m


(VB)
en+1 a11 a12 ··· a1k ··· a1n 1 0 ··· 0 ··· 0 b1
en+2 a21 a22 ··· a2k ··· a2n 0 1 ··· 0 ··· 0 b2
.. .. .. .. .. .. .. .. .. .. .. .. ..
. . . . . . . . . . . . .
es as1 as2 ··· ask ··· asn 0 0 ··· 1 ··· 0 bs
.. .. .. .. .. .. .. .. .. .. .. .. ..
. . . . . . . . . . . . .
en+m am1 am2 ··· amk ··· amn 0 0 ··· 0 ··· 1 bm
c1 c2 ··· ck ··· cn 0 0 ··· 0 ··· 0 Z
La (Vs) c’est la variable qui correspond à la contrainte la plus contraignante pour xk , plus préci-
sement on cherche à déterminer
bl bl
max xk = min , avec > 0 et alk > 0
1 ≤l ≤ m alk alk
Si on note par s par exemple, la ligne qui contient ce coefficient, alors la variable de base corres-
pondante est la (Vs).

14
x1 x2 ··· xk ··· xn en+1 en+2 ··· es ··· en+m
(VB)
en+1 a11 a12 ··· a1k ··· a1n 1 0 ··· 0 ··· 0 b1
en+2 a21 a22 ··· a2k ··· a2n 0 1 ··· 0 ··· 0 b2
.. .. .. .. .. .. .. .. .. .. .. .. ..
. . . . . . . . . . . . .
es as1 as2 ··· ask ··· asn 0 0 ··· 1 ··· 0 bs
.. .. .. .. .. .. .. .. .. .. .. .. ..
. . . . . . . . . . . . .
en+m am1 am2 ··· amk ··· amn 0 0 ··· 0 ··· 1 bm
c1 c2 ··· ck ··· cn 0 0 ··· 0 ··· 0 Z

La deuxième étape consiste à chercher une nouvelle solution de base :

- Entrer la variable xk dans la base est traduit par le remplacement de es par xk dans la ligne s
de la première colonne de gauche.

x1 x2 ··· xk ··· xn en+1 en+2 ··· es ··· en+m


(VB)
en+1 a11 a12 ··· a1k ··· a1n 1 0 ··· 0 ··· 0 b1
en+2 a21 a22 ··· a2k ··· a2n 0 1 ··· 0 ··· 0 b2
.. .. .. .. .. .. .. .. .. .. .. .. ..
. . . . . . . . . . . . .
xk as1 as2 ··· ask ··· asn 0 0 ··· 1 ··· 0 bs
.. .. .. .. .. .. .. .. .. .. .. .. ..
. . . . . . . . . . . . .
en+m am1 am2 ··· amk ··· amn 0 0 ··· 0 ··· 1 bm
c1 c2 ··· ck ··· cn 0 0 ··· 0 ··· 0 Z

- Diviser la ligne s par le pivot. (pivot = ask )

x1 x2 ··· xk ··· xn en+1 en+2 ··· es ··· en+m


(VB)
en+1 a11 a12 ··· a1k ··· a1n 1 0 ··· 0 ··· 0 b1
en+2 a21 a22 ··· a2k ··· a2n 0 1 ··· 0 ··· 0 b2
.. .. .. .. .. .. .. .. .. .. .. .. ..
. . . . . . . . . . . . .
0 0 0 1 0
xk as1 as2 ··· 1 ··· asn 0 0 ··· ask
··· 0 bs
.. .. .. .. .. .. .. .. .. .. .. .. ..
. . . . . . . . . . . . .
en+m am1 am2 ··· amk ··· amn 0 0 ··· 0 ··· 1 bm
c1 c2 ··· ck ··· cn 0 0 ··· 0 ··· 0 Z

avec
0 asj 0 bs
asj = et bs =
ask ask

15
- Calculer les autres coefficients par la formule des rectangles
0 aik asj 0 aik bs
aij = aij − et bi = bi −
ask ask
On peut aussi utiliser la méthode de Gauss-Jordan pour calculer les coefficients du tableau, cette
méthode consiste à retrancher de chaque ligne Li (sauf la ligne Ls ) la ligne Ls multipliée par ce
qu’il faut afin d’annuler le coefficient de la variable entrante (aik pour tout i 6= s). Avec les deux
formules, la colone k et la ligne s sont de la forme suivante :

x1 x2 ··· xk ··· xn en+1 en+2 ··· es ··· en+m


(VB)
en+1 0
..
en+2 .
.. ..
. .
0 0 0 1 0
xk as1 as2 ··· 1 ··· asn 0 0 ··· ask
··· 0 bs
..
. 0
en+m 0
0
La troisième étape consiste à retourner à l’étape 1 jusqu’à que les coefficients de la dernière ligne
(les coefficients associés à la fonction objectif) ci ≤ 0, donc on ne peut plus améliorer le profit.

Algorithme du simplexe : (G.B.Dantzig-1947)


Etape 1 : Initialisation
Le sommet O est la solution de base réalisable de départ, donc les variables de décision sont nulles
(VHB) et les variables d’ecart sont les (VB).

Etape 2 : Changement de base


— Choix de la variable entrante (Ve) : Chercher parmi les xi celle qui correspond au plus
grand coefficient ci en tenant compte que des ci > 0. Notons par exemple xk la variable
trouvée, ainsi xk est la (Ve) dans la base.
— Choix de la variable sortante (Vs) : Chercher min abiki en tenant compte que des abiki > 0.
Notons par s la ligne qui contient ce min, ainsi la variable correspondante à cette ligne dans
les variables de base est la (Vs) de la base.
Etape 3 : Nouvelle solution de base
— Diviser la ligne s par le pivot = ask .
— Calculer les autres coefficients par la formule
0 aik asj
aij = aij −
ask
Etape 4 : Condition d’arrêt
Retourner à l’étape 2 jusqu’à que ci ≤ 0.

16
2.6 Applications et cas particuliers
1) Programme linéaire à solution optimale unique
Le cas d’un (P L) à une seule solution unique correspond au cas où il existe au moins une solution
de base réalisable, et seulement une d’entre elles optimise la solution.

Enoncé :
Une ébénisterie produit des bureaux, des tables et des chaises. Chaque type de produit réclame
du bois et deux types de travaux : mise en forme et finition, suivant le tableau suivant :
Ressource bureau table chaise
planches 8m 6m 1m
mise en forme 4h 2h 1.5 h
finition 2h 1.5 h 0.5 h
On dispose de 48 m de planches, 20 h de mise en forme et 8 h de finition. On vend un bureau pour
60 Euros, une table pour 30 Euros et une chaise pour 20 Euros. La demande pour les chaises et
les bureaux est illimitée, mais on ne pense vendre que 5 tables au plus. On cherche à maximiser
le profit de l’ébénisterie.

Formulation
On note par x1 , x2 et x3 les variables de décision qui dśignent respectivement le nombre de bureaux,
tables et chaises. Ainsi, la fonction objectif est définie par

max Z = 60 x1 + 30 x2 + 20 x3

sous les contraintes suivantes :


— Quantité disponible de planche

8 x1 + 6 x2 + x3 ≤ 48

— Disponibilité en temps de mise en forme

4 x1 + 2 x2 + 1.5 x 3 ≤ 20

— Disponibilité en temps de finition

2 x1 + 1.5 x2 + 0.5 x3 ≤ 8

— Demande des tables limitée


x2 ≤ 5
— Positivité des variables de décision

xi ≥ 0 i = 1, 2, 3

17
Mise en forme standard
Pour transformer cette formulation en forme standard, on doit introduire 4 variables d’écart. On
obtient :
max Z = 60 x1 + 30 x2 + 20 x3
tels que 

 8 x1 + 6 x2 + x3 + e1 = 48
 4 x1 + 2 x2 + 1.5 x 3 + e2 = 20


2 x1 + 1.5 x2 + 0.5 x3 + e3 = 8
x2 + e4 = 5




xi , e i ≥ 0 i = 1, 2, 3, 4

Ceci est réprésenté par le tableau du simplexe suivant :

x1 x2 x3 e1 e2 e3 e4
(VB)
e1 8 6 1 1 0 0 0 48
e2 4 2 1.5 0 1 0 0 20
e3 2 1.5 0.5 0 0 1 0 8
e4 0 1 0 0 0 0 1 5
60 30 20 0 0 0 0 Z
Première itération

x1 x2 x3 e1 e2 e3 e4
(VB)
e1 8 6 1 1 0 0 0 48
e2 4 2 1.5 0 1 0 0 20
e3 2 1.5 0.5 0 0 1 0 8
e4 0 1 0 0 0 0 1 5
60 30 20 0 0 0 0 Z
Donc on aura

x1 x2 x3 e1 e2 e3 e4
(VB)
e1 0 0 −1 1 0 −4 0 16
1
e2 0 −1 2
0 1 −2 0 4
3 1 1
x1 1 4 4
0 0 2
0 4
e4 0 1 0 0 0 0 1 5
0 −15 5 0 0 −30 0 Z − 240

18
Deuxième itération

x1 x2 x3 e1 e2 e3 e4
(VB)
e1 0 0 −1 1 0 −4 0 16
1
e2 0 −1 2
0 1 −2 0 4
3 1 1
e3 1 4 4
0 0 2
0 4
e4 0 1 0 0 0 0 1 5
0 −15 5 0 0 −30 0 Z − 240
Donc on aura

x1 x2 x3 e1 e2 e3 e4
(VB)
e1 0 −2 0 1 2 −8 0 24
x3 0 −2 1 0 2 −4 0 8
5 −1
x1 1 4
0 0 2
1 0 2
e4 0 1 0 0 0 0 1 5
0 −5 0 0 −10 −10 0 Z − 280

Ainsi c1 , c2 , c3 ≤ 0, d’où la condition d’arrêt est satisfaite et (x1 = 2, x2 = 0, x3 = 8) est l’unique


solution optimale pour ce (P L) pour un bénéfice de 280 euros.

2) Programme linéaire à solution optimale non bornée


Un problème de programmation linéaire peut ne pas avoir de solution bornée. Pour illustrer ce
cas, nous allons résoudre par le simplexe ce (P L).
max Z = = 36x1 + 30x2 − 3x3 − 4x4
sous les contraintes suivantes 
 x1 + x2 ≤ 5 + x3
6x1 + 5x2 ≤ 10 + x4
xi ≥ 0 , i = 1, 2, 3, 4

Ainsi, le problème sous la forme standard est le suivant


max Z = = 36x1 + 30x2 − 3x3 − 4x4
sous les contraintes suivantes

 x1 + x2 − x3 + e 1 = 5
6x1 + 5x2 − x4 + e2 = 10
xi , ei ≥ 0 , i = 1, 2, 3, 4

Soit alors

19
x1 x2 x3 x4 e1 e2
(VB)
e1 1 1 −1 0 1 0 5
e2 6 5 0 −1 0 1 10
36 30 −3 −4 0 0 Z
Première itération

x1 x2 x3 x4 e1 e2
(VB)
1 1 −1 10
e1 0 6
−1 6
1 6 3
5 −1 1 5
x1 1 6
0 6
0 6 3
0 0 −3 2 0 −6 Z − 60
Deuxième itération

x1 x2 x3 x4 e1 e2
(VB)
x4 0 1 −6 1 6 −1 20
15
x1 1 1 −1 0 1 0 3
0 −2 9 0 −2 −4 Z − 100

Le problème que abi3i ≤ 0 pour (b1 , a13 ) = (20, −6) et (b2 , a23 ) = ( 15
3
, −1). Donc il n’y a pas de
variable sortante (Vs), ainsi la solution est non borée (ceci est traduit par le fait que x3 peut
prendre une valeur infinie).

3) Programme linéaire à solutions multiples


Pour illustrer ce cas, reprenons l’exemple de l’ébénisterie en changeant un paramètre : on suppose
qu’une table rapporte 35 euros et non seulement 30. Le reste est inchangé. Ainsi, le problème sous
la forme standard est donné par :

max Z = 60 x1 + 35 x2 + 20 x3

tels que 

 8 x1 + 6 x2 + x3 + e1 = 48
 4 x1 + 2 x2 + 1.5 x 3 + e2 = 20


2 x1 + 1.5 x2 + 0.5 x3 + e3 = 8
x2 + e4 = 5




xi , e i ≥ 0 i = 1, 2, 3, 4

On considère alors les itérations du simplexe traduites par ces tableaux :

20
x1 x2 x3 e1 e2 e3 e4
(VB)
e1 8 6 1 1 0 0 0 48
e2 4 2 1.5 0 1 0 0 20
e3 2 1.5 0.5 0 0 1 0 8
e4 0 1 0 0 0 0 1 5
60 35 20 0 0 0 0 Z

x1 x2 x3 e1 e2 e3 e4
(VB)
e1 0 0 −1 1 0 −4 0 16
1
e2 0 −1 2
0 1 −2 0 4
3 1 1
x1 1 4 4
0 0 2
0 4
e4 0 1 0 0 0 0 1 5
0 −10 5 0 0 −30 0 Z − 240

x1 x2 x3 e1 e2 e3 e4
(VB)
e1 0 −2 0 1 2 −8 0 24
x3 0 −2 1 0 2 −4 0 8
5 −1
x1 1 4
0 0 2
1 0 2
e4 0 1 0 0 0 0 1 5
0 0 0 0 −10 −10 0 Z − 280

Si à la dernière itération du simplexe, il y a au moins une variable (VHB) à coefficient nul associé à
la fonction objectif (dans la dernière ligne du tableau), alors les solutions optimales sont multiples.
C’est le cas ici, car x2 est une (VHB) et c2 dans la dernière étape est égal à zéro. Plus précisement,
pour ce cas les solutions sont décrites par le segment dont les points extremes sont
   
x1 = 2 x1 = 0
 x2 = 0   x2 = 1.6 
x3 = 8 x3 = 11.2

Toutes les solutions intermédiaires sont données par :


 
x1 = 2c
 x2 = 1.6 − 1.6 c  0 ≤ c ≤ 1
x3 = 11.2 − 3.2 c

21
La fonction objectif vaut donc :

Z = 60 x1 + 35 x2 + 20 x3 = 280

Elle est constante pour toutes ces solutions.

Remarques
1) Choix arbitraire de la (Ve) ou (et) de la (Vs) :
Lorsque on a le choix entre deux (ou plus) variables de base entrante (en cas d’égalité de coefficients
associés à la fonction objectif), le choix alors est arbitraire. considérons les exemples suivants :

∗) Deux variables entrantes

max Z = 12 x + 12 y

tels que 
 4 x + 3 y ≤ 12
2 x + 5 y ≤ 10
x, y ≥ 0

Soit alors

x y e1 e2
(VB)
e1 4 3 1 0 12
e2 2 5 0 1 10
12 12 0 0 Z

x y e1 e2
(VB)
3 1
x 1 4 4
0 3
7 −1
e2 0 2 2
1 4
0 3 −3 0 Z − 36

x y e1 e2
(VB)
5 −3 15
x 1 0 14 14 7
−1 2 8
y 0 1 7 7 7
−3 −6 276
0 0 2 7
Z− 7

22
De même, vérifier qu’en faisant le choix sur y comme (Ve) au départ, on aboutit au même résultat.

∗) Deux variables sortantes


max Z = x + 2 y
tels que 
 x + 10 y ≤ 10
x + 20 y ≤ 20
x, y ≥ 0

Montrer en utilisant le simplexe qu’on trouve le même r’esultat en choisissant e1 ou e2 l’une des
variables d’écart comme variable sortante.

2) Minimiser une perte Z est équivalent à maximiser un gain (−Z) :


 

 min Z = 2 x + 5 y 
 max (−Z) = −2 x − 5 y
 tels que tels que

 


4 x + 3 y ≤ 12 ⇐⇒ 4 x + 3 y ≤ 12
2 x + 5 y ≤ 20 2 x + 5 y ≤ 20

 


 

x, y ≥ 0 x, y ≥ 0
 

3) Containte de type
ak1 x1 + ... + akn xn ≥ bk avec bk < 0

m
0 0
−ak1 x1 − ... − akn xn ≤ bk avec bk = (−bk ) > 0

2.7 Cas des programmes linéaires où l’origine est non réa-
lisable
Ce type des programmes est traduit par la présence d’une contrainte ayant l’une des formes
suivantes :
ak1 x1 + ... + akn xn ≥ bk avec bk > 0
ou
ak1 x1 + ... + akn xn = bk avec bk 6= 0
ou
ak1 x1 + ... + akn xn ≤ bk avec bk < 0
Dans ce cas on utilise l’une de deux méthodes suivantes : méthode de deux phases ou méthode du
grand M.

23
2.7.1 Méthode du grand M
Elle consiste à construire un programme artificiel (PA) en ajoutant une variable artificielle à
chaque contrainte non vérifiée par l’origine et en modifiant la fonction objective afin de pénaliser
toute solution du (PA) dont au moins une variable
P artificielle a une valeur non nulle, ceci se fait en
retranchant de la fonction objectif le terme M ai où M est une constante qui tend vers l’infini
i
et les ai sont les variables artificielles.

Exemple : On considère le programme linéaire (P) suivant :

min Z = 3 x1 + 2 x2


 x1 + x2 = 10
x1 ≥ 4

(S.C)

 x2 ≤ 20
x1 , x2 ≥ 0

0
L’étude du programme linéaire (P) se ramène à l’étude du (P ) défini par :
0 0
max Z = −3 x1 − 2 x2 Z = −Z


 x1 + x2 = 10
x1 ≥ 4

(S.C)

 x2 ≤ 20
x1 , x2 ≥ 0

0
∗) Mise en forme standard de (P ) :
0
max Z = −3 x1 − 2 x2


 x1 + x2 = 10
x1 − e 1 = 4

(S.C)

 x2 + e2 = 20
x1 , x2 , e1 , e2 ≥ 0

∗) Construction de (PA) :
0
max Z = −3 x1 − 2 x2 − M (a1 + a2 ) avec M −→ +∞


 x1 + x2 + a1 = 10
x1 − e1 + a2 = 4

(S.C)

 x 2 + e2 = 20
x1 , x2 , e1 , e2 , a1 , a2 ≥ 0

24
— Si le programme d’origine n’a pas de solution alors le programme artificiel (PA) aboutit à
une solution dont au moins une variable artificielle a une valeur non nulle.
— Si le (PA) aboutit à une solution dont toute variable artificielle est nulle alors c’est elle la
solution du programme d’origine.
— Avant d’appliquer le simplexe au (PA), il faut le mettre sous la forme standard. Une étape
qui nécessite d’exprimer la fonction objectif en fonction des variables hors base seulement.
— Les variables hors base de (PA) sont les variables de décision et les variables d’écart des
contraintes du type ≥.
∗) Mise en forme standard de (PA) :
D’aprés les deux premières équations décrivant les contraintes de (PA) on obtient :

a1 = 10 − x1 − x2 a2 = 4 − x1 + e1

ainsi le (PA) sous la forme standard est le suivant :


0
max Z = (2M − 3) x1 (M − 2) x2 − M e1 − 14 M avec M −→ +∞


 x1 + x2 + a1 = 10
x1 − e1 + a2 = 4

(S.C)

 x2 + e2 = 20
x1 , x2 , e1 , e2 , a1 , a2 ≥ 0

∗) Application du simplexe :

x1 x2 e1 e2 a1 a2
(VB)
a1 1 1 0 0 1 0 10
a2 1 0 −1 0 0 1 4
e2 0 1 0 1 0 0 20
0
2M − 3 M −2 −M 0 0 0 Z + 14M
donc la V E = x1 et la V S = a2 , d’où on obtient

x1 x2 e1 e2 a1 a2
(VB)
a1 0 1 1 0 1 −1 6
x1 1 0 −1 0 0 1 4
e2 0 1 0 1 0 0 20
0
0 M −2 M −3 0 0 3 − 2M Z + 6M + 12
ainsi la V E = x2 et la V S = a1 , ce qui donne

25
x1 x2 e1 e2 a1 a2
(VB)
a1 0 1 1 0 1 −1 6
x1 1 0 −1 0 0 1 4
e2 0 0 −1 1 −1 1 14
0
0 0 −1 0 2−M 1−M Z + 24
La condition d’arrêt du simplexe est atteinte car tous les coefficient associés à la fonction objectif
sont ≤ 0. Alors la solution optimale de (PA) est
   
x1 4
 x2   6 
   
 e1   0 
X̃ =   e2  =  14 
  
   
 a1   0 
a2 0

qui correspond à une solution avec des variables artificielles nulles (a1 = a2 = 0), alors la solution
0
optimale de (P ) est X = (x1 , x2 ) = (4, 6) qui correspond à la valeur de la fonction objectif
0
Z = −24. Pour conclure, la solution optimale du programme linéaire d’origine (P) est X ∗ =
(x∗1 , x∗2 ) = (4, 6) dont la valeur de la fonction objectif est Z ∗ = 24.

26
Chapitre 3

Programmation linéaire en nombre


entiers

3.1 Modélisation
En général les variables de décision ne sont pas nécessairement continues (quantité de produits
mesurée en kg, litre,...). Dans beaucoup des problèmes d’optimisation une solution à valeurs en-
tières est exigée (nombre de produits) ou même une solution de type binaire (0 ou 1), comme c’est
possible d’avoir un programme linéaire dont la solution cherchée est à variables mixtes.

Exemple 1 :
On considère le problème du sac à dos qui consiste à déterminer les objets à transporter dans un
sac de volume V , parmi n objets de volume vi et de valeur ci pour 1 ≤ i ≤ n afin de maximiser la
valeur des objets transportés.
— La décision : quelles sont les objets à transporter dans le sac ?
— Les variables de décision : on note par

1 si l’objet i est transporté
Xi =
0 si non

— Les contraintes :  n
 PX v ≤ V
i i
 i=1
X ∈ {0, 1}
i

— Objectif : maximiser la valeur du sac


n
X
max Z = ci X i
i=1

27
Exemple 2 :
On dispose d’un budjet B et on envisage d’investir dans les projets suivants : usine à Tunis, usine
à Sfax, magasin à Tunis, magasin à Sfax. Si on note par Iij le budjet nécessaire pour investir le
projet i à la ville j et Pij le profit induit par l’investissement du projet i à la ville j.

1) Dans quels projets doit-on investir pour maximiser le profit ?

2) Comment modéliser les contraintes suivantes ?


— investir au plus dans une usine.
— Investir au moins dans une usine.
— Investir dans une et une seule usine.
— Si l’usine à Tunis alors le magasin à Tunis.
— Si on n’investit pas dans une usine alors pas de magasin.

3.2 Résolution des PLNE


La programmation linéaire ne garantit que la positivité des variables alors qu’un PLNE exige
que les variables sont entières.

3.2.1 Relaxation linéaire


La relaxation linéaire d’un programme à variables entière consiste à supposer que les variables
sont continues.

Propriétés :

— La solution du programme relaxé (PR) est une borne supèrieure (respectivement infèrieure)
de la solution du programme linéaire en nombre entiers (PLNE) dans le cas d’une maximi-
sation (respectivement dans le cas d’une minimisation).
— Si la solution du (PR) est entière alors c’est elle la solution optimale du (PLNE).
— Si le (PR) n’a pas de solution alors le (PLNE) n’a pas de solution.
— La solution arrondie du (PR) peut être non réalisable ou non optimale pour le (PLNE).
Exemples : On considère les (PLNE) suivants :

max Z1 = x2 max Z2 = x + 5 y
 1

 −x1 + x2 ≤ 2  x + 10 y ≤ 20
(S.C) x1 + x2 ≤ 72 (S.C) x ≤ 2
x1 , x2 ∈ N x, y ∈ N
 

28
3.2.2 Méthode de Branch and Bound
Cette méthode dite aussi ”méthode de séparation et évaluation successive” aborde la résolution
du (PLNE) à partir des solutions optimales du (PL) continue (sans tenir compte que les variables
sont entières). Elle consiste à chercher itérativement une borne supèrieure et une borne infèrieure
de Z ∗ (la valeur de la fonction objectif associée à la solution optimale du (PLNE)) et à raffiner
ces valeurs en suivant les instructions suivantes : (en supposant qu’il s’agit d’un problème de
maximisation)

1. Résoudre le (PR) par le simplexe.


— Si toutes les variables demandées qu’elles soient entières ont des valeurs optimales en-
tières alors le (PLNE) est résolu.
— Si non, soit par exemple xk la variable dont la valeur optimale x∗k est fractionnaire.
— La valeur de la fonction objectif correspondante à cette solution optimale est une borne
supèrieure de Z ∗ .

2. Séparer le problème initial en deux sous problème mutuellement exclusifs (le domaine
réalisable de chacun de ces sous problème ne contient pas la solution optimale non en-
tière précédemment trouvée) en ajoutant l’une des contraintes suivantes : xk ≤ E(x∗k ) ou
xk ≥ E(x∗k ) + 1.
3. Résoudre chacun de deux sous problèmes en ignorant toujours les contraintes de type en-
tière.
4. Si la solution optimale continue de l’un ou l’autre de ces deux sous problèmes satisfait
les contraintes des variables entières, on la retient en tant que meilleure solution entière
disponible. La valeur de la fonction objectif associée à cette solution retenue est une borne
infèrieure de Z ∗ .
5. Si la solution optimale contient au moins une variable fractionnaire, on l’utilise pour séparer
de nouveau le sous problème en deux sous problèmes à l’aide des contraintes de type
précédent.
6. Si on obtient par l’un des sous problème une solution entière meilleure que la dernière
solution retenue, on remplace cette dernière par celle qui vient d’être trouvée.
7. Le procéssus de séparation continue jusqu’à que tous les sous problèmes soient arrêtés par
la présence de l’une des conditions suivantes :
— Le sous problème n’a pas de solution réalisable.
— Le sous problème admet une solution entière.
— La valeur de la fonction objectif du sous problème considéré est infèrieure à la borne
infèrieure de Z ∗ .

8. La solution entière retenue (si elle existe) est la solution optimale de (PLNE).

29
Exemple :

max Z = 10 x1 + 50 x2


 − x1 + 2 x2 ≤ 5
x1 + 2 x2 ≤ 14

S.C

 x1 ≤ 8
x1 , x2 ∈ N

30
Chapitre 4

Problème du plus court chemin

4.1 Eléments de théorie des graphes


Un graphe G est défini par deux ensembles N et A où N = {x1 , x2 , ..., xn } l’ensemble des
sommets ou nœuds et A = {(xi , xj ); 1 ≤ i, j ≤ n} ⊂ N × N l’ensemble des couples (xi , xj ).
Un graphe G est alors un ensemble de nœuds reliés par un ensemble de segments. Dorénavant un
graphe G est noté par G = (N, A). L’ordre du grapge est défini par son nombre de sommets.

On distingue deux familles de graphes :

1. Les graphes non orientés :

2 2 2

1 3 1 3 1 3

4
Graphe G = (N, A) Une chaine de G Un cycle de G

— L’ensemble des nœuds N = {1, 2, 3, 4}.


— L’ensemble des couples A = {(1, 2), (1, 3), (1, 4), (2, 3), (3, 4)}.
— Le segment qui relie deux sommets est une arrête.
— Un ensemble d’arrêtes telle que chaque arrête a un nœud commun avec l’arrête qui la
précède est dit une chaine.
— Une chaine fermée est dite un cycle.

31
2. les graphes orientés :

1 4

Graphe G = (N, A)
— L’ensemble des nœuds N = {1, 2, 3, 4}.
— L’ensemble des couples A = {(1, 2), (1, 3), (4, 1), (2, 4), (3, 4)}.
— Le segment qui relie deux sommets est un arc. Pour chaque arc, on parle de l’origine et
de l’extrémité sauf dans le cas d’une boucle ; c’est le cas d’un arc qui relie un nœud à
lui même.
— le nombre d’arcs quittant un sommet est dit degré sortant. Alors que le nombre d’arcs
arrivant à un sommet est dit degré entrant.
— Un ensemble d’arcs tel que l’origine de chaque arc coincide avec l’extrémité de l’arc qui
le précède est dit un chemin.
— Un chemin fermé (l’origine du premier arc coincide avec l’extrémité du dernier arc) est
dit un circuit.
2

1 4 1 4

3
Un chemin de G Un circuit de G
— Un chemin élémentaire s’il passe une seule fois par chacun des sommets qui le consti-
tuent.
2

1 4

3
Un chemin non élémentaire de G

32
Définitions :
1. Un graphe est dit valué si les arcs (ou les arrêtes) ont des valeurs qui peuvent répresenter
le coût de transport, longueur de la route, temps mis pour emprunter la route, capacité
de transport, capacité de connexion, ... ces valeurs appélées poids ou longueur de l’arc.
Notons que le pods d’un arc peut être négatif.
2. Le pois d’un chemin est la somme des poids des arcs qui le constituent.
3. Un circuit est dit absorbant si son poids est négatif.
4. La matrice d’adjacence d’un graphe G de n sommets est une matrice carrée d’ordre n de
coefficients (aij )≤i,j≤n où aij répresente la valeur de l’arc (i, j). Elle est définie d’une façon
que les sommets origines des arcs sont en lignes et les sommets extrémités sont en colonnes.
Par exemple, si on considère le graphe suivant :
2

5 45
10

1 3 5
25 30

50 35
40

4
20 15
55

La matrice d’adjacence associée à ce graphe est alors la suivante :


 
0 5 25 40 0 20
 0 0 45 0 10 0 
 
 0 0 0 50 30 0 
 
 0 0 0 0 35 55 
 
 0 0 0 0 0 15 
0 0 0 0 0 0
Par contre, si le graphe n’est pas valué, la matrice d’adjacence est boolienne, c’est à dire

1 si l’arc (i, j) existe
aij =
0 si non

33
4.2 Modélisation d’un graphe par un programme linéaire
On considère le graphe suivant :

2 5
1
6

1 2 5 4

−2
3 4
2

Quel est le plus court chemin pour aller de sommet (1) au sommet (5) ?

Les variables de décision :



1 si on passe par l’arc (i, j)
Xij =
0 si non

Les contraintes :
— Le sommet de départ est (1).
X12 + X13 = 1
— Le sommet d’arrivée est (5).
X25 + X35 + X45 = 1
— Le nombre d’arrivée à un sommet intermédiaire est égal au nombre de fois de le quitter.

X12 = X23 + X25 X34 = X45 X13 + X23 = X34 + X35

— Type de variables.
Xij ∈ {0, 1} ∀ i, j

Fonction objectif : minimiser la longueur du chemin.

min (Z) = 6 X12 − 2 X13 + + 2 X23 + + X25 + 2 X34 + 5 X35 + 4 X45

4.3 Algorithmes de résolution


Les algorithmes de résolution des problèmes du plus court chemin sont basés sur le principe
d’optimalité de Bellman.

34
Principe d’optimalité de Bellman : Un chemin optimal est formé de sous-chemins
optimaux : Si (C) est un chemin optimal allant de A à B et si C appartient à (C) alors les
sous-chemins de (C) allant de A à C et de C à B sont optimaux.

Remarque :
On considère l’exemple suivant qui consiste à déterminer le plus court chemin entre les sommets
(1) et (10) de ce graphe :

7
2 5
1
4 3 4
2
4 8
6
3
4 2
1 3 6 3 10
1
4
3 9
3 6
4
3
4 7
5

Cet exemple est cité pour remarquer que l’approche trés simple qui consiste à choisir à chaque
étape l’arc le moins cher ne conduit pas à une solution globalement la moins chère. En effet, en
suivant cette stratégie, on choisirait le chemin suivant :

1 2 6 9 10

dont le coût total est de 13. Alors qu’il est clair qu’on peut sacrifier un peu à la première étape
pour gagner aux étapes ultèrieures. Par exemple, le chemin

1 4 6 9 10

est moins couteûx que le premier puisque son coût est de 11.

De même il ne faut pas penser à la méthode qui consiste à évaluer tous les chemins possibles.
Cependant sur ce petit exemple, le nombre de chemins possibles est 3 × 3 × 2 = 18, il faut alors
imaginer la situation lorsque le nombre d’étapes et/ou le nombre de sommets croı̂t, le travail avec
cette méthode devient excessif. Pour cette raison, on s’intéresse à introduire quelques algorithmes
de la programmation dynamique : C’est une technique mathématique qui a pour objet d’aider

35
à prendre des décisions séquentielles indépendantes les unes des autres. Contrairement à la pro-
grammation linéaire, il n’y a pas un formalisme mathématique standard. C’est une approche de
résolution où les équations doivent être spécifiées selon le problème à résoudre.
1. Algorithme de Ford :
L’algorithme de Ford permet de déterminer le plus court chemin entre deux sommets d’un
graphe sans circuit absorbant (un circuit de longueur négatif).

Cet algorithme consiste tout d’abord à numéroter les sommets du graphe et affecter le
numéro 1 au sommet du départ. On désigne par λi la distance entre les sommets 1 et i,
pour cette raison les valeurs seront initialisées à λ1 = 0 et λi = +∞ pour tout i 6= 1. La
valeur de chaque arc (i, j) est notée par Vij .

Algorithme :

— Etape 1 : Initialisation

λ1 ← 0 ; λi ← +∞ ∀ i 6= 1
— Etape 2 : Pour tout arc (i, j) faire

si
 λi + Vij < λj faire
 λj ← λi + Vij

  prédecesseur de j ← i

si j < i alors retourner à l’étape 2 avec i ← j

— Etape 3 : Passer au sommet suivant : i ← i + 1 et retourner à l’étape 2.


— Etape 4 : Le chemin le plus court est obtenu en suivant les prédecesseurs dans le sens
inverse du chemin.
Application : Déterminer le plus court chemin de sommet (1) au sommet (5) dans les
deux cas suivants :

Cas 1 :
2 5
1
6
1 2 5 4

−2
3 4
2

36
Cas 2 :

2 5
1
6
1 2 5 4

−2
3 4
2

2. Algorithme de Dijikstra :
Cet algorithme permet de trouver le plus court chemin entre deux sommets d’un graphe
dont tous les arcs ont des valeurs positives.

On utilise les mêmes notations que l’algorithme de Ford ; λi et Vij désignent respective-
ment le poids du chemin de (1) à (i) et la valeur de l’arc (i, j).

Algorithme :

— Etape 1 : Initialisation n désigne le nombre de sommets du graphe.

λ1 ← 0 ; λi ← +∞ ∀ i 6= 1
Tous les sommets sont non visités alors on désigne par S = {1, ..., n}
— Etape 2 : Tant que S 6= ∅ faire

soit i le sommet non visité ayant le plus pétit valeur λi
 S ← S \ {i}

 Pour tout arc (i, j) faire
 
 Si λi + Vij < λj faire
 
  λj ← λi + Vij
 
 prédecesseur de j ← i

— Etape 3 : Le chemin le plus court est obtenu en suivant les prédecesseurs dans le sens
inverse du chemin.

Application 1 :
Déterminer le plus court chemin de sommet (1) au sommet (5) du graphe suivant :

37
2 5
1
6

1 2 2 4

2
3 4
1

Application 2 :
Déterminer les étapes de laminage qui pèrmettent de passer de 10 mm à 1 mm à moindre
coût sashant les données suivantes :

Réduction de l’epaisseur en (mm) Epaisseur à l’entrée en (mm)


10 8 6 5 4 3 2
1 12 11 10 7 6 5 4
2 15 14 12 9 8 7
3 22 16 15 13 12
4 30 24 20 17

38
Chapitre 5

Problème d’affectation

Sachant qu’on dispose de n individus notés I1 , ..., In et de n postes notés P1 , ..., Pn avec n ∈ N
et connaissant la matrice des coûts C = cij avec 1 ≤ i, j ≤ n où cij est le coût d’affectation de
l’individu i au poste j, déterminons l’affectation optimale qui minimise la somme des coûts tout
en respectant les consignes suivantes :

chaque individu doit être affecté à un et un seul poste et chaque poste doit reevoir un et un seul individu.

Le nombre d’affectatiions possibles est n! qui est trop élevé surtout pour un nombre n assez grand.
Pour cette raison la méthode consistante à citer toutes les n! possibilités et les évaluer puis choisir
celle qui minimise les coûts est trop couteuse au niveau du temps.

L’alternative est l’algorithme de Kuhn (appélé aussi méthode Hongroise) qui consiste à suivre
la procedure suivante

1. Étape 0 : réduction de la matrice des coûts


Une matrice est dite réduite si elle contient au moins un zéro par ligne et par colonne.

L’objectif de cette étape est de réduire la matrice des coûts en appliquant ces instrutions :
— de chaque coefficient de la ligne Li retrancher le coefficient minimal noté li
— de chaque coefficient de la colonne COLj retrancher le coefficient minimal noté cj
Ainsi la matrice est réduite et la somme des valeurs rétranchées sur les lignes et les colonnes
répresente une borne infèrieure au coût minimal
n
X n
X
coût minimal ≥ li + cj
i=1 j=1

2. Étape 1 : recherche d’une solution à coût rélatif nul


i) Déterminer la ligne qui contient le nombre minimal des zéros non barés (en cas d’égalité choisir
la ligne la plus haute).

39
ii) sur cette ligne choisie, encadrer un zéro (si elle contient plus qu’un zéro, encadrer celui de
coté gauche) et barrer tous les zéros se trouvant sur la même ligne ou sur la même colonne que le
zéro encadré.

iii) reprendre de l’instruction i) jusqu’à qu’il n’y a plus de zéro ni pour encadrer ni pour bar-
rer.

iv) Si on obtient un zéro encadré par ligne et par colonne alors c’est la fin de l’algorithme et
dans ce cas la solution optimale correspond aux zéros encadrés. Si non passer à l’étape suivante.

3. Étape 2 : marquage des rangées


a) Marquer d’une croix toute ligne n’ayant pas un zéro encadré.
b) Marquer d’une croix toute colonne ayant un zéro barré dans une ligne marquée.
c) Marquer d’une croix toute ligne ayant un zéro encadré dans une colonne marquée.

Répéter alternativement les opérations b) et c) jusquà qu’il n’y a plus de rangées à marquer.
Puis, tracer un trait sur toute ligne non marquée et toute colonne marquée.

4. Étape 3 : Modification de la matrice


Les cases non traversées par un trait constituent la matrice partielle. Notons par min le coefficient
minimal de la matrice partielle et appliquons ces instructions :
— retrancher la valeur de min de toutes les cases de la matrice partielle.
— ajouter la valeur de min à toutes les cases de la matrice initiale traversées par deux traits.
— les cases de la matrice initiale traversées par un seul trait gardent leurs valeurs.
— On obtient une nouvelle borne infèrieure du coût minimal en ajoutant la valeur de min à
la dernière borne infèrieure
Xn Xn
coût minimal ≥ li + cj + min
i=1 j=1

Retourner et appliquer la succession des étapes 1, 2 et 3 sur la matrice ainsi obtenue.

Remarque 1 : Nombre d’individus différent du nombre de postes


Souvent et surtout dans le cas réel de ce type des problèmes, le nombre d’individus n est diffé-
rent du nombre de poste m (n 6= m). Sachant que l’algorithme de Kuhn est appliqué seulement
sur des matrices carrées, il faut alors intervenir dans ce cas avant de débuter l’algorithme. Cette
intervention dont le but est de rendre la matrice des coûts C carrée consiste à rajouter soit des
lignes (m − n lignes si n < m) soit des colonnes (n − m colonnes si n > m) et associer la valeur
de 0 à tous les coefficients cij correspondants aux cases rajoutées.
cij = 0 ∀ i > n ou j > m

40
Remarque 2 : Problème d’affectation pour maximisation
On cherche à affecter n individus à n postes pour maximiser la somme des gains en disposant de
la matrice des gains G = gij où gij est le gain induit par l’affectation de l’individu i au poste j et
en respectant toujours les mêmes consignes décrites ci-dessous. Sachant aussi que l’algorithme de
Kuhn n’est appliqué que dans le cas de minimisation, ceci nécessite de ramener ce problème à un
problème d’affectation assoc‘é à une minimisation. En fait le problème de maximisation ci-dessous
est équivalent à déterminer l’affectation optimale qui minimise la somme des pénalités données
par la matrice P = pij où pij est la pénalité d’affecter l’individu i au poste j.
 
pij = max gij − gij
1≤i,j≤n

Il suffit alors d’appliquer l’algorithme sur la matrice P obtenue.

41
Chapitre 6

Flot sur un réseau

Définition : Un réseau est un graphe orienté sans boucle, ayant une entrée unique E et une
sortie unique S tel que :

i) dépuis E il existe un chemin vers tout autre sommet j du graphe

ii) de tout sommet i du graphe, il existe un chemin vers S.

Dorénavant tout réseau est noté par R = (E, S, N , A) où E est l’entrée unique, S est la sor-
tie unique, N est l’ensemble des sommets et A est l’ensemble des arcs.

1 3 5 7

E1 S1 E2 S2

2 4 6 8

Il est clair que le premier graphe est un réseau noté par R = (E1 , S1 , N , A) où E1 est l’entrée
unique, S1 est la sortie unique, N = {E1 , 1, 2, 3, 4, S1 } l’ensemble des sommets et l’ensemble des
arcs A = {(E1 , 1), (E1 , 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, S1 ), (4, S1 )}.

Alors que dans le deuxième graphe, il n’y a pas un chemin de sommet 8 vers la sortie S2 , donc ce
graphe ne constitue pas un réseau.

6.1 Flot maximal


On onsidère le réseau du transport R = (e, s, N , A) où e est l’entrée unique, s est la sortie
unique, N l’ensemble des sommets et A l’ensemble des arcs.

42
Le problème du flot maximal consiste à supposer que le sommet e représente une usine, le sommet
s désigne le client, alors que tout sommet de N autre que e et s est un point d’acheminement
(gare, port, aireport, ...) et les arcs de A sont les liaisons (dépendantes des moyens de transport
et de l’infrastructure) qui existent entre ces points. On cherche alors comment doit-on faire pour
transporter le maximum de marchandise de e (usine) à s (client) sachant que les moyens de trans-
port ont des capacités limitées sur chaque arc (i, j) ∈ A qui vaut cij et qu’on la note par [cij ] et
qui sera indexée sur l’arc (i, j).

Avant de répondre à cette question, on doit introduire quelques notations ainsi que quelques
hypothèses indispensables pour ce type des problèmes.

i) Notons par ϕ(i, j) ou ϕij la quantité de marchandise transportée de sommet i au sommet j


appelée flux sur l’arc (i, j).

ii) On suppose qu’il n’y a ni consommation, ni perte, ni vole de marchandise pendant le


transport de e à s, ceci signifie qu’il y a conservation de flux. On le traduit par la loi de Kirchoff
de la manière suivante : X X
ϕik = ϕkj ∀ k ∈ A \ {e, s}
i Xj X
ϕej = ϕis
j i

iii) Si cette dernière hypothèse


P est vérifiée,
P alors l’application ϕ définie sur A à valeurs dans
R est appelée flot et la valeur ϕej = ϕis appelé valeur du flot et noté par φ.
j i

Définition : soit R = (e, s, N , A) un réseau et cij la capacité de l’arc (i, j) pour tout (i, j) ∈ A.
Un flot ϕ sur le réseau R est dit compatible avec les contraintes de capacité si ϕij ≤ cij pour tout
(i, j) ∈ A.

Définition : soit R = (e, s, N , A) un réseau, notons par cij la capacité de l’arc (i, j) pour tout
(i, j) ∈ A et soit ϕ un flot sur R supposé compatible avec les contraintes de capacité. Le graphe
e 0
d’écart relatif à ϕ noté par Rϕ = e, s, N , A est un graphe ayant le même ensemble de som-
0
mets que R, mais un ensemble d’arcs A défini de la manière suivante :
0
i) si 0 < ϕij < cij , alors A contient un arc (i, j) de valeur vije = cij − ϕij (désignant la nouvelle
e
capacité de l’arc (i, j)) et un arc (j, i) de valeur vji = ϕij (désignant le flux de l’arc (i, j)).
0
ii) si ϕij = 0, alors A contient seulement un arc (i, j) de valeur vije = cij (la capacité de l’arc
(i, j) est toujours la même).
0 e
iii) si ϕij = cij , alors A contient seulement un arc (j, i) de valeur vji = ϕij (désignant le flux
de l’arc (i, j)) et on dit que l’ar (i, j) est saturé.

43
Remarque : Il est clair que si ϕij = 0 pour tout (i, j) ∈ A alors Reϕ = R.

Exemple : On considère le réseau R suivant :

[25]
[25] 1 3 [30]
[10] 20
25 0 30
e s
[20]
15 [5] 10
10 [20]
[15] 5
5
2 4
[5]

Il est clair que ce graphe est un réseau sur lequel on inscrit les capacités [cij ] des arcs et les autres
valeurs indexées sur le graphe désignent les valeurs de flux ϕ proposé. On vérifie que

ϕe1 + ϕe2 = 25 + 15 = ϕ3s + ϕ4s = 30 + 10 et ϕe1 = 25 = ϕ12 + ϕ13 + ϕ14 = 0 + 20 + 5

ϕ12 + ϕe2 = 0 + 15 = ϕ23 + ϕ24 = 10 + 5 et ϕ13 + ϕ23 = 20 + 10 = ϕ3s = 30


ϕ14 + ϕ24 = 5 + 5 = ϕ4s = 10
Alors la loi de conservation de flux est bien établie. Il s’agit donc d’un flot ϕ sur un réseau R. De
plus ce flot est compatible avec les contraintes de capacité. Construisons alors le graphe d’écart
relatif à ϕ noté par Reϕ .

20
25 1 3
5 30
5 10

e 5 10 s

10 5
10
15 2 4
5

Théorème (admis) : une condition nécessaire et suffisante pour qu’un flot ϕ soit maximal sur
un réseau R est qu’il n’existe plus de chemin de e à s dans le graphe d’écart Reϕ .

44
Algorithme de Ford-Fulkerson : Le principe de cet algorithme est basé sur le théorème pré-
cédent, en fait il consiste à répeter l’instruction suivante : trouver un chemin de e à s dans le
graphe d’écart permettant d’améliorer la valeur du flot, jusqu’à qu’il n’existe plus de chemin de e
à s.

Algorithme :
étape 1 : initialisation chercher un flot ϕ compatible avec les contraintes de capacité. Dans le
pire des cas, on prend un flot identiquement nul (ϕij = 0 pour tout arc (i, j) de A).

étape 2 : construction du graphe d’écart construisons le graphe d’écart relatif à ϕ qu’on le


note par Reϕ .

étape 3 : itérations

Tant que Reϕ contient un chemin de e à s faire



soit π; un chemin de e à s dans Reϕ



  soit επ la capaité résiduelle du chemin π
 
  επ = min vije



 (i,j)∈π
  pour tout arc (i, j) ∈ π faire
   e
  vij ←− vije − επ
 
   si vije ←− 0 alors supprimer l’arc (i, j)
   e
  vji ←− vji e
 + επ
si l’arc (j, i) n’existait pas alors créer le

Exemple
On considère le réseau du transport suivant :

[10]
[25] a b [30]
[15] 10
15 20
e s
[20]
15 10
10 [10]
[15] 5
5
c d
[5]

sur lequel on indique les capacités des moyens de transport [cij ] et les valeurs de flux ϕij proposées.
Vérifions que les flux proposés constituent un flot compatible avec les contraintes de capacité de
ce réseau, puis vérifier s’il est maximal. Si non, utiliser l’algorithme de Ford-Fulkerson pour le
maximiser.

45
Correction : On a
ϕea + ϕec = 15 + 15 = ϕbs + ϕds = 20 + 10 = 30 et ϕea = 15 = ϕab + ϕad = 10 + 5
ϕec = 15 = ϕcb + ϕcd = 10 + 5 et ϕab + ϕcb = 10 + 10 = ϕbs = 20
ϕad + ϕcd = 5 + 5 = ϕds = 10
Alors le flux proposé est bien conservé donc il s’agit bien d’un flot. En plus ce flot est compatible
avec les contraintes de capacité. Construisons alors le graphe d’écart relatif à ϕ noté par Reϕ .
10
15 a b 20

5 10
10 10
e s

10
10
c d 10
15
5

D’aprés le théorème annoncé précedèment, le flot ϕ proposé dont la valeur est φ = ϕea + ϕec =
ϕbs + ϕds = 30 n’est pas maximal car il existe encore dans Reϕ de chemin de e à s. Soit
π = e −→ a −→ d −→ c −→ b −→ s
le chemin choisi avec une capacité résiduelle
επ = min vije = min {10, 10, 5, 10, 10} = 5
(i,j)∈π

Ainsi par application de l’itération de Ford-Fulkerson, on obtient


10
20 a b 25

10 5
5 5
e s

15
5
c d 10
15
5

46
Il n’existe plus de chemin de e à s, alors le flot obtenu est maximal, il est illustré par la représen-
tation suivante :
10
20 a b 25

15
e s

10
c d 10
15
0

et la valeur maximale du flot est φ = ϕea + ϕec = 20 + 15 = ϕbs + ϕds = 25 + 10 = 35.

6.2 Flot maximal à coût minimal


La reherche du flot maximal peut aboutir à plusieurs solutions. Ici on s’intéresse à chercher
parmi ces solutions à flot maximal, celle qui orrespond à un coût minimal.

Dans ce type de problème, on suppose que chaque arc (i, j) ∈ A a une double valuation no-
tée par [cij , pij ], où cij est la capacité des moyens de transport sur l’arc (i, j) et pij est le coût de
transport d’une unité de produit de i à j.

Algorithme de Roy :
Il est basé sur le même principe que celui de Ford-Fulkerson avec une précision concernant la
selection du chemin parmi les chemins existants dans le graphe d’écart. En fait, cet algorithme
choisit le chemin dont le coût est minimal afin d’aboutir à la solution optimale.

Algorithme :
étape 1 : initialisation chercher un flot ϕ compatible avec les contraintes de capacité. Dans le
pire des cas, on prend un flot identiquement nul (ϕij = 0 pour tout arc (i, j) de A).

étape 2 : construction du graphe d’écart construisons le graphe d’écart relatif à ϕ qu’on le


note par Reϕ (Dans le graphe d’écart le coût unitaire associé à un arc direct (i, j) est pij et celui
associé à l’arc inverse est pji = −pij ).

47
étape 3 : itérations
que Reϕ contient un chemin de e à s faire

Tant
soit π; le chemin le moins coûteux de e à s dans Reϕ



  soit επ la capaité résiduelle du chemin π
 
  επ = min vije



 (i,j)∈π
  pour tout arc (i, j) ∈ π faire
   e
  vij ←− vije − επ
 
   si vije ←− 0 alors supprimer l’arc (i, j)
  
   pij ←− pij
   e
   v ←− v e + επ
   ji ji
   si l’arc (j, i) n’existait pas alors créer le
pji ←− −pij

Exemple : Déterminer le flot maximal à coût minimal sur le réseau suivant :

[4, 2] a
[3, 1]

e [1, 4] s

[3, 1] [2, 2]
b

Il n’y a pas un flux proposé donc on part à partir d’un flot identiquement nul d’où Reϕ = R.
Les chemins existants de e à s sont : π1 : e −→ a −→ s dont le coût est 3, π2 : e −→ b −→
s dont le coût est 3 et π3 : e −→ a −→ b −→ s dont le coût est 8. Le choix est arbitraire entre π1
et π2 , choisissons par exemple π1 dont επ1 = 3 et appliquons l’algorithme, ainsi on obtient

[1, 2] a
[3, −1]
[3, −2]
e [1, 4] s

[3, 1] [2, 2]
b

Le chemin le moins couteux est π2 de επ2 = 2. Ce qui donne par application de Roy

48
[1, 2] a
[3, −1]
[3, −2]
e [1, 4] s
[2, −1]

[1, 1] [2, −2]


b

Il n’existe plus de chemin de e à s, alors le flot est maximal à coût minimal est donné par le graphe
suivant :
3 a
3

e 0 s

2 b 2

La valeur du flot maximal est φ = ϕea + ϕeb = 3 + 2 = ϕas + ϕbs = 5 et le coût de transport
minimal est (3 ∗ 2) + (3 ∗ 1) + (2 ∗ 1) + (2 ∗ 2) = 15

Exercice : Un transporteur veut expédier une certaine marchandise depuis les villes a et b vers
deux clients qui se trouvent aux villes c et d. Les quantités de marchandise disponibles en a et b
sont respectivement de 200 et de 400 unités. Alors que 300 unités et 200 unités sont les quantités
respectivement demandées en c et d. On donne le graphe suivant qui décrit les chemins possibles
entre les villes a, b, c et d ainsi que quelques gares qui seront traversées par le transporteur.

[200, 2] [600, 11] [600, 1]


a G1 G3 c

[200, 9]
[200, 3]

b G2 d
[200, 16]
[500, 2]

49
On inscrit sur chaque arc (i, j) du graphe la double valuation [cij , pij ] où cij est la capacité des
moyens de transport sur l’arc (i, j) et pij est le coût unitaire de transport d’un produit de i à j.
Modéliser ces données sous la forme d’un problème de transport sur un réseau puis, utiliser l’algo-
rithme convenable pour déterminer la solution optimale permettant au transporteur de satisfaire
ses clients au moindre coût.

50

Vous aimerez peut-être aussi