Prev Section 7.4: Algorithmes évolutionnaires face aux problèmes difficilesUp Chapitre 7: Évolution in silicoChapitre 8: Evolution et dynamiques économiques : au delà de l’analogie Next
7.5
Application : Généraliser l’optimisation des fonctions à une variable par AG
Vous êtes invité à écrire un programme en NetLogo qui va mettre en oeuvre un algorithme génétique basé sur la sélection par tournoi pour maximiser une fonction que l’utilisateur donnera dans l’interface.
L’algorithme génétique va faire évoluer une population de tortues de taille . va donc correspondre à la population de candidats de solution (les chromosomes), chacun associés à son fitness. Chaque chromosome va alors correspondre à une tortue avec comme variables d’espèce x pour la valeur du candidat de solution, val pour la valeur correspondante de la fonction et fitness qui donne son fitness relatif dans la population actuelle. .
Le fitness de chaque chromosome dans la population, fitness noté ici, correspondra ici à une simple normalisation de la valeur correspondante de la fonction à optimiser :
où et sont respectivement les valeurs minimales et maximales de la fonction dans la population actuelle. Cette normalisation permet de traiter les valeurs négatives pour la fonction.
Après avoir généré de manière aléatoire (pour les candidats et les valeurs de fitness) une population initiale , l’AG va faire évoluer la population, à chaque étape, suivant les trois étapes que nous venons de discuter ci-dessus :
Sélection via une roulette : On produit une nouvelle population en tirant aléatoirement nouveaux chromosomes à partir de la population initiale où chaque chromosome a une probabilité d’être tiré qui est égale à . Si , alors aura tendance à être reproduit dans plus d’exemplaires que dans la population . La sélection par roulette correspond à une probabilité, pour chaque chromosome, d’être reproduite dans la génération suivante selon son fitness comparé au fitness moyen dans la population actuelle :
Croisements de valeurs réelles : Chaque chromosome dans aura la possibilité de participer à un croisement, selon une probabilité . Si le tirage aléatoire (uniforme) décide qu’il peut bénéficier d’un croisement, alors on tirera aléatoirement un autre chromosome et ces deux chromosomes donneront deux descendants, et , selon la méthode de croisement retenue. Par exemple, par le croisement via la moyenne que nous retiendrons ici, nous remplacerons simplement par
Mutations de valeurs réelles : De même; chaque chromosome peut subir aléatoirement une mutation, selon un tirage uniforme effectué avec une probabilité de réalisation de mutation . Si le tirage décide que la mutation a lieu alors, est modifié :
où ces nouvelles valeurs sont tirées de deux tirages uniformes, , .
La nouvelle population étant maintenant composée, on recalcule les fitness de chaque chromosome dans et nous pouvons recommencer. On calcule aussi le fitness moyen et la valeur moyenne de la fonction dans la population pour représenter ces valeurs dans des graphiques dédiés (voir ci-dessous).
L’interface de l’application
Il sera nécessaire de fixer dans l’interface graphique les paramètres de ce problème :
Un champs de texte Fonction dans lequel la fonction à maximiser sera indiquée dans le langage NetLogo.
Le domaine de recherche : un champs de texte de type numérique pour la valeur minimale de , xMin et et un autre pour sa valeur maximale xMax. Si ces valeurs ne respectent pas le domaine de définition de , cela générera des erreurs.
Les paramètres de cet AG très simple :
La taille de la population : taillepop (, curseur dans )
Les probabilités de croisement et de mutation : probCroisement (, curseur dans ) et probMutation (, curseur dans )
Le domaine de recherche fixé par ses bornes min-x et max-x.
Un graphique montrant l’évolution du fitness moyen (moyenne-fitness) dans la population
Un graphique montrant l’évolution des valeurs moyenne (moyenne-valeur) et maximale (max-valeur) de la fonction dans la population.
Un moniteur indiquant la valeur de x donnant la valeur la plus élevée dans la population actuelle pour la fonction à optimiser et un autre qui donne cette valeur maximale (max-valeur)
Un bouton Setup qui exécutera la commande setup qui va initialiser l’application et créera la population initiale en tirant les chromosomes de manière aléatoire, en utilisant les mêmes distributions que pour les mutations.
Un bouton Go! qui va lancer la commande go qui va exécuter l’AG de générations à générations jusqu’à ce que l’utilisateur clique encore une fois sur ce bouton pour arrêter les calculs.
Les expériences
Il y a très peu de paramètres dans cette application, mais sa simplicité permettra aussi de bien comprendre le rôle des différents opérateurs de la sélection :
Mettre les probabilités de croisement et de mutation à zéro, montrera la rôle de la sélection seule. Vous pouvez activer le bouton SETUP pour générer une nouvelle population et observer.
Mettre la probabilité de mutation à zéro, montre ce que peuvent accomplir les opérations de sélection et de croisement ensemble. Vous pouvez alors modifier la probabilité de croisement pour observer son importance.
De manière symétrique, mettre la probabilité de croisement à zéro, vous permettra d’étudier le rôle de la mutation seule avec la sélection et l’effet de sa probabilité en changeant cette dernière.
Etudiez aussi le rôle de la taille de la population dans ces différents cas.
Vous pouvez expérimenter avec ces éléments pour différentes fonctions, plus ou moins difficiles à optimiser.
Prev Section 7.4: Algorithmes évolutionnaires face aux problèmes difficilesUp Chapitre 7: Évolution in silicoChapitre 8: Evolution et dynamiques économiques : au delà de l’analogie Next