Aller au contenu principal

GRASP et colonies de fourmis

Ce que ce chapitre apporte 6 points
  • Expliquer en quoi répéter une construction au hasard diffère de retoucher une solution, et pourquoi ni GRASP ni les fourmis n'entrent dans le squelette chercher.
  • Écrire une construction gloutonne randomisée par liste restreinte de candidats, et dire ce que règle son paramètre alpha.
  • Enchaîner construction et recherche locale (GRASP), et mesurer l'effet de alpha : diversité des tournées, coût d'une répétition, résultat à budget égal.
  • Décrire une fourmi : la probabilité de choisir le trou suivant (phéromone et visibilité), le dépôt proportionnel à la qualité, l'évaporation.
  • Lire ce que la mémoire collective a retenu, et dire ce que changent alpha, bêta, l'évaporation et le nombre de fourmis.
  • Comparer GRASP, les fourmis, le recuit et les redémarrages à budget égal, sur plusieurs graines, et dire ce qui gagne et ce qui perd.
Chez Valdrome Mécanique, la règle du plus proche voisin du chapitre 6 est une recette : pour la plaque P-217, elle rend toujours la même tournée, 692,06 mm, et n'apprend rien de ses erreurs. Les chapitres 7 à 9 ont retouché une solution complète, par la descente, le recuit ou le tabou ; le chapitre 10 a fait évoluer une population. Ce chapitre prend un autre chemin, qui ne retouche rien. Il garde l'idée de construire une tournée trou après trou, laisse au hasard une part du choix, et recommence. Deux manières d'en tirer parti. GRASP améliore chaque construction par une recherche locale et ne garde que la meilleure : il n'a aucune mémoire. Les colonies de fourmis laissent après chaque construction une trace qui guide les suivantes : leur mémoire est collective. Le chapitre mesure ce que chacune apporte, à budget égal avec les méthodes précédentes, et dit sans détour où elles gagnent et où elles perdent.

Reconstruire plutôt que retoucher

Le plus proche voisin du chapitre 6 est une règle sans hésitation : depuis un trou, elle va au plus proche. Aux égalités près, que le nom du trou départage, elle rend la même tournée à chaque exécution. Les chapitres 7, 8 et 9 ont gardé cette tournée comme point de départ et l'ont retouchée : une solution courante, un voisin tiré ou examiné, une décision de s'y déplacer.

Il y a une autre manière d'employer le hasard : ne plus retoucher, et recommencer à construire, avec une règle moins catégorique, qui tire le trou suivant parmi les trous proches au lieu de prendre le plus proche. Chaque exécution donne alors une tournée différente et plausible : la règle n'est plus une réponse, c'est une loi de tirage sur les tournées. Reste à savoir que faire de ces tirages successifs.

Deux réponses.

  • GRASP ne garde rien. Chaque tournée tirée est aussitôt améliorée par une recherche locale, comme au chapitre 7, puis le tirage suivant repart de zéro. Seule la meilleure tournée rencontrée survit.
  • Les colonies de fourmis gardent une trace. Une tournée tirée dépose une quantité de « phéromone » sur les arêtes qu'elle emprunte, d'autant plus grande qu'elle est courte, et les tirages suivants penchent vers les arêtes chargées. La mémoire n'est pas une solution : c'est une matrice de nombres, partagée par toutes les fourmis.

Une construction est bon marché. Sur P-217 elle examine 78 candidats (douze trous possibles au premier pas, puis onze, et ainsi de suite jusqu'à un), sur la plaque de soixante trous 1 830. Comme aux chapitres 8 et 9, le budget se compte en évaluations : un candidat examiné, ou un voisin évalué par une descente, compte pour une.

MéthodeCe qui reste d'un pas à l'autreCe qui se répète
Descente, recuit (chapitres 7 et 8)une solution courantetirer un voisin, l'accepter ou non
Tabou (chapitre 9)une solution courante et une liste d'interditsexaminer tout le voisinage
GRASPrien, sauf la meilleure tournée vueconstruire au hasard guidé, puis descendre
Fourmisune matrice de phéromoneconstruire m tournées guidées par la matrice, puis la mettre à jour

Les deux méthodes ont chacune un paramètre nommé alpha, qui n'a pas le même sens : dans GRASP, un nombre entre 0 et 1 qui règle la largeur d'une liste ; dans une colonie, un exposant qui règle le poids de la phéromone. Le texte écrit « alpha de la liste » quand une confusion est possible.

GRASP : un glouton dont le choix est tiré au hasard

La liste restreinte

GRASP est l'acronyme anglais de Greedy Randomized Adaptive Search Procedure : une procédure de recherche gloutonne (elle construit un élément à la fois, en préférant ce qui paraît le mieux), randomisée (le hasard choisit parmi les bons candidats), adaptative (la liste des bons candidats est recalculée à chaque pas), suivie d'une recherche locale, et répétée.

Liste restreinte de candidats

À chaque pas de la construction, chaque trou restant est un candidat, dont le coût est sa distance au dernier trou percé (au départ de l'outil, pour le premier pas). Soient cmin⁡c_{\min} et cmax⁡c_{\max} le plus petit et le plus grand de ces coûts. Pour un réel α\alpha entre 0 et 1, la liste restreinte regroupe les candidats dont le coût est au plus

cmin⁡+α (cmax⁡−cmin⁡)c_{\min} + \alpha\,(c_{\max} - c_{\min})

Le trou percé est tiré au hasard dans cette liste, chaque trou avec la même probabilité.

Le paramètre alpha se lit comme un curseur. À 0, la liste ne garde que le plus proche : c'est la règle du chapitre 6, avec le même départage des égalités. À 1, elle garde tous les trous restants : c'est un ordre tiré au hasard. Entre les deux, plus alpha est grand, plus la liste est longue et plus le tirage est libre. Attention à l'échelle : la liste se mesure en fraction de l'écart cmax⁡−cmin⁡c_{\max} - c_{\min} des candidats qui restent, et cet écart vaut souvent plusieurs centaines de millimètres sur la grande plaque. Les valeurs de alpha qui comptent sont donc petites, quelques centièmes.

Une répétition de GRASP est une construction suivie de la descente 2-opt au meilleur voisin du chapitre 7, depuis la tournée construite, jusqu'à un optimum local. GRASP fait autant de répétitions que le budget en permet, et rend la meilleure tournée. Il n'y a ni solution courante ni voisin tiré : la construction fait l'exploration, la recherche locale fait la retouche.

Une répétition, pas à pas

La figure suivante rejoue une répétition sur la plaque P-217. Le lecteur règle alpha, pose les trous un par un en voyant à chaque pas la liste des candidats et celui que le hasard a tiré, puis regarde la recherche locale améliorer la tournée construite. Chaque répétition terminée s'ajoute à un histogramme et à un tableau qui garde les résultats de chaque valeur de alpha essayée. La meilleure tournée connue n'est donnée qu'à la demande.

GRASP : glouton randomisé, puis recherche locale12 trous, départ de l'outil : le losange
Trous posés
aucun
Chemin déjà parcouru
aucune
Candidats et voisins examinés
0
Graine de la répétition
pas encore tirée
T1T2T3T4T5T6T7T8T9T10T11T12

Trait plein : le chemin posé, puis la tournée. Cercle en pointillés et trait pointillé : les trous de la liste. Cercle plein : le trou tiré.

Un pas pose un trou : la liste des candidats s'affiche ici, avec celui que le hasard a tiré.
Résultats avec alpha = 0,2 : 0 répétition
Chaque répétition terminée ajoutera un résultat ici.

Chaque barre compte les répétitions dont la longueur, après recherche locale, tombe dans son intervalle.

Disponible après cinq répétitions terminées avec ce alpha.
Régler alpha, puis avancer d'un pas : chaque trou posé vient d'une liste de candidats, et le hasard choisit dans la liste.
La plaque P-217, une répétition de GRASP. Le losange est le départ de l'outil.
À manipuler
Avancer pas à pas avec alpha à 0,2. À chaque pas, le tableau classe les trous restants par distance au dernier trou percé, dit lesquels la liste retient et lequel le hasard a tiré ; sur la plaque, les trous de la liste sont cerclés en pointillés. Terminer la construction, puis avancer dans la recherche locale : la tournée construite reste en tirets fins sous la tournée améliorée. Lancer « Nouvelle répétition » plusieurs fois : deux répétitions ne posent pas les mêmes trous. Passer alpha à 0 : la liste n'a plus qu'un trou, il n'y a plus rien à tirer, et chaque répétition redonne la même tournée. Passer alpha à 1 : la liste contient tous les trous restants. Lancer dix répétitions d'un coup pour chaque valeur de alpha, et lire dans le tableau la colonne « Tournées distinctes ». Quand le résultat paraît satisfaisant, cliquer « Comparer à la meilleure connue », actif après cinq répétitions terminées avec la valeur de alpha en cours.

GRASP sur soixante trous

Douze trous se suivent à la main. Pour éprouver la méthode, voici la plaque P-600 des chapitres 7 à 9 : soixante trous engendrés par une formule, sur 600 par 400 mm. La liste des candidats y devient longue, et le tableau n'en montre que les plus proches. La figure garde les résultats de chaque valeur de alpha essayée, pour les comparer ; aucune référence n'est donnée avant l'essai.

GRASP : glouton randomisé, puis recherche locale60 trous, départ de l'outil : le losange
Trous posés
aucun
Chemin déjà parcouru
aucune
Candidats et voisins examinés
0
Graine de la répétition
pas encore tirée

Trait plein : le chemin posé, puis la tournée. Cercle en pointillés et trait pointillé : les trous de la liste. Cercle plein : le trou tiré.

Un pas pose un trou : la liste des candidats s'affiche ici, avec celui que le hasard a tiré.
Résultats avec alpha = 0,05 : 0 répétition
Chaque répétition terminée ajoutera un résultat ici.

Chaque barre compte les répétitions dont la longueur, après recherche locale, tombe dans son intervalle.

Disponible après cinq répétitions terminées avec ce alpha.
Régler alpha, puis avancer d'un pas : chaque trou posé vient d'une liste de candidats, et le hasard choisit dans la liste.
La plaque P-600, soixante trous. Chaque valeur de alpha essayée garde ses résultats dans le tableau.
À manipuler
Commencer avec alpha à 0 : lancer dix répétitions, puis dix de plus. Toutes donnent la même tournée. Passer alpha à 0,02, puis 0,05, 0,2 et 1, avec dix répétitions à chaque fois, et lire dans le tableau les colonnes « Tournées distinctes », « Construction moyenne » et « Médiane ». Comparer la longueur moyenne des constructions à la médiane après recherche locale : la première se dégrade beaucoup quand alpha grandit, la seconde beaucoup moins. Suivre ensuite une répétition pas à pas avec alpha à 1, puis avec alpha à 0,05, et comparer le compteur « Candidats et voisins examinés » à la fin : c'est ce que coûte une répétition. Chaque lecteur a ses propres tirages, dont la graine s'affiche, et rien ne garantit de voir la meilleure tournée.

Le code, et l'effet de alpha mesuré

Le code suivant réunit les deux plaques. La descente est celle du chapitre 7, écrite avec numpy : les variations des 1 769 voisins 2-opt d'un balayage de soixante trous sont calculées d'un coup, et le meilleur est retenu ; le résultat et le compte des évaluations sont ceux de la version à boucles. Le budget de GRASP compte tout ce qui est examiné, les 1 830 candidats d'une construction comme les voisins de la descente, et une répétition qui ne tient plus dans le budget est abandonnée.

main.py
Sortie
>_ Prêt à exécuter…

Les trois premiers pas, avec alpha à 0,2 et la graine 1, montrent la règle au travail. Depuis le départ, douze candidats : T1 est à 25 mm, T7 à 76 mm. Le seuil de la liste vaut 25+0,2×(208−25)25 + 0{,}2 \times (208 - 25), soit 62 mm : seul T1 y entre, et il est tiré. Au deuxième pas, depuis T1, T7 (52 mm) et T9 (67 mm) sont dans la liste, pas T10 (81 mm), et le hasard prend T7. Au troisième, T10 et T9 sont à égalité à 30 mm, T11 à 42 mm : les trois sont dans la liste, et le hasard tire T9. Sans le hasard, la règle aurait pris T10 (le nom départage l'égalité) : c'est ce que fait alpha nul.

Sur douze trous, le glouton pur suffit. Le tableau de la plaque P-217 porte sur cent répétitions par valeur de alpha. À alpha nul, il n'y a qu'une tournée distincte, et la recherche locale la mène à l'optimum, 633,23 mm, cent fois sur cent : depuis le plus proche voisin, le 2-opt y arrive en trois pas (chapitre 7). À alpha 0,1, les cent répétitions donnent 58 constructions différentes, et seules 32 arrivent à l'optimum ; à alpha 1, 52 sur 100. Le hasard est ici un handicap : GRASP ne sert à rien quand le glouton suivi de la recherche locale arrive déjà au bout.

Sur soixante trous, il ne suffit plus. Le glouton pur suivi du 2-opt s'arrête à 2 944,01 mm, à 5,6 % de l'optimum démontré, 2 788,70 mm (chapitre 7), et il s'y arrête toujours : à alpha nul, les onze répétitions que permet le budget refont la même tournée, et 300 000 évaluations donnent un seul résultat. Le réglage de alpha se fait sur les graines 100 à 107, à 300 000 évaluations, et le jugement sur d'autres graines, 0 à 9 (règle du chapitre 8). Voici le tableau de réglage.

alphaMeilleureMédianePireRépétitionsConstruction moyenneAprès 2-opt (moyenne)Évaluations par répétition
02 944,02 944,02 944,011,03 5892 94426 596
0,022 840,42 849,02 923,010,83 4772 93526 678
0,052 812,52 835,42 909,57,83 6322 91136 525
0,22 806,42 873,62 938,63,95 3512 93070 479
12 844,72 881,22 916,22,014 8092 917107 638

Trois lectures. La construction se dégrade vite : de 3 589 mm à alpha nul à 14 809 mm à alpha 1, où elle n'est plus qu'un ordre au hasard. La recherche locale rattrape la qualité : la longueur moyenne après 2-opt reste entre 2 911 et 2 944 mm quelle que soit la valeur de alpha, l'écart entre deux lignes étant du même ordre que celui entre deux graines. Mais elle le paie : depuis un ordre au hasard, une répétition coûte 107 638 évaluations, quatre fois plus que depuis une construction proche du plus proche voisin (26 596), et à budget égal on ne fait que 2 répétitions au lieu de 11. Un alpha trop grand ne fait pas perdre en qualité par répétition, il fait perdre en nombre de répétitions. Un alpha nul n'en fait perdre aucune, mais elles sont toutes identiques : dès 0,02, la médiane (2 849,0) passe 95 mm sous celle du glouton pur.

Le meilleur des cinq réglages est 0,05, sur un plateau large, de 0,02 à 0,2 : le tableau ne dit pas que 0,05 est le bon alpha. Jugé sur les graines 0 à 9, alpha 0,05 donne une meilleure tournée à 2 797,4 mm, une médiane à 2 827,1 mm (1,4 % de l'optimum) et une pire à 2 881,8 mm ; alpha 1 donne 2 805,2, 2 901,4 (4,0 %) et 2 977,4 mm. Construire un ordre entièrement au hasard puis descendre, en répétant, c'est ce que font les redémarrages du chapitre 7 : GRASP à alpha 1 est les redémarrages, et le chapitre 12 les mesure au même budget, à 4,6 %. Tout l'intérêt de la méthode est dans la valeur intermédiaire de alpha, un compromis entre la diversité des constructions et leur qualité de départ, qui se règle en mesurant et dépend du problème : sur douze trous, le meilleur alpha est 0.

Vérification rapideon peut se reprendre

1.À alpha nul, GRASP sur P-600 refait onze fois de suite la même tournée à 2 944,01 mm dans le budget. Pourquoi ?

2.À alpha 1, la longueur après 2-opt est à peu près la même qu'à alpha 0,05, et pourtant GRASP y fait moins bien à budget égal. Pourquoi ?

Certaines versions de GRASP fixent la liste par un nombre de candidats (les k plus proches) plutôt que par un seuil. Le seuil s'adapte à l'écart entre les candidats, le nombre non : sur des distances très inégales, comme celles d'une plaque de trous, le seuil suit mieux la géométrie.

Les colonies de fourmis

La fourmi et la trace

Les fourmis réelles cherchent leur nourriture au hasard et rentrent en laissant une trace chimique, la phéromone, que les suivantes tendent à suivre. Une piste courte est parcourue plus souvent dans le même temps : elle se renforce, pendant que les pistes délaissées s'évaporent, et la colonie finit par emprunter le chemin court sans que personne décide. L'optimisation retient de cette histoire trois ingrédients : des constructions tirées au hasard, une trace laissée en proportion de la qualité, une trace qui s'efface.

Colonie de fourmis (Ant System)
  • La phéromone τij\tau_{ij} est un nombre par arête entre deux points (le départ de l'outil est un point), le même dans les deux sens. Au départ, c'est la même valeur partout.
  • La visibilité ηij=1/dij\eta_{ij} = 1 / d_{ij} est l'inverse de la distance. Elle ne change jamais.
  • À chaque itération, mm fourmis construisent chacune une tournée complète depuis le départ. Depuis un trou ii, une fourmi choisit le trou suivant jj parmi les trous restants avec la probabilité
pij=τijα ηijβ∑kτikα ηikβp_{ij} = \frac{\tau_{ij}^{\alpha}\,\eta_{ij}^{\beta}}{\sum_{k} \tau_{ik}^{\alpha}\,\eta_{ik}^{\beta}}
  • Puis la phéromone s'évapore : τij←(1−ρ) τij\tau_{ij} \leftarrow (1 - \rho)\,\tau_{ij} sur toutes les arêtes.
  • Puis chaque fourmi dépose 1/L1 / L sur chaque arête de sa tournée, LL étant la longueur de cette tournée : plus elle est courte, plus le dépôt est grand.

Quatre réglages, dont chacun a un rôle et un extrême qui casse quelque chose.

RéglageCe qu'il règleTrop basTrop haut
alphale poids de la phéromoneles fourmis ignorent la trace : ce sont des plus proches voisins randomisésles fourmis suivent la trace sans plus rien tenter : la colonie se fige
bêtale poids de la visibilité, 1/d1/dles fourmis ignorent les distances : au début, un ordre au hasardla fourmi prend presque toujours le trou le plus proche
évaporation ρ\rhola part de phéromone perdue à chaque itérationrien ne s'efface : une mauvaise piste trouvée tôt reste attirantetout s'efface : la colonie n'a plus de mémoire
nombre de fourmis mmles tournées construites par itérationpeu d'exploration par itérationbeaucoup d'exploration, mais chaque fourmi coûte

Au départ, la phéromone vaut m/L0m / L_0 sur toute arête, où L0L_0 est la longueur de la tournée du plus proche voisin : mm fourmis aussi bonnes que la règle gloutonne, toutes d'accord sur une arête, y déposeraient exactement cette quantité. Le nombre exact compte moins que ce rapport, celui d'un dépôt à ce qui est déjà sur l'arête : il décide de la vitesse à laquelle la colonie apprend.

Le choix d'une fourmi, en chiffres

Un exemple à la main, sur la plaque de Valdrome. Une fourmi est au trou T7 en (70 ; 30), et il lui reste trois trous à choisir : T10 en (100 ; 30), à 30 mm, T9 en (70 ; 60), à 30 mm, et T11 en (100 ; 60). La phéromone vaut 0,02 sur l'arête vers T10, 0,05 vers T9 et 0,01 vers T11.

Le choix d'une fourmi

  • 1.

    Avec alpha = 1 et bêta = 2, quelle est la probabilité que la fourmi choisisse T9 ? (Distances : 30 mm pour T10 et T9, et racine de 1800, soit environ 42,43 mm, pour T11.)

  • 2.

    Avec bêta = 0, la visibilité disparaît. Quelle est alors la probabilité de T9 ?

  • 3.

    Avec alpha = 0 et bêta = 2, la phéromone disparaît. Quelle est la probabilité de T9 ?

  • 4.

    La phéromone initiale vaut m divisé par la longueur du plus proche voisin. Pour 10 fourmis et 692,06 mm, quelle est-elle ?

  • 5.

    Après une itération à évaporation 0,5, une arête empruntée par une seule fourmi, dont la tournée mesure 640 mm, porte combien de phéromone ?

Trois probabilités pour un même choix. Avec les deux ingrédients, T9 l'emporte deux fois sur trois, et T11, plus loin et moins chargé, a une chance sur quinze. Sans la visibilité, la phéromone seule donne 62,5 % à T9. Sans la phéromone, T9 et T10 sont à égalité et T11 vaut 20 %. C'est le produit des deux qui décide, et les exposants qui règlent lequel des deux pèse le plus.

Douze trous, itération après itération

La figure suivante fait mener une colonie sur la plaque P-217. Chaque arête est d'autant plus épaisse qu'elle porte de phéromone : on voit la mémoire collective se former. Les tournées des fourmis de la dernière itération sont tracées en fins pointillés, et la meilleure tournée vue en tirets épais. La courbe suit la longueur des tournées ; la seconde courbe suit la part de la phéromone qui repose sur les arêtes de la meilleure tournée, quantité qui vaut 17 % quand elle est répartie également et 100 % si tout est sur elle.

Une colonie de fourmis, réglée et regardée12 trous, départ de l'outil : le losange
Variante
Itération
0
Meilleure vue
aucune
Moyenne de l'itération
aucune
Phéromone sur la meilleure
pas encore
Candidats examinés
0
Graine
pas encore tirée
T1T2T3T4T5T6T7T8T9T10T11T12

Épaisseur des traits pleins : la phéromone de l'arête. Traits fins pointillés : les tournées des fourmis de la dernière itération. Tirets épais : la meilleure tournée vue.

Les longueurs se tracent ici.

Longueur en mm. Tirets épais : meilleure tournée vue. Points : meilleure de l'itération. Trait fin : moyenne des fourmis de l'itération.

Part de la phéromone sur les arêtes de la meilleure tournée

100 %0

Trait plein : la part sur la meilleure tournée. Pointillés : la part quand la phéromone est répartie également (17 %).

Disponible après 5 itérations.
Avancer d'une itération : les fourmis construisent chacune une tournée, la phéromone s'évapore, puis chaque fourmi dépose. Chaque colonie tire sa propre graine.
Une colonie de fourmis sur la plaque P-217. Chaque colonie tire sa propre graine, affichée dans les compteurs.
À manipuler
Avancer d'une itération, puis de dix, en regardant les traits épais s'accrocher aux arêtes que les bonnes tournées partagent, et le compteur « Phéromone sur la meilleure » monter. Puis changer un réglage à la fois, la colonie repartant de zéro. Passer bêta à 0 : la fourmi ignore les distances, et les tournées de l'itération sont longues. Passer alpha à 0 : les traits s'épaississent toujours, puisque les fourmis déposent, mais aucune n'en tient plus compte, et la moyenne des fourmis n'a plus de raison de descendre. Baisser l'évaporation à 5 % : les traces durent, les premiers chemins s'incrustent. La monter à 95 % : la colonie oublie presque tout. Comparer un nombre de fourmis de 2, de 10 et de 40, en lisant « Candidats examinés », qui dit ce que chaque itération coûte. « Rejouer cette graine » refait exactement la même colonie ; « Recommencer, autre graine » en tire une neuve. Essayer enfin les deux variantes : dans « Max-Min », seule la meilleure fourmi de l'itération dépose et la phéromone reste entre deux bornes ; dans « Max-Min avec 2-opt », sa tournée est d'abord améliorée par la descente du chapitre 7. « Comparer à la meilleure connue » s'active après cinq itérations.

Le code, et ce que les réglages changent

Le code suivant est l'Ant System sur les douze trous. La fonction roulette tire un rang avec une probabilité proportionnelle à son poids : un nombre entre 0 et le total, puis on cumule les poids jusqu'à le dépasser. La fonction colonie suit exactement les quatre étapes de la définition, et son journal garde, à chaque itération, la meilleure longueur, la moyenne de l'itération et la part de la phéromone sur la meilleure tournée.

main.py
Sortie
>_ Prêt à exécuter…

Le premier constat porte sur la visibilité. Depuis le départ, avec une phéromone uniforme, la probabilité de T1, à 25 mm, vaut 8 % à bêta 0 (tous les trous sont équiprobables), 31 % à bêta 1 et 90 % à bêta 3 : la visibilité tire les fourmis vers le plus proche, et bêta règle la force de cette traction.

Le deuxième constat est la mémoire qui se forme. Sur les trente itérations de la graine 0, la meilleure tournée vaut 683,8 mm jusqu'à la cinquième itération, 635,8 mm à la dixième, et n'en bouge plus. La part de la phéromone sur ses arêtes est de 17 % au départ (13 arêtes sur 78), de 24 % après la première itération, de 47 % à la cinquième et de 66 % à la trentième. En revanche, sur les itérations affichées, la moyenne des fourmis reste entre 744 et 828 mm : les fourmis explorent encore, la colonie ne s'est pas réduite à une tournée. La mémoire est un biais, pas une décision.

Le troisième est le tableau des réglages, où chaque ligne change un seul réglage de la ligne de référence, sur huit graines.

RéglageMeilleure tournée (médiane)PireCandidats examinés
référence : 10 fourmis, alpha 1, bêta 3, évaporation 0,5649,1672,823 400
alpha 0, sans mémoire667,4691,523 400
bêta 0, sans visibilité780,4837,823 400
évaporation 0,05652,7669,523 400
évaporation 0,9664,1702,723 400
2 fourmis700,0729,24 680

Ce qu'on peut lire, et ce qu'on ne peut pas. La visibilité est le levier le plus fort : sans elle, la colonie perd 131 mm sur la médiane, elle tire des ordres presque au hasard. La mémoire compte : alpha 0 perd 18 mm, soit 2,9 % de l'optimum de P-217, 633,23 mm (chapitre 6). Une évaporation trop forte fait oublier : à 0,9, la colonie perd 15 mm. Deux fourmis ne suffisent pas : elles coûtent cinq fois moins et perdent 51 mm. En revanche, la différence entre 649,1 et 652,7 mm, entre une évaporation de 0,5 et de 0,05, n'est pas un résultat : une médiane de huit graines bouge de quelques millimètres d'un jeu de graines à l'autre. Et aucun réglage n'atteint l'optimum dans ce tableau : une colonie sans recherche locale reste à 2,5 % de lui en médiane, alors que GRASP à alpha nul l'atteignait cent fois sur cent. (Un essai plus long, 300 itérations sur vingt graines, ne l'atteint pas davantage : la meilleure colonie s'arrête à 635,83 mm.)

Vérification rapideon peut se reprendre

Sur P-217, remettre bêta à 0 coûte 131 mm de médiane à la colonie, remettre alpha à 0 en coûte 18. Que dit cet écart ?

La même idée sur les postes des opérateurs

Rien n'oblige la fourmi à construire une tournée. Pour les huit opérateurs et les huit postes du chapitre 1, la représentation est poste_de[i], une permutation. Une fourmi affecte les opérateurs un par un, dans l'ordre 0 à 7, chacun à un poste encore libre ; la phéromone est sur les couples (opérateur, poste), une matrice de huit lignes et huit colonnes, non symétrique cette fois ; la visibilité est l'inverse du temps. Ce sont les mêmes quatre étapes : seules changent la construction et la place du dépôt. La roulette est ici celle de la bibliothèque : hasard.choices(libres, poids) tire un élément avec une probabilité proportionnelle à son poids, comme la fonction roulette du code précédent.

main.py
Sortie
>_ Prêt à exécuter…

Les 600 fourmis de la graine 0 (soixante itérations de dix) rendent une affectation à 98 minutes, pour un optimum de 95. Le plus instructif est la matrice : pour six opérateurs sur huit, plus de 97 % de la phéromone de la ligne repose sur un seul poste. La colonie s'est figée : une ligne dont la phéromone est presque entièrement sur un poste ne laisse presque plus une fourmi en choisir un autre, et l'exploration s'est éteinte sur une affectation qui n'est pas la meilleure. C'est le risque de toute mémoire qui ne s'efface pas assez vite, et c'est la raison d'être des bornes de la variante Max-Min, plus bas.

À budget égal, le résultat est net. À 1 000 évaluations, les colonies réglées sur les graines 100 à 109 ne trouvent l'optimum sur aucune des vingt graines, avec une médiane à 105 minutes et une pire à 115. À 3 000, la médiane est de 101 minutes, la pire de 109, toujours 0 fois sur 20. Les redémarrages, que le chapitre 12 mesure au même budget, l'atteignent 15 fois sur 20 à 1 000 évaluations et 20 fois sur 20 à 3 000, avec une médiane de 95. Les fourmis perdent, et nettement. L'espace ne compte que 40 320 affectations, les descentes y sont bon marché, et une mémoire n'a pas le temps de se former en quelques dizaines de fourmis. L'ordonnancement de la machine se traiterait de la même façon, la phéromone portant sur les couples (position, ordre de fabrication).

Combien de temps une piste délaissée reste-t-elle attirante ? La question décide de la vitesse à laquelle une colonie se fige, et la réponse la plus naturelle est fausse.

Dix itérations pour effacer une piste

Une seule étape est fausse. Désigner laquelle.

Un camarade veut savoir combien de temps une arête délaissée reste attirante, dans une colonie à évaporation 0,1. Pour éprouver sa démarche : la part de la phéromone initiale qui reste sur une arête qu'aucune fourmi n'emprunte pendant kk itérations.

Les fourmis sur la grande plaque

Sur P-600, une fourmi examine 1 830 candidats : un budget de 300 000 évaluations couvre 163 fourmis, soit seize itérations complètes de dix. C'est peu pour qu'une mémoire se forme. Le code suivant compare l'Ant System à ses deux variantes, sur dix graines, à budget égal. La variante Max-Min (MMAS en anglais) change deux choses : seule la meilleure fourmi de l'itération dépose, et la phéromone est bornée entre h/(2n)h / (2n) et h=1/(ρL∗)h = 1 / (\rho L^*), où L∗L^* est la meilleure longueur vue. Le rapport entre l'arête la plus chargée et la moins chargée ne dépasse donc jamais 2n2n, 120 sur soixante trous : aucune arête ne devient négligeable, et la colonie ne peut pas se figer comme celle des opérateurs. La phéromone y démarre à sa borne haute. La troisième ligne, Max-Min et 2-opt, améliore la meilleure tournée de l'itération par la descente 2-opt du chapitre 7 avant de la déposer. La dernière remet alpha à 0 dans cette version : la même colonie, sans mémoire, pour mesurer ce que la phéromone apporte. Le budget compte les candidats des fourmis et les voisins de la descente. Le début du code (la plaque, les distances, la descente) reprend celui du bloc de GRASP, puisque chaque bloc s'exécute seul.

main.py
Sortie
>_ Prêt à exécuter…

Le tableau donne, à 300 000 évaluations, les écarts à l'optimum démontré de 2 788,70 mm.

ColonieMeilleureMédianePire
Ant System3 071,83 124,5 (12,0 %)3 298,3
Max-Min2 953,73 055,2 (9,6 %)3 189,0
Max-Min et 2-opt2 808,42 821,8 (1,2 %)2 850,2
Max-Min et 2-opt, alpha 02 801,52 832,0 (1,6 %)2 863,4

Trois lectures. Max-Min fait mieux que l'Ant System (9,6 % contre 12,0 %), ce qui justifie la variante : quand la mémoire ne se nourrit que de la meilleure fourmi, elle se concentre sur ce qui marche. Mais c'est la recherche locale qui fait basculer : de 9,6 % à 1,2 %. La mémoire, elle, pèse peu : remettre alpha à 0 dans la version qui gagne coûte 10 mm de médiane (1,2 % contre 1,6 %), moins que l'écart entre la meilleure et la pire graine d'une même ligne, de 42 à 62 mm. À un million d'évaluations (le même code avec BUDGET = 1_000_000, exécuté hors du navigateur, qui interrompt un bloc trop long), l'écart reste de cet ordre, 1,0 % contre 1,2 %. Le réglage se fait, pour chaque variante, sur les graines 100 à 104, parmi trois essais qui ne diffèrent que par le nombre de fourmis et l'évaporation ; bêta vaut 5, que des essais préalables sur des graines de réglage avaient préféré à 2 et à 3.

Comparer honnêtement, à budget égal

La méthode de comparaison est celle que pose le chapitre 12 : plusieurs graines, la meilleure, la médiane et la pire, un budget égal en évaluations, un écart à l'optimum démontré, et des réglages faits sur d'autres graines que celles qui jugent. Le tableau met côte à côte, pour les mêmes dix graines (0 à 9) et les mêmes budgets, les méthodes de ce chapitre, le recuit et les redémarrages, que le chapitre 12 mesure. Chaque cellule donne la meilleure, la médiane et la pire tournée, puis l'écart de la médiane à l'optimum de 2 788,70 mm. Une réserve : les redémarrages comptent une descente interrompue pour ce qu'elle a atteint, alors que GRASP et les colonies abandonnent la répétition qui ne tient plus dans le budget.

Méthode300 000 évaluations1 000 000 d'évaluations
Recuit (chapitre 8)2 808,4 / 2 831,9 / 2 850,4 (1,5 %)2 788,70 / 2 797,7 / 2 839,2 (0,3 %)
Redémarrages, meilleur voisin (chapitre 7)2 821,6 / 2 916,2 / 2 969,2 (4,6 %)2 788,70 / 2 849,9 / 2 907,0 (2,2 %)
GRASP, alpha 02 944,0 / 2 944,0 / 2 944,0 (5,6 %)2 944,0 / 2 944,0 / 2 944,0 (5,6 %)
GRASP, alpha 0,052 797,4 / 2 827,1 / 2 881,8 (1,4 %)2 797,4 / 2 813,5 / 2 849,3 (0,9 %)
GRASP, alpha 12 805,2 / 2 901,4 / 2 977,4 (4,0 %)2 805,2 / 2 829,8 / 2 921,1 (1,5 %)
Fourmis, Ant System3 071,8 / 3 124,5 / 3 298,3 (12,0 %)2 995,1 / 3 093,2 / 3 267,9 (10,9 %)
Fourmis, Max-Min2 953,7 / 3 055,2 / 3 189,0 (9,6 %)2 826,0 / 2 954,0 / 3 071,6 (5,9 %)
Fourmis, Max-Min et 2-opt2 808,4 / 2 821,8 / 2 850,2 (1,2 %)2 797,4 / 2 815,3 / 2 826,3 (1,0 %)
Fourmis, Max-Min et 2-opt, alpha 02 801,5 / 2 832,0 / 2 863,4 (1,6 %)2 801,5 / 2 822,6 / 2 837,5 (1,2 %)

Ce que ces chiffres autorisent à dire.

  • Les fourmis seules perdent, et nettement : l'Ant System est encore à 10,9 % à un million d'évaluations, Max-Min à 5,9 %.
  • Ce qui gagne est une construction suivie d'une recherche locale. À 300 000 évaluations, le recuit, GRASP à alpha 0,05 et les fourmis avec 2-opt ont des médianes à une dizaine de millimètres l'une de l'autre (2 821,8, 2 827,1 et 2 831,9 mm), moins que l'écart entre la meilleure et la pire graine d'une même ligne (de 42 à 84 mm) : ils sont à égalité.
  • À un million, le recuit passe devant (0,3 % contre 0,9 % et 1,0 %). GRASP et les fourmis avec 2-opt recommencent chaque fois d'une tournée construite : plus de budget leur donne plus de répétitions, pas de meilleures répétitions. Le recuit, lui, raffine une même solution.
  • Sur douze trous et sur huit postes, le tableau est autre : le glouton suivi du 2-opt trouve l'optimum de P-217 cent fois sur cent, et sur les postes les redémarrages trouvent l'optimum quand les fourmis ne le trouvent pas.

Le cadre fait partie du résultat : une seule plaque, un seul voisinage, dix graines, un alpha réglé à 300 000 évaluations puis gardé à un million, et un budget en évaluations, alors qu'une évaluation de fourmi (un poids, un tirage) ne coûte pas ce que coûte un voisin 2-opt (quatre distances). Rien de cela ne dit que les fourmis sont inutiles : on les emploie pour le routage dans des réseaux, où la mémoire s'adapte pendant que la recherche continue. Mais sur les données de Valdrome, à ces budgets, ce que la mémoire ajoute est faible devant ce que la recherche locale apporte.

Ce que ces méthodes changent au squelette

Le squelette du chapitre 7 suppose une solution courante : on part d'une solution, on en tire un voisin, on décide de s'y déplacer. Le tabou du chapitre 9 en a changé la forme, pas cette hypothèse. GRASP et les fourmis la rejettent.

chercher(initiale, voisin, cout, accepter, iterations)                    # chapitres 7 et 8 : une solution courante
chercher_voisinage(initiale, voisinage, cout, iterations, duree_tabou)    # chapitre 9 : idem, et une mémoire de mouvements
grasp(construire, ameliorer, cout, budget)                                # GRASP : pas de solution courante, pas de mémoire
colonie(construire_selon, deposer, evaporer, cout, budget)                # fourmis : une mémoire, qui n'est pas une solution

Dans GRASP, il n'y a plus de initiale : chaque répétition construit la sienne, et la descente qui suit remplace voisin et accepter. Dans une colonie, la mémoire est un objet à part, la matrice de phéromone, qu'on ne « retouche » pas : elle est mise à jour par des solutions entières, celles des fourmis, puis lue par les constructions suivantes. C'est un changement de nature : la recherche n'est plus une marche d'une solution à une autre, c'est une boucle entre une loi de tirage et ses résultats. Les algorithmes génétiques du chapitre 10 en donnaient une autre version, où la mémoire est une population.

Les erreurs d'un débutant

Confondre les deux alpha
Dans GRASP, alpha est entre 0 et 1 et règle la largeur d'une liste ; dans une colonie, c'est un exposant, souvent entre 0 et 5. Un alpha de 2 pour la liste, ou de 0,05 pour l'exposant, donne une méthode qui tourne et ne fait pas ce qu'on croit.
Ne pas compter la construction dans le budget
Compter seulement les voisins de la descente fait paraître la construction gratuite. Une fourmi examine pourtant 1 830 candidats sur soixante trous : dix fourmis coûtent 18 300 évaluations par itération, à peu près dix balayages du 2-opt.
Déposer L au lieu de 1 / L
Le dépôt doit être proportionnel à la qualité, et pour une longueur à minimiser la qualité est l'inverse. Déposer la longueur renforce les mauvaises tournées plus que les bonnes : la colonie apprend à l'envers, et rien ne plante. Vérifier que la tournée la plus courte est celle qui dépose le plus.
Une phéromone qui ne se lit que dans un sens
Une arête n'a pas de sens : la fourmi qui va de a à b et celle qui va de b à a passent par la même. Déposer sur tau[a][b] seulement prive de la trace les fourmis qui la parcourent dans l'autre sens. Déposer dans les deux sens, et vérifier que la matrice reste symétrique (celle des couples opérateur et poste, elle, ne l'est pas).
Prendre une colonie figée pour une colonie convaincue
Quand plus de 97 % de la phéromone d'une ligne est sur un poste, la colonie n'explore plus : elle est figée, pas convaincue. Surveiller la moyenne des fourmis de l'itération : si elle rejoint la meilleure, la colonie n'a plus de diversité ; les bornes de la variante Max-Min existent pour cela.

Mettre en pratique

Depuis le dernier trou percé, il reste six trous, à 14, 18, 25, 40, 62 et 110 mm. Quelle liste restreinte GRASP forme-t-il pour alpha = 0 ; 0,1 ; 0,3 et 1, et avec quelle probabilité chaque trou y est-il tiré ?

Le seuil vaut 14+α (110−14)=14+96 α14 + \alpha\,(110 - 14) = 14 + 96\,\alpha. À alpha nul, 14 mm : la liste n'a que le plus proche, tiré à coup sûr. À 0,1, le seuil est de 23,6 mm : deux trous (14 et 18 mm), une chance sur deux chacun. À 0,3, il est de 42,8 mm : quatre trous (14, 18, 25 et 40 mm), une chance sur quatre. À 1, il vaut 110 mm : les six trous, une chance sur six. Les trous de la liste sont tirés avec la même probabilité, quelle que soit leur distance : le trou à 40 mm a autant de chances que celui à 14 dès qu'il entre dans la liste.

Une plaque de quarante trous, un budget de 100 000 évaluations. Combien d'itérations de huit fourmis le budget permet-il ? Et combien de répétitions de GRASP, si chaque descente fait douze balayages ?

Une fourmi examine 40 candidats au premier pas, 39 au deuxième, et ainsi de suite jusqu'à 1 : 40×41/2=82040 \times 41 / 2 = 820. Une itération de huit fourmis coûte 8×820=6 5608 \times 820 = 6\,560 évaluations, et le budget en permet ⌊100 000/6 560⌋=15\lfloor 100\,000 / 6\,560 \rfloor = 15, soit 98 400 évaluations ; la seizième ne tient plus et n'est pas faite. Un balayage 2-opt de quarante trous évalue 40×39/2−1=77940 \times 39 / 2 - 1 = 779 voisins : une répétition de GRASP coûte 820+12×779=10 168820 + 12 \times 779 = 10\,168 évaluations, construction comprise, et le budget en permet 9. Oublier la construction en aurait annoncé 10.

Quand préférer GRASP aux fourmis ?

Quand une recherche locale efficace existe et que la difficulté est d'en varier les départs : GRASP n'a qu'un réglage (alpha), pas de matrice, pas de mémoire à entretenir, et à 300 000 évaluations il égale les fourmis avec 2-opt sur P-600. Les fourmis se justifient quand la construction est naturelle et que les bonnes solutions partagent des éléments qu'une mémoire peut retenir, ou quand le problème change pendant la recherche. Sur les données de Valdrome, GRASP est plus simple et aussi bon.

Chapitre révisé en octobre 2026 · Une erreur dans ce chapitre ?

Dans la bibliothèque d'exercices

Écrire la liste restreinte d'un GRASP à alpha donné, chiffrer le budget d'une colonie et l'oubli de sa phéromone, et débusquer une phéromone qui ne se lit que dans un sens.

Tous les exercices sur fourmis et grasp