• Aucun résultat trouvé

4.2 Heuristiques proposées

4.2.2 Algorithme adaptatif

L’algorithme adaptatif [79] est un algorithme glouton qui implémente l’étape 1 (Former un

couvrant) de l’approche réactive décrite plus haut. Son objectif est de construire un couvrant. L’idée

principale de l’algorithme adaptatif est d’obtenir un nouveau couvrant en réparant le couvrant

précédent. Rappelons que dans l’approche réactive, un nouveau couvrant est formé lorsqu’un

capteur du couvrant actif est à cours d’énergie ou tombe en panne. Lorsque cela se produit, le

couvrant est alors défectueux puisque certaines cibles ne sont plus couvertes par ce couvrant. Les

cibles non couvertes par le couvrant en cours sont appelées cibles orphelines. En remplaçant le

capteur défectueux de sorte que toutes les cibles orphelines soient de nouveau couvertes, on obtient

un nouveau couvrant. Lors de cette réparation, toutes les cibles couvertes par le capteur défectueux

ne sont pas nécessairement orphelines car certaines cibles peuvent être doublement couvertes par

les capteurs du couvrant. Cependant, il existe toujours au moins une cible orpheline et le couvrant

obtenu après réparation est toujours différent du couvrant précédent. Le capteur défectueux peut

être remplacé par un ou plusieurs capteurs et il peut arriver que certains capteurs du couvrant

précédent deviennent redondants. Un capteur est redondant dans un couvrant si toutes les cibles

qu’il couvre sont couvertes par un autre capteur du couvrant. Ainsi, en supprimant ce capteur du

couvrant, toutes les cibles restent toujours couvertes. De ce fait, il est important après la réparation

d’un couvrant de rechercher et de supprimer les capteurs redondants du nouveau couvrant. Ces

capteurs redondants sont placés en mode veille comme les autres capteurs qui n’appartiennent pas

au couvrant actif. En général dans l’algorithme adaptatif, un capteur actif reste en activité jusqu’à

épuisement de sa batterie (ou en cas de panne) excepté lorsqu’il devient redondant suite à une

Former le nombre maximal de

couvrants tel que chaque capteur

appartienne à au plus couvrants

( ≥ 1)

Activer successivement

chaque couvrant pendant

une durée égale à / où

est la durée de vie

d’une batterie

Approche classique

Approche réactive

1) Former un

couvrant

2) Activer le

couvrant

3) Recevoir les énergies

résiduelles des capteurs actifs

Un capteur en

panne ou à cours

d’énergie?

Toutes les cibles

sont couvertes ?

Oui

Oui

Non

Nouvelles heuristiques pour le MLCP

réparation de couvrant. D’autre part, seul le premier couvrant n’est pas explicitement le fruit d’un

dépannage de couvrant car il est construit partant de zéro. Dans un souci d’uniformité, le premier

couvrant est vu comme un couvrant obtenu suite à une réparation où toutes les cibles sont des cibles

orphelines.

Afin de réparer un couvrant défectueux, l’algorithme adaptatif définit les critères de sélection du

(ou des) capteur(s) à activer pour couvrir les cibles orphelines. La première étape est de déterminer

l’ensemble des capteurs qui couvrent au moins une cible orpheline. Cet ensemble est un sous

ensemble des capteurs en veille car aucun capteur actif ne couvre de cibles orphelines. La seconde

étape est de compter le nombre de capteurs (en veille) qui couvre chaque cible orpheline.

Connaissant le nombre de capteurs qui couvre chaque cible orpheline, on peut déterminer

l’ensemble des cibles critiques. Une cible critique est une cible orpheline couverte par le plus petit

nombre de capteurs. La troisième et dernière étape est de sélectionner le capteur qui couvre le plus

grand nombre de cibles critiques. L’idée étant de couvrir en priorité les cibles critiques. Il peut

arriver que plusieurs capteurs couvrent le nombre maximal de cibles critiques, dans ce cas, on

sélectionne celui qui couvre le plus grand nombre de cibles orphelines en plus des cibles critiques.

Si plusieurs capteurs remplissent ce critère, l’un d’eux est alors choisi aléatoirement. S’il reste des

cibles orphelines après l’ajout de ce capteur, on recommence le processus depuis la première étape.

Les capteurs sont ainsi ajoutés itérativement jusqu’à ce qui ne reste plus de cibles orphelines. On

note que l’ensemble des cibles critiques est dynamique car il change en fonction des itérations. Une

cible orpheline non critique à l’itération peut le devenir à l’itération + 1. Etant donné que lors

d’une réparation, le nombre de capteurs qui couvrent une cible ne varie pas, les cibles critiques de

l’itération sont couvertes par moins de capteurs que les cibles critiques de l’itération + 1. On

constate alors que l’algorithme adaptatif couvre les cibles orphelines en partant des plus critiques

vers les moins critiques. Ainsi, l’algorithme cherche à couvrir une cible orpheline couverte par

capteurs (itération + 1) uniquement s’il n’existe plus de cibles orphelines couvertes par moins

de capteurs (itérations 1, . . , ). Une fois le couvrant réparé, l’algorithme recherche et supprime

les capteurs redondants du nouveau couvrant. L’algorithme adaptatif est présenté à la figure 15.

L’algorithme adaptatif prend en entrée l’ensemble des capteurs dont l’énergie résiduelle est non

nulle, l’ensemble des cibles et le couvrant à réparer. Lors du premier appel de l’algorithme,

l’ensemble contient tous les capteurs du réseau, le couvrant est l’ensemble vide et l’ensemble

des cibles orphelines est égal à l’ensemble des cibles . Au fur et à mesure des appels de

l’algorithme, la taille de l’ensemble diminue car des capteurs épuisent leurs batteries et d’autres

tombent en panne. De même, à partir du second appel de l’algorithme la taille de l’ensemble des

cibles orphelines est strictement inférieure à celle de l’ensemble des cibles. Il est à noter que

l’ensemble est un sous-ensemble de l’ensemble de S (c.à.d. ∩ = ). L’algorithme arrive à

réparer le couvrant défectueux si toutes les cibles orphelines sont couvertes par au moins un capteur

de S. Cette condition est vérifiée (instruction I1) avant de procéder à la construction du couvrant.

Dans le cas contraire, l’algorithme retourne l’ensemble. L’instruction I2 recherche l’ensemble

des cibles orphelines. Au début de chaque itération de la boucle tantque, l’instruction I3

recherche l’ensemble des cibles critiques qui sont les cibles orphelines couvertes par le

moins de capteurs de l’ensemble S. L’instruction I4 filtre l’ensemble pour former l’ensemble

des capteurs qui couvrent le plus grand nombre de cibles critiques. L’instruction I5 sélectionne le

Nouvelles heuristiques pour le MLCP

capteur de qui couvre le plus grand nombre de cibles orphelines (critiques et non critiques). Une

fois sélectionné, le capteur est ajouté au couvrant (instruction I6) et les cibles couvertes par ce

capteur sont supprimées de l’ensemble (Instruction I7). Une nouvelle itération de la boucle

recommence si l’ensemble n’est pas vide, sinon la boucle s’arrête. A la sortie de la boucle,

l’instruction I8 exécute la procédure suppression_redondanceafin de rechercher et de supprimer les

capteurs redondants du couvrant formé. Pour chaque capteur du couvrant, la procédure

suppression_redondance le supprime premièrement du couvrant, puis si une cible couverte par ce

capteur n’est pas couverte par le couvrant, le capteur est réinséré dans le couvrant car cela signife

qu’il n’est pas redondant. La procédure suppression_redondance retourne donc un couvrant

dépourvu de capteur redondant, c’est ce couvrant qui est retourné par l’algorithme adaptatif

(intruction I9).

Lors du premier appel de l’algorithme adaptatif, on effectue au plus ( + ) opérations où est

le nombre de cibles et est le nombre de capteurs. A partir du second appel,on effectue au plus

′( ′ + ) opérations où ′ ≤ car ′ représente le nombre de cibles orphelines. Un

inconvénient de l’algorithme adaptatif est qu’il peut y avoir plusieurs capteurs qui remplissent le

critère de sélection et l’un d’eux est choisi aléatoirement. Le choix qui est fait à ce moment-là n’est

pas nécessairement le plus judicieux.

Nouvelles heuristiques pour le MLCP

Figure 15 - Algorithme adaptatif

Algorithme Adaptatif (S, T,C)

Input: : Ensemble de cibles ; S: Ensemble de capteurs ; : Couvrant à réparer

Début

I1. Si∃ une cible ∈ et ∄ un capteur ∈ tel que couvre , alorsRetourner∅

I2. Identifier l’ensemble des cibles orphelines (cibles non couvertes par les capteurs de C)

Tant que ≠ ∅Faire

I3. Identifier l’ensemble des cibles critiques ⊂ (cibles couvertes par le nombre minimal

de capteurs de S)

I4. Identifier l’ensemble ⊂ de capteurs qui couvrent le nombre maximal de cibles de

I5. Sélectionner le capteur ∈ qui couvre le nombre maximal de cibles de

I6. Ajouter le capteur au couvrant : = ∪ { }

I7. Supprimer de toutes les cibles couvertes par le capteur

Fintantque

I8. Appeler la procédure suppression_redondance( , ) pour supprimer les capteurs redondants

I9. Retourner le couvrant

FinAlgo

____________________________________________________________________________

Procedure suppression_redondance( , )

Input : T: Ensemble de cibles ; : Couvrant

Début

Pour tout capteur ∈ Faire

Supprimer le capteur du couvrant : = − { }

Pour toute cible couverte le capteur

Si la cible n’est pas couverte par le couvrant C

Alors Ajouter le capteur au couvrant : = ∪ { }

Finsi

Finpour

Finpour

Retourner le couvrant

Nouvelles heuristiques pour le MLCP

Figure 16 - Une instance de MLCP

Figure 17 - Exécution 1 de l’approche réactive avec l’algorithme adaptatif

Ensemble de capteurs = { , , , } ; Ensemble de cibles = { , , }

Durées de vie : = 2 ; = 1.5 ; = 3 ; = 2.5

Relation de couverture : ={ , } ; ={ , } ; = { , } ; ={ }

Etape 1 : Premier appel de l’algorithme adaptatif : adaptatif (S, T, C)

= { , , , } ; = { , , } ; = ∅ ; = 2 ; = 1.5 ; = 3 ; = 2.5

Itération 1 : = { , , } ; = { , } ; = { } ; on choisit ;

Itération 2 : = { } ; = { } ; = { , , } ; on choisit ;

On retourne = { ; }

Etape 2 : On active le couvrant ,

Etape 3 : le capteur épuise sa batterie à la date ∆ = 1.5

Etape 1 : Second appel de l’algorithme adaptatif : adaptatif (S, T, C)

= { , , } ; = { , , } ; = { } ; = 0.5 ; = 3 ; = 2.5

Itération 1 : = { } ; = { } ; = { , } ; on choisit ;

On retourne = { ; }

Etape 2 : On active le couvrant ,

Etape 3 : le capteur épuise sa batterie à la date ∆ = 1.5 + 0.5 = 2

= { , } ; = { , , } ; ; = 2.5 ; = 2.5

Aucun capteur de S ne couvre la cible : Fin de vie du réseau

Nouvelles heuristiques pour le MLCP

Figure 18 - Exécution 2 de l’approche réactive avec l’algorithme adaptatif

Afin de comprendre les limites de l’algorithme adaptatif, examinons la figure 17 et la figure 18 qui

présentent deux traces d’exécutions de l’approche réactive avec l’algorithme adaptatif sur l’exemple

de la figure 16. A l’itération 2 du premier appel de l’algorithme adaptatif, trois capteurs ( , , )

remplissent les conditions pour être sélectionnés dans le couvrant. Sur la figure 17, le capteur choisi

aléatoirement est le capteur , tandis que sur la figure 18, c’est le capteur qui est sélectionné

aléatoirement. En comparant les deux traces d’exécutions, on constate que la durée de vie du réseau

est ∆ = 2dans le premier cas et ∆ = 3.5 dans le second cas, ce qui représente un gain de 75% par

rapport à la durée de vie obtenu dans le premier cas. Cet exemple permet de voir que le choix

aléatoire d’un capteur parmi plusieurs candidats peut avoir un effet considérable (positif ou négatif)

sur la durée de vie du réseau. Nous constatons aussi que dans le second cas, le capteur choisi ( ) ne

couvre aucune des cibles critiques ( , ) de l’itération précédente. Cette observation laisse à penser

qu’une meilleure gestion des cibles critiques peut permettre d’obtenir une plus grande durée de vie

du réseau. C’est dans cette optique que nous proposons dans la suite un nouvel algorithme, à savoir

l’algorithme blacklist.