recherche opérationnelle & gestion des projets

88
Moulay El Mehdi Falloul Une introduction à la recherche opérationnelle et au management des projets

Upload: professeur-falloul

Post on 11-Feb-2017

67 views

Category:

Engineering


9 download

TRANSCRIPT

Page 1: Recherche opérationnelle & gestion des projets

1

Moulay El Mehdi Falloul

Une introduction à la recherche opérationnelle et au management des projets

Page 2: Recherche opérationnelle & gestion des projets

2

Page 3: Recherche opérationnelle & gestion des projets

3

Introduction

La Recherche opérationnelle (RO) est une discipline qui traite de l’application des méthodes d’analyse avancées pour aider à prendre de meilleures décisions. Employant des techniques des sciences mathématiques, tels que la modélisation mathématique, l’analyse statistique, et l’optimisation mathématique, la recherche opérationnelle cherche des solutions optimales ou quasi optimale à des problèmes complexes de prise de décision.

La Recherche opérationnelle (RO) englobe un large éventail de problèmes techniques et des méthodes appliquées dans la poursuite de l’amélioration du processus décisionnel et d’efficacité, tels que la simulation, l’optimisation mathématique, la théorie des files d’attente et les processus stochastiques, les chaines de Markov, les méthodes économétriques, l’analyse des données, les réseaux de neurones, les systèmes experts, l’analyse décisionnelle et le processus de hiérarchie analytique. La quasi-totalité de ces techniques impliquent la construction de modèles mathématiques qui tentent de décrire le système.

Les principales sous-disciplines moderne de la recherche opérationnelle, tels que définis dans la revue recherche opérationnelle, sont entre autres : les technologies de l’informatique et de l’information, l’économie et la finance appliquée, le génie industriel, le management des projets, la gestion de la chaîne d’approvisionnement, la simulation, le transport et la logistique.

La Gestion de projet est le processus et l’activité de planification, d’organisation, de motivation, et de contrôle des ressources, des procédures et des protocoles pour atteindre des objectifs spécifiques dans les

Page 4: Recherche opérationnelle & gestion des projets

4

problèmes scientifiques ou quotidiennes. Un projet est un effort temporaire conçu pour produire un produit ou un marché (construction d’un bâtiment, conception d’un logiciel, etc) qui est généralement de durée limitée, et souvent limité par le financement suivant un cahier de charge spécifique. La gestion de projets utilise très souvent les techniques de la recherche opérationnelle dans les différents stades des projets.

Cet ouvrage, constituant une introduction aux disciplines de la recherche opérationnelle et du management des projets, se divise en trois chapitres, le premier chapitre est consacré la programmation linéaire et les chaines de Markov, le deuxième chapitre porte sur les techniques usuels de management des projets, et le troisième chapitre est consacré à la théorie des graphes.

Page 5: Recherche opérationnelle & gestion des projets

5

Chapitre I L’optimisation linéaire

I. Une introduction à l’optimisation linéaire

La programmation linéaire est un outil très important de la recherche opérationnelle. C’est un outil générique qui peut résoudre un grand nombre de problème de l’ingénierie de gestion. En effet, une fois un problème modélisé sous la forme d’équations linéaires, des méthodes assurent la résolution du problème de manière exacte. Les données et informations nécessaires à la résolution du problème sont supposées et connues d’une manière certaine. Ce qui place la programmation linéaire dans la famille d’aide à la décision en environnement certain. Les méthodes d’optimisation mathématiques sont aujourd’hui couramment utilisées dans le domaine des techniques industrielles et de l’ingénierie de gestion. Ces méthodes se caractérisent par le fait qu’elles permettent de tenir compte de contraintes données sous la forme d’inégalités. Généralement, on appelle programmation mathématique, la recherche de l’optimum d’une fonction de plusieurs variables liées entre elles par des contraintes liées entre elles par des contraintes sous forme d’égalités ou d’inégalités.

1. LES BASES MATHEMATIQUES DE LA PROGRAMMATION LINEAIRE

La Programmation linéaire se préoccupe de résoudre un problème mathématique, à savoir maximiser ou minimiser une fonction linéaire de n variables (appelés la fonction objective)

Avec m contraintes linéaires, qui est :

Page 6: Recherche opérationnelle & gestion des projets

6

max minimiser ou imisernnxcxcxcxcz ++++= LL

332211

Sous contraintes

1,133,122,111,1 bxaxaxaxa

nn≤>++++ LL

2,233,222,211,2 bxaxaxaxa

nn≤>++++ LL

3,333,322,311,3 bxaxaxaxa

nn≤>++++ LL

………………………………………≤> … ……………………………………… ≤> …

mnnmmmmbxaxaxaxa

,33,22,11,≤>++++ LL

Et les contraintes triviales ,01≥x ,0

2≥x ,0

3≥x …. .0≥

nx

En termes matricielles, un modèle de programmation linéaire est :

max minimiser ou imiser xczT r

=

Tel que bxA

r

r

≥< 0≥xv

Où A est une matrice nm×

⎟⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜⎜

=

nmmm

n

n

n

aaa

aaa

aaa

aaa

A

,2,1,

,32,31,3

,22,21,2

,12,111

K

KKKK

K

K

K

⎟⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜⎜

=

mb

b

b

b

b

K

r

3

2

1

,

⎟⎟⎟⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜⎜⎜⎜

=

nx

x

x

x

x

K

K

r 3

2

1

et

⎟⎟⎟⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜⎜⎜⎜

=

nc

c

c

c

c

K

K

r 3

2

1

Les coefficients1c ,

2c ,

3c ,…,

nc sont appelés coefficients de coût.

La programmation linéaire est une technique mathématique largement utilisée, conçue pour aider les gestionnaires et les ingénieurs dans la planification et la prise de décisions relatives à l’affectation des ressources.

La programmation linéaire est si importante, parce que tant de problèmes différents dans de nombreux domaines diversifiés sont modélisé mathématiquement par le problème mathématique de programmation linéaire, à savoir :

max minimiser ou imiser xczT r

= Tel que :

bxA

r

r

≥< 0≥xv .

Page 7: Recherche opérationnelle & gestion des projets

7

En effet la solution des problèmes de programmation linéaire dans l’industrie, gouvernements et établissements universitaires partout dans le monde représente l’un de la plus grande quantité de temps de calcul en calcul scientifique (par opposition au traitement des données).

Voici quelques-uns des principaux domaines où la programmation linéaire a été largement et avec succès appliqué :

(1) Optimisation d’une raffinerie de pétrole. (2) Répartition de la production. (4) Problèmes de distribution. (5) Planification financière et économique.

Vue d’ensemble

Programmation quadratique Programmation linéaire

22

2

2

11,)(

nnxxxxxf

Min

MaxLL ++=

⎭⎬⎫

⎩⎨⎧

nnnxcxcxcxxf

Min

Max+++=

⎭⎬⎫

⎩⎨⎧

LL

22111)(

Fonction objective linéaire fonction objective non linéaire

Sous réserve de m contraint linéaires sous réserve de m contraintes linéaire

1,122,111,1bxaxaxa

nn≤≥=+++ L

2,222,211,2bxaxaxa

nn≤≥=+++ L

1,122,111,1bxaxaxa

nn≤≥=+++ L

2,222,211,2bxaxaxa

nn≤≥=+++ L

------------------------------------------ --------------------------------------

mnnmmmbxaxaxa ≤≥=+++

,22,11,L

Programmation géométrique

),,,,(321 n

xxxxfMin

MaxLL

⎭⎬⎫

⎩⎨⎧ – fonction objective non linéaire

Sous réserve de m contraintes non linéaire

{

{ 0),,,,(

0),,,,(

3212

3211

=

=

n

n

xxxxg

xxxxg

LL

LL

------------------------------ ------------------------------ {

{ 0),,,,(

0),,,,(

321

3211

=

=−

nm

nm

xxxxg

xxxxg

LL

LL

Page 8: Recherche opérationnelle & gestion des projets

8

Programmation mathématique ou Non linéaire Trouver le vecteur t

r

tel que : Min fonction )(

0tgr

Tel que 0,,0,0

11>>>

nttt L

et 1)(1

≤tgr

, 1)(2

≤tgr

----------

et )()(1

tPtgk

j

jk

rr

∑=

= et ∏=

=

j

i

G

ijjji

tctP

1

,)(r

.

2. QUELQUES DEFINITIONS IMPORTANTES

La forme générale d’un modèle de programmation linéaire se compose de : (i) un objectif à maximiser ou minimiser certains z quantité, appelée la fonction objective, qui s’exprime comme une combinaison linéaire des variables.

(ii) des contraintes non négligeables sur les variables qui sont des inégalités ou équation mettant en cause des combinaisons linéaires des variables.

(iii) des contraintes de positivité sur les variables pour s’assurer que chacun d’eux est positive ou nulle.

Il peut être exprimé mathématiquement comme suit :

Optimiser nnxcxcxcxcz ++++= LL

332211

Sous c/t 11,133,122,111,1

// bbxaxaxaxann

≥=≤++++ LL

22,233,222,211,2// bbxaxaxaxa

nn≥=≤++++ LL

M M M

iinniiiibbxaxaxaxa ≥=≤++++ //

,33,22,11,LL

M M M

nnnnnnnnbbxaxaxaxa ≥=≤++++ //

,33,22,11,LL .

Tel que nixi

,,3,2,1 ,0,, L=≤=≥

),3,2,1( njcj

L= (appelés les coefficients de coût) ),,2,1,,,2,1(

,

njmiaji

LL == et ),,2,1( mibi

L= sont les paramètres du modèle.

Page 9: Recherche opérationnelle & gestion des projets

9

Nous devrions inclure les coûts d’exploitation c (qui sont censés pour être constant, bien qu’il soit souvent commode de les omettre) dans la fonction objective. Cependant que nous changeons effectivement la fonction objective du bénéfice z′

czxczj

n

j

j−′==∑

=1

Où c représente le total de la valeur de la constante. Par conséquent, il est important, lors de la résolution des problèmes de programmation linéaires de ne pas oubliez pas d’ajouter de la valeur de tous les termes constants omises dans la fonction objective à la valeur maximale (ou minimale) de z afin de déterminer la valeur correcte du profit maximum (ou coût minimum). Maintenant, il est très important que nous sommes en mesure de convertir la forme générale d’un problème de programmation linéaire en une forme standard, car si nous avons un problème de programmation linéaire sous forme standard, nous pouvons obtenir quelques résultats théoriques très puissants.

3. THEOREME DE DUALITE

Un modèle de programmation linéaire est de forme classique, si elle est exprimée sous la forme :

Maximiser xczT

= sous bxA

r

r

≤ , 0≥xr .

Aucune restriction sur le signe de br

.

Pour convertir un modèle de programmation linéaire sous forme standard, nous procédons comme suit :

(1) Supprimer tout terme c constant de la fonction objectif en remplaçant :

cxczT

+=′rr par xcz

T rr

= tel que czz −′= .

(2) Si le problème est un problème de minimisation : Minimiser xcz

T rr

′=′ , Le réécrire comme maximiser xcz

T rr

=

Tel que : zz ′−= et cc ′−= .

Page 10: Recherche opérationnelle & gestion des projets

10

(3) supprimer toutes les variables libres j

x en définissant −+

−=jjj

xxx où 0≥+

jx et 0≥

jx

Et en remplaçant j

x par −+

−=jjj

xxx où on le trouve dans la fonction objective et les contraintes.

(4) supprimer toute contrainte de l’égalité telles que :

inniiiibxaxaxaxa =++++

,33,22,11,LL

Soit en éliminant une des variables j

x en écrivant :

)(1

,

,

k

n

jk

kii

ji

j xaba

x ∑≠

−= tel que )0(,

≠ji

a

Et en remplaçant j

x chaque fois qu’il se produit dans la fonction objective et les contraintes, par cette combinaison de l’autre ( 1−n ) variables.

Ou en la remplaçant par les deux ≤ inégalités suivantes :

inniiiibxaxaxaxa ≤++++

,33,22,11,LL

inniiiibxaxaxaxa −≤−−−−−

,33,22,11,LL

(5) changer chaque contrainte≥ , tels que :

inniiiibxaxaxaxa ≥++++

,33,22,11,LL

Pour une contrainte ≤ en changeant tous les signes :

inniiiibxaxaxaxa −≤−−−−−

,33,22,11,LL

(6) si nécessaire renommer les variables.

La forme canonique : la forme standard est important puisqu’il nous permet d’accéder quelques résultats théoriques puissants à savoir, le théorème de la dualité. Cependant, une autre forme très importante du problème de programmation linéaire est la forme canonique qui mène à la méthode générale de la solution des problèmes de programmation linéaires, à savoir la méthode ou un algorithme plus simple. Dans la forme canonique, les inégalités sont transformées à des égalités par l’introduction de variables supplémentaires.

Définition Un modèle de programmation linéaire est sous forme canonique, s’il est exprimé sous la forme :

Page 11: Recherche opérationnelle & gestion des projets

11

Maximiser xczT rr

= Tel que bxA

r

r

= , 0≥xr , 0≥b

Tous les signes doivent être choisis pour que 0≥b . xr doit être 0≥x

r . Pour exprimer un modèle de programmation linéaire sous forme

canonique : (i) Supprimer toute terme c constant de la fonction objectif en

remplaçant :

cxczT

+=′rr

by xczT rr

= tel que czz −′= .

(ii) Si le modèle est un modèle de minimisation, c’est-à-dire minimiser :

Minimiser xczT rr

′=′ Réécrire comme maximiser xcz

T rr

= où zz ′−= et cc ′−=

r

(iii) supprimer toutes les variables libres

jx en définissant

−+

−=jjj

xxx où 0≥+

jx et 0≥

jx

et en remplaçant j

x par −+

−=jjj

xxx partout où il existe dans la fonction objective et les contraintes.

(iv) (pour toute 0<ib , changer tous les signes dans la contrainte

correspondante et l’inversion de tout signe d’inégalité. (v) (i) convertir toute contrainte de la forme :

inniiiibxaxaxaxa ≤++++

,33,22,11,LL

À une égalité en ajoutant une variable in

x+

pour donner :

iinnniiiibxxaxaxaxa =+++++

+,33,22,11,LL où.

(v) Convertir toute contrainte de la forme : inniiiibxaxaxaxa ≥++++

,33,22,11,LL

À une égalité en soustrayant une variable d’excédent in

x+

pour donner :

iinnniiiibxxaxaxaxa =−++++

+,33,22,11,LL tel que 0≥

+inx

(vi) Etendre cr pour inclure des éléments nuls in

c+

r pour les variables excédentaires

inx

+ Si nécessaire et si renuméroter les variables.

Page 12: Recherche opérationnelle & gestion des projets

12

4. FORME EQUIVALENTE ET TABLEAU SIMPLEXE

Lorsqu’une base B est disponible, on peut transformer le problème sous la forme :

min

0

B B R R

B R

Z z c x c x

Bx Rx d

x

= = +

+ =

En séparant indices de vase et hors base : (1 ), (1 ), ( ), ( ); ( 1), ( 1),

( , )

( )

( , )

B R B R

C C

c m c n m B m m R m n m x m x n m

T B R

x xB

c B R

× × − × × − × − ×

=

=

=

et avec ( , ),

Bx x i I= ∈ m variables de vase

( , ),Rx x i I= ∈ n-m variables hors base

La solution de vase admissible initiale vaut : 1

0

0

B

R

x B d

x

= ≥

=

(par l’hypothèse H2)

Le problème peut se mettre sous une forme équivalente en[5] : • diagonalisant les contraintes par rapport aux variables de vase (à l’instar de ce qui se fait dans la méthode de Gauss de résolution d’un système linéaire) ; • éliminant les variables de vase dans l’expression de la fonction économique.

Il vient, par multiplication par B-1

1 1

B XRx B R B d

− −

+ = et donc, en remplaçant

Bx

1 1( )

B B R Rz c B d c B R c x

− −

= − − pour simplifier, introduisons des notations qui seront abondamment

utilisées. Posons :

1 ( , )ij

B R A a j J−

= = ∈ de dimension (m x n – m) 1

, ,

e

j jB t a j J j

= ∈ vecteur colonne de A

Page 13: Recherche opérationnelle & gestion des projets

13

1

0 0( , )

iB d a i I a

= ∈ = de dimension (m x 1) 1

0 0( , )

B R jC B R c a j H α

+ = ∈ = de dimension (1 x n-m) (par conséquent 1

0B j j jc B t c a

− =

Le problème, mis sous sa forme équivalente, s’écrit maintenant :

00 0min

j j

j J

z a a x

= −∑

0i j j io

j J

x a x a i I

+ = ∈∑

0x ≥ Ou, en notation vectorielle,

00 0

0

0

R

B R

z a x

x Ax a

x

α= −

+ =

Les coefficients de cette forme équivalente constituent le tableau simplexe (à m + 1 lignes et à n-m + 1 colonnes), que l’on peut donc associer à chaque solution de base.

jx j J∈ (Variables hors base)

z 00a 0 j

a

ix i I∈ (variables De base)

0ia ij

a

L’intérêt du tableau simplexe est évident : la simple lecture de la première colonne (celle des termes indépendants de la forme équivalente) fournit.

00a la valeur actuelle de la fonction économique ;

ioa la valeur de la variable de base , ,

ix i I∈

Les variables , ,j

x j J∈ hors base sont par définition égales à zéro, quand la solution de vase est admissible (comme supposé ici) ; toutes les valeurs

ioa , i I∈ , sont non négatives [5].

Page 14: Recherche opérationnelle & gestion des projets

14

Remarques :

1. De 1, ,

j jB t a j J

= ∈ il vient

;j ij i

i I

t a t

=∑ j J∈

Les coefficients ij

a du tableau simplexe sont donc les coefficients de la commination linéaire des vecteurs de vase

it ( )i I∈ qui exprime de

manière unique le vecteur lors base jt .

A l’une ou l’autre occasion, il sera utile de considérer le tableau simplexe, dit complet, avec toujours m + 1 lignes mais n + 1 colonnes :

ix i I∈

jx j J∈

z 00a 0 0 j

a

ix i I∈

0i

a I ija

Où I est la matrice identité (m x m). Les m colonnes supplémentaires, relatives aux m variables de base, sont

toujours les mêmes et constituèrent dès lors généralement une information superflue.

D’où ressort de la définition de la matrice 1A B R

= – ou (I, A) = 1B T

− dans le cas du tableau simplexe complet – que lorsque la matrice T contient une matrice unité I (par exemple relative à des variables d’écart), la sous-matrice de (I, A) relative aux indices des colonnes formant cette matrice unité, correspond à l’inverse de la matrice de base[5] :

1 ( , ).I T B I A−

∈ ⇒ ∈ Propriétés fondamentales de la programmation linéaire – Propriété de caractérisation de l’absence de solution optimale finie.

Soit une solution de base admissible ; s’il existe k J∈ tel que :

00

0, ,

k

ik

a

a i I

≤ ∀ ∈ la fonction économique z peut prendre une valeur aussi petite que l’on

veut, c’est-à-dire qu’il n’y a pas de solution optimale finie.

Page 15: Recherche opérationnelle & gestion des projets

15

Démonstration Puisque 0,

ika i I≤ ∀ ∈ , la solution définie par(2)

*

0,

0

) ,

j

k k

i io ik

x j J k

x x

x a a i I

= ∈ −

= ⟩

= ∈

est encore une solution admissible (mais non de base), quelle que soit la valeur positive de *

kx

Or, pour cette solution admissible, on a : *

00;

ok kz a a x= −

étant donné 0oka ⟩ , il vient z →−∞ pour *

kx → +∞

Cette absence de solution optimale finie se caractérise donc au niveau du tableau simplexe par la situation :

k 0⟩

0≥

M M

M 0≤ M

M M

– Propriété d’amélioration d’une solution de base admissible : Soit une solution de vase admissible et supposons que k J∀ ∈ tel que 0

oka ⟩ , il existe au moins un indice i I∈ pour lequel 0

ika ⟩ (contrairement à

la situation de la propriété II.2.1). Définissions l’indice L par la relation :

min( )lo io

lk ik

a a

a a

=

Si on remplace dans la base le vecteur de vase

lt par le vecteur hors base

kt , on obtient une nouvelle base correspondant à une solution de base admissible meilleure – ou aussi bonne – que la précédente du point de vue de la fonction économique,

(2) Par facilité d’écriture, nous écrirons J-k au lieu de la notation ensembliste J/(k)

Page 16: Recherche opérationnelle & gestion des projets

16

Démonstration Comme dans la démonstration précédente, considérons la solution :

*

*

0

0,

0

j

k k

i i ik k

x J J k

x x

x a a x I

= ∈ −

= ⟩

= − ∈

Pour que cette solution soit admissible, il faut et il suffit que 0

ix i I≥ ∀ ∈ c’est-à-dire il faut et il suffit que :

* 0min

i

k

ik

a

x

a

⎛ ⎞≤ ⎜ ⎟

⎝ ⎠

En prenant :

* 0 0min

i l

k

ik ik

a a

x

a a

⎛ ⎞= =⎜ ⎟

⎝ ⎠

une nouvelle solution admissible est définie :

*

0

0

0;

0

,

0

j

k k

ik li i

lk

l

x j J k

x x

a ax a i I l

a

x

= ∈ −

= ⟩

= − ∈ −

=

En vertu de la remarque 1. du paragraphe II. et du fait que ika #0, la

matrice (m x m) formée des vecteurs ( )it i I l∈ − et

kt , est une matrice de

base (compte tenu du dernier point du paragraphe I.3.1) la nouvelle solution obtenue est la solution de base correspondante.

De plus la fonction économique prend la nouvelle valeur.

* 0

00 00

ok l

ok k

lk

a a

z a a x a

a

= − = −

Ce qui représente une valeur inférieure (ou égale, dans le cas particulie : 0

0la = :) à la valeur précédente

00a

Cette propriété qui servira de base à une itération de l’algorithme simplexe, se caractérise donc au niveau du tableau simplexe par la situation.

Page 17: Recherche opérationnelle & gestion des projets

17

k

← Calcul de

L⇐0i

ik

a

a

0≥

M 0⟩ M 0⟩ M 0⟩ M

– Test d’arrêt : obtention d’une solution de base optimale. Soit une solution de vase admissible. Une condition suffisante, et

nécessaire si le problème est non dégénéré, pour que cette solution soit optimale, est que J J∀ ∈ ait

00

ja ≤ .

Démonstration. Etant donné

00,

j

j J

z a x

= −∑ il est claire que le minimum de z sous les

conditions 0j

x ≥ est atteint pour 0j

x j J= ∀ ∈ et que la condition est suffisante Des deux propriétés précédentes, il résulte que la condition est nécessaire, mais uniquement si la solution pas nécessairement, s’il existe un indice l I∈ tel que

00

la = et 0

ika ⟩ , l’amélioration de la fonction

économique. L’obtention d’une solution de base optimale finie se caractérise donc au

niveau du tableau simplexe par la situation.

0≤

0≥

Remarque Nous soulignerons au paragraphe II.6 qu’à une même solution de base

admissible dégénérée, correspondent plusieurs bases et donc plusieurs tableaux simplexes différents. Lorsqu’une solution de base dégénérée est optimale, parmi les bases qui lui correspondent, il en existe au moins une pour laquelle les coefficients du tableau simplexe vérifient

00

ja ≤

Page 18: Recherche opérationnelle & gestion des projets

18

– Interprétation géométrique L’interprétation géométrique des trois propriétés ci-dessus est

essentielle à la bonne compréhension de l’algorithme simplexe. Cette interprétation sera illustrée sur un exemple au paragraphe II.4.

Nous supposerons ici qu’il n’y a pas dégénérescence. Soit une solution de base admissible, c’est-à-dire un sommet de D ; elle

correspond à l’intersection de n hyperplans :

)i ix dα 1,...,i m= )0

jx j J∈

La non-dégénérescence de cette solution courante 0ix = signifie

qu’elle n’est située sur aucun des m hyperplans 0ix = i I∈

Augmenter une (et une seule) variable hors base kx – de son niveau

actuel « zéro à un niveau positif – consiste à se déplacer, à partir de ce sommet, le long d’une arête qui en est issue ; il y a donc n-m arêtes issues de ce sommet. Si le coefficient

0ka du tableau simplexe est strictement

positif (négatif) ; cette direction de déplacement entraîne une diminution (augmentation) de la fonction z ; un

0ka nul signifie que la fonction z reste

stable le long de l’arête correspondant à la variation dekx . »

Pour améliorer la valeur de la fonction économique, il est donc nécessaire de déterminer une arête le long de laquelle z diminue, c’est-à-dire de déterminer une variable hors base

kx telle que

00.

ka ⟩

Si une telle arête n’existe pas ; il n’est pas possible d’améliorer la valeur de la solution courante est une solution optimale.

Supposons qu’une telle arête existe 0

( / 0);k kx a∃ ⟩ le gradient de z étant

constant (vu le caractère linéaire de z), il est avantageux de déplacer la solution courante le plus loin possible le long de cette arête.

La seule limite au déplacement est de ne pas sortir du domaine d’admissibilité D : il convient donc, sous peine de voir une variable devenir négatrice, d’arrêter le déplacement dès qu’est atteint un des m hyperplans

0, .ix i I= ∈

Rappelons que le problème est sous forme standard : si la variable , ,ix i∈ est une variable d’écart, l’hyperplan 0

ix = est celui correspondant à

une contrainte réelle d’inégalitéi ix dα ≥ .

Page 19: Recherche opérationnelle & gestion des projets

19

La direction de déplacement choisie ( )kx � coupe l’hyperplan 0

ix = si

0ika ⟩ ; la distance (mesurée en terme d’augmentation de la variable

kx ) à

parcourir le long de cette arête vaut 0i

ik

a

a

.

5. Données et résultats

L’entreprise Ab mécanique fabrique divers modèles d’appareils mécaniques. Suite à une réunion, il a été convenu d’examiner la possibilité de modifier le programme actuel de fabrication des pompes à eau, soit 600 unités de son T 12 et 200 unités de son modèle T56. L’assemblage se fait essentiellement en deux phases et, par la suite, un contrôle de qualité est effectué sur toutes les unités. Le tableau suivant donne l’information concernant le nombre d’heures exigées pour fabriquer chaque modèle ainsi que les disponibilités en heures de chaque atelier.

Tableau 1. Tableau des données

Nombre d’heures de travailAteliers T12 T56 Heures

disponibles Premier assemblage 3 4 4200 Deuxième assemblage

2 3 2250

Contrôle de qualitéempaquetage

1 1 2600

Étant donné la situation du marché, l’entreprise ne veut pas fabriquer plus de 1500 unités du modèle électronique T 12

La contribution au bénéfice du modèle T12 est de 60 l’unité alors que celle du modèle T56 est de 70

On veut déterminer le programme optimal de fabrication à mettre en œuvre c’est-à-dire :

Celui qui maximiserait les bénéfices.

Variables de décision : x1 : le nombre d’unités à fabriquer du modèle T12 x2 : le nombre d’unités à fabriquer du modèle T56

Page 20: Recherche opérationnelle & gestion des projets

20

Les contraintes sont : C1 : 3x1+4x2 ≤4200 C2 : x1+3x2 ≤2250 C3 : 2x1+2x2 ≤2600 C4 : x1 ≤ 1500 unités x1 ≥0, x2 ≥0

La fonction économique à maximiser est : Z = 60x1+70x2

Dans le tableau de la cellule cible : la fonction réalise une valeur optimale de 94000 réalisée quand les variables quand les variables décision (cellules variables) prennent les valeurs x1= 1000 et x2 = 3000.

Dans le tableau contraintes : le terme Etat désigne si la contrainte est saturée ou non (liée ou non). C’est le cas des deux contraintes qui passent par le point optimal. (1000 ; 3000). Le terme marge désigne l’écart observé sur la marge de contrainte à l’optimum.

Tableau 2. Tableau d la cellule cible

Cellule Nom Valeur initiale Valeur finale $F$12 total

quantités des ressources 0 94000

Tableau 3. Tableau des cellules variables

Cellule Nom Valeur initiale Valeur finale Entier $B$2 Nombre d’unités T12 0 1000 Entier $C$2 Nombre d’unités T56 0 300 Entier

Tabeau 4. Tableau de la cellule cible

Page 21: Recherche opérationnelle & gestion des projets

21

II. Programmation linéaire combinatoire (entiers)

⎪⎩

⎪⎨

=

=

xcZ

entierxx

bAx

Pi

,

,0:

max Considérons le problème suivant :. On appelle problème relaxé, le

problème où les xi ne sont plus forcément des entiers. Toute idée d’évaluation explicite est impossible à mettre en œuvre, on

utilise une méthode implicite appelé le B&B1.

Algorithme du B&B On procède par itérations successives.

0. Initialisation : Je résous le problème relaxé { }Ω∈xZou

,min][max . Si la

solution est entière alors FIN, sinon il faut trouver un majorant uZ de la

fonction économique : soit en calculant Z sur un point intérieur entier du

polyèdre, soit en prenant +∞=u

Z 2.

1. Séparation (kème itération) : Je considère le sous-ensemble kΩ de solution,

avec Ω=Ω1 . Je choisi une composante non déjà entière (celle qui a la plus

grosse partie fractionnaire) de la solution optimale du sous-problème { }

kouxZ Ω∈,min][max , et je partitionne k

Ω en kΩ′ et k

Ω′′ , en ajoutant des contraintes qui excluent la partie fractionnaire de la composante choisie.

2. Évaluation : Pour chaque sous-problème { }kou

xZ Ω′∈,min][max et { }

kouxZ Ω′′∈,min][max , je calcule la solution optimale (en utilisant

l’algorithme du simplexe) kL

Z′ et k

LZ

′′ . 3. Stérilisation : J’examine chaque sous-ensemble susceptible de contenir la solution optimale, et on stérilise un sous-ensemble si :

a) uLZZ ≤ , [respectivement uL

ZZ ≥ ], avec uZ la solution courante et L

Z la solution père (?). b) Le sous-problème a un ensemble vide de solution.

1 Branch and Bound : séparation et évaluation progressive. 2 C’est-à-dire très grand par rapport aux données du problème.

Page 22: Recherche opérationnelle & gestion des projets

22

c) LZ est obtenue avec une solution entière (évaluation exacte) et uL

ZZ > ,

[respectivement uLZZ < ]

4. Test : Si tous les sous-ensembles sont stériles, alors FIN, sinon je retourne en 1.

Illustration de l’algorithme

⎪⎩

⎪⎨

≤+≤+≤+−

+−=

entierx

xxxxxx

xxZ

P

i

153,93,1

64

:212121

21max

Je m’intéresse au problème. Si je résous le problème relaxé Pr, j’obtient la

solution optimale ⎟⎟⎠

⎞⎜⎜⎝

⎛=

5.1

5.1x , et un majorant 9ˆ =Z pour le problème P. Je

procède maintenant à la séparation, qui divise le problème en deux. Pour la

variable 1x non entière, j’interdis la bande fractionnaire compris entre 1 et 2.

C’est-à-dire, je résous un simplexe pour chaque sous-ensemble : { }1,

11≤Ω∈=Ω xx et { }2,

22≥Ω∈=Ω xx . Le premier sous-problème

donne comme résultat ⎟⎟⎠

⎞⎜⎜⎝

⎛=

2

1x

, et 8=Z . Cette solution est réalisable (la

meilleur de 1Ω ), par conséquent on la stérilise. Le deuxième sous-problème,

quant à lui donne ⎟⎟⎠

⎞⎜⎜⎝

⎛=

3/7

2x

, et 6=Z . On ne pourra avoir des solutions

entières dans 2Ω ayant un meilleur critère que 6=Z , qui est déjà moins bon

que celui trouvé dans 1Ω . Finalement, 8=Z .

Remarque : Si la solution du premier sous-problème n’avait pas été

entière, on aurait réitéré la séparation, sur 1Ω plutôt que sur 2

Ω , car le critère y est supérieure (rappel : on cherche Zmax).

Exemple de modélisation : Localisation d’usines On dispose de 3 sites susceptibles de recevoir une construction : on veut

en faire 2. Considérons le schéma suivant qui met en relation les usines Ai

avec leur distributeurs Dj. Le coût unitaire du transport de Ai vers Dj est jic

, .

Page 23: Recherche opérationnelle & gestion des projets

23

A3

A1

A2

D4

D3

D2

D1

Site capacité de production

capital investi coût de production unitaire

1 A1 K1 p1

2 A2 K2 p2

3 A3 K3 p3

De plus, chaque distributeur Di demande une quantité di. Le problème est de satisfaire la demande au coût total optimal.

Introduction de variable booléenne : ⎩⎨⎧

=sinon 0

condition si 1

. Pour le problème qui nous intéresse, la condition est : « si le site Ai est construit ». Par la suite, la limitation du nombre de construction se résume à

2321=++ δδδ .

Soit 0,

≥ji

x la quantité fabriquée en Ai, allant vers Dj.

La satisfaction des demandes :

– de D1 : 12111dxx =+

– de D2 : 2322212dxxx =++

– de D3 : 33323dxx =+

– de D4 : 4342414dxxx =++

Page 24: Recherche opérationnelle & gestion des projets

24

La limite de production :

– de A1 : 11141211δAxxx ≤++

– de A2 : 2224232221δAxxxx ≤+++

– de A3 : 33343332δAxxx ≤++

Remarques : Attention, il faut bien vérifier que le problème est linéaire.

Si 01=δ , alors 0

141211=== xxx . Si l’on avait une limitation du capitale K,

on l’écrirait : KKKK ≤++332211

δδδ .

La fonction économique s’écrit :

{

( ) KK

444 3444 21

+++++=

11

141211111min

AproductionAonconstructi

xxxpKZ δ

. On se sert du fait que si l’usine A1 n’est pas construite alors la limite de production impose que les

variables 0,1 =i

x .

Processus aléatoire : chaînes de Markov Généralités

Considérons une liste d’état { }n,,2,1 K . À la date t, le processus se

trouve dans un état i, ce que l’on traduit par ( )iXt= . On définit la

transition de i vers j comme la probabilité ( )iXjXPpttji===

+1, . On fait l’hypothèse que les transitions sont indépendantes du temps

(phénomène stationnaire). On définit la matrice des transitions ( )ji

pP,

= .

En général, la distribution initiale ( )iXPqi

==0 est donnée. On

remarquera que la matrice P est stochastique3. De tels matrices possèdent des propriétés intéressantes ; notamment, la stabilité du produit matriciel, et la propriété de Gerchgorin dont un corollaire s’énonce brièvement en disant que les valeurs propres sont de module inférieur à 1. L’hypothèse de Markov qui traduit la perte de mémoire est formulé comme suit : ( ) ( )

nnnnnnnniXiXPiXiXiXP ======

++++ 110011,,K . Le théorème

de Chapman-Kalmagarov précise que la matrice de transition obtenue pour

3 la somme des coefficients de toutes lignes fait 1.

Page 25: Recherche opérationnelle & gestion des projets

25

k itérations s’écrit simplement kP . La distribution de probabilité obtenue

après k itérations est un vecteur ( )kq dont les composantes sont définies

par ( ) ( )kkiiXPkq == . On a les relations : ( ) ( )Pkqkq tt

=+1 et ( ) ( ) ktt Pqkq 0= .

Classification des états On peut associer à la matrice des transitions P un graphe orienté, dont

les sommets représentes les différents états. On définit les relations comme

suit i mène à j 0/)(

, >∃⇔k

jipk . On dit que i et j communiquent si et seulement si i mène à j et j mène à i. Un graphe est dit fortement connexe si, pour tout i et pour tout j, il existe un chemin menant de i vers j. Le graphe réduit représente les liens entre les composantes connexes du graphe original. Le graphe réduit est sans circuit, ce qui induit un ordre sur ses sommets : classe transitoire et classe finale.

( )iXjXjXjXPfnn

n

ji=≠≠==

− 011

)(

, ,,, L représente la probabilité d’atteindre j partant de i au bout de n transitions exactement. A partir de là,

on définit la probabilité d’atteindre j partant de i ∑+∞

=

=

1

)(

,,

n

n

jijiff

. Considérons

maintenant la probabilité, partant de i, de revenir en i : iif, . On dit que i est

état récurrent si et seulement si 1,

=ii

f , et que i est transitoire sinon. Une condition nécessaire et suffisante pour qu’un état soit transitoire est que la

série∑∈Nn

n

iip

)(

,

(de termes réels positifs) soit convergente. Un état récurrent est caractérisée par une série divergente vers ∞+ . Sur le graphe, on peut identifier des classes finales (composante connexe d’états récurrents) et des classes transitoires (composante connexe d’états transitoires).

Comportement asymptotique et distribution stationnaire

Considérons les deux relations suivantes : ( ) ( )Pkqkq tt=+1 et

( ) ( ) ktt Pqkq 0= . L’hypothèse ( ) π=

∞→

nqn

limexiste, et ne dépend pas de ( )0q

traduit l’oubli du passé signifié dans la propriété de Markov. Par ailleurs, cela impose que la chaîne est régulière, c’est-à-dire qu’il n’y a qu’une seule

Page 26: Recherche opérationnelle & gestion des projets

26

classe, nécessairement finale ; autrement le choix de ( )0q serait décisif, puisqu’il déterminerait la classe finale. Quelque soit la distribution

initiale ( )0q , on a ( )Π= 0qtt

π avec n

n

P+∞→

=Π lim. Par ailleurs, on a P

tt

ππ = , c’est-à-dire que π est un vecteur propre à gauche pour P associé à la valeur

propre 1. En prenant, ( ) ( )001000 LL=qt

, on démontre que la matrice Π possède toutes ses lignes identiques et égales à π

t

. La limite

j

n

jin

p π=

∞→

)(

,lim (si elle existe) ne dépend pas de i : on parle alors de

distribution stationnaire de probabilité. Notons que si l’état final dépend de la distribution initiale, il n’y a pas de distribution limite stationnaire.

Théorème : étant donné un 0>ε , il existe une distribution stationnaire

π si, pour tout 0nn > , ε>

)(

,

n

jip . Remarque : Si à partir du rang 0

n , la matrice de transition nème conserve tous ses éléments strictement positifs, alors le graphe associé à la matrice est fortement connexe (1 seule composante connexe), donc le graphe réduit ne possède qu’un seule classe, qui doit nécessairement être terminale, donc tous les états sont récurrents.

Interprétation de la distribution stationnaire sur un exemple : Considérons une rivière à deux états Haut et Bas. À partir de données

statistiques, on établit la loi de transition suivante, dont on suppose qu’elle est modélisable par un processus de Markovien :

Haut Bas 0,50,7

0,3

0,5

Ce qui se traduit par la matrice de transition suivante : ⎟⎟⎠

⎞⎜⎜⎝

⎛=

5,05,0

3,07,0P

. Il y a une seule classe finale, tous les états sont récurrents. Calculons la

Page 27: Recherche opérationnelle & gestion des projets

27

distribution stationnaire :

( ) ( )

⎩⎨⎧

=+

×=

1HB

BHBHP

ππ

ππππ

, ce qui nous donne 8/3=

Bπ et 8/5=

Hπ .

– ( ) ( )iXPiXP

nn

i====

∞→∞

limπ

donne la probabilité d’atteindre la position i, au bout d’un temps très long.

– iπ représente également le temps relatif passé dans l’état i. Pour

notre exemple, on dira que la rivière passe 5/8 de son temps dans l’état haut, et les 3/8 restant dans l’état bas.

– iπ

1

représente le temps moyen de retour sur l’état i. Pour notre exemple, Partant de la position haute, il faudra attendre en moyenne 8/5 de jours pour revenir en position haute.

Décisions et Chaînes de Markov On considère une chaîne de Markov régulière, c’est-à-dire la matrice de

transition P est stochastique (et tous ces coefficients sont des probabilités), la chaîne est irréductible4 et il existe une seule distribution stationnaire π. Théorème : La chaîne est régulière si il existe un rang au delà duquel n

P a tous ses coefficients > 0.

On décide maintenant associer à chaque transition un coût jia

, . On

définit la matrice des coûts ( )ji

aA,

= carrée et de dimension n, le nombre

d’états. L’espérance de gain partant de i est ∑=

=

n

j

jijiiapa

1

,,

On définit le

vecteur espérance de gains en m transitions par

( )

( )

( )⎟⎟⎟

⎜⎜⎜

=

mv

mv

mv

n

M

1

. On notera

en particulier que ( ) ( )i

aav ==1 . Par convention, on pose que ( ) 00

r

=v . On

dispose de formules exprimant ( )mv en fonction de ( )1−mv :

– ( ) ( )1−×+= mvPamv 4 Il existe une seule classe, terminale.

Page 28: Recherche opérationnelle & gestion des projets

28

si on conditionne par la 1ère transition : ( ) ( )∑ −+=

j

jjiiimvpamv 1

,

– ( ) ( ) aPmvmvm

×+−=−1

1 si on conditionne par la dernière transition :

( ) ( ) ∑−

+−=

j

j

m

jiiiapmvmv)1(

,1

Formule asymptotique : ( ) ( )nOvengnv /1. ++= où ag

t

π= est un réel

appelé gain, avec π la distribution stationnaire, où ( )11 L

r t

e= . vr

est tel

que

( )

⎩⎨⎧

=

−=−

0,v

egavPIrr

rr

π . La formule asymptotique donne pour chaque état une équation de droite. Le gain g caractérise la pente, et v l’ordonnée à l’origine.

Exemple du confectionneur Un confectionneur fabrique un seul type de vêtement. On suppose que

les mauvaises (état 1) et les bonnes années (état 2) forment une chaîne de

Markov, de matrice de transition ⎟⎟⎠

⎞⎜⎜⎝

⎛=

5,05,0

3,07,0P

. Le bénéfice est de 0 après une mauvaise année, et de 10 après une bonne année. La matrice des

coûts s’expriment donc ⎟⎟⎠

⎞⎜⎜⎝

−−=

1010

00A

. Le vecteur espérance de gain se

calcule ⎟⎟⎠

⎞⎜⎜⎝

−=×−×−

=×+×=

105,0105,010

03,007,00a

. On cherche à établir la formule asymptotique. On calcule pour commencer la distribution stationnaire

8/5=B

π et 8/3=M

π . On en déduit le gain 8/30−== agt

π . Puis on

calcule ⎟⎟⎠

⎞⎜⎜⎝

−=

8125,7

6875,4v

. Comme on s’intéresse aux bénéfices et non pas aux

coûts, on représente ( )nvn −a , ce qui donne : ( ) ( )

( ) ( )⎩⎨⎧

++=−

+−=−

nOnnv

nOnnv

B

M

/18125,78/30

/16875,48/30

. On en conclue que si l’on part d’une mauvaise année, c’est irrattrapable !

Page 29: Recherche opérationnelle & gestion des projets

29

Décisions multiples On envisage un changement du type de vêtements. S’il change de type

de fabrication, il lui en coûte en 5. On cherche la politique la politique stationnaire optimale. La matrice de transition du nouveau vêtement s’écrit

⎟⎟⎠

⎞⎜⎜⎝

75,025,0

75,025,0

. Pour ce cas simple, on peut énumérer les différentes politiques : on associe au résultat d’une année (bonne ou mauvaise) une décision (changement de vêtement ou pas). À chaque stratégie correspond sa propre matrice de transition. Par exemple, partant du 1er type de vêtement, si je choisis de ne jamais changer de vêtement, je retombe sur le cas de l’exemple précédent. Cependant, l’intuition nous conseille de choisir de changer de type de vêtement après une mauvaise année, ce qui donne la

matrice de transition ⎟⎟⎠

⎞⎜⎜⎝

5,05,0

75,025,0

et le vecteur espérance de gain

⎟⎟⎠

⎞⎜⎜⎝

−=×−×−

=×+×=

105,0105,010

575,0525,05a

. La politique optimale est stationnaire, c’est-à-dire qu’elle ne dépend

que de l’état. On peut représenter une politique par une matrice ( )di

yD,

=

avec diy

, la probabilité de choisir la décision d sachant que l’on est dans l’état i. Une politique est déterministe si pour chaque état i correspond une

décision certaine. On définit dix , comme la probabilité de choisir la décision

d et d’être dans l’état i. On a ididiyx π

,,

= , d’après la formule des

probabilités conditionnelles. Par ailleurs, iπ qui représente la probabilité

d’être dans l’état i s’écrit ∑=d

diix

,

π

. Supposons qu’il y est n états et k décisions possibles, on définit l’espérance du coût d’une transition comme

la fonction économique à minimiser : ( )∑∑

= =

=

n

i

k

d

ididaxZ

1 1

,min

, avec ( )da le vecteur espérance de gains relatif à la décision d. La politique optimale va

être déterminé par minZ en ajoutant les contraintes suivantes :

Page 30: Recherche opérationnelle & gestion des projets

30

– 0,1

,

11 1

,≥==∑∑∑

== =

di

n

i

i

n

i

k

d

dixx π

– ∑ ∑∑= = =

=−∀⇒×=

k

d

n

j

k

d

ij

d

djdi

ttPxxiP

1 1 1

,,,0,ππ

, où Pd représente la

matrice de transition relatif à la décision d.

En résolvant le simplexe, on obtient les réels dix , , on pourrait de ce fait

s’attendre à ce que les diy

, soient aussi des réels, mais en fait ils sont égaux à 0 ou 1 (politique déterministe) !

Exemple du confectionneur (suite et fin) On liste les états : mauvaise année � 1, bonne année � 2 ; on liste les

décisions : pas de changement � 1, changement � 2. Ainsi 2,1x représente la probabilité d’être dans une mauvaise année et de changer de type de vêtement. On commence par écrire les vecteurs espérance de gains relatifs

aux décisions ( ) aa =⎟⎟

⎞⎜⎜⎝

−=

10

01

et ( ) ⎟⎟

⎞⎜⎜⎝

+=

5

52a

et les matrices de

transitions relatifs aux décisions ⎟⎟⎠

⎞⎜⎜⎝

⎛==

5,05,0

3,07,01

PP

et ⎟⎟⎠

⎞⎜⎜⎝

⎛=

75,025,0

75,025,02P

.

La fonction économique s’écrit : 2,22,11,2min 5510 xxxZ −+−= . Les contraintes s’écrivent 12,21,22,11,1 =+++ xxxx ,

025,05,075,03,0 2,21,22,11,1 =−−+ xxxx pour l’état 1 et on obtient la même équation pour l’état 2.

La résolution du simplexe donne 02,21,1 == xx , 5/22,1 =x et

5/31,2 =x , avec 4−=Z . Ainsi on déduit ∑=

=

k

d

dj

dj

dj

x

xy

1

,

,

,

, ce qui donne 02,21,1 == yy , 12,1 =y et 11,2 =y , d’où la matrice de la politique optimale :

⎟⎟⎠

⎞⎜⎜⎝

⎛=

01

10D

, qui confirme l’intuition.

Page 31: Recherche opérationnelle & gestion des projets

31

Chapitre II Les méthodes usuelles de management des projets

I. MPM 1. Introduction

Supposons que nous ayons à réaliser la recette de l’Aigo (ancienne recette du « petit peuple » méditerranéen). À chacune des tâches élémentaires ou « étapes » de réalisation de la recette, nous associons une lettre code (indiquée ci-dessous entre parenthèses) et le temps nécessaire à son accomplissement. Bien évidemment la réalisation d’une telle recette ne nécessite pas un travail d’organisation si complexe qu’il faille mettre en œuvre une méthode d’ordonnancement aussi formalisée et mathématisée que celle que nous allons étudier… il ne s’agit là que d’un exemple pédagogique.

Aigo, recette pour 4 personnes Denrées : 6 gousses d’ail, 3 cuillerées à soupe d’huile, 1 feuille de

laurier, 1 branche de sauge, 2 œufs, 4 tranches fines de pain rassis, sel. 1. Mettre 1 litre ½ d’eau dans une casserole avec du laurier, de la sauge,

du sel, et porter à ébullition (A, 5 mn). 2. Éplucher de l’ail, le hacher, le mettre dans un mortier (B, 5 mn). 3. Ajouter de l’huile d’olive dans le mortier et piler (C, 3 mn). 4. Verser ce mélange dans l’eau bouillante et cuire à feu vif pendant

10 mn (D, 10 mn). 5. Faire chauffer une soupière et mettre des tranches de pain rassis au

fond (E, 5 mn). 6. Casser des œufs en séparant le blanc et le jaune, mettre les jaunes

dans un bol (F, ½ mn).

Page 32: Recherche opérationnelle & gestion des projets

32

7. Passer le bouillon au chinois (G, ½ mn). 8. Verser une louche de bouillon sur les jaunes d’œufs et remuer

vivement (H, ½ mn) 9. Reverser cette préparation dans le bouillon en battant au fouet (I,

1 mn). 10. Verser une louche de bouillon dans la soupière, laisser le pain

s’imprégner, servir chaud (J, 2 mn). Pour une appréhension des généralités sur l’application de cette

méthode, nous vous recommandons de lire dans le site l’article sur les termes clés des méthodes Pert, Gantt et MPM.

2. Tableau d’analyse d’un projet et graphe M.P.M.

La réalisation d’un graphe présentant l’analyse d’un problème d’ordonnancement nécessite une étude préalable des diverses tâches à considérer, de leur durée (déterminée ou aléatoire), et des relations entre les tâches (principalement les contraintes d’antériorité). Cette analyse est décrite dans la fiche sur le diagramme PERT.

Habituellement, les conclusions de cette étude font l’objet d’une synthèse sous la forme d’un tableau. À titre d’exemple voici le tableau correspondant à la réalisation de la recette de l’Aigo :

Sur la base de ce tableau on trace le graphe M.P.M., en utilisant la

symbolique vue plus haut, graphe dans lequel :

Page 33: Recherche opérationnelle & gestion des projets

33

1. Chaque opération est représentée par un « sommet », habituellement dessiné sous la forme d’un rectangle dans lequel on inscrit le numéro ou la lettre code de l’opération. Le plus clair est de considérer que le sommet A représente le début de l’opération A, que le sommet B représente le début de l’opération B et ainsi de suite.

2. Chaque arc représente une contrainte de succession et l’on inscrit sur cet arc une valeur numérique, appelée potentiel, qui est le délai minimum, après le début de la tâche notée à l’extrémité initiale de l’arcau bout duquel peut démarrer la tâche notée à l’extrémité finale de l’arc. Ici nous avons considéré que ladurée d’exécution d’une tâche était en même temps le délai minimum avant de pouvoir lancer la tâche qui lui est immédiatement postérieure ; mais il n’en n’est pas toujours ainsi.

3. On introduit une opération initiale notée 0 ou 1 ou Début qui correspond au début du travail.

4. On introduit une opération finale ou terminale notée « n » ou Fin qui correspond à l’achèvement du travail.

Le graphe associé au tableau de l’Aigo est le suivant :

3. Construction du graphe : précisions

3.1. Présentation 3.1.1. Sommet initial et sommet final

Il est souvent plus commode et plus esthétique de remplacer ces deux sommets par des segments de droite verticaux. On évite ainsi les surcharges lorsque de nombreux arcs sont incidents à ces sommets.

Page 34: Recherche opérationnelle & gestion des projets

34

3.1.2. Arcs

Le mieux est de tracer des arcs rectilignes ou en lignes polygonales. Par exemple :

Si l’on ne peut éviter les intersections d’arcs, la solution suivante est

souvent la plus claire :

(A, B, C, D ne sont ici que pour fixer les idées et ne correspondent pas

à l’exemple de l’Aigo) On rappelle que le potentiel attaché à un arc est un délai minimum à

respecter : par exemple pour l’arc (A, D) le potentiel égal à 4 signifie que D peut débuter au mieux 4 unités de temps après le début de A, mais cela ne signifie pas que A dure nécessairement 4 unités de temps.

Ce qui peut poser problème : supposons, de plus, que A dure 10 unités

Page 35: Recherche opérationnelle & gestion des projets

35

de temps, B 3, C 1, D 2 et que ce soient les seules tâches du programme. Il faut penser à rajouter un arc de potentiel 10.

3.2. Cas complexes

3.2.1. Opérations parallèles

Soient A, B, C, D quatre opérations. On suppose que B et C succèdent toutes deux à A et précèdent toutes deux D. On suppose de plus que B et C sont des opérations qui, en fonction de leurs durées respectives et des délais dont on dispose, se déroulent ou doivent pouvoir se dérouler simultanément.

La représentation est la suivante :

3.2.2. Dépendance et indépendance entre opérations

Soient quatres opérations A, B, C, D. On suppose que A précède C et que A et B, indépendantes – c’est-àdire sans contraintes de succession entre elles-, précèdent D. On peut dire autrement que C succède à (mais sans succéder à B) et que D succède à A et simultanément à B. Alors on a :

Page 36: Recherche opérationnelle & gestion des projets

36

3.2.3. Successions avec recouvrement ou opérations composées

Soient cinq opérations A, B, C, D, E de durées, en jours, respectives 2, 7, 3, 4, 2. A précède B. C peut débuter 1 jour après le début de B ; D peut débuter 3 jours après le début de B et E suit B, c’est-à-dire ne peut débuter qu’après l’achèvement de B.

C’est en jouant sur les potentiels des arcs qu’il est possible de proposer une représentation graphique juste :

Ainsi tient-on compte des contraintes de succession avec recouvrement (ou avec attente) en utilisant simplement des potentiels convenables.

Cet exemple et les précédents, comme certains commentaires ont été pris dans le livre de Ferret et Langlois, « mathématiques appliquées, opérations financières, initiation à la R.O. » aux éditions Foucher, Paris 1979.

3.2.4. Cas de conditions limites de démarrage

Supposons qu’en ce qui concerne la recette de l’Aigo : ○ la tâche B ne puisse débuter au mieux que 4 minutes après le début

de la réalisation de la recette, ○ la tâche D ne puisse débuter au mieux que 8 minutes après le début

de la réalisation de la recette. Le graphe se trouverait ainsi modifié :

Page 37: Recherche opérationnelle & gestion des projets

37

4. Calculs sur le graphe : dates, marges et chemin critique

4.1. Durée minimale de réalisation d’un programme : chemin critique

Lorsqu’on observe un graphe entre le sommet de début et celui de fin on voit qu’il est généralement possible d’emprunter divers chemins pour relier le début à la fin. Chaque chemin est matérialisé par une succession de sommets et d’arcs et correspond à une certaine succession de tâches. La réalisation successive des diverses tâches qui jalonnent un chemin donné a une durée totale qui dépend des durées de réalisation de chacune des tâches du chemin. Cette durée totale est appelée « longueur au sens des durées du chemin », en abrégé : longueur du chemin.

La durée minimale de réalisation d’un programme est donnée par la longueur du chemin le plus long, c’est-à-dire par la succession de tâches la plus défavorable en ce qui concerne la durée. En effet la durée minimum ne peut être inférieure à la somme des durées nécessaires pour parcourir la succession la plus défavorable au sens des durées.

Le chemin le plus long est appelé chemin critique. Il arrive qu’il existe plusieurs chemins critiques qui ont évidemment tous la même longueur. Les sommets qui jalonnent le chemin critique sont les tâches critiques.

La longueur du chemin critique donne la durée minimale de réalisation du programme.

Tout retard pris dans le lancement ou l’exécution d’une tâche critique augmente d’autant la durée minimum de réalisation du programme.

Page 38: Recherche opérationnelle & gestion des projets

38

4.2. Dates relatives aux tâches

Soient : ○ T début = 0 la date de début du programme. ○ Début, a, b, c…, i…, n les indices désignant les sommets : Début, A,

B, C…, I…, Fin. ○ Ti la date au plus tôt de début de la tâche I. ○ d(h, i) le potentiel de l’arc reliant la tâche H à la tâche

immédiatement postérieure I, c’est-à-dire le délai minimum séparant le début de H du début de I avec H<I

○ P(i) l’ensemble des précédents de I, c’est-à-dire l’ensemble des sommets (tâches) précédant le sommet I.

Alors : Ti = Max [Th + d(h, i)] avec H ∈ P(i)

L’ordonnancement au plus tôt est le suivant :

Après avoir calculé les dates au plus tôt de début des tâches il est utile de s’intéresser aux dates au plus tard de début de ces mêmes tâches afin de connaître le retard maximum qu’il serait possible d’apporter au commencement d’une tâche sans remettre pour autant en question la date au plus tôt d’achèvement du travail (ici 22 minutes). A cette fin on décide que la date au plus tard d’achèvement du travail doit être égale à sa date au plus tôt. Soient :

○ Ti* la date au plus tard de début de la tâche I. On fixe Tn* = Tn (ici Tn* = Tn = 22).

Page 39: Recherche opérationnelle & gestion des projets

39

○ d(i, j) le potentiel de l’arc reliant I à J avec I<J (J succède immédiatement à I).

○ S(i) l’ensemble des tâches succédant immédiatement à la tâche I.

Alors : Ti* = min [Tj* – d(i, j)] avec J ∈ S(i)

Sur le chemin critique Ti = Ti*. De même que l’ensemble des Ti est appelé ordonnancement au plus tôt ou ordonnancement minimum, l’ensemble des Ti* donne l’ordonnancement au plus tard ou ordonnancement limite. Le graphe est maintenant le suivant :

Supposons que pour une autre recette proche de l’Aigo les contraintes soient modifiées : on admet que l’opération H ne suive plus F et que H puisse commencer 7 minutes après le début de D. Le graphe partiel de cette recette serait le suivant :

4.3. Marges relatives aux tâches

Pour une opération I donnée, identifiée par l’indice i, trois marges sont calculées :

Page 40: Recherche opérationnelle & gestion des projets

40

• MTi qui est la marge totale de l’opération, • MLi qui est la marge libre de l’opération, • MCi qui est la marge certaine de l’opération. Marge totale : MTi = Ti* – Ti

MTi est le délai ou retard maximum que l’on peut apporter à la mise en route de I sans modifier la durée minimale de réalisation du programme. Bien évidemment si MTi est utilisée les dates au plus tôt et les marges des opérations suivantes seront recalculées.

MLi est le délai ou retard maximum (retard par rapport à Ti) que l’on

peut apporter à la mise en route de I sans remettre en question les dates au plus tôt des opérations ultérieures.

MCi est le délai ou retard maximum (retard par rapport à Ti*) que l’on

peut apporter à la mise en route de I sans remettre en question les dates au plus tôt des opérations ultérieures et cela bien que l’opération I ait commencé à sa date au plus tard. Mci est particulièrement intéressante puisqu’elle permet de « recaler » un ordonnancement sur les dates attendues (dates au plus tôt) tout en disposant tout de même d’un délai pour lancer une tâche alors même que cette tâche avait été « calée » par des retards antérieurs sur sa date au plus tard. Il est rare de disposer d’une marge certaine.

Page 41: Recherche opérationnelle & gestion des projets

41

Les marges sont en général portées sur le graphe en dessous ou en dessus des rectangles matérialisant les sommets et dans l’ordre MTi, MLi, MCi. On a d’ailleurs toujours :

MTi ≥ MLi ≥ MCi ≥ 0. Pour l’Aigo seules les opérations A, F, E, ont des marges :

pour A [3 ; 3 ; 0], pour F [18 ; 18 ; 0] et pour E [15 ; 15 ; 0]. Sur le chemin critique toutes les marges sont nulles. Il en résulte que

l’élasticité d’un programme est d’autant plus faible que le nombre de tâches critiques est important par rapport au nombre total de tâches et que les diverses marges des opérations non critiques sont faibles ou inexistantes.

II. Le diagramme de GANTT

Le diagramme de GANTT est un outil permettant de modéliser la planification de tâches nécessaires à la réalisation d’un projet. Il s’agit d’un outil inventé en 1917 par Henry L. GANTT.

Etant donné la relative facilitée de lecture des diagrammes GANTT, cet outil est utilisé par la quasi-totalité des chefs de projet dans tous les secteurs. Le diagramme GANTT représente un outil pour le chef de projet, permettant de représenter graphiquement l’avancement du projet, mais c’est également un bon moyen de communication entre les différents acteurs d’un projet.

Ce type de modélisation est particulièrement facile à mettre en œuvre avec un simple tableur mais il existe des outils spécialisés dont le plus connu est Microsoft Project. Il existe par ailleurs des équivalents libres (et gratuits) de ce type de logiciel.

Création d’un diagramme GANTT Dans un diagramme de GANTT chaque tâche est représentée par une

ligne, tandis que les colonnes représentent les jours, semaines ou mois du calendrier selon la durée du projet. Le temps estimé pour une tâche se modélise par une barre horizontale dont l’extrémité gauche est positionnée sur la date prévue d démarrage et l’extrémité droite sur la date prévue de fin de réalisation. Les tâches peuvent s’enchaîner séquentiellement ou bien être exécutées en parallèle.

Page 42: Recherche opérationnelle & gestion des projets

42

Dans le cas où les tâches s’enchaînent séquentiellement, des relations

d’antériorité peuvent être modélisées par une flèche partant de la tâche en amont vers la tâche en aval. La tâche en aval ne peut être exécutée tant que la tâche amont n’est pas réalisée.

Au fur et à mesure de l’avancement d’une tâche, la barre la

représentant est remplie proportionnellement à son degré d’accomplissement. Ainsi il est rapidement possible d’avoir une vue sur l’avancement du projet en traçant une ligne verticale traversant les tâches au niveau de la date du jour. Les tâches accomplies sont ainsi situées à gauche de cette ligne, les tâches non commencées sont à droite, tandis que les tâches e cours de réalisation sont traversées par la ligne. Si leur remplissage est situé à gauche de la ligne, la tâch est en retard par rapport

Page 43: Recherche opérationnelle & gestion des projets

43

au planning ! Idéalement, un tel diagramme ne devrait pas posséder plus de 15 ou 20 tâches afin qu’il puisse tenir sur une simple page A4. Si le nombre de tâches est plus important il est possible de créer des diagrammes annexes détaillant la planification des tâches principales.

Les jalons De plus, il est possible de faire apparaître sur le planning des

événements importants autre que les tâches elles-mêmes, constituant des points d’accroche pour le projet : il s’agit des tâches jalons (en anglais milestones).

Les jalons permettent de scinder le projet en phases clairement identifiées, évitant ainsi d’avoir une fin de projet à trop longue échéance (on parle généralement d’« effet tunnel » pour désigner un projet de longue durée sans échéance intermédiaire). Un jalon peut être la production d’un document, la tenue d’une réunion ou bien encore un livrable du projet. Les jalons sont des tâches de durée nulle, représentées sur le diagramme par un symbole particulier, la plupart du temps un triangle à l’envers ou un losange.

Les ressources Il est généralement possible (et utile) de faire apparaître des ressources,

humaines ou matérielles, sur le diagramme, afin de permettre d’estimer les besoins et donner une idée du coût global.

Dans un souci de concision, les initiales ou les noms des responsables de chaque tâche seront parfois suffisants.

III. Méthode PERT

1 – Généralités.

A la fin des années cinquante, la marine américaine conçoit une nouvelle technique d’ordonnancement qui devait conduire à des gains de temps importants dans la réalisation de ses missiles à ogive nucléaire Polaris : c’est la technique PERT (Programm Evaluation and Review Technique – technique d’ordonnancement et de contrôle des programmes). Cette technique a permis de coordonner les travaux de près de 6000 constructeurs dans les délais imposés par le gouvernement américain.

Page 44: Recherche opérationnelle & gestion des projets

44

Le projet POLARIS représentait entre autres : ○ 250 fournisseurs, ○ 9000 sous-traitants, ○ 7 ans de réalisation. L’utilisation du PERT a permis de ramener la durée globale de

réalisation du projet de 7 à 4 ans. Cette méthode s’est ensuite étendue à l’industrie américaine puis à l’industrie occidentale.

Le PERT est « une méthode consistant à mettre en ordre sous forme de réseau plusieurs tâches qui grâce à leur dépendance et à leur chronologie concourent toutes à l’obtention d’un produit fini ».

La méthode PERT est le plus souvent synonyme de gestion de projet importants et à long terme. C’est pourquoi, un certain nombre d’actions sont nécessaires pour réussir sa mise en œuvre.

1. Définir de manière très précise le projet d’ordonnancement. 2. Définir un responsable de projet, auquel on rendra compte et qui

prendra les décisions importantes. 3. Analyser le projet par grands groupes de tâches, puis détailler

certaines tâches si besoin est. 4. Définir très précisément les tâches et déterminer leur durée. 5. Rechercher les coûts correspondant ce qui peut éventuellement

remettre en cause certaines tâches. 6. Effectuer des contrôles périodiques pour vérifier que le système ne

dérive pas.

2 – Présentation du PERT.

Page 45: Recherche opérationnelle & gestion des projets

45

Contrairement à celle du GANTT, la méthode PERT s’attache surtout à mettre en évidence les liaisons qui existent entre les différentes tâches d’un projet et à définir le chemin dit " critique ".

Le graphe PERT est composé d’étapes et de tâches (ou opérations). On représente les tâches par des flèches. La longueur des flèches n’a pas

de signification ; il n’y a pas de proportionnalité dans le temps.

Définitions Tâche ou opération : Elle fait avancer une œuvre vers son état final.

Exemple de représentation de la tâche A. Habituellement, on nomme les tâches et on indique leur durée.

Etape : On appelle étape, le début ou la fin d’une tâche. Exemple de

représentation de l’étape 1. Habituellement on numérote les étapes. On indique aussi leur temps de réalisation au plus tôt et au plus tard.

Réseau : On appelle réseau ou diagramme PERT, l’ensemble des tâches

et des étapes qui forment le projet. Un réseau possède toujours une étape de début et une étape de fin. On lit un réseau de la gauche vers la droite. Les flèches sont orientées dans ce sens. Il n’y a jamais de retours. On ne peut représenter une tâche que par une seule flèche.

Représentation, règles : Toute tâche a une étape de début et une tâche de fin. Une tâche

suivante ne peut démarrer que si la tâche précédente est terminée.

Page 46: Recherche opérationnelle & gestion des projets

46

Deux tâches qui se succèdent immédiatement sont représentées par des

flèches qui se suivent.

Deux tâches C et D qui sont simultanées (c’est-à-dire qui commencent

en même temps) sont représentées de la manière suivante :

Deux étapes E et F qui sont convergentes (c’est-à-dire qui précèdent

une même étape G) sont représentées de la manière suivante :

Parfois, il est nécessaire d’introduire des tâches fictives. Une tâche

fictive a une durée nulle. Elle ne modifie pas le délai final. Par exemple, si la tâche K succède aux tâches H et J, et que la tâche L succède seulement à la tâche H, on représentera le problème de la manière suivante :

Page 47: Recherche opérationnelle & gestion des projets

47

Solution Soit à effectuer les tâches suivantes :

1° Résolution par approche graphique : Chaque condition d’antériorité est traduite graphiquement.

Page 48: Recherche opérationnelle & gestion des projets

48

Il est possible de simplifier les graphes en les regroupant.

Nous obtenons le graphe final suivant :

Page 49: Recherche opérationnelle & gestion des projets

49

Page 50: Recherche opérationnelle & gestion des projets

50

Page 51: Recherche opérationnelle & gestion des projets

51

Chapitre III Théorie des graphes

I. Introduction

La notion de graphe est une structure combinatoire permettant de représenter de nombreuses situations rencontrées dans des applications faisant intervenir des mathématiques discrètes et nécessitant une solution informatique. Circuits électriques, réseaux de transport (ferrés, routiers, aériens), réseaux d’ordinateurs, ordonnancement d’un ensemble de tâches sont les principaux domaines d’application où la structure de graphe intervient. En tant que structures de données, les graphes sont une généralisation des structures qu’on a vues jusqu’à présent, dans la mesure où chaque élément d’un graphe peut posséder plusieurs prédécesseurs et plusieurs successeurs.

II. Quelques exemples d’application pouvant être modelées par un graphe

a. Le problème des ponts de Königsberg

La ville de Königsberg en Prusse (maintenant Kaliningrad) comprenait 4 quartiers, séparés par les bras du Prégel. Les habitants de Königsberg se demandaient s’il était possible, en partant d’un quartier quelconque de la ville, de traverser tous les ponts sans passer deux fois par le même et de revenir à leur point de départ. Le plan de la ville est comme ci-dessous :

Page 52: Recherche opérationnelle & gestion des projets

52

Il peut de se modéliser à l’aide d’un graphe ci-dessous, les quartiers sont représentés par les 4 sommets et les 7 ponts par des arêtes :

Un cycle eulérien, c’est un chemin qui passe une unique fois par toutes

les arrêtes et qui revient à son point de départ. Une chaîne eulérienne, c’est comme un cycle, mais il n’y a pas besoin de retourner au point de départ.

b. Choix d’un itinéraire : Connaissant la durée des trajets suivants :

Bordeaux Nantes 4 h Bordeaux Marseille 9 h Bordeaux Lyon 12 h Nantes Paris-Montparnasse 2 h Nantes Lyon 7 h Paris Montparnasse Paris Lyon 1 h (en autobus) Paris-Lyon Grenoble 4 h 30 Marseille Lyon 2 h 30

Page 53: Recherche opérationnelle & gestion des projets

53

Marseille Grenoble 4 h 30 Lyon Grenoble 1 h 15

Comment faire pour aller le plus rapidement possible de Bordeaux à Grenoble ?

Les données du problème sont faciles à représenter par un graphe dont les arêtes sont étiquetées par les durées des trajets :

Il s’agit de déterminer, dans ce graphe, le plus court chemin (ou l’un

des plus courts chemins, s’il existe plusieurs solutions) entre Bordeaux et Grenoble.

c. Organisation d’une session d’examens

Des étudiants A, B, C, D, E et F doivent passer des examens dans différentes disciplines, chaque examen occupant une demi-journée :

Chimie : étudiants A et B Électronique : étudiants C et D Informatique : étudiants C, E, F et G Mathématiques : étudiants A, E, F et H Physique : étudiants B, F, G et H

Page 54: Recherche opérationnelle & gestion des projets

54

On cherche à organiser la session d’examens la plus courte possible. On peut représenter chacune des disciplines par un sommet, et relier

par des arêtes les sommets correspondant aux examens incompatibles (ayant des étudiants en commun). Il s’agit alors de colorier chacun des sommets du graphe en utilisant le moins de couleurs possibles, des sommets voisins (reliés par une arête) étant nécessairement de couleurs.

d. Planification de travaux

Pour rénover une maison, il est prévu de refaire l’installation électrique (3 jours), de réaménager (5 jours) et de carreler (2 jours) la salle de bains, de refaire le parquet de la salle de séjour (6 jours) et de repeindre les chambres (3 jours), la peinture et le carrelage ne devant être faits qu’après réfection de l’installation électrique. Si la rénovation est faite par une entreprise et que chacune des tâches est accomplie par un employé différent, quelle est la durée minimale des travaux ?

On peut représenter les différentes étapes de la rénovation sur un graphe dont les arcs sont étiquetés par la durée minimale séparant deux étapes.

Il s’agit de déterminer la durée du plus long chemin du début à la fin des travaux.

Page 55: Recherche opérationnelle & gestion des projets

55

De manière générale, un graphe permet de représenter simplement la structure, les connexions, les cheminements possibles d’un ensemble complexe comprenant un grand nombre de situations, en exprimant les relations, les dépendances entre ses éléments. En plus de son existence purement mathématique, le graphe est aussi une structure de données puissante pour l’informatique.

III. Définition et terminologie

Un graphe G est constitué de 2 ensembles V et E. V est un ensemble non-vide de sommets. E est un ensemble de paires de sommets de V. Ces paires sont appelés arêtes. V(G) et E(G) représentent, respectivement l’ensemble des sommets et d’arêtes du graphe G. On écrit aussi G = (V, E) pour représenter le graphe.

Dans un graphe non orienté, la paire de sommets représentant une arête n’est pas ordonnée. Autrement dit, les (v1, v2) et (v2, v1) représentent la même arête.

Dans un graphe orienté (diagraphe), chaque arête est représentée par la paire orientée <v1, v2> ; v1 étant l’origine et v2 l’extrémité de l’arête dans ce cas, on ne parle plus d’arête mais d’arc. Par conséquent, <v2, v1> et <v1, v2> représentent deux arcs différents. La figure ci-dessous représentent deux graphes.

graphe orienté

Page 56: Recherche opérationnelle & gestion des projets

56

graphes non orienté

Terminologie : un petit vocabulaire réduit

Terme Signification

adjacence deux arcs sont adjacents s’ils ont une extrémité commune ; deux sommets sont adjacents s’il existe un arc, ou une arête, les reliant.

arc couple (x, y) dans un graphe orienté arête nom d’un arc, dans un graphe non orienté

boucle arc reliant un sommet à lui-même chaîne nom d’un chemin dans un graphe non orienté ;

séquence d’arcs avec une extrémité commune dans un graphe non orienté.

chemin suite d’arcs connexes reliant un sommet à un autre dans un grapheorienté. Par exemple (a ; b) (b ; c) (c ; d) (d ; b) (b ; e) est un chemin reliant a à e ; on le note (a, b, c, d, b, e). Un chemin est une chaîne, la réciproque étant fausse

chemin eulérien désigne un chemin simple passant une fois et une seule par toutesles arêtes du graphe ; il n’existe pas toujours…

circuit chemin dont l’origine et l’extrémité sont identiques (graphe orienté)connexe Un graphe est connexe s’il existe toujours une chaîne, ou un

chemin, entre deux sommets quelconques. Par exemple le pland’une ville doit être connexe.

complet un graphe est complet si quels que soient deux sommets distincts, ilexiste un arc (ou une arête) les reliant dans un sens ou dans l’autre

cycle nom d’un circuit dans un graphe non orienté ; dans un graphe non orienté, un cycle est une chaîne dontl’extrémité initiale coïncide avec l’extrémité finale

Page 57: Recherche opérationnelle & gestion des projets

57

degré d’un sommet

nombre d’arêtes issues d’un sommet dans un graphe non orienté ; nombre d’arcs arrivant ou partant d’un sommet dans un arc orienté

diamètre Le diamètre d’un graphe est la plus longue des distances entre deuxsommets.

distance la distance entre deux sommets d’un graphe est la plus petitelongueur des chaînes, ou des chemins, reliant ces deux sommets.

graphe orienté désigne un graphe où le couple (x, y) n’implique pas l’existence du couple (y, x) ; sur le dessin, les liens entre les sommets sont desflèches

graphe simple désigne un graphe non orienté ; sur le dessin, les liens entre les sommets sont des segments, et on ne parle alors plus d’arcs maisd’arêtes ; tout graphe orienté peut donc être transformé en graphe simple, enremplaçant les arcs par des arêtes

longueur d’un chemin (ou

d’une chaîne)

nombre d’arcs du chemin (ou d’arêtes de la chaîne)

Ordre d’un graphe

nombre de sommets du graphe

Prédécesseur, successeur

Dans l’arc (x ; y), x est prédécesseur de y qui est le successeur de x

rang le rang d’un sommet est la plus grande longueur des arcs seterminant à ce sommet

sous graphe le graphe G’ est un sous graphe de G si l’ensemble des sommets deG’ est inclus dans l’ensemble des sommets de G, et si l’ensemble desarcs de G’ est égal au sous-ensemble des arcs de G reliant entre eux tous les sommets de G’ ; on a donc retiré de G certains sommets, et tous les arcs adjacents à ces sommets.

Arcs (arêtes) incidents à un sommet : nombre d’arcs (arêtes) dont une extrémité part de ce sommet.

Arcs incidents à un sommet vers l’intérieur : partant de ce sommet. Arcs incidents à un sommet vers l’extérieur : arrivant vers ce sommet. Un sommet pendant est un sommet de degré 1. Un pont est une arête telle que sa suppression déconnecte le graphe en

question. Demi-degré extérieur d’un sommet Demi-degré intérieur d’un sommet Un graphe valué est un graphe où les arcs (arêtes) possèdent un poids.

Page 58: Recherche opérationnelle & gestion des projets

58

Exercises

Quels sont les cycles de ce graphe ?

• successeurs (C) ? • prédécesseurs (B) ? • arcs incidents à E vers l’extérieur ?

Exercice : Trouver le diamètre des graphes ci-dessous.

Page 59: Recherche opérationnelle & gestion des projets

59

IV. Représentation d’un graphe

4.1 Utilisation de matrices

• L’ensemble des sommets du graphe n’évolue pas. • On utilise un tableau de booléens, dite matrice d’adjacence, de

dimension n x n où n= |V|.

L’élément d’indice i et j est vrai si et seulement si il existe un arc entre les sommets i et j.

Exemple : La matrice d’adjacence du graphe.

est comme suit :

Exercice a) quelle est la matrice d’adjacence du graphe suivant ? b) que se passe-t-il si le graphe est non orienté ? c) comment procéder si on a affaire à un graphe valué ? d) comment traiter tous les successeurs du sommet Sx ? e) écrire une fonction qui retourne le demi-degré extérieur de x ?

Page 60: Recherche opérationnelle & gestion des projets

60

Avantages : rapidité des recherches, compacité de la représentation,

simplicité des algorithmes de calcul ;

Inconvénients : représentation ne convenant qu’aux graphes simples ; redondance des informations pour les graphes non orientés ; stockage inutile de cas inintéressants (les zéros de la matrice), à examiner quand on parcourt le graphe (pour la complexité des algorithmes, le nombre d’arêtes E est à remplacer par 2

V ).

4.2 Matrice d’incidence

Un graphe non orienté à n sommets numérotés et p arcs numérotés peut être représenté par une matrice (n, p) d’entiers : l’élément M[i][j] vaut 1 si le sommet i est une extrémité de l’arête j, 0 sinon :

Représentation par la matrice d’incidence.

Avantages : rapidité des recherches, compacité de la représentation, informations non redondantes pour les graphes non orientés ;

Page 61: Recherche opérationnelle & gestion des projets

61

Inconvénients : stockage et examen inutile de zéros ; les calculs de matrices classiques ne s’appliquent pas.

4.3. Utilisation des listes d’adjacence

C’est un tableau de liste chaînée. La dimension du tableau est de n. Chaque sommet du tableau contient une liste chaînée de sommets qui lui sont adjacents.

Exercice

b) comment faire si le graphe est valué d) avantages et inconvénients de cette solution e) écrire une fonction qui retourne le demi-degré extérieur de x.

V. Quelques Propriétés dans les graphes

Théorème 1 Un graphe ayant n sommets possède au plus n (n-1)/2 arêtes.

Preuve : exercice.

Pour tout graphe : (1) La somme des degrés des sommets est égale au double du nombre

d’arêtes. (2) La somme des degrés des sommets est paire. (3) Le nombre de sommets de degré impair est pair.

Page 62: Recherche opérationnelle & gestion des projets

62

Démonstration 1. Chaque arête du graphe relie exactement 2 sommets, une arête augmente donc de 2 la somme des degrés des sommets (1 pour chaque sommet). 2. Il est clair que, d’après ce qui précède, la somme des degrés est paire. 3. Soit N le nombre de sommets de degré impair. Ces degrés valent 2k1+1,…, 2kN +1. Les autres valent 2k’1, , 2k’m. La somme des degrés vaut :

D’après (1), cette somme est paire. D’où le résultat.

Un exemple Est-il possible de dessiner, dans le plan, 9 segments de telle manière que

chacun en coupe exactement 3 autres ? En représentant chaque segment par un sommet d’un graphe et en

reliant deux sommets par une arête lorsque les deux segments se coupent, le problème se ramène à la recherche d’un graphe à 9 sommets ou tous les sommets sont d’ordre 3.

Or le nombre de sommets de degrés impairs est nécessairement pair, 9 étant impair, le problème n’a pas de solutions…

Cependant, en modifiant l’énoncé : Est-il possible de dessiner, dans le plan, 8 segments de telle manière que chacun en coupe exactement 3 autres ?

Il n’y a plus de contradiction avec le théorème précédent mais il n’est pas sûr que le problème admette une solution. Quelques tâtonnements permettent cependant de répondre positivement à la question posée.

Le graphe ci-contre répond à la question posée.

Un dessin possible

Page 63: Recherche opérationnelle & gestion des projets

63

Théorème 2 : Dans un graphe simple G, il y a au moins 2 sommets distincts ayant le même degré.

Preuve : Soit n le nombre de sommets de G et soit d(x) le degré du sommet x dans G. On a toujours 0 ≤ d(x) ≤ n-1. Si tous les degrés sont distincts, toutes les valeurs de d() sont atteintes, en particulier 0 et n-1. Soit a un sommet de degré n-1. Alors les n-1 sommets restants sont extrémités d’une arête ayant a comme autre extrémité. Les sommets ont donc tous un degré non nul, en contradiction avec l’hypothèse. Soit A un graphe à n sommets.

Théorème 3 : Les propriétés suivantes sont équivalentes. (a) A est un arbre. (b) A ne contient aucun cycle et possède n-1 arêtes. (c) A est connexe et possède n-1 arêtes. (d) A est connexe, et chaque arête est un pont. (e) Deux sommets quelconques de A sont reliés par un unique chemin. (f) A est acyclique mais l’addition d’une quelconque nouvelle arête crée exactement un cycle.

VI. Implémentation d’un graphe

6.1. Utilisant une matrice d’adjacence

class Edgelink { public : int v1, v2 ; Edgelink () {v1 = –1 ; v2 = –1} Edgelink (int in1, int in2) { v1 = in1 ; v2 = in2 ; } } ;

typedef Edgelink* Edge ;

class Graph { // matrice d’adjacence private : int** matrix ; // la matrice int numVertex ; // nombre de sommets int numEdge ; // nombre d’arcs (arêtes)

Page 64: Recherche opérationnelle & gestion des projets

64

bool* Mark ; // un booléen pour le tableau

public : Graph (int) ; // constructeur ~Graph () ; // destructeur int n () ; // nombre de sommets du graphe int e () ; // nombre d’arcs du graphe Edge first (int) ; // le premier arc int first (int) ; // retourne le premier sommet adjacent bool isEdge (Edge) ; // retourne TRUE si c’est un arc Edge next (Edge) ; // retourne l’arc suivant int next (int, int) int v1(Edge) ; // sommet d’où vient l’arc int v2(Edge) ; // sommet où va l’arc int weight (int, int) ; // poids d’un arc int weight (edge w) ; // poids d’un arc bool getMark (int) ; // Retourne une valeur de marquage void setMark (int, bool) ; // initialize une valeur de Markage } ; [For completeness, add

6.2. Les fonctions sont comme suit :

Graph :: Graph (int numVert) { // constructeur int i, j ; numVertex = numVert ; numEdge = 0 ; mark = new int [numVert] ; // initialise le tableau mark for (i = 0 ; i <numVertex ; i ++) mark[i] = 0 ; matrix = (int **) new int*[numVertex] ; //alloue l’espace pour la matrice matrix for (i = 0 ; i <numVertx ; i ++) matrix[i] = new int[numVertx] ; for (i = 0 ; i <numVertx ; i ++) for (j =0 ; j <numVertx ; j ++) matrix[i][j] = 0 ; }

Page 65: Recherche opérationnelle & gestion des projets

65

Graph ::~Graph () { // destructeur delete [] mark ; // retourne la mémoire allouée au tableau mark for (i = 0 ; i < numVertx ; i ++) { delete [] matrix[i] ; delete [] matrix ; }

Edge Graph :: first (int v) { // retourne le premier arc for (int i=0 ; i<numVertex ; i ++) if (matrix[v][i] != NOEDGE) return Edge (v, i) ; return NULL ; }

int Graph :: fisrt (int v) { for (int i=0 ; i<numVertex ; i ++) if (matrix[v][i] != 0) return i ; return return i ; }

bool Graph :: isEdge (Edge w) // TRUE si c’est un arc { return (w != NULL) && (matrix[w->v1][w->v2] != NOEDGE) ; } // NOEDGE pour dire 0

Edge Graph :: next (Edge w) { for (int i=w->v2+1 ; i<numVertex ; i ++) if (matrix[w->v1][i] != NOEDGE) return Edge (w->v1, i) ; return NULL ; }

int next (int v1, int v2) { for (int i=v2+1 ; i<numVertex ; i ++) if (matrix[v1][i] != 0) return i ; return i ;

int Graph :: weight (int i, int j) {

Page 66: Recherche opérationnelle & gestion des projets

66

return matrix[i][j] ; }

int Graph :: weight (Edge w) { // Return weight of edge return matrix[w->v1][w->v2] ; } int Graph :: v1(Edge w) { return w->v1 ; } int Graph :: v2(Edge w) { return w->v2 ; } bool Graph :: getMark (int v) { return Mark[v] ; }

void Graph :: setMark (int v, bool val) { Mark[v] = val ; }

6.3. Implementation utilisant une Liste d’adjacence

class EdgeLink { public : int weight ; // poids de l’arc int v1, v2 ; // sommets EdgeLink* next ; // Pointeur à liste de sommets EdgeLink (int vt1, int vt2, int w, EdgeLink* nxt=NULL){ v1 = vt1 ; v2 = vt2 ; weight = w ; next = nxt ; } EdgeLink (EdgeLink* nxt =NULL) { next = nxt ; } } ; // fin de la déclaration

typedef EdgeLink* Edge ;

class Graph { // classe Graph class : liste adjacente private :

Page 67: Recherche opérationnelle & gestion des projets

67

Edge** list ; // liste de sommets int numVertex, numEdge // nombre de sommets, d’arcs bool* Mark ; // tableau de marquage public : Graph () ; // Constructeur ~Graph () ; // Destructeur int n () ; // Nombre de sommets int e () ; // Nombre d, arcs Edge first (int) ; // retourne le premier arc bool isEdge (Edge) ; // TRUE si c’est un arc Edge next (Edge) ; // retourne l’arc suivant int v1(Edge) ; // int v2(Edge) ; // int weight (int, int) ; // poids d’un arc int weight (Edge) ; // bool getMark (int) ; // void setMark (int, bool) ; // initialise une valeur de marquage } ;

6.4. Les fonctions de liste d’adjacence

Graph (int numvert) { // créer un graph avec Numvert sommets int i, j ; numvertex = numvert ; numedge = 0 ; mark = new int[numvert] ; // initialiser le tableau Mark for (int i=0 ; i< numvertex ; i ++) mark[i] = UNVISITED ; list = new edge*[numvertex] ; for (inti=0 ; I < numvertex ; i ++) list[i] = new edge ; }

~Graph () {// destructeur delete [] mark ; for (int i = 0 ; i<numvertex ; i ++) delete list[i] ;

Page 68: Recherche opérationnelle & gestion des projets

68

delete [] list ; }

Edge Graph :: first (int v) { return list[v] ; }

bool Graph :: isEdge (Edge w) { return w != NULL ; }

Edge Graph :: next (Edge w) { if (w == NULL) return NULL ; else return w->next ; } int Graph :: v1(Edge w) { return w->v1 ; }

int Graph :: v2(Edge w) { return w->v2 ; }

int Graph :: weight (int i, int j) { for (Edge curr = list[i] ; curr != NULL ; curr = curr->next) if (curr->v2 == j) return curr->weight ; return INFINITY ; }

int Graph :: weight (Edge w) { if (w == NULL) return INFINITY ; else return w->weight ; }

VII. Parcours dans les graphes

Nous avons vu dans le chapitre précédent, étant donnée la racine d’un arbre, l’une des applications les plus prisées et de traverser cet arbre en visitant chacun des nœuds, dans un certain ordre. Nous en avons cités trois manières de le faire : préfixe, infixe et le postfixe. Un problème analogue

Page 69: Recherche opérationnelle & gestion des projets

69

survient également dans le cas des graphes. Étant donné un graphe G = (V, E) et un sommet v in V(G), nous

sommes intéressés par la visite de tous les sommets qui sont atteignables à partir du sommet v (c’est-à-dire tous le sommets connexes à v). Dans ce chapitre, nous allons voir deux manière de s’y prendre : recherche en profondeur d’abord (Depth First Search, DFS) et recherche en largeur d’abord (Breadth First Search, BFS). Pour s’assurer la visite de tous les sommets, on procède comme suit :

void graph_traverse (Graph& G) {

for (v=0 ; v<G. n () ; v ++) G. Mark[v] = UNVISITED ; // Initialiser avec un bit par exemple for (v=0 ; v<G. n () ; v ++) if (G. Mark[v] == UNVISITED) do_traverse (G, v) ; }

7.1 La méthode en profondeur d’abord (DFS)

La méthode DFS dans un graphe procède comme suit : On commence par le sommet v et on le marque comme visité. Ensuite,

un sommet non visité, w, adjacent à v est sélectionné et récursivement une recherche DFS est initiée à partir du sommet w. Quand un sommet u est atteint tel que tous ses sommets adjacents ont été visités, on revient au dernier sommet visité ayant un sommet adjacent et on recommence la recherché DFS sur ce sommet.

La recherché se termine quand il n’y a plus de sommet non visité. Cette procédure est mieux illustrée par l’algorithme suivant :

void DFS (Graph& G, int v) { // DFS PreVisit (G, v) ; // prendre une action appropriée sur ce sommet G.setMark (v, VISITED) ; // le marquer comme visité for (Edge w = G.first (v) ; G.isEdge (w) ; w = G.next (w)) if (G.getMark (G.v2(w)) == UNVISITED) DFS (G, G.v2(w)) ; PostVisit (G, v) ; // prendre une action appropriée sur ce sommet }// fin de fonction

Page 70: Recherche opérationnelle & gestion des projets

70

Exemples sur des graphes

Ordre de visite : 1, 2, 4, 3, 5 ;

Ordre de visite : A, C, B, F, D, E.

Complexité

Observons que DFS examine chaque sommet au plus une fois. Pour chaque sommet u, un temps proportionnel à (degreexterne (u)+1) est nécessaire pour traiter les sommets adjacents de u (pourquoi le +1 ?). Par conséquent, la complexité de DFS est :

∑ ∑∈ ∈

+=+=++=++=

Vu Vu

enOenOnreexternenOureexeternenOnT )()2()deg()1)(deg()(

Page 71: Recherche opérationnelle & gestion des projets

71

7.2. La recherche en largeur

On commence au sommet v et le marquer comme visité, la méthode BFS est différente de DFS dans le sens où tous les sommets non visités adjacents à v sont les premiers à être visités avant d, aller en profondeur dans le graphe. Ensuite, les sommets non visités adjacents à ces sommets sont visités et ainsi de suite. Pour ce faire, il est clair qu’une file est nécessaire à ce parcours, contrairement à DFS qui utilise une pile.

Le pseudo code est comme suit.

visiter un sommet s : Si s n’a pas encore été enfilé ALORS enfiler s ; TANT QUE la file n’est pas vide soit n le premier sommet de la file ; {traitement de n} défiler ; enfiler tous les successeurs non encore enfilés de n FIN TANT QUE FIN SI

Une implémentation en C ++ peut être comme ci-dessous.

void BFS (Graph& G, int start) { Queue Q (G. n ()) ; Q.enqueue (start) ; G.setMark (start, VISITED) ; while (! Q.isEmpty()) { int v = Q.dequeue() ; PreVisit(G, v) ; // traiter le sommet v, s’il y a lieu for (Edge w = G.first(v) ; G.isEdge(w) ; w=G.next(w)) if (G.getMark(G.v2(w)) == UNVISITED) { G.setMark(G.v2(w), VISITED) ; Q.enqueue(G.v2(w)) ; } PostVisit(G, v) ; // Traiter le sommet v, s’il y a lieu } }

Page 72: Recherche opérationnelle & gestion des projets

72

Exemple sur des graphes

Ordre de parcours : 1, 2, 4, 5, 3

Ordre de parcours : A, C, E, D, F, B

Complexité : Il est clair que cette complexité est donnée par celle de la boucle while. Comme un sommet n’est jamais visité plus d’une fois, cette boucle est au plus répétée n fois. Le nombre d’itérations de la boucle for est proportionnel au degré de chaque sommet u + 1 (le +1 car même si degre(u) = 0, la boucle fera quand même le test). En additionnant sur les sommets, on obtient :

∑∈

+=+=++=Vu

enOenOurenOnT )()22()1)(deg()(

Page 73: Recherche opérationnelle & gestion des projets

73

7.3. Quelques applications de parcours de graphes

Application 1 : Accessibilité Pour connaître les sommets accessibles depuis un sommet donné d’un

graphe (orienté ou non), il suffit de faire un parcours en profondeur à partir de ce sommet, en marquant les sommets visités :

marquage des sommets accessibles depuis un sommet s : visiter s

visiter un sommet k : si k n’a pas encore été visité alors marquer k ; visiter tous les sommets adjacents de k finsi

Application 2 : composantes connexes

Définition : Un graphe est connexe si et seulement si, quelque soit deux sommets, ils sont reliés par une chaîne (chemin).

Définition : Une composante connexe d’un graphe est un sous graphe connexe de taille maximale.

Remarque : il est toujours possible de partitionner un graphe en composantes connexes. Par exemple, sur la figure ci-dessous, le graphe est scindé en 3 composantes connexes.

Page 74: Recherche opérationnelle & gestion des projets

74

Comment déterminer les composantes connexes d’un graphe ? En appliquant d’une manière répétitive le parcours DFS ou BFS sur

tous les sommets non encore visités. Il est clair qu’une composante connexe est constituée du sous graphe dont les sommets sont visités par un seul appel à DFS ou BFS

for i = 1 to n do marquer(i) = 0 fin pour

pour i = 1 à n si marquer(i) = 0 alors DFS(i) (ou alors BFS) ; restituer le sous graphe visité par DFS (formant une composante connexe) fin pour

Complexité : Si G est représenté par sa liste d’adjacence, alors le temps total pris par DFS est en O (e), e étant le nombre d’arêtes. La restitution peut être complétée en temps O (e) si DFS garde une liste de tous les sommets nouvellement visités. Comme la boucle pour est en O (n), la complexité totale, pour générer toutes les composantes connexes, est en O (n + e).

Application 4 : Graphe orienté sans circuit Un graphe orienté comporte un circuit si et seulement si, lors du parcours des sommets accessibles depuis un sommet, on retombe sur ce sommet. Pour savoir si un graphe est sans circuit, il suffit donc d’adapter DFS ou BFS, en maintenant une liste des sommets critiques (en cours de visite) :

Pour tout sommet s Si s n’a pas encore été visité

Page 75: Recherche opérationnelle & gestion des projets

75

visiter s finsi finpour ;

répondre « non : il n’y a pas de cycle »

visiter s : si s est dans la liste critique { répondre « oui : il y a un cycle » ; return } sinon { ajouter s à la liste critique ; pour chaque w, successeur de s visiter w ; } Question : cet algorithme est l’adaptation de DFS ou BFS ?

VIII. Applications dans les graphes

Dans cette section, nous allons discuter de deux applications, très connues dans la théorie des graphes : le problème de l’arbre recouvrant de poids minimum et le problèmes du plus court chemin.

8.1. Arbres couvrants de poids minimum

Un réseau comporte des machines A, B, C, D, et E qui doivent pouvoir communiquer entre elles. Les liaisons envisagées sont représentées par le graphe suivant (les arêtes sont étiquetées par la distance entre les machines) :

figure 8.1

Page 76: Recherche opérationnelle & gestion des projets

76

Question : Comment câbler le réseau à moindre coût ?

Réponse : Il s’agit d’enlever des arêtes au graphe de façon qu’il reste connexe, et que la somme des pondérations des arêtes soit la plus petite possible. Remarquons que le graphe partiel recherché est sans cycle (pourquoi ?). Le problème est ramené au problème suivant :

Définition : Le problème de l’arbre recouvrant de poids minimal est celui qui consiste à déterminer un arbre qui soit un graphe partiel d’un graphe G simple connexe et dont le poids total est minimal.

Exemple de solutions sur un graphe

figure 8.2

Algorithme de Kruskal La stratégie de cet algorithme consiste à construire l’arbre en question

comme suit : on part d’une solution vide. On choisit, à chaque fois, une arête de G de poids minimum et qui ne crée pas de cycle. Soit E l’ensemble des sommets de G. On utilisera un ensemble d’arêtes T qui sera en sortie l’arbre couvrant minimal et un ensemble d’arêtes F qui représentera les arêtes qui peuvent être choisies.

T = { } ; F = E ; tant que |T|<n-1 faire trouver une arête e de F de poids minimal F = F – e si T + e est acyclique // ne contient pas de cycle alors T = T + e finsi fin tant que

Page 77: Recherche opérationnelle & gestion des projets

77

Exemples 1. Reprenons le graphe de la figure 8.2, et construisons l’arbre

recouvrant de poids minimum à l’aide de l’algorithme de Kruskal.

2. Pour la figure 8.1, on aura ce qui suit :

Poids Arêtes 2 B-C 2 D-E 3 C-D 4 B-D éléminée 4 A-E 5 A-B éléminée 6 B-E éléminée

Page 78: Recherche opérationnelle & gestion des projets

78

Preuve d’optimalité de l’algorithme de Kruskal Soit T l’arbre généré par l’algorithme de Kruskal et M l’arbre de poids

minimum pour un graphe donné G. Nous allons montrer que M et T ont le même coût.

Soit E(T) et E(M) respectivement les arêtes constituant T et M. Si n est le nombre de sommet de G alors T et M ont (n-1) arêtes. Si E(T) = E(M), alors l’arbre T de Kruskal est clairement de poids minimum. Si E(T) ≠ E(M), alors il existe une arête q telle que q ∈ E(T) et q ∉ E(M). L’inclusion de q dans E(M) va créer un seul et unique cycle (voir théorème 3 ci-dessus). Soit q, e1,

, ek cet unique cycle. Soit ej une arête sur ce cycle telle que ej ∉E(T). Si ej est d’un poids plus petit que q, alors l’algorithme de Kruskal aurait considéré q avant ej. Par conséquent le poids de ej est plus grand que celui de q.

Considérons maintenant le graphe avec les arêtes E(M) ∪ {q}. La suppression d’une arête quelconque du cycle q, e1, , ek va créer un arbre A (voir théorème 3). En particulier, si l’arête ej est supprimée, alors l’arbre résultant A aura un coût qui n’est pas plus grand que celui de l’arbre minimum M (car le poids de ej ≥ au poids de q). Par conséquent, le poids de l’arbre A est aussi minimal.

Utilisant cette transformation, l’arbre M peut être transformé en un arbre T de Kruskal sans augmenter son poids. Par conséquent, l’algorithme de Kruskal génère un arbre de poids minimum.

Remarque : Noter que si toutes les arêtes sont de poids différents, la solution est unique ; il ne peut avoir plusieurs solutions que si, parmi des arêtes de même poids, un choix d’élimination se propose.)

Complexité : La boucle tant que de l’algorithme est exécutée |T| fois ; le test permettant de savoir si une arête crée ou non un cycle dans A peut se faire en moins de |S| opérations (le nombre d’arêtes de l’arbre A étant |S|-1) (dites comment le faire le faire ?). La complexité est donc de l’ordre de |T| x |S| (le tri des arêtes, qui peut se faire en |T| log |T| opérations, est négligeable).

8.2. Le plus court chemin

Soit un graphe (orienté ou non) pondéré, c’est-à-dire chaque arc de ce graphe est muni d’un poids (nombre réel).

Page 79: Recherche opérationnelle & gestion des projets

79

Le poids d’un chemin est défini comme étant la somme des poids des arcs qui le constituent.

Le problème du plus court chemin, dans ce chapitre, consiste à déterminer le poids minimal d’un chemin d’un sommet à tous les autres, en supposant des poids positifs.

L’algorithme présenté ci-dessous est celui de Dijkstra. La stratégie de cet algorithme est comme suit :

On construit un ensemble fixé (permanent) de sommets x ayant le plus court chemin

xT . Initialement, cet ensemble contient juste le sommet de

départ S, et son plus court chemin à lui-même est 0=s

T . À chaque étape, on considère l’ensemble frontière des sommets qui ne sont pas encore fixés et sont adjacents à ceux qui sont permanents. Si le sommet y qui est dans frontière est adjacent à

kxxx ,...,,

21appartenant à l’ensemble permanent,

alors nous posons temporairement y

T égal au minimum de ( +1x

T poids de ),(

1yx ,( +

2x

T poids de ),(2yx ,…, ( +

kxT poids de ),( yx

k), comme

illustré par la figure ci-dessous. Parmi les sommets adjacents à cet ensemble permanent, nous prenons w dont

wT est minimale. Il est alors mis dans

l’ensemble fixé et supprimé de l’ensemble frontière. Cette procédure est répétée jusqu’à ce que l’ensemble frontière devienne vide.

S

Ensemble permanent (fixé)

Ensemble frontière (non fixé)

Théorème : Si un sommet w dans frontière possède le plus petit chemin temporaire

wT parmi les sommets de cet ensemble, alors ce poids

devient permanent.

Page 80: Recherche opérationnelle & gestion des projets

80

Preuve : La preuve est par contradiction. Supposons que w

T ne peut pas être mis comme étant le plus petit chemin pour le sommet w. Alors, il doit exister un autre chemin de poids plus petit du sommet S au sommet w (voir figure ci-dessous).

Ce nouveau chemin contient le plus petit chemin de S à x, ensuite, ça continue vers v. Ensuite, une autre suite de sommets (représenté dans la figure par des lignes courbées), avant d’arriver au sommet w. Autrement dit,

vT + poids du chemin en ligne courbée <

wT . Mais cette inégalité ne

peut pas être vraie pour la simple raison que le poids du chemin en ligne courbée est positif. D’où le résultat du théorème.

S

X x

w

v

POUR tout sommet t d(s ; t) := + infini FINPOUR ; T[s] = 0 ; TANT QU’il reste des sommets non fixés 1. choisir un sommet w non fixé tel que T[t] soit minimal ; 2. supprimer w des sommets non fixés 3. POUR tout (w, x) dans E SI T[x] > T[w]+poids (w, x)

Page 81: Recherche opérationnelle & gestion des projets

81

ALORS T[x] = T[w]+poids (w, x) Si x n’est pas membre de frontiere ajouter x à frontiere FIN SI FIN POUR FIN TANT QUE

void Dijkstra (Graph& G, int s) { // utiliser tableau int T[G.n ()] ; for (int i=0 ; i<G.n () ; i ++) // Initialize T[i] = INFINITY ; T[s] = 0 ; for (i=0 ; i<G.n () ; i ++) { // traiter les sommets int v = minVertex (G, D) ; if (T[v] == INFINITY) return ; // non-atteignable G.setMark (v, VISITED) ; for (Edge w = G.first (v) ; G.isEdge (w) ; w=G.next (w)) if (T[G.v2(w)] > (T[v]+G.weight (w))) T[G.v2(w)] = T[v]+G.weight (w) ; } }

int minVertex (Graph& G, int* T) { // retourner le minimum des sommets int v ; // Initialise v à un sommet non visité ; for (int i=0 ; i<G.n () ; i ++) if (G.getMark (i) == UNVISITED) { v = i ; break ; } for (i ++ ; i<G.n () ; i ++) // trouver la plus petite valeur de T if ((G.getMark (i) == UNVISITED) && (T[i] < T[v])) v = i ; return v ; }

Page 82: Recherche opérationnelle & gestion des projets

82

Exemple : Soit à chercher les plus courts chemins depuis le sommet A vers tous les autres sommets dans le graphe suivant :

Le tableau suivant présente les distances depuis A et les arcs marqués au cours des différentes étapes de l’algorithme :

Parmanent frontiere poids temporaire du chemin

poids fixe du chemin

{} {A} Ta = 0 Ta = 0 {A} {B, C, D} Tb =8 ; Tc=2 ; Td=1 Td= 1 {A, D} {B, C} Tb = 7, Tc = 2 Tc = 2 {A, D, C} {E, B} Te = 5, Tb =7 Te = 5 {A, D, C, E} {B} Tb = 6 Tb = 6 {A, D, C, E, B} {}

Page 83: Recherche opérationnelle & gestion des projets

83

Références et bibliographie indicatives

M. L, Beale, “Introduction to Optimization”, First Edition, John Wiley & Sons, Inc., 1988.

G. B.Dantzig, “Linear Programming and Extensions”, First Edition Princeton University Press, 1963.

R. Dorfman, P. A.Samuelson, R. M. Solow, “Programmation linéaire et gestion économique”, Dunod, 1962.

M.Simonard : “Programmation linéaire”. First Edition. Dunod, 1962.

J.Teghem, Programmation linéaire, statistiques et mathématiques appliqués, éditions de l’université libre d Bruxelles, première édition, 1996.

G. Hadley, “linear programming”, First Edition, Addison-Wesley, 1962.

E. Aurilien, la recherché opérationnelle, ENSERB informatique 2012

Page 84: Recherche opérationnelle & gestion des projets

84

Page 85: Recherche opérationnelle & gestion des projets

85

Table des matières

Introduction ............................................................................................. 3

Chapitre I – L’optimisation linéaire .................................................... 5 I. Une introduction à l’optimisation linéaire ................................... 5

1. Les bases mathématiques de la programmation linéaire ........................................................... 5 2. Quelques définitions importantes ............................................... 8 3. Théorème de dualité...................................................................... 9 4. Forme équivalente et tableau simplexe ....................................... 12 5. Données et résultats ...................................................................... 19

II. Programmation linéaire combinatoire (entiers) ......................... 21

Chapitre II – Les méthodes usuelles de management des projets ................................................................... 31

I. MPM .................................................................................................. 31 1. Introduction ................................................................................... 31 2. Tableau d’analyse d’un projet et graphe M.P.M. ....................... 32 3. Construction du graphe : précisions ........................................... 33 4. Calculs sur le graphe : dates, marges et chemin critique .............................................................................. 37

II. Le diagramme de GANTT ............................................................. 41 III. Méthode PERT .............................................................................. 43

1 – Généralités. ................................................................................... 43 2 – Présentation du PERT. ............................................................... 44

Page 86: Recherche opérationnelle & gestion des projets

86

Chapitre III – Théorie des graphes ....................................................... 51 I. Introduction ...................................................................................... 51 II. Quelques exemples d’application pouvant être modelées par un graphe ............................................... 51

a. Le problème des ponts de Königsberg......................................... 51 b. Choix d’un itinéraire : Connaissant la durée des trajets suivants : ...................................... 52 c. Organisation d’une session d’examens ........................................ 53 d. Planification de travaux ................................................................ 54

III. Définition et terminologie ............................................................ 55 IV. Représentation d’un graphe ......................................................... 59

4.1 Utilisation de matrices ................................................................ 59 4.2 Matrice d’incidence ..................................................................... 60 4.3. Utilisation des listes d’adjacence ............................................... 61

V. Quelques Propriétés dans les graphes .......................................... 61 VI. Implémentation d’un graphe ....................................................... 63

6.1. Utilisant une matrice d’adjacence ............................................. 63 6.2. Les fonctions sont comme suit : ................................................ 64 6.3. Implementation utilisant une Liste d’adjacence ..................... 66 6.4. Les fonctions de liste d’adjacence ............................................. 67

VII. Parcours dans les graphes ........................................................... 68 7.1 La méthode en profondeur d’abord (DFS) ............................... 69 7.2. La recherche en largeur .............................................................. 71 7.3. Quelques applications de parcours de graphes ....................... 73

VIII. Applications dans les graphes ................................................... 75 8.1. Arbres couvrants de poids minimum ...................................... 75 8.2. Le plus court chemin .................................................................. 78

Références et bibliographie indicatives ............................................... 83

Page 87: Recherche opérationnelle & gestion des projets

87

Page 88: Recherche opérationnelle & gestion des projets

88

Cet ouvrage a été composé par Edilivre

175, boulevard Anatole France – 93200 Saint-Denis Tél. : 01 41 62 14 40 – Fax : 01 41 62 14 50

Mail : [email protected]

www.edilivre.com

Tous nos livres sont imprimés

dans les règles environnementales les plus strictes

Tous droits de reproduction, d’adaptation et de traduction, intégrale ou partielle réservés pour tous pays.

ISBN papier : 978-2-332-913913 ISBN pdf : 978-2-332-91392-0

ISBN epub : 978-2-332-91390-6 Dépôt légal : mai 2015

© Edilivre, 2015

Imprimé en France, 2015