Maintenant vous connaissez bien la procédure : on trouve comment représenter
les chromosomes, comment les évaluer, puis une fois la population
initialisée on sélectionne, on croise, on mute…
Dernièrement on s’est occupé des chromosomes, de l’évaluation et de la
population. Reste à sélectionner, croiser, muter.
Je ne vais pas trop m’étendre sur le code permettant de faire ceci puisqu’il
s’agit pratiquement d’un copier/coller des classes développées
précédement. Voici le code permettant de résoudre le problème des
8 dames:
J’ai seulement ajouter une méthode display à la classe Individual pour
afficher à l’écran une représentation de la solution. Voilà le programme
en marche:
Cool ! Une solution en 12 générations. J’ai écrit récemment que trouver
une solution pour un échiquier de 8 x 8 cases ne serait pas difficile.
Et bien voilà, c’est fait. J’ai écrit aussi qu’il serait plus intéressant de
voir ce qu’il se passe avec des plateaux plus grands. Si on essaye en
doublant les dimensions:
On aura de grandes chances de voir ce type de sortie:
Plus de 400 générations coincées sur le même résultat. Vous pensiez en
avoir fini avec les extremums locaux ? Et ben non, ils ne sont jamais
bien loin. 3 questions:
Comment je sais que l’algorithme est coinçé dans un extremum local ?
Pourquoi cet algorithme coinçe alors qu’il est écrit comme le
précédent qui lui, ne coinçait pas ?
Comment on s’en sort ?
Avant de répondre à cela, je pense qu’il est plus que temps d’expliquer
quelques petites choses sur les extremums locaux:
Qu’est ce que c’est qu’un extremum local ?
Comment un extremum local se manifeste dans les algorithmes génétiques ?