Prepa Help
Prepa Help › Cours › Informatique, 2e année

Métaheuristiques et recuit simulé : cours, voyageur de commerce et exercices corrigés de prépa

Problèmes d'optimisation difficiles, recherche locale et voisinage, minimum local et global, métaheuristique, recuit simulé : température, probabilité d'acceptation de Metropolis, schéma de refroidissement, critère d'arrêt, réglage des paramètres, voyageur de commerce, sac à dos, comparaison avec les méthodes exactes et les heuristiques constructives.

Les nombres sont ceux du chapitre complet ; chaque filière voit la partie qui correspond à son programme.

Une métaheuristique est un schéma général de recherche, indépendant du problème, qui guide une heuristique pour l'empêcher de rester bloquée sur un optimum local ; elle donne une solution approchée, souvent très bonne, en un temps choisi, sans garantie d'optimalité. Le recuit simulé, inspiré du recuit des métaux, part d'une solution réalisable, tire un voisin au hasard et l'accepte s'il n'est pas plus mauvais, sinon avec la probabilité e−Δ/Te^{-\Delta/T}, la règle de Metropolis ; la température TT baisse à chaque étape, et l'on garde la meilleure solution vue. Le chapitre est au programme d'informatique de deuxième année en MP, PSI et TSI au Maroc. Il enseigne à formaliser un problème d'optimisation, à compter ses solutions, à définir un voisinage et une descente, à distinguer optimum local et optimum global, puis à programmer le recuit en Python, à régler la température initiale, le facteur de refroidissement et l'arrêt sur plusieurs graines, et à évaluer un voisin par différence. Les exemples sont le sac à dos binaire, où la descente partie du camion vide s'arrête à 131 quand l'optimum vaut 132, et le problème du voyageur de commerce : dix lieux donnent 181 440 tournées, et le recuit par inversions atteint la plus courte, 172 km, dans 183 cas sur 200. Les exercices et les problèmes reprennent des sujets d'informatique de Centrale-Supélec, sur le critère de Metropolis, l'allocation des niveaux de vol et un algorithme génétique, et de Mines-Ponts, sur une colonie de fourmis pour le sac à dos.

Ce que tu sauras faire

Certains problèmes d'optimisation ont tant de solutions qu'il est impossible de les examiner toutes, et aucune méthode exacte ne les résout en un temps raisonnable. On cherche alors une très bonne solution, rapidement, sans promesse qu'elle soit la meilleure. Une métaheuristique organise cette recherche ; le recuit simulé en est l'exemple du programme. Il améliore une solution par petites modifications et accepte parfois de reculer, pour ne pas rester bloqué.

L'essentiel : La règle d'acceptation Extrait gratuit

Un extrait de la fiche « L'essentiel » du chapitre. Les démonstrations sont dans le cours détaillé.

En minimisation, Δ=couˆt(s′)−couˆt(s)\Delta = \text{coût}(s') - \text{coût}(s) :

  • Δ≤0\Delta \le 0 : le voisin est accepté ;
  • Δ>0\Delta > 0 : il est accepté avec la probabilité e−Δ/Te^{-\Delta/T}, test random.random() < exp(-delta / T).

En maximisation, Δ=v(s′)−v(s)\Delta = v(s') - v(s) : accepté si Δ≥0\Delta \ge 0, sinon avec la probabilité eΔ/Te^{\Delta/T}. Une dégradation a toujours une probabilité strictement inférieure à 1.

e−Δ/Te^{-\Delta/T} T=100T = 100 T=10T = 10 T=1T = 1
Δ=1\Delta = 1 0,99 0,90 0,37
Δ=10\Delta = 10 0,90 0,37 4,5⋅10−54{,}5 \cdot 10^{-5}
Δ=50\Delta = 50 0,61 0,0067 1,9⋅10−221{,}9 \cdot 10^{-22}

Température haute : on explore. Température basse : on ne fait plus que descendre.

Une méthode du chapitre Extrait gratuit

Un exercice corrigé Extrait gratuit

Dans le chapitre complet

Le cours détaillé, toute la fiche « L'essentiel », 15 méthodes, 20 pièges corrigés, la carte mentale, 34 exercices corrigés, 3 problèmes de concours, les fiches à mémoriser et l'assistant qui répond à tes questions. Les trois premiers chapitres de chaque matière sont offerts avec un compte d’essai gratuit.

Ouvrir l'essai gratuitVoir les offres

Plan du cours

Les méthodes du chapitre

Chaque méthode est une fiche : quand l'utiliser, le rappel de cours, les étapes, la rédaction attendue sur la copie, un exemple traité, les erreurs à éviter.

  1. Définir une métaheuristique et expliquer l'intérêt du recuit simulé
  2. Formaliser un problème d'optimisation
  3. Compter les solutions et juger la force brute
  4. Choisir la représentation d'une solution et écrire sa fonction de coût
  5. Définir un voisinage et écrire un voisin sans modifier la solution courante
  6. Écrire une descente et reconnaître un optimum local
  7. Construire une solution de départ par une heuristique constructive
  8. Écrire le test d'acceptation, en minimisation et en maximisation
  9. Écrire la boucle complète du recuit
  10. Traiter une contrainte : voisins réalisables ou pénalité
  11. Calculer le nombre d'étapes et le coût d'une étape ; évaluer un voisin par différence
  12. Rendre une expérience reproductible et comparer plusieurs exécutions
  13. Régler les paramètres et lire une courbe de coût
  14. Comparer des méthodes et conclure sans promettre l'optimum
  15. Lire et compléter un algorithme d'optimisation décrit par un sujet

Les exercices corrigés

Chaque exercice a ses indications, sa correction rédigée et ce qu'il faut en retenir.

Application directe (13)

Entraînement (16)

Approfondissement (5)

Les problèmes de concours

Des extraits de sujets réels, corrigés en entier, avec la durée conseillée et les méthodes mobilisées.

Questions fréquentes

Qu'est-ce qu'une métaheuristique ?

Un schéma général de recherche d'une bonne solution d'un problème d'optimisation, qui ne dépend pas d'un problème particulier. Il guide une heuristique, le plus souvent une recherche par voisinage, pour l'empêcher de rester bloquée sur un optimum local ; il fait souvent appel au hasard et s'inspire souvent d'un phénomène naturel. Une heuristique est propre à un problème, comme le plus proche voisin pour les tournées ; une métaheuristique s'applique avec les mêmes lignes de code à des problèmes très différents, pourvu qu'on lui donne la représentation d'une solution, sa fonction de coût et son voisinage. Le recuit simulé, les algorithmes génétiques, les colonies de fourmis et la recherche tabou en sont des familles. Seul le recuit simulé est au programme : un sujet qui en emploie une autre la décrit entièrement, comme Centrale-Supélec 2017 pour un algorithme génétique et Mines-Ponts 2025 pour une colonie de fourmis. Dans tous les cas, la solution obtenue est approchée, sans garantie d'être optimale.

Comment fonctionne l'algorithme du recuit simulé ?

On choisit six ingrédients : la représentation d'une solution, sa fonction de coût, le voisinage, une solution initiale réalisable, la loi de refroidissement et le critère d'arrêt. À chaque étape, on tire un voisin s′s' de la solution courante ss, on calcule Δ=couˆt(s′)−couˆt(s)\Delta = \text{coût}(s') - \text{coût}(s), on accepte le voisin selon la règle de Metropolis, puis on diminue la température, en général par T←αTT \leftarrow \alpha T avec 0<α<10 < \alpha < 1 proche de 1. Comme la solution courante peut se dégrader à tout moment, on garde à part la meilleure solution vue et son coût, et c'est elle que l'on renvoie. La boucle s'écrit while T > T_min, jamais while T > 0 : en flottants, la température ne s'annule jamais et la boucle ne s'arrêterait pas.

Quelle est la probabilité d'acceptation du recuit simulé ?

En minimisation, un voisin qui n'est pas plus mauvais, Δ≤0\Delta \le 0, est toujours accepté ; un voisin plus mauvais, Δ>0\Delta > 0, est accepté avec la probabilité e−Δ/Te^{-\Delta/T}. En Python, le test s'écrit d <= 0 or random.random() < exp(-d / T). Cette probabilité diminue quand la dégradation grandit et quand la température baisse : une dégradation de 10 passe avec la probabilité 0,90 à T=100T = 100, 0,37 à T=10T = 10 et 4,5⋅10−54{,}5 \cdot 10^{-5} à T=1T = 1. Température haute, on explore ; température basse, on ne fait plus que descendre. En maximisation d'une valeur vv, on pose Δ=v(s′)−v(s)\Delta = v(s') - v(s) et l'on accepte si Δ≥0\Delta \ge 0, sinon avec la probabilité eΔ/Te^{\Delta/T}. Le signe se vérifie sur une dégradation : une probabilité plus grande que 1 signale une erreur.

Comment choisir la température initiale et le facteur de refroidissement ?

La température initiale se règle d'après les écarts de coût du problème : un bon choix fait accepter au début environ la moitié des dégradations voisines. Trop basse, le recuit n'est qu'une descente ; trop haute pour trop peu d'étapes, il erre au hasard. Le facteur α\alpha fixe la durée : de T0T_0 à TminT_{min}, le refroidissement géométrique fait le plus petit nombre d'étapes kk tel que T0αk≤TminT_0 \alpha^k \le T_{min}, soit 135 étapes de 1000 à 1 pour α=0,95\alpha = 0{,}95 et 688 pour α=0,99\alpha = 0{,}99. Sur la tournée de dix lieux, avec T0=50T_0 = 50 et Tmin=0,1T_{min} = 0{,}1, la tournée la plus courte est atteinte 61 fois sur 200 graines avec α=0,95\alpha = 0{,}95, 183 fois avec 0,99 et 199 fois avec 0,995. Refroidir trop vite revient à une trempe : on reste dans un minimum local. On mesure toujours sur plusieurs graines.

Comment appliquer le recuit simulé au problème du voyageur de commerce ?

Une tournée est une liste qui contient une fois chaque lieu et commence par le lieu de départ ; sa longueur compte le retour au départ. Avec nn lieux et des distances symétriques, il y a (n−1)!/2(n-1)!/2 tournées : 181 440 pour 10 lieux, environ 6,1⋅10166{,}1 \cdot 10^{16} pour 20, et aucune méthode exacte rapide n'est connue. On part de la tournée du plus proche voisin et l'on prend comme voisin l'inversion d'un tronçon t[i..j], qui ne change que deux tronçons et défait les croisements : sa variation de longueur se calcule en O(1)O(1), par D[a][c] + D[b][d] - D[a][b] - D[c][d]. Sur les dix lieux du cours, avec les mêmes réglages, le recuit par inversions atteint 172 km dans 183 cas sur 200, contre 48 avec l'échange de deux lieux. Le voisinage compte autant que les paramètres.

Le recuit simulé donne-t-il toujours la solution optimale ?

Non. On prouve qu'il termine, puisque le nombre d'étapes restantes est un variant, et que deux propriétés restent vraies à chaque tour : la solution courante est réalisable, et la meilleure solution gardée est la meilleure rencontrée. Rien ne prouve qu'elle soit optimale. Deux exécutions avec des graines différentes donnent en général deux résultats différents : on fixe la graine par random.seed(g) pour reproduire une expérience, on mesure la méthode sur beaucoup de graines et l'on garde la meilleure de plusieurs exécutions. Sur le chargement du camion, 135 étapes trouvent l'optimum 132 dans 109 cas sur 200 et restent à 131 dans 46. On conclut donc avec prudence : seule une méthode exacte, quand elle est possible, comme l'énumération des tournées de onze ksour, prouve qu'une solution est la meilleure.

Comment y accéder

Ce chapitre fait partie de l'accès complet. Les trois premiers chapitres de chaque matière (deux par bloc en économie et droit, en management et gestion) sont offerts avec un compte d'essai gratuit. Créer un compte d'essai ou se connecter. Pour l'accès complet et les tarifs, vois les offres.

Toute ta prépa au même endroit

Pour chaque chapitre : le cours, l'essentiel, les méthodes, les pièges, les exercices corrigés, les problèmes de concours, et un assistant qui répond à tes questions. Programmes du Maroc et de France. Avec la plateforme vidéo YOUNESS SCHOOL offerte, dès 600 DH (60 $) par mois, sans engagement.

Prépas scientifiques : voir l'offrePrépas ECS et ECT : voir l'offreTu hésites encore ? Essaie gratuitement Prepa Help.

← Programmation dynamique