• Aucun résultat trouvé

Description de l’algorithme .1 Notations

Hypothèse 7. Initialement, les nœuds capteurs sont dispersés de manière aléatoire sur les nappes de pétrole

3.4.3 Description de l’algorithme .1 Notations

Soit C(i) le chef du nœud i, P(i) le parent du nœud i (son voisin à un saut de meilleure métrique), L(i) le nombre de sauts entre i et son chef, M(i) la valeur de la métrique du nœud i et V(i) = {V1,V2,…Vn} la liste des voisins de i.

Initialement, un nœud i est à l’état ordinaire, tel que :

C(i)  -1 ; P(i)  -1 ; L(i)  -1 ; M(i)  0 ; V(i)  Ø

3.4.3.2 Diagramme des états finis

d’états possibles : ordinaire, membre à 1-saut, membre à 2-sauts ou Cluster-Head). A la réception d’un message (franchissement d’une transition), ce processus réalise de façon séquentielle un certain nombre d’opérations primitives dont la nature dépend à la fois de son état actuel et du contenu du message reçu. Les opérations primitives possibles sont : des calculs locaux, la transmission de messages et le changement d’état. Le comportement d’un processus sur un nœud capteur peut être alors décrit par un schéma de transition du type :

<état (K), message reçu> <état (K+1), message envoyé, calcul>

Ainsi, un algorithme distribué sur un réseau n’est autre que la caractérisation des types d’opérations à réaliser séquentiellement par un processus d’un nœud capteur du réseau à la réception d’un message, ce processus étant dans un état donné.

L’automate à états finis sur lequel est basé notre algorithme est représenté dans la Figure 3-4.

Figure 3-4 Automate à états finis

Le processus illustre les différents états que peut avoir un nœud du réseau (Tableau 3-1). Ainsi que les transitions qu’il doit franchir pour passer d’un état à un autre (Tableau 3-2).

Init initialisation des états des variables Ordinaire le nœud n’adhère à aucun cluster Chef de cluster Le nœud se déclare chef de cluster

Membre à 1-saut Nœud membre se trouvant à 1-saut de son chef de cluster. Membre à 2-sauts Nœud membre se trouvant à 2-sauts de son chef de cluster.

T1 Réception du message HELLO et M(i) > M(Vv(i))

T2 Réception du message HELLO et M(j) > M(i) et C(j) = j T3 Réception du message ADHESION et C(j) ≠ i

T4 Réception du message HELLO et P(i) = j et L(j) ≠ 1 T5 Réception du message HELLO et C(i) = j

T6 Réception du message HELLO et C(i) = j et C(j) ≠ j

T7 Réception du message INVITE

Tableau 3-2 : Transitions de l'automate à états finis

L'algorithme de répartition proposé construit des arbres de clusters à 2-sauts (la distance entre un nœud et son chef de cluster est d'au plus 2-sauts). L’algorithme procède par itération à l’aide de messages spécifiques. Nous utilisons seulement trois types de messages de diffusion:

HELLO : message envoyé périodiquement par chaque nœud du réseau. Ce message servira

pour la détection du voisinage du nœud ;

INVITE : message envoyé par le nœud chef de cluster pour inviter ses voisins à rejoindre son

cluster ;

ADHÉSION : message envoyé par un nœud pour notifier son adhésion au cluster et inviter

aussi ses voisins à rejoindre le cluster ;

Le processus comporte 3 phases : une phase de découverte du voisinage, une phase de construction de la structure virtuelle et une phase de maintenance.

3.4.3.3 Découverte du voisinage

Pour prendre sa décision, chaque nœud du réseau doit connaître son voisinage à deux sauts. Le message HELLO est échangé périodiquement entre les voisins à un saut. Le paquet HELLO contient alors les informations suivantes :

• l’identifiant du nœud source ;

• les coordonnées (x, y) du nœud source ; • le statut du nœud source ;

• l’identificateur du cluster auquel appartient le nœud source ; • l’identificateur du nœud parent du nœud source ;

• l’adresse du cluster auquel appartient la source ; • la densité calculée du nœud source ;

• le nombre de sauts séparant le nœud source de son chef de cluster ; • l’énergie consommée au niveau du nœud source ;

• nombre de voisins de la source ;

• la liste des adresses des voisins de la source ;

• la liste des adresses des clusters des voisins de la source.

En collectant les paquets HELLO reçus, chaque nœud maintient deux listes, une liste pour les voisins à un saut et une deuxième liste pour les voisins à deux sauts. Initialement, aucun nœud n’appartient à la structure des clusters et tous les nœuds sont à l’état ordinaire. Chaque nœud doit alors diffuser dans son voisinage à un saut le message HELLO. Ce message va permettre aux nœuds voisins à 1-saut de découvrir la présence du nœud émetteur et de l’ajouter dans leurs listes des voisins à 1-saut. Après le premier tour d’échange des messages HELLO, chaque nœud détecte tous ses liens directs. Un deuxième tour sera alors nécessaire pour permettre la découverte des voisins à 2-sauts.

Après échange du message HELLO, chaque nœud extrait les informations du message, calcule sa propre métrique et la compare à celle de ses voisins. Si sa métrique est la plus grande, alors il passe à l’état chef de cluster et lance la procédure de construction de son cluster. Sinon il attend un message

INVITE provenant d’un chef de cluster voisin.

La Figure 3-5 illustre le processus de découverte de voisinage par message HELLO. Initialement, tous les deux nœuds (u) et (v) n’ont reçu aucun message HELLO. Les tables de voisinage et des nœuds (u) et (v) sont vides ( ). Une fois que le nœud (v) reçoit le message HELLO diffusé par le nœud (u), il ajoute les informations concernant (u) dans sa table de voisinage ( Quand le nœud (u) reçoit le message HELLO diffusé par le nœud (v), alors il met sa table à jour et ajoute le nœud (u) ( ). De même, quand les nœuds (u) et (v) reçoivent un message HELLO du nœud (w), ils mettent leurs tables respectives à jour

( ).

En fonction de la dynamique de notre système (conditions climatiques, vitesses des vents, mobilité des nœuds dans le pétrole,…etc.), et tout en souhaitant préserver la bande passante nécessaire à l’information mutuelle entre voisins, nous avons choisi de fixer à 7 secondes seconde la périodicité d’émission des messages HELLO.

L’algorithme d’émission du message HELLO est comme suit : Algorithme 1 : Emission périodique du message hello Pour chaque k seconde faire

Update (M(i)) ; Diffusion (hello)

3.4.3.4 Maintenance de la liste du voisinage

L’échange périodique des messages HELLO permet aussi de détecter la perte de lien entre les voisins directs. En effet, chaque nœud associe un temporisateur à chaque voisin direct. Ce temporisateur est fixé à une valeur multiple de la période d’envoi d’un message HELLO. Si le temporisateur expire avant la réception d’un message HELLO du voisin auquel il est associé, le nœud peut alors considérer que le lien avec ce voisin est perdu. Alors, il l’enlève de sa liste des voisins et informe les autres voisins à travers l’envoi d’un message HELLO.