Aujourd’hui on voit comment sortir de l’extremum local qui bloque notre
algorithme sur le problème des 8 dames.
Pour rappel, on essaie de faire fonctionner l’algorithme sur des échiquiers
de plus grande taille: 16, 20 ou 30 cases.
On a vu dernièrement que le faible taux de mutation (1/n, où n est la
taille de la population) qu’on emploie à du bon et du mauvais.
Il est bon puisqu’en exploitant les chromosomes, il mène assez vite à une
presque solution. Et il est mauvais puisque arrivé à cette presque solution,
qui est un extremum local, il ne permet pas l’exploration d’autres chromosomes.
À priori, on peut penser qu’il suffit d’augmenter le taux de mutation.
Effectivement, on obtiendra souvent de très bons résultats entre 1 et
3%. Mais souvent ne veut pas dire toujours et on restera régulièrement
coincé.
Une solution envisageable est d’avoir un taux de mutation variable. 1/n
au début, puis quand on sent arriver l’extremum local on augmente le taux
pour permettre à l’exploration de reprendre. Enfin, quand on pense être
sorti de l’extremum local, on repasse au taux original.
Voici la nouvelle classe Mutator, j’ai mis le code supplémentaire
entre # ---:
Le nouveau membre @original et les deux nouvelles méthodes permettent
d’augmenter le taux de mutation (de 10% carrément) et de le repasser
à l’original.
Les autres modifications du code sont en rapport avec ceci. Voici le code
complet:
On peut voir dans la méthode run que l’augmentation du taux de mutation
se fait lorsque 5 générations successives on le même meilleur score.
Avec cette méthode, je génère une solution pour un échiquier de 16x16 cases
avec une moyenne de 311 générations.