Vous êtes sur la page 1sur 51

Informatique / Recherche operationnelle / Presentation (French)

RECHERCHE OPERATIONNELLE
INTRODUCTION
La recherche oprationnelle est une discipline dont le but est de fournir des mthodes pour
rpondre un type prcis de problme, cest--dire laborer une dmarche universelle pour
un type de problme qui aboutit la ou les solutions les plus efficaces. La particularit de la
recherche oprationnelle est que les mthodes proposes sont des dmarches rationnelles
bases sur des concepts et outils mathmatiques et/ou statistiques.
Gnralement, ces mthodes sont employes sur des problmes tels que leur utilisation
"manuelle" devient impossible. Cest pourquoi, du fait quelles sont rationnelles, les
dmarches proposes par la recherche oprationnelle peuvent tre traduites en programmes
informatiques.
Cette traduction dune dmarche en un programme informatique nest pas sans difficult.
Tout dabord, le temps dexcution du programme rsultant et/ou la place occupe dans la
mmoire de lordinateur peuvent ne pas tre acceptables. Ainsi, une mthode en recherche
oprationnelle sera juge sur ces critres de temps et de place. Plus une mthode sera rapide
et peu gourmande en mmoire, plus elle sera considre bonne.
Les ordinateurs ont une structure particulire qui fait que toutes les proprits des
mathmatiques traditionnelles ne sont pas toujours respectes. Ainsi, une dmarche prouve
fonctionner admirablement en thorie peut savrer tre compltement inexploitable en
pratique. Notamment, les nombres rels dans un ordinateur ne peuvent pas tre reprsents
de manire exacte, ils sont arrondis. On voit donc facilement quune rptition excessive
darrondis dans un calcul peut entraner des erreurs importantes dans les rsultats finaux. Les
mthodes employes en recherche oprationnelle doivent prendre en compte ce genre de
problme.

PLAN DU COURS
Dans ce cours, nous verrons diffrents outils de recherche oprationnelle sans apporter de
justifications mathmatiques trs dtailles et rigoureuses. Aprs quelques exemples qui
permettront de mieux cerner le domaine de la recherche oprationnelle, nous introduirons un
outil la fois graphique et thorique: les graphes. Afin de mieux apprhender la complexit
dun problme ou la rapidit dun algorithme, nous nous intresserons la thorie de la
complexit. Enfin, nous verrons un autre outil important de la recherche oprationnelle qui
est la programmation linaire. Lavantage de cet outil est dapporter une solution gnrique
la rsolution de nombreux problmes. De plus, cet outil est disponible sous diffrentes
formes pour une utilisation informatique. Voici le plan du cours.
Prsentation
Les graphes

1 de 3

Informatique / Recherche operationnelle / Presentation (French)

Les arbres


Reprsentation des graphes




Efficacit des algorithmes, complexit des problmes




Recherche du plus court chemin




Ordonnancement, recherche du plus long chemin




Recherche du flot maximum




Programmation linaire


EXEMPLES
Chemin le plus court / le plus long


Soit un ensemble de villes et des chemins directs reliant ces villes entre elles. Le
problme dit "du plus court chemin" consiste trouver pour une ville de dpart donne
et une ville darrive donne le chemin le plus court qui relie ces deux villes. Le
problme peut galement tre de trouver un chemin le plus court pour chaque couple
de villes. Pour certains problmes, trouver le plus long chemin entre deux points peut
tre intressant.
Ordonnancement / planification


Considrons la gestion dun grand projet. Il est constitu de diffrentes tapes


raliser. Il est logique de penser que certaines tches doivent tre effectues avant
dautres alors que certaines peuvent trs bien tre effectues en mme temps. Ainsi, on
tablit une certaine relation dordre entre les tapes. Un premier problme consiste
trouver une planification des tches qui aboutisse la ralisation du projet en un
minimum de temps. Ensuite, il peut tre intressant de dtecter les tapes dites
"critiques" dont le moindre retard peut affecter toute la suite du projet.
Flot maximum


Soit des chteaux deau ayant un dbit constant. Ils desservent un certain nombre de
villes, chacune ayant des besoins quantifis constants. Leau est achemine travers
des conduits dont le dbit maximum est connu. Le problme est de trouver un moyen
de satisfaire au mieux les demandes de chaque ville. En dautres termes, essayer
dapporter le plus deau possible vers les villes.
Flot de cot minimum


Il sagit dun problme semblable celui du flot maximum mais on suppose en plus
quun cot fonction du dbit est associ lutilisation dun conduit. Le problme
devient alors de satisfaire les villes mais de la manire la moins onreuse.
Sac dos
Un randonneur prpare son sac dos pour partir en excursion. Bien entendu, il veut

2 de 3

Informatique / Recherche operationnelle / Presentation (French)

viter davoir un sac trop lourd et dcide de se limiter dans le choix des objets quil
emporte afin de ne pas dpasser un certain poids. Cependant, il veut emporter le
maximum de choses utiles. Pour cela, il affecte une valeur quantitative chaque objet
en plus de son poids (plus la valeur est importante, plus le randonneur juge l'ob jet
important). Le problme peut donc se formuler de la manire suivante: trouver
lensemble des objets dont la somme des utilits est maximum tout en ne dpassant pas
un poids fix.
Affectation


Des modifications de postes sont effectues dans une entreprise. Plusieurs personnes
doivent tre affectes de nouveaux postes. Ainsi, chacun classe par ordre de
prfrence les postes quil veut occuper. Le problme ici est dattribuer chaque
personne un poste tout en essayant de satisfaire au mieux le souhait de chacun.


Voyageur de commerce
Un voyageur de commerce doit dmarcher dans un certain nombre de villes. Il connat
bien entendu la distance qui spare les villes entre elles. Cependant, le voyageur de
commerce veut perdre le moins de temps possible dans ses dplacements. Le problme
est donc de trouver un chemin qui passe par toutes les villes une et une seule fois et qui
soit le court possible.

Dans tous ces exemples, il existe une mthode simple pour rsoudre le problme. En effet, il
suffit dnumrer toutes les possibilits et den dgager la ou les meilleures. Cependant, on
saperoit que plus le problme est compliqu en terme dlments mis en jeu, plus le
nombre de possibilits crot de manire non pas linaire (proportionnelle) mais plutt
exponentielle. Par exemple, le problme daffectation prsent prcdemment avec 100
personnes a 100! (100 x 99 x 98 x ... x 1) solutions. Le simple fait de rajouter une personne
dans le problme va multiplier par 101 le nombre de solutions.
Gnralement en recherche oprationnelle, on a souvent traiter des problmes dont le
nombre de solutions devient rapidement difficile imaginer. Bien que les exemples vus ici
soient petits, il faut bien comprendre quen ralit, on sera confront des problmes de
taille beaucoup plus importante. Ce qui explique que lon cherche des mthodes toujours plus
efficaces pour rsoudre les problmes.

Copyright (c) 1999-2001 - Bruno Bachelet - bachelet@ifrance.com - http://bruno.bachelet.net


La permission est accorde de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License,
Version 1.1 ou toute version ultrieure publie par la fondation Free Software Foundation. Voir cette licence pour plus de dtails
(http://www.gnu.org).

3 de 3

Informatique / Recherche operationnelle / Les graphes (French)

1. LES GRAPHES
DEFINITIONS ET THEOREMES
Graphe
Un graphe est un ensemble de noeuds qui sont relis entre eux par des arcs.
Mathmatiquement, un graphe est reprsent par un couple de deux ensembles G = (X;U) o
X est lensemble des noeuds et U lensemble des arcs.

Arc
Un arc relie deux noeuds entre eux, il sera donc reprsent par un couple (x;y) o x et y sont
des noeuds. Un arc peut tre orient, cest--dire que lordre de x et de y est important dans le
couple (x;y). Un arc peut ne pas tre orient et dans ce cas, lordre de x et de y dans le couple
(x;y) na aucune importante, donc (x;y) = (y;x). Les arcs sont reprsents de la manire
suivante.
Arc orient:


Arc non orient:

Remarque
Un arc non orient peut toujours tre transform en une situation o lon na que des arcs
orients.

Cest pourquoi, dans la suite du cours, on utilisera le plus souvent des graphes orients, cest-dire des graphes dont les arcs sont tous orients.

Boucle
On appelle boucle un arc dont lextrmit initiale est gale son extrmit finale. Par
exemple, (x;x) est une boucle.

Adjacence

1 de 10

Informatique / Recherche operationnelle / Les graphes (French)

Pour un arc u = (x;y) on dit que:


x est adjacent y,


y est adjacent x,


x et y sont adjacents u,


u est adjacent x et y.

Degr
Le demi-degr extrieur dun noeud est le nombre darcs adjacents qui en partent.
On le note d+(x) et d+(x) = |{u U | u = (x;y) o y X}|.
Le demi-degr intrieur dun noeud est le nombre darcs adjacents qui y arrivent.
On le note d-(x) et d-(x) = |{u U | u = (y;x) o y X}|.
Le degr dun noeud est le nombre darcs qui lui sont adjacents.
On le note d(x) et d(x) = d+(x) + d-(x).

Exemple
Dans le graphe suivant, d+(x) = 3, d-(x) = 2, d(x) = 5.

Graphe rgulier
Un graphe est dit rgulier si les degrs de tous ses sommets sont gaux.

Graphe complet
Un graphe est dit complet si tous les noeuds sont adjacents deux deux.
Autrement dit, (x;y) U (y;x) U.

2 de 10

Informatique / Recherche operationnelle / Les graphes (French)

Exemple
Graphe non complet:

Graphe complet:

Chane
Une chane de x y est une squence darcs c = ((x;e),(z;e),(z;a)...(s;t),(u;t),(u;y)) o deux
arcs qui se suivent sont adjacents et o x doit tre une extrmit du premier arc et y une
extrmit du dernier.

Chemin
Un chemin de x y est une chane dans laquelle les arcs sont orients et tels que:
x est lextrmit initiale du premier arc,


y est lextrmit terminale du dernier arc,




lextrmit terminale dun arc est lextrmit initiale de larc qui le suit dans la
squence.

Exemple

3 de 10

Informatique / Recherche operationnelle / Les graphes (French)

ch1 = ((A;C),(C;E)) est un chemin de A E.




ch2 = ((A;C),(C;F),(F;A),(A;C),(C;E)) est un chemin de A E.




ch3 = ((A;C),(C;F),(F;D),(D;C),(C;E)) est un chemin de A E.




ch4 = ((A;B),(B;D),(D;E)) est une chane de A E.




ch5 = ((A;B),(B;D),(D;C),(C;A),(A;B),(B;D),(D;E)) est une chane de A E.




ch6 = ((A;B),(B;D),(D;C),(C;F),(F;D),(D;E)) est une chane de A E.

Chemin, chane simples


Un chemin simple est un chemin qui ne contient pas plusieurs fois le mme arc. Dans
lexemple prcdent, ch1 et ch3 sont des chemins simples mais pas ch2.
Une chane simple est une chane qui ne contient pas plusieurs fois le mme arc. Dans
lexemple prcdent, ch4 et ch6 sont des chanes simples mais pas ch5.

Chemin, chane lmentaires


Un chemin lmentaire est un chemin qui ne passe pas plus dune fois par un noeud. Dans
lexemple prcdent, ch1 est un chemin lmentaire mais pas ch2, ni ch3.
Une chane lmentaire est une chane qui ne passe pas plus dune fois par un noeud. Dans
lexemple prcdent, ch4 est un chemin lmentaire mais pas ch5, ni ch6.

Connexit, forte connexit


On dfinit la connexit par une relation entre deux noeuds de la manire suivante.
x et y ont une relation de connexit
x = y.

il existe une chane entre x et y ou bien

4 de 10

Informatique / Recherche operationnelle / Les graphes (French)

On dfinit la forte connexit par une relation entre deux noeuds de la manire suivante.
x et y ont une relation de forte connexit
chemin de y x) ou bien x = y.

(il existe un chemin de x y et un

Graphe connexe, fortement connexe


Un graphe est dit connexe si tous ses noeuds ont deux deux la relation de connexit.
Un graphe est dit fortement connexe si tous ses noeuds ont deux deux la relation de forte
connexit.

Exemple
Graphe non connexe:

Graphes connexes mais non fortement connexes:

Graphe fortement connexe:

Composante connexe, fortement connexe

5 de 10

Informatique / Recherche operationnelle / Les graphes (French)

On appelle composante connexe un ensemble de noeuds qui ont deux deux la relation de
connexit. De plus, tout noeud en dehors de la composante na pas de relation de connexit
avec aucun des lments de la composante.
De mme, on appelle composante fortement connexe un ensemble de noeuds qui ont deux
deux la relation de forte connexit. De plus, tout noeud en dehors de la composante na pas
de relation de forte connexit avec aucun des lments de la composante.
Dans lexemple prcdent du graphe non connexe, {A,B,C} est une composante fortement
connexe du graphe et {D,E} est une composante connexe.

Graphe rduit
On appelle graphe rduit du graphe G le graphe G pour lequel chaque noeud est associ
une composante fortement connexe de G. De plus, un arc relie un noeud x un noeud y
dans le graphe G si il existe un arc qui relie x y dans G o x appartient la composante
fortement connexe de G associe x' et o y appartient la composante fortement connexe
de G associe y'.

Exemple

Ce graphe G nest pas fortement connexe, car on ne peut pas trouver de chemin de A D par
exemple. Par contre, on identifie deux composantes fortement connexes A = {A,B,C}et
B = {D,E}. Le graphe rduit du graphe G est:

Circuit, cycle
Un circuit contenant un noeud x est un chemin de x x. Un circuit est une squence
circulaire darcs et donc, contrairement au chemin, un circuit na ni dbut, ni fin.
De mme, un cycle contenant un noeud x est une chane de x x. Un cycle est galement une
squence circulaire darcs.
Un circuit (ou une chane) est lmentaire si le chemin (ou la chane) associ(e) est
lmentaire.

6 de 10

Informatique / Recherche operationnelle / Les graphes (French)

7 de 10

Sous-graphe, graphe partiel, sous-graphe partiel


Soit un graphe G = (X;U), X inclu dans X et U inclu dans U et U = {(x;y)
y X}.

U|x

X et

Le graphe (X;U) est appel "sous-graphe" de G.


Le graphe (X;U) est appel "graphe partiel" de G.
Le graphe (X;U U) est appel "sous-graphe partiel" de G.
En dautres termes:
Un sous-graphe de G, cest G priv de quelques noeuds et des arcs adjacents ces noeuds.
Un graphe partiel de G, cest G priv de quelques arcs.
Un sous-graphe partiel de G, cest un graphe partiel dun sous-graphe de G.

Exemple
Un graphe G:

Un sous-graphe de G:

Un graphe partiel de G:

Informatique / Recherche operationnelle / Les graphes (French)

Un sous-graphe partiel de G:

COMPOSANTES FORTEMENT CONNEXES


Lors de la conception dun rseau de communication notamment, il peut tre intressant de
savoir si la configuration choisie permet une communication de nimporte quel point
nimporte quel autre. Un moyen de le vrifier est de reprsenter le rseau sous la forme dun
graphe et de vrifier quil est fortement connexe. Pour cela, lalgorithme suivant est propos.
Il dtermine la composante fortement connexe dun graphe contenant un point donn.
Ensuite, pour le problme nonc, il suffit de choisir un point au hasard, dexcuter
lalgorithme et de vrifier que la composante fortement connexe trouve est bien le graphe en
entier. Un algorithme permettant de trouver toutes les composantes fortement connexes est
galement propos.

Recherche dune composante fortement connexe


Cet algorithme recherche la composante fortement connexe dun graphe G contenant un
sommet a. Lide de cet algorithme est de parcourir le graphe partir du point a dans le sens
direct (i.e. en suivant les flches des arcs) et de crer un ensemble des noeuds parcourus. La
mme chose est effectue dans le sens indirect (i.e. en suivant les flches des arcs en sens
inverse) et de crer un deuxime ensemble des noeuds parcourus. Le premier ensemble
regroupe les noeuds accessibles partir de a et le deuxime ensemble regroupe les noeuds
qui peuvent atteindre a. Lintersection de ces deux ensembles donne les noeuds qui la fois
peuvent atteindre a et sont accessibles partir de a. Cette intersection est donc la composante
fortement connexe qui contient a.

Algorithme

8 de 10

Informatique / Recherche operationnelle / Les graphes (French)

9 de 10

Titre: ComposanteFortementConnexe
Entres: G = (X;U) un graphe, a un sommet.
Sortie: X un sous-ensemble de sommets.
Variables intermdiaires: X1 et X2 deux sous-ensemble de sommets, examin() une fonction,
x un noeud.
Dbut
X1
{a};
pour tout x

X faire examin(x)

faux;

tant que
x
X1 | non examin(x) faire
examin(x)
vrai;
pour tout u = (x;y)
U | y
X1 faire X1
fin tant que;
X2
{a};
pour tout x

X1 faire examin(x)

X1

{y};

X2

{y};

faux;

tant que
x
X2 | non examin(x) faire
examin(x)
vrai;
pour tout u = (y;x)
U | y
X2 faire X2
fin tant que;
X

X1

X2;

Fin

Recherche de toutes les composantes fortement connexes


Pour trouver toutes les composantes fortement connexes dun graphe, il suffit de choisir au
hasard un noeud et de dterminer, grce lalgorithme prcdent, la composante fortement
connexe qui le contient. On obtient alors une premire composante fortement connexe X1.
Ensuite, parmi les noeuds qui ne font pas partie de X1, on en prend un au hasard pour
dterminer la composante fortement connexe qui le contient. On obtient X2. On recommence
ainsi jusqu ce que tous les noeuds appartiennent une composante fortement connexe.

Algorithme
Titre: ComposantesFortementConnexes
Entres: G = (X;U) un graphe.
Sortie: C = {C1,...,Cn} un ensemble de composantes connexes.
Variables intermdiaires: X un sous-ensemble de sommets, i un entier, x un noeud.
Dbut
X
i

X;
1;

tant que X
faire
choisir x dans X;
Ci
ComposanteFortementConnexe(G,x);
X
X - Ci;
i
i + 1;
fin tant que;

Fin

Informatique / Recherche operationnelle / Les graphes (French)

Copyright (c) 1999-2001 - Bruno Bachelet - bachelet@ifrance.com - http://bruno.bachelet.net


La permission est accorde de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License,
Version 1.1 ou toute version ultrieure publie par la fondation Free Software Foundation. Voir cette licence pour plus de dtails
(http://www.gnu.org).

10 de 10

Informatique / Recherche operationnelle / Les arbres (French)

2. LES ARBRES
DEFINITIONS ET THEOREMES
Nombre d'arcs dans un graphe
Soit n le nombre de noeuds dun graphe G = (X;U), n = |X|.
Soit m le nombre darcs de G, m = |U|.
Si G est connexe, m n - 1.
Si G est sans cycle, m n - 1.

Arbre
Un arbre est un graphe connexe sans cycle. Il a donc n - 1 arcs. On peut donc dire quun
arbre est un graphe qui connecte tous les noeuds entre eux avec un minimum darcs.

Remarques
Lajout du moindre arc supplmentaire dans un arbre cre un cycle.


Un graphe connexe possde un graphe partiel qui est un arbre.

Exemple
Un graphe connexe:

Un arbre extrait du graphe prcdent:

1 de 5

Informatique / Recherche operationnelle / Les arbres (French)

Fort
On appelle fort un graphe dont chaque composante connexe est un arbre.

Racine, antiracine
Un noeud a dun graphe G est une racine de G sil existe un chemin joignant a chaque
noeud du graphe G.
Un noeud a dun graphe G est une antiracine de G sil existe un chemin joignant chaque
noeud du graphe G a.

Exemple

A est une racine du graphe.


I est une antiracine du graphe.

Arborescence, anti-arborescence
Un graphe G est une arborescence de racine a si G est un arbre et si a est une racine.
Un graphe G est une anti-arborescence dantiracine a si G est un arbre et si a est une
antiracine.

ARBRE DE COUT MINIMUM / MAXIMUM

2 de 5

Informatique / Recherche operationnelle / Les arbres (French)

Imaginons que lon associe une valeur, un poids, chaque arc dun graphe G. Le problme
de larbre de cot maximum consiste trouver un arbre, graphe partiel de G, dont la somme
des poids des arcs est maximum. En pratique, les problmes se ramne plutt trouver
larbre de cot minimum, ce qui ne change pas fondamentalement le principe des algorithmes
proposs ici.
Par exemple, minimiser le cot dinstallation de lignes lectriques entre des maisons peut tre
modlis par la recherche dun arbre de cot minimum. En effet, on veut connecter toutes les
maisons entres elles sans avoir de lignes inutiles (do la recherche dun arbre). Ensuite, on
veut utiliser le moins de cble possible, aussi on associera chaque possibilit de connexion
la longueur de cble ncessaire et on cherchera minimiser la longueur totale de cble
utilise.
Dans ce cours, deux algorithmes sont proposs. Lefficacit de chacun deux dpend du
choix de reprsentation du graphe et de la structure mme du graphe.

ALGORITHME DE KRUSKAL
Le principe de lalgorithme de Kruskal pour trouver un arbre de poids minimum dans un
graphe G est tout dabord de trier les arcs par ordre croissant de leur poids. Ensuite, dans cet
ordre, les arcs sont ajouts un par un dans un graphe G pour construire progressivement
larbre. Un arc est ajout seulement si son ajout dans G nintroduit pas de cycle, autrement
dit, si G reste un arbre. Sinon, on passe larc suivant dans lordre du tri.

Algorithme
Titre: Kruskal
Entres: G = (X;U) un graphe.
Sortie: U un ensemble darcs.
Variables intermdiaires: i un entier.
Dbut
trier les arcs de G dans lordre croissant des poids;
[On les notera u1, u2, ... , um.]
U

pour i
1 m faire
si le graphe (X;U
{ui}) ne contient pas de cycle alors
U
U
{ui};
fin si;
fin tant que;

Fin

Justification
Supposons que lalgorithme est effectu quelques itrations. Considrons maintenant lajout
de larc u = (x;y) dans larbre. On suppose que cet ajout nintroduit pas de cycle dans G.
Est-on certain que u permet la construction de larbre de cot minimum ? En fait, x et y
doivent tre connects dune manire ou dune autre. Donc si ce nest pas u qui les relie, ce

3 de 5

Informatique / Recherche operationnelle / Les arbres (French)

4 de 5

sera une autre chane C = (x,s,t,u,y) de x y comme le montre la figure ci-dessous. Comme u
nintroduit pas de cycle, cette autre chane nest pas encore construite, elle le sera plus tard.
Cela signifie que tous les arcs de cette chane ont un cot suprieur ou gal celui de u.
Donc, le fait de choisir la chane C pour connecter x y est plus onreuse que de connecter x
y par u. En effet, supprimons nimporte quel arc de la chane C et remplaons le par u. On
obtiendra toujours un arbre mais de cot plus faible. Cela justifie le choix de u et donc la
dmarche globale de lalgorithme de Kruskal.

ALGORITHME DE PRIM
Le principe de lalgorithme de Prim pour trouver un arbre de poids minimum dans un graphe
G est de fusionner, deux par deux les noeuds de G pour obtenir finalement un arbre. Par
fusionner, on entend remplacer deux noeuds par un seul. Tous les arcs adjacents lun ou
lautre des anciens noeuds deviennent adjacents au nouveau noeud. Le choix des noeuds que
lon fusionne est fait en choisissant au hasard un noeud et en cherchant un arc adjacent (autre
quune boucle) qui a le cot le plus faible. Ce qui fournit le deuxime noeud de la fusion.

Algorithme
Titre: Prim
Entres: G = (X;U) un graphe.
Sortie: U un ensemble darcs.
Variables intermdiaires: x un noeud, u un arc.
Dbut
U

tant que |U| < n - 1 faire


choisir x
X;
choisir u
U | u = (x;y) ou u = (y;x) avec y
x
et cot(u) = min{cot(v) | v
U avec v = (x;y) ou v = (y;x), x
U
U
{u};
fusionner x et y; [x et y deviennent un seul noeud.]
fin tant que;

Fin

Justification

y};

Informatique / Recherche operationnelle / Les arbres (French)

Tout dabord, si on choisit un arc u = (x;y) o x et y sont des noeuds qui ne sont pas le
rsultat dune fusion, on peut dire que le graphe rsultant ({x,y};{u}) est un arbre de poids
minimum.
Maintenant, si on choisit un arc u = (x;y) o x et y sont des noeuds qui sont le rsultat de
fusions, la figure ci-dessous peut reprsenter la situation. En fait, x et y reprsentent des
arbres de poids minimum (hypothse de rcurrence). Si u est larc entre x et y de poids
minimum, le graphe ({a,b,c,d,e,f};{(a;c),(b;c),(d;f),(e;f),u}) sera un arbre de poids minimum.
Donc la dernire tape de lalgorithme, on obtiendra bien un arbre de poids minimum qui
est un graphe partiel de G.

Copyright (c) 1999-2001 - Bruno Bachelet - bachelet@ifrance.com - http://bruno.bachelet.net


La permission est accorde de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License,
Version 1.1 ou toute version ultrieure publie par la fondation Free Software Foundation. Voir cette licence pour plus de dtails
(http://www.gnu.org).

5 de 5

Informatique / Recherche operationnelle / Representation (French)

3. REPRESENTATION DES GRAPHES


MATRICE D'INCIDENCE NOEUD-ARC
Un graphe peut tre reprsent par une matrice n x m (n = |X| et m = |U|), dite dincidence,
pouvant contenir uniquement les valeurs 0, 1, -1. Chaque ligne de la matrice est associe un
noeud et chaque colonne un arc. Ainsi, une case indique la relation quil existe entre un
noeud et un arc.
0 signifie que le noeud et larc ne sont pas adjacents,


1 signifie que le noeud est lextrmit initiale de larc,




-1 signifie que le noeud est lextrmit terminale de larc.




Exemple

1
2
3
4
5

a
1
-1
0
0
0

b
1
0
-1
0
0

c
0
-1
1
0
0

d
0
1
0
-1
0

e
0
0
-1
1
0

f
0
0
0
1
-1

g
0
0
-1
0
1

h
0
0
0
-1
1

Remarques
Seulement 2m cases de la matrice sont non nulles sur mn cases.

Cette reprsentation occupe beaucoup de place en mmoire.


De plus, son utilisation apporte rarement de bons rsultats au niveau des algorithmes.
Notamment, pour parcourir le graphe, son emploi est difficile.

Par contre, pour quelques problmes comme le flot de cot minimum, cette matrice a

1 de 3

Informatique / Recherche operationnelle / Representation (French)

une signification directe importante et peut donc savrer utile.

MATRICE D' ADJACENCE NOEUD


-NOEUD
Un graphe peut tre reprsent par une matrice n x n (n = |X|), dite dadjacence, pouvant
contenir uniquement les valeurs 0, 1. Chaque ligne et chaque colonne de la matrice
reprsente un noeud. Ainsi, une case indique la relation quil existe entre deux noeuds.
0 signifie que les deux noeuds ne sont pas relis par un arc,

1 signifie que les deux noeuds sont relis par un arc orient.

Exemple
Le graphe prcdent sera reprsent par la matrice suivante.

1
2
3
4
5

1
0
0
0
0
0

2
1
0
1
0
0

3
1
0
0
1
1

4
0
1
0
0
1

5
0
0
0
1
0

Remarques
Seulement m cases de la matrices sont non nulles sur n2 cases.

Cette reprsentation est efficace au niveau de lespace mmoire utilis lorsque le


graphe est suffisamment dense (i.e. lorsquil y a suffisamment darcs).

Elle permet dimplmenter assez facilement les algorithmes.

Deux arcs ayant les mmes extrmits ne peuvent pas tre reprsents avec cette
matrice.

LISTES
Un graphe peut tre reprsent par des listes. Nous proposons ici une possibilit mais de
nombreuses autres peuvent convenir. On dfinit tout dabord une liste des noeuds et chaque
noeud, on associe une liste de noeuds successeurs et une liste de noeuds prdcesseurs.

Exemple

2 de 3

Informatique / Recherche operationnelle / Representation (French)

Le graphe prcdent sera reprsent de la manire suivante.

Remarques
Cette reprsentation est nettement plus efficace au niveau de la mmoire occupe que
les deux reprsentations prcdentes.

Elle est trs bien adapte au parcours du graphe, aussi bien en sens direct quen sens
indirect.

Cette structure est souple. L' ajout et la suppression d' arcs ou de noeuds sont plus s
ais
qu' avec les repr
sentations matricielles.

Copyright (c) 1999-2001 - Bruno Bachelet - bachelet@ifrance.com - http://bruno.bachelet.net


La permission est accorde de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License,
Version 1.1 ou toute version ultrieure publie par la fondation Free Software Foundation. Voir cette licence pour plus de dtails
(http://www.gnu.org).

3 de 3

Informatique / Recherche operationnelle / Complexite (French)

4. EFFICACITE DES ALGORITHMES,


COMPLEXITE DES PROBLEMES
INTRODUCTION
Considrons le jeu dchecs. On sait quil existe une procdure finie qui permet de
dterminer la meilleure stratgie partir dune situation donne. Cependant, jusqu prsent,
on ne connat pas dautre mthode que lexploration de tous les coups possibles. En rsum,
on sait quen un temps fini, on peut apporter la solution au problme. Cependant, sur le plan
pratique on saperoit immdiatement que lnumration exhaustive prendrait trop de temps.
La premire notion qui apparat donc est celle dalgorithme efficace. Pour un problme
donn, on cherche avoir un algorithme dit efficace, cest--dire que le temps ncessaire
son excution ne soit pas trop important. Ensuite, intervient la notion de problme facile ou
difficile. Un problme sera dit facile si on peut le rsoudre facilement, autrement dit sil ne
faut pas trop de temps pour trouver la solution. Ainsi, sil existe un algorithme efficace pour
un problme donn, alors ce dernier est dit facile. Mais comment caractriser les problmes
difficiles. Un problme pour lequel on ne connat pas dalgorithme efficace, est-il difficile ou
facile ? Ce nest pas parce que lon ne connat pas dalgorithme efficace quil nest pas facile
et quun jour on ne trouvera pas un moyen de le rsoudre. A linverse, il peut exister des
problmes intrinsquement compliqus, pour lesquels on ne pourra jamais trouver
dalgorithme efficace.
De nombreuses personnes se sont penches sur ces problmes et ont dvelopp une thorie
dite de la complexit. Nous ne verrons pas ici en dtail les fondements de cette thorie mais
tenterons plutt dacqurir une vision globale de cette problmatique. Dans un premier
temps, on va voir comment lefficacit dun algorithme est mesure avant de dfinir plus
prcisment ce quest un algorithme efficace. Ensuite, On discutera de la classification des
problmes selon leur difficult tre rsolus.

COMPLEXITE D'UN ALGORITHME


On dsigne par complexit dun algorithme le nombre doprations ncessaires celui-ci
pour sexcuter. Bien videmment, ce nombre peut varier en fonction de ce que lon appelle
les donnes dentres, cest--dire les paramtres que lon donne lalgorithme. Par exemple,
un algorithme de tri dlments dans un tableau ne sexcutera pas avec le mme nombre
doprations sil y a 10 lments ou sil y en a 100. Ainsi, on cherchera estimer la
complexit dun algorithme en fonction de la taille des donnes entres. Par exemple, dans le
cas du tableau, on exprimera la complexit en fonction de la taille du tableau. Pour une
matrice, ce serait en fonction de sa largeur et de sa hauteur. De plus, la nature mme des
donnes pour une mme taille peut ne pas aboutir au mme nombre doprations
lexcution de lalgorithme. En effet, si le tableau est dj tri, lexcution de lalgorithme de
tri risque dtre trs rapide compare au cas dun tableau totalement en dsordre. Cest pour
cela que lon estime le nombre doprations dans le pire des cas.
En rsum, on mesure lefficacit dun algorithme par une expression mathmatique

1 de 5

Informatique / Recherche operationnelle / Complexite (French)

qui indique le nombre d'oprations indispensables lexcution de lalgorithme en


fonction de la taille des donnes en entres tout en supposant le pire des cas.
Le critre de rapidit nest pas toujours celui qui nous intresse. On peut aussi vouloir
estimer la place utilise par un algorithme dans la mmoire de lordinateur. Dans ce cas, on
parle de complexit spatiale alors que jusqu prsent on considrait la complexit
temporelle. La complexit spatiale peut se dfinir dune manire semblable la complexit
temporelle. Dans la suite de ce cours, on sintressera uniquement la complexit
temporelle.

ALGORITHME EFFICACE
Une fois la complexit dfinie de manire succincte, on peut tenter de dfinir ce quest un
algorithme efficace. Un algorithme sera dit efficace si sa complexit est borne par un
polynme ayant la taille des donnes comme variable. Par exemple, un algorithme qui a
en entre un tableau de n lments et qui a une complexit de n2 est un algorithme efficace.
On dit aussi que lalgorithme est polynomial. Cette dfinition est justifie par le fait quon
sintresse aux performances des algorithmes quand la taille des donnes en entre devient
trs importante. Par exemple, considrons les algorithmes A, B et C. Leur complexit sont
les suivantes.
Ca = 80n,

Cb = 10n2,

Cc = n!.

Avec 4 lments, il faut respectivement 320, 160 et 24 oprations aux algorithmes A, B et C


pour sexcuter. Le plus efficace pour 4 lments est donc C. Considrons maintenant 20
lments, il faut respectivement 1600, 4000 et 2.4 1018 oprations pour raliser lexcution.
On saperoit tout de suite que lalgorithme C nest plus utilisable. Par contre, A et B restent
applicables. Maintenant, avec 100 lments, il faut respectivement 8000 et 100000
oprations. Bien videmment, lalgorithme A est le plus performant, mais lalgorithme B
reste applicable. Cet exemple justifie la notion defficacit. Si le nombre doprations
"nexplose pas" avec une augmentation de la taille des donnes, lalgorithme est
considr efficace.
Certains pourraient demander ce quest prcisment une opration. En gnral, on considre
comme tant une opration lmentaire une affectation, une addition, un test... Mais cela est
discutable puisque selon le langage et le compilateur, une opration sera excute plus ou
moins vite, une addition sexcutera plus ou moins vite quun test... Cependant, il faut bien
comprendre que lon sintresse au comportement gnral de lalgorithme face des
problmes de grande taille. Ainsi, ce nest pas utile de compter toutes les oprations dans le
dtail, ni de considrer le langage de programmation. Dans notre exemple, les coefficients 80
et 10 ne sont pas trs importants, ds que la taille augmente, on saperoit que cest le terme
en n qui prime. Ceci explique la difficult dterminer la complexit dun algorithme. Il faut
tre trs prcis dans la dmarche mais ne pas se soucier de la valeur exacte en terme de temps
dexcution de chaque opration.

2 de 5

Informatique / Recherche operationnelle / Complexite (French)

PROBLEME D' OPTIMISATION COMBINATOIRE,


DE RECONNAISSANCE
Problme doptimisation combinatoire
Un problme doptimisation combinatoire est un problme qui consiste chercher une
meilleure solution parmi un ensemble de solutions ralisables.

Problme de reconnaissance
Un problme de reconnaissance est un problme qui consiste apporter une rponse "oui" ou
"non" une question.
A chaque problme doptimisation combinatoire, on peut associer un problme de
reconnaissance de la manire suivante.
Soit un problme doptimisation combinatoire:
Trouver s S | f(s) = min{f(s) | s S}.
Soit a un nombre, on dfinit le problme de reconnaissance associ:
Existe-t-il s S | f(s) a ?
Un problme doptimisation combinatoire est au moins aussi difficile que le problme de
reconnaissance associ. De plus, on peut gnralement prouver que le problme de
reconnaissance nest pas plus facile que le problme doptimisation combinatoire. En
dautres termes, cela signifie quun problme doptimisation combinatoire est souvent du
mme niveau de difficult que le problme de reconnaissance associ. Cela justifie que la
suite de ce chapitre ne concerne que les problmes de reconnaissance.

PROBLEME FACILE, DIFFICILE


Problmes dcidables
Tout dabord, on fait une distinction entre les problmes dcidables et les problmes
indcidables. Les problmes indcidables sont ceux pour lesquels aucun algorithme, quel
quil soit, na t trouv pour les rsoudre. Ainsi, les problmes dcidables sont ceux pour
lesquels il existe au moins un algorithme pour les rsoudre.

La classe NP
Parmi les problmes dcidables, les plus simples rsoudre sont regroups dans la classe NP.
Un problme appartient la classe NP si quelquun ayant la solution au problme peut
dmontrer que c' est la solution en un temps polynomial.Les autres problmes dcidables
sont considrs comme trs difficiles. La classe NP est galement dcompose en trois

3 de 5

Informatique / Recherche operationnelle / Complexite (French)

catgories qui permettent didentifier les problmes les plus simples et les problmes les plus
compliqus de la classe.

La classe P
La classe P, qui regroupe les problmes les plus simples de la classe NP, contient les
problmes pour lesquels on connat au moins un algorithme polynomial pour les rsoudre.
Pour le reste de la classe NP, on nest pas sr quil nexiste pas un algorithme polynomial
pour rsoudre chacun de ses problmes. Ainsi, on sait que P est inclu dans NP mais on na
pas pu prouver que P n' est pas NP.

Rduction polynomiale
Soit deux problmes P1 et P2. On dit que P1 est rduit au problme P2 si on peut rsoudre P1
en utilisant un algorithme pour P2 comme sous-routine. Cette rduction est dite polynomiale
si lalgorithme pour P1 est polynomial en comptant lappel la sous-routine de P2 comme
une opration lmentaire.
P2 est au moins aussi difficile que P1. En effet, si P2 appartient la classe P, P1 y appartient
aussi, car lalgorithme ci-dessus est polynomial. Si P2 nest pas polynomial, rien nempche
P1 de ltre sil existe un algorithme polynomial pour le rsoudre.

La classe NP-Complet
La classe NP-Complet regroupe les problmes les plus difficiles de la classe NP. Elle
contient les problmes de la classe NP tels que nimporte quel problme de la classe NP leur
est polynomialement rductible. Entre eux, les problmes de la classe NP-Complet sont aussi
difficiles.

La classe NP-Difficile
La classe NP-Difficile regroupe les problmes (pas forcment dans la classe NP) tels que
nimporte quel problme de la classe NP leur est polynomialement rductible.

Tableau rcapitulatif

4 de 5

Informatique / Recherche operationnelle / Complexite (French)

Copyright (c) 1999-2001 - Bruno Bachelet - bachelet@ifrance.com - http://bruno.bachelet.net


La permission est accorde de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License,
Version 1.1 ou toute version ultrieure publie par la fondation Free Software Foundation. Voir cette licence pour plus de dtails
(http://www.gnu.org).

5 de 5

Informatique / Recherche operationnelle / Plus court chemin (French)

1 de 4

5. RECHERCHE
DU PLUS COURT CHEMIN
DEFINITIONS
Rseau
Un rseau est un graphe G = (X;U) auquel on associe une fonction d: U
arc fait correspondre sa "longueur". On note R = (X;U;d) un tel rseau.

IR qui chaque

Longueur
La longueur dun chemin (dune chane, dun circuit ou dun cycle) est la somme des
longueurs de chaque arc qui le compose. Par convention, un chemin (une chane, un circuit
ou un cycle) qui ne contient pas darc est de longueur nulle.

Circuit absorbant
Un circuit est absorbant si sa longueur est ngative.

Exemple
La longueur du circuit suivant est -1. Cest donc un circuit absorbant.

PROBLEMES DE PLUS COURT CHEMIN


Diffrents problmes peuvent tre poss autour de la recherche de plus court chemin. Un
premier problme A consiste rechercher le plus court chemin entre deux points donns.
Cest--dire dterminer le chemin de plus petite longueur qui relie ces points. En fait, pour
rsoudre ce problme, on rsout le problme B. Ce dernier consiste dterminer, partir
dun point donn le plus court chemin pour aller tous les autres noeuds. Enfin, le problme
C consiste trouver, pour nimporte quelle paire de noeuds, le chemin le plus court entre

Informatique / Recherche operationnelle / Plus court chemin (French)

eux. Le problme A tant rsolu par le problme B, on sintressera uniquement aux


problmes B et C.
Le problme B peut tre rsolu de nombreuses manires. Tout dpend des hypothses mises
sur la structure du rseau. Lorsque le rseau est sans circuit, on appliquera lalgorithme de
Bellman. Lorsque le rseau na que des longueurs positives ou nulles (mais ventuellement
avec des circuits), on utilisera la mthode de Dijkstra. Enfin, dans un rseau sans hypothse
particulire, on dispose dun algorithme gnral. On sintressera ici lalgorithme de
Dijkstra.
Le problme C peut tre rsolu galement de diffrentes manires. On sintressera ici
lalgorithme de Dantzig qui met lhypothse quil ny a pas de circuit absorbant dans le
graphe. Il faut noter que le stockage de la solution du problme C peut prendre beaucoup de
place. Cest pourquoi on se limitera ici calculer les plus courtes distances et non pas
dterminer les plus courts chemins. Cependant, la dmarche reste exactement la mme.

ALGORITHME DE DIJKSTRA
Cet algorithme dtermine les plus courts chemins dun point s tous les autres points
dun rseau R = (X;U;d). Il suppose que les longueurs sur les arcs sont positives ou
nulles. Lide de cet algorithme est de partager les noeuds en deux groupes: ceux dont on
connat la distance la plus courte au point s (ensemble S) et ceux dont on ne connat pas cette
distance (ensemble S). On part avec tous les noeuds dans S. Tous les noeuds ont une
distance infinie (p(x) = +oo) avec le point s, except le point s lui-mme qui a une distance
nulle (p(s) = 0). A chaque itration, on choisit le noeud x qui a la plus petite distance au point
s. Ce noeud est dplac dans S. Ensuite, pour chaque successeur y de x, on regarde si la
distance la plus courte connue jusqu lors entre s et y ne peut pas tre amliore en passant
par x. Si cest le cas, p(y) est modifie. Ensuite, on recommence avec un autre noeud.

Algorithme
Titre: Dijkstra
Entres: R = (X;U;d) un rseau, s un sommet.
Sorties: p() une fonction indiquant la plus courte distance qui spare un point de s, pred() une
fonction indiquant par quel arc on arrive un point si on emprunte le plus court chemin.
Variables intermdiaires: S et S deux sous-ensembles de sommets, x et y deux noeuds, sortie
un boolen.
Dbut
S
S

;
X;

pour tout x
X faire
p(x)
+oo;
pred(x)
nil;
fin pour;
p(s)
sortie

0;
faux;

tant que S
et non sortie faire
choisir x
S tel que p(x) = min{p(y) | y
sortie
(p(x) = +oo);

S};

2 de 4

Informatique / Recherche operationnelle / Plus court chemin (French)

S
S

{x};
S - {x};

pour chaque arc u = (x;y) | y


si p(y) > p(x) + d(u) alors
p(y)
p(x) + d(u);
pred(y)
u;
fin si;
fin pour;
fin tant que;

S faire

Fin

Justification
Pour quun noeud x ait une distance p(x) diffrente de +oo , il faut quil ait un de ses
prdcesseurs dans S. De plus, p(x) est la plus petite distance de s x en empruntant
uniquement les noeuds de S. Supposons que p(x) soit la plus petite distance de tout
lensemble S. Supposons galement que le plus court chemin pour aller de s x passe par t
et y (cf. figure). Cela signifie que y est le prdcesseur de x. Il faudra donc que p(y) p(x).
Cependant, si le chemin le plus court pour aller de s x passe par t et y alors le chemin le
plus court pour aller de s y passe par t. Ce qui signifie que y connat sa plus courte distance
s. Malheureusement, elle est suprieure p(x) ce qui contredit lhypothse que p(x) est la
plus courte distance de S.

ALGORITHME DE DANTZIG
Cet algorithme dtermine la plus courte distance entre tous les couples de sommets dun
rseau R = (X;U;d). On suppose que le rseau ne contient pas de circuit absorbant. On
commence par numroter les noeuds dune manire quelconque. Ensuite, une matrice D de
taille n x n est construite indiquant pour chaque noeud la plus courte distance qui le spare
dun autre noeud. Chaque ligne et chaque colonne reprsentent donc un noeud. Lide est de
considrer un sous-rseau pour lequel on dtermine les plus courtes distances entre ses
noeuds. Ensuite, itrativement, on rajoute un noeud dans ce sous-rseau, on met les plus
courtes distances jour et on recommence jusqu ce que le sous-rseau soit le rseau luimme.
A litration k, le sous-rseau a k noeuds et ce sont ceux numrots de 1 k. A litration
k + 1, on ajoute le noeud k + 1 dans le sous-rseau. Les distances sont mises jour de la
manire suivante. Tout dabord on dtermine la plus courte distance entre le noeud k + 1 et

3 de 4

Informatique / Recherche operationnelle / Plus court chemin (French)

nimporte quel autre noeud. Cela sexprime par:


D(k + 1,i)

min{d(xk + 1,xj) + D(j,i)} pour i = 1...k.

Cela veut dire que lon considre que pour aller de k + 1 i, on passe par un des noeuds de 1
k. On conserve la longueur du plus court chemin. De la mme manire, on dtermine la
plus courte distance entre nimporte quel noeud et le noeud k + 1.
D(i,k + 1)

min{D(i,j) + d(xj,xk + 1)} pour i = 1...k.

Enfin, on met jour la plus courte distance de chaque noeud de 1 k vers chaque noeud de 1
k car peut tre que le plus court chemin entre deux de ces noeuds passent par k + 1.
D(i,j)

min{D(i,j) , D(i,k + 1) + D(k + 1,j)} pour i, j = 1...k.

Algorithme
Titre: Dantzig
Entres: R = (X;U;d) un rseau.
Sorties: D une matrice contenant les plus courtes distances.
Variables intermdiaires: i, j et k des entiers.
Dbut
pour i
1 n faire
pour j
1 n faire
si i = j alors D(i,i)
sinon D(i,j)
+oo;
fin pour;
fin pour;

0;

pour k
1 n faire
pour i
1 k - 1 faire
D(k,i)
min{d(xk,xj) + D(j,i) | (xk;xj)
fin pour;
pour i
1 k - 1 faire
D(i,k)
min{D(i,j) + d(xj,xk) | (xj;xk)
fin pour;

U};

U};

pour i
1 k - 1 faire
pour j
1 k - 1 faire
D(i,j)
min{D(i,j) , D(i,k) + D(k,j)};
fin pour;
fin pour;
fin pour;

Fin

Copyright (c) 1999-2001 - Bruno Bachelet - bachelet@ifrance.com - http://bruno.bachelet.net


La permission est accorde de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License,
Version 1.1 ou toute version ultrieure publie par la fondation Free Software Foundation. Voir cette licence pour plus de dtails
(http://www.gnu.org).

4 de 4

Informatique / Recherche operationnelle / Ordonnancement (French)

6. ORDONNANCEMENT, RECHERCHE
DU PLUS LONG CHEMIN
PROBLEMES D' ORDONNANCEMENT
Les problmes dordonnancement sont apparus au dpart dans la planification de grands
projets. Le but tait de gagner du temps sur leur ralisation. De tels projets sont constitus de
nombreuses tapes, galement appeles tches. Des relations temporelles existent entre ces
dernires. Par exemple:
Une tape doit commencer une date prcise;

Un certain nombre de tches doivent tre termines pour pouvoir en dmarrer une
autre;

Deux tches ne peuvent tre ralises en mme temps (elles utilisent une mme
machine par exemple);

Chaque tche ncessite une certaine quantit de main doeuvre. Il faut donc viter,
chaque instant, de dpasser la capacit totale de main doeuvre disponible.

Toutes ces contraintes ne sont pas simples prendre en compte dans la rsolution du
problme. Ici, nous allons nous intresser uniquement aux deux premiers types de contraintes.
On cherchera dterminer une planification, un ordonnancement des tapes qui minimise le
temps total de ralisation du projet. A partir de cette planification, nous verrons que le temps
de certaines tapes peut ventuellement tre modifi sans entraner un retard du projet, alors
que dautres, les tches dites "critiques", retardent entirement le projet au moindre retard
local.

METHODE PERT
Il existe deux grandes mthodes pour rsoudre le problme nonc ci-dessus. Il y a la
mthode amricaine CPM (Critical Path Method) avec sa variante PERT (Program
Evaluation and Review Technique) et la mthode franaise MPM (Mthode des Potentiels).
Nous nous intresserons ici uniquement la mthode PERT. En voici les grandes tapes.

Reprsentation sous la forme dun graphe


Imaginons quun problme nous soit nonc sous la forme suivante. Un projet est dcompos
en 7 tapes (a, b ... g). La dure de chaque tape a t estime et certaines contraintes de
succession ont t tablies (cf. tableau ci-aprs). Il sagit maintenant de trouver la
planification, i.e. les dates de dmarrage de chaque tape, qui minimise le temps total de
ralisation du projet, et dindiquer dans ce cas les tapes critiques.

1 de 5

Informatique / Recherche operationnelle / Ordonnancement (French)

a
b
c
d
e
f
g

Dure Oprations antrieures


1
aucune
1
aucune
2
b
3
a
2
a
2
e
2
d,c

La mthode PERT prconise de reprsenter le problme sous la forme dun graphe. Les
noeuds vont reprsenter des vnements et les arcs des dures sparant ces vnements. Tous
dabord, on dfini deux sommets D et F qui reprsentent respectivement le dbut et la fin du
projet. Ensuite, chaque tape est dcompose en deux vnements (i.e. deux noeuds),
reprsentant le dbut et la fin de ltape, et une dure (i.e. un arc).
Etape a de dure 5:
La succession de deux tapes consistera ajouter une tape fictive de dure nulle pour
indiquer que lvnement de fin de la premire tape et lvnement de dbut de la seconde
apparaissent au mme instant.
a prcde b:
Dans ce cas prcis, on peut fusionner les noeuds fa et db pour simplifier le graphe.

Finalement, on obtiendra le graphe suivant.

Dtermination des dates au plus tt


Ensuite, pour chaque vnement on dtermine la date partir de laquelle il peut au plus tt se
produire. On considre la date de lvnement D comme tant 0. Ainsi, la date au plus tt
dun vnement, cest le temps minimum quil faut pour que toutes les tches antrieures

2 de 5

Informatique / Recherche operationnelle / Ordonnancement (French)

soient effectues. Toutes les tches antrieures sont effectues signifie quen suivant
nimporte quel chemin en partant de D, sa longueur (i.e. la dure totale des tches
parcourues) est infrieure la date de lvnement concern. Autrement dit, on recherche la
plus longue dure qui spare lvnement de D. Cela revient rechercher un plus long
chemin entre D et lvnement (cf. algorithme de Bellman ci-aprs). Dans notre exemple, on
obtient:

Finalement, on obtient pour chaque vnement la date laquelle il peut apparatre au plus tt.
Ce qui fournit la planification des tches qui aboutit la plus petite dure possible du projet.
Maintenant, partir de cette planification, on tente de dterminer les tches qui ne doivent
absolument pas tre retardes par rapport la planification obtenue sous peine de voir le
projet entirement retard.

Dtermination des dates au plus tard


De la mme manire, on va tenter de dterminer la date laquelle un vnement doit au plus
tard arriver pour que le projet se termine dans les temps prvus. Pour cela, connaissant la date
de fin dune tape, on est capable de dterminer la date au plus tard laquelle ltape doit
commencer, il sagit de la date de fin de ltape moins sa dure. Par exemple, lvnement F
doit se produire la date 6, cela signifie que la tche f de dure 2 doit dmarrer au plus tard
la date 4 = 6 - 2. De mme, quand un vnement est le point de dpart de plusieurs tapes, on
prendra tout naturellement la date au plus tard la plus petite parmi les dates au plus tard de
chaque tape. On saperoit que cela revient rechercher la dure la plus longue (i.e. le
chemin le plus long) qui spare un vnement de lvnement de fin F. Cette dure est
ensuite soustraite la dure totale du projet pour fournir la date au plus tard de chaque
vnement. Dans notre exemple, on obtient:

3 de 5

Informatique / Recherche operationnelle / Ordonnancement (French)

Analyse et identification des tches critiques


Une fois la date au plus tt et la date au plus tard de chaque vnement trouves, on peut
analyser la situation. La date au plus tt fournie la date planifie pour chaque vnement.
Ensuite, la date au plus tard indique de combien un vnement peut tre retard sans retarder
le projet complet. Cela identifie les tapes critiques. Il est noter que sur le plus long chemin
entre D et F, toutes les tapes sont critiques. Ici, les tapes critiques sont a, d et g. Une tape
est critique si la date de dbut et la date de fin est critique et si la diffrence entre ces dates
est gale la dure de la tche. En dautres termes, une tche est critique si les intervalles des
dates de dbut et de fin sont tels quils ne permettent pas une augmentation de la dure de la
tche.

ALGORITHME DE BELLMAN
La dtermination des dates au plus tt et des dates au plus tard est base sur la recherche dun
plus long chemin. Comme le graphe considr ne comporte pas de circuit, un algorithme
comme celui de Bellman, plus simple que celui de Dijkstra, est trs bien adapt. Il est noter
que la mthode de Bellman fonctionne aussi bien pour un plus court chemin que pour un plus
long chemin, contrairement celle de Dijkstra qui est valide uniquement pour les plus courts
chemins.
Lide de lalgorithme de Bellman pour la recherche de plus court chemin (ou de plus long
chemin) est tout fait semblable celle de Dijkstra. La diffrence rside dans le choix du
noeud chaque nouvelle itration. Dans lalgorithme de Dijkstra, cest le noeud avec la plus
courte distance qui est choisi alors que dans celui de Bellman, on choisit un noeud dont tous
les prdcesseurs ont dj t traits, do la ncessit de ne pas avoir de circuit. Donc, sans
plus de dtail, voici lalgorithme de Bellman pour la recherche dun plus court chemin.

Algorithme
Titre: Bellman
Entres: R = (X;U;d) un rseau, s un sommet.
Sorties: p() une fonction indiquant la plus courte distance qui spare un point de s, pred() une
fonction indiquant par quel arc on arrive un point si on emprunte le plus court chemin.
Variables intermdiaires: S et S deux sous-ensembles de sommets, x et y deux noeuds, sortie
un boolen.
Dbut
S
S

{s};
X - {s};

pour tout x
X faire
p(x)
+oo;
pred(x)
nil;
fin pour;
p(s)
sortie

0;

tant que
S
S

faux;
x
S | tous ses prdcesseurs
{x};

S faire

4 de 5

Informatique / Recherche operationnelle / Ordonnancement (French)


S

S - {x};

pour chaque arc u = (y;x) | y


S faire
si p(x) > p(y) + d(u) alors
[Pour le plus long chemin, remplacer par p(x) < p(y) + d(u).]
p(x)
p(y) + d(u);
pred(x)
y;
fin si;
fin pour;
fin tant que;

Fin

Copyright (c) 1999-2001 - Bruno Bachelet - bachelet@ifrance.com - http://bruno.bachelet.net


La permission est accorde de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License,
Version 1.1 ou toute version ultrieure publie par la fondation Free Software Foundation. Voir cette licence pour plus de dtails
(http://www.gnu.org).

5 de 5

Informatique / Recherche operationnelle / Flot maximum (French)

7. RECHERCHE DU FLOT MAXIMUM


DEFINITIONS
Rseau de transport
Un rseau de transport est un graphe sans boucle, o chaque arc est associ un nombre c
(u) 0, appel "capacit de larc u". En outre, un tel rseau vrifie les hypothses suivantes.
Il existe un seul noeud s qui na pas de prdcesseurs, tous les autres en ont au moins
un. Ce noeud est appel lentre du rseau, ou la source.


Il existe galement un seul noeud p qui na pas de successeurs, tous les autres en ont au
moins un. Ce noeud est appel la sortie du rseau, ou le puits.

Flot
Un flot f dans un rseau de transport est une fonction qui associe chaque arc u une quantit
f(u) qui reprsente la quantit de flot qui passe par cet arc, en provenance de la source et en
destination du puits.
Un flot doit respecter la rgle suivante: la somme des quantits de flot sur les arcs entrants
dans un noeud (autre que s et p) doit tre gale la somme des quantits de flot sur les arcs
sortants de ce mme noeud. En dautres termes, la quantit totale de flot qui entre dans un
noeud est gale la quantit totale de flot qui en sort.

Flot compatible
Un flot f est compatible avec un rseau si pour tout arc u, 0 f(u) c(u). Autrement dit, pour
chaque arc, le flot qui le traverse ne doit pas dpasser la capacit de larc.

Flot complet
Un flot f est complet si pour tout chemin allant de la source au puits, il y a au moins un arc
satur, i.e. le flot qui le traverse est gal la capacit de larc.

PROBLEME DU FLOT MAXIMUM


Connaissant les capacits des arcs dun rseau de transport, le problme du flot maximum

1 de 8

Informatique / Recherche operationnelle / Flot maximum (French)

consiste trouver quelle est la quantit maximum de flot qui peut circuler de la source au
puits. Lalgorithme le plus connu pour rsoudre ce problme est celui de Ford et Fulkerson.
Nous verrons deux approches pour cette mthode. La premire est base sur la recherche
dune chane dans le rseau alors que la seconde construit un graphe "dcart" dans lequel on
recherche un chemin.

ALGORITHME DE FORD-FULKERSON,
CHAINE AUGMENTANTE
On part dun flot compatible. Le plus vident est le flot nul, i.e. pour tout arc u, f(u) = 0.
Ensuite, on cherche une chane reliant la source au puits telle que son flot peut tre augment.
Si on nen trouve pas, le problme est rsolu. Sinon, on augmente le flot sur cette chane.
Ensuite, on recommence chercher une chane augmentante et ainsi de suite. Une chane
augmentante, i.e. une chane pour laquelle le flot peut tre augment est une chane pour
laquelle les arcs dans le sens direct nont pas atteint leur limite maximum et les arcs en sens
indirect ont un flot non nul qui les traverse. Laugmentation de flot maximum pour une
chane est le minimum des carts entre le flot courant et le flot maximal pour les arcs directs
ou le flot courant pour les arcs indirects. Autrement dit, une chane C est augmentante si:
pour tout arc u direct, f(u) < c(u),


pour tout arc u indirect, f(u) > 0.




Le flot sur cette chane C peut tre augment de:


min({c(u) - f(u) | u

C et u sens direct}

{f(u) | u

C et u sens indirect})

Exemple
Voici une chane augmentante de A E faisant partie dun rseau de transport.

Dans cette chane, on peut augmenter le flot de:


3 entre A et B,


2 entre B et C,


1 entre C et D,


5 entre D et E.

On augmentera donc de 1 le flot dans cette chane. Ce qui signifie:

2 de 8

Informatique / Recherche operationnelle / Flot maximum (French)

3 de 8

augmenter de 1 le flot entre A et B,




augmenter de 1 le flot entre B et C,




diminuer de 1 le flot entre D et C,




augmenter de 1 le flot entre D et E.




On remarque que pour les arcs en sens inverse, augmenter le flot signifie rduire le flot dans
le sens direct. Entre D et C, le flot est rduit de 1 pour permettre larrive dune unit de flot
sur C par B tout en conservant lquilibre du noeud. D ayant une unit de trop, son quilibre
nest pas respect. Cest pourquoi une unit de flot supplmentaire circule entre D et E.

Algorithme principal
Titre: FordFulkerson1
Entres: R = (X;U;c) un rseau, s et p deux sommets.
Sorties: f() une fonction indiquant le flot circulant travers chaque arc.
Variables intermdiaires: C un sous-ensemble darcs, u un arc, m et a deux rels.
Dbut
pour tout arc u

U faire f(u)

0;

tant que
une chane C augmentante entre s et p
m
+oo;
pour tout u
C faire
si u en sens direct alors a
si a < m alors m
a;
fin pour;
pour tout u
C faire
si u en sens direct alors f(u)
fin pour;
fin tant que;

R faire

c(u) - f(u) sinon a

f(u) + m sinon f(u)

f(u);

f(u) - m;

Fin

Algorithme de recherche dune chane augmentante


Lide est la mme que pour la recherche dun chemin (cf. mthode avec le graphe dcart).
On parcours le rseau jusqu visiter le noeud p. Cependant, on utilisera un arc pour se
dplacer:
sil est direct et quil na pas atteint son flot maximum,


ou sil est indirect et quil na pas un flot nul.

Algorithme

Informatique / Recherche operationnelle / Flot maximum (French)

Titre: RechercherChaineAugmentante
Entres: R = (X;U;c) un rseau, s et p deux sommets, f() le flot courant.
Sorties: pred() une fonction indiquant par quel arc on arrive un noeud donn partir de s.
Variables intermdiaires: X un sous-ensemble de noeuds, accessible() une fonction qui
indique si un noeud est accessible partir de s, x et y deux noeuds.
Dbut
X

{s};

pour tout x
X faire
accessible(x)
faux;
pred(x)
nil;
fin pour;
marqu(s)

vrai;

tant que X
et non accessible(p) faire
choisir x
X;
X
X - {x};
pour tout u = (x;y)
U faire
si non accessible(y) et f(u) < c(u) alors
X
X
{y};
pred(y)
x;
accessible(y)
vrai;
fin si;
fin pour;
pour tout u = (y;x)
U faire
si non accessible(y) et f(u) > 0 alors
X
X
{y};
pred(y)
x;
accessible(y)
vrai;
fin si;
fin tant que;

Fin

ALGORITHME DE FORD-FULKERSON,
GRAPHE D' ECART
Comme pour la mthode prcdente, on part dun flot compatible. Ensuite, on construit un
graphe dcart partir de ce flot. Ce graphe dcart reprsente les modifications de flot
possibles sur chaque arc. Sur ce graphe, les noeuds ont exactement la mme signification que
dans le rseau de transport. Par contre, un arc indiquera de combien il est possible
daugmenter le flot entre deux noeuds. Ainsi, pour un arc u = (x;y), on crera dans le graphe
dcart:
un arc de x y de capacit c((x;y)) = c(u) - f(u) si c(u)


un arc de y x de capacit c((y;x)) = f(u) si f(u)

f(u),

0.

Ensuite, dans ce graphe dcart, on cherchera un chemin de la source au puits. Si on nen


trouve pas, le problme est rsolu. Sinon, on augmente le flot sur ce chemin, qui correspond
en fait une chane si lon se ramne la premire mthode. Le flot sera augment de la plus
petite capacit des arcs du chemin. Autrement dit, le chemin C sera augment de:

4 de 8

Informatique / Recherche operationnelle / Flot maximum (French)

min{c(u) | u

C}

Exemple
Voici un rseau transport dans lequel circule un flot.

Le graphe dcart correspondant est le suivant.

(A,B,C,D,F,G) est un chemin pour aller de A G. On peut augmenter le flot de:


2 entre A et B,


3 entre B et C,


1 entre C et D,


4 entre D et F,


2 entre F et G.


On augmentera donc le flot de 1 sur ce chemin, ce qui signifie:


augmenter de 1 entre A et B,


rduire de 1 entre C et B,

5 de 8

Informatique / Recherche operationnelle / Flot maximum (French)

augmenter de 1 entre C et D,


augmenter de 1 entre D et F,


augmenter de 1 entre F et G.

On remarque que le chemin (A,B,C,D,F,G) trouv correspondait la chane augmentante


(A,B,C,D,F,G).

Algorithme principal
Titre: FordFulkerson2
Entres: R = (X;U;c) un rseau, s et p deux sommets.
Sorties: f() une fonction indiquant le flot circulant travers chaque arc.
Variables intermdiaires: G = (X;U) un graphe, c' ()une fonction indiquant la capacit dun
arc de G, a() une fonction indiquant quel arc de R correspond un arc de G, C un sousensemble darcs, u un arc, m un rel.
Dbut
pour tout arc u
U faire f(u)
construire le graphe dcart G;

0;

tant que
un chemin C entre s et p
G faire
m
+oo;
pour tout u
C faire si c(u) < m alors m
pour tout u
C faire
si a(u) est direct alors f(a(u))
sinon f(a(u))
f(a(u)) - m;
fin pour;

c(u);

f(a(u)) + m;

6 de 8

Informatique / Recherche operationnelle / Flot maximum (French)

construire le graphe dcart G;


fin tant que;

Fin

Construction du graphe dcart


Pour construire le graphe dcart G, il suffit de parcourir tous les arcs du rseau R et de crer
pour chacun un ou deux arcs dans G selon la mthode explique prcdemment.

Algorithme
Titre: ConstruireGrapheEcart
Entres: R = (X;U;c) un rseau, f() le flot courant sur R.
Sorties: G = (X;U) le graphe dcart, c() une fonction indiquant la capacit dun arc de G, a
() une fonction indiquant quel arc de R correspond un arc de G.
Variables intermdiaires: u un arc, x et y deux noeuds, m un rel.
Dbut
pour tout u = (x;y)
U faire
si f(u) > 0 alors
U
U
{(y;x)};
c((y;x))
f(u);
a((y;x))
u;
fin si;
si f(u) < c(u) alors
U
U
{(x;y)};
c'((x;y))
c(u) - f(u);
a((x;y))
u;
fin si;
fin pour;

Fin

Recherche dun chemin


Pour rechercher un chemin entre s et p, il suffit de parcourir le graphe dans le sens des arcs et
de marquer les noeuds que lon visite. On ne visitera pas deux fois un mme noeud. Pour
effectuer ce parcours, on dispose dun ensemble X des noeuds restant visiter. Au dpart il
ny a que s. Ensuite, chaque itration, on prend un noeud dans X, on le marque pour viter
de le visiter nouveau, on lenlve de X et on met ses successeurs dans X, seulement sils
ne sont pas dj marqus. On sarrte quand on a visit p.

Algorithme
Titre: RechercherChemin
Entres: R = (X;U;c) un rseau, s et p deux sommets, f() le flot courant.
Sorties: pred() une fonction indiquant par quel arc on arrive un noeud donn partir de s.
Variables intermdiaires: X un sous-ensemble de noeuds, accessible() une fonction qui
indique si un noeud est accessible partir de s.

7 de 8

Informatique / Recherche operationnelle / Flot maximum (French)

Dbut
X

{s};

pour tout x
X faire
accessible(x)
faux;
pred(x)
nil;
fin pour;
accessible(s)

vrai;

tant que X
et non accessible(p) faire
choisir x
X;
X
X - {x};
pour tout u = (x;y)
U faire
si non accessible(y) alors
X
X
{y};
pred(y)
x;
accessible(y)
vrai;
fin si;
fin pour;
fin tant que;

Fin

Copyright (c) 1999-2001 - Bruno Bachelet - bachelet@ifrance.com - http://bruno.bachelet.net


La permission est accorde de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License,
Version 1.1 ou toute version ultrieure publie par la fondation Free Software Foundation. Voir cette licence pour plus de dtails
(http://www.gnu.org).

8 de 8

Informatique / Recherche operationnelle / Programmation lineaire (French)

8. PROGRAMMATION LINEAIRE
PRESENTATION
La programmation linaire est un outil trs puissant de la recherche oprationnelle. Cest un
outil gnrique qui peut rsoudre un grand nombre de problmes. En effet, une fois un
problme modlis sous la forme dquations linaires, des mthodes assurent la rsolution
du problme de manire exacte. On distingue dans la programmation linaire, la
programmation linaire en nombres rels, pour laquelle les variables des quations sont dans
IR+ et la programmation en nombres entiers, pour laquelle les variables sont dans IN. Bien
entendu, il est possible davoir les deux en mme temps. Cependant, la rsolution dun
problme avec des variables entires est nettement plus complique quun problme en
nombres rels.
Une des mthodes les plus connues pour rsoudre des programmes linaires en nombre rels
est la mthode du Simplex. En thorie, elle a une complexit non polynomiale et est donc
suppose peu efficace. Cependant, en pratique, il savre au contraire quil sagit dune
bonne mthode.
De plus, de nombreux logiciels intgrant cette mthode existent. Certains sont utiliss via une
interface graphique alors que dautres permettent une communication par fichiers ce qui
autorise l'u tilisation du programme de mani
re cache dans le dveloppement dun autre
logiciel.

Programme linaire
La programmation linaire permet la rsolution dun programme linaire. Un programme
linaire est un systme dquations ou dinquations appeles "contraintes" qui sont linaires
(cest--dire que les variables ne sont pas leves au carr, ne servent pas dexposant, ne sont
pas multiplies entre elles...). Et partir de ces contraintes, on doit optimiser une fonction
galement linaire appele objectif.

Exemples
Contraintes linaires:
5x1 - 2x2 + 4x3 = 8
x1 + 3x2 + 8x3 25
9x1 + 6x2 - 3x3 17
Contraintes non linaires:
5x12 + 2x2 + 4x3 = 8

1 de 8

Informatique / Recherche operationnelle / Programmation lineaire (French)

x1x2 + 8x3

25

Objectifs:
max: z = 3x1 - 2x2 + 8x3
min: z = -3x1 + x3

(signifie maximiser z)
(signifie minimiser z)

Forme canonique
Pour rsoudre un programme linaire de manire automatique, il faut quil ait une certaine
forme que lon appelle "canonique". Dans ce cours, on a choisi la forme canonique suivante:
un programme linaire na que des contraintes dinfriorit et lon tente de maximiser la
fonction objectif. De plus toutes les variables sont positives.

Exemple
Le programme linaire suivant est sous forme canonique.
max: z = 3x1 - 2x2 + 8x3
sous:
5x1 - 2x2 + 4x3 8
x1 + 3x2 + 8x3 25
9x1 + 6x2 - 3x3 17
x1 , x2 , x3 0

Transformations
Tout programme linaire quelconque peut tre ramen une forme canonique. Voici
quelques exemples de transformations possibles.
Si une variable x1 est ngative, on la remplace par une variable positive x1 = -x1. Par
exemple:
max: z = 3x1 - 2x2 + 8x3

max: z = 3x1 - 2x2 - 8x3

sous:
5x1 - 2x2 + 4x3 8
x1 + 3x2 + 8x3 25
9x1 + 6x2 - 3x3 17
x1 , x2 0 et x3 0

sous:
5x1 - 2x2 - 4x3 8
x1 + 3x2 - 8x3 25
9x1 + 6x2 + 3x3 17
x1 , x2 , x3 0

Si une variable na pas de contrainte de signe, on la remplace par deux variables positives x1

2 de 8

Informatique / Recherche operationnelle / Programmation lineaire (French)

et x1 telles que x1 = x1 - x1. Par exemple:


max: z = 3x1 - 2x2 + 8x3

max: z = 3x1 - 2x2 + 8x3 - 8x3

sous:
5x1 - 2x2 + 4x3 8
x1 + 3x2 + 8x3 25
9x1 + 6x2 - 3x3 17
x1 , x2 0

sous:
5x1 - 2x2 + 4x3 - 4x3 8
x1 + 3x2 + 8x3 - 8x3 25
9x1 + 6x2 - 3x3 + 3x3 17
x1 , x2 , x3 , x3 0

Si le programme linaire a une contrainte de supriorit, on la remplace par une contrainte


dinfriorit en inversant le signe des constantes. Par exemple:
max: z = 3x1 - 2x2 + 8x3

max: z = 3x1- 2x2 + 8x3

sous:
5x1 - 2x2 + 4x3 8
x1 + 3x2 + 8x3 25
9x1 + 6x2 - 3x3 17
x1 , x2 , x3 0

sous:
5x1 - 2x2 + 4x3 8
x1 + 3x2 + 8x3 25
-9x1 - 6x2 + 3x3 -17
x1 , x2 , x3 0

Si le programme linaire a une contrainte dgalit, on la remplace par deux contraintes


quivalentes, lune dinfriorit, lautre de supriorit. Les variables du programme doivent
satisfaire ces deux contraintes, ce qui revient alors lgalit de dpart. Par exemple:
max: z = 3x1 - 2x2 + 8x3
sous:
5x1 - 2x2 + 4x3 8
x1 + 3x2 + 8x3 25
9x1 + 6x2 - 3x3 = 17
x1 , x2 , x3 0
max: z = 3x1 - 2x2 + 8x3
sous:
5x1 - 2x2 + 4x3 8
x1 + 3x2 + 8x3 25
9x1 + 6x2 - 3x3 17
-9x1 - 6x2 + 3x3 -17
x1 , x2 , x3 0

Application

max: z = 3x1 - 2x2 + 8x3


sous:
5x1 - 2x2 + 4x3 8
x1 + 3x2+ 8x3 25
9x1 + 6x2 - 3x3 17
9x1 + 6x2 - 3x3 17
x1 , x2 , x3 0

3 de 8

Informatique / Recherche operationnelle / Programmation lineaire (French)

Une entreprise fabrique 2 produits X et Y. Pour sa conception, chaque produit fini ncessite 3
produits intermdiaires A, B et C. Pour fabriquer un produit X, on a besoin de 2 produits A,
de 2 produits B et de 1 produit C. De mme, pour fabriquer un produit Y, on a besoin de 3
produits A, de 1 produit B et de 3 produits C. En outre, lentreprise dispose dune quantit
limite de produits A, B et C. Elle a 180 produits A, 120 produits B et 150 produits C.
Sachant que le prix de revient de X est 3 francs et que celui de Y est de 4 francs, combien de
produits X et Y faut-il fabriquer pour maximiser le profit ?
On modlise ce problme par un programme linaire. Soit x et y les quantits de produits X
et Y fabriqus.
La quantit totale de produits A utilise est 2x + 3y. Cette quantit ne doit pas dpasser 180,
do la premire contrainte.
2x + 3y

180

De mme, pour les produits B et C, on obtient:


2x + y
x + 3y

120
150

Bien entendu, les quantits x et y sont positives.


x,y

Enfin, on tente de maximiser le profit qui est le total des bnfices sur la vente des produits X
plus celui des produits Y.
max: 3x + 4y
Le programme linaire est donc le suivant.
max: z = 3x + 4y
sous:
2x + 3y 180
2x + y 120
x + 3y 150
x,y 0

(A)
(B)
(C)

REPRESENTATION GRAPHIQUE
On peut reprsenter le problme dans un espace deux dimensions.

4 de 8

Informatique / Recherche operationnelle / Programmation lineaire (French)

Les solutions admissibles sont reprsentes par la zone grise (a,b,c,d,e). Ce sont les
solutions qui satisfont les contraintes. Considrons maintenant la fonction z = 3x + 4y. Pour
z = 120, on a une droite D1, 3x + 4y = 120, qui reprsente les solutions pour lesquelles le
profit vaut 120. Si z = 180, on a une autre droite D2, 3x + 4y = 180, qui reprsente les
solutions pour lesquelles le profit vaut 180. On remarque que D2 est parallle D1 et on
saperoit facilement quen dplaant la droite vers le haut on augmente le profit z. Donc
pour rsoudre graphiquement le problme, on va faire "glisser" la droite vers le haut jusqu
ce quelle ait un minimum de points communs avec la surface grise. Le point restant ici est
d. Il reprsente la solution pour laquelle le profit est maximum. En effet, si on prend un profit
plus important, reprsent par exemple par D4, on saperoit que toutes les solutions sont en
dehors de la surface grise. Donc la solution du problme est de produire 45 produits X et 30
produits Y pour obtenir le profit maximum de z = 3x + 4y = 255 francs.

5 de 8

Informatique / Recherche operationnelle / Programmation lineaire (French)

LA METHODE DU SIMPLEX
Globalement, la mthode du Simplex va se dplacer le long de la forme (a,b,c,d,e), de
sommet en sommet jusqu trouver le meilleur point. Pour essayer de mieux comprendre
comment fonctionne cette mthode, considrons le problme de production prcdent. Dans
un premier temps, les contraintes sont ramenes des galits en introduisant de nouvelles
variables de la manire suivante.
max: z = 3x + 4y
sous:
2x + 3y = 180 - u
2x + y = 120 - v
x + 3y = 150 - w
x,y,u,v,w 0

(A)
(B)
(C)

Ensuite, on va se placer sur le point a = (0;0) qui est une solution admissible du problme.
Dans un cas plus gnral, il faut noter que trouver une solution admissible pour dmarrer la
mthode du Simplex nest pas forcment vident. On a alors:
x=0
y=0

u = 180
v = 120
w = 150

En regardant z = 3x + 4y, on saperoit que la moindre augmentation de x ou de y augmente

6 de 8

Informatique / Recherche operationnelle / Programmation lineaire (French)

le profit z. Donc on va augmenter lune des deux variables au maximum. Par exemple,
prenons y et utilisons les contraintes pour exprimer y en fonction de toutes les autres
variables.
y = 60 - 1/3u - 2/3x
y = 120 - v - 2x
y = 50 - 1/3w - 1/3x

y
y
y

60
120
50

(A)
(B)
(C)

Comme toutes les variables sont positives, on peut en dduire, partir de chaque contrainte,
une borne maximum pour y (cf. ci-dessus). y doit satisfaire les 3 contraintes. Ici la plus
grande valeur de y possible est 50. A laide de la contrainte C, on remarque que x doit rester
0 et que w est forc 0. Maintenant, les variables nulles sont x et w. Quant aux autres
variables, on sarrange pour les exprimer uniquement avec x et w de manire obtenir leur
valeur. On fait de mme pour le profit z.
y = 50 - 1/3x - 1/3w
u = 180 - 2x - 3y = 30 - x + w
v = 120 - 2x - y = 70 - 5/3x + 1/3w

= 50
= 30
= 70

x
w

=0
=0

z = 3x + 4y = 200 + 5/3x - 4/3w

= 200

(C)
(A)
(B)

On se trouve donc au point b = (x;y) = (0;50) avec un profit z = 200.


Maintenant, on reprend le mme raisonnement que pour le point a = (0;0). Le profit est
exprim par z = 200 + 5/3x - 4/3w. En augmentant x, on augmente le profit. On regarde de
combien on peut augmenter x.
x = 30 - u + w
x = 3/5 (70 - v + 1/3w) = 42 - 3/5v + 1/5w
x = 3 (50 - y - 1/3w) = 150 - 3y - w

x
x
x

30
42
150

(A)
(B)
(C)

Ici, on prendra x = 30, la valeur maximum quil peut atteindre. Les variables qui sont nulles
sont u et w daprs la contrainte A. On calcule les nouvelles valeurs des autres variables.
x = 30 - u + w
v = 70 - 5/3 (30 - u + w) + 1/3w = 20 + 5/3u - 4/3w
y = 50 - 1/3 (30 - u + w) - 1/3w = 40 + 1/3u - 2/3w

= 30
= 20
= 40

u
w

=0
=0

z = 200 + 5/3 (30 - u + w) - 4/3w = 250 - 5/3u + 1/3w

= 250

(A)
(B)
(C)

On se trouve donc au point c = (x;y) = (30;40) avec un profit z = 250.


On recommence encore une fois le mme raisonnement. Le profit est exprim par z = 250 5/3u + 1/3w. En augmentant w, on augmente le profit. On regarde de combien on peut
augmenter w.
w = -30 + x + u
w = 3/4 (20 + 5/3u - v) = 15 + 5/4u - 3/4v

w
w

-30
15

(A)
(B)

7 de 8

Informatique / Recherche operationnelle / Programmation lineaire (French)

w = 3/2 (40 - y + 1/3u) = 60 - 3/2y + 1/2u

60

8 de 8

(C)

Ici, on prendra w = 15, la valeur maximum quil peut atteindre. Les variables qui sont nulles
sont u et v daprs la contrainte B. On calcule les nouvelles valeurs des autres variables.
w = 15 + 5/4u - 3/4v
x = 30 - u + (15 + 5/4u - 3/4v) = 45 + 1/4u - 3/4v
y = 40 + 1/3u - 2/3 (15 + 5/4u - 3/4v) = 30 - 1/2u + 1/2v

= 15
= 45
= 30

u
v

=0
=0

z = 250 - 5/3u + 1/3 (15 + 5/4u - 3/4v) = 255 - 5/4u - 1/4v

= 255

(B)
(A)
(C)

On se trouve donc au point d = (x;y) = (45;30) avec un profit z = 255.


On reprend encore une fois le mme raisonnement. Le profit est exprim par z = 255 - 5/4u 1/4v. Ni u, ni v ne permettent daugmenter le profit z. Cela signifie que lon a obtenu le profit
maximum. La solution recherche est alors reprsente par d le point courant. On aboutit
bien la mme conclusion que par la reprsentation graphique. Il faut produire 45 produits X
et 30 produits Y pour obtenir un profit maximum de 255 francs.

Copyright (c) 1999-2001 - Bruno Bachelet - bachelet@ifrance.com - http://bruno.bachelet.net


La permission est accorde de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License,
Version 1.1 ou toute version ultrieure publie par la fondation Free Software Foundation. Voir cette licence pour plus de dtails
(http://www.gnu.org).

Vous aimerez peut-être aussi