Vous êtes sur la page 1sur 6

Université de FIANARANTSOA – ENI RECHERCHE OPERATIONNELLE

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

Chapitre 2 : RECHERCHE DES CHEMINS DE VALEUR OPTIMALE

A . EXPOSE DU PROBLEME

Les problèmes de la recherche des chemins de valeur optimale (minimale ou maximale) sont très
fréquents en recherche opérationnelle. On les rencontre dès qu’il s’agit d’acheminer un objet entre deux
points d’un réseau, de façon à minimiser un coût, une durée, une distance ect. Ils consistent à déterminer
les chemins de valeur optimale entre les sommets d’un graphe fini, G = (S, U), « valué »,
généralement simple. Dans ce graphe, chaque arc possède une valeur pratiquement positive.

Autrement dit, soit un graphe G = (S, U), valué de n sommets. On désigne arbitrairement ces sommets
par xi où i varie de 1 à n. Nous allons étudier des algorithmes qui permettent de chercher la valeur d’un
(ou des) chemin(s) de valeur optimale entre l’origine x1 et un autre extrémité xi (i  1), plus
particulièrement entre une entrée x1 et une sortie xn.

B . ALGORITHME DE FORD

B.1 Algorithme de recherche de la valeur d’un chemin minimal

1. Numéroter les sommets du graphe dans un ordre quelconque, en observant toutefois que le sommet de
départ doit être marqué x1 et celui d’arrivé xn ;
2. Affecter provisoirement à tout sommet xi (i  1) une valeur i = + (un très grand nombre M) et
poser 1 = 0 ;
3. Pour tout sommet xj, tel que j - i > v(xi , xj), v( xi , xj ) représentant la valeur de l’arc (xi,xj),
remplacer j par i + v( xi , xj ) ;
4. S’arrêter lorsque aucun i ne peut plus être modifié.

L’organigramme de cet algorithme est


représenté par la FIGURE 1. Toutefois, si
à un moment donné, on a i > j, c’est-à-dire
s’il existe un arc dont l’indice de
l’extrémité terminale est inférieur à celui
de l’extrémité initiale, il faut recommencer
une partie des opérations, en posant i = j,
puis faisant ensuite j = 2.

A la fin de l’algorithme, i donne, pour xi,


la valeur du chemin minimal entre les
sommets x1 et xi. Si certains i ont
toujours la marque M, cela signifie qu’il
n’existe pas de chemin entre x1 et ces
sommets.

Pour trouver le chemin de valeur minimale,


il suffit de remonter dans le graphe, à partir
de xn, en cherchant au fur et à mesure, le

-------------------------------------------------------------------------------------------------------------------------------------------------------------------
----
Version 2008 Page 10 Chemin optimal
Université de FIANARANTSOA – ENI RECHERCHE OPERATIONNELLE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----
ou les prédécesseurs(s) du sommet xp, tels que p - p-1 = v(xp-1 , xp). On finira par retrouver x1 et le(s)
chemin(s) de valeur minimale de x1 à xn.
Remarque :
1. Cet algorithme permet de trouver la valeur minimale du (des) chemin(s) entre x1 et un sommet
quelconque du graphe. Mais la numérotation des sommets doit être ordonnée suivant la fonction
ordinale du graphe pour, diminuer le nombre de boucles dans le programme.
2. Il permet de trouver les chemins de valeur maximale moyennant la modification suivante : Pour
l’initialisation, i = 0  i et on calcul j = i + v(xi, xj) si j - i < v(xi, xj).

B.2 Application de l’algorithme


Chercher le chemin de valeur minimale entre le sommet x1 et x16 du graphe représenté par la
FIGURE 2 :
1 x9
6 x5 x12 9
x4 3 4
FIGURE 2
5 x15
7
8 x8 2
6
8 x6 1 x10
10 5
x1 x2
4 1 x16
1 6 3
x7
15
8 3 x14
x3
16 x13
x11 12

i j j - i v(xj , xi) j i j j - i v(xj , xi) j


1 2 M-0=M  2 =10 10 7 8 28-29=-1 1 
2 3 M-10=M  3 =25 15 11 38-29=9 8  1 1 =37
4 M-10=M  4 =18 8 8 7 29-28=1 1 -
3 6 M-25=M  6 =26 1 10 33-28=5 2  1 0 =30
11 M-25=M  1 1 =41 16 9 8 28-25=3 3
4 3 25-18=7 - 8 10 30-25=5 4  1 0 =29
5 M-18=M  5 =24 6 10 12 M-29=M 7  1 2 =36
5 9 M-24=M  9 =25 1 11 12 36-37=-1 6
6 5 24-26=-2 - 5 13 M-37=M 12  1 3 =49
7 M-26=M  7 =30 4 12 15 M-36=M 9  1 5 =45
7 8 M-30=M  8 =31 1 13 14 M-49=M 3  1 4 =52
11 41-30=11  1 1 =38 8 14 16 M-52=M 3  1 6 =55
8 7 30-31=-1 - 1 15 14 52-45=7 5  1 4 =50
10 M-31=M  1 0 =33 2 14 16 55-50=5 3  1 6 =53
9 8 31-25=6  8 =28 3 15 14 50-45=5 5 -
8 7 30-28=2  7 =29 1 16 53-45=8 6  1 6 =51
Résultat : chemin de valeur minimale (valeur du chemin de x1 à x16 = 51)
10 18 24 25 29 36 45 51
10 8 6 1 4 7 9 6
x1 x2 x4 x5 x9 x10 x12 x15 x16

C . ALGORITHME DE DANTZIG

C.1 Algorithme de recherche de chemin de valeur minimale


-------------------------------------------------------------------------------------------------------------------------------------------------------------------
----
Version 2008 Page 11 Chemin optimal
Université de FIANARANTSOA – ENI RECHERCHE OPERATIONNELLE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----

On numérote d’abord les sommets du graphe de x1 à xn où x1 est le sommet origine et xn le sommet final
entre lesquels on a besoin de connaître le(s) chemin(s) de valeur minimale.
1. On pose 1 = 0 et E1 = { x1 } ;
2. A tout étape k (k  1) du problème, on considère l’ensemble Ek des k sommets marqués (c’est-à-dire,
dont les i sont déjà déterminés) et, à tout sommet xi  Ek on associe le sommet xi*  Ek, tel que
v(xi,xi*) soit minimal ;
3. On détermine un sommet xp  Ek, tel que p + v(xp , xp*) = min [i + v(xi , xi*)]
4. On pose : Ek+1 = Ek  { xp* } = Ek  { xq } si xp* = xq et q = p + v(xp , xq).

Puis l’on revient à 2°) jusqu’à ce qu’on ait atteint xn (si l’on veut seulement le chemin minimal entre x1
et xn) ou lorsque Ek = S (si l’on désire connaître tous les chemins minimaux de x1 à xi, i > 1).

C.2 Application de l’algorithme

k = 1 v(x1 , x2) 2 = 1 + v(x1 , x2) = 10 k = 9 v(x3 , x11) 11 = 3 + v(x3, x11) = 41


E 2 = { x1 , x2 } v(x7 , x11) 11 = 7 + v(x7, x11) = 37
v(x8 , x10) 10 = 8 + v(x8, x10) = 30
k = 2 v(x2 , x4) 4 = 2 + v(x2 , x4) = 18 v(x9 , x10) 10 = 9 + v(x9, x10) = 29
E 3 = { x1 , x2 , x4 } E10 ={x1,x2,x4,x5,x3,x9,x6,x8,x7,x10}

k = 3 v(x2 , x3) 3 = 2 + v(x2 , x3) = 25 k = 10 v(x3 , x11) 11 = 3 + v(x3, x11) = 41


v(x4 , x5) 5 = 4 + v(x4 , x5) = 24 v(x7 , x11) 11 = 7 + v(x7, x11) = 37
E 4 = { x1 , x2 , x4 , x5 } v(x10 , x12) 12 = 10 + v(x10, x12) = 36
E11 ={x1, x2, x4, x5, x3, x9, x6, x8, x7, x10, x12}
k = 4 v(x2 , x3) 3 = 2 + v(x2 , x3) = 25
v(x4 , x3) 3 = 4 + v(x4 , x3) = 26 k = 11 v(x3 , x11) 11 = 3 + v(x3, x11) = 41
v(x5 , x9) 9 = 5 + v(x5 , x9) = 25 v(x7 , x11) 11 = 7 + v(x7, x11) = 37
E 5 = { x1 , x2 , x4 , x5 , x3 } v(x12 , x15) 15 = 12 + v(x12, x15) = 45
E12 ={x1,x2,x4,x5,x3,x9,x6,x8,x7,x10,x12,x11}
k = 5 v(x3 , x6) 6 = 3 + v(x3 , x6) = 26
v(x5 , x9) 9 = 5 + v(x5 , x9) = 25 k = 12 v(x11 , x13) 13 = 11 + v(x11, x13) = 49
E 6 = { x1 , x2 , x4 , x5 , x3 , x9 } v(x12 , x15) 15 = 12 + v(x12, x15) = 45
E13 ={x1,x2,x4,x5,x3,x9,x6,x8,x7,x10,x12,x11,x15}
k = 6 v(x3 , x6) 6 = 3 + v(x3 , x6) = 26
v(x9 , x8) 8 = 9 + v(x9 , x8) = 28 k = 13 v(x11 , x13) 13 = 11 + v(x11, x13) = 49
E 7 = { x1 , x2 , x4 , x5 , x3 , x9 , x6 } v(x15 , x14) 14 = 15 + v(x15, x14) = 50
E14={x1,x2,x4,x5,x3,x9,x6,x8,x7,x10,x12,x11,x15,x13}
k = 7 v(x3 , x11) 11 = 3 + v(x3 , x11) = 41
v(x6 , x7) 7 = 6 + v(x6 , x7) = 30 k = 14 v(x13 , x14) 14 = 13 + v(x13, x14) = 52
v(x9 , x8) 8 = 9 + v(x9 , x8) = 28 v(x15 , x14) 14 = 15 + v(x15, x14) = 50
E8 = { x1 , x2 , x4 , x5 , x3 , x9 , x6 , x8} E15 ={x1,x2,x4,x5,x3,x9,x6,x8,x7,x10,x12,x11,x15,x13,x14}

k = 8 v(x3 , x11) 11 = 3 + v(x3, x11) = 41 k = 15 v(x14 , x16) 16 = 14 + v(x14, x16) = 53
v(x6 , x7) 7 = 6 + v(x6, x7) = 30 v(x15 , x16) 16 = 15 + v(x15, x16) = 51
v(x8 , x7) 7 = 8 + v(x8, x7) = 29 E15 = E
v(x9 , x10) 10 = 9 + v(x9, x10) = 29
Après l’obtention de la valeur minimale, la
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
recherche
---- du chemin minimal utilise le même
Version 2008 Page principe
12 que celle dans l’algorithme de FORD. Chemin optimal
Université de FIANARANTSOA – ENI RECHERCHE OPERATIONNELLE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----
E9={x1 , x2 , x4 , x5 , x3 , x9 , x6 , x8 , x7}

D . ALGORITHME MATRICIELLE (ALGORITHME DE DEMOUCRON)

D.1 Algorithme de recherche de chemin de valeur minimale

Après avoir numéroté les sommets du graphe de 1 à n,


1 - Poser Wij(1) = V(xi,xj ) si (xi,xj)  U sinon Wij(1) = +
2 - Mettre ces valeurs dans une matrice de dimension n x n, D1.
3 - Calculer Wij(k-1) = Vik(k-1) + Vkj(k-1), puis Vij(k) = min [Wij(k-1), Vij(k-1)]. Former la matrice Dk.
Arrêter dès que k = n - 1

D.2 Application de l’algorithme


1 2 3 4 5 6 1 2 3 4 5 6
2 6
1 3 8 6 1 3 8 5 9
3 5 2 2 6 2 2 6
8
1 2 3 1 3 1
1 3
2
4 2 7 4 2 7
6 6 5 2 5 2
2
7 6 6
MATRICE D1 MATRICE D2
4

k=2 W14(1) = V12(1) + V24(1) = 3 + 2 = 5 d’où V14(2) = MIN (5,6) = 5


W15(1) = V12(1) + V25(1) = 3 + 6 = 9 V15(2) = MIN (9,) = 9  Matrice D2

k=3 W15(2) = V13(2) + V35(2) = 8 + 1 = 9 d’où V15(3) = MIN (9,9) = 9


W45(2) = V43(2) + V35(2) = 2 + 1 = 3 V45(3) = MIN (3,) = 3  Matrice D3

1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6
1 3 8 5 9 1 3 7 5 8 12 1 3 7 5 8 10
2 2 6 2 4 2 5 9 2 4 2 5 7
3 1 3 1 3 1 3
4 2 3 7 4 2 3 7 4 2 3 5
5 2 5 2 5 2
6 6 6
MATRICE D3 MATRICE D4 MATRICE D5

k=4 W13(3) = V14(3) + V43(3) = 5 + 2 = 7 d’où V13(4) = MIN (7,8) = 7


W15(3) = V14(3) + V45(3) = 5 + 3 = 8 V15(4) = MIN (8,9) = 8
W16(3) = V14(3) + V46(3) = 5 + 7 = 12 V16(4) = MIN (12, ) = 12
W23(3) = V24(3) + V43(3) = 2 + 2 = 4 V23(4) = MIN (4,) = 4
W25(3) = V24(3) + V45(3) = 2 + 3 = 5 V25(4) = MIN (5,6) = 5
W26(3) = V24(3) + V46(3) = 2 + 7 = 9 V26(4) = MIN (9,) = 9  Matrice D4

k=5 W16(4) = V15(4) + V56(4) = 8 + 2 = 10 d’où V16(5) = MIN (10,12) = 10


W26(4) = V25(4) + V56(4) = 5 + 2 = 7 V26(5) = MIN (7,9) = 7
W36(4) = V35(4) + V56(4) = 1 + 2 = 3 V36(5) = MIN (3, ) = 3
W46(4) = V45(4) + V56(4) = 3 + 2 = 5 V46(5) = MIN (5,7) = 5 Matrice D5

-------------------------------------------------------------------------------------------------------------------------------------------------------------------
----
Version 2008 Page 13 Chemin optimal
Université de FIANARANTSOA – ENI RECHERCHE OPERATIONNELLE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----

Cette étape (k=5) permet d'établir la matrice D5 qui représentera le résultat de l'algorithme parce que le
sommet 6 représente la sortie du graphe (parce que le nombre de sommets est 6. Comment peut-on
trouver le chemin de valeur minimale dans le tableau D5 ?
La case où se trouve le minimum dans la colonne i indique le prédécesseur de i dans le chemin minimal.
Par exemple, dans la colonne 6, le minimum se trouve dans la case (5, 6), 5 est alors le prédécesseur de 6.
Ainsi, le chemin de valeur minimale passe respectivement par les sommets : 1, 2, 4, 3, 5, 6.

Remarques :
1° L'avantage de cet algorithme est de donner le chemin de valeur minimale entre tous les points du
graphe.
2° L'algorithme permet aussi de trouver la valeur du chemin « maximal » dans la condition suivante :
Wij(1) = -  si (xi,xj)  U. Calculer Wij(k-1) = Vik(k-1) + Vkj(k-1), puis Vij(k) = max [Wij(k-1) , Vij(k-1)].

E . ALGORITHME DE BELLMAN-KALABA

E.1 Algorithme de recherche de la valeur d’un chemin minimal

Il s’agit d’une application pure et simple du principe d’optimalité avec les formules de récurrence
habituelles. Il consiste à :
1. Numéroter arbitrairement de 1 à n les sommets du graphe, dont l’origine et l’extrémité du chemin de
valeur minimale cherché, seront respectivement 1 à n ;
2. Désignant par v(i, j) la valuation de l’arc (xi, xj) ; v(i, j) = + si (xi, xj)  U ; v(i, j) = 0 si i = j ; A
l’étape k = 1 poser Vi(1) = v(i, n) pour tout i  n et vn(1) = 0.
3. A l’étape k > 1 de l’algorithme, calculer v i(k) = min [ v(i, j) + vj(k-1) ], vi(k) étant la valeur minimale du
chemin d’au plus k arcs entre xi et xn. Pour abréger les calculs, on ne retiendra que les valeurs de j
pour lesquelles vj(k-1)   et v(i, j)  .
4. Arrêter d’appliquer l’algorithme dès que vi(p+1) = vi(p), ce qui se produira nécessairement pour p  n-1.

E.2 Application de l’algorithme

k = 1 v1(1) = v(1, 16) =  v2(1) = v(2, 16) =  …v14(1) = v(14, 16) = 3 v15(1) = v(15, 16) = 6

k = 2 v12(2) = v(12, 15) + v15(1) = 9 + 6 = 15v13(2) = v(13, 14) + v14(1) = 3 + 3 = 6


v14(2) = v14(1) = 3 v15(2) = min [v(15, 14) + v14(1) , v15(1) ]= min (8, 6) = 6

k = 3 v10(3) = v(10, 12) + v12(2) = 7 + 15 = 22


v11(3) = min [v(11, 12) + v12(2) , v(11, 13) + v13(2) ]= min (21, 18) = 18
v12(3) = v12(2) = 15 v14(3) = v14(2) = 3
v13 = v13 = 6
(3) (2)
v15(3) = v15(2) = 6

k = 4 v3(4) = v(3, 11) + v11(3) = 16 + 18 = 34 v7(4) = v(7, 11) + v11(3) = 8 + 18 = 26


v8(4) = v(8, 10) + v10(3) = 2 + 22 = 24 v9(4) = v(9, 10) + v10(3) = 4 + 22 = 26
v10(4) = v10(3) = 22 v11(4) = v11(3) = 18 v12(4) = v12(3) = 15
v13(4) = v13(3) = 6 v14(4) = v14(3) = 3 v15(4) = v15(3) = 6

k = 5 v2(5) = v(2, 3) + v3(4) = 15 + 34 = 49 v3(5) = v3(4) = 34


v4(5) = v(4, 3) + v3(4) = 8 + 34 = 42 v5(5) = v(5, 9) + v9(4) = 1 + 26 = 27
v6(5) = v(6, 7) + v7(4) = 4 + 26 = 30
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
----
Version 2008 Page 14 Chemin optimal
Université de FIANARANTSOA – ENI RECHERCHE OPERATIONNELLE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----
v7(5) = min [v(7, 8) + v8(4) , v(7, 11) + v11(4) ]= min (25, 26) = 25
v8(5) = min [v(8, 7) + v7(4) , v(8, 10) + v10(4) ]= min (27, 24) = 24
v9(5) = min [v(9, 10) + v10(4) , v(9, 8) + v8(4) ]= min (26, 27) = 26
v10(5) , v11(5) , v12(5) , v13(5) , v14(5) , v15(5) gardent leurs anciennes valeurs.

k = 6 v1(6) = v(1, 2) + v2(5) = 10 + 49 = 59


v2(6) = min [v(2, 3) + v3(5) , v(2, 4) + v4(5) ]= min (49, 50) = 49
v3(6) = min [v(3, 6) + v6(5) , v(3, 11) + v11(5) ]= min (31, 34) = 31
v4(6) = min [v(4, 3) + v3(5) , v(4, 5) + v5(5) ]= min (42, 33) = 33
v5(6) = v5(5) = 27
v6(6) = min [v(6, 5) + v5(5) , v(6, 7) + v7(5) ]= min (32, 29) = 29
v7(6) = min [v(7, 8) + v8(5) , v(7, 11) + v11(5) ]= min (25, 26) = 25
v8(6) = min [v(8, 7) + v7(5) , v(8, 10) + v10(5) ]= min (26, 24) = 24
v9(6) = min [v(9, 8) + v8(5) , v(9, 10) + v10(5) ]= min (27, 26) = 26
v10(6) , v11(6) , v12(6) , v13(6) , v14(6) , v15(6) gardent leurs anciennes valeurs.

k = 7 v1(7) = v(1, 2) + v2(6) = 10 + 49 = 59


v2(7) = min [v(2, 3) + v3(6) , v(2, 4) + v4(6) ]= min (46, 41) = 41
v3(7) = min [v(3, 6) + v6(6) , v(3, 11) + v11(5) ]= min (30, 34) = 30
v4(7) = min [v(4, 3) + v3(6) , v(4, 5) + v5(6) ]= min (39, 33) = 33
v5(7) v6(7) v7(7) v8(7) v9(7) v10(7) v11(7) v12(7) v13(7) v14(7) v15(7) gardent leurs anciennes valeurs.

k = 8 v1(8) = v(1, 2) + v2(7) = 10 + 41 = 51


v2(8) = min [v(2, 3) + v3(7) , v(2, 4) + v4(7) ]= min (45, 41) = 41

Remarque :

1. Cet algorithme permet de trouver la valeur minimale du chemin x 1 à xi (i = 2, ..., n), s’il existe au
moins un chemin entre x1 et xi.
2. La recherche du chemin de valeur maximale en utilisant cet algorithme s’initialise par v(i , j) = -
 si (xi,xj)  U. Le choix de vi(k) utilise la formule : vi(k) = max [ v(i , j) + vj(k-1) ]
3. Les algorithmes qui permettent de chercher les chemins de valeur maximale ne s’appliquent
qu’aux graphes « sans circuit ».
4. Les problèmes de chemins optimaux apparaissent aussi en sous-problèmes de nombreux
problèmes combinatoires ; notamment les ordonnancements (chapitre3) et les flots (chapitre4)

========== FIN DE CHAPITRE 2 ==========

-------------------------------------------------------------------------------------------------------------------------------------------------------------------
----
Version 2008 Page 15 Chemin optimal

Vous aimerez peut-être aussi