• Aucun résultat trouvé

Application des algorithmes génétiques multicritères au problème étudié

1 Affectation des priorités aux VL

1.4 Algorithmes d’évolution

1.4.3 Application des algorithmes génétiques multicritères au problème étudié

Pour développer notre application d’un algorithme d’évolution adapté à notre contexte, nous avons retenu l’architecture présentée par Bleuler, Laumanns, Thiele et Zitzler sous le nom de projet PISA [73]. Cette architecture a été construite sur la base de deux constatations : d’une part, compte tenu de la complexité importante des algorithmes utilisés, il devient difficile pour un non spécialiste de développer et d’utiliser ce type d’approches, pour résoudre un problème donné. D’autre part, les développeurs d’algorithmes d’évolution ont du mal à trouver des problèmes concrets leur permettant de tester les performances de leurs algorithmes. Les auteurs de [73] ont donc pris le parti de créer une interface simple pour relier ces deux mondes. Ils séparent d’un côté ce qui dépend directement du problème étudié, c'est- à-dire les opérateurs de mutation, de recombinaison, ainsi que la fonction d’évaluation, et de l’autre ils placent tout ce qui est indépendant de la nature du problème, comme la sélection

qui n’utilise que les valeurs calculées pour les individus. L’idée est donc que les spécialistes d’optimisation peuvent développer des modules spécifiques indépendants du problème, que les développeurs d’applications n’auront plus qu’à connecter au module représentant leur problème. Le schéma ci-dessous, tiré de [73], illustre cette architecture.

Figure 43 Architecture PISA

L’architecture ainsi développée présente l’avantage de permettre la réutilisation de modules existants, avec une certaine souplesse. Le lien entre les deux modules est effectué grâce à une interface simple (mode texte). Les données échangées sont soit des données de contrôle (par exemple : « le variateur a fini, c’est au tour du sélecteur »), soit des données relatives aux individus (valeurs pour chaque critère, index des individus choisis dans la population). Certains paramètres communs aux deux modules choisis (taille des populations, archives, pression sélective) sont regroupés au sein d’un fichier texte supplémentaire.

Paramètres globaux choisis

Les paramètres nécessaires dans notre cas ont été fixés comme suit :

Paramètre Description Valeur choisie

α Taille de la population initiale et de l’archive

1000 µ Nombre d’individus sélectionnés pour la

reproduction

100 λ Nombre de nouveaux individus à chaque

génération

10 P Pression sélective (nombre d’individus

dans chaque tournoi)

3 Dim Dimension du problème : nombre de

critères d’évaluation des individus

2

Max_gen Nombre maximal de générations 15000

Il s’agit ici des valeurs fixées en général dans toutes nos expériences. Cependant, il nous a parfois été nécessaire d’utiliser des valeurs différentes, par exemple pour juger de l’influence respective de ces paramètres.

La taille de l’archive retenue peut sembler faible au regard de la complexité du problème, puisque elle est même inférieure à la longueur des gènes. Cependant, certaines études montrent que les algorithmes d’évolution sont peu sensibles à cette taille d’archive. De plus, une taille de population relativement faible rend l’occupation mémoire du programme plus raisonnable, et l’exploitation des résultats plus simple. Nous avons choisi de sélectionner pour la reproduction une portion importante de la population (10%), mais de n’utiliser que 20% de ces individus pour la reproduction (deux parents pour un enfant, choisis aléatoirement parmi µ). Nous pensons ainsi permettre de préserver la diversité de la population en ne sélectionnant pas exclusivement les meilleurs individus. Pour la même raison, nous avons choisi une pression sélective relativement faible. Ces choix ont été établis en fonction de notre compréhension du problème ; l’article [45] déclare d’ailleurs qu’il n’existe pas de « guide théorique du choix des paramètres », car ce choix est intimement lié au problème étudié. Sélecteur choisi

Pour notre application, nous avons choisi pour le sélecteur l’algorithme SPEA2 [74]. En effet, une étude de plusieurs algorithmes d’optimisation multicritère [72] a conclu qu’il était aujourd’hui le meilleur sur la plupart des critères : préservation de la diversité, élitisme, distance moyenne au front de Pareto.

On rappelle ici les principales caractéristiques de cet algorithme :

- la qualité d’un individu est jugée d’après des critères de domination dans la population globale. Plus précisément, on affecte à chaque individu i une valeur S(i), qui représente le nombre d’individus de la population qui sont dominés par i. La qualité d’un individu j est alors obtenue en additionnant les S(i) pour tous les individus i qui dominent j.

- l’estimation de la densité est effectuée par une méthode inspirée de celle de plus proche voisin : les distances à tous les voisins sont calculées, et on ajoute à la qualité de l’individu (décrite dans le point précédent) l’inverse de la distance au k-ième voisin (en général, k est fixé à 1).

- l’algorithme utilise une archive d’individus de taille fixe. En cas de besoin, le tri de l’archive est effectué en enlevant l’individu qui a le plus proche voisin (en cas d’égalité, on regarde le second plus proche voisin).

Le déroulement général de SPEA2 est explicité par l’algorithme suivant :

Données : M taille de la population engendrée, N taille de l’archive, T nombre maximum de générations.

Etape 1 : Initialisation. Création d’une population initialeP , d’une archive initiale 0

videA . 0

Etape 2 : Evaluation des individus. On calcule la qualité de chacun des individus (population P et archivet A ) comme indiqué ci-dessus. t

Etape 3 : Sélection. Recopie de tous les individus non dominés de P et t A danst At+1. Si la taille de At+1 est supérieure à N, on la trie selon le critère cité précédemment. Si elle est inférieure à N, on la remplit d’individus dominés.

Etape 4 : Terminaison. Si un critère de terminaison est vérifié, ou que le nombre de générations calculées est supérieur T, fin de l’algorithme. Le résultat est formé

de l’ensemble des individus non dominés deAt+1.

Etape 5 : Sélection pour la reproduction. On choisit un ensemble de « parents » par tournois successifs au sein deAt+1.

Etape 6 : Variation. On applique les opérateurs de recombinaison et de mutation sur l’ensemble des parents choisis. Les individus résultants constituentP . t+1

1 + = t

t , et on boucle sur l’Etape 2.

Variateur choisi

Conformément à l’architecture PISA, notre variateur représente notre problème. Nous avons fait les choix suivants :

- les individus représentent des configurations différentes, c'est-à-dire qu’une configuration correspond à un choix de priorités pour tous les VL du réseau. Chaque individu est représenté par son gène, codé dans notre application par une chaîne de caractères « 1 » ou « 2 ». Les VL sont ordonnés lors de l’initialisation de l’algorithme, et un « 1 » en ième position indique que le VL numéro i est de priorité haute. On obtient des gènes de longueur le nombre de VL dans le réseau, soit 1008.

- Chaque individu est analysé par une nouvelle exécution de notre programme d’analyse. Les critères de mesure retenus sont ceux présentés plus tôt, c'est-à-dire d’une part la plus grande borne sur les tailles de files d’attente calculées (pour tous les multiplexeurs du réseau), et d’autre part l’espérance des bornes sur le délai calculées dans tout le réseau.

- La variation proprement dite est effectuée parmi les µ individus choisis pour la reproduction, en appliquant λ fois l’opérateur de recombinaison. Pour les λ individus ainsi obtenus, on fixe une probabilité de mutation 0,4.

- l’opérateur de mutation choisi est classique : pour un individu donné, la mutation est effectuée en modifiant les priorités de 2 pourcents des VL, choisis aléatoirement. - l’opérateur de recombinaison est également classique : A partir de 2 individus parents,

on obtient un nouvel individu en concaténant les parties droites d’un parent et gauche de l’autre parent, avec un point de croisement aléatoire (l’index dans la chaîne où l’on coupe les gènes).

- Le choix de la population initiale est très important, comme nous l’illustrerons par la suite. Dans un premier temps, les α premiers individus sont obtenus en tirant aléatoirement des chaînes de caractères binaires de la bonne longueur (celle du génotype).