Le simulated annealing (refroidissement simulé) est un algorithme intuitif qui permet de rechercher et possiblement trouver le minimum global d'une courbe.
On peut aussi, inversement, rechercher le maximum global d'une courbe.
pointsfor à un pas par tickdraw() qui la remplace, une itération à la fois.Dans la boucle for | Dans le skieur |
|---|---|
let x = 0 (l'initialisation) | initialiser(), appelée une seule fois |
x++ (l'incrément) | avancer() : retourne la prochaine position |
le corps if (y < minimumY) | rechercher() : juste la comparaison |
x < points.length (la condition) | un drapeau this.trouve testé dans avancer() |
Un algorithme systématique de taille N : on vérifie TOUS les POINTS et on retient le vrai minimum.
On trouve le vrai minimum, mais le temps d'exécution est long. Ce n'est pas de l'IA.
On descend en comparant au point voisin, jusqu'à ce que les points voisins remontent.
Dépendant du point de départ, on se retrouve pris dans la première anfractuosité de la courbe.
Même chose, mais plus tolérant : on continue tant que la remontée ne dépasse pas une certaine distance.
On franchit les petites bosses, mais dépendant du point de départ on reste pris dans un minimum local.
Un algorithme semi-systématique, avec du hasard ajouté : on saute partout et on garde le plus petit, jusqu'à ce qu'un certain nombre d'itérations soit effectué.
Dépendant des points générés, on ne se retrouve pas dans le creux du minimum mais dans une pente.
Le hasard ajouté est de plus en plus petit : on se concentre sur la recherche alentour des points les plus bas.
Comme on cherche des ressources en forêt après avoir trouvé les premiers indices.
On identifie la zone du minimum global, puis on converge dedans.
C'est quand la quantité de hasard utilisée par l'algorithme diminue avec le temps…
Un problème pédagogique pour tester les algorithmes d'optimisation : étant donné une liste de villes et les distances entre chaque paire, quel est le plus court chemin qui visite chaque ville une fois et revient au point de départ ?
Démo JSUn problème de plus court chemin qui révèle la carte à mesure de l'exploration : on découvre les routes bloquées seulement en arrivant dessus.
Recomposer une image avec un nombre limité de formes, en minimisant l'écart avec l'original.
Démo nayuki Démo levibyteHoraires, placement de composants, routage, entraînement de modèles : partout où l'espace des solutions est trop grand pour tout vérifier.
Le projet de vjeuxL'animation classique du hill climbing avec simulated annealing : on la regarde ensemble et on observe le hasard qui diminue.
Les versions s'appelaient V0 à V4 les sessions précédentes. Si vous avez commencé avec ces noms-là, voici la correspondance - les deux nomenclatures sont acceptées à la correction.
| Ancien nom | Nouveau nom | Points |
|---|---|---|
| V0 : tout vérifier | VERSION COMPLÈTE | 1 |
| V1 : s'arrêter quand ça remonte | VERSION VOISINS (une des deux au choix) | 2 |
| V2 : tolérer une petite remontée | ||
| V3 : ajouter du hasard | VERSION HASARD (hasard seul) | 1 |
| V4 : le refroidissement simulé | VERSION HASARD (complète) | 2 |