Vous êtes sur la page 1sur 16

Problème

du plus court chemin (PCC)


shortestpath

Etant donné un graphe orienté valué G=(A,S).

A l’ensemble des arcs de G

S={1,….,n} l’ensemble des sommets de G

P(i,j) est le poids de l’arc (i,j)

Objectif
Déterminer le plus court chemin allant du sommet origine « o » au sommet
destination « d »

H.SAMADI/RO/ENSATg
Il existe plusieurs applications du problème du (PCC), on cite par
exemple:

Réseau de transport

Réseau de télécommunication

Fiabilité des circuits électroniques , …..etc

On va présenter deux algorithmes :

• Algorithme de DIJKSTRA

• Algorithme de BELLMAN-FORD

H.SAMADI/RO/ENSATg
Algorithme de DIJKSTRA

Initialisation
K =0 : numéroter les sommets de 1 à n ( n est le nombre des sommets).
On note par E l’ensemble des sommets choisis
Dans ce cas E={1}

On pose : D[j]= P(1,j), j ∉ E , avec P(i,j) la longueur de l’arc (i,j) s’il existe

sinon P(i,j)=+ ∞ .

Itérations
Pour k= 1 à (n-1) faire :

1. On choisit i ∉ E tel que D[i]= min {D[j] / j ∉ E}


E ← E ∪ {i}.

2. Pour chaque sommet j ∉ E calculer D[j]=min (D[j], D[i]+P(i,j))

revenir à 1) jusqu'à ce que E=X.

3. affichage du chemin minimum.


H.SAMADI/RO/ENSATg
Application 1

Chercher le plus court chemin pour aller du sommet 1 au sommet 5.

2 3 4 1
1

8
1 5

2
2

2
3
5

H.SAMADI/RO/ENSATg
2
Tableaux de l’exemple 1

Etape E D[1] D[2] D[3] D[4] D[5]

0 {1} 0 5 2 8 ∞

1 {1,3} 0 3 2 6 ∞

2 {1,3,2} 0 3 2 6 6

3 {1,3,2,4} 0 3 2 6 6

4 {1,3,2,4,5} 0 3 2 6 6

Le chemin optimal est donc 5 2 3 1

Soit le chemin minimal parcouru : 2+1+3=6

H.SAMADI/RO/ENSATg
Application 2

Déterminer le plus court chemin entre le noeud 1 et le noeud 10 du graphe


suivant :

9
5 20
2 10
4
14 8 11
12

5 14
1 3 2

6 13
2
14 10
7 5
2

2
10 9

4 2

15
7 2

H.SAMADI/RO/ENSATg
Algorithme de Bellman-Ford
C’est une généralisation de l’algorithme de Dijkstra
(Ici le poid de l’arc (i,j) est de signe quelconque)

H.SAMADI/RO/ENSATg
Etapes de l’algorithme de BELLMAN
CNS d’existence d’un PCC
La non existence d’un circuit absorbant dans le graphe G ( un ciruit de longueur négative )

Initialisation
d(S0) 0 (S0 le sommet de départ)
Pour chaque sommet de G sauf (S0) faire d(s) +∞

Itérations
Pour i de 1 à( n-1) faire ( n le nombre de sommet de G)
Pour chaque sommet arc (i,j) de G faire
Comparer d(j) et d(i)+p(i,j)
d(j) min (d(j); d(i)+p(i,j))

Contrôle de la présence d’une boucle négative


Pour chaque arc (i,j) de G si d(j) > d(i)+p(i,j) alors existence d’une boucle négative
Sinon retour à d(j)

H.SAMADI/RO/ENSATg
Application 1
Utiliser l’algorithme de Bellman pour trouver le plus court chemin entre A et F
du graphe suivant:

Même question en remplaçant le poids de l’arc {BC} par 4.


Tester par Matlab

H.SAMADI/RO/ENSATg
Correction de l’application 1

Itération A B C D E F Plus court


chemin de A
vers F

Initialisation d(s) 0 ∞ ∞ ∞ ∞ ∞

1 0 (3 ;A) (4 ;A) ∞ ∞ ∞ A

2 0 (3 ;A) (4 ;A) (-1,C) (5 ;B) ∞ C

3 0 (-3 ;D) (4 ;A) (-1,C) (5 ;B) (2 ;D) D

4 0 (-3 ;D) (4 ;A) (-1,C) (-1 ;B) (2 ;D) B

0 (-3 ;D) (4 ;A) (-1,C) (-1 ;B) (0 ;E) E


5

Contrôle de 0 -3 4 -1 -1 0
Non existence
d’une boucle
négative

H.SAMADI/RO/ENSATg
Affichage du PCC

On commence par la première valeur constante de la colonne du sommet d’arrivé:


Ici c’est (0;E)
(5 ème itération ; sommet F) = sommet E
( 4 ème itération ; sommet E = sommet B
(3 ème itération ; sommet B) = sommet D
(2 ème itération ; sommet D)= sommet C
( 1ère itération; sommet C)= sommet A

Donc le plus court chemin entre A et F est :


A→C→ 𝐷 → B → E →F

Entre A et E, on commence par la 4 ème itération avec la colonne E qui donne: (-1;B)

On trouve: A-C-D-B-E de valeur -1`

On fait le même raisonnement avec A et n’importe quel autre sommet du graphe.

H.SAMADI/RO/ENSATg
Remarques:

1. En pratique, on pourra arrêter l'algorithme dès lors qu'aucune valeur de d


n'a été́ modifiée pendant une itération complète.

2. Si après n itérations il n’y a toujours pas de stabilité des valeurs de d, alors


l’algorithme ne converge pas ( cas de présence d’un circuit absorbant)

H.SAMADI/RO/ENSATg
Application 2 : Fiabilité d’un circuit électronique
Réseau télécom

Dans un graphe G = (X, A), on associe à tout arc (i, j ) de A une "fiabilité" rij c'est à dire
une valeur comprise entre 0 et 1 : 0 < rij ≤ 1.

La fiabilité mesure la probabilité que l'arc soit opérationnel (c'est-à-dire non


défaillant).

On définit la fiabilité d'un chemin P du graphe G, comme le produit des fiabilités des
arcs qui forment ce chemin :

Le problème est de déterminer le (ou les) chemin(s) de fiabilité maximale issus d'un
sommet source s vers tout autre sommet du graphe.

H.SAMADI/RO/ENSATg
Application 3: Réseau télécom

• On considère un réseau de télécommunication, composé d’émetteurs/récepteurs


pouvant s’envoyer des messages, avec une certaine fiabilité de communication

( une certaine probabilité pour que la communication ne soit pas interrompue)

• On modélise ce problème à l’aide du graphe orienté et valué où le poids d’un arc est
une valeur réelle comprise entre 0 et 1 qui indique la probabilité pour que la
communication se passe sans problème.

• Quel est le chemin le plus fiable pour envoyer un message entre un émetteur et un
récepteur?

H.SAMADI/RO/ENSATg
Chercher la fiabilité maximale entre A et F du graphe suivant:
(Utiliser la fonction log pour se ramener à un PCC. On rappelle que pour 0<rij<=1, log
(rij)<=0)

0,8
B E
0,4 0,3
0,5 0,1
A 0,2
F

0,7
0,6
C D
0,2 C

H.SAMADI/RO/ENSATg
Implémentation sous Matlab de l’algorithme du plus court chemin : PCC

%Lecture de la matrice d’adjacence du graphe%


s=[1 1 1 2 3 3 4]
t=[3 2 4 5 2 4 5]
weights=[2 5 8 3 1 4 1]
G=digraph(s,t,weights)

%Affichage du graphe%
H=plot(G,'EdgeLabel',graph.Edges.Weight);

%Calcul du plus cours chemin et de sa valeur%


[path,valpcc]=shortestpath(G,1,5)

%Coloration du plus court chemin%


tree=shortestpath(G,1,5);
highlight(H,tree,'EdgeColor’, r')
H.SAMADI/RO/ENSATg

Vous aimerez peut-être aussi