• Aucun résultat trouvé

Principe de base

Dans le document The DART-Europe E-theses Portal (Page 76-79)

Le principe de base des algorithmes génétique est relativement simple. Son objectif est de trouver une solution optimale à un problème donné. Le problème est généralement caractérisé par un algorithme, qui prend en entrée un certains nombre de paramètres, et qui fournit en résultat un nombre qui correspond au score du jeux de paramètres utilisé. Le principe de l'AG

67

sera de travailler sur un ensemble de jeux de paramètres, chaque jeu étant appelé un génome . Cet ensemble est tout d'abord initialisé aléatoirement, puis amélioré progressivement par un processus d'évaluation des génomes de la population, de sélection des meilleurs individus et de génération d'un nouvel ensemble de génomes. Chaque itération d'un cycle est nommé génération de l'AG. La génération des nouveaux individus est réalisés généralement à l'aide de deux opéra-teur génétiques : la mutation et le croisement. La mutation consiste à modier aléatoirement quelques valeurs dans un génomes, le croisement à la combinaison de deux génomes (nommé le père et la mère) en prenant chaque paramètre dans l'un ou l'autre des génomes.

Le bloc de pseudo-code suivant présente ce principe de fonctionnement de manière plus formelle :

Algorithme 8: Déroulement simplié d'un algorithme génétique

Entrées : Fonction d'évaluation évaluateur : Méthode qui permet d'associer un score à chaque génome

Entrées : Entier générationMax : Nombre de génération à eectuer Entrées : Entier taillePopulation : Taille de la population

Résultat : Génome résultat : Meilleur génome trouvé par l'AG début

population ← Tableau de génomes aléatoires de taille taillePopulation scores← Tableau de taillePopulation scalaires

/* Cette fonction évalue chaque génome de la population et place le

score correspondant dans le tableau scores */

meilleursGénomes ←SélectionMeilleursGénomes(population,scores) /* De nombreuses méthodes de sélections sont possibles, et seront

décrites plus tard */

si scores.meilleurScore() > meilleurScore alors meilleurScore← scores.meilleurScore()

résultat ←population[scores.indexMeilleurScore()]

population← GénérerNouveauxGénomes(meilleursGénomes)

/* Cette fonction réalise une combinaison de croisements et de

mutations sur les génomes contenus dans meilleursGénomes */

jusqu'à génération ≥générationMax retourner résultat

De manière générale, les génomes s'expriment sous la forme d'une chaine de caractères ou d'un tableau de nombres. Cela permet d'avoir une expression simple des opérateurs génétiques.

Dans le cas d'un tableau de nombres, la mutation consiste simplement à choisir aléatoirement un des nombres et de le modier. Pour le croisement, le principe consiste généralement à choisir un point de pivot, et de prendre les éléments avant le pivot chez le père et ceux après le pivot chez la mère. Un opérateur d'élitisme, qui conserve les meilleurs génomes tels quels est souvent régulièrement utilisé (car il permet d'éviter toute diminution du meilleur score de la population).

Figure 3.1 Un schéma simplié du fonctionnement d'un algorithme génétique

La fonction évaluateur est souvent décomposé en deux modules. Le premier consiste en un algorithme qui utilise les données du génome comme paramètres d'entrée et qui fournit un résultat complexe (par exemple un layout dans un dessin de graphe). Le deuxième module est alors une fonction de score qui attribue un score scalaire au résultat fournit par l'algorithme.

Pour poursuivre l'analogie avec le dessin de graphe, cette fonction de score peut se ramener à la mesure d'un critère esthétique sur le dessin, le nombre de croisement d'arêtes par exemple. Le score attribué à chaque génome est nommé tness du génome.

Pour la sélection des meilleurs génomes, de nombreuses méthodes sont possibles. Une des plus courante est la sélection par roue de la fortune. Le principe consiste à associer à chaque génome une probabilité de sélection égale à score du genome

somme des scores. De manière imagée, cela revient à fournir à chaque génome un angle proportionnel à son score sur une roue de la fortune et de sélectionner le génome pointé après avoir lancée la roue. D'autres méthodes comme les sélections à bases de tournois sont aussi régulièrement utilisées.

Ce schéma reste très général, et le déroulement d'un AG dépend énormément de la manières dont ces diérents points sont paramétrés. La sélection des génomes et les modalités de généra-tion des nouvelles populagénéra-tions détermine complètement la manière d'explorer l'espace. Comme nous le verrons par la suite, la structure de l'AG a une très forte inuence sur le résultat, et la structure optimale dépend énormément de l'objectif nal de l'utilisateur.

La gure 3.1 présente un schéma simplié du fonctionnement d'un algorithme génétique.

3.2.1 État de l'art

Les premiers travaux qui ont abouti au concept d'algorithme génétique ont été menés par un groupe de chercheurs dirigés par J. H. Holland à partir des années 1960. Le groupe travaillait sur le concept de programme adaptatif et sur le principe du recuit simulé, qui permet d'améliorer une solution à un problème donné en lui faisant subir des modications successives et en conservant celles qui améliorent la solution. Une mutation qui diminue le score a toutefois une chance d'être acceptée an de faciliter la sortie de maximum locaux. Le passage du recuit simulé aux algo-rithmes génétiques s'est fait en utilisant une population de solutions au lieu d'un seul individu et en ajoutant le principe du croisement qui permet d'obtenir un nouveau candidat en mélangeant deux autres bons candidats. Une étape intermédiaire a été l'utilisation d'une population large pour le recuit simulé et d'une sélection des meilleurs candidats comme base des suivants.

La première présentation formelle des algorithmes génétiques apparaît dans le livre de J H Holland de 1975 [49], dans lequel le principe de base de l'utilisation de génomes et de gènes et des opérateurs génétiques au sein d'un système adaptatif est mis en place. Holland pousse très loin l'analogie avec les systèmes d'évolutions naturels et présente de nombreuses idées issues de cette analogie. Durant les années suivantes, plusieurs travaux ont permis d'étayer et de compléter le modèle de base, en particulier les thèses de De Jong en 1975 [22] et de Goldberg en 1983 [39]

réalisées sous la direction de Holland qui ont apporté de nombreux éléments et les travaux de Grefenstette en 1986 [45] qui portent sur le paramétrage des diérents modules constituants les AG. Toutefois, c'est après la publication d'un livre de Goldberg en 1989 [40] reprenant l'ensemble des éléments mis en place autour des AG que ces derniers vont se diuser plus largement dans la communauté.

À partir de cette date, de très nombreuses applications des algorithmes génétiques à des domaines très diérents vont voir le jour. Dans le cas du dessin de graphe, les premières appli-cations ont été présentées par Groves et Michalewicz en 1990 [46] et Markus en 1991 [63]. La bibliographie de ce domaine d'application sera cependant abordée plus en détail dans le chapitre suivant, dédié à l'utilisation des algorithmes génétiques dans le cas précis du dessin de graphe.

De nombreuses améliorations ont par la suite été apportées aux modèles des AG. Toutes ne pourront bien évidement pas être cités, et le lecteur pourra se tourner vers de nombreux livres écrits sur le domaine, comme ceux de Michalewicz dont la 3e édition est parue en 1996 [69] ou de Melanie, paru la même année [68].

Les paragraphes suivants vont chacun présenter une amélioration des AG proposée par la communauté. Elles ont chacune eu une inuence particulière sur le système mis au point durant cette thèse.

Dans le document The DART-Europe E-theses Portal (Page 76-79)