Académique Documents
Professionnel Documents
Culture Documents
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----
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
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é.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
----
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).
C . ALGORITHME DE DANTZIG
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).
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}
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
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
----
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
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.
k = 1 v1(1) = v(1, 16) = v2(1) = v(2, 16) = …v14(1) = v(14, 16) = 3 v15(1) = v(15, 16) = 6
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)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
----
Version 2008 Page 15 Chemin optimal