• Aucun résultat trouvé

Optimisation de la distribution des degrés

4.9 Performances des codes LT

4.9.1 Optimisation de la distribution des degrés

Les codes LT sont optimaux lorsque la longueur du code tend vers l’infini (en pratique k = 10000). Cependant, dans le contexte de la télésurveillance médicale, il serait souhaitable de disposer de codes de longueurs réduites (typiquement k =

4.9. PERFORMANCES DES CODES LT 95 100) permettant d’obtenir des temps de latence plus faibles tout en maximisant les performances du code [81,82]. On souhaite donc optimiser la distribution des degrés des codes LT de faibles longueurs dans le but d’augmenter les performances en termes de débit atteignable.

Ces performances dépendent de l’overhead du code. Ainsi la fonction de coût f de l’optimisation est définie comme la valeur de l’overhead (moyen) pour une distribution des degrés donnée. L’optimisation vise à déterminer la distribution de degrés optimale permettant de minimiser la fonction de coût.

Même si l’overhead du code dépend de la distribution des degrés utilisée par l’encodeur, la relation qui lie la distribution des degrés et l’overhead est complexe (non-linéaire et non-différentiable). De plus, le nombre de symboles codés néces-saires au décodage est une variable aléatoire et varie d’une transmission à l’autre ce qui rend la fonction de coût bruitée.

Les algorithmes classiques d’optimisation (simplex, point intérieur, gradient) ne peuvent pas être appliqués pour optimiser la distribution des degrés à cause des caractéristiques de la fonction de coût. En revanche, les méthodes heuristiques peuvent toujours être appliquées. La vitesse de convergence de ces méthodes est cependant inférieure à celle des algorithmes classiques. Les algorithmes génétiques appartiennent à la classe des méthodes heuristiques [83]. Ces algorithmes tentent d’améliorer une solution candidate en imitant le procédé d’évolution naturelle pour obtenir une valeur approchée du minimum de la fonction de coût. L’algo-rithme le plus célèbre de cette famille est sans doute differential evolution.

Differential evolution est une méthode introduite par Storn et Price en 1997 [84] et peut être appliquée sur un très grand nombre de fonctions (non-stationnaire, non-continue ou même bruitée).

Differential evolution minimise la fonction de coût f en maintenant une po-pulation de solutions candidates (appelées agents) constante. À chaque itération, de nouveaux agents sont créés puis combinés à des agents existants. En fin d’ité-ration, l’algorithme ne conserve que les agents les plus adaptés. En considérant la fonction comme une boîte noire, l’algorithme permet d’optimiser une fonction en n’ayant aucune connaissance du gradient ni d’autre information (mise à part la valeur renvoyée par la fonction). Enfin, cet algorithme présente l’avantage de n’avoir que 4 paramètres (NP, G, F, et CR) dont seulement 2 sont des paramètres de contrôle.

Differential evolution est un algorithme évolutionniste qui entretient une po-pulation de NP vecteurs de dimension D (appelés agents).

xi,g ∈ RD, i ∈ [1, N P ], g ∈ [1, G] (4.26) A la génération g = 1, l’algorithme réalise la phase d’initialisation en distribuant les NP agents de manière uniforme dans l’espace de recherche et en calculant la fonction de coût pour chaque agent.

96 CHAPITRE 4. CODAGE DE NIVEAU APPLICATIF L’algorithme itère sur un nombre suffisamment important de générations G afin d’observer une convergence. A chaque génération, une itération est réalisée sur tous les agents dans le but de déterminer leurs nouvelles positions pour la génération g + 1. Pour chaque agent, l’algorithme réalise 3 étapes : la mutation, le crossover et la sélection.

La mutation consiste à choisir pour chaque agent, 3 autres agents a, b et c dans la population puis à calculer le vecteur mutant vi (ou donneur) avec :

vi,g+1= xa,g+ F (xb,g− xc,g) F > 0, (4.27) où F est un facteur constant généralement pris dans [0, 2] qui contrôle l’amplifi-cation de la différence entre 2 agents.

Le crossover permet d’augmenter la diversité du potentiel nouvel agent ui

(trial vector). Pour cela, des composantes du vecteur donneur sont copiées dans le nouvel agent potentiel (préalablement initialisé à xi,g) avec une probabilité CR (distribution de Bernoulli). Le nombre total d’échanges suit une loi binomiale de paramètres B(D, CR).

ui,j,g+1 = vi,j,g+1 si rand() ≤ CR ou j = randi()

xi,j,g si rand() ≥ CR et j 6= randi(), (4.28) où rand() renvoie un nombre aléatoire entre 0 et 1 et randi() renvoie un nombre entier entre 1 et D. La probabilité de crossover CR est comprise entre 0 et 1. Dans les 2 cas, la seconde condition assure que le nouvel agent potentiel possède au moins une composante du vecteur donneur.

La sélection permet de déterminer si l’agent potentiel deviendra membre de la génération suivante. Pour cela l’algorithme évalue la fonction de coût pour l’agent potentiel et la compare à la fonction de coût de l’agent actuel. Si la fonction est plus faible, l’agent actuel est remplacé par le nouvel agent, dans le cas contraire, l’agent actuel est conservé pour la génération suivante.

Remarquons enfin que la sélection est la seule étape de l’algorithme où la fonc-tion est évaluée. Elle est estimée une seule fois (pour l’agent potentiel) puisque la fonction de coût pour l’agent actuel a été estimée lors des sélections des généra-tions précédentes ou lors de la phase d’initialisation. Le pseudocode complet est présenté sur l’algorithme 4.2.

Le tableau 4.1 et la figure 4.11 présentent le résultat de l’optimisation de la distribution des degrés avec l’algorithme differential evolution.

On peut voir sur la figure 4.11 que la distribution des degrés possède une forte probabilité de faibles degrés ce qui permet de limiter la complexité de l’encodage et du décodage. Par exemple, on peut remarquer que dans plus de 90% des cas, le degré d’un symbole est inférieur à 5. De plus, on peut remarquer l’apparition d’un pic pour d = 16 semblable à celui présent dans la distribution robust soliton

4.9. PERFORMANCES DES CODES LT 97

Algorithme 4.2 Differential evolution

1: for g ← 1, G do

2: for i ← 1, NP do . Mutation/Recombinaison

3: sélectionner 3 agents distincts a, b, c

4: n = randi(1, D) 5: for j ← 1, D do 6: if rand() <= CR || j == n then 7: u(j) = x(a)(j) − F (x(b)(j) − x(c)(j) 8: else 9: u(j) = x(i)(j) 10: end if 11: end for 12:

13: score = f(u) . Evaluation/Sélection

14: if score <= cost(i) then

15: x2(i) =trial 16: cost(i) = score 17: else 18: x2(i) = x(i) 19: end if 20: end for 21:

22: for i ← 1, NP do .Mise à jour de la population

23: x(i) = x2(i) 24: end for 25: end for ρ[1,8] 0.0408 0.5271 0.1245 0.0585 0.0723 0.0023 0.0186 0.0095 ρ[9,16] 0.0115 0.0105 0.0077 0.0075 0.0059 0.0053 0.0049 0.0482 ρ[17,24] 0.0032 0.0030 0.0026 0.0021 0.0020 0.0017 0.0016 0.0015 ρ[25,32] 0.0013 0.0012 0.0011 0.0011 0.0010 0.0009 0.0009 0.0009 ρ[33,40] 0.0009 0.0008 0.0008 0.0008 0.0007 0.0006 0.0005 0.0005 Tableau 4.1: Distribution des degrés optimisée avec differential evolution

98 CHAPITRE 4. CODAGE DE NIVEAU APPLICATIF 0 5 10 15 20 25 30 0 0.2 0.4 0.6 d ρ (d )

Figure 4.11: Distribution des degrés optimisée pour k = 100

(voir eq. 4.22). Le degré moyen de la distribution optimisée est égal à 5.25. Enfin, et c’est le paramètre le plus important, l’overhead moyen de cette distribution est égal à 23.4%. A titre de comparaison, la distribution robust soliton de paramètre c = 0.03 et δ = 0.5 (qui parvient à obtenir un overhead de 5% pour k = 10000) est limitée à un overhead de 35% pour k = 100.