Les algorithmes génétiques démystifiés 35
On continue aujourd’hui avec la mise en place de l’algorithme de Hill-climbing pour s’assurer que la fonction d’évaluation de nos images est pertinente.
J’ai déjà parlé du Hill-climbing dans cet article. On peut le considérer comme une version très basique d’un algorithme génétique, sans population et sans reproduction. Utile donc, pour tester rapidement et facilement l’évaluation:
Les explications maintenant. À chaque tour on compare les scores obtenus
par la solution courante (la meilleure jusqu’ici) avec une version mutée
de lui-même (opponent
). Si l’opposant est meilleur, il prend la place
de la solution:
var opponent = mutate(copy(solution));
var score_opponent = quality(opponent);
var score_solution = quality(solution);
if (score_opponent > score_solution) {
solution = opponent;
}
J’affiche ensuite la solution courante, toutes les 100 générations:
generation++;
if (generation % 100 == 0) renderIndividual(solution, ctx);
À chaque tour, j’affiche la génération courante et son score:
htmlGeneration.innerHTML = generation;
htmlQuality.innerHTML = score_solution;
Enfin, on stoppe tout au bout de 100.000 essais:
if (generation >= 100000) {
clearInterval(interval);
}
La fonction de mutation est longue, mais simple. On sélectionne au hasard un carré et une de ses propriétés puis on la modifie:
La prochaine fois on verra deux dernières fonctions techniques:
copy
et renderIndividual
et on sera près à faire tourner
notre algorithme.
À demain.