Vous êtes sur la page 1sur 17

L’IMPLÉMENTATION DE

L’ALGORITHME DE
BELLMAN-FORD ET SON
APPLICATION AU ROUTAGE
À VECTEUR DE DISTANCE

NOM DES PARTICIPANTS:


ANGORAN DEBORAH Nom du prof:
OGOU JEAN EMMANUEL BABA ALIOU
BIDIA YVES
SOMMAIRE

I. Introduction à l’algorithme de Bellman-Ford


II. Fonctionnement de l’algorithme de Bellman-Ford
III. Pseudocode de l’algorithme de Bellman-Ford
IV. Application au routage à vecteur de distance
V. Avantages et inconvénients
VI. Exemples et démonstrations
VII. Conclusion
I. INTRODUCTION À L’ALGORITHME DE
BELLMAN-FORD
L’algorithme de Bellman-Ford est un algorithme de recherche de chemin le plus
court dans un graphe dirigé. Il est nommé d’après ses inventeurs, Richard
Bellman et Lester Ford. But de l’algorithme : L’objectif principal de l’algorithme de
Bellman-Ford est de trouver le chemin le plus court entre un sommet source
donné et tous les autres sommets dans le graphe. Il peut également détecter les
cycles de poids négatif dans un graphe. Importance de l’algorithme : L’algorithme
de Bellman-Ford est particulièrement important en raison de sa capacité à gérer
les graphes avec des poids négatifs. D’autres algorithmes, comme l’algorithme de
Dijkstra, ne peuvent pas gérer les poids négatifs, ce qui limite leur utilité.
Fonctionnement de l’algorithme : L’algorithme fonctionne en relaxant
progressivement les arêtes du graphe. La “relaxation” d’une arête consiste à
améliorer la meilleure estimation connue du chemin le plus court en passant par
cette arête. L’algorithme continue à relaxer les arêtes jusqu’à ce qu’il ne puisse
plus améliorer aucune estimation, ou jusqu’à ce qu’il détecte un cycle de poids
Négatif.
II. . FONCTIONNEMENT DE L’ALGORITHME
DE BELLMAN-FORD
L’algorithme de Bellman-Ford fonctionne en suivant une série
d’étapes précises. Voici une explication détaillée de chaque étape :
1. INITIALISATION
Au début, l’algorithme initialise la distance de la source à elle-
même à 0, car il ne coûte rien d’aller de la source à elle-
même. Pour tous les autres sommets du graphe, l’algorithme
initialise leur distance à la source à l’infini, car nous ne
connaissons pas encore le chemin le plus court pour y arriver
2. RELAXATION DES ARÊTES
L’algorithme parcourt ensuite toutes les arêtes du graphe et “relaxe” chaque
arête. La relaxation d’une arête consiste à vérifier si nous pouvons améliorer le
chemin le plus court connu vers le sommet de destination de l’arête en passant
par le sommet source de l’arête. Si nous le pouvons, alors nous mettons à jour la
distance du sommet de destination à la source.

3. RÉPÉTITION
L’algorithme répète l’étape de relaxation pour chaque arête (V1) fois, où V est le
nombre total de sommets dans le graphe. C’est parce que dans un graphe sans
cycle de poids négatif, tout chemin le plus court visite chaque sommet au plus
une fois, donc nous n’avons besoin de relaxer les arêtes que (V-1) fois au
maximum.
4. DÉTECTION DES CYCLES DE POIDS NÉGATIF
l’algorithme tente de relaxer toutes les arêtes une fois de plus. Si nous pouvons
encore relaxer une arête à ce stade, alors cela signifie qu’il y a un cycle de poids
négatif dans le graphe. C’est parce que si un tel cycle existait, nous pourrions
continuer à relaxer les arêtes indéfiniment et continuer à améliorer la distance
du sommet de destination à la source.
III. PSEUDOCODE DE L’ALGORITHME DE BELLMAN-
FORD
À l'issue de l'exécution de cet algorithme, d[u] représente la longueur d'un plus
court chemin de s à u dans G, alors que pred[u] représente le prédécesseur de u
dans un plus court chemin de s à u . La valeur null signifie qu'aucun
prédécesseur n'a pour l'instant été assigné à pred[u].
L'algorithme de Bellman-Ford n'est correct que dans un graphe sans cycle de
poids négatif. On peut détecter la présence d'un tel cycle (à condition qu'il soit
accessible depuis le sommet s) de la façon suivante : il y a un cycle de poids
négatif si et seulement si un nouveau tour de boucle fait diminuer une distance.
Ainsi, à la fin de l'algorithme, on fait :
Implémentation de l’algorithme de Bellman Ford en python :
Def Bellman Ford (graph, sommetDepart) :
distances = {}
predecesseurs = {}
for sommet in graph:
distances[sommet] = np.inf
predecesseurs[sommet] = None
distances[sommetDepart] = 0

for i in range(len(graph)-1):
for j in graph:
for k in graph[j]:
if distances[k] > distances[j] + graph[j][k]:
distances[k] = distances[j] + graph[j][k]
predecesseurs[k] = j
for i in graph:
for j in graph[i]:
assert distances[j] <= distances[i] + graph[i][j]
return distances, predecesseurs
#Liste d'ajacence du graphe
graph = {'A':{'B':15,'C':4},'B':{'E':5},'C':{'E':11,'D':2},'D':{'E':3},'E':{}}
distances, predecesseurs = bellmanFord(graph,'A’)
print("Plus courte distance pour chaque sommet de départ :")
for v in distances: print(str(v) + '-' + str(distances[v]))
Iv. APPLICATION AU ROUTAGE À VECTEUR DE DISTANCE
.

L’algorithme de routage à vecteur de distance envoie les informations


périodiquement sur les routeurs voisins. Exemple : le protocole RIP envoie
des mises à jour sur le réseau toutes les 30 secondes. Principe :
■ Chaque routeur maintient sa propre table de routage.
■ Chaque routeur estime une distance (délai, coût, longueur,
occupation, paquets en attente …) avec ses voisins.
■ Chaque routeur met à jour sa table de routage à partir de cette
information de distance avec ses voisins et des informations de
distance reçues par ses voisins (vecteurs de distance).
Le protocole RIP est basé sur l'algorithme de Bellman-Ford. Il fonctionne sur le
principe d'un échange d'information périodique entre les routeurs (toutes les 30
secondes). La métrique utilisée est le nombre de sauts (hops) pour atteindre une
destination.
Les limites du rip sont :
Pour éviter les boucles de routage, le nombre de sauts est limité à 15. Au-
delà, les paquets sont supprimés.
RIP ne prend en compte que la distance entre deux machines en ce qui
concerne le saut, mais il ne considère pas l'état de la liaison afin de choisir la
meilleure bande passante possible. Si l'on considère un réseau composé de trois
routeurs A, B et C, reliés en triangle, RIP préférera passer par la liaison directe
A-B même si la bande passante n'est que de 56 kbit/s alors qu'elle est de 10
Gbit/s entre A et C et C et B.
V. AVANTAGES ET INCONVÉNIENTS
AVANTAGES:
⦁ autorise la présence de certains arc de poids négatifs
⦁ permet de détecter l'existence d'un circuit absorbant, c'est a dire de poids
total strictement négatif, accessible depuis le sommet source
⦁ permet d'aborder le problème de plus court chemin de manière intelligente
INCONVENIANTS :
⦁ l’évolutivité médiocre du réseau .
⦁ lente convergence : les changements dans la topologie du réseau ne sont pas
répercutées rapidement dans la composition des tables, comme les mises a
jours sont faites nœud après nœud
⦁ infini compte : si vous cassez le lien avec un nœud, les autres nœud peuvent
employer un temps infini pour augmenter progressivement l'estimation de la
distance a ce nœud sauf si vous utilisez un scalaire comme un seuil, au-delà
duquel, le nœud est considère comme injoignable et donc hors du réseau
⦁ Cela ne s’adapte pas bien.
VI. EXEMPLES ET DEMONSTRATIONS
Dans les réseaux informatiques, l'algorithme de Bellman-Ford est utilisé
pour déterminer le cheminement des messages, à travers le protocole de
routage RIP. On peut utiliser l'algorithme de Bellman-Ford pour résoudre un
problème de programmation linéaire où les contraintes sont des différences.
Par exemple : x - y ≤ 5, y - t ≤ 10, etc. Plus précisément, un tel système a une
solution si et seulement si le graphe associé n'a pas de cycles de poids
négatif.
VII. CONCLUSION

L'algorithme de Bellman-Ford est un algorithme similaire qui est


moins efficace que Dijkstra lorsque tous les poids sont positifs, mais
permet de conserver une complexité acceptable dans le cas de poids
négatifs et de détecter les cycles de poids négatifs qui font que la
solution n'existe pas.

Vous aimerez peut-être aussi