() { 201, 206, 211, 216, 221, 225, 229, 233, 237, 239 };
```
Dix breaks au total, le dernier se déverrouillant à la profondeur 239. C'est ce qui
rend les [grilles record](/fr/research/records/) atteignables tout court : un 256 parfait
n'a jamais été trouvé, mais une grille qui tolère une poignée de mismatchs tardifs,
c'est quelque chose qu'un backtracker peut réellement terminer.
Deux détails affinent le tableau. D'abord, le budget s'accompagne d'une discipline :
jamais deux breaks ne sont autorisés à se toucher : chaque mismatch doit rester isolé
au milieu d'arêtes appariées. Blackwood en énonce lui-même la conséquence : toute
exécution qui atteint 255 placements se complète automatiquement à 256, et une grille
469 est de manière équivalente un partiel de 249 pièces avec sept trous
([groups.io message 10051](https://groups.io/g/eternity2/message/10051)). Ensuite,
la liste de dix entrées ci-dessus est elle-même un réajustement : en planifiant le
passage de 469 à 470, Blackwood a ramené le budget de breaks de onze profondeurs à
dix, un changement qu'il a documenté, levier par levier, dans son propre plan de
réglage
([groups.io message 10076](https://groups.io/g/eternity2/message/10076)). Les points
de déverrouillage décalés qu'il esquissait dans ce plan n'ont jamais été adoptés (le
code 470 publié conserve les points de l'ère 469 et abandonne simplement le onzième),
et c'est cet échéancier resserré qui a trouvé le 470.
## Redémarrages, aléatoire, et un plafond de 50 milliards de nœuds
Un backtracker par balayage de lignes remonte rarement jusqu'à ses premières lignes,
si bien qu'une mauvaise ouverture peut échouer une exécution entière dans une région
impossible. La réponse de Blackwood est économique et efficace : rendre l'ouverture
aléatoire (le premier coin et les pièces de la ligne du bas sont mélangés à chaque
tentative, de sorte que deux exécutions ne retracent jamais le même préfixe) et
plafonner chaque tentative à 50 milliards de nœuds explorés. Atteignez le plafond,
abandonnez, [redémarrez](/fr/research/build/backtracking/restarts/) avec une nouvelle
ouverture, et partez en chercher une plus fertile.
## Le faire tenir en cache
Le dernier ingrédient est la sympathie mécanique. Les pièces candidates vivent dans
des tables de correspondance par position, et chaque entrée est une structure
compacte (numéro de pièce, rotation, les deux côtés exposés, un compteur de breaks et
un compteur heuristique) dimensionnée pour que l'ensemble de travail tienne dans le
cache du processeur :
```csharp
public struct RotatedPiece
{
public ushort PieceNumber { get; set; }
public byte Rotations { get; set; }
public byte TopSide { get; set; }
public byte RightSide { get; set; }
public byte Break_Count { get; set; }
public byte Heuristic_Side_Count { get; set; }
}
```
C'est la moitié « débit » de l'histoire : la même conception que
[Peter McGavin](/fr/research/lab/experiments/peter-mcgavin/backtracker/) a plus tard
poussée jusqu'à des centaines de millions de placements par seconde.
## D'un unique 468 à une vague de records
L'histoire du solveur est aussi instructive que ses rouages. Blackwood est arrivé en
parfait outsider : son 468, la première avancée au-delà du
[467 de Louis Verhaard](/fr/research/lab/experiments/louis-verhaard/eii/) en douze ans, a
atteint la liste de diffusion de seconde main, relayé depuis un post Reddit
([groups.io message 10032](https://groups.io/g/eternity2/message/10032)). Trois jours
plus tard, il a ouvert le code du solveur, avec des heuristiques qu'il estimait
« deux fois meilleures » que l'exécution du 468
([message 10037](https://groups.io/g/eternity2/message/10037)) ; Jef Bucas l'avait en
marche sous Mono sur Ubuntu presque immédiatement
([message 10038](https://groups.io/g/eternity2/message/10038)). En une semaine, Peter
McGavin, en l'exécutant « sur environ deux cents cœurs », a atteint 469
([message 10045](https://groups.io/g/eternity2/message/10045)). Bucas a ensuite
réécrit l'algorithme en C pour environ le double de vitesse
([message 10065](https://groups.io/g/eternity2/message/10065)), une vague de nouvelles
grilles 469 a suivi en quelques semaines, et le générateur de code derrière la
réécriture a été publié sous le nom de
[libblackwood](https://github.com/jfbucas/libblackwood)
([message 10078](https://groups.io/g/eternity2/message/10078)). Quand Blackwood a
posté son 470 en mars 2021, il provenait de ce même code public. Ses propres mots,
au sujet de la republication du dépôt après qu'il fut discrètement passé en privé :
« C'est le code exact utilisé pour trouver un 470 »
([message 10161](https://groups.io/g/eternity2/message/10161)). Un record, mis en
open source, est devenu une machine à records communautaire.
## L'étude paramétrique de Jef : wrapper_blackwood
Tout ce qui précède décrit *comment* le solveur fonctionne. Jef Bucas a construit
[wrapper_blackwood](https://github.com/jfbucas/wrapper_blackwood) pour se demander si
ses nombres sont *justes*. Le dispositif est une petite
[expérience distribuée](/fr/research/build/faster/distributed-solving/) : un serveur
Python distribue des tâches par HTTP, où chaque tâche est une variante des paramètres
du solveur. Les clients (un worker par cœur) récupèrent une tâche, génèrent la source
C# à partir de templates avec cette variante intégrée, la compilent avec Mono,
l'exécutent, et renvoient le résultat au serveur pour analyse.
Deux paramètres ont eu droit au traitement :
- **Les trois couleurs priorisées.** En échantillonnant de nombreux jeux différents
de trois motifs, et en enregistrant la profondeur atteinte par l'algorithme avec
chacun, sa
[page de résultats](https://github.com/jfbucas/wrapper_blackwood/blob/main/doc/batch00_edge_combos_stats.html)
associe chaque combinaison d'une couleur de bordure et de deux couleurs intérieures
à la profondeur qu'elle a atteinte, accompagnée d'une carte de chaleur indiquant où,
sur la grille, la recherche a passé son temps. Les meilleurs scores connus se
concentrent sur deux jeux de motifs distincts.
- **L'échéancier de quotas.** En exécutant de nombreuses variantes aléatoires du
tableau heuristique de 256 entrées et en traçant la profondeur atteinte par chacune
(plus c'est vert, mieux c'est), la courbe façonnée à la main par Blackwood tombe en
plein milieu de la région verte.
> **[Figure]** interactive figure. Rendered on the canonical page (link above); not shown in this markdown export.
## Ce que le réglage manuel a réussi
Ce dernier résultat mérite qu'on insiste. Blackwood a rempli son échéancier à la main :
cinq segments linéaires, des coefficients estimés à l'œil. Lorsqu'un balayage
aléatoire a exploré le voisinage autour de lui, la ligne réglée à la main se situait
franchement dans la zone la plus performante. La conclusion de Jef, et la nôtre : les
paramètres d'origine étaient presque optimaux. Le vieux conseil tient toujours. Avant
de refondre les heuristiques d'un solveur record, vérifiez si son auteur n'a pas déjà
trouvé l'optimum local à la main.
> **Les propres résultats négatifs de Blackwood**
>
> Blackwood a mené le même audit sur lui-même. Après le 469, il a catalogué ses impasses sur la liste de diffusion ([groups.io message 10056](https://groups.io/g/eternity2/message/10056)) : éliminer quatre couleurs tôt au lieu de trois (aucun gain), réserver des couleurs pour la fin de partie (pire), des solveurs SAT tels que kissat, cryptominisat et Google OR-tools (médiocre), l'accélération GPU, et la mise en cache de tous les blocs 2×2 pré-résolus (mesurée, puis abandonnée). La seule chose qui ait jamais payé, c'est le raffinement des heuristiques elles-mêmes, valant encore un facteur ~2. C'est la même conclusion que le balayage de Jef, atteinte par l'autre bout : l'échéancier est la magie, pas la technologie brute.
## Répliquer l'étude
Une réserve sur l'étude paramétrique, et elle est de Jef lui-même : les effectifs
d'échantillons derrière ces résultats sont faibles, et il n'est pas sûr à 100 % de
ses conclusions. Ses notes le disent clairement : il serait bon de tenter de
reproduire ces résultats, pour les valider ou les invalider. Il offre ses échantillons,
et le harnais [wrapper_blackwood](https://github.com/jfbucas/wrapper_blackwood) est
public : dirigez quelques machines vers le serveur, relancez les balayages, et postez
ce que vous trouvez sur la [liste de diffusion](https://groups.io/g/eternity2). Une
réplication indépendante confirmerait ou réfuterait les conclusions, et l'un comme
l'autre serait une véritable contribution.
## L'exécuter ici
L'étude ci-dessus audite les paramètres de Blackwood ; cette dernière section audite
autre chose : ce que fait son programme publié quand on le construit soi-même et
qu'on le confronte au vrai puzzle, sur un seul cœur, sur ma machine.
### D'où vient le code
La source est son dépôt public,
[github.com/jblackwood345/EternityII_Solver](https://github.com/jblackwood345/EternityII_Solver),
sous licence GPL-3.0. Il se construit sans modification sur .NET 8. Il n'est pas
recopié ici : la licence comme les bonnes manières commandent de le lier, non de
l'embarquer ; il a donc été cloné dans un répertoire temporaire, exécuté, et seuls
les nombres ont été conservés.
### Ce qui a été modifié pour l'exécuter
Son programme est écrit pour tourner sur le nombre total de cœurs d'une machine et
pour ne sauvegarder que les grilles quasi complètes. Pour le mesurer sur un seul cœur,
et pour voir quoi que ce soit en deçà d'une résolution complète, trois modifications
ont été faites, chacune invitée par son propre README (« changez le nombre de cœurs »,
« changez la fonction de sauvegarde ») :
- **Un seul thread de recherche.** Sa constante `number_virtual_cores` vaut 64 par
défaut. Son `Parallel.For(1, N)` lance `N-1` workers, donc la fixer à 2 donne
exactement un thread de recherche.
- **Une ligne de progression.** Sans modification, dans une exécution bornée, il
n'affiche que « Solving... ». Une seule ligne ajoutée rapporte le placement le plus
profond atteint, de sorte qu'une exécution qui ne se termine pas produise tout de
même un nombre.
- **Un seuil de sauvegarde plus bas, et l'épinglage des indices** pour l'exécution
contrainte ci-dessous.
### Tel que publié : rapide, et visant l'unique indice qui contraint
Exécuté tel que son code se présente, sur un seul cœur pendant 60 secondes, il est
rapide et va loin :
- **248 / 256 pièces placées**, une grille qui se recote à **454 / 480** arêtes
appariées.
- **~18,9 millions de nœuds par seconde** (un nœud est une tentative de placement).
Son programme publié n'a aucune notion d'indice : il traite chaque pièce, y compris
les pièces spéciales, comme ordinaire et maximise les arêtes appariées brutes. C'est
moins un compromis qu'il n'y paraît d'abord, car une grille Eternity II légale n'a
qu'**une** contrainte contraignante, l'indice central obligatoire (la pièce 139 dans
sa cellule centrale, dans son orientation donnée) ; les quatre autres « indices » du
puzzle étaient des indices bonus lâchés par le concepteur, non des exigences. Sa
fameuse grille **470** en est la preuve : dans le [visualiseur](/viewer/), elle se
vérifie comme indices respectés **1 / 5**, le seul respecté étant le centre, et un
seul suffit à une grille légale. Maximiser les arêtes sans logique d'indices n'est
pas un raccourci contournant le puzzle ; c'est une manière légitime de s'attaquer à
la seule contrainte qui compte.
Les huit dernières cellules de cette grille 454 sont une véritable impasse : aucun
agencement des huit pièces restantes ne les complète de façon parfaitement appariée.
(Pour le plaisir, en confiant cette grille à
[notre ALNS](/fr/research/build/local-search/local-search-alns/) pendant 30 secondes, il
a rempli les huit et l'a poussée à 462 en réarrangeant la région.)
### Avec les indices épinglés : ça cale
Épingler les pièces indices dans leurs cellules force le moteur à les respecter au
lieu de les placer là où elles s'ajustent. Le même code, les cinq indices officiels
épinglés, 120 secondes, un seul cœur :
- **Placement le plus profond : environ 45 / 256.**
Son heuristique d'ordre de balayage n'a rien à quoi s'accrocher dès que les pièces
spéciales sont fixées en milieu de grille : elle patauge près des lignes du bas et ne
remonte jamais. Épingler les cinq est plus strict que le puzzle ne l'exige à
proprement parler (seul l'indice central est obligatoire), mais c'est la même
contrainte à laquelle sont soumis les autres moteurs ici, et Blackwood atterrit bien
en dessous du
[438 de la réimplémentation Verhaard](/fr/research/lab/experiments/louis-verhaard/verhaard-reimpl/)
ou du [204 de McGavin](/fr/research/lab/experiments/peter-mcgavin/backtracker/) sous la
même contrainte.
> **Une réserve fidèle**
>
> Cet épinglage d'indices est grossier : il interdit toute autre pièce aux cinq cellules d'indices et réserve ces pièces. Une refonte tenant compte des indices chercherait au contraire vers l'extérieur à partir des indices, et ferait mieux. 45 est donc un plancher pour « son code publié avec des indices boulonnés dessus », non un verdict sur l'approche. Son record 470 a été trouvé avec ce code plus une grande quantité de calcul et de chance, pas en deux minutes.
## À lire aussi
- [Le backtracker C de McGavin : l'histoire du débit, reconstruit ici](https://eternity2.dev/fr/research/lab/experiments/peter-mcgavin/backtracker/) — Le backtracker C de Peter McGavin, le plus rapide de la communauté : une recette d'optimisation de 2007 capitalisée pendant deux décennies via code généré, tables de correspondance et astuces de compteur, puis compilée sur mon M1 et pointée vers le vrai puzzle à 256 pièces, où en mono-cœur elle dépasse 200 des 256 pièces à ~109M placements/s.
- [eii de Verhaard : le solveur qui a remporté l'unique prix](https://eternity2.dev/fr/research/lab/experiments/louis-verhaard/eii/) — Le moteur derrière le 467, le seul score d'Eternity II jamais récompensé, reconstitué à partir des propres messages de Louis Verhaard sur la liste de diffusion : élagage prospectif, ordres de remplissage en peigne, décalage d'arête conditionné par la profondeur, calendrier de décalage réglé par chaîne de Markov. Et pourquoi son propre binaire Win32, sans code source, ne peut être ni compilé ni exécuté sur cette machine.
- [Benchmark mono-cœur](https://eternity2.dev/fr/research/lab/experiments/single-core-benchmark/) — Quinze solveurs, les nôtres et nos implémentations des deux backtrackers record de la communauté, chacun exécuté une fois sur dix variantes à coins épinglés du casse-tête officiel, un seul cœur, 60 secondes par exécution. Le constat : le nombre de nœuds n'est pas le score.
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
- [Comment cherchent les solveurs record](https://eternity2.dev/fr/research/build/solvers/) — Comment cherchent réellement les solveurs qui détiennent les records. Ce sont tous, au fond, des backtrackers en profondeur d'abord ; ce qui les distingue, c'est l'ordre dans lequel ils essaient les choses et la manière dont ils assouplissent les règles à l'approche de la fin.
---
# L'eii de Louis Verhaard
> L'eii de Louis Verhaard a remporté le seul prix que le puzzle ait jamais payé, mais il n'existe que sous forme de binaire Windows sans code source. En quoi consiste sa méthode, pourquoi l'original ne tourne pas ici, et où vit une réimplémentation fidèle.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/louis-verhaard/
- Mise à jour: 2026-07-15
---
Cette section porte sur l'eii de [Louis Verhaard](/fr/research/people/louis-verhaard/),
le solveur qui a trouvé le 467 et remporté l'unique prix du puzzle. Contrairement
à McGavin et Blackwood, il n'a jamais publié son code source : son propre programme
ne peut donc pas être exécuté ici. Cette page consigne sa méthode et ce manque ;
le moteur exécutable est une
[réimplémentation](/fr/research/lab/experiments/louis-verhaard/verhaard-reimpl/),
conservée dans la section de Raphaël Anjou parce que le code qui s'y trouve n'est
pas celui de Verhaard.
## Pages de cette section
- [eii de Verhaard : le solveur qui a remporté l'unique prix](https://eternity2.dev/fr/research/lab/experiments/louis-verhaard/eii/) — Le moteur derrière le 467, le seul score d'Eternity II jamais récompensé, reconstitué à partir des propres messages de Louis Verhaard sur la liste de diffusion : élagage prospectif, ordres de remplissage en peigne, décalage d'arête conditionné par la profondeur, calendrier de décalage réglé par chaîne de Markov. Et pourquoi son propre binaire Win32, sans code source, ne peut être ni compilé ni exécuté sur cette machine.
- [Réimplémentation de Verhaard](https://eternity2.dev/fr/research/lab/experiments/louis-verhaard/verhaard-reimpl/) — Une réimplémentation intégrale de la méthode eii de Louis Verhaard, son propre binaire n'étant livré sans aucune source et refusant de tourner ici. Recuit par échange de composition d'ensemble sous la métrique de pavage 2×2 ; sur le vrai puzzle à cinq indices, elle atteint 438 sur 480, en monocœur.
---
# eii de Verhaard : le solveur qui a remporté l'unique prix
> Le moteur derrière le 467, le seul score d'Eternity II jamais récompensé, reconstitué à partir des propres messages de Louis Verhaard sur la liste de diffusion : élagage prospectif, ordres de remplissage en peigne, décalage d'arête conditionné par la profondeur, calendrier de décalage réglé par chaîne de Markov. Et pourquoi son propre binaire Win32, sans code source, ne peut être ni compilé ni exécuté sur cette machine.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/louis-verhaard/eii/
- Mise à jour: 2026-07-21
- Sujets: backtracking, local-search, speed
- Source: Détails du solveur eii de Louis Verhaard (l'original, Win32 uniquement) — https://www.shortestpath.se/eii/eii_details.html
- Source: La mise à disposition : « je suis bloqué… mon seul espoir est la force brute » (groups.io message 5940) — https://groups.io/g/eternity2/message/5940
- Source: Décodeur et documentation des rouages publiés ; 467 trouvé plus de 40 fois (groups.io message 6275) — https://groups.io/g/eternity2/message/6275
- Source: La méthode dévoilée : décalage d'arête conditionné par la profondeur, score propre 247 (groups.io message 7321) — https://groups.io/g/eternity2/message/7321
- Source: Le banc d'essai indépendant de JSA : un 467 en 82 jours avec le binaire public (groups.io message 6687) — https://groups.io/g/eternity2/message/6687
- Source: Le point d'ancrage durable du solveur : shortestpath.se/eii (groups.io message 7439) — https://groups.io/g/eternity2/message/7439
- Source: Verhaard sur sa méthode (groups.io msg 6891) — https://groups.io/g/eternity2/message/6891
---
> **À qui revient ce travail**
>
> Le solveur, nommé **eii**, et sa documentation sont l'œuvre de **Louis Verhaard**, hébergée sur son propre site ([shortestpath.se/eii](http://www.shortestpath.se/eii/)). L'entrée gagnante a été soumise au nom de son épouse, Anna Karlsson ; les propres mots de Verhaard tranchent la question du crédit : « Ma femme a soumis ma meilleure solution l'an dernier et a gagné 10 000 dollars » ([groups.io message 7451](https://groups.io/g/eternity2/message/7451)). Cette page, rédigée par [Raphaël Anjou](/fr/research/people/raphael-anjou/), reconstruit la machine à partir des messages de Verhaard sur la liste de diffusion de 2008 à 2010 et du banc d'essai public de JSA sur le binaire diffusé, et consigne pourquoi le binaire original ne peut absolument pas être exécuté ici. Le moteur exécutable est une [réimplémentation](/fr/research/lab/experiments/louis-verhaard/verhaard-reimpl/) distincte, classée dans la section de Raphaël parce que ce code n'est pas celui de Verhaard.
L'eii de Louis Verhaard est le solveur derrière le 467/480 qui a remporté le prix
de finaliste de 10 000 dollars à la première date d'examen, la seule somme jamais
versée par le concours Eternity II. Ce même score a ensuite tenu le record pendant
douze ans, jusqu'au 468 de Joshua Blackwood en 2020. Comme
[le moteur de Blackwood](/fr/research/lab/experiments/joshua-blackwood/solver/), il est
au fond un backtracker en profondeur d'abord, surmonté d'heuristiques réglées à la
main. À la différence de celui de Blackwood, ses rouages n'ont jamais été publiés
sous forme de code ; ce dont nous disposons à la place est un témoignage d'une
qualité rare : Verhaard a lui-même documenté les heuristiques et l'ordre de
recherche, discuté la conception sur la liste de diffusion à la première personne,
et livré un binaire public qu'un utilisateur indépendant a mené par banc d'essai
jusqu'au score du prix. C'est cette absence de code source qui explique pourquoi,
des trois moteurs communautaires étudiés dans ce laboratoire, le sien est celui qui
ne peut pas être exécuté du tout ; la dernière section dit exactement pourquoi.
## La trajectoire : bloqué au-delà de 463, alors autant le diffuser
Le récit fondateur de Verhaard désarme. Son premier programme de haut score ne
plaçait que des pièces s'ajustant parfaitement, et plafonnait vers 450 : des
centaines de partiels propres à 248 pièces, sans issue. Ce n'est qu'en essayant le
solveur de Bob Cousins (à l'origine celui de Dave Clark), qui a trouvé un 458 en
moins d'une minute, qu'il a saisi que le concours comptait les *arêtes
concordantes*, si bien que les placements à moitié ajustés comptent eux aussi
([groups.io message 5767](https://groups.io/g/eternity2/message/5767)). De son
propre aveu, il ne s'était jamais donné la peine de lire les règles ; Jef Bucas
renvoyait encore les lecteurs vers cet aveu dans la documentation de Verhaard en
2021 ([groups.io message 10582](https://groups.io/g/eternity2/message/10582)).
Au cours de l'été 2008, le plafond publiquement visible de la communauté était de
463 ([groups.io message 5688](https://groups.io/g/eternity2/message/5688)), et dans
un échange remarquable Verhaard et Max ont confronté leurs notes, en tant que seuls
deux à être connus pour avoir dépassé ce qu'ils appelaient la « limite-dont-on-ne-
parle-pas »
([messages 5767–5787](https://groups.io/g/eternity2/message/5767)). Puis, le 22
septembre 2008, à trois mois de la première date d'examen, Verhaard a publié le
solveur pour que quiconque puisse le faire tourner sur fingerboys.se : « Ceci parce
que je suis bloqué et que mon seul espoir d'améliorer mon meilleur score passe par
la force brute » ([message 5940](https://groups.io/g/eternity2/message/5940)). Les
conditions calquaient celles d'eternity2.net : il fallait posséder le vrai
casse-tête, et tout prix serait partagé à parts égales entre l'utilisateur ayant le
meilleur score et Verhaard. La communauté est devenue sa ferme de calcul.
Cela a marché. Le 6 janvier 2009, il a diffusé un décodeur pour les fichiers de
sortie `.eii` du solveur, documenté les rouages (heuristiques et ordre de
recherche), et dévoilé le nombre que la ferme avait atteint : 467, trouvé plus de
40 fois par différents utilisateurs
([message 6275](https://groups.io/g/eternity2/message/6275)). Neuf jours plus tard,
l'annonce de Tomy est apparue : aucune solution complète, et un prix de finaliste
de 10 000 dollars pour Anna Karlsson de Lund pour 467 sur 480
([message 6337](https://groups.io/g/eternity2/message/6337)). Il a fallu à la liste
environ une heure pour décoder « Lund + 467 ». Le reste de l'histoire du concours
revient à [la page d'histoire](/fr/research/community/hunt/) : le silence de Tomy, la
couverture presse, les suites. Ce qui suit ici, c'est la machine.
## Élagage prospectif contre des seuils statiques
La boucle de base est un backtracker en profondeur d'abord sur un
[ordre de remplissage](/fr/research/build/backtracking/fill-order/) fixe, mais qui
élague par anticipation : les branches dont le score heuristique tombe sous un
seuil sont coupées avant d'être explorées. Verhaard décrivait ses seuils comme
statiques et réglés à la main : « surtout fondés sur de purs tâtonnements et sur une
part limitée de théorie ou de mesures », lents à régler mais prévisibles sur de
longues exécutions
([groups.io message 5771](https://groups.io/g/eternity2/message/5771), qu'on lui
cite en retour dans le
[message 5772](https://groups.io/g/eternity2/message/5772)).
À quoi servent les seuils *au juste* ? La conception sur laquelle Max et lui ont
convergé dans cet échange en est la part intéressante : on ne peut influer sur la
sélection des pièces que tôt dans la recherche, mais ce que l'on veut maximiser,
c'est la **pavabilité des pièces restantes** profondément dans le remplissage,
autour des pièces 160 à 200, là où le facteur de branchement s'effondre vers des
coups forcés. Les seuils précoces sont donc réglés, de façon semi-manuelle, pour
répondre à la question : quel score heuristique les partiels précoces doivent-ils
atteindre pour que les survivants portent un jeu de pièces restantes qui se pave
encore bien ? Le verdict de Verhaard sur la description de Max : « Je crois qu'après
tout nous travaillons de manière très semblable »
([message 5780](https://groups.io/g/eternity2/message/5780)).
## Le tableau de bord : où culmine la distribution des nœuds
Comment sait-on qu'une heuristique est forte ? La mesure sur laquelle les deux se
sont arrêtés (proposée par Max, adoptée par Verhaard) est l'endroit où se situe le
pic de la distribution des nœuds par profondeur. Une recherche exhaustive sans
heuristique sur E2 passe le plus clair de son temps autour de la profondeur 161, le
chiffre de référence de Brendan Owen
([message 6112](https://groups.io/g/eternity2/message/6112)) ; leurs deux recherches
heuristiques avaient poussé le pic juste sous 170
([message 5780](https://groups.io/g/eternity2/message/5780)). Max a fourni
l'interprétation : un pic à 170 équivaut à peu près à éliminer entièrement une
couleur intérieure du casse-tête ; une « heuristique tueuse » qui en éliminerait
deux semblait hors de portée
([message 5787](https://groups.io/g/eternity2/message/5787)).
## Recherche en peigne : un ordre de remplissage pour les hauts scores
Une recherche de solution complète veut un balayage ligne par ligne ; une recherche
de haut score vit plus profondément dans le plateau, et veut une frontière
différente. Quand Brendan Owen a posé exactement cette question, Verhaard a révélé
la forme de sa réponse : les meilleurs ordres qu'il avait trouvés ressemblent à une
**recherche en peigne** (la plupart des lignes parcourues horizontalement, puis les
lignes restantes parcourues verticalement), avec une longueur de dents liée à la
cible : « Plus le score que vous visez est bas, plus les dents du peigne
s'allongent » ([groups.io message 6112](https://groups.io/g/eternity2/message/6112)).
Max avait convergé indépendamment vers une géométrie presque identique (douze lignes
en balayage, puis balayage par colonnes) et rapportait que ses scores tournaient à
environ une arête en dessous des « résultats que le solveur de Louis obtient »
([message 6126](https://groups.io/g/eternity2/message/6126)).
## Décalage d'arête, conditionné par la profondeur
Le levier qui a réellement décroché le 467 est une imperfection délibérée.
Interrogé directement à ce sujet un an plus tard, Verhaard a été précis : le
programme du 467 cherche « normalement », mais à certaines profondeurs il autorise
le **décalage d'arête** : placer une pièce présentant une arête discordante contre
un voisin déjà posé. Il ne construit pas d'abord un partiel propre pour ensuite en
rapiécer les trous ; les discordances sont budgétées *dans la descente elle-même*,
débloquées à des profondeurs choisies. Et l'anatomie du résultat est parlante : la
plupart des plateaux à 467 qu'il a examinés avaient un score propre de seulement
247, avec treize arêtes décalées dépensées là où le calendrier le permettait
([groups.io message 7321](https://groups.io/g/eternity2/message/7321)). Le 467
n'était pas non plus un coup de chance : il l'a trouvé plus de 50 fois
([même message](https://groups.io/g/eternity2/message/7321)).
La technique elle-même a [sa propre page](/fr/research/build/reduce/edge-slipping/) :
pourquoi des discordances programmées atteignent des plateaux qu'une recherche
propre n'atteindrait jamais, et la théorie du dénombrement derrière le coût de
chaque arête concordante supplémentaire. Ce qui a sa place ici, c'est la
machinerie côté solveur : le budget de discordances par profondeur est un **tableau
de décalage**, une entrée par profondeur, et c'est un objet réglé, non un
tâtonnement.
## L'optimiseur du tableau de décalage : une chaîne de Markov
En janvier 2009, dans le fil où Owen étendait la
[théorie du complexe](/fr/research/why/complex-theory/) pour couvrir les décalages,
Verhaard a publié l'esquisse (avec des extraits Java) de l'algorithme qu'il
utilisait pour optimiser l'ordre de recherche et le tableau de décalage d'eii
([groups.io message 6423](https://groups.io/g/eternity2/message/6423)). L'entrée est
un ordre de recherche candidat plus un tableau de décalage. Pour chaque profondeur,
il estime deux nombres à partir d'exécutions expérimentales (la théorie suffirait
pour démarrer, notait-il) : la probabilité qu'une pièce restante prise au hasard
s'ajuste parfaitement, et la probabilité qu'elle s'ajuste avec une arête décalée.
De là il construit une chaîne de Markov dont l'état est *(profondeur, arêtes
décalées jusqu'ici)*, avec des transitions pour un placement propre et, là où le
tableau de décalage l'autorise, pour un placement décalé. Faire tourner la chaîne de
bout en bout donne la probabilité d'atteindre le bas et le nombre de nœuds attendu :
un évaluateur en boucle fermée, peu coûteux, pour tout couple (ordre, calendrier de
décalage), mémoïsé par souci d'efficacité. Il en a signalé lui-même la limite : le
modèle simple ignore la parité des décalages, si bien qu'il devient peu fiable pour
des scores cibles très élevés.
L'air de famille avec ce qui est venu une décennie plus tard est difficile à
manquer : les indices de rupture de Blackwood sont eux aussi un budget de
discordances conditionné par la profondeur, et son calendrier de quotas est lui
aussi une courbe pré-engagée, par profondeur, réglée à la main plutôt
qu'optimisée par chaîne. La filiation passe par ce solveur.
## Le frère jumeau au score propre
Les mêmes heuristiques animaient un second programme doté d'un coup de fin de partie
différent : au lieu de décaler une arête, il peut *sauter une case*, c'est-à-dire
laisser une cellule vide et poursuivre. Le nom est de lui
([message 7321](https://groups.io/g/eternity2/message/7321)). C'est le chasseur de
score propre (sans discordance). Avec lui, Verhaard a rempli 14 lignes complètes
plus deux pièces, un partiel impeccable de 226 pièces et le record dont il avait
connaissance à l'époque
([groups.io message 6303](https://groups.io/g/eternity2/message/6303)). Lors d'un
retour d'une journée en décembre 2009, après avoir estimé environ 2 000 partiels de
248 par 249, il a décroché trois 249 d'affilée et s'est arrêté, situant un 250 à peu
près 4 000 fois plus difficile
([message 7306](https://groups.io/g/eternity2/message/7306)). Interrogé à ce sujet
une décennie plus tard, il a confirmé que le 249 sur son site est réel : environ une
semaine de calcul sur une seule machine
([message 9890](https://groups.io/g/eternity2/message/9890)).
## La reproduction publique : 82 jours pour un 467
Parce que le binaire était public, le 467 est le rare record de l'ère du concours
doté d'une reproduction indépendante et chiffrée. JSA a fait tourner eii en continu
sur un seul PC et a consigné la distribution des scores à mesure qu'elle
s'accumulait :
- **43 jours :** 2 008 484 fois 463 · 109 195 fois 464 · 6 048 fois 465 · 250 fois
466 · rien de plus haut
([groups.io message 6571](https://groups.io/g/eternity2/message/6571))
- **62 jours :** 427 fois 466, arrivant à raison d'environ 5 à 6 par jour, et
toujours aucun 467
([message 6653](https://groups.io/g/eternity2/message/6653))
- **82 jours :** deux 467, aux côtés de 4 017 182 fois 463 · 227 245 fois 464 ·
13 637 fois 465 · 625 fois 466
([message 6687](https://groups.io/g/eternity2/message/6687))
Ce dernier relevé est la mesure publique la plus nette de l'échelle exponentielle de
rareté près du sommet : quatre millions de 463 pour deux ou trois 467, et un palier
466→467 qui a demandé à une seule machine près de trois mois. La formule de clôture
de JSA, « Félicitations à Louis pour un algorithme bien pensé », fait aussi office de
verdict de vérification.
## Ce qu'il a enseigné à la communauté
Au-delà du score, eii a établi un précédent : quand on est bloqué, on diffuse le
solveur et on laisse les machines de la communauté chasser, le partage du prix
faisant office de contrat. Le 467 a été trouvé par des *utilisateurs* d'un binaire
publié, plus de 40 fois, avant de remporter quoi que ce soit. Douze ans plus tard,
[Joshua Blackwood a répété le schéma](/fr/research/lab/experiments/joshua-blackwood/solver/),
en publiant un 468 et en ouvrant le code du moteur quelques jours après, et a
récolté la même récompense : une vague de records communautaires sur son propre
algorithme. L'autre leçon est méthodologique et traverse toute cette page : Verhaard
a réglé son solveur contre des *modèles* plutôt que sur de simples impressions (le
tableau de bord du pic de nœuds, l'évaluateur par chaîne de Markov), à une époque où
cette discipline était rare.
## Où vit le code, et pourquoi il ne tournera pas ici
Le point d'ancrage d'origine, fingerboys.se, était le site du groupe de musique de
Verhaard ; quand le groupe a cessé de maintenir le site, le solveur a disparu avec
lui pendant des mois. En janvier 2010, Verhaard l'a republié, inchangé, sur
[shortestpath.se/eii](http://www.shortestpath.se/eii/)
([groups.io message 7439](https://groups.io/g/eternity2/message/7439)) ; cette
adresse reste son point d'ancrage, et la source de première main derrière la ligne
467 dans [le tableau des records](/fr/research/records/). Une note opérationnelle issue
des questions-réponses qui ont suivi : le solveur ne garde aucune mémoire des
positions passées, si bien que ses milliers de plateaux à 463–465 ne sont pas
dédoublonnés ([message 7451](https://groups.io/g/eternity2/message/7451)).
Ce que « le code vit là » dissimule, c'est qu'aucun *code source* ne vit nulle part.
Ce que Verhaard a livré, c'est `eii-1.0-win32.zip` : un `eii.exe` Windows, un lisez-
moi, et quelques fichiers `.bat`. Il y a **zéro fichier source**, et c'est du Win32
uniquement. Cela ne tourne pas sur Apple silicon, et il n'y a sur cette machine ni
couche Windows ni couche d'émulation pour l'exécuter. Son artefact est, ici,
inexécutable, et il n'y a rien de lui à récupérer et compiler. Les ordres de
remplissage en peigne et le calendrier de décalage conditionné par la profondeur
décrits plus haut sont devenus un canon communautaire précisément parce qu'ils ont
été récupérés depuis ses messages et, quand ils étaient numériques, à l'octet près
depuis les chaînes de caractères à l'intérieur d'`eii.exe`, puisque ce binaire est
le seul enregistrement survivant de ces éléments.
Ainsi, « faire tourner Verhaard » tout court signifie reconstruire sa méthode à
partir de cette documentation. C'est ce que fait la
[réimplémentation de Verhaard](/fr/research/lab/experiments/louis-verhaard/verhaard-reimpl/),
et sur le vrai casse-tête à cinq indices elle atteint 438 sur 480, en monocœur. Ce
moteur est classé dans la section de Raphaël, pas dans celle-ci, parce qu'il est une
lecture de la méthode de Verhaard, non le code de Verhaard. Nommer cette distinction
fait partie du constat : des trois moteurs communautaires étudiés ici, le sien est
celui qui ne peut pas être exécuté du tout.
## À lire aussi
- [Réimplémentation de Verhaard](https://eternity2.dev/fr/research/lab/experiments/louis-verhaard/verhaard-reimpl/) — Une réimplémentation intégrale de la méthode eii de Louis Verhaard, son propre binaire n'étant livré sans aucune source et refusant de tourner ici. Recuit par échange de composition d'ensemble sous la métrique de pavage 2×2 ; sur le vrai puzzle à cinq indices, elle atteint 438 sur 480, en monocœur.
- [Le solveur de Blackwood, décodé et exécuté ici](https://eternity2.dev/fr/research/lab/experiments/joshua-blackwood/solver/) — Le backtracker record de Joshua Blackwood, décodé grâce aux notes de Jef Bucas (un échéancier de quotas de couleurs et une tolérance aux mismatchs en fin de partie, réglés presque optimalement), puis construit et exécuté sur mon M1 : tel que publié, il file jusqu'à 248 des 256 pièces en ignorant les indices ; épinglez les cinq indices officiels et le même moteur cale autour de 45.
- [Le glissement d'arête](https://eternity2.dev/fr/research/build/reduce/edge-slipping/) — Le coup primé de Louis Verhaard : laisser le backtracker poser une pièce non concordante, mais seulement à des profondeurs choisies près du bas du plateau. Chaque glissement autorisé coûte un point de score et multiplie de façon astronomique le nombre de plateaux cibles. Voilà pourquoi son 467 a été trouvé plus de cinquante fois, et l'ancêtre direct des ruptures de Blackwood.
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
- [Comment cherchent les solveurs record](https://eternity2.dev/fr/research/build/solvers/) — Comment cherchent réellement les solveurs qui détiennent les records. Ce sont tous, au fond, des backtrackers en profondeur d'abord ; ce qui les distingue, c'est l'ordre dans lequel ils essaient les choses et la manière dont ils assouplissent les règles à l'approche de la fin.
---
# Réimplémentation de Verhaard
> Une réimplémentation intégrale de la méthode eii de Louis Verhaard, son propre binaire n'étant livré sans aucune source et refusant de tourner ici. Recuit par échange de composition d'ensemble sous la métrique de pavage 2×2 ; sur le vrai puzzle à cinq indices, elle atteint 438 sur 480, en monocœur.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/louis-verhaard/verhaard-reimpl/
- Mise à jour: 2026-07-21
- Sujets: speed, local-search
- Reproduire: `just experiments single-core-benchmark`
- Source: Moteur exécutable + résultats versionnés + scripts (répertoire de référence de cette expérience) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark
- Source: Détails du solveur eii de Louis Verhaard (l'original, Win32 uniquement) — https://www.shortestpath.se/eii/eii_details.html
---
> **À qui revient ce travail**
>
> La **méthode** est [celle de Louis Verhaard](/fr/research/lab/experiments/louis-verhaard/eii/). Le **code** présenté ici est une réimplémentation intégrale par [Raphaël Anjou](/fr/research/people/raphael-anjou/). Il est classé ici, dans la section de Verhaard, aux côtés de la méthode qu'il reconstruit, comme une reconstruction : une lecture de sa méthode, non son programme. La signature reste celle de Raphaël, car le code est le sien ; la section est celle de Verhaard, car l'idée l'est.
L'eii original de Verhaard est un binaire Windows sans source qui
[refuse de tourner ici](/fr/research/lab/experiments/louis-verhaard/eii/). Le seul moyen
d'exécuter son approche est de la reconstruire, et c'est précisément cette reconstruction :
le moteur même qui apparaît sous le nom `verhaard` sur la
[grille](/fr/research/lab/experiments/single-core-benchmark/).
## Ce qu'elle réimplémente
La méthode documentée de Verhaard : le **recuit par échange de composition d'ensemble**
sous la métrique de pavage 2×2. On choisit un sous-ensemble intérieur d'environ 180 pièces,
on recuit sa composition par échanges jusqu'à maximiser localement le nombre de sous-pavages
2×2 réalisables, on place en tête les pièces les plus problématiques, puis on cherche le reste
sous cette ossature. Les constantes numériques du moteur ont été récupérées au bit près à partir
des chaînes de caractères contenues dans `eii.exe`, ce binaire étant leur unique trace subsistante.
Dire que l'on « fait tourner Verhaard » est un raccourci qu'il faut assumer : c'est une lecture
de sa méthode, non de son code. Que ce soit le seul moyen d'exécuter son approche fait partie
du constat.
## Ce qu'elle donne sur le vrai puzzle à cinq indices
En monocœur, 120 secondes, les cinq indices officiels épinglés :
- **438 / 480** arêtes appariées, un plateau **entièrement rempli** (256 pièces sur 256).
- Les cinq indices respectés (une solution stricte aux indices), 42 arêtes rompues, à environ
40 millions de nœuds par seconde.
L'exécution et le plateau produit sont versionnés dans le
[répertoire de référence](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark)
du moteur, et `just experiments single-core-benchmark` le relance, si bien que le 438 est
vérifiable plutôt qu'affirmé. Il s'agit de l'instance à cinq indices, un puzzle plus difficile
que les variantes à coins épinglés que note le [classement](/fr/research/lab/experiments/single-core-benchmark/),
où le même moteur atteint un meilleur score de 451.
Elle a trouvé 438 en une douzaine de secondes environ, puis a stagné sur le reste du budget :
un authentique optimum local pour cette graine et ce temps. C'est la seule des trois
réimplémentations communautaires présentes ici qui résolve bien le vrai puzzle à cinq indices,
plutôt qu'une version plus facile, mais les trois ne mesurent pas la même chose, et la comparaison
demande donc de la prudence.
[Blackwood](/fr/research/lab/experiments/joshua-blackwood/solver/) est mesuré sur la même base,
arêtes appariées avec les indices épinglés, et cale autour de 45.
[McGavin](/fr/research/lab/experiments/peter-mcgavin/backtracker/) ne l'est pas : son chiffre est
une *profondeur* de placement (environ 204 pièces sur 256 atteintes), non un score d'arêtes
appariées, si bien qu'il ne peut se lire sur le même axe que le 438 d'ici, et les deux nombres
ne sont pas directement comparables. Ce que les trois partagent, c'est seulement le verdict selon
lequel le puzzle contraint est bien plus dur que le puzzle libre ; les nombres qui sous-tendent
ce verdict sont sur des échelles différentes.
## À lire aussi
- [eii de Verhaard : le solveur qui a remporté l'unique prix](https://eternity2.dev/fr/research/lab/experiments/louis-verhaard/eii/) — Le moteur derrière le 467, le seul score d'Eternity II jamais récompensé, reconstitué à partir des propres messages de Louis Verhaard sur la liste de diffusion : élagage prospectif, ordres de remplissage en peigne, décalage d'arête conditionné par la profondeur, calendrier de décalage réglé par chaîne de Markov. Et pourquoi son propre binaire Win32, sans code source, ne peut être ni compilé ni exécuté sur cette machine.
- [Benchmark mono-cœur](https://eternity2.dev/fr/research/lab/experiments/single-core-benchmark/) — Quinze solveurs, les nôtres et nos implémentations des deux backtrackers record de la communauté, chacun exécuté une fois sur dix variantes à coins épinglés du casse-tête officiel, un seul cœur, 60 secondes par exécution. Le constat : le nombre de nœuds n'est pas le score.
- [Recherche locale et ALNS](https://eternity2.dev/fr/research/build/local-search/local-search-alns/) — Détruire une partie du plateau, la reconstruire en mieux, et laisser l'algorithme apprendre quelles démolitions rapportent. La recherche à grand voisinage adaptative est le meilleur outil de finition de ce projet, et la démonstration la plus nette du mur où la finition s'arrête.
---
# Comment le laboratoire publie
> Le standard éditorial de ce carnet ouvert : comment un travail de recherche sur Eternity II passe d'un travail non publié à une page publiée. De quel type de contribution il s'agit, s'il est publié, à quel niveau, et où il réside. Un standard commun, conçu pour s'étendre à de nombreux auteurs.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/methodology/
- Mise à jour: 2026-07-21
---
Cette page constitue le standard éditorial qui sous-tend tout ce que contient le
laboratoire. Elle existe pour qu'un résultat parvienne au lecteur sous la forme
d'un objet rédigé, et non d'une note brute, et pour que les mêmes règles
s'appliquent quel que soit l'auteur.
## Ce qui est publié, et ce qui ne l'est pas
La règle de base sur laquelle tout repose :
- **Le travail non publié n'apparaît pas ici.** L'endroit où un chercheur
conserve ses travaux en cours ne regarde que lui. Cela ne figure tout
simplement pas dans ce dépôt. Aucun brouillon inachevé ne traîne dans le
carnet publié.
- **Le travail publié réside dans le laboratoire.** Public, décanté, écrit pour
un lecteur. Il est arrivé là après relecture.
La publication se fait par pull request. Un chercheur ouvre une PR qui ajoute ou
promeut une page, et c'est lors de la relecture de cette PR que se décide la
publication, ainsi que le niveau auquel elle se fait. Rien n'entre dans les
archives publiques sans PR, et c'est sur la PR qu'un second lecteur la confronte
au standard décrit ci-dessous. Cela garde la relecture collégiale plutôt que d'en
faire une barrière lourde, et cela s'étend à de nombreux auteurs.
## Trois axes décrivent chaque page
Les tenir séparés, c'est toute la méthode. Il est facile de confondre « abouti »,
« reproductible » et « relu » en une notion vague de « terminé ». Ce ne sont pas
la même chose.
1. **Contribution :** de quel type de résultat s'agit-il ?
2. **Niveau :** jusqu'où la relecture est-elle allée ?
3. **Rigueur et reproductibilité :** avec quelle fermeté l'affirmation est-elle
étayée ?
Plus l'attribution : qui a fait quoi.
## Axe 1 : la contribution
Tout résultat n'est pas un solveur, et le carnet a cessé de faire comme si. Une
page déclare sa contribution :
- **solveur :** produit un plateau compétitif par recherche. Son score est un
véritable résultat de recherche. Seuls ceux-là gagnent une ligne au classement.
- **analyse :** démontre ou calcule une propriété d'un plateau existant ou de
l'instance. Elle ne produit pas de nouveau plateau.
- **reconstruction :** décode ou reconstitue le travail connu de la communauté
pour en extraire un enseignement. Le nombre est le leur, décodé.
- **théorie :** une propriété mathématique, une loi, ou une preuve
d'impossibilité.
- **méthode :** une technique décrite pour être réutilisée, non un run scoré.
- **mesure :** un benchmark ou une observation empirique sur les solveurs ou les
instances.
- **résultat négatif :** une impasse explorée avec rigueur. À part entière, non
reléguée en note de bas de page.
- **outil** et **exposé :** un artefact logiciel, ou une explication.
La distinction porteuse oppose le solveur à tout le reste. Un solveur par
rencontre au milieu (meet-in-the-middle) qui prouve qu'une fin de partie est
optimale est une analyse, non un solveur, et il n'a pas sa place sur un graphique
de scores même s'il émet un nombre. C'est en réglant bien cet axe que le
classement conserve un sens unique.
Cet axe est aussi une surface de navigation : l'[index par
contribution](/fr/research/lab/experiments/by-contribution/) regroupe les pages selon
l'étiquette qu'elles déclarent, si bien que les analyses, la théorie, les mesures,
et les [impasses gardées comme résultats négatifs à part
entière](/fr/research/lab/experiments/by-contribution/negative/) ont chacune leur
propre étagère.
## Axe 2 : le niveau
Une fois publiée, une page porte un niveau qui indique avec quelle fermeté elle a
été relue :
- **Rapport technique :** public, mais la relecture a seulement confirmé qu'il
est solide et rigoureusement présenté, et non qu'il a été vérifié de façon
indépendante. La page porte un badge « rapport technique », de la même manière
qu'un preprint est estampillé « pas encore relu ». Un état de repos légitime :
tout n'a pas besoin d'aller plus loin.
- **Résultat validé :** un second lecteur, ou le même auteur après un temps de
décantation, a confirmé qu'il tient. Cité, traité comme quasi immuable ; les
corrections se font sur place, annotées.
Deux principes se transposent de la manière dont fonctionne la publication
scientifique ailleurs. Le niveau est estampillé sur la page, si bien que le
lecteur sait toujours ce qu'il a sous les yeux. Et la promotion se joue sur la
rigueur, non sur le résultat : une méthode solide qui n'a rien trouvé est publiée
comme résultat négatif, tandis qu'un résultat frappant obtenu par une méthode
bancale ne l'est pas.
## Axe 3 : rigueur et reproductibilité
Chaque page indique avec quelle fermeté son affirmation centrale est établie
(prouvée, mesurée ou conjecturée) et à quel point elle est rejouable. Pour tout
ce qui est quantitatif, le critère est simple : un nombre n'est publié que
lorsque sa configuration exacte et sa graine (seed) sont archivées et qu'il peut
être rejoué à partir de la documentation. Un score de benchmark sans
configuration rejouable n'est pas publié. Les contributions moins coûteuses
portent une exigence plus légère : un résultat négatif ou une explication demande
un raisonnement solide et des limites clairement énoncées, non un script de
reproduction.
## L'attribution, conçue pour plus d'auteurs
Les pages de chaque chercheur se regroupent automatiquement sur sa page de
contributeur, dérivées de la signature, jamais listées à la main. Ajouter un
auteur revient à ajouter une entrée au registre et à écrire des pages en son nom.
Lorsqu'une page a plus d'une main, un rôle de contributeur léger (qui l'a
exécutée, qui l'a analysée, qui l'a validée, qui l'a rédigée) consigne la
répartition, afin que le crédit reste juste à mesure que le laboratoire grandit.
## La décision, en bref
Lorsqu'un travail est terminé :
1. **Nommer la contribution.** Solveur, analyse, reconstruction, théorie,
méthode, mesure, résultat négatif, outil ou exposé.
2. **Décider s'il est publié.** On publie sur la rigueur, non sur
l'enthousiasme. Une impasse solide est publiée. Un nombre sans configuration
rejouable attend.
3. **Ouvrir une PR à un niveau.** Rapport technique s'il est rédigé mais pas
encore vérifié de façon indépendante ; résultat validé une fois qu'un second
lecteur l'a avalisé.
4. **Le placer.** Les solveurs et leurs semblables dans les expériences ; les
résultats structurels dans pourquoi c'est difficile ; les techniques dans
construire un solveur ; les mesures inter-solveurs avec les benchmarks.
5. **Ne le porter au graphique que si c'est un solveur.**
Voilà tout le standard. Il est volontairement léger, car l'objectif est de
relever le niveau plancher de chaque page sans ralentir le carnet.
## À lire aussi
- [Le laboratoire](https://eternity2.dev/fr/research/lab/) — Le carnet ouvert du wiki : résultats structurels et expériences de recherche nommées, chacune attribuée au chercheur qui l'a menée et reproductible depuis les sources. Un coin de la recherche plus large de la communauté.
- [Expériences](https://eternity2.dev/fr/research/lab/experiments/) — Les expériences de recherche nommées du laboratoire, une section par chercheur. Chacune est un run réel contre Eternity II avec son idée, son meilleur plateau et les questions qu'elle a laissées ouvertes. Le carnet de Raphaël Anjou est ici en entier ; le carnet reste ouvert à tous les autres.
- [Contribuez vos recherches](https://eternity2.dev/fr/research/contribute/) — Ce wiki est le foyer de recherche de la communauté, et il y a de la place pour votre travail. Trois façons de le faire publier, du message sur la liste de diffusion à la pull request, plus le petit jeu de règles maison qui garde chaque page digne de confiance.
---
# Le moteur de Peter McGavin
> Le backtracker C que Peter McGavin a lui-même écrit, le solveur brut le plus rapide que la communauté ait mesuré. Récupéré sur la liste de diffusion, compilé sur un M1 et lancé sur le véritable Eternity II. Son code, son algorithme ; exécuté et documenté ici.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/peter-mcgavin/
- Mise à jour: 2026-07-15
---
Cette section présente le solveur que [Peter McGavin](/fr/research/people/peter-mcgavin/)
a écrit lui-même : le backtracker C qu'il a publié sur la liste de diffusion et
qui, d'après les mesures de la communauté, est le moteur brut le plus rapide
jamais exécuté. L'algorithme et le code sont de lui. Ce qui est ajouté ici, c'est
l'exécution : récupéré depuis les sources, compilé sur une seule machine et
pointé sur le véritable casse-tête, avec les chiffres documentés.
## Pages de cette section
- [Le backtracker C de McGavin : l'histoire du débit, reconstruit ici](https://eternity2.dev/fr/research/lab/experiments/peter-mcgavin/backtracker/) — Le backtracker C de Peter McGavin, le plus rapide de la communauté : une recette d'optimisation de 2007 capitalisée pendant deux décennies via code généré, tables de correspondance et astuces de compteur, puis compilée sur mon M1 et pointée vers le vrai puzzle à 256 pièces, où en mono-cœur elle dépasse 200 des 256 pièces à ~109M placements/s.
---
# Le backtracker C de McGavin : l'histoire du débit, reconstruit ici
> Le backtracker C de Peter McGavin, le plus rapide de la communauté : une recette d'optimisation de 2007 capitalisée pendant deux décennies via code généré, tables de correspondance et astuces de compteur, puis compilée sur mon M1 et pointée vers le vrai puzzle à 256 pièces, où en mono-cœur elle dépasse 200 des 256 pièces à ~109M placements/s.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/peter-mcgavin/backtracker/
- Mise à jour: 2026-07-21
- Sujets: speed, backtracking
- Reproduire: `fetch genbody71.zip from groups.io msg 11749; gcc -Ofast -DG then without -DG`
- Source: Le genbody71.zip de Peter McGavin (groups.io msg 11749, la source d'origine) — https://groups.io/g/eternity2/message/11749
- Source: La recette d'optimisation de Mike Field : « Brute force does not work » (groups.io message 3098, 2007) — https://groups.io/g/eternity2/message/3098
- Source: McGavin retrouve le fil de Field : « I found the old thread » (groups.io message 11338) — https://groups.io/g/eternity2/message/11338
- Source: La méthode 10×10 et les statistiques : 180 années-cœur (groups.io message 9688) — https://groups.io/g/eternity2/message/9688
- Source: L'annonce du 469 : quelques jours sur deux centaines de cœurs (groups.io message 10045) — https://groups.io/g/eternity2/message/10045
- Source: Table de débit multi-cœur, du Raspberry Pi au double Xeon (groups.io message 11369) — https://groups.io/g/eternity2/message/11369
- Source: Vitesses mono-cœur sur neuf combinaisons CPU/compilateur (groups.io message 11643) — https://groups.io/g/eternity2/message/11643
- Source: L'astuce du compteur et le manuel du compilateur (groups.io message 11751) — https://groups.io/g/eternity2/message/11751
- Source: 295M placements/s mesurés sur le code de McGavin (groups.io message 11750) — https://groups.io/g/eternity2/message/11750
---
> **À qui ce travail appartient**
>
> L'algorithme et le C sont le moteur auto-généré de **Peter McGavin** lui-même, publié sur la liste de diffusion. De son propre aveu, il repose sur une recette d'optimisation que Mike Field a publiée en 2007 ([message 3098](https://groups.io/g/eternity2/message/3098)), une dette qu'il a reconnue à deux reprises ([message 11338](https://groups.io/g/eternity2/message/11338), [message 11780](https://groups.io/g/eternity2/message/11780)). Un record est délibérément exclu de cette lignée : son 469 provient de l'exécution du [solveur de Joshua Blackwood](/fr/research/lab/experiments/joshua-blackwood/solver/), et non du sien ([message 10045](https://groups.io/g/eternity2/message/10045)). Cette page, c'est [Raphaël Anjou](/fr/research/people/raphael-anjou/) qui compile et exécute le code de McGavin sur une seule machine et qui documente ce qu'il a fait ; les seules modifications apportées à sa source sont les deux petites décrites ci-dessous.
De fin 2010 à aujourd'hui, Peter McGavin est le bureau des théoriciens de la liste
de diffusion et son chronomètre. C'est lui qui a mis en forme la
[théorie complexe](/fr/research/why/complex-theory/) de Brendan Owen dans un article
LaTeX ([message 9188](https://groups.io/g/eternity2/message/9188)), l'a réimplémentée
comme référence C en 2024
([message 11197](https://groups.io/g/eternity2/message/11197)), a résolu le
[benchmark](/fr/research/build/benchmarks/) ouvert le plus difficile de la communauté et
établi le record de 469 qui a tenu jusqu'au 470 de Blackwood. Mais sous tout cela
court un projet plus discret, vieux de vingt ans : un simple backtracker à balayage
de lignes en C, réglé jusqu'à compter les placements de tuiles par centaines de
millions par seconde. Cette page retrace ce projet à travers ses propres chiffres
publiés (d'où venait la vitesse, ce qu'elle a rapporté et ce que lui-même a dit
qu'elle ne pourrait jamais faire), puis le compile ici et le pointe vers le vrai
puzzle.
## La recette date de 2007, et il le dit
En octobre 2007, en réponse à la question « d'où avez-vous entendu parler de
70 millions de pièces par seconde ? », Mike Field a publié un manuel complet
d'optimisation sous le titre acéré « Brute force does not work »
([message 3098](https://groups.io/g/eternity2/message/3098)). Ses ingrédients : une
table de correspondance indexée par les couleurs nord et ouest d'une cellule, si
bien que trouver les pièces candidates ne coûte qu'un seul accès mémoire ; un ordre
de recherche **fixe** exploité sans pitié (placer une pièce ne met à jour que ses
voisins sud et est) ; aucune boucle du tout, mais du code monolithique *généré*
procéduralement, un bloc en ligne droite par cellule ; un état minimal (reconstruire
la jolie sortie plus tard, ne pas la stocker dans le chemin critique) ; les côtés
d'une pièce empaquetés dans un seul entier ; et la lecture de l'assembleur généré à
la chasse aux vidages de pipeline et aux défauts de cache L1. Le code de Field se
compilait en environ 33 instructions par cellule et tournait à 60-80 millions de
placements par seconde et par cœur sur un ordinateur de bureau de 2007, culminant
près de 100 millions quand le jeu de travail restait dans le cache L1.
Ce message est le génome du moteur de McGavin. Quand il a montré un extrait de son
« affreux code source auto-généré » en 2024, on y reconnaissait le même organisme :
un bloc étiqueté par cellule (`cell_9_2_next:`), une table `LookupNW` indexée par les
couleurs nord et ouest, un tableau `tileFree`, des indications `register` et un
`goto` de retour vers le bloc de la cellule précédente en cas d'épuisement
([message 11337](https://groups.io/g/eternity2/message/11337)). Il est parti à la
recherche de l'origine quelques minutes plus tard et a publié le lien : « I found the
old thread » ([message 11338](https://groups.io/g/eternity2/message/11338)) ; en 2026
il a répété l'attribution : son code C de backtracker optimisé « is based on » le
message de Mike de 2007
([message 11780](https://groups.io/g/eternity2/message/11780)).
Field lui-même fournit la référence de l'époque. En 2011, il a rapporté son propre
backtracker à 75 millions de tuiles placées par seconde et par cœur sur un AMD à
2 GHz, soit environ 26 cycles d'horloge par tuile, avec plus de la moitié du temps
bloqué en attente d'accès mémoire
([message 9003](https://groups.io/g/eternity2/message/9003)). Ce chiffre, grosso
modo 40 à 80 millions par cœur, est ce qu'un moteur communautaire sérieux a délivré
pendant la décennie suivante, celui de McGavin compris.
## Ce qu'il a ajouté, dans ses propres mots
La recette était publique ; la capitalisation est de McGavin. Les raffinements qu'il
a décrits sur la liste, à peu près dans l'ordre où ils apparaissent :
- **Un générateur de code, pas un programme.** Le C par cellule est régénéré pour
chaque puzzle, jeu d'indices et
[chemin de placement](/fr/research/build/backtracking/fill-order/). Son flux de travail
de 2026 est un cycle compilation/exécution/compilation/exécution : la première
passe reconstruit `body.c`, le code de cellule en ligne droite, et la seconde
compile le solveur qui l'embarque. Sautez une étape après avoir modifié un fichier
d'entrée et le programme « won't be doing anything sensible »
([message 11751](https://groups.io/g/eternity2/message/11751),
[message 11782](https://groups.io/g/eternity2/message/11782)). En janvier 2026, il
a publié l'ensemble sur la liste sous le nom `genbody71.zip` : 1 455 lignes de
`genbody.c` plus un README, compilé avec `-DG` pour émettre `body.c` puis à nouveau
sans pour construire le solveur qui l'inclut. Son propre avertissement ouvre le
README : « This is experimental development code that evolved over several years
--- not nice, elegant code at all »
([message 11749](https://groups.io/g/eternity2/message/11749)).
- **Un compteur qui ne coûte presque rien.** `ntpll` (« number of tile placements
per second long long », selon sa propre glose) n'est pas incrémenté directement.
Un registre 16 bits est augmenté à chaque placement, et `0x10000` est ajouté au
compteur 64 bits chaque fois qu'il déborde : un héritage des machines 32 bits où
une incrémentation 64 bits gaspillait des registres ou touchait la RAM lente. Il a
chronométré les deux approches il y a des années ; l'astuce l'a emporté. Sur les
premières machines 64 bits, il était même plus rapide d'installer les bibliothèques
de compatibilité 32 bits et de compiler avec `gcc -m32`
([message 11751](https://groups.io/g/eternity2/message/11751)).
- **Archéologie du compilateur.** Compiler avec clang plutôt que gcc a donné « a
significant speed boost »
([message 11330](https://groups.io/g/eternity2/message/11330)) ; sur ARM, clang-15
bat clang-19 et gcc ; ajoutez `-march=native` et `-mtune=native` ; essayez icc et
icx ; utilisez l'optimisation guidée par profil
([message 11751](https://groups.io/g/eternity2/message/11751)). Rien de tout cela ne
change la recherche. Cela change le nombre de recherches qu'un euro d'électricité
permet d'acheter.
- **Le chemin de placement comme choix mesuré.** Le balayage de lignes est le
meilleur pour E2, mais la spirale entrante l'emporte sur les puzzles à indices 1 et
3, la bordure d'abord sur les 2 et 4, et la spirale sortante sur les variantes sans
cadre ; il vérifie en lançant le solveur ou en interrogeant la théorie complexe,
s'étant découvert « poor at judging solving orders » à l'œil
([message 9703](https://groups.io/g/eternity2/message/9703),
[message 9713](https://groups.io/g/eternity2/message/9713)).
## Les chiffres, de 2007 à 2026
Chaque valeur ci-dessous provient de l'archive, dans les propres unités de son auteur.
| Quand | Chiffre | Contexte | Source |
| --- | --- | --- | --- |
| 2007-10 | 60-80M placements/s/cœur, ~100M en pointe | Recette de Mike Field, AMD X2 3800+ | [3098](https://groups.io/g/eternity2/message/3098) |
| 2011-02 | ~38M placements/s/cœur (2 300 × 10⁶/min) | McGavin comptant les coins 5x5 du 10x10 de Brendan, 4 cœurs ; 8672 est sa propre correction des unités (placements, pas solutions) | [8672](https://groups.io/g/eternity2/message/8672) |
| 2011-06 | ~50M nœuds/s, mono-cœur | AMD Phenom II, balayage de lignes, 8x8 de Brendan | [8863](https://groups.io/g/eternity2/message/8863) |
| 2011-11 | 75M/s/cœur (~26 cycles/tuile) | Référence de Field, AMD à 2 GHz, bloqué mémoire | [9003](https://groups.io/g/eternity2/message/9003) |
| 2013-06 | 44,6M nœuds/s soutenus | un test de première ligne 10x10 à 683 milliards de nœuds | [9167](https://groups.io/g/eternity2/message/9167) |
| 2014-04 | 67M placements/s, mono-cœur | Benchmark d'Arnaud Carré : les 4 solutions en moins d'une minute | [9263](https://groups.io/g/eternity2/message/9263) |
| 2024-10 | 60-140M placements/s par backtracker | « depending on CPU type » | [11329](https://groups.io/g/eternity2/message/11329) |
| 2024-11 | 99M → 10 160M nœuds/s par machine | Raspberry Pi 4 (4 processus) au double Xeon Gold 6338 (128) | [11369](https://groups.io/g/eternity2/message/11369) |
| 2025-09 | 38-84M placements/s, mono-cœur | neuf combinaisons OS/compilateur/CPU sur le 8x8 de Brendan | [11643](https://groups.io/g/eternity2/message/11643) |
| 2026-01 | ~225M placements/s, mono-cœur | Orange Pi 6 Plus sur petits puzzles ; « halves on 16x16 » | [11751](https://groups.io/g/eternity2/message/11751) |
| 2026-01 | 295M placements/s, mono-cœur | Joe exécutant le code de McGavin sur un CPU plus récent, contre son propre C# à 27-37M | [11750](https://groups.io/g/eternity2/message/11750) |
| 2026-02 | 44,0M contre 105,1M tuiles/s | arbre identique de 2,12 mille milliards de nœuds : Phenom II de 2010 contre Ryzen 5 5600H | [11782](https://groups.io/g/eternity2/message/11782) |
Deux lectures de cette table. D'abord, l'accroche : le chiffre de ~295M/s (celui que
notre [page des records](/fr/research/records/) cite) est réel, mais c'est la mesure de
Joe, faite en janvier 2026 quand McGavin a partagé sa source et que Joe l'a exécutée
sur du matériel plus récent que tout ce que McGavin possède ; le propre solveur C# de
Joe atteignait 27-37M/s sur la même machine, et la meilleure vitesse qu'il avait vue
mentionnée sur la liste était 70-90M/s
([message 11750](https://groups.io/g/eternity2/message/11750)). Le meilleur chiffre de
McGavin lui-même est les ~225M/s de l'Orange Pi sur de petits puzzles
([message 11751](https://groups.io/g/eternity2/message/11751)).
Deuxième lecture, plus discrète et plus instructive : la vitesse mono-cœur n'a
quasiment pas bougé pendant quinze ans. McGavin l'a dit lui-même quand il a publié la
table de 2025 : les vitesses sur les CPU les plus récents « are only a little faster »
que sur son Phenom II de 2010
([message 11643](https://groups.io/g/eternity2/message/11643)). Le moteur était déjà
près du mur mémoire que Field décrivait en 2011. Ce qui a réellement grandi, c'est le
nombre de cœurs qu'il pouvait pointer vers un problème.
## Des centaines de cœurs pour un budget de loisir
Le chapitre de McGavin dans l'histoire de la
[résolution distribuée](/fr/research/build/faster/distributed-solving/) de la communauté a
un charme domestique. Pour la campagne 10×10, il a commencé avec une vingtaine de
cœurs à la maison, puis a ajouté trois Odroid XU4 octa-cœur et vingt-cinq Orange Pi
Lite quad-cœur à 12 dollars pièce (plus de 130 cœurs, chaque cœur ARM valant environ
un tiers de la vitesse d'un cœur de PC) et, quand cela était permis, des serveurs
multi-cœurs au travail, pour un total de plus de 400
([message 9688](https://groups.io/g/eternity2/message/9688)). Les Orange Pi tournaient
sur des chargeurs USB 12 ports (il a définitivement tué un chargeur en branchant douze
cartes exécutant 48 backtrackers, et est redescendu à huit par chargeur) avec un
réseau WiFi : un seul câble par carte, pour l'alimentation
([message 9690](https://groups.io/g/eternity2/message/9690)). L'orchestration tient en
deux scripts shell : l'un démarre autant de backtrackers qu'un nœud a de cœurs,
l'autre le lance sur ~20 nœuds via ssh, chacun avec 16 à 48 cœurs, quoique « well,
they are hyperthreads, strictly speaking »
([message 9753](https://groups.io/g/eternity2/message/9753)). Au pic, « more than 400
backtrackers running at once »
([message 9751](https://groups.io/g/eternity2/message/9751)).
## Ce que la vitesse a rapporté
**Les décomptes vérifiés, d'abord.** Les énumérations complètes rapides sont ce qui
permet à la communauté de confronter la théorie à la réalité. En 2011, une exécution
nocturne a compté 4 739 821 621 743 blocs de coin 5×5 du 10×10 de Brendan, contre une
estimation de la théorie complexe de 5,0077 × 10¹², « pretty close… if I do say so
myself » ([message 8672](https://groups.io/g/eternity2/message/8672)). En 2014, son
mono-cœur a parcouru l'arbre du benchmark à 256 pièces d'Arnaud Carré (3 979 209 754
placements, les 4 solutions) en moins d'une minute
([message 9263](https://groups.io/g/eternity2/message/9263)). En 2026, deux machines
différentes ont parcouru le même arbre à 2 120 424 701 160 nœuds d'un puzzle proche
d'E2 et ont trouvé la même unique solution : le déterminisme comme fonctionnalité, le
décompte de nœuds comme somme de contrôle
([message 11782](https://groups.io/g/eternity2/message/11782)).
**Le 10×10, avant tout.** Le 10×10 set_1 de Brendan, un benchmark resté ouvert
pendant une décennie, est tombé en septembre 2017 sous exactement cette machinerie :
énumérer ~20 millions de premières lignes candidates, les classer par le nombre de
solutions par nœud de recherche de la théorie complexe, et laisser la ferme les tester
une par une, environ un jour-cœur chacune. La solution est arrivée au test de ligne
~92 907 sur une sur 70 000 prédite, après près de 2 × 10¹⁷ nœuds, soit environ **180
années-cœur**, moins de 0,5 % de l'arbre entier
([message 9686](https://groups.io/g/eternity2/message/9686),
[message 9688](https://groups.io/g/eternity2/message/9688)), étalés sur environ quatre
ans ([message 9804](https://groups.io/g/eternity2/message/9804)). Son résumé : « no new
methods, just systematic persistence and the law of large numbers. » La
[page des benchmarks](/fr/research/build/benchmarks/) raconte cette histoire comme la
validation la plus forte de la théorie complexe ; ici, elle se dresse comme le point
culminant de l'histoire du débit.
**Et un record, sur le moteur d'un autre.** En septembre 2020, quelques jours après
que Joshua Blackwood a ouvert le code de son solveur, McGavin l'a exécuté « for a few
days on about a couple of hundred cores and hit the jackpot. New record score of
469! » ([message 10045](https://groups.io/g/eternity2/message/10045)), avec des
statistiques d'exécution à l'avenant (2 832 plateaux atteignant 252 pièces, un à 255,
un à 256 : [message 10049](https://groups.io/g/eternity2/message/10049)). Notez ce qui
s'est combiné là : les [heuristiques de Blackwood](/fr/research/lab/experiments/joshua-blackwood/solver/)
ont fourni la forme de la recherche ; la ferme de McGavin a fourni les placements. Son
propre moteur C ne détient aucun record de score E2 ; ses 226 en balayage de lignes de
février 2020 ont égalé l'ancienne marque de placements consécutifs de
[Verhaard](/fr/research/lab/experiments/louis-verhaard/eii/), sans plus
([message 10523](https://groups.io/g/eternity2/message/10523)).
## Ce que la vitesse n'a pas pu acheter
McGavin est aussi le témoin le plus constant de l'archive *contre* la vitesse brute.
Ses propres chiffres font le procès. Avec l'ordre de balayage de lignes, la théorie
complexe situe l'arbre de recherche complet d'E2 à environ 1,6 × 10⁴⁷ placements
([message 9710](https://groups.io/g/eternity2/message/9710)), soit quelque 9,3 × 10⁴²
par solution attendue ([message 9713](https://groups.io/g/eternity2/message/9713)).
Même sur son meilleur chemin de placement à 5 indices (un arbre bien plus petit,
environ 3,1 × 10⁴⁰ nœuds), il a calculé 4,9 × 10³² années à 100 millions de nœuds par
seconde, et ajouter des milliards de cœurs vous laisse encore « orders of magnitude
longer than the age of the Universe »
([message 11201](https://groups.io/g/eternity2/message/11201)). Il en avait tiré la
conclusion bien avant, en 2013 : « It seems clear to me that E2 will not be solved by
brute force. If it is to be solved at all, it will be by deep analysis and/or clever
insight, in my opinion » ([message 9117](https://groups.io/g/eternity2/message/9117)).
C'est pourquoi la plus grande accélération isolée qu'il ait jamais rapportée n'était
pas du tout une accélération. Pour les chasses aux sous-solutions sans cadre, il a
utilisé la théorie complexe comme une anticipation à la manière des échecs : estimer
les solutions par nœud à chaque feuille 13 ou 14 plis en avance, mettre en cache les
statistiques répétées, et diriger vers la meilleure branche. Gain global : un facteur
d'environ 25 à la profondeur 81
([message 9751](https://groups.io/g/eternity2/message/9751)). Aucune option de
compilateur ne lui a jamais donné 25×. Façonner l'arbre a battu réduire les
nanosecondes. C'est la [leçon centrale](/fr/research/why/prune-vs-speed/) de ce site,
rapportée ici comme l'expérience de vingt ans d'un praticien : il a construit le moteur
le plus rapide de l'histoire de la communauté, tout mesuré, et conclu que l'écart
jusqu'à 480 ne s'est jamais joué sur le chronomètre.
## Le faire tourner ici
Tout ce qui précède est tiré de l'archive. Le reste de cette page, c'est ce même
moteur, compilé sur ma machine et pointé vers le vrai puzzle, pour que l'histoire du
débit porte une mesure de première main et pas seulement une mesure relayée.
### D'où vient le code
La source est `genbody.c`, jointe sous forme de `genbody71.zip` au
[message 11749 de groups.io](https://groups.io/g/eternity2/message/11749). C'est
1 455 lignes de C, avec un README, un fichier de pièces et un fichier d'indices. Elle
n'est pas copiée dans ce dépôt : elle reste sur la liste, là où son auteur l'a mise.
C'est un programme à deux passes, et le README est franc sur le style (« dreadful C
source code ... it really needs a lot of work to clean it up »). Compilée avec `-DG`,
elle génère un second fichier C, `body.c`, spécialisé pour un puzzle. Recompilée sans
`-DG`, elle inclut ce fichier généré et exécute la recherche. Ce flux de travail à
deux passes est exactement la conception de générateur de code décrite plus haut,
désormais devant moi.
### Ce qui a été changé pour le faire tourner
Deux choses, toutes deux minimes :
- **Rien, pour le compiler.** Il compile proprement sur silicium Apple avec `clang`
(un avertissement de variable inutilisée). L'affichage de statut POSIX qu'il
utilise, `setitimer` et `termios`, fonctionne sur macOS sans adaptateur.
- **Le puzzle qu'il lit.** Les noms de fichiers étaient codés en dur vers le puzzle de
test de Joe. Je les ai rendus lisibles depuis la ligne de commande pour pouvoir lui
fournir le vrai Eternity II, et j'ai écrit les pièces et indices officiels dans son
format `.puz` / `.hnt` à partir du fichier canonique du puzzle. Son chemin de
recherche est construit de façon générique (cellules d'indice d'abord, puis un
balayage de lignes), donc aucune autre modification n'a été nécessaire.
### Ce qu'il fait sur le puzzle de Joe
Configuré tel que livré, sur le puzzle de test 16×16 à 18 indices de Joe, il est très
rapide et il termine :
- **~279 millions de placements de tuiles par seconde**, mono-cœur.
- Résout le puzzle jusqu'au bout en environ 13 secondes (3,577 milliards de placements
jusqu'à la première solution), à l'identique à chaque exécution.
C'est le chiffre que la communauté entend par « McGavin est rapide ». Il est réel, et
il est sur du matériel actuel, pas une machine vieille de sept ans : parfaitement dans
la ligne des ~295M/s mesurés par Joe, et confortablement au-delà des ~225M/s de
l'Orange Pi de McGavin lui-même.
### Ce qu'il fait sur le vrai Eternity II
Alimenté avec le véritable puzzle à 256 pièces, une fois avec le seul indice central
obligatoire et une fois avec les cinq indices officiels : son solveur ne sauvegarde un
plateau que lorsqu'il trouve une solution **complète**, et le vrai puzzle n'a jamais
été résolu, donc il ne sauvegarde rien et tourne sans s'arrêter. Ce qu'il rapporte, en
direct, c'est la profondeur maximale qu'il a atteinte :
| Puzzle | Placement le plus profond, 30 s | Débit | Solutions |
| --- | --- | --- | --- |
| Vrai E2, 1 indice | **205 / 256** | ~108 M placements/s | 0 |
| Vrai E2, 5 indices | **204 / 256** | ~109 M placements/s | 0 |
Deux choses méritent d'être dites clairement. D'abord, il s'agit d'une **profondeur**
(jusqu'où la recherche est allée avant de rebrousser chemin), et non d'un score
d'arêtes sur 480 : son programme n'émet pas de plateau partiel à re-scorer.
Deuxièmement, le débit sur le vrai puzzle est d'environ 109 millions de placements par
seconde, à peu près 40 % de sa vitesse sur le puzzle de Joe, parce que les contraintes
du vrai puzzle élaguent plus dur. Le nombre d'indices ne le bouge quasiment pas : 205
avec un indice, 204 avec cinq. C'est la même leçon que ses propres messages
atteignent, désormais sur mon propre matériel : le moteur brut est superbe pour
parcourir un arbre et ne dit rien, à lui seul, sur l'endroit où se cache un plateau à
score élevé.
### Mono-cœur, confirmé
Le binaire ne lie que la bibliothèque système, n'a aucune primitive de threading dans
sa source, et maintient un CPU à 100 % (pas 800 %) avec un seul thread du début à la
fin. La vitesse est celle d'un cœur. C'est l'unité juste pour comparer les moteurs, et
c'est celle qu'utilise le
[benchmark mono-cœur](/fr/research/lab/experiments/single-core-benchmark/) pour placer ce
moteur aux côtés de
[celui de Blackwood](/fr/research/lab/experiments/joshua-blackwood/solver/) et de la
[réimplémentation Verhaard](/fr/research/lab/experiments/louis-verhaard/verhaard-reimpl/).
Les trois ne mesurent pas le même axe (le chiffre de McGavin est une profondeur de
placement, pas un score d'arêtes concordantes), donc lisez la comparaison avec
prudence.
Un post-scriptum de première main sur le débit lui-même. Reconstruit sans affichage
(son affichage terminal en direct lui coûte, en fait, ~2,7×) et pointé sur un plateau
facile et un difficile, ce moteur C fixe la barre face à laquelle un
[backtracker à génération de code en Rust portable](/fr/research/lab/experiments/raphael-anjou/jit-backtracker/)
a ensuite été mesuré sur le même M1 : le Rust l'égale sur les plateaux difficiles et
profonds comme le vrai puzzle (~105–110 M chacun) et reste ~2,3× derrière sur les
faciles et peu ramifiés (~287 M contre ~122 M). Un calibrage utile de la part de
l'avantage de ce moteur qui relève de l'artisanat portable et de la part qui tient à la
forme du plateau sur lequel il tourne.
## À lire aussi
- [Le solveur de Blackwood, décodé et exécuté ici](https://eternity2.dev/fr/research/lab/experiments/joshua-blackwood/solver/) — Le backtracker record de Joshua Blackwood, décodé grâce aux notes de Jef Bucas (un échéancier de quotas de couleurs et une tolérance aux mismatchs en fin de partie, réglés presque optimalement), puis construit et exécuté sur mon M1 : tel que publié, il file jusqu'à 248 des 256 pièces en ignorant les indices ; épinglez les cinq indices officiels et le même moteur cale autour de 45.
- [Benchmark mono-cœur](https://eternity2.dev/fr/research/lab/experiments/single-core-benchmark/) — Quinze solveurs, les nôtres et nos implémentations des deux backtrackers record de la communauté, chacun exécuté une fois sur dix variantes à coins épinglés du casse-tête officiel, un seul cœur, 60 secondes par exécution. Le constat : le nombre de nœuds n'est pas le score.
- [La théorie complexe : compter l'arbre de recherche avant de le parcourir](https://eternity2.dev/fr/research/why/complex-theory/) — La théorie complexe de Brendan Owen estime la largeur de l'arbre de recherche à chaque profondeur, et jusqu'au nombre total de solutions. Beaucoup, dans la communauté, la tiennent pour la chose la plus importante à comprendre sur Eternity II.
- [Les benchmarks de la communauté](https://eternity2.dev/fr/research/build/benchmarks/) — Comment une communauté à qui il était interdit de partager les pièces s'est malgré tout dotée d'une culture de test partagée : protocoles de vérification par comptages dérivés, les suites Txibilis et débutants, duels au nombre de nœuds, énumérations complètes, et le seul benchmark qui reste ouvert aujourd'hui.
- [Comment cherchent les solveurs record](https://eternity2.dev/fr/research/build/solvers/) — Comment cherchent réellement les solveurs qui détiennent les records. Ce sont tous, au fond, des backtrackers en profondeur d'abord ; ce qui les distingue, c'est l'ordre dans lequel ils essaient les choses et la manière dont ils assouplissent les règles à l'approche de la fin.
---
# Les expériences de Raphaël Anjou
> Un carnet d'expériences de recherche sur Eternity II, organisé autour des moteurs partagés qui les font tourner, des pipelines de combinaison qui courent après le score, de quatre études qui décortiquent un paradigme de recherche une décision à la fois, et de résolutions exactes de fin de partie. Chacune expose son idée, son meilleur plateau et les questions qu'elle laisse ouvertes. La meilleure atteint 463 sur 480.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/
- Mise à jour: 2026-07-22
---
Voici le carnet des expériences de recherche sur Eternity II de [Raphaël
Anjou](/fr/research/people/raphael-anjou/). Certaines sont des idées originales ;
d'autres réimplémentent fidèlement une technique connue de la communauté pour
mesurer exactement ce qu'elle apporte. Chacune consigne son idée, le plateau
qu'elle a atteint et les questions qu'elle laisse ouvertes, et chaque plateau
est réel et vérifiable dans le [visualiseur](/viewer/). Le meilleur atteint
**463 sur 480** arêtes appariées ; le meilleur de la communauté sur le même
puzzle est 470. Méthodes et plateaux sont ici au complet, rien n'est passé sous
silence.
C'est un carnet, non un résultat unique : mieux vaut donc en connaître
l'agencement avant de s'y plonger.
> **[Interactive: RecentlyAdded]** Rendered on the canonical page (link above); not shown in this markdown export.
## Ce que contient cette section
Deux natures de choses cohabitent ici : l'**appareillage** sur lequel tournent
les expériences, et les **expériences** elles-mêmes. Ces dernières se déclinent
en trois genres : les pipelines qui courent après le score du plateau entier,
les études qui isolent une décision de recherche à la fois, et les résolutions
exactes qui *prouvent* une petite région au lieu de la deviner. Commencez là où
se trouve la question qui vous tient à cœur.
- [Les moteurs](/fr/research/lab/experiments/raphael-anjou/engines/) — La machinerie partagée sur laquelle tournent les expériences : un producteur constructif par faisceau, une recherche locale par destruction-réparation et une famille de préréglages CSP. Documentée une seule fois ici pour que chaque étude puisse y renvoyer au lieu de réexpliquer la machine. Commencez ici si vous voulez comprendre comment fonctionne une recherche avant de lire ce qu'une étude en a fait.
- [Pipelines de combinaison](/fr/research/lab/experiments/raphael-anjou/pipelines/) — Les exécutions nommées qui font grimper le score. Chacune est un pipeline, et non un algorithme isolé : construire un plateau avec un moteur, puis l'améliorer ou l'achever avec un autre. Tout l'intérêt réside dans la répartition du travail entre construction, réparation et fin de partie exacte. C'est de là que viennent les plateaux qui approchent le record.
- [L'étude DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/) — Le retour sur trace en profondeur d'abord, disséqué. Une famille de solveurs à rebroussement partant de zéro, séparés chacun par un seul changement (ordre de remplissage, heuristique, politique de rupture), exécutés sur les dix mêmes variantes à budget fixe, pour chiffrer la valeur de chaque idée.
- [L'étude de réparation](/fr/research/lab/experiments/raphael-anjou/repair-study/) — Sa jumelle, pour la recherche locale par destruction-réparation : quelle région détruire, comment la reconstruire, quand conserver un coup, de quel plateau partir. La boucle avec laquelle les records atteignent réellement le sommet, décortiquée une décision à la fois.
- [Apprendre des plateaux forts](/fr/research/lab/experiments/raphael-anjou/learning/) — Une étude tournée vers l'intérieur : plutôt que de faire varier la recherche, on fait varier ce qu'elle a le droit de *savoir*. Cinq expériences fouillent le corpus des plateaux forts pour en extraire de la structure et la réinjectent, et toutes cinq se heurtent au même mur.
- [L'étude des indices](/fr/research/lab/experiments/raphael-anjou/hint-study/) — Donner gratuitement à un backtracker cinq pièces correctes, dans la géométrie d'indices du puzzle lui-même. Mesurées contre l'absence totale d'indices, elles n'aident jamais un backtracker chronologique sur ces plateaux ; elles peuvent coûter 10 à 20 points à un balayage compact et faire chuter d'environ 345 points un ordre qui court vers les indices, car une pièce épinglée est une contrainte dure qu'un ordre de remplissage fixe doit satisfaire à son arrivée.
- [Rencontre au milieu](/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/) — Résolutions exactes de fin de partie : énumérer une région par les deux bouts et les raccorder sur la couture pour trouver la véritable meilleure complétion, avec la preuve qu'aucune ne fait mieux. Elles mesurent exactement une petite région au lieu de courir après le score du plateau entier.
- [Aller vite](/fr/research/lab/experiments/raphael-anjou/going-fast/) — L'autre levier : non pas une recherche plus fine, mais plus rapide. Un backtracker en Rust portable qui génère et compile du Rust propre à chaque puzzle, porté échelon par échelon jusqu'à un débit de la classe de McGavin - à égalité avec le C le plus optimisé à la main de la communauté sur les plateaux difficiles et réalistes, depuis un langage sûr. Un résultat de vitesse, sur un axe propre, distinct des scores ci-dessus.
Les deux moteurs constructifs, le producteur par faisceau et l'étape de
polissage ALNS, n'ont pas encore leur propre exposé ; là où un pipeline en
pilote un, la page de ce pipeline indique ce que fait ce moteur au niveau dont
l'étude a besoin. Les préréglages CSP sont le seul moteur documenté et mesuré en
intégralité. À côté de cet appareillage, le petit [moteur de
référence](/fr/research/lab/experiments/raphael-anjou/engine/) qui anime les
démonstrations en direct du site et revérifie chaque chiffre a sa propre page.
## Constats et instruments
Tout n'est pas ici pipeline ou étude. Trois pages se tiennent seules, une ligne
chacune :
- [FROSTLINE](/fr/research/lab/experiments/raphael-anjou/frostline/) : une énergie
libre de propagation de croyances sur les pièces restantes de la dernière
rangée, qui prédit par rang à quel point la rangée peut encore s'achever, et
dont le signal meurt au-delà d'une rangée.
- [LEDGER](/fr/research/lab/experiments/raphael-anjou/ledger/) : un élagage sain,
couleur par couleur, de l'offre contre la demande pour un DFS à budget de
ruptures, dont les économies se composent avec la profondeur.
- [L'échelle de tailles](/fr/research/lab/experiments/raphael-anjou/scaling-ladder/) :
un banc qui fait tourner un solveur tel quel sur des plateaux plantés,
entièrement résolubles, de N = 8 à 14, pour trouver où la méthode s'effondre
avant d'engager des semaines sur le vrai 16x16.
Deux autres constats vivent sur l'étagère des pipelines :
[rendre un producteur beam 10x meilleur](/fr/research/lab/experiments/raphael-anjou/pipelines/beam-width/),
où la largeur elle-même s'est révélée la réponse à budget égal, et
[le cadre fluide](/fr/research/lab/experiments/raphael-anjou/pipelines/fluid-frame/),
où un bord parfait s'est révélé être non pas un arrangement unique mais une
variété connexe d'échanges gratuits.
## Où en est le carnet
Lu comme une seule enquête, le carnet suit trois lignes. Les constructeurs
partant de zéro et les pipelines de combinaison plafonnent dans une bande de 436
à 460 arêtes appariées : la construction seule cale, et ce que les pipelines ont
gagné vient de la répartition du travail entre construction, réparation et fin
de partie exacte, non d'un moteur en particulier. La [ligne d'apprentissage sur
corpus](/fr/research/lab/experiments/raphael-anjou/learning/) atteint 460 à 463, et
ses cinq expériences s'arrêtent toutes au même [mur de
rigidité](/fr/research/why/rigidity-wall/). Les résolutions exactes par [rencontre
au milieu](/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/) sont un
résultat d'une autre nature : leurs plateaux à 437-448 s'accompagnent d'une
preuve sur une petite région, non d'une course au score du plateau entier. La
question ouverte du carnet est ce qu'une prochaine expérience devrait changer
pour dépasser 463 ; varier la recherche et varier ce qu'elle sait ont tous deux
buté sur des murs, le levier n'est donc probablement ni l'un ni l'autre seul.
L'écart qui demeure est celui au 470 de la communauté, sur la [page des
records](/fr/research/records/).
Le carnet compte ses scores selon deux conventions, qui ne désignent pas le
même sommet. En arêtes appariées, le meilleur est 463
([PALIMPSEST](/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/)).
Sous la convention stricte des cinq indices, où les cinq indices officiels
doivent occuper leurs cases, le meilleur est 461 : un producteur à ordre en
peigne atteint 457, puis un polissage destruction-réparation le hisse par 459
et 460. Ces deux nombres restent sous les meilleures marques communautaires ;
la [page des records](/fr/research/records/) tient les conventions et le
classement à jour.
## Prochaines rédactions
Des résultats existent au labo sans avoir encore leur page, dans l'ordre
probable d'arrivée : la lignée stricte 461 ci-dessus, le finisseur exact qui
scelle les dernières lignes d'un plateau produit, le faisceau à double
rupture, et le producteur de bassins par nouveauté. Chacun arrivera avec sa
reproduction exécutable, comme les pages ci-dessus.
## Comment lire les scores
Le graphique et le tableau ci-dessous portent deux natures de chiffres à ne
jamais confondre : c'est pourquoi ils sont représentés en deux groupes distincts.
- **Exploration** est le meilleur plateau que chaque méthode a atteint lors
d'exécutions exploratoires sur 8 cœurs, sans que le temps d'horloge soit
consigné. Ce sont les chiffres phares que citent les exposés, et ils plafonnent
au 463 de PALIMPSEST.
- **Banc** est le banc d'essai standardisé sur un seul cœur : un cœur, soixante
secondes, chaque plateau étant re-noté par le même barème canonique. Plus bas,
et *directement comparable* d'une méthode à l'autre, ce que ne permettent pas
les chiffres d'exploration.
Toutes les expériences ne méritent pas une ligne. Les études font varier un
curseur sur une grille de valeurs plutôt que de produire un seul plateau : les
études [DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/) et
[réparation](/fr/research/lab/experiments/raphael-anjou/repair-study/) portent donc
leur propre classement au lieu d'une ligne sur le graphique ; seul leur meilleur
résultat de banc figure ici. [L'étude des
indices](/fr/research/lab/experiments/raphael-anjou/hint-study/) porte de même ses
propres tableaux sur ses pages et n'a pas de ligne sur le graphique. Les cinq expériences
[d'apprentissage](/fr/research/lab/experiments/raphael-anjou/learning/) atteignent
chacune un plateau scoré : elles gardent donc leur ligne en plus de leur foyer
d'étude. Les lignes de banc ci-dessus sont des résultats d'étude, non des pages
autonomes : elles n'apparaissent donc que sur le graphique.
> **[Interactive: ExperimentScoreChart]** Rendered on the canonical page (link above); not shown in this markdown export.
Les expériences nommées sous forme de tableau triable (cliquez sur un en-tête de
colonne pour réordonner par score, nom, méthode ou mois). L'auteur, le mois, la
rigueur et la reproductibilité sont lus depuis la page propre à chaque
expérience, si bien que ce récapitulatif reste en phase avec elles.
s.group !== "bench")} />
## Pages de cette section
- [Les moteurs partagés](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/engines/) — Les moteurs partagés qui sous-tendent les expériences de Raphaël Anjou. Les expériences nommées sont des études qui s'appuient dessus ; voici l'appareillage qu'elles ont en commun. Les préréglages CSP et la réimplémentation de Verhaard sont documentés intégralement, aux côtés du moteur de référence, du backtracker JIT, d'un guide de la vitesse et du harnais de l'échelle de tailles ; les moteurs constructifs ne sont pas encore publiés.
- [Le moteur de référence qui fait tourner ce site](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/engine/) — Le backtracker Rust-vers-WebAssembly qui anime chaque démo en direct et vérifie chaque chiffre de ce wiki. Non pas une machine à records mais un moteur de référence, porté quatre fois et validé octet par octet, conçu pour que les affirmations d'ici soient rejouables.
- [Pipelines de combinaison](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/) — Sept expériences de recherche nommées qui visent le score, chacune un pipeline plutôt qu'un algorithme unique : elle construit un plateau avec un moteur, puis le relève ou l'achève avec un autre. À leurs côtés, deux constats décortiquent la machinerie sur laquelle les pipelines s'appuient. Chaque page consigne son idée, son plateau et les questions qu'elle laisse ouvertes.
- [L'étude DFS](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/) — Une seule question, posée avec soin : parmi les backtrackers en profondeur d'abord pour Eternity II, qu'apporte réellement chaque ordre de remplissage, chaque heuristique et le mécanisme de rupture ? Une famille de backtrackers écrits de zéro, séparés chacun par un seul changement, exécutés sur les mêmes dix variantes à coins fixés, sur un seul cœur, pendant soixante secondes.
- [L'étude sur les indices](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/hint-study/) — Donner à un backtracker cinq pièces correctes gratuitement, dans la géométrie même des indices du puzzle. Il s'avère que cela n'aide pas, et selon l'ordre de remplissage cela peut nuire gravement, car une pièce épinglée est une contrainte dure qu'un ordre de remplissage fixe doit satisfaire à son arrivée. Une famille d'ordres de remplissage, exécutée sur les mêmes plateaux indicés, un seul cœur, mesurée contre l'absence totale d'indices.
- [L'étude de la réparation](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/repair-study/) — La jumelle de l'étude DFS, pour l'autre manière d'attaquer Eternity II : détruire une partie d'un plateau, la reconstruire, garder le changement s'il aide. Une question, posée avec soin. Que rapporte chaque décision de cette boucle : quelle région détruire, comment la reconstruire, quand garder un mouvement, quand redémarrer, et de quel plateau partir ?
- [Apprendre à partir des grilles fortes](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/) — Une étude en cinq expériences d'une seule idée : plutôt que de chercher Eternity II à partir de zéro, exploiter la structure du corpus de grilles fortes déjà trouvées et la réinjecter dans une recherche. Un a priori de position, un vote de coup appris, une boussole de demande rare, un mineur d'anti-motifs et un décodage de record, du signal le plus simple au plus subtil, et le mur unique que les cinq atteignent.
- [Meet in the middle](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/) — Des expériences exactes de fin de partie qui se rejoignent au milieu : énumérer une région depuis deux extrémités et raccorder sur la couture, pour trouver la vraie meilleure complétion avec une preuve plutôt que la meilleure conjecture d'une heuristique. Elles mesurent exactement une petite région au lieu de courir après le score du plateau entier.
- [Aller vite : quand un solveur dépense son budget en vitesse](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/going-fast/) — Certains moteurs Eternity II mettent tout leur effort à parcourir l'arbre de recherche le plus vite possible ; d'autres le mettent dans le jugement sur où chercher. Voici le plaidoyer pour les premiers - ce qu'achète le débit brut, les trois choses différentes qu'on appelle « rapide », et pourquoi le moteur le plus rapide jamais construit ne sait toujours pas résoudre le puzzle.
- [Le backtracker JIT : du Rust portable à égalité avec du C optimisé sur les plateaux difficiles](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/jit-backtracker/) — Un backtracker Rust en profondeur d'abord, sûr et portable, spécialisé à l'exécution en émettant puis compilant du Rust propre à chaque puzzle, porté de 43 à 123 millions de nœuds de recherche par seconde sur un cœur. Mesuré équitablement face au C de Peter McGavin sur la même machine : à égalité sur les plateaux difficiles et profonds comme le vrai Eternity II, et à environ 44 % de sa vitesse sur les faciles. Chaque échelon parcourt l'arbre identique ; tout le gain vient du code, pas de l'algorithme.
- [Un élagage correct par comptage des couleurs pour la recherche tolérante aux ruptures](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/ledger/) — Suivre, couleur par couleur, l'offre de demi-arêtes face à la demande du front dans un DFS à budget de ruptures, et élaguer dès que le déficit ou sa parité dépasse les ruptures restantes. Correct par construction ; le gain se compose avec la profondeur.
- [Lire l'avenir d'une rangée dans ses pièces restantes](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/frostline/) — Une énergie libre issue de la propagation de croyances, calculée sur les pièces restantes de la dernière rangée, prédit le rang de la meilleure fin possible. Le signal n'est pas un proxy du score brut, survit à un changement de producteur et meurt au-delà d'une rangée.
- [L'échelle de tailles](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/scaling-ladder/) — Un banc qui fait tourner n'importe quel solveur, tel quel, sur des plateaux plantés entièrement résolubles à N = 8, 10, 12, 14, chacun avec un plafond prouvé de 2N(N-1) : la taille d'effondrement d'une méthode se mesure avant de passer des semaines sur le vrai 16×16.
---
# L'étude DFS
> Une seule question, posée avec soin : parmi les backtrackers en profondeur d'abord pour Eternity II, qu'apporte réellement chaque ordre de remplissage, chaque heuristique et le mécanisme de rupture ? Une famille de backtrackers écrits de zéro, séparés chacun par un seul changement, exécutés sur les mêmes dix variantes à coins fixés, sur un seul cœur, pendant soixante secondes.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/
- Mise à jour: 2026-07-16
- Sujets: backtracking, search-space, speed
- Reproduire: `just experiments dfs-study`
- Source: Moteur exécutable + résultats versionnés + scripts (le répertoire d'appui de cette étude) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/dfs-study
---
Tout solveur d'Eternity II détenteur d'un record (Blackwood, Verhaard, McGavin)
est un backtracker en profondeur d'abord. Ce qui les distingue d'un backtracker
de premier devoir de la semaine ne tient pas à leur nature mais à une poignée de
décisions : l'ordre dans lequel ils remplissent les cases, l'anticipation qu'ils
appliquent, et le fait de laisser ou non une arête *rompre*. Cette étude démonte
ces décisions. Elle construit de zéro une famille de backtrackers en profondeur
d'abord, chacun séparé de son voisin par un seul changement, et les exécute tous
sur les mêmes dix variantes à coins fixés du puzzle officiel, sur un seul cœur,
soixante secondes par exécution. Le score maximal est de 480 arêtes appariées.
Le but n'est pas de gagner. La variante la plus forte présentée ici tourne en
moyenne autour de 430 tout juste, bien en deçà des 464 de la communauté sur ces
cinq indices, car soixante secondes sur un cœur ne représentent qu'une fraction
infime du calcul qu'ont demandé les records. Le but est d'isoler *ce que vaut
chaque idée* en ne changeant qu'une chose à la fois et en mesurant le résultat
avec le même scoreur canonique pour chaque plateau.
> **[Interactive: StartingPuzzleCarousel]** Rendered on the canonical page (link above); not shown in this markdown export.
## La famille, et le classement
Quatre familles, disposées de sorte que des voisins diffèrent d'une seule
décision. **Baseline** est le backtracker le plus brut possible, accompagné d'un
jumeau spécialisé à la main qui chiffre le coût de l'ingénierie bas niveau.
**Path order** fixe tout sauf la séquence dans laquelle les cases sont remplies.
**Heuristic** fixe l'ordre et ajoute un propagateur à la fois. **Break** est
l'axe d'élite : le mécanisme de rupture d'arête à seuil de profondeur sur lequel
reposent les records. Les moteurs record de la communauté, le C de McGavin et le
C# de Blackwood, sont eux-mêmes des backtrackers à rupture, ils prennent donc
place dans la famille break, et non dans une catégorie à part. Savoir de qui est
le code d'un moteur reste affaire d'étiquetage, non de couleur. Les deux
apparaissent dans le classement à leur score à coins fixés, marqués d'un badge là
où ils s'effondrent, puis de nouveau sur une grille sans fixation plus bas, où
ils tournent tels qu'ils ont été conçus.
> **[Interactive: DfsStudyLeaderboard]** Rendered on the canonical page (link above); not shown in this markdown export.
## Ce que l'étude a trouvé
- **L'ordre de parcours est le plus grand levier gratuit, et le mauvais ordre est
catastrophique.** Un simple parcours ligne par ligne tourne en moyenne à 377 ;
un remplissage strict bord d'abord ou en spirale, sans heuristique pour le
sauver, plafonne autour de 67. Même moteur, même budget, un écart de plus de
300 points dû au seul ordre de remplissage.
- **L'heuristique de la case la plus contrainte (MRV) est ce qui rend le bord
d'abord viable.** Elle fait passer un bord d'abord en panne de la soixantaine à
une moyenne de 324, au prix de trois ordres de grandeur sur le débit de nœuds.
Le débit de nœuds et le score sont deux axes distincts, une distinction sur
laquelle l'étude revient de bout en bout.
- **Davantage de propagation n'a pas acheté davantage de score à ce budget.** Le
forward-checking, l'arc-cohérence et le raisonnement par couleur atterrissent à
un point près l'un de l'autre (322, 321, 321), un écart bien à l'intérieur de la
dispersion d'une exécution à l'autre : une anticipation plus lourde n'a donc ni
aidé ni clairement nui. Elle dépense les soixante secondes à prouver de petites
régions plutôt qu'à descendre plus profond.
- **Les ruptures descendent plus profond que n'importe quelle recherche stricte.**
Les backtrackers stricts plafonnent dans les 200 tout juste (le plus rapide,
NAIVE-CODEGEN, à 216) ; un budget de rupture à seuil de profondeur dépasse 245 et
tourne en moyenne autour de 430, car il peut forcer le passage au-delà d'une
arête localement inappariable au lieu de remonter pour en sortir. Le facteur
décisif est le *calendrier* des ruptures : déverrouiller les ruptures trop tôt
(l'échelle de Verhaard, moyenne 399) score bien en deçà de l'échelle plus
tardive de Blackwood (moyenne 431). Relever le plafond par case de un à deux n'a
pas aidé à ce budget, un résultat nul rapporté comme mesuré.
Chacun de ces points a sa propre page : la construction du moteur et la
signification de chaque statistique relevée figurent sur la
[page de méthode](/fr/research/lab/experiments/raphael-anjou/dfs-study/method/), et les
comparaisons de parcours, d'heuristique et de rupture sont détaillées sur la
[page des résultats](/fr/research/lab/experiments/raphael-anjou/dfs-study/findings/).
## Comment lire les chiffres
Chaque plateau est re-scoré par un unique scoreur canonique, et le score
auto-déclaré d'aucun moteur n'est pris pour argent comptant. Le débit est rapporté
en nœuds de recherche par seconde et n'est **jamais comparé d'une famille à
l'autre**, car un nœud qui exécute une arc-cohérence complète n'est pas la même
unité de travail qu'un placement naïf. La profondeur est le placement le plus
profond qu'a atteint une variante, sur 256.
Le nombre de ruptures mérite une définition précise, car il est facile de
l'énoncer de façon vague. Le *score* d'un plateau est le nombre de ses arêtes
intérieures appariées, et l'écart `480 − score` est le déficit total d'arêtes
non appariées du plateau. Sur un plateau **achevé**, chaque arête non appariée est
une véritable rupture, si bien que là le score vaut exactement `480 − #ruptures`.
Soixante secondes suffisent rarement à remplir le plateau, cependant, de sorte que
la plupart des plateaux de variantes à rupture présentés ici sont partiels, et
leur déficit est dominé par des arêtes simplement encore vides plutôt que rompues.
Cette étude rapporte donc le **vrai nombre de ruptures**, c'est-à-dire les
non-appariements intérieurs que la recherche a effectivement engagés sous son
budget, suivis par la recherche elle-même plutôt qu'inférés du score. Ce nombre
reste petit même quand le déficit est grand. Chaque plateau porte une `.url` bucas
qui s'ouvre dans le [visualiseur](/viewer/), de sorte que le score comme les arêtes
rompues peuvent se vérifier directement.
Tout l'appareillage (l'espace de travail du moteur, les dix variantes, les
résultats par exécution versionnés et les scripts de grille) réside sous le
[répertoire d'appui](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/dfs-study)
de l'étude, et `just experiments dfs-study` reconstruit le moteur et relance toute
la grille.
## Pages de cette section
- [Comment l'étude DFS est construite](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/method/) — Le moteur derrière l'étude DFS : un backtracker composable où une variante est un changement déclaré au-dessus d'un parent, une couche IO partagée que chaque algorithme parle, et les définitions de chaque statistique que l'étude soulève : débit de nœuds, profondeur, ruptures.
- [Ce que l'étude DFS a montré](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/findings/) — Les trois comparaisons au cœur de l'étude DFS, menées jusqu'au bout : l'ordre de remplissage (le balayage par lignes gagne, un mauvais ordre est catastrophique), les heuristiques (MRV sauve le remplissage du bord d'abord mais coûte du débit ; davantage de propagation n'a rien apporté) et les ruptures (elles brisent le mur de profondeur ; le levier, c'est le calendrier de ruptures, pas le plafond par cellule).
## À lire aussi
- [Les expériences de Raphaël Anjou](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/) — Un carnet d'expériences de recherche sur Eternity II, organisé autour des moteurs partagés qui les font tourner, des pipelines de combinaison qui courent après le score, de quatre études qui décortiquent un paradigme de recherche une décision à la fois, et de résolutions exactes de fin de partie. Chacune expose son idée, son meilleur plateau et les questions qu'elle laisse ouvertes. La meilleure atteint 463 sur 480.
- [Benchmark mono-cœur](https://eternity2.dev/fr/research/lab/experiments/single-core-benchmark/) — Quinze solveurs, les nôtres et nos implémentations des deux backtrackers record de la communauté, chacun exécuté une fois sur dix variantes à coins épinglés du casse-tête officiel, un seul cœur, 60 secondes par exécution. Le constat : le nombre de nœuds n'est pas le score.
- [Ordres de remplissage](https://eternity2.dev/fr/research/build/backtracking/fill-order/) — L'ordre dans lequel un algorithme de retour arrière visite les 256 cases est son unique liberté : il ne coûte rien à l'exécution et fait varier la taille de l'arbre de recherche de plusieurs ordres de grandeur. Vingt ans de science communautaire, des guerres fixe-contre-dynamique aux courses de stratégies, jusqu'au carré magique 10×16 et à la recherche en peigne de Verhaard, répondent tous à la même question : quel chemin à travers le plateau est le moins coûteux ?
---
# Ce que l'étude DFS a montré
> Les trois comparaisons au cœur de l'étude DFS, menées jusqu'au bout : l'ordre de remplissage (le balayage par lignes gagne, un mauvais ordre est catastrophique), les heuristiques (MRV sauve le remplissage du bord d'abord mais coûte du débit ; davantage de propagation n'a rien apporté) et les ruptures (elles brisent le mur de profondeur ; le levier, c'est le calendrier de ruptures, pas le plafond par cellule).
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/findings/
- Mise à jour: 2026-07-16
- Sujets: backtracking, search-space, speed
- Source: Résultats par exécution versionnés (results.jsonl) et rapport par famille (report.md) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/dfs-study/results
---
Trois comparaisons portent l'[étude DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/).
Chacune isole une décision en maintenant tout le reste fixe. Tous les scores sont le
nombre moyen d'arêtes appariées sur les dix variantes à coins épinglés, mono-cœur, soixante
secondes. Le débit se mesure en nœuds de recherche par seconde et n'est jamais comparé d'une
famille à l'autre.
## Ce qu'apporte la spécialisation bas niveau : du débit, et rien d'autre
Les deux références exécutent le *même* algorithme strict de balayage par lignes : `NAIVE-CLEAN`
comme moteur généraliste lisible, `NAIVE-CODEGEN` comme boucle chaude 16×16 spécialisée à la
main, réservée au balayage par lignes. La spécialisation livre ce qu'elle promet sur l'axe
qu'elle vise. `NAIVE-CODEGEN` est sensiblement plus rapide par nœud, jusqu'à un tiers de plus sur
certaines instances. Sur le *score*, les deux se valent, à un point ou deux d'écart à soixante
secondes et bien à l'intérieur de la dispersion entre exécutions, ce qui est la lecture honnête
plutôt qu'une affirmation selon laquelle la spécialisation *nuirait*. À temps de calcul fixé, un
moteur plus rapide atteint un point différent du même arbre, et la meilleure solution partielle
d'un retour sur trace ne varie pas de façon monotone avec la vitesse à laquelle il y est parvenu.
Les références constituent donc une comparaison de *vitesse* propre et ne sont délibérément pas
présentées comme une comparaison de *score*. Les effets sur le score qui méritent d'être étudiés
se trouvent tous sur les axes ci-dessous, là où la recherche elle-même change.
## Ordre de remplissage : le balayage par lignes gagne, et le mauvais ordre est catastrophique
Fixons le moteur (strict, sans heuristique) et changeons uniquement l'ordre dans lequel les
cellules sont remplies. Les six ordres ne diffèrent que par l'endroit où la recherche envoie son
front, montré ci-dessous.
> **[Figure]** Les six ordres de remplissage, tracés comme le chemin que parcourt la recherche — interactive: PathOrderDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
- **Le balayage par lignes** est la référence forte, avec une moyenne de 377. Sa zone
d'endommagement reste constante, puisque chaque nouvelle cellule a les deux mêmes voisines déjà
placées, si bien qu'il atteint une grande profondeur avant le mur strict.
- **Un remplissage strict du bord d'abord ou en spirale s'effondre.** Remplir d'abord l'anneau du
bord, sans anticipation, mène droit dans les contraintes de coin et de bord les plus dures et
cale presque aussitôt, autour d'une moyenne de 67 à une profondeur d'environ 66. La spirale paie
la même taxe de fermeture.
- **Le balayage par lignes de bas en haut fait encore pire sur cette géométrie d'indices**
(moyenne 226, mais aussi bas que 18 sur certaines variantes), parce que les indices épinglés se
trouvent dans des lignes que le remplissage de bas en haut atteint tôt et ne peut pas satisfaire.
Même moteur, mêmes soixante secondes, un écart de plus de 300 points dû au seul ordre de
remplissage. C'est la forme mesurée d'un savoir de la communauté : le bord d'abord n'est bon
qu'*avec* une heuristique pour choisir les cellules à l'intérieur de l'anneau. Seul, c'est l'un
des pires ordres disponibles.
Éprouvez le levier vous-même : choisissez l'un des neuf ordres de parcours du moteur ci-dessous et regardez le même retour sur trace atteindre une profondeur différente sur le même puzzle.
> **[Interactive: DfsScanOrderLab]** Rendered on the canonical page (link above); not shown in this markdown export.
## Heuristiques : MRV sauve le bord d'abord, mais le débit s'effondre
Fixons maintenant le chemin près du cadre et ajoutons une chose à la fois. Le plus grand levier
est **MRV**, qui remplit ensuite la cellule vide la plus contrainte, choisie dynamiquement. Il
transforme le bord d'abord qui calait (moyenne 67) en une recherche dont la moyenne est de 324
(meilleur 341) à une profondeur d'environ 190. Il recalcule aussi la cellule la plus contrainte
sur tout le front à chaque étape, si bien que le débit en nœuds chute de trois ordres de grandeur,
de dizaines de millions de nœuds par seconde à quelques milliers. Chaque nœud vaut bien plus, et
on en visite bien moins. Le débit en nœuds et le score sont des axes différents.
Ajouter une anticipation plus lourde par-dessus n'a **pas** rapporté davantage de score à ce budget.
- **La vérification en avant** (rejeter un placement qui vide le domaine d'une voisine) a atteint
une moyenne de 322.
- **La cohérence d'arc** et la **vérification d'approvisionnement par couleur** ont atteint chacune
une moyenne de 321. Avec une dispersion de score par variante d'environ 11 points sur les dix
instances, cet écart d'un point est bien dans le bruit : les trois propagateurs sont ici
statistiquement indiscernables, si bien que la lecture honnête est qu'une anticipation plus lourde
n'a ni aidé ni clairement nui, plutôt que la vérification en avant l'aurait emporté.
- Un ordonnancement des valeurs **couleurs rares d'abord** est resté inerte, pas meilleur que le
simple ordre d'insertion, faisant écho au résultat négatif répété de la communauté sur les ordres
de valeurs à l'intérieur d'un même seau.
La leçon n'est pas que la propagation est inutile. C'est qu'à petit budget fixe, sur cette instance,
l'élagage utile le moins cher (la vérification en avant) capte déjà tout le bénéfice disponible, et
qu'un raisonnement plus coûteux ne récupère pas son surcoût par nœud en soixante secondes.
## Ruptures : au-delà du mur, et le calendrier est le levier
Le retour sur trace strict, quel que soit son ordre ou son heuristique, frappe un mur bien avant un
plateau complet : le balayage par lignes plafonne autour de la profondeur 208 sur 256, et même la
variante stricte la plus rapide (NAIVE-CODEGEN) n'atteint que 216. Les moteurs recordmen le
franchissent en *rompant* : ils autorisent un nombre borné d'incompatibilités d'arêtes intérieures,
libérées selon un calendrier de profondeur, avec une règle interdisant qu'une cellule porte trop
d'arêtes rompues. Le score d'un plateau complet est alors `480 − #ruptures`.
- **Les ruptures franchissent le mur.** Un budget de ruptures conditionné par la profondeur atteint
au-delà de la profondeur 245 et tourne autour des 430 (rupture-1 donne 431 sur 480, meilleur 435),
un gain important sur les 370 et quelques du strict, sur les mêmes instances et le même budget.
C'est le mécanisme derrière les retours sur trace recordmen de la communauté, non pas un paradigme
différent mais un relâchement de la règle d'appariement conditionné par la profondeur.
- **Autoriser une seconde rupture par cellule n'a pas aidé ici.** Une rupture et deux ruptures
atteignent le même meilleur plateau (435), et leurs moyennes (431,3 contre 428,5) sont dans la
dispersion propre à la variante à deux ruptures, si bien qu'aucune ne domine en moyenne. Ce qui
les distingue, c'est la régularité : la variante à une rupture est étroitement groupée (jamais en
dessous de 427), tandis que la variante à deux ruptures descend jusqu'à 402. La géométrie à double
rupture qu'emploient les plateaux 460 de la communauté semble avoir besoin de plus de soixante
secondes pour porter ses fruits ; à ce budget, la liberté supplémentaire élargit surtout le
branchement sans atteindre de meilleurs plateaux. C'est un résultat nul, rapporté tel qu'il a été
mesuré plutôt que tel qu'on pourrait l'espérer.
- **Le calendrier est le levier décisif.** L'échelle de glissement de Verhaard débloque les ruptures
bien plus tôt que celle de Blackwood (profondeur 193 contre 201) et obtient ici un score nettement
moins bon (moyenne 399 contre 431), parce que débloquer tôt dépense le budget en ruptures peu
profondes. Quand et à quelle vitesse les ruptures s'ouvrent est une décision de réglage plutôt
qu'un détail.
Ces chiffres de ruptures voisinent avec ceux des réimplémentations à la Blackwood et à la Verhaard,
reparties de zéro, du benchmark frère, qui atteignent les 430 et quelques sur les mêmes cinq
indices. L'accord d'un moteur indépendant valide de façon croisée la machinerie de ruptures ici.
## Où se situent les moteurs de la communauté : deux grilles
Blackwood et McGavin sont le haut de gamme de cette même famille, et tous deux se compilent et
s'exécutent sur cette machine, si bien que cette étude les a fait tourner sur une grille épinglée et
une grille non épinglée, chaque score étant recalculé canoniquement à partir du plateau propre au
moteur. Le résultat est un enseignement à part entière, et il a deux moitiés.
**Sur la grille épinglée, ils s'effondrent.** Le C de McGavin, compilé avec les propres options ARM
de son auteur (réglage natif plus optimisation au moment de l'édition de liens), atteint la
profondeur 211 sur le puzzle à indice central simple à environ 85 millions de tuiles par seconde,
bien devant notre moteur strict le plus rapide, et pourtant épingler trois coins l'effondre à la
profondeur 21, un score canonique de 13. Son chemin de balayage engendré ne visite jamais les coins
tôt, si bien qu'un coin épinglé contraint aussitôt son voisinage et coince le chemin fixe presque
immédiatement. Le C# de Blackwood code en dur son jeu de pièces et son balayage, si bien qu'il ne
peut même pas exprimer un épinglage de coin arbitraire ; sur la contrainte à cinq indices
correspondante, son heuristique de ruptures s'agite jusqu'à la profondeur 47, un score canonique de
75, parce qu'il est réglé pour l'instance à un indice, quasi non contrainte, où son record de 470 a
été établi.
> **[Figure]** L'effondrement à l'épinglage des coins : cellules placées sur 256 — interactive: PinCollapseDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
Cet effondrement est justement le propos. Un moteur recordman bâti autour d'une configuration
d'indices ne se transfère pas à une autre, et un chemin de balayage fixe ne peut pas absorber un
épinglage arbitraire. Nos moteurs repartis de zéro traitent un épinglage comme une cellule
pré-placée que le balayage saute simplement, ce qui explique pourquoi ce sont eux, et non les
binaires de la communauté, qui font office de doublures sur la grille épinglée.
**Sur une grille non épinglée équitable, ils tournent comme prévu.** Donnez à chaque moteur les
pièces officielles avec le seul indice central obligatoire, et rien ne se coince sur un coin. En
soixante secondes sur un cœur, McGavin atteint 392, notre moteur de ruptures le plus fort 344, la
réimplémentation de Verhaard 286, et Blackwood 214. Lisez ces chiffres comme ce qu'un seul cœur
achète en une minute à froid, non comme le plafond d'un moteur : le 470 de Blackwood et les
exécutions profondes de McGavin sont venus de journées sur des centaines de cœurs, que ce budget ne
peut pas montrer. Ce que la grille montre, en revanche, c'est que les quatre tournent correctement
une fois disparus les épinglages qui brisent un chemin de balayage fixe, ce qui est exactement ce
que la grille épinglée refusait aux deux moteurs étrangers. Les deux grilles figurent sur le
classement de l'étude ci-dessus.
## Le fil conducteur
Un thème traverse les trois comparaisons : **le nombre de nœuds n'est pas le score.** Les variantes
les plus rapides par nœud (la référence en codegen et le moteur strict de balayage par lignes)
n'atteignent pas les meilleurs plateaux ; la plus lente par nœud (MRV avec propagation) en atteint
de bien meilleurs ; et les ruptures qui l'emportent le font en changeant *quelle* branche est
légale, non en visitant les branches plus vite. La vitesse brute est un facteur constant, tandis
qu'où la recherche peut aller et si elle en a le droit est le facteur exponentiel.
## À lire aussi
- [L'étude DFS](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/) — Une seule question, posée avec soin : parmi les backtrackers en profondeur d'abord pour Eternity II, qu'apporte réellement chaque ordre de remplissage, chaque heuristique et le mécanisme de rupture ? Une famille de backtrackers écrits de zéro, séparés chacun par un seul changement, exécutés sur les mêmes dix variantes à coins fixés, sur un seul cœur, pendant soixante secondes.
- [Comment l'étude DFS est construite](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/method/) — Le moteur derrière l'étude DFS : un backtracker composable où une variante est un changement déclaré au-dessus d'un parent, une couche IO partagée que chaque algorithme parle, et les définitions de chaque statistique que l'étude soulève : débit de nœuds, profondeur, ruptures.
- [Ordres de remplissage](https://eternity2.dev/fr/research/build/backtracking/fill-order/) — L'ordre dans lequel un algorithme de retour arrière visite les 256 cases est son unique liberté : il ne coûte rien à l'exécution et fait varier la taille de l'arbre de recherche de plusieurs ordres de grandeur. Vingt ans de science communautaire, des guerres fixe-contre-dynamique aux courses de stratégies, jusqu'au carré magique 10×16 et à la recherche en peigne de Verhaard, répondent tous à la même question : quel chemin à travers le plateau est le moins coûteux ?
- [Un élagage correct par comptage des couleurs pour la recherche tolérante aux ruptures](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/ledger/) — Suivre, couleur par couleur, l'offre de demi-arêtes face à la demande du front dans un DFS à budget de ruptures, et élaguer dès que le déficit ou sa parité dépasse les ruptures restantes. Correct par construction ; le gain se compose avec la profondeur.
---
# Comment l'étude DFS est construite
> Le moteur derrière l'étude DFS : un backtracker composable où une variante est un changement déclaré au-dessus d'un parent, une couche IO partagée que chaque algorithme parle, et les définitions de chaque statistique que l'étude soulève : débit de nœuds, profondeur, ruptures.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/method/
- Mise à jour: 2026-07-16
- Sujets: backtracking, speed
- Source: L'espace de travail du moteur (dfs-engine, dfs-run) sur la bibliothèque partagée e2-core / e2-io — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/dfs-study/engine
---
Cette page est l'appareillage derrière l'[étude DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/) :
comment le moteur est construit, pourquoi une nouvelle variante coûte peu à ajouter,
et ce que signifie chaque nombre parmi les résultats. Rien de tout cela ne dépend
du moteur du [benchmark monocœur](/fr/research/lab/experiments/single-core-benchmark/)
voisin. Tout l'enjeu était de réimplémenter la famille de zéro, en gardant le génie
logiciel propre et le récit du « quoi s'empile sur quoi » explicite.
## Une variante est un changement déclaré au-dessus d'un parent
Chaque algorithme de l'étude est le *même* backtracker récursif en profondeur
d'abord, paramétré par quatre choix indépendants :
- **ordre de parcours** : la séquence dans laquelle les cases sont remplies (par
lignes, en spirale, bordure d'abord, le peigne de Verhaard, ou dynamique par
case la plus contrainte) ;
- **ordre des valeurs** : l'ordre dans lequel les pièces candidates d'une case sont
essayées ;
- **propagateur** : l'anticipation exécutée après chaque placement (aucune,
vérification en avant, arc-cohérence, raisonnement par couleur) ;
- **politique de rupture** : si une arête peut être discordante, et sous quel budget
conditionné par la profondeur.
Une variante est un petit enregistrement nommant ces quatre choix, accompagné du
**parent dont elle dérive et d'une description en une ligne du changement unique
qu'elle ajoute**. Ajouter une variante revient à ajouter un enregistrement au
registre, sans nouveau code de recherche à moins que l'idée ne soit une stratégie
véritablement nouvelle. La matrice du « quoi s'empile sur quoi » de la page des
résultats est générée à partir de ces descriptions, si bien qu'elle ne peut pas
diverger du code qui a tourné. C'est ce qui garde une étude étendue, avec des
dizaines de variantes distantes d'un seul changement, maintenable plutôt qu'un tas
de solveurs copiés-collés.
## Une couche IO, et des conversions entre moteurs
Chaque algorithme de l'étude consomme un seul type d'instance et émet une seule
sortie : le meilleur plateau, son score canonique, et une URL bucas. Autour de cela
s'articule une couche IO partagée dotée de convertisseurs sans perte entre les
formats que parlent les autres moteurs du site : le JSON au schéma du site du
benchmark, le CSV des moteurs communautaires autonomes, les URL bucas, et les
fichiers d'indices. L'étude lit les *mêmes* dix variantes à coins épinglés que le
benchmark monocœur utilise, à travers cette couche, de sorte que les deux
expériences sont directement comparables. Un petit utilitaire `dfs-convert` expose
les conversions depuis le shell, si bien que la sortie de n'importe quel moteur du
blog peut alimenter n'importe quel autre.
## Le scoreur est l'unique source de vérité
Aucun score auto-déclaré par un moteur n'est digne de confiance. Chaque plateau,
strict ou rompu, est re-scoré par un unique scoreur canonique : les adjacences
intérieures, hors bordure, concordantes, comptées à droite et vers le bas pour
chaque case. C'est octet pour octet la même formule que celle du scoreur du site et
du benchmark, vérifiée par un test qui re-score un plateau à 469 connu et exige 469.
C'est ce qui permet aux scores de variantes différentes, et à ceux du benchmark
voisin, de tenir sur un seul axe.
## Les statistiques que l'étude soulève
Pour chaque exécution, le moteur enregistre - et les résultats les portent jusqu'à
la page :
- **score** : arêtes concordantes canoniques (sur 480). Pour un plateau complet avec
ruptures, cela égale `480 − #breaks`.
- **débit de nœuds** : nœuds de recherche par seconde, un nœud par placement tenté.
Rapporté par variante et **jamais comparé entre familles**, parce qu'un nœud qui
exécute une arc-cohérence complète n'est pas la même unité de travail qu'un
placement naïf. Une propagation lourde échange du débit contre de la qualité de
nœud, et l'étude mesure les deux axes plutôt que de les fondre en un seul. Les
variantes les plus lentes portent une réserve qu'il vaut la peine d'énoncer
franchement : le moteur MRV choisit la case la plus contrainte en parcourant la
liste de candidats de chaque case vide à chaque nœud, ce qui est intrinsèquement
plus lourd qu'un ordre de remplissage fixe. Deux optimisations préservant le
comportement le ramènent à quelques fois le coût des moteurs rapides, plutôt qu'aux
milliers de fois qu'il valait autrefois : la recherche de la case la plus
contrainte cesse de compter les candidats d'une case dès qu'ils dépassent la
meilleure case trouvée jusqu'ici (une recherche de minimum n'a jamais besoin du
décompte exact d'une case qui ne peut pas l'emporter), et elle évite de revérifier
les arêtes sur lesquelles la liste de candidats est déjà indexée. Ce qu'elle ne
fait toujours pas, c'est maintenir le décompte de candidats de chaque case de façon
pleinement incrémentale d'un placement à l'autre, ce que ferait un solveur CSP de
production ; cette dernière étape devrait suivre comment une pièce nouvellement
utilisée affecte le décompte de chaque case, et elle est laissée de côté ici pour
garder le moteur lisible. Le classement par score ne dépend d'aucun de ces points,
puisque le débit est un axe distinct, mais le débit de nœuds MRV doit se lire comme
celui de ce moteur propre plutôt que comme le meilleur possible de MRV.
- **profondeur maximale atteinte** : le placement le plus profond effectué par la
recherche, sur 256, la mesure par l'étude de la distance parcourue par une variante.
Le backtracking strict heurte un mur dans les bas 200 (par lignes 208, la variante
stricte la plus rapide 216) ; les ruptures le poussent bien au-delà, jusqu'à 243 à
245.
- **profondeur à l'expiration** : où se tenait le front de recherche quand l'horloge
a sonné, de sorte qu'une variante qui n'aboutit jamais enregistre quand même où elle
travaillait.
- **nombre de ruptures** : les arêtes intérieures sur lesquelles la recherche a
réellement *rompu* sur le meilleur plateau. C'est zéro pour une variante stricte, et
pour une variante à ruptures c'est le décompte que sa propre comptabilité de budget
a engagé plutôt que le déficit de score. Sur un plateau achevé, cela égale
`480 − score` ; sur un partiel expiré, le déficit compte aussi les arêtes encore
vides, donc l'étude rapporte plutôt le vrai nombre de ruptures. L'URL bucas de chaque
plateau rend les deux vérifiables dans le [visualiseur](/viewer/).
- **retours arrière** : reculs hors d'une case après épuisement de ses candidats.
## Les deux références, et ce que coûte la spécialisation
La variante la plus brute, `NAIVE-CLEAN`, est un moteur général lisible : des listes
de candidats par case sans sentinelle, indexées par les deux voisins déjà placés, un
cache d'arêtes résolues pour qu'aucune rotation ne soit recalculée sur le chemin
chaud, et aucune allocation à l'intérieur de la recherche. Sa jumelle, `NAIVE-CODEGEN`,
est le *même algorithme* réexprimé sous forme de boucle chaude spécialisée à la main,
16×16 uniquement, par lignes, gardée comme programme séparé pour que le moteur général
reste propre. Les faire tourner face à face chiffre le prix du génie de bas niveau :
sur ce puzzle, il achète un gain de débit modeste et dépendant de l'instance et,
notamment, aucun meilleur score. Les chiffres sont sur la
[page des résultats](/fr/research/lab/experiments/raphael-anjou/dfs-study/findings/).
## Correction des propagateurs
La vérification en avant, l'arc-cohérence et le contrôle d'approvisionnement par
couleur sont corrects *par construction*. Chacun ne rejette jamais qu'un état où une
case a déjà un domaine vide, une case qu'aucune pièce inutilisée ne peut remplir, si
bien qu'aucun d'eux ne peut retirer une branche qui mène à un achèvement réel. La
révision d'arc-cohérence est délibérément prudente là où elle manque de précision :
partout où elle pourrait être incertaine, elle élague *moins* plutôt que plus, restant
du côté sûr. Les propagateurs ne sont corrects que sous placement strict, car sous un
budget de ruptures une anticipation locale peut élaguer une branche que le budget
global pourrait encore sauver, si bien que les variantes à ruptures n'exécutent
délibérément aucun propagateur. Le registre l'impose : une variante qui associe des
ruptures à un propagateur réservé au mode strict échoue à la compilation. Les tests du
moteur vérifient cette contrainte ainsi que la comptabilité du score et des ruptures,
même si la correction de l'élagage lui-même repose sur l'argument ci-dessus plutôt que
sur un test.
## Reproductibilité
L'espace de travail du moteur, les dix variantes, les résultats par exécution
commités et les scripts de grille vivent tous sous le
[répertoire de support](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/dfs-study)
de l'étude. `just experiments dfs-study` reconstruit le moteur et rejoue toute la
grille ; l'exécution est déterministe à graine fixée, et l'agencement des coins est
le seul axe de diversité.
## À lire aussi
- [L'étude DFS](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/) — Une seule question, posée avec soin : parmi les backtrackers en profondeur d'abord pour Eternity II, qu'apporte réellement chaque ordre de remplissage, chaque heuristique et le mécanisme de rupture ? Une famille de backtrackers écrits de zéro, séparés chacun par un seul changement, exécutés sur les mêmes dix variantes à coins fixés, sur un seul cœur, pendant soixante secondes.
- [Ce que l'étude DFS a montré](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/findings/) — Les trois comparaisons au cœur de l'étude DFS, menées jusqu'au bout : l'ordre de remplissage (le balayage par lignes gagne, un mauvais ordre est catastrophique), les heuristiques (MRV sauve le remplissage du bord d'abord mais coûte du débit ; davantage de propagation n'a rien apporté) et les ruptures (elles brisent le mur de profondeur ; le levier, c'est le calendrier de ruptures, pas le plafond par cellule).
- [Ordres de remplissage](https://eternity2.dev/fr/research/build/backtracking/fill-order/) — L'ordre dans lequel un algorithme de retour arrière visite les 256 cases est son unique liberté : il ne coûte rien à l'exécution et fait varier la taille de l'arbre de recherche de plusieurs ordres de grandeur. Vingt ans de science communautaire, des guerres fixe-contre-dynamique aux courses de stratégies, jusqu'au carré magique 10×16 et à la recherche en peigne de Verhaard, répondent tous à la même question : quel chemin à travers le plateau est le moins coûteux ?
---
# Le moteur de référence qui fait tourner ce site
> Le backtracker Rust-vers-WebAssembly qui anime chaque démo en direct et vérifie chaque chiffre de ce wiki. Non pas une machine à records mais un moteur de référence, porté quatre fois et validé octet par octet, conçu pour que les affirmations d'ici soient rejouables.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/engine/
- Mise à jour: 2026-07-17
- Sujets: backtracking, speed
- Source: Le dépôt eternity2 sur GitHub — https://github.com/raphael-anjou/eternity2
---
> **À qui ce travail appartient**
>
> Cette page traite du moteur derrière le site que vous lisez, écrite par la personne qui l'a écrit, [Raphaël Anjou](/fr/research/people/raphael-anjou/). Ce n'est pas un solveur à records de la communauté : ceux-là sont étudiés ailleurs dans ce laboratoire ([Blackwood](/fr/research/lab/experiments/joshua-blackwood/solver/), [McGavin](/fr/research/lab/experiments/peter-mcgavin/backtracker/), [Verhaard](/fr/research/lab/experiments/louis-verhaard/eii/)). Celui-ci siège parmi eux en pair, et un pair modeste : les solveurs à records détiennent les records ; celui-ci détient les preuves.
Là où les [expériences nommées](/fr/research/lab/experiments/raphael-anjou/) posent
chacune une question et où les [moteurs partagés](/fr/research/lab/experiments/raphael-anjou/engines/)
sont l'appareillage sur lequel ces études tournent, cette page est une troisième
chose : le petit moteur de référence qui fait tourner le site lui-même, vérifie
les chiffres que citent les autres pages et anime chaque démo en direct. Il ne
marque aucun record. Sa mission, c'est la vérifiabilité et la pédagogie.
## Ce qu'il est
Un petit crate Rust compilé en WebAssembly, tournant en direct dans votre
navigateur sur chaque page interactive de ce wiki. Il implémente les grands
classiques, sans détour : le jeu officiel de pièces 16×16, un générateur qui
construit des puzzles résolubles de n'importe quelle taille (avec un mode
optionnel à la manière du vrai E2 qui restreint les couleurs de bordure à la
bande du cadre), neuf ordres de visite des cases, un backtracker en profondeur
d'abord strict, un scoreur, et une variante tolérante aux ruptures de la
recherche, une réimplémentation de l'idée d'indice de rupture du
[solveur de Blackwood](/fr/research/lab/experiments/joshua-blackwood/solver/), conçue
pour que les labos d'ici puissent en faire la démonstration.
Un choix de conception compte plus que les algorithmes : le solveur est une
machine à pas, non une fonction récursive. Les appelants le font avancer un pas
borné à la fois, un placement ou un retour arrière, et lisent le plateau entre
les pas. C'est ce qui permet à une page web d'animer une vraie recherche plutôt
qu'un enregistrement figé : [la page d'observation](/playground/watch/) fait
avancer précisément ce moteur, et non une vidéo de celui-ci.
## Un moteur, de nombreux portages
Le site fait tourner un seul moteur : le crate Rust/WASM, la référence canonique.
Mais le dépôt conserve toute une collection de réimplémentations fidèles de ce
moteur dans d'autres langages : un portage TypeScript pur (zéro WASM), un portage
C, un portage C++, et des études plus modestes en Python, Lua, COBOL, et même
Brainfuck. Chacun est validé octet par octet contre les données de référence que
le crate Rust produit : puzzles générés jusqu'à la sortie du RNG, les neuf chemins
de remplissage à plusieurs tailles, et des exécutions complètes du solveur avec
les comptes exacts de nœuds, de tentatives et de retours arrière.
Cette discipline existe pour une seule raison : une démo interactive que vous ne
pouvez pas recouper n'est qu'une animation. Deux implémentations indépendantes
qui s'accordent jusqu'au dernier retour arrière sont bien plus difficiles à faire
échouer de la même manière deux fois, et huit le sont plus encore. Les portages
sont une pièce d'exposition, pas des options de build (le site fait toujours
tourner Rust), et ils vivent ensemble dans la collection `engine-ports/` du dépôt.
Certains (le backtracker en Brainfuck surtout) sont là pour le plaisir.
## Ce qu'il ne prétend pas être
Ce n'est pas une machine à records, et il serait trompeur de le présenter comme
tel. Le solveur strict ne porte aucun des calendriers de quotas réglés à la main
ni aucune des stratégies de redémarrage qui font du
[solveur de Blackwood](/fr/research/lab/experiments/joshua-blackwood/solver/) le
moteur derrière les meilleurs plateaux de la communauté. Le meilleur score produit
par [les expériences d'ici](/fr/research/lab/experiments/) est de 463 sur 480 ; le
meilleur de la communauté sur le même puzzle est de 470. Les solveurs à records
étudiés dans ce laboratoire sont tout simplement meilleurs pour trouver des plateaux.
Le débit est un axe distinct, que ce moteur de référence ne poursuit délibérément
pas - mais une expérience sœur, elle, le fait. Le
[backtracker JIT](/fr/research/lab/experiments/raphael-anjou/jit-backtracker/) demande à
quelle vitesse une recherche Rust *portable* peut aller, et atteint un
[débit de la classe de McGavin](/fr/research/lab/experiments/peter-mcgavin/backtracker/)
sur les plateaux difficiles et profonds qui ressemblent au vrai puzzle - à égalité
avec son C optimisé à la main sur la même machine (son C reste ~2,3× plus rapide sur
les plateaux faciles). C'est un résultat de vitesse, pas de résolution : il plafonne
là où tout backtracker strict plafonne. Vitesse et score sont
[des axes différents](/fr/research/lab/experiments/raphael-anjou/going-fast/), et le moteur
de cette page n'optimise ni l'un ni l'autre - seulement le fait d'être vérifiable.
La mission de ce moteur est autre : la vérifiabilité et la pédagogie. Quand ce
wiki énonce un compte de nœuds, un chiffre de faisabilité ou un score,
l'affirmation est vérifiée par ce moteur, et parce qu'il tourne dans votre
navigateur et que sa source est publique, vous pouvez la vérifier aussi.
## Comment il fait tourner le wiki
Chaque élément interactif de cette section recherche, c'est ce moteur : les démos
DFS en direct, les courses d'ordres de remplissage sur
[la page des chemins](/playground/paths/), le labo d'indice de rupture sur
[le pôle des solveurs](/fr/research/build/solvers/), le scoring et la vérification du
visualiseur de plateaux, et les comptes de référence versionnés que citent les
pages de recherche. La suite de tests propre au moteur recoupe de vrais plateaux
de la communauté, de sorte qu'un changement qui casserait le scoring ou les
conventions de rotation échouerait bruyamment plutôt que de corrompre en silence
les chiffres du site.
## Où se le procurer
Tout se trouve dans un seul dépôt,
[github.com/raphael-anjou/eternity2](https://github.com/raphael-anjou/eternity2),
et [faites-le tourner vous-même](/fr/research/build/run-it-yourself/) déroule la
construction du moteur, l'exécution de ses tests et la reproduction des résultats
publiés, commande par commande. Une réserve sur l'état actuel : les exécutions
d'expériences citées dans ce labo étaient exploratoires, leurs plateaux, quand
ils sont liés, se vérifient dans le visualiseur, et aucune reproduction
empaquetée en une seule commande de ces exécutions n'est encore livrée.
## Ce qui le fait avancer
Le moteur ne grandit pas selon son propre calendrier ; il grandit quand
[une expérience](/fr/research/lab/experiments/) a besoin de quelque chose. Le solveur
tolérant aux ruptures existe parce que démontrer les indices de rupture en
exigeait un ; le générateur restreint au cadre existe parce qu'un labo avait
besoin de puzzles qui se comportent comme la vraie bordure d'E2. Cela garde le
moteur petit, et cela garde chaque fonctionnalité rattachée à une question que
quelqu'un a réellement posée.
## À lire aussi
- [Les moteurs partagés](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/engines/) — Les moteurs partagés qui sous-tendent les expériences de Raphaël Anjou. Les expériences nommées sont des études qui s'appuient dessus ; voici l'appareillage qu'elles ont en commun. Les préréglages CSP et la réimplémentation de Verhaard sont documentés intégralement, aux côtés du moteur de référence, du backtracker JIT, d'un guide de la vitesse et du harnais de l'échelle de tailles ; les moteurs constructifs ne sont pas encore publiés.
- [L'exécuter soi-même](https://eternity2.dev/fr/research/build/run-it-yourself/) — L'ensemble du site, le moteur et chaque résultat de cette section tournent depuis un seul dépôt. Voici comment le lancer, recompiler le moteur WebAssembly et reproduire les chiffres.
- [Le solveur de Blackwood, décodé et exécuté ici](https://eternity2.dev/fr/research/lab/experiments/joshua-blackwood/solver/) — Le backtracker record de Joshua Blackwood, décodé grâce aux notes de Jef Bucas (un échéancier de quotas de couleurs et une tolérance aux mismatchs en fin de partie, réglés presque optimalement), puis construit et exécuté sur mon M1 : tel que publié, il file jusqu'à 248 des 256 pièces en ignorant les indices ; épinglez les cinq indices officiels et le même moteur cale autour de 45.
---
# Les moteurs partagés
> Les moteurs partagés qui sous-tendent les expériences de Raphaël Anjou. Les expériences nommées sont des études qui s'appuient dessus ; voici l'appareillage qu'elles ont en commun. Les préréglages CSP et la réimplémentation de Verhaard sont documentés intégralement, aux côtés du moteur de référence, du backtracker JIT, d'un guide de la vitesse et du harnais de l'échelle de tailles ; les moteurs constructifs ne sont pas encore publiés.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/engines/
- Mise à jour: 2026-07-22
---
Les [expériences](/fr/research/lab/experiments/raphael-anjou/) sont des études :
chacune pose une question et rend compte du plateau qu'elle a atteint. Mais la
plupart ne partent pas de rien. Elles s'appuient sur un petit ensemble de
moteurs partagés, et le même moteur réapparaît d'une expérience à l'autre.
Cette page documente cet appareillage une fois pour toutes, afin que les études
puissent pointer ici plutôt que de réexpliquer la machine à chaque fois. Le
moteur de référence qui anime les démonstrations en direct du site est une
machine différente et a
[sa propre page](/fr/research/lab/experiments/raphael-anjou/engine/) ; il apparaît
ci-dessous dans son rôle d'appareillage.
- [Les préréglages CSP, mesurés](/fr/research/lab/experiments/single-core-benchmark/csp-presets/) — Un unique moteur de propagation de contraintes doté d'ordonnancements et de propagateurs interchangeables : cohérence d'arc, appariement par graphe de couleurs, plusieurs ordres de remplissage. Des réimplémentations fidèles de techniques connues de la communauté, exécutées selon une douzaine de préréglages sur les dix variantes, de sorte que le coût exact de chaque réglage figure au classement au lieu d'être débattu.
- [La réimplémentation de Verhaard](/fr/research/lab/experiments/louis-verhaard/verhaard-reimpl/) — Une réimplémentation intégrale, repartie de zéro, de la méthode eii de Louis Verhaard, son propre binaire n'étant livré sans aucune source et ne tournant pas ici. Recuit par échange sur composition d'ensembles sous la métrique de pavage 2×2 ; sur le véritable puzzle à cinq indices, elle atteint 438 sur 480, en monocœur.
- [Le moteur de référence qui fait tourner ce site](/fr/research/lab/experiments/raphael-anjou/engine/) — La machine de vérification et de démonstration du wiki, distincte des moteurs de recherche partagés : le backtracker Rust-vers-WebAssembly qui fait tourner chaque démonstration en direct et vérifie chaque nombre cité sur ces pages, porté quatre fois et testé octet par octet.
- [Le backtracker JIT](/fr/research/lab/experiments/raphael-anjou/jit-backtracker/) — Un backtracker Rust en profondeur d'abord, sûr et portable, spécialisé à l'exécution en émettant et compilant du Rust propre à chaque puzzle, porté de 43 à 123 millions de nœuds de recherche par seconde sur un cœur et mesuré face au C optimisé à la main de Peter McGavin sur la même machine.
- [Aller vite](/fr/research/lab/experiments/raphael-anjou/going-fast/) — Un guide de terrain des solveurs axés vitesse : ce qu'achète le débit brut, les trois choses différentes que les gens entendent par « rapide », et pourquoi le moteur le plus rapide jamais construit ne peut toujours pas résoudre le puzzle.
- [L'échelle de tailles](/fr/research/lab/experiments/raphael-anjou/scaling-ladder/) — Le harnais qui fait tourner n'importe quel solveur, inchangé, sur des plateaux plantés entièrement résolubles à N = 8, 10, 12, 14, de sorte que la taille d'effondrement d'une méthode soit mesurée avant de passer des semaines sur le vrai 16×16.
Les deux moteurs constructifs sur lesquels ces études s'appuient également, le
producteur en faisceau et l'étape de polissage ALNS, n'ont pas encore leur
propre présentation ici ; ces pages sont retenues pour l'instant, et aucun des
deux ne figure au classement du benchmark. Là où une expérience pilote l'un
d'eux, sa propre page dit ce que fait ce moteur au niveau dont l'étude a besoin,
si bien que rien de ce qui suit ne dépend de la lecture d'une page pas encore
présente ici. Les deux moteurs documentés et mesurés intégralement sont les
préréglages CSP et la réimplémentation de Verhaard.
## Pourquoi documenter les moteurs à part des expériences
Une étude et son moteur répondent à des questions différentes. Le moteur répond
à *comment fonctionne la recherche* - les structures de données, l'ordre de
remplissage, les propagateurs - et il est réutilisé sans modification à travers
de nombreuses études. L'étude répond à *ce qui se passe quand on braque ce
moteur sur une idée particulière* : un a priori appris, une bordure fixée, un
masque de rupture. Les tenir séparés permet à un lecteur qui veut comprendre
l'a priori de PRIOR de ne pas avoir à relire le fonctionnement d'un faisceau, et
à un lecteur qui veut le moteur de l'obtenir en un seul endroit, à jour et
complet.
Là où ces moteurs s'affrontent directement sous un budget fixé, ils
apparaissent sur le
[benchmark monocœur](/fr/research/lab/experiments/single-core-benchmark/). La
théorie générale derrière chaque méthode se trouve dans la section
[construire-un-solveur](/fr/research/build/) ; ces pages sont les moteurs
spécifiques tels que construits et mesurés ici.
---
# Lire l'avenir d'une rangée dans ses pièces restantes
> Une énergie libre issue de la propagation de croyances, calculée sur les pièces restantes de la dernière rangée, prédit le rang de la meilleure fin possible. Le signal n'est pas un proxy du score brut, survit à un changement de producteur et meurt au-delà d'une rangée.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/frostline/
- Mise à jour: 2026-07-22
- Sujets: construction, structure, search-space
- Reproduire: `just research-frostline`
- Source: Yedidia, Freeman, Weiss : Understanding Belief Propagation and its Generalizations (MERL TR2001-22) — https://www.merl.com/publications/docs/TR2001-22.pdf
- Source: Reproduction versionnée : plan, script et résultats (ce projet) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/tail-finishability-frostline
---
Un constructeur classe ses plateaux partiels par arêtes appariées. Ce nombre
ne dit rien de la capacité des pièces restantes à bien finir les cases qui
restent. FROSTLINE pose la question : une quantité bon marché venue de la
physique statistique, l'énergie libre de Bethe d'un modèle de propagation de
croyances sur les pièces restantes de la dernière rangée, prédit-elle le
meilleur score que cette rangée peut encore atteindre ? Sur une rangée, oui :
rho de Spearman proche de -0,75, en validation croisée, et le signal survit à
un changement de producteur.
## Comment ça marche
On gèle les quinze premières rangées d'un plateau complet et on prend comme
réserve les seize pièces que le plateau lui-même avait placées en rangée 15,
ce qui garantit que la dernière rangée reste remplissable. Deux nombres sont
alors calculés par plateau :
- **L'étiquette.** Un solveur exact (une programmation dynamique par masques
de bits sur les sous-ensembles de pièces et les couleurs de jointure, exacte
en quelques millisecondes à 16 cases) donne le meilleur score de fin
atteignable : les 15 arêtes internes de la dernière rangée plus les 16
arêtes de jointure contre la rangée 14, sur 31.
- **Le prédicteur.** Un graphe de facteurs sur les seize cases vides, avec des
états tirés de la réserve et des facteurs de paire qui récompensent l'accord
de couleur à température inverse beta. La propagation de croyances
somme-produit tourne dessus et on lit l'énergie libre de Bethe. Une énergie
plus basse devrait signifier une fin plus atteignable.
Deux choix de modélisation comptent. La fin de plateau est un problème de
couplage maximal, pas de contraintes dures : un désaccord de couleur coûte un
point au lieu d'être interdit, le graphe est donc un modèle souple à beta fini
et non une instance de satisfiabilité. Et la jointure contre les rangées
gelées doit être un facteur souple ; l'étude source a mesuré qu'un filtre de
jointure dur se contredit sur 5 cases sur 16 des vrais sommets quasi optimaux.
Sur une rangée, le graphe résiduel est une chaîne : la propagation de
croyances y est exacte et l'énergie libre est le vrai logarithme de la
fonction de partition.
## Le résultat
L'étude source a trouvé l'effet sur 103 sommets distincts issus
d'un faisceau de largeur 2048, scores bruts 446 à 452. La reproduction
versionnée régénère tout dans un autre régime : 120 sommets gloutons
ensemencés, scores bruts 361 à 396, étiquettes de fin 16 à 22. La colonne
attendue cite l'étude source ; la colonne mesurée est cette exécution.
> **[Figure]** Attendu vs mesuré, dernière rangée (16 cases) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export.
Le seuil pré-enregistré (|rho| d'au moins 0,4, ou AUC au-dessus de 0,75 ou en
dessous de 0,25) est franchi à chaque beta essayé, avec le signe de la source.
Deux lectures de la table :
- **Pas un proxy du score brut.** À score du plateau contrôlé, la corrélation
partielle reste à -0,74. Dans le régime glouton, le score brut est presque
muet sur la fin (+0,08 contre +0,605 chez la source), ce qui rend ce
contrôle plus strict ici, pas plus faible.
- **On mesure le plateau, pas le producteur.** Le signal a été trouvé sur des
sommets de faisceau et se reproduit sur des sommets gloutons, un producteur
différent à distribution de qualité plus basse et plus large. Une
statistique qui survit à cet échange lit les pièces restantes, pas un
artefact de la façon dont le plateau a été construit.
Des plateaux isolés rendent le point concret : le
[pire sommet de fin](/viewer/?puzzle_size=16&board_edges=abeaachbadpcadidaftdabjfaeibaeteafoeaemfaeueabveacsbadtcadhdaacdencahhunptwhhjnttrujjkgrillkthjlourhmhjuuqlhvntqspwnpskphvjscafvcidaujsiwgsjnnpgujuogisjliwijurirsmtjprsllkptjoqwwvgksmwjuhsfadudweasoqwsujopmmuulwmslrlwvwlrnkvmpjnrilpkkgiokvkvulkmhgihrphdabmepcaqgmpjiggmrwmwvlrrtkvwvwtkvwvjgwvlorggllovmqllljmghhlpnqrbacrcocamjvogtgiwushlplukrwpwhtrwkuhwhqkruhhlgvvqmqgjovmpproqrqpcabhckfasiukgqiivprqlmtpwuhmtmsuujvmqovjhmkqvwppquiwvgourtrgqvgtbacvfjbaunrqigpnringtvvihnlvsvpnvlwvhwqlkrvwphkriqphoqnqrtrqgwstdafwbtearkgtpgnkntovvphtlsnppgmswqngqwtqjhhwkprhppjpnvokrkhvsntkfacnendarkmnnhskomnihmrmnwlmmsownhlsttkmhustsrtujminorrmhmortlgmcafhdofamnlosnnnnvjnriliwtgiopstloupklwosuhltnpgiiwgrluqqttlgkogfacrfubalrqwnpmojijpjjmiqphjsuvpkjhuttpjjistqwoiwolluisogmkiokqmcacpbtfaqikljvvijklquwokpmiwrgtmhsspqugssgruoslgkqjsssskkrvmqhwmcadgfufakounvuwolijjowuiinqwtkknsoiigtnqrvmtusuvgvgshunvvtkuwuwsdadsfgfauqnontmqjkqtugolqooiriqoommisommlnkojronijjrnvijktnlqosneabobdaagdadteadqbaegbabjbabqeacseaepbaepcablfaeqfafqeafpdaehbafcaad) de la reproduction fait 375 en brut avec
une meilleure fin de 16, tandis que le [meilleur](/viewer/?puzzle_size=16&board_edges=adcaadhdadsdadidacidabhcacsbadpcadgdaendabveabgbabjbacvbadtcaacdcqeahwmqsoqwiqwoiklqhvrkmqlvphjqgimhngrivvlggsgvjprsvwpptwvwcafvepdammupqgqmwwvglwvwtqqwlhuqjlthmnwlrqunlhwqgwqnrjkgpppjvulkfafudofauploqgmpvomjvuwoqnoukolnttkmwhptunvhsnnnqoqnkuwojvmulwvvfacrfhcalghhmkigmnrknpgnoqtjjklqkgikpnigvoknnjroqovjwmsomsomvpnscaepchbahruhijurrijjgqiittlqlgmtiiwgisoikqjsrtrqvvitssphouisnhhueafqbjfaumhjulwmjmllinjmlktnrwpkwgsjouvgjtrurgrtisjgpgmsigtghmkqfaemfqfahnlvhsknlgosjigguksipgnksqugvgtqrusgrhoujnthmpjnpskpkssseaesfgfallogkillommiiwpmstgwnqgtuiwqliwistjiopsttnpgjnnvkvrnswuweadwfjbaovmjlrwvmorrpprogwvjksmwutmsrsmtjuhssthuplmtrqwlrqpqooiqdafwboeamniopmonrgtmolugsnhltkknqtjkmqnthmrmhiqpmorhwuiooujuinqwfacneqbailprorgltkvruvtkmkrvuhwkjnvilomnriqolirirqvpvntqjmijqkwhcacobpcajttpgiwtvwvkollwrlslwoklvntomokqqrlukgtrgkogtvphijvvjlijcadgcrbatusrhmwuvwkrlsuhuvuskokvtrwhpnqrplsnulpllkplprhkvmtrmrwmdaftbmdasiujjpjikrphunkoushwhvjswjhhhukjsntkpwnspsuvnqosujoshhrpfadubdaaueaencaepcackfachbaftfabubafteabteaelfaeoeafibaeteadpbaeeaab) fait 372 en
brut avec une fin de 22. Le plateau au score brut plus bas a la meilleure fin.
## Ce qui ne suit pas
- **Le signal meurt au-delà d'une rangée.** À étiquette constante et coupe
plus haute, la corrélation de la source se dégrade de -0,74 à 16 cases
résiduelles à -0,19 à 32 et -0,12 à 48, pendant que le domaine moyen par
case passe de 12,5 à 32,6 puis 72,2. FROSTLINE est un oracle de fin de
dernière rangée, pas un signal de pilotage en cours de construction.
- **Il n'achète pas (encore) de meilleurs plateaux.** Dans l'étude source,
s'en servir pour choisir quels partiels reçoivent du calcul exact ne bat pas
le choix par score brut : le score final réalisé est dominé par l'étalement
du score brut, quand l'énergie libre ne prédit qu'un petit delta de fin. Le
discriminateur est réel ; la valeur de sélection, sous cette forme, non.
- **Les quantités secondaires dépendent du régime.** La corrélation de
l'entropie de Bethe change de signe entre régimes, et deux quantités nulles
sur les sommets de faisceau portent un signal faible sur les sommets
gloutons. Rien de tout cela ne touche le résultat principal, mais tout est
consigné en réserve dans le plan versionné.
- Rien ici ne déplace un score de plateau complet ; pour l'état réel du
front, voir la [page des records](/fr/research/records/).
## Reproduire
L'exécution est ensemencée et déterministe : `just research-frostline`
régénère les 120 sommets, les étiquettes exactes et la table de corrélations
complète en deux minutes environ sur un cœur, et reproduit le
`frostline_r15.json` versionné. C'est une reproduction de palier qualitatif :
le signe et la bande de force de l'effet sont régénérés ; l'ensemble de
sommets de faisceau de l'étude source ne l'est pas. La liste complète des
nombres attendus et l'argument de fidélité d'échelle vivent dans le plan lié
ci-dessus.
## À lire aussi
- [Recherche en faisceau](https://eternity2.dev/fr/research/build/construct/beam-search/) — Maintenir en vie les K plaquettes partielles les plus prometteuses à la fois et les faire croître case par case. La recherche en faisceau est le moteur des constructeurs ex nihilo de ce projet, et une illustration limpide des raisons pour lesquelles la largeur seule s'enlise dans les profondeurs de l'intérieur.
- [L'entropie et la loi d'aire](https://eternity2.dev/fr/research/why/entropy-area-law/) — Eternity II a deux règles : les bords doivent coïncider, et chaque pièce ne sert qu'une fois. La première est généreuse. Toute la difficulté tient dans la seconde.
- [Calibré sur le pic de difficulté](https://eternity2.dev/fr/research/why/phase-transition/) — Eternity II utilise 22 couleurs, réparties entre 17 couleurs intérieures et 5 réservées au cadre, et ce chiffre d'environ 17 se situe près du point où ce type de casse-tête est le plus difficile à résoudre (la transition est une bande, pas un entier unique).
---
# Aller vite : quand un solveur dépense son budget en vitesse
> Certains moteurs Eternity II mettent tout leur effort à parcourir l'arbre de recherche le plus vite possible ; d'autres le mettent dans le jugement sur où chercher. Voici le plaidoyer pour les premiers - ce qu'achète le débit brut, les trois choses différentes qu'on appelle « rapide », et pourquoi le moteur le plus rapide jamais construit ne sait toujours pas résoudre le puzzle.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/going-fast/
- Mise à jour: 2026-07-20
- Sujets: speed, backtracking
- Source: McGavin: even at 100M nodes/s, the 5-hint tree is 4.9×10³² years (groups.io msg 11201) — https://groups.io/g/eternity2/message/11201
- Source: Razvan's epitaph for the 2025 speed thread: 'we will not make a dent' (groups.io msg 11657) — https://groups.io/g/eternity2/message/11657
---
Tout solveur Eternity II a un budget fixe d'effort humain et de temps machine, et il
dépense ce budget à l'un de deux endroits. Il peut le dépenser en **vitesse** -
parcourir l'arbre de recherche aussi vite que le matériel le permet, essayer des
milliards de placements par seconde - ou en **jugement** - être plus fin sur *quels*
placements essayer, pour parcourir un arbre plus petit et meilleur. Cette page est le
plaidoyer pour les premiers : ce qu'aller vite achète vraiment, ce qu'il n'achète pas,
et comment en parler sans se leurrer.
C'est aussi le foyer conceptuel d'un résultat précis : un
[backtracker Rust portable qui égale le C optimisé à la main de McGavin sur les plateaux difficiles](/fr/research/lab/experiments/raphael-anjou/jit-backtracker/)
- le moteur le plus rapide de l'histoire de la communauté - et tourne à environ 44 % de
sa vitesse sur les faciles. Cette page-là est le journal d'ingénierie ; celle-ci est ce
que le journal *signifie*.
## Trois choses qu'on appelle « rapide »
La plus grande source de confusion en vingt ans de discours sur la vitesse est que
« rapide » nomme trois quantités sans rapport. Les garder distinctes, c'est déjà
gagner l'essentiel de la bataille.
> **Les trois axes, et pourquoi ils ne se convertissent pas**
>
> **1 · Placements par seconde (alias pièces/s, nœuds/s).** À quelle vitesse la recherche *avance*. C'est un nombre moteur-*et-plateau* : le C de McGavin fait ~287 M sur un plateau facile mais ~105 M sur un difficile ; le [moteur JIT présenté ici](/fr/research/lab/experiments/raphael-anjou/jit-backtracker/) fait ~122 M sur le facile et ~110 M sur le difficile - égalant le C là précisément où le puzzle est difficile. Plus grand veut dire plus rapide, mais toujours *sur le même plateau*. **2 · Arêtes appariées sur 480.** À quel point un plateau est *bon*. C'est là que vivent les [records](/fr/research/records/) - le plafond est 470. Cela n'a rien à voir avec l'axe 1 : un moteur lent peut trouver un meilleur plateau qu'un rapide, et le fait couramment. **3 · Placements agrégés par seconde.** Un nombre de *grappe* - beaucoup de machines additionnées. Le fameux « ~300 M/s » de la communauté qu'on attache parfois à un seul moteur est en fait la [grappe du Eternity 2 Syndicate](/fr/research/build/faster/distributed-solving/) : ~20 machines additionnées, pas un cœur. Un grand nombre sur l'axe 1 ne dit rien de l'axe 2, et l'axe 3 n'est pas du tout une vitesse de moteur. Toute affirmation rigoureuse de vitesse dit sur quel axe elle porte.
Pour l'histoire précise et sourcée de la façon dont la communauté a fixé sa définition
d'un « nœud » - pièces *posées*, à la manière des échecs, et pourquoi même cela flatte
les ordres de remplissage par ligne - voyez la section sur la discipline de mesure du
[registre d'ingénierie des solveurs](/fr/research/build/faster/solver-engineering/). Cette
page prend ce vocabulaire pour acquis et demande à quoi sert la vitesse.
## Ce qu'achète la vitesse
Des choses réelles, et il vaut la peine d'être concret, car le plaidoyer *contre* la
vitesse ne porte qu'une fois qu'on respecte le plaidoyer *pour*.
- **L'énumération vérifiée.** Un moteur rapide et déterministe peut parcourir un arbre
de référence jusqu'au dernier nœud et le *compter*, transformant la théorie en fait
vérifié. Les [benchmarks](/fr/research/build/benchmarks/) de la communauté - protocoles de
recensement, le 10×10 finalement tombé après ~180 années-cœur - sont des victoires de
débit. On ne vérifie pas ce qu'on ne peut pas finir.
- **Le déterminisme comme somme de contrôle.** Deux moteurs rapides qui parcourent le
même arbre doivent annoncer le même nombre de nœuds. Cette égalité est la façon dont
portages, réécritures et matériel neuf prouvent qu'ils parcourent le même arbre avant
que leur vitesse ne signifie quoi que ce soit - c'est la colonne vertébrale de
l'[échelle d'optimisation du moteur JIT](/fr/research/lab/experiments/raphael-anjou/jit-backtracker/),
où chaque échelon s'arrête au nombre de nœuds identique.
- **Plus de tentatives par seconde sous une heuristique.** La vitesse est un
multiplicateur du jugement : une bonne boucle de réparation qui tourne deux fois plus
vite a deux fois plus de chances d'un meilleur plateau dans le même temps d'horloge.
La vitesse ne *remplace* pas le jugement, mais elle amplifie celui qu'on a déjà.
## Ce que la vitesse ne peut pas acheter
Le mur. Et personne n'a été plus clair là-dessus que celui qui a construit le moteur le
plus rapide. Sur son meilleur chemin de placement à cinq indices - déjà un arbre bien
plus petit que le puzzle brut - McGavin a calculé que même à cent millions de nœuds par
seconde, la recherche prendrait environ **4,9 × 10³² ans**, et qu'y jeter des milliards
de cœurs laisse quand même « des ordres de grandeur au-delà de l'âge de l'Univers »
([msg 11201](https://groups.io/g/eternity2/message/11201)). Quand le fil sur la vitesse
de 2025 s'est éteint, Razvan en a écrit l'épitaphe : quelle que soit notre vitesse de
vérification, « nous n'y ferons pas une brèche » dans l'espace
([msg 11657](https://groups.io/g/eternity2/message/11657)).
L'arithmétique est implacable et c'est la [leçon centrale](/fr/research/why/prune-vs-speed/)
du site : une accélération à facteur constant, si durement gagnée soit-elle, se
*multiplie contre* un nombre si grand qu'aucun facteur constant ne compte. Doubler la
vitesse d'une recherche qui prendrait 10³² ans donne une recherche qui prend 5 × 10³¹
ans. Rétrécir l'*arbre* est le seul levier doté d'exposants.
## L'expérience contrôlée
C'est exactement pourquoi le [résultat du backtracker JIT](/fr/research/lab/experiments/raphael-anjou/jit-backtracker/)
est présenté comme une expérience de vitesse et rien d'autre. Il répond à une question
nette et bornée - *du Rust portable et sûr peut-il atteindre le débit d'un C optimisé à
la main ?* - et la réponse dépend du plateau : sur les plateaux difficiles et profonds
comme le vrai puzzle, il **égale** le C en parcourant l'arbre identique ; sur les
plateaux faciles et peu ramifiés, le C est environ 2,3× plus rapide. Cela tranche une
question ouverte plus petite que la communauté avait laissée en suspens : l'avantage
fameux de ~4× du moteur de McGavin sur les solveurs « typiques » relevait-il de l'**art
de la génération de code** ou simplement d'un **matériel plus récent** ? En gardant le
matériel fixe et en atteignant sa vitesse *sur les plateaux difficiles* depuis du code
portable, on montre que c'était l'artisanat - le même artisanat, reproductible dans un
langage sûr, consigné échelon par échelon. (Cela montre aussi où l'artisanat paie le
plus : sur les plateaux faciles, où le travail par nœud est quasi gratuit, sa génération
de code plus serrée gagne encore.)
Et il s'arrête ensuite, sans détour, là où tout moteur rapide s'arrête : pointé sur le
vrai puzzle, il plafonne dans les hauts 300 sur 480, parce qu'un backtracker strict est
un superbe arpenteur d'arbre et un piètre solveur. Les records appartiennent aux moteurs
qui dépensent leur budget dans l'*autre* sens - dans le
[jugement destruction-réparation](/fr/research/lab/experiments/raphael-anjou/repair-study/)
et dans [ce qu'une recherche a le droit d'apprendre](/fr/research/lab/experiments/raphael-anjou/learning/) -
et ils y arrivent à une fraction de la vitesse.
Voilà tout le compromis. La vitesse est réelle, apprenable et mérite d'être maîtrisée ;
le moteur JIT prouve qu'on peut la maîtriser dans un langage sûr. Mais sur Eternity II,
la voie rapide et la voie gagnante ne sont pas la même voie. C'est pourquoi la question
d'ingénierie intéressante n'est jamais seulement « à quelle vitesse » - c'est « rapide
*à quoi*, et est-ce là l'obstacle ? »
Une note sur ce qui est livré aujourd'hui : les exécutions derrière ces chiffres
étaient exploratoires, tout plateau lié depuis ces pages se vérifie dans la
visionneuse, et aucune reproduction empaquetée en une seule commande n'existe
encore.
## À lire aussi
- [Le backtracker JIT : du Rust portable à égalité avec du C optimisé sur les plateaux difficiles](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/jit-backtracker/) — Un backtracker Rust en profondeur d'abord, sûr et portable, spécialisé à l'exécution en émettant puis compilant du Rust propre à chaque puzzle, porté de 43 à 123 millions de nœuds de recherche par seconde sur un cœur. Mesuré équitablement face au C de Peter McGavin sur la même machine : à égalité sur les plateaux difficiles et profonds comme le vrai Eternity II, et à environ 44 % de sa vitesse sur les faciles. Chaque échelon parcourt l'arbre identique ; tout le gain vient du code, pas de l'algorithme.
- [Le backtracker C de McGavin : l'histoire du débit, reconstruit ici](https://eternity2.dev/fr/research/lab/experiments/peter-mcgavin/backtracker/) — Le backtracker C de Peter McGavin, le plus rapide de la communauté : une recette d'optimisation de 2007 capitalisée pendant deux décennies via code généré, tables de correspondance et astuces de compteur, puis compilée sur mon M1 et pointée vers le vrai puzzle à 256 pièces, où en mono-cœur elle dépasse 200 des 256 pièces à ~109M placements/s.
- [Ingénierie de solveur : l'artisanat sous l'algorithme](https://eternity2.dev/fr/research/build/faster/solver-engineering/) — Tous les solveurs record exécutent le même backtracking en profondeur d'abord. Ce qui les distingue, c'est la couche en dessous : tables de correspondance, hachages parfaits, structs taillées pour le cache, code généré, archéologie du compilateur. C'est cet artisanat qui décide si un nœud coûte 26 cycles ou 2 600. Vingt ans de registre d'ingénierie de la communauté, technique par technique, et ce que tout cela a rapporté.
- [Pourquoi un ordinateur plus rapide ne change rien](https://eternity2.dev/fr/research/why/prune-vs-speed/) — L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
---
# L'étude sur les indices
> Donner à un backtracker cinq pièces correctes gratuitement, dans la géométrie même des indices du puzzle. Il s'avère que cela n'aide pas, et selon l'ordre de remplissage cela peut nuire gravement, car une pièce épinglée est une contrainte dure qu'un ordre de remplissage fixe doit satisfaire à son arrivée. Une famille d'ordres de remplissage, exécutée sur les mêmes plateaux indicés, un seul cœur, mesurée contre l'absence totale d'indices.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/hint-study/
- Mise à jour: 2026-07-21
- Sujets: backtracking, search-space, structure
- Reproduire: `just experiments hint-study`
- Source: Générateur exécutable + résultats versionnés + scripts (le répertoire d'appui de cette étude) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/hint-study
---
Il existe une réponse folklorique à la question de savoir comment rendre Eternity II
plus facile : donner au solveur quelques pièces correctes. La question naturelle qui
suit est *combien*, et la
[discussion communautaire sur la géométrie des indices](/fr/research/why/hint-geometry/)
l'a déjà affinée en *où*. Cette étude pose une question plus élémentaire, que ces
deux-là enjambent : sur nos propres plateaux générés, les indices aident-ils *tout
court* ?
Pour un backtracker chronologique, la réponse est **non**. Amorcez-le avec les cinq
pièces officielles des indices, à leurs positions réelles sur le plateau, puis
mesurez-le contre le même plateau exactement sans aucun indice : il fait moins bien
sur chaque ordre de remplissage testé, sans exception. Sur un balayage compact ligne
par ligne, les cinq pièces correctes ne coûtent que dix à vingt arêtes appariées ;
sur l'ordre qu'un débutant choisirait en premier, « rejoindre les indices et les
relier entre eux », elles en coûtent environ trois cent quarante-cinq, transformant
l'un des meilleurs ordres sans indices en le pire de tous. La raison est simple une
fois qu'on la voit : pour un solveur qui remplit les cases dans un ordre fixe, une
pièce épinglée n'est pas une information gratuite mais une **contrainte dure qu'il
doit satisfaire à l'instant où il l'atteint**, et parfois il ne le peut pas.
## Le voir : cinq indices, quatre ordres
Chaque plateau ci-dessous se remplit selon un ordre différent, en boucle. Rien n'est
en train d'être *résolu* ; c'est seulement l'ordre dans lequel la recherche
visiterait les cases, rendu visible. La case lumineuse est celle qui vient d'être
placée, et la traînée derrière elle est le **front d'onde** récent, de sorte qu'on
voit combien de bord ouvert chaque ordre garde en avançant. Ce bord ouvert, la
frontière, est ce qu'un backtracker paie : son branchement croît avec la frontière,
et une petite frontière est aussi ce qui laisse à la recherche la marge de contourner
un épinglage hostile.
> **[Interactive: HintPathFill]** Rendered on the canonical page (link above); not shown in this markdown export.
Un balayage ligne par ligne garde une seule frontière mince et la fait rouler le long
du plateau, si bien qu'en rencontrant une pièce épinglée il peut ajuster l'unique
ligne qu'il est en train de construire. Les ordres qui cherchent les indices font
l'inverse. Spiraler vers l'intérieur ou l'extérieur traîne un anneau entier comme
frontière, et tracer les indices éparpille son front d'onde à travers le plateau dès
le tout premier coup, s'engageant partout avant de pouvoir savoir si les engagements
sont cohérents. Le balayage compact survit aux cinq indices ; les ordres qui les
cherchent en sont défaits.
## Ce que l'étude mesure
Deux comparaisons appariées, exécutées sur les mêmes plateaux générés :
- **Les indices aident-ils, et quel ordre leur survit ?** Fixer les indices (cinq,
dans la forme des cinq indices d'Eternity II lui-même) et ne faire varier que
l'ordre de remplissage, mesuré contre le plateau identique sans indices. C'est la
colonne vertébrale de l'étude : elle montre que les indices n'aident jamais, et
que l'ampleur du dommage est fixée par l'ordre de remplissage et sa frontière
ouverte.
- **Le nombre.** Ajouter *plus* d'indices aide-t-il ? Un peu, mais la façon naïve de
le mesurer est *confondue*. Un bloc d'indices groupés engrange gratuitement un tas
d'arêtes correctes du seul fait d'être épinglé ; ce « plancher » gratuit flatte
les dispositions groupées au score brut sans rien dire de la question de savoir si
le plateau est devenu plus facile à *terminer*. La
[page de méthode](/fr/research/lab/experiments/raphael-anjou/hint-study/method/)
définit le plancher et les métriques qui y sont immunisées (taux de résolution et
score gagné) qui voient au travers.
Tout ici est construit et mesuré de zéro : notre propre générateur paramétrique de
plateaux, notre propre famille de backtrackers, notre propre scoreur canonique, et
un solveur à faisceau comme contraste non backtracker. Aucun plateau, puzzle ou
moteur communautaire n'est utilisé ; seule la *forme* de l'arrangement à cinq
indices est empruntée à la discussion de la liste, comme géométrie à tester.
## Comment lire les chiffres
Chaque plateau est re-scoré par un unique scoreur canonique d'arêtes appariées qui
ne compte jamais une couture face au bord (grise), la même convention que le
[benchmark](/fr/research/lab/experiments/single-core-benchmark/) et
[l'étude DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/). Le maximum est
480. Chacune des quinze graines est une instance générée véritablement distincte,
et non simplement une graine de solveur différente, de sorte que la dispersion entre
graines est une vraie variance d'instance à instance et est rapportée comme telle.
Aucun score auto-déclaré n'est pris pour argent comptant.
Les comparaisons sont développées sur la
[page des résultats](/fr/research/lab/experiments/raphael-anjou/hint-study/findings/) ;
comment les plateaux sont générés, pourquoi la recette de couleurs reste fidèle à
toutes les tailles, et ce que signifie chaque métrique figurent sur la
[page de méthode](/fr/research/lab/experiments/raphael-anjou/hint-study/method/).
## Pages de cette section
- [Comment l'étude sur les indices est construite](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/hint-study/method/) — L'appareillage derrière l'étude sur les indices : un générateur paramétrique de plateaux fidèle à la recette de couleurs d'Eternity II à toutes les tailles, la famille de backtrackers à ordre de remplissage, l'unique scoreur canonique, et le morceau d'arithmétique qui garde l'axe du nombre significatif, le plancher des coutures épinglées.
- [Ce que l'étude sur les indices a montré](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/hint-study/findings/) — Les résultats, développés : sur ces plateaux les cinq indices en forme d'indices officiels n'aident jamais un backtracker, ils vont d'un coût modéré à une catastrophe, et l'ordre de remplissage décide de l'ampleur des dégâts ; les scores sont bimodaux, pas un gradient lisse ; et la question du nombre d'indices est confondue par un plancher gratuit de coutures épinglées.
## À lire aussi
- [Les expériences de Raphaël Anjou](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/) — Un carnet d'expériences de recherche sur Eternity II, organisé autour des moteurs partagés qui les font tourner, des pipelines de combinaison qui courent après le score, de quatre études qui décortiquent un paradigme de recherche une décision à la fois, et de résolutions exactes de fin de partie. Chacune expose son idée, son meilleur plateau et les questions qu'elle laisse ouvertes. La meilleure atteint 463 sur 480.
- [L'étude DFS](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/) — Une seule question, posée avec soin : parmi les backtrackers en profondeur d'abord pour Eternity II, qu'apporte réellement chaque ordre de remplissage, chaque heuristique et le mécanisme de rupture ? Une famille de backtrackers écrits de zéro, séparés chacun par un seul changement, exécutés sur les mêmes dix variantes à coins fixés, sur un seul cœur, pendant soixante secondes.
- [L'emplacement des indices l'emporte sur leur nombre](https://eternity2.dev/fr/research/why/hint-geometry/) — Sur un casse-tête 16×16 construit à l'image d'Eternity II, dix-huit indices dispersés sur le plateau le résolvent en quelques minutes, là où les entasser en rangées contiguës en réclame une centaine rien que pour ramener la recherche à des dizaines de milliards de placements. C'est la position, non le nombre, qui fait levier, et elle pointe droit vers la fin de partie.
---
# Ce que l'étude sur les indices a montré
> Les résultats, développés : sur ces plateaux les cinq indices en forme d'indices officiels n'aident jamais un backtracker, ils vont d'un coût modéré à une catastrophe, et l'ordre de remplissage décide de l'ampleur des dégâts ; les scores sont bimodaux, pas un gradient lisse ; et la question du nombre d'indices est confondue par un plancher gratuit de coutures épinglées.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/hint-study/findings/
- Mise à jour: 2026-07-21
- Sujets: backtracking, structure, search-space
- Source: Résultats par exécution versionnés (results.jsonl) et le script d'analyse — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/hint-study
---
L'étude fixe cinq indices dans la forme des cinq indices d'Eternity II lui-même,
exécute huit ordres de remplissage sur les plateaux identiques, et pose une
question simple : que valent ces cinq indices ? Chaque nombre ci-dessous porte sur
quinze instances générées distinctes, un seul cœur, huit secondes par exécution,
re-scoré sur 480 par un unique scoreur canonique. La comparaison est appariée,
chaque ordre de remplissage voit les mêmes plateaux, et la dispersion par instance
est montrée plutôt que moyennée, car il s'avère qu'elle compte plus que n'importe
quelle médiane.
## Les indices n'aident pas, et l'ordre de remplissage décide de combien ils nuisent
Commençons par la distribution. Chaque point est un plateau ; le trait est la
médiane.
> **[Interactive: HintStudyCharts]** Rendered on the canonical page (link above); not shown in this markdown export.
Deux choses sont visibles d'un coup. D'abord, les scores sont **bimodaux** : sur la
plupart des ordres, un plateau soit grimpe dans les 360, soit cale à deux chiffres,
avec peu d'entre-deux. Une médiane tracée à travers cela résume un fossé, pas un
centre, et c'est exactement pourquoi les points sont montrés. Ensuite, les ordres
se séparent nettement : les trois balayages compacts (ligne par ligne, son miroir
de bas en haut, le peigne de Verhaard) se tiennent haut sur la plupart des
plateaux ; les ordres fragmentants restent bas de bout en bout.
Mais la séparation compact-contre-fragmentant n'est pas le vrai résultat, car elle
invite la mauvaise question, « quel ordre *utilise* le mieux les indices ? ». La
question qui compte est de savoir si les indices aident *tout court*. Le deuxième
graphique y répond, et la réponse est non. Il montre le **changement apparié**
qu'apporte l'ajout des cinq indices : le score de chaque ordre sur un plateau moins
son score sur le *même plateau sans indices*.
Chaque barre est à zéro ou en dessous. Les cinq indices en forme d'indices
officiels n'aident pas un seul ordre de remplissage. Sur les balayages compacts ils
ne coûtent que dix à vingt points. Sur la spirale sortante ils en coûtent environ
quatre-vingt-dix. Et sur les deux ordres qui cherchent les indices ils sont
ruineux : l'ordre `trace-hints`, qui dessine un squelette entre les indices avant
de remplir, perd environ trois cent vingt-cinq, et le flot `connect-hints-first`
perd à peu près **trois cent quarante-cinq**, faisant passer un ordre qui score
parmi les *meilleurs* des huit sans indices au *pire* avec eux. Plus un ordre
poursuit délibérément les indices, plus ils lui coûtent. Donner au solveur cinq
pièces correctes, dans la géométrie même des indices du puzzle, a rendu chacune de
ses versions pire.
## Pourquoi un indice correct fait mal
Une pièce épinglée n'est pas une information gratuite pour un backtracker
chronologique ; c'est une **contrainte dure que l'ordre de remplissage fixe doit
satisfaire à son arrivée**. Quand un balayage compact descend jusqu'à une case
intérieure épinglée, la pièce est déjà là, et la ligne qu'il vient de construire
doit s'apparier aux faces de cette pièce. La plupart du temps il le peut, à petit
prix : le balayage contourne la contrainte et perd quelques dizaines de points.
Mais sur certains plateaux la pièce épinglée contredit ce à quoi la frontière s'est
engagée, et il n'y a pas de réparation locale : la recherche heurte un mur qu'elle
ne peut franchir et s'agite en dessous. C'est le mode calé, et ce sont les indices
qui le créent. Sur l'ordre ligne par ligne, les plateaux qui s'effondrent à deux
chiffres sont précisément ceux où un épinglage en forme d'indice tombe là où le
balayage ne peut pas l'honorer ; le même plateau sans épinglages grimpe dans les
360 et 370.
Cela recadre le résultat sur l'ordre de remplissage. L'ordre compte toujours (un
balayage compact survit aux contraintes des indices avec une cicatrice de dix à
vingt points tandis que `connect-hints-first` en est détruit), mais ce que l'ordre
achète n'est pas « bien utiliser les indices ». C'est **leur survivre**. La
frontière en est la raison : un ordre qui garde une unique frontière serrée a la
marge de contourner un épinglage défavorable ; un ordre qui s'est déjà fragmenté en
cinq taches ouvertes s'est engagé partout à la fois et ne le peut pas.
Cette relation à la frontière, à travers les huit ordres, est d'une netteté
frappante, et elle vaut d'être montrée précisément parce que la frontière peut se
calculer depuis la géométrie d'un ordre sans aucun solveur, puis se confronter aux
scores mesurés :
> **[Interactive: FrontierPhaseChart]** Rendered on the canonical page (link above); not shown in this markdown export.
La frontière ouverte moyenne qu'un ordre maintient prédit de près son score médian
à travers ces huit ordres. C'est une relation descriptive forte, pas une loi
prouvée sur huit points, et elle cesse de trancher le classement parmi les ordres
fragmentants à droite (la spirale entrante maintient une frontière plus grande que
la sortante et score pourtant plus haut). Mais la direction est exactement ce que
le mécanisme prédit : le coût de branchement est multiplicatif en la frontière, un
ordre qui garde la frontière petite garde donc la marge d'absorber un épinglage
hostile.
Pour le contraste, le solveur à faisceau, qui n'est pas un backtracker
chronologique et ne paie pas le coût de frontière de la même façon, atteint une
médiane dans les 450 sur ces mêmes plateaux indicés. Les indices et les plateaux
sont loin d'être insolubles. C'est spécifiquement le backtracker *chronologique à
ordre fixe* qui ne parvient pas à transformer cinq pièces correctes en progrès.
## Le nombre : un seuil, pas un gradient, et un plancher qui le cache
La même question un cran plus loin : ajouter *plus* d'indices aide-t-il ? La
réponse n'est pas un « plus, c'est mieux » lisse, et le nombre brut cache quelle
part est réelle.
Le graphique du bas ci-dessus scinde le score de chaque disposition en deux parts.
Le **plancher** est l'ensemble des coutures que les épinglages complètent
gratuitement, parce que leurs deux extrémités sont épinglées à la vraie solution ;
la part **gagnée** est ce que la recherche a réellement trouvé. Un bloc groupé
plein engrange un plancher élevé (cinq blocs 4×4 épinglent un quart des coutures du
plateau avant que la recherche ne fasse un seul pas), tandis qu'un treillis épars,
dont les indices ne se touchent jamais, n'engrange rien. Une comparaison au score
brut offre donc aux dispositions groupées cent points d'avance qui ne disent rien
de la progression de la recherche.
Lisez la colonne « gagnée » à travers les treillis épars, dont le plancher est nul
si bien que la part gagnée *est* le score, et un seuil apparaît. Un épars clairsemé,
quatre à seize indices, ne gagne presque rien (dans les vingt) : les épinglages ne
sont que des contraintes éparpillées sur lesquelles le balayage ne cesse de
trébucher, exactement l'effet des cinq indices. Mais continuez d'en ajouter et le
tableau bascule. Vingt-cinq indices épars gagnent 127, et trente-six, un treillis
de six par ligne, **résolvent le plateau entièrement sur la plupart des
instances**. Sous le seuil, les indices épars ne font que gêner ; au-dessus, il y
en a enfin assez pour découper le plateau en morceaux suffisamment petits pour que
le balayage les termine. Ce n'est pas un gradient d'aide, mais un mur que le nombre
doit franchir.
Les blocs groupés montrent l'image en miroir. Leur score brut est surtout du
*plancher* : cinq blocs 4×4 (quatre-vingts indices, un quart du plateau) résolvent
bien chaque instance, mais ils ont épinglé tant de plateau qu'ils l'ont à moitié
résolu à la main. Retirez le plancher et les dispositions groupées en deçà de cet
extrême ne gagnent que deux chiffres, portées par les coutures gratuites. La vraie
histoire du nombre n'est donc ni « plus d'indices aident » ni « plus d'indices
nuisent », mais : il faut *beaucoup* d'indices corrects, épars ou groupés, pour
faire bouger un backtracker chronologique, et tant que ce niveau n'est pas atteint,
les épinglages supplémentaires ont autant de chances de faire trébucher la
recherche que de l'accélérer.
La [page de méthode](/fr/research/lab/experiments/raphael-anjou/hint-study/method/)
développe l'arithmétique du plancher en entier.
## Épars contre contigu : nous obtenons l'inverse
La [rédaction communautaire sur la géométrie des indices](/fr/research/why/hint-geometry/)
formule une version plus tranchante de l'affirmation sur le placement : dix-huit
indices *épars* sur un treillis résolvent en minutes un puzzle 16×16 de type E2,
tandis que dix-huit empilés en lignes du haut *contiguës* n'aident guère, et qu'il
faut quatre-vingts indices contigus ou plus pour égaler les dix-huit épars. Ce
résultat a été mesuré sur un puzzle précis avec un moteur précis. Nous avons posé
ses deux dispositions exactes, le treillis épars des lignes {1,3,5} et le bloc de
dix-huit cases en haut, sur nos propres plateaux générés et nos propres solveurs
pour voir si la direction tient.
> **[Interactive: HintGeoComparison]** Rendered on the canonical page (link above); not shown in this markdown export.
Elle ne tient pas. Sur nos plateaux, les dix-huit **contigus** scorent *plus haut*
que les dix-huit épars pour sept des huit ordres de remplissage, et de loin : un
balayage ligne par ligne atteint une médiane de 377 avec le bloc contigu et
seulement 138 avec le treillis épars. Cela ressemble à une contradiction frontale,
et il vaut la peine d'être précis sur pourquoi ce n'en est pas tout à fait une.
Les deux études mesurent des choses différentes. Le résultat communautaire porte
sur le *temps jusqu'à une solution complète* : les indices épars atteignent la fin
de partie profonde où un backtracker passe presque tout son temps, ils élaguent
donc la partie coûteuse, tandis qu'un bloc contigu en haut n'élague que l'ouverture
bon marché. Notre nombre est un *score d'arêtes appariées à budget court*, et à
huit secondes aucun de ces backtrackers stricts n'atteint la fin de partie. Ce
qu'un bloc contigu ancré en haut achète, immédiatement, c'est une grande région
correcte contre laquelle le balayage ligne par ligne peut construire, le score
grimpe donc vite même si la partie dure du plateau reste intacte. Les indices
épars, au contraire, fragmentent le remplissage précoce exactement comme le
faisait la forme à cinq indices. Les deux résultats sont donc cohérents dès qu'on
sépare « résout tout le plateau à terme » de « score bien dans les huit premières
secondes » : le placement épars aide le premier et nuit au second. La section
suivante rend cette séparation visible.
## Le résoudre : là où l'épars finit par gagner
À 16×16 rien ne se résout en huit secondes, le score est donc toujours un
instantané d'une recherche encore dans son ouverture. Pour voir l'effet de *fin de
partie* rapporté par la communauté, il faut un plateau qui se résout entièrement.
Un 8×8 construit selon la même recette de couleurs le fait, en bien moins d'une
seconde, et sur lui nous pouvons mesurer la quantité qui compte réellement : le
nombre de nœuds de recherche qu'un backtracker ligne par ligne demande pour
atteindre une solution complète. Moins de nœuds signifie que les indices ont fait
un vrai travail d'élagage. Ci-dessous, un treillis épars et un bloc contigu
apparié, à nombres d'indices croissants.
> **[Interactive: SolveSpeedChart]** Rendered on the canonical page (link above); not shown in this markdown export.
C'est toute l'histoire en un graphique, et elle s'aligne enfin avec l'affirmation
communautaire. À quatre indices, le treillis épars est *pire* qu'inutile, ne
résolvant que deux plateaux sur trente, le même effet des indices clairsemés qui
font trébucher la recherche que sur chaque autre axe, tandis que le bloc contigu
apparié les résout presque tous. Mais franchissez un seuil vers seize indices et
les lignes s'échangent brutalement : un treillis épars de seize indices se résout
en environ quatre mille nœuds, tandis que le bloc contigu apparié broie encore
près de deux millions, un rapport de cinq cents à nombre d'indices égal. Poussez
plus loin et les deux dispositions deviennent faciles (à trente-six indices un
quart du plateau est épinglé et l'une comme l'autre se résout en quelques
centaines de nœuds), l'avantage de l'épars est donc une fenêtre, la plus large là
où le nombre suffit à atteindre la recherche profonde sans que le plateau soit à
moitié résolu à la main. Dans cette fenêtre, les indices épars atteignent la part
de la recherche avec laquelle un backtracker se débat réellement et la
court-circuitent, exactement comme Joe et Peter McGavin l'ont décrit ; un bloc
contigu n'élague jamais que l'ouverture facile. La comparaison de scores à 16×16
n'a semblé les contredire que parce qu'à budget court la recherche ne vit jamais
assez longtemps pour atteindre la région où le placement épars paie.
## Ce que cela dit et ne dit pas
C'est un résultat sur les **backtrackers stricts, chronologiques, en profondeur
d'abord**, sur des plateaux 16×16 générés selon la recette de couleurs d'Eternity
II, à budget court (huit secondes). Chacun de ces mots de cadrage mérite sa place.
*Chronologique* : le résultat porte spécifiquement sur les solveurs qui remplissent
les cases dans un ordre fixe et doivent satisfaire une pièce épinglée en
l'atteignant, un solveur à faisceau, qui ne le fait pas, atteint les 450 sur les
mêmes plateaux. *Généré* : les plateaux partagent la recette de couleurs d'E2 et la
*forme* de ses cinq indices, mais ils ne sont pas le puzzle officiel, et l'étude
n'y transfère aucun nombre. *Budget court* : aucun de ces backtrackers stricts ne
résout en huit secondes, ceci mesure donc jusqu'où chacun parvient, pas une course
vers 480 ; la survie de l'effet « les indices nuisent » à des budgets bien plus
longs n'est pas testée ici.
Dans ce cadre, la leçon est solide et, pensons-nous, contre-intuitive : pour un
backtracker chronologique, cinq pièces correctes placées dans la géométrie même
des indices du puzzle ne sont pas un cadeau mais une contrainte, et peuvent coûter
bien plus qu'elles ne donnent. Ce qui décide des dégâts, ce ne sont pas les
indices mais l'ordre de remplissage qui doit vivre avec eux, et l'ordre paie un
indice comme il paie tout le reste, dans la taille de la frontière qu'il garde
ouverte. C'est une lecture de plus de
[pourquoi le puzzle résiste](/fr/research/why/hint-geometry/) : même une information
correcte n'aide qu'un solveur construit pour la recevoir.
## À lire aussi
- [L'étude sur les indices](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/hint-study/) — Donner à un backtracker cinq pièces correctes gratuitement, dans la géométrie même des indices du puzzle. Il s'avère que cela n'aide pas, et selon l'ordre de remplissage cela peut nuire gravement, car une pièce épinglée est une contrainte dure qu'un ordre de remplissage fixe doit satisfaire à son arrivée. Une famille d'ordres de remplissage, exécutée sur les mêmes plateaux indicés, un seul cœur, mesurée contre l'absence totale d'indices.
- [Comment l'étude sur les indices est construite](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/hint-study/method/) — L'appareillage derrière l'étude sur les indices : un générateur paramétrique de plateaux fidèle à la recette de couleurs d'Eternity II à toutes les tailles, la famille de backtrackers à ordre de remplissage, l'unique scoreur canonique, et le morceau d'arithmétique qui garde l'axe du nombre significatif, le plancher des coutures épinglées.
- [L'emplacement des indices l'emporte sur leur nombre](https://eternity2.dev/fr/research/why/hint-geometry/) — Sur un casse-tête 16×16 construit à l'image d'Eternity II, dix-huit indices dispersés sur le plateau le résolvent en quelques minutes, là où les entasser en rangées contiguës en réclame une centaine rien que pour ramener la recherche à des dizaines de milliards de placements. C'est la position, non le nombre, qui fait levier, et elle pointe droit vers la fin de partie.
- [L'étude DFS](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/) — Une seule question, posée avec soin : parmi les backtrackers en profondeur d'abord pour Eternity II, qu'apporte réellement chaque ordre de remplissage, chaque heuristique et le mécanisme de rupture ? Une famille de backtrackers écrits de zéro, séparés chacun par un seul changement, exécutés sur les mêmes dix variantes à coins fixés, sur un seul cœur, pendant soixante secondes.
---
# Comment l'étude sur les indices est construite
> L'appareillage derrière l'étude sur les indices : un générateur paramétrique de plateaux fidèle à la recette de couleurs d'Eternity II à toutes les tailles, la famille de backtrackers à ordre de remplissage, l'unique scoreur canonique, et le morceau d'arithmétique qui garde l'axe du nombre significatif, le plancher des coutures épinglées.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/hint-study/method/
- Mise à jour: 2026-07-21
- Sujets: backtracking, structure, search-space
- Source: Le générateur paramétrique et le moteur à ordres de remplissage (le répertoire d'appui de cette étude) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/hint-study
---
Cette page est l'appareillage derrière
[l'étude sur les indices](/fr/research/lab/experiments/raphael-anjou/hint-study/) :
comment les plateaux sont générés, pourquoi ils restent fidèles à Eternity II à
toutes les tailles, la famille d'ordres de remplissage, et la pièce qui compte le
plus pour lire correctement les résultats, l'arithmétique du *plancher des coutures
épinglées*, qui est ce qui sépare un effet réel d'un artefact de mesure sur l'axe
du nombre.
## Les plateaux : un générateur fidèle, paramétrique en taille
Chaque instance est générée de zéro, ensemencée et déterministe : le même triplet
`(size, colours, seed)` produit le même plateau sur n'importe quelle machine. Un
plateau généré est un plateau *résolu*, la pièce $i$ occupe la case $i$ à la
rotation zéro, dont les identifiants de pièces sont ensuite réétiquetés par une
permutation ensemencée, de sorte qu'un indice pour la case `pos` épingle la vraie
pièce (réétiquetée), et qu'un solveur ne peut pas simplement parcourir le placement
identité.
La recette de couleurs reflète exactement la structure du puzzle officiel. Sur un
plateau $n\times n$ il y a
$$
E(n) \;=\; 2\,n\,(n-1)
$$
coutures intérieures (les arêtes appariées ; $E(16) = 480$). Elles se répartissent
en une **bande de cadre**, les coutures joignant deux pièces de bord le long du
pourtour, et l'intérieur profond. Les cinq *couleurs de bord* sont confinées à la
bande de cadre et n'apparaissent jamais à l'intérieur ; les *couleurs intérieures*
apparaissent à la fois dans l'intérieur profond et sur la face tournée vers
l'intérieur des pièces de bord. C'est le fait structurel définissant un vrai
plateau Eternity II, et le générateur le reproduit et est testé contre lui.
### Pourquoi le recensement est automatiquement équilibré (une affirmation à énoncer avec soin)
Il est tentant, et les premières rédactions l'ont fait, de présenter le recensement
de couleurs *pair* d'Eternity II comme un cadeau spécialement réglé : chaque couleur
apparaît un nombre pair de fois, si bien que les appariements $\sum_c N_c / 2$ d'une
solution parfaite tombent avec un jeu nul. La parité paire est réelle, mais elle
n'est **pas** un exploit de réglage. Elle est forcée.
Une couleur peinte sur $k$ coutures intérieures apparaît sur exactement $2k$ faces
de pièces, une de chaque côté de chaque couture. Donc pour toute couleur $c$,
$$
N_c \;=\; 2\,k_c \quad\text{est pair, pour n'importe quel coloriage de coutures.}
$$
La parité à jeu nul est donc automatique pour *tout* plateau construit en coloriant
des coutures ; elle ne dit rien de spécial sur Eternity II. Les propriétés qui
portent véritablement la charge, et que le générateur doit réussir, sont au nombre
de trois : les couleurs de bord confinées à la bande de cadre, les effectifs par
couleur maintenus **équilibrés** (afin qu'aucune couleur ne soit assez rare pour
sur-contraindre), et chaque pièce **distincte à rotation près** (afin qu'un indice
épinglé nomme une pièce unique). La rédaction de l'étude est précise sur ce point
là où le cadrage antérieur ne l'était pas.
### Mettre la recette à l'échelle sans changer la difficulté
Le générateur et le solveur sont tous deux paramétriques en taille, le plateau peut
être $8\times8$ ou $12\times12$ aussi aisément que $16\times16$, ce qui ouvre une
suite naturelle : l'effet du placement se *renforce*-t-il quand le plateau grandit ?
Répondre proprement exige une recette de couleurs qui ne change pas la *difficulté*
du puzzle quand la taille change. Garder simplement les *effectifs* de couleurs
fixes en faisant croître $n$ rendrait le puzzle structurellement *plus facile* aux
grands $n$ : avec plus de coutures et la même palette, chaque couleur se répète plus
souvent, la case moyenne accepte donc plus de voisins et la contrainte se relâche.
Cela confondrait taille et difficulté.
La recette maintient au contraire la **multiplicité par couleur** à peu près
constante. En écrivant $F(n)$ pour le nombre de coutures de la bande de cadre et
$E(n) - F(n)$ pour l'intérieur, le nombre de couleurs de bord et intérieures est
choisi comme
$$
b(n) \;=\; \operatorname{round}\!\Big(\tfrac{F(n)}{12}\Big), \qquad
i(n) \;=\; \operatorname{round}\!\Big(\tfrac{E(n) - F(n)}{24}\Big),
$$
en visant les multiplicités qu'Eternity II utilise lui-même à $n=16$ (bord
$\approx 12$, intérieur $\approx 24$). À $n=16$ cela restitue exactement la recette
officielle, cinq couleurs de bord et dix-sept intérieures.
Réussir cela sur les petits plateaux a demandé une correction du générateur. La
palette d'Eternity II est *à dominante intérieure*, cinq couleurs de bord contre
dix-sept intérieures, mais le générateur par défaut plafonne le nombre de couleurs
de bord à cinq et prend tout le reste comme intérieur, ce qui sur un petit plateau
inverse le rapport : à $8\times8$ la recette veut huit couleurs, et le plafond les
répartirait en cinq de bord pour une intérieure, une mer intérieure quasi uniforme
qui ne se comporte en rien comme E2. Le générateur accepte désormais un nombre
explicite de couleurs de bord, et la recette maintient l'intérieur à environ trois
fois le bord à chaque taille ($8\times8 \to$ deux de bord, six intérieures ;
$16\times16 \to$ cinq et dix-sept, inchangé). Avec cela, les petits plateaux sont
fidèles *et* pleinement solubles, ce sur quoi repose la comparaison de vitesse de
résolution de la
[page des résultats](/fr/research/lab/experiments/raphael-anjou/hint-study/findings/).
Les résultats principaux sur les ordres et le nombre sont tous à $16\times16$ ; le
plateau $8\times8$ n'est utilisé que là où une résolution complète est nécessaire.
## Les géométries d'indices
Chaque disposition est une fonction pure de la taille du plateau, si bien que la
même géométrie peut être dessinée, mesurée et mise à l'échelle de façon cohérente.
La galerie ci-dessous les rend toutes à partir de l'unique primitive de plateau
partagée.
> **[Interactive: HintLayoutGallery]** Rendered on the canonical page (link above); not shown in this markdown export.
## Le plancher des coutures épinglées : garder l'axe du nombre significatif
Voici la subtilité qui a remodelé l'étude. Demandez « plus d'indices aident-ils ? »
et le geste évident est de comparer les scores finaux à différents nombres
d'indices. Mais un indice fait deux choses différentes à la fois, et le score les
confond :
1. il **retire une pièce** de la recherche (la partie utile, il élague l'arbre) ;
2. il **peut compléter une couture gratuitement**, si une case voisine est aussi
épinglée.
Le second effet est un pur cadeau comptable. Définissons le **plancher des coutures
épinglées** d'une disposition comme le nombre de coutures intérieures dont les
*deux* extrémités sont épinglées :
$$
\text{plancher} \;=\; \#\{\, \text{coutures intérieures } (u,v) : u \text{ et } v \text{ toutes deux indicées} \,\}.
$$
Parce que les épinglages sont des pièces de la vraie solution, chacune de ces
coutures est garantie correcte avant même que le solveur ne tourne. Un bloc groupé
plein $k\times k$ en apporte $2k(k-1)$ ; cinq blocs $k{=}4$ engrangent
$5 \cdot 24 = 120$ coutures correctes, un **quart des 480**, gratuitement. Un
treillis épars, dont les indices ne se touchent jamais, a un plancher de **zéro**.
Une comparaison au score brut **flatte** donc systématiquement les dispositions
groupées : elles partent avec plus de cent points d'avance de pure comptabilité,
indépendamment de la question de savoir si le plateau est devenu plus facile à
*terminer*. C'est la même famille d'erreur que compter les coutures du pourtour
dans un plateau partiel, un plancher qui gonfle le nombre sans refléter de progrès.
Le commutateur de la galerie ci-dessus dessine ces coutures engrangées pour rendre
le score gratuit visible.
L'étude ne classe donc pas les dispositions au score brut sur l'axe du nombre. Elle
utilise deux métriques immunisées contre le plancher :
- le **taux de résolution**, la fraction des instances qu'un ordre complète
réellement jusqu'à 480 ;
- la **profondeur atteinte**, jusqu'où la recherche est allée au-delà des cases
épinglées, sur 256.
Toutes deux mesurent si la recherche a fait *un progrès que les épinglages ne lui
ont pas offert*. Sur l'axe des ordres, où chaque disposition comparée partage les
*mêmes* indices et donc le même plancher, le score brut est directement comparable
et est utilisé.
## Mesurer contre l'absence d'indices, apparié par instance
La question « que valent les indices ? » n'a de réponse que relativement au fait de
*ne pas* les avoir. L'axe des ordres est donc exécuté deux fois sur chaque plateau :
une fois avec les cinq indices en forme d'indices officiels, une fois sans aucun
(`baseline_00`), et l'effet rapporté est la **différence appariée**, le score avec
indices moins le score sans indices sur le *même* plateau généré. Apparier par
instance retire la variance de difficulté d'un plateau à l'autre, qui sur ces
plateaux bimodaux est assez grande pour noyer l'effet si les deux conditions
étaient comparées sur des graines différentes. Une différence appariée négative
signifie que les indices ont rendu cet ordre de remplissage pire qu'il ne l'était
avec un intérieur vierge, ce que rapportent les résultats. Toutes les comparaisons
utilisent l'ensemble commun de graines menées à terme, de sorte que chaque ordre et
chaque disposition sont agrégés sur les instances identiques.
## Les ordres de remplissage, et pourquoi la frontière est le levier
Le moteur est le [backtracker DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/)
frère de cette étude, exécuté en strict (pas de ruptures, pas de propagation) afin
que **l'ordre de remplissage soit la seule chose qui change**. Les ordres testés
sont ligne par ligne, son miroir de bas en haut, la spirale entrante, la spirale
sortante, bord d'abord, le peigne de Verhaard, un contrôle lignes-des-indices
d'abord, et l'ordre propre à l'étude qui cherche les indices,
`connect-hints-first`.
Pourquoi l'ordre compte-t-il autant ? Le coût d'un backtracker est gouverné par la
**frontière ouverte** : l'ensemble des cases déjà remplies encore adjacentes à une
case vide. Quand la case suivante est placée contre une frontière de taille $f$, le
nombre de plateaux partiels que la recherche peut avoir à considérer croît
multiplicativement en $f$, le branchement est exponentiel en la frontière, pas en le
plateau. Un unique balayage compact maintient $f$ à environ une ligne
($\approx n$) ; un ordre qui ouvre des taches autour de $k$ indices éparpillés mène
$k$ frontières de front, et
$$
\text{travail} \;\sim\; \prod_{j} b^{\,f_j} \;=\; b^{\sum_j f_j},
$$
de sorte que fragmenter le remplissage en régions déconnectées multiplie le coût,
il ne l'additionne pas. C'est exactement pourquoi `connect-hints-first`, l'ordre
qui *cherche* les indices, est le pire performeur : atteindre les indices tôt vaut
bien moins que garder la frontière petite, et relier des ancres éparpillées fait
l'exact contraire de la garder petite.
## Comment lire les chiffres
Chaque plateau est re-scoré par un unique scoreur canonique d'arêtes appariées qui
ne compte jamais une couture face au bord (grise). Le maximum est $E(n)$ ($480$ à
$16\times16$). Chacune des quinze graines est une instance générée distincte, la
dispersion entre graines est donc une véritable variance d'instance. Le débit, là
où il est rapporté, est en nœuds de recherche par seconde et n'est jamais comparé
entre ordres différents, car un nœud sous un ordre n'est pas la même unité de
travail que sous un autre. Tout l'appareillage, générateur, dispositions, résultats
par exécution et script de grille, réside dans le
[répertoire d'appui](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/hint-study)
de l'étude, et `just experiments hint-study` relance le tout.
## À lire aussi
- [L'étude sur les indices](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/hint-study/) — Donner à un backtracker cinq pièces correctes gratuitement, dans la géométrie même des indices du puzzle. Il s'avère que cela n'aide pas, et selon l'ordre de remplissage cela peut nuire gravement, car une pièce épinglée est une contrainte dure qu'un ordre de remplissage fixe doit satisfaire à son arrivée. Une famille d'ordres de remplissage, exécutée sur les mêmes plateaux indicés, un seul cœur, mesurée contre l'absence totale d'indices.
- [Ce que l'étude sur les indices a montré](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/hint-study/findings/) — Les résultats, développés : sur ces plateaux les cinq indices en forme d'indices officiels n'aident jamais un backtracker, ils vont d'un coût modéré à une catastrophe, et l'ordre de remplissage décide de l'ampleur des dégâts ; les scores sont bimodaux, pas un gradient lisse ; et la question du nombre d'indices est confondue par un plancher gratuit de coutures épinglées.
- [L'emplacement des indices l'emporte sur leur nombre](https://eternity2.dev/fr/research/why/hint-geometry/) — Sur un casse-tête 16×16 construit à l'image d'Eternity II, dix-huit indices dispersés sur le plateau le résolvent en quelques minutes, là où les entasser en rangées contiguës en réclame une centaine rien que pour ramener la recherche à des dizaines de milliards de placements. C'est la position, non le nombre, qui fait levier, et elle pointe droit vers la fin de partie.
---
# Le backtracker JIT : du Rust portable à égalité avec du C optimisé sur les plateaux difficiles
> Un backtracker Rust en profondeur d'abord, sûr et portable, spécialisé à l'exécution en émettant puis compilant du Rust propre à chaque puzzle, porté de 43 à 123 millions de nœuds de recherche par seconde sur un cœur. Mesuré équitablement face au C de Peter McGavin sur la même machine : à égalité sur les plateaux difficiles et profonds comme le vrai Eternity II, et à environ 44 % de sa vitesse sur les faciles. Chaque échelon parcourt l'arbre identique ; tout le gain vient du code, pas de l'algorithme.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/jit-backtracker/
- Mise à jour: 2026-07-20
- Sujets: speed, backtracking
- Reproduire: `cargo run --release -p dfs-codegen --bin run_dfs_codegen_jit -- --puzzle P.json --chain2 --opt native`
- Source: Peter McGavin's genbody71.zip — the C reference this engine chases (groups.io msg 11749) — https://groups.io/g/eternity2/message/11749
- Source: rust-lang/rust#80630 — LLVM cannot lower loop+match to a computed goto (why the function-chain design exists) — https://github.com/rust-lang/rust/issues/80630
- Source: The eternity2 repository on GitHub — https://github.com/raphael-anjou/eternity2
---
> **Ce qu'est cette expérience, et ce qu'elle n'est pas**
>
> C'est une expérience de **vitesse**, pas de résolution. Elle pose une seule question : un backtracker Rust *sûr et portable* peut-il atteindre le débit du moteur le plus rapide de la communauté - le [C optimisé à la main de Peter McGavin](/fr/research/lab/experiments/peter-mcgavin/backtracker/) - sans quitter Rust ni descendre à l'assembleur ? La réponse dépend du plateau : sur les plateaux **difficiles et profonds comme le vrai Eternity II, il égale son C** ; sur les plateaux faciles et peu ramifiés, son C est environ **2,3× plus rapide**. Il ne dit rien des *scores* : parcourir l'arbre vite et trouver un plateau à haut score sont [deux axes entièrement distincts](/fr/research/lab/experiments/raphael-anjou/going-fast/). Le meilleur que ce moteur atteint sur le vrai puzzle est dans les hauts 300 sur 480, exactement là où un backtracker strict doit s'arrêter - les plateaux record viennent des métaheuristiques, pas d'une marche plus rapide.
Tout moteur Eternity II rapide est, en dessous, le même backtracker en profondeur
d'abord : remplir les cases dans un ordre fixe, essayer chaque pièce qui convient,
descendre, remonter à la première impasse. La
[page de McGavin](/fr/research/lab/experiments/peter-mcgavin/backtracker/) raconte
l'histoire du débit du moteur C qui détient depuis des années la couronne de vitesse
mono-cœur de la communauté. Cette page en est l'autre versant : jusqu'où du *Rust
portable* peut s'en approcher, et où tombe la ligne rigoureuse.
Le résultat dépend du plateau, et c'est là qu'est l'intérêt. Mesuré sur mon Apple M1,
sur un cœur, les deux moteurs compilés sans affichage avec génération de code native
et exécutés dos à dos :
| Plateau | C de McGavin (sans affichage) | Ce moteur | Résultat |
| --- | --- | --- | --- |
| Facile (71.puz de Joe, 18 indices) | ~287 M/s | ~122 M/s | McGavin **~2,3×** |
| **Difficile (16×16 profond, comme le vrai E2)** | **~102–105 M/s** | **~104–111 M/s** | **~égalité** |
Sur les plateaux qui ressemblent vraiment à Eternity II - profonds, densément
contraints, où la recherche passe son temps à revenir en arrière - un moteur Rust sûr
et portable **égale du C optimisé à la main**. Sur les plateaux faciles et peu
ramifiés, où il n'y a presque rien à faire par nœud, le C en ligne droite de McGavin
est plus de deux fois plus rapide. Les deux nombres sont réels ; l'ingénierie
ci-dessous est ce qui a hissé Rust jusqu'à l'égalité sur les plateaux difficiles.
Tout ce qui suit vient de la **génération de code et de la disposition des données**,
pas d'une recherche plus fine : chaque échelon parcourt l'arbre *identique* et, sur un
plateau soluble de test, s'arrête au *nombre de nœuds identique*. Cet invariant est la
colonne vertébrale de toute l'expérience, alors autant l'énoncer d'abord.
> **Mesurez la référence à pleine vitesse, ou vous vous tromperez vous-même**
>
> Une version antérieure de ce travail annonçait que nous *battions* McGavin nettement. C'était faux, et la raison est instructive. Le moteur de McGavin est livré avec un affichage terminal en direct (`#define INTERACTIVE`) : un état qu'il redessine sans cesse. Cet affichage lui coûte environ **2,7× de son débit** - sa vitesse sans affichage est de ~287 M sur le plateau facile, mais avec l'affichage il affiche ~106 M. La première comparaison opposait notre moteur sans affichage à son binaire *bridé* et produisait une victoire fantôme. Reconstruit sans affichage (`-mcpu=native`), le vrai tableau est celui ci-dessus : il gagne le plateau facile largement, et nous égalisons sur les difficiles. La leçon est générale - construisez toujours la référence telle qu'elle tourne à pleine vitesse avant de faire confiance à un ratio.
## La règle du jeu : le même arbre, à chaque échelon
Un backtracker en profondeur d'abord est déterministe. Étant donné un plateau et un
ordre de remplissage fixe, il visite exactement une seule suite de nœuds, sur
n'importe quelle machine, dans n'importe quel langage. Il existe donc un test
implacable pour savoir si une « optimisation » n'est bien qu'une accélération et non
une modification silencieuse de la recherche : **le nombre de nœuds ne doit pas
bouger.**
Tout au long de ce travail, l'oracle a été un 16×16 soluble à 60 indices. Chaque
version du moteur le résout à 480 et annonce **251 815 nœuds** - le même nombre, au
chiffre près, de la référence la plus lente au build fusionné le plus rapide. Tout
changement qui déplaçait ce nombre était un bug déguisé et a été annulé. C'est cette
seule discipline qui permet de lire l'échelle de vitesse ci-dessous comme une
comparaison à conditions égales, et non comme une collection de programmes au
comportement différent.
> **Ici la correction est un invariant de base, pas une étape**
>
> Le moteur vérifie les quatre arêtes de chaque placement contre chaque voisin déjà fixé (pièce posée ou bordure du cadre), et il interdit à une arête de bordure/grise de faire face à l'intérieur. Ce ne sont pas des optimisations « ajoutées plus tard » - c'est la définition d'un placement Eternity II légal, présente dans chaque version de cette page. L'échelle ne fait varier *que* la vitesse d'une recherche fixe et correcte.
## L'idée centrale : générer le programme, ne pas interpréter le puzzle
Un backtracker générique paie, à chaque nœud, des questions dont la réponse ne change
jamais pendant une exécution : *sur quelle case suis-je ? où sont ses voisins ? quel
vivier de candidats lire ?* Une boucle pilotée par tables les cherche dans des
tableaux, à chaque nœud, indéfiniment.
Le C de McGavin y répond **une fois, à la compilation**, en générant un programme
spécialisé pour un puzzle : `genbody -DG` écrit un second fichier C avec un bloc en
ligne droite par case, les adresses des voisins gravées en constantes, et des chaînes
de `goto` reliant les blocs. Cette spécialisation est la source de sa vitesse - même
algorithme, exécuté au ras du métal.
Ce moteur fait la même chose en Rust, à l'exécution :
1. `emit_program(&instance)` écrit un **programme Rust autonome et spécialisé pour le
puzzle** - pièces, viviers de candidats, indices et ordre de remplissage tous
gravés en données `const`, sans crate externe.
2. L'enveloppe le compile avec `rustc -O` (environ 0,15 s pour le build simple, ~1,7 s
pour le fusionné).
3. Le binaire généré exécute la recherche et imprime son résultat.
C'est le flux `genbody -DG → compile → exécute` de McGavin, en Rust, appelé comme une
bibliothèque. Rien d'exotique - juste sortir les faits fixes du puzzle hors de la
boucle chaude pour les confier au compilateur. Tout ce qui suit consiste à extraire
des facteurs constants du code généré, et chaque extraction est un petit changement
autonome qu'un diff illustre au mieux.
## L'échelle, un changement à la fois
Les diffs ci-dessous sont **simplifiés pour la lecture** : le vrai moteur émet sa boucle
interne en Rust généré (des constantes comme la position d'une case et ses voisins sont
gravées par case, et la source fait quelques centaines de lignes par puzzle). Chaque diff
montre l'idée du changement, pas le texte généré littéral - lancez le moteur avec
`--emit-src out.rs` pour voir le vrai code d'un plateau donné.
### 1 · Empaqueter chaque candidat dans un mot
La première boucle générée chassait encore un pointeur : lire un index `u32`, le
suivre dans un tableau `oriented[]` pour le `(id, rotation, arêtes)` de la pièce,
*puis* tester si la pièce était déjà utilisée. Trois chargements dépendants pour
considérer un candidat.
```diff
- let idx = pool[i]; // load an index …
- let (pid, rot, edges) = oriented[idx as usize]; // … chase it into a second array …
- if !used[pid] { /* consider */ } // … then test usage
+ let cand = pool[i]; // one contiguous load: pid<<48 | rot<<40 | edges<<8
+ let pid = (cand >> 48) as usize;
+ if free[pid] != 0 { let edges = (cand >> 8) as u32; /* consider */ }
```
Chaque candidat devient un unique `u64` empaqueté, stocké directement dans son vivier
`(up, left)`. La boucle chaude fait **un** chargement, extrait l'id de la pièce, et
teste l'usage *avant* de dépaqueter les arêtes - le motif « vérifier `tileFree`
d'abord » de McGavin. **+12 %**, et cela met en place la représentation empaquetée dont
dépend tout le reste du travail.
### 2 · Stocker les cases du plateau en un `u32`, pas quatre octets
Le plateau stockait les quatre arêtes de chaque case en `[u8; 4]`. Lire l'arête d'un
voisin pour la comparer demandait quatre chargements d'octets séparés. McGavin garde
les arêtes de chaque tuile posée en **un seul `u32`** et les pousse vers les voisins
par décalages.
```diff
- let cell: [[u8; 4]; N]; // four byte loads to read one neighbour
- let up_edge = cell[up_pos][2]; // …and index arithmetic each time
+ let cell: [u32; N]; // one u32 per cell, URDL packed, empty = 0xFFFF_FFFF
+ let up_edge = (cell[up_pos] >> 8) as u8; // one load + one shift
```
Ce fut le plus grand levier de disposition des données : **34 → 57 M nœuds/s, +67 %**.
Nombre de nœuds inchangé. Bien représenter la structure de données la plus chaude (le
plateau) a compté davantage que toute micro-optimisation venue ensuite.
### 3 · Émettre une fonction par case - le pivot
Voici le geste qui a rendu « égaler McGavin » plausible. La taxe restante était la
boucle pilotée par tables elle-même : `free_order[level]`, `cursor[level]`,
`score_at[level]` - des chargements de tableaux indexés à *chaque nœud*, pour des
valeurs que McGavin a en constantes de compilation. La façon évidente de les graver -
un unique gros `loop { match level { …256 branches… } }` - ne marche pas : `rustc` met
plus d'une minute à compiler une seule fonction énorme, et
[LLVM ne sait pas abaisser un `loop`/`match` en goto calculé](https://github.com/rust-lang/rust/issues/80630)
de toute façon, donc il ne reproduirait même pas la structure de `goto` de McGavin.
La façon qui *marche* est d'émettre **une petite fonction `#[inline(never)]` par
case** :
```diff
- // one generic loop, indexing arrays by depth on every node
- loop {
- let pos = free_order[level];
- let (up_pos, left_pos) = neigh[level];
- // …scan, place, advance level, or back out…
- }
+ // one function per cell; its position and neighbours are baked constants
+ fn cell_37(st: &mut St, left_arg: u8) -> bool {
+ const POS: usize = 138; const UP: usize = 122; // this cell's facts, as constants
+ for cand in POOL_UL[/* up*COLORS+left */] { // its exact candidate pool
+ // place …
+ if cell_38(st, right_edge) { return true; } // advance = call the next cell
+ // unplace …
+ }
+ false // exhausted = plain return (backtrack)
+ }
```
Avancer, c'est appeler la fonction de la case suivante ; revenir en arrière, c'est un
simple `return`. Environ 256 *petites* fonctions se compilent en deux secondes (une
chaîne de 200 fonctions compile en ~1 s ; la fonction géante unique prenait >60 s).
C'est le code en ligne droite par case de McGavin, exprimé en une chaîne de fonctions
minuscules que Rust acceptera réellement de compiler. **58 → 92 M nœuds/s, +56 %** - le
plus grand levier de l'échelle. Nombre de nœuds inchangé.
### 4 · Cesser de recalculer ce qu'on a déjà chargé
Deux changements plus modestes, même thème : ne jamais relire en mémoire ce qu'on a
déjà dans un registre.
Le **voisin de gauche** d'une case est, 94 % du temps (240 des 256 cases, toutes sauf
les débuts de ligne), exactement la pièce que la case *appelante* vient de poser.
L'appelant passe donc sa propre arête droite en argument, et la case dérive sa
contrainte de gauche sans aucune lecture du plateau :
```diff
- let left_edge = (cell[LEFT] >> 24) as u8; // re-read the neighbour we just placed
+ fn cell_38(st: &mut St, left_arg: u8) -> bool { // caller handed us its right edge
+ let left = left_arg; // …no board read
```
Et le **gain de correspondance** - le nombre d'arêtes nouvellement appariées qu'ajoute
un placement - relisait ses quatre voisins. Or les arêtes du haut et de gauche
étaient *déjà chargées* pour choisir le vivier de candidats, et dans l'ordre par ligne
ces voisins sont toujours posés (ou une arête de cadre, sans gain). Le gain
haut/gauche devient donc deux additions `bool → u32` sans branche sur des valeurs déjà
en main ; seuls des voisins bas/droite réellement fixés coûtent une lecture :
```diff
- let gain = matched(up) + matched(left) + matched(down) + matched(right); // 4 reads
+ let gain = u32::from(e_up == up) + u32::from(e_left == left) // 0 reads: cached
+ + need_down_read + need_right_read; // only if pinned
```
Ensemble : **92 → 106 M nœuds/s** - sur le plateau difficile, cela met à niveau avec le
C sans affichage de McGavin (~102–105 M là-bas). Nombre de nœuds inchangé.
### 5 · Un tableau d'octets pour l'ensemble des pièces utilisées
Le moteur suivait les pièces posées avec un masque de bits `u64` : décalage, masque,
et, test. McGavin utilise un `unsigned char tileFree[256]` plat ; son test est un
chargement d'octet et une comparaison à zéro.
```diff
- if used[pid >> 6] & (1u64 << (pid & 63)) == 0 { /* free */ } // shift, mask, and, test
+ if free_pc[pid] != 0 { /* free */ } // one byte load + compare
```
**106 → 108 M.** Nombre de nœuds inchangé.
### 6 · Fusionner des cases pour amortir l'appel - le coup gagnant
Le dernier obstacle entre la chaîne de fonctions et le `goto` de McGavin était l'appel
lui-même : un `goto` vers la case précédente est un saut nu ; un `return` de fonction
restaure d'abord les registres sauvegardés par l'appelé. Alors **fusionnons plusieurs
cases en une fonction** - imbriquons le balayage de la deuxième case *dans* la boucle
de placement de la première, la troisième dans la deuxième, et ainsi de suite, pour
n'avoir qu'un `call` par *groupe* de cases posées au lieu d'un par case :
```diff
- fn cell_37(st){ for c in pool { place; if cell_38(st, r) {return true} unplace } }
- fn cell_38(st){ for c in pool { place; if cell_39(st, r) {return true} unplace } }
+ fn cells_37_38_39(st){ // three cells, one function, one call in/out
+ for c37 in pool37 { place37;
+ for c38 in pool38 { place38;
+ for c39 in pool39 { place39;
+ if next_group(st, r) {return true}
+ unplace39 }
+ unplace38 }
+ unplace37 }
```
La fusion échange moins d'appels contre plus de pression sur les registres, il y a donc
un optimum, et il est peu marqué. En balayant la taille du groupe sur `bench-hard`,
trois essais chacun, dos à dos :
| groupe | 1 | 2 | 4 | 6 | 8 |
| --- | --- | --- | --- | --- | --- |
| nœuds/s | ~102 M | ~107 M | **~110 M** | ~108 M | ~108 M |
La fusion bat nettement l'absence de fusion (groupe 1), mais au-delà du groupe 2 les
écarts sont dans le bruit d'une exécution à l'autre : le pic erre entre les groupes 4 et
6 selon le plateau et l'humeur de l'allocateur de registres de LLVM, et ne dépasse jamais
quelques pour cent. Le défaut de `--chain2` est le groupe 6 ; le groupe 4 a devancé sur
ce plateau précis. Ce qui compte, c'est le saut depuis le groupe 1, pas le vainqueur
exact. Le nombre de nœuds est préservé à travers l'imbrication dans tous les cas.
## L'échelle d'un coup d'œil
Trois points d'ancrage sont revérifiés aujourd'hui sur les plateaux `bench-*.json`
commités ; les étapes entre eux sont les écarts relevés en cours de développement
(chacun un commit autonome), qui dérivent de quelques pour cent selon l'état de la
machine - lisez donc les lignes du milieu comme la *forme* de la montée, pas des
constantes de laboratoire.
| Échelon | Moteur | Changement | statut |
| --- | --- | --- | --- |
| **naive-clean** | récursif | DFS Rust portable simple, la référence rigoureuse | **~44 M, vérifié** |
| **JIT piloté par tables** | codegen | programme généré, boucle interne par tables | **~61 M, vérifié** |
| cases plateau en u32 | codegen | un chargement + décalage par voisin | +~65 % (journal) |
| chaîne de fonctions | codegen | une fonction par case | +~55 % (journal) ★ |
| haut/gauche en cache + octets | codegen | cesser de relire les voisins posés | +~15 % (journal) |
| **fusion (groupe 4–6)** | codegen | **un appel pour plusieurs cases** | **~108–110 M difficile / ~122 M facile, vérifié** |
| *C de McGavin (sans affichage)* | C | *même machine, pour référence* | *~102 M difficile / ~287 M facile* |
Deux moteurs partagent ce tableau : `naive-clean` est un backtracker récursif à part
(lançable avec `run_dfs --algo naive-clean`), et tout depuis « JIT piloté par tables »
est le chemin codegen dont parle cette page (`run_dfs_codegen_jit`). Le résumé rigoureuse
est un **gain de ~2,5× de la référence naive-clean au champion fusionné sur le plateau
difficile** (~44 M → ~110 M) et **~2,8× sur le facile** (~44 M → ~122 M) - atterrissant,
sur le difficile, à niveau avec le C sans affichage de McGavin. Trois méta-leçons en
découlent, la part transférable :
1. **La représentation prime sur les micro-opérations.** Les deux plus grands gains
isolés - cases u32 (+67 %) et chaîne de fonctions (+56 %) - portaient tous deux sur
la *forme* des données et du code, pas sur le rognage d'instructions. Aucun réglage
de branche n'en a approché.
2. **Réutiliser ce qu'on a déjà calculé.** Le gain en cache et la gauche-en-argument
étaient de purs gains « cesse de le recharger ».
3. **La structure prime sur les cycles.** La fusion s'est attaquée à la *structure
d'appel*, pas à un cycle isolé - et c'est ce qui a hissé Rust à niveau avec du C
optimisé à la main sur les plateaux difficiles.
## Reproduisez-le
Le moteur et deux plateaux de référence commités vivent dans le dépôt public sous
`research/experiments/dfs-study/engine/crates/dfs-codegen` (`bench/bench-easy.json`,
`bench/bench-hard.json`, et un `bench/README.md` avec la recette complète). Les trois
points d'ancrage de l'échelle - la référence naive-clean, le plancher codegen et le
champion fusionné - sont chacun lançables directement, pour que quiconque puisse les
rejouer sur sa propre machine, dos à dos. Depuis `research/experiments/dfs-study/engine` :
```bash
# naive-clean : la référence rigoureuse (backtracker récursif simple à part) ~44 M
cargo run --release -p dfs-run --bin run_dfs -- \
--puzzle crates/dfs-codegen/bench/bench-hard.json --algo naive-clean --seed 1 --budget-s 10
# plancher JIT piloté par tables : le chemin codegen sans chaîne/fusion ~61 M
cargo run --release -p dfs-codegen --bin run_dfs_codegen_jit -- \
--puzzle crates/dfs-codegen/bench/bench-hard.json --budget-s 15 --opt native
# champion fusionné (groupe = 6) : le moteur dont parle cette page ~108–110 M difficile, ~122 M facile
cargo run --release -p dfs-codegen --bin run_dfs_codegen_jit -- \
--puzzle crates/dfs-codegen/bench/bench-hard.json --budget-s 15 --chain2 --opt native
# n'importe quelle largeur de fusion, pour balayer les groupes vous-même
cargo run --release -p dfs-codegen --bin run_dfs_codegen_jit -- \
--puzzle crates/dfs-codegen/bench/bench-hard.json --budget-s 15 --group 4 --opt native
```
Pointez `--puzzle` sur `bench-easy.json` et chaque configuration imprime `score=480` au
**même nombre de nœuds** (3 577 121 570) - l'égalité qui prouve que l'échelle est une
échelle de vitesse et rien d'autre. Sur le `bench-hard.json` non terminant, elles
impriment le même score partiel à des `nps` différents. (Donnez-lui un vrai budget : un
budget très court mesure la mise en route du compilateur, pas le débit. Le plateau facile
demande ≥30 s pour se résoudre.) Les trois micro-étapes intermédiaires du tableau
ci-dessus - candidats empaquetés, gain en cache, ensemble utilisé en octets - ne sont pas
des drapeaux séparés ; elles sont la suite de commits dans `bench/README.md`, reproductible
avec `git checkout`.
Pour reproduire équitablement la comparaison avec McGavin, construisez **son** moteur
sans affichage - commentez `#define INTERACTIVE` près du haut de `genbody.c` pour que
l'affichage en direct ne le bride pas - puis lisez le vrai débit :
```bash
# McGavin, sans affichage + natif : émettre le C spécialisé, puis lier et exécuter
gcc -o genbody genbody.c -lm -Ofast -mcpu=native -DG # émet body.c pour ce puzzle
./genbody PUZZLE.puz HINTS.hnt
gcc -o solve genbody.c -lm -Ofast -mcpu=native # lie body.c, lance la recherche
./solve PUZZLE.puz HINTS.hnt
# lisez la ligne « Rate: » (= placements / temps écoulé) sur un plateau difficile, ou
# le résumé final « tiles/second » sur un plateau soluble — c'est sa vraie vitesse
```
Avec l'affichage laissé actif, le même binaire affiche environ un tiers de cela - c'est
exactement le piège qui a produit le faux « nous le battons ».
> **D'abord : comptons-nous seulement la même chose ?**
>
> Une comparaison de vitesse n'a aucun sens tant que les deux moteurs ne comptent pas les mêmes événements ; avant de faire confiance à un ratio, nous avons lu la source de McGavin. Son compteur (`ntp`, la fameuse astuce de débordement 16 bits) s'incrémente **une fois par pièce posée sur le plateau** - après que le candidat a passé la table de correspondance des couleurs et le contrôle d'usage, à l'instant où il est placé (`genbody.c`, le `ntp++` juste après `square[x][y].tile = t`). Notre `st.nodes` fait exactement la même chose : il s'incrémente après qu'un candidat a passé les contrôles d'arêtes et d'usage, au moment où la pièce est posée. Aucun ne compte les candidats qui échouent à ces contrôles ; les deux comptent les placements qui seront ensuite annulés. Donc les « tuiles posées par seconde » de McGavin et nos « nœuds de recherche par seconde » sont **la même mesure** - des placements effectifs, pas des tentatives. (La seule asymétrie : il compte la poignée de placements d'indices forcés et nous les extrayons - ≤18 sur un compte de milliards, soit rien.) Le nombre dont il faut se méfier est le « M/s » d'un *troisième* moteur : c'est là que « placements tentés » et « placements effectués » peuvent différer d'un ordre de grandeur, ce qui est la mise en garde de longue date de la communauté sur [ce qu'est un « nœud »](/fr/research/build/faster/solver-engineering/).
> **Mesurer rigoureusement, ou ne pas mesurer**
>
> Le débit absolu en nœuds/s dérive avec la charge et la température de la machine et - comme le montre la correction plus haut - avec la façon dont le moteur *de référence* est construit. **Seuls les ratios pris dans le même état, dos à dos, sans affichage, machine par ailleurs au repos, sont fiables.** Chaque comparaison de cette page a été prise sans rien d'autre en cours, les deux moteurs compilés sans affichage avec génération de code native et exécutés à quelques secondes d'écart. Le vieux folklore « McGavin est 5× plus rapide » était aussi un mirage, dans l'autre sens : il comparait son exécution sur un puzzle facile à la nôtre sur un difficile. Faites correspondre le plateau, faites correspondre le build, mesurez dos à dos - sinon le nombre ne signifie rien.
## L'écart sur plateau facile est un levier réel et ouvert
Pourquoi le C de McGavin gagne-t-il le plateau facile de 2,3× tout en n'égalisant que
sur les difficiles ? Parce que sur un plateau peu ramifié il n'y a presque rien à faire
par nœud - choisir la ou les deux candidates, poser, avancer - et son code en ligne
droite, où la liste de candidats de chaque case est réduite à une recherche par hachage
parfait minimal, le fait avec le moins d'instructions possible. Notre travail par nœud
(indexer le vivier, calculer le gain, vérifier le bord) est peu coûteux mais pas *nul*,
et quand l'arbre est peu profond et large, ce surcoût se voit. Sur un plateau difficile,
les mêmes nœuds sont dominés par le retour arrière et les défauts de cache, où les deux
moteurs convergent. Refermer l'écart facile signifierait adopter sa génération de liste
de candidats plus serrée - une étape suivante concrète, pas un mur. C'est consigné ici
comme ouvert plutôt que masqué.
## Ce que vaut la vitesse
Pointé sur le vrai Eternity II à 256 pièces - six cœurs, quinze minutes, l'indice
central obligatoire fixé - ce moteur parcourt l'arbre à des dizaines de millions de
nœuds par seconde et par cœur, et plafonne, d'une graine à l'autre, dans les hauts 300
sur 480. Ce n'est pas une déception ; c'est
[tout le propos de la leçon centrale du site](/fr/research/why/prune-vs-speed/). Un
backtracker strict est un superbe arpenteur d'arbre et un piètre solveur : l'espace de
recherche est si vaste qu'aucune vitesse atteignable n'y fait une brèche, ce qui est
précisément pourquoi les records viennent des
[heuristiques et de la réparation](/fr/research/lab/experiments/raphael-anjou/repair-study/),
pas du débit brut.
Le résultat ici est donc délibérément étroit et, je crois, mérite d'être dit
franchement : un moteur Rust *sûr et portable* peut **égaler du C optimisé à la main
sur les plateaux difficiles et profonds qui ressemblent au vrai puzzle**, en parcourant
le même arbre sur le même matériel - tandis que le C gagne encore de ~2,3× sur les
faciles. Et même à égalité, il ne sait pas résoudre Eternity II, parce que la vitesse
n'a jamais été l'obstacle. L'argument plus long sur ce compromis - pourquoi certains
algorithmes dépensent leur budget en vitesse et d'autres en jugement - a sa propre
page : [aller vite](/fr/research/lab/experiments/raphael-anjou/going-fast/).
## À lire aussi
- [Le backtracker C de McGavin : l'histoire du débit, reconstruit ici](https://eternity2.dev/fr/research/lab/experiments/peter-mcgavin/backtracker/) — Le backtracker C de Peter McGavin, le plus rapide de la communauté : une recette d'optimisation de 2007 capitalisée pendant deux décennies via code généré, tables de correspondance et astuces de compteur, puis compilée sur mon M1 et pointée vers le vrai puzzle à 256 pièces, où en mono-cœur elle dépasse 200 des 256 pièces à ~109M placements/s.
- [Aller vite : quand un solveur dépense son budget en vitesse](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/going-fast/) — Certains moteurs Eternity II mettent tout leur effort à parcourir l'arbre de recherche le plus vite possible ; d'autres le mettent dans le jugement sur où chercher. Voici le plaidoyer pour les premiers - ce qu'achète le débit brut, les trois choses différentes qu'on appelle « rapide », et pourquoi le moteur le plus rapide jamais construit ne sait toujours pas résoudre le puzzle.
- [Ingénierie de solveur : l'artisanat sous l'algorithme](https://eternity2.dev/fr/research/build/faster/solver-engineering/) — Tous les solveurs record exécutent le même backtracking en profondeur d'abord. Ce qui les distingue, c'est la couche en dessous : tables de correspondance, hachages parfaits, structs taillées pour le cache, code généré, archéologie du compilateur. C'est cet artisanat qui décide si un nœud coûte 26 cycles ou 2 600. Vingt ans de registre d'ingénierie de la communauté, technique par technique, et ce que tout cela a rapporté.
- [Pourquoi un ordinateur plus rapide ne change rien](https://eternity2.dev/fr/research/why/prune-vs-speed/) — L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
---
# Apprendre à partir des grilles fortes
> Une étude en cinq expériences d'une seule idée : plutôt que de chercher Eternity II à partir de zéro, exploiter la structure du corpus de grilles fortes déjà trouvées et la réinjecter dans une recherche. Un a priori de position, un vote de coup appris, une boussole de demande rare, un mineur d'anti-motifs et un décodage de record, du signal le plus simple au plus subtil, et le mur unique que les cinq atteignent.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/
- Mise à jour: 2026-07-16
- Sujets: learning, construction
---
L'essentiel de ce carnet cherche Eternity II à partir de zéro : un beam construit
une grille depuis une grille vide, un backtracker creuse et rebrousse chemin, une
boucle de réparation polit une grille complète coup par coup. Chacun ne raisonne
qu'à partir des règles du puzzle et de la grille qu'il a sous les yeux. Cette étude
fait exception, et c'est bien une étude plutôt qu'un ensemble décousu de runs parce
que ses cinq expériences posent une même question sous des angles différents :
**que peut apprendre une recherche des grilles que les gens ont déjà trouvées, et
jusqu'où cela la porte-t-il ?**
La matière première est un corpus de grilles fortes, tout arrangement que la
communauté et ce projet ont poussé au-delà de 400 sur 480. Le geste, dans chacune
des expériences ici, consiste à lire ce corpus pour en tirer une structure (où se
placent les pièces, quelles pièces se touchent, quels motifs locaux reviennent,
quels accords sont des pièges) et à réinjecter cette structure dans une recherche
comme un biais. On est plus proche de l'apprentissage par imitation que de la
conception d'algorithmes de recherche, et l'idée mérite son propre espace parce que
la même poignée de concepts revient sans cesse, chacun un peu plus affûté que le
précédent.
Le corpus lui-même est [publié](/fr/research/build/dataset/) : 7 658 grilles distinctes
scorant de 400 à 469, diffusées sous CC0, avec le contrôle de diversité qui empêche
un signal appris de se contenter de ré-encoder une seule grille. La présentation
agnostique de chaque technique vit dans la section théorique
[apprendre à partir des grilles fortes](/fr/research/build/learning/) ; les pages ici
en sont le versant laboratoire, les runs qui mettent chaque technique à l'épreuve
de la vraie grille 16×16, avec leurs scores et les questions qu'ils ont laissées
ouvertes.
## Les cinq expériences, du signal le plus simple au plus subtil
L'étude se lit comme une séquence. Chaque expérience donne un tour de vis de plus
que la précédente, et les pages sont ordonnées pour être lues dans cet ordre.
| # | Expérience | Le signal appris | Atteint (sur 480) |
|---|---|---|---|
| 1 | [PRIOR](/fr/research/lab/experiments/raphael-anjou/learning/prior/) | où chaque pièce tend à se placer, un simple comptage de positions | 460 |
| 2 | [KEYRING](/fr/research/lab/experiments/raphael-anjou/learning/keyring/) | trois signaux (position, adjacence, patch 2×2) qui votent ensemble | 460 |
| 3 | [LODESTONE](/fr/research/lab/experiments/raphael-anjou/learning/lodestone/) | quelles pièces répondent à une demande de couleur rare, une faible boussole | 451 |
| 4 | [PALIMPSEST](/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/) | les mauvaises habitudes partagées qui plafonnent les grilles, en minant le piège et non la structure | 463 |
| 5 | [REPLAY](/fr/research/lab/experiments/raphael-anjou/learning/replay/) | l'unique coup qu'une seule grille record a joué et que notre recherche ne savait pas jouer | 460 |
**[PRIOR](/fr/research/lab/experiments/raphael-anjou/learning/prior/)** est la forme la
plus simple que l'idée puisse prendre, un comptage : sur les grilles fortes, à
quelle fréquence chaque pièce se place-t-elle dans chaque case ? Utilisé comme
départage lors de la construction, il bâtit une grille compétitive à partir de rien
et atteint 460. **[KEYRING](/fr/research/lab/experiments/raphael-anjou/learning/keyring/)**
additionne les signaux plutôt que de se fier à un seul, laissant un comptage de
position, un comptage d'adjacence et une qualité de patch 2×2 apprise voter sur
chaque placement, ce qui mène une construction jusqu'à une famille de coins qu'aucune
recherche antérieure n'avait forcée.
**[LODESTONE](/fr/research/lab/experiments/raphael-anjou/learning/lodestone/)** prend le
chemin inverse, vers un unique signal délibérément faible (un poids de demande rare
par pièce) et, ce faisant, découvre le fil du rasoir qui traverse toute l'étude :
dès qu'un signal appris cesse d'être un départage pour devenir l'objectif, la
recherche s'effondre.
**[PALIMPSEST](/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/)** est le
tournant subtil. Toutes les expériences qui la précèdent font confiance à l'accord
entre grilles fortes ; celle-ci demande quels accords sont des *pièges*, des
placements que toute grille adopte mais qu'aucune grille de tête ne conserve, et
oriente une recherche de réparation pour les attaquer. Elle a produit la meilleure
grille de ce projet, 463. **[REPLAY](/fr/research/lab/experiments/raphael-anjou/learning/replay/)**
apprend d'une seule grille plutôt que d'une statistique : reconstruire exactement un
record de la communauté, et tout ce qu'il faut ajouter à votre recherche pour
qu'elle emprunte ce chemin est précisément l'ingrédient qui lui manquait. Ici,
c'était le double break, le coup qui a fait passer l'échelle stricte de 458 à 460.
## Le mur unique que les cinq atteignent
Le fil conducteur est ce qui fait de ceci une étude et non un sac de tours, et il
donne à réfléchir. Chaque signal ici n'est sûr qu'en tant que biais léger :
faites-lui trop confiance et la recherche se disloque (LODESTONE tombe de 451 à 380
à mesure que son poids monte ; la liste de pièges de PALIMPSEST aide comme guide et
nuit comme interdit). Et même parfaitement exploité, aucun de ces signaux ne relève
le plafond. Ils atteignent le sommet de la portée propre d'une recherche, vite et de
façon fiable, puis s'arrêtent, parce que le corpus dont ils apprennent est fait de
grilles qui butent toutes sur le même
[mur de rigidité](/fr/research/why/rigidity-wall/). Apprendre à partir des grilles
fortes est le chemin le plus rapide *vers* le plateau et, à lui seul, aucun chemin
*au-delà*. Ce mode d'échec est le sujet de la
[synthèse sur l'effondrement](/fr/research/build/learning/when-learning-collapses/) de la
section théorique, et c'est la note sur laquelle toute l'étude se résout.
C'est l'une des trois études du
[carnet d'expériences](/fr/research/lab/experiments/raphael-anjou/). Ses sœurs, l'[étude
DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/) et l'[étude de
réparation](/fr/research/lab/experiments/raphael-anjou/repair-study/), démontent un
unique paradigme de recherche décision par décision ; celle-ci tient le paradigme
lâche et fait varier ce que la recherche a le droit de *savoir*.
## Pages de cette section
- [PRIOR](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/prior/) — Construire un plateau à partir de rien, en départageant les égalités selon la position habituelle des pièces dans les bons plateaux déjà connus. Il atteint un score élevé sans aucun plateau de départ à copier.
- [KEYRING](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/keyring/) — Construire un plateau de zéro en classant chaque pièce suivante selon trois signaux appris de plateaux forts passés. A atteint 460 dans une famille de plateaux qu'aucune recherche antérieure n'avait percée.
- [LODESTONE](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/lodestone/) — Une boussole ténue pour une recherche partie de zéro : l'inciter à engager les pièces rares tôt, là où elles sont nécessaires. Elle ne relève pas le plafond ; elle fait que la recherche atteint de façon fiable le sommet de sa propre plage.
- [PALIMPSEST](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/) — Lire chaque plateau fort pour repérer les habitudes qui, en silence, plafonnent un plateau, puis les briser. Cette expérience a produit le meilleur plateau du projet : 463 sur 480.
- [REPLAY](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/replay/) — Reconstruire à l'identique les plateaux stricts à 460 de la communauté, et découvrir au passage le coup que les solveurs ordinaires ne savent pas jouer : payer deux désaccords sur une même case.
## À lire aussi
- [Apprendre des grilles fortes](https://eternity2.dev/fr/research/build/learning/) — La plupart des attaques contre Eternity II cherchent à partir de zéro. Une famille distincte fait l'inverse : elle fouille le corpus des grilles déjà trouvées pour en extraire de la structure, puis réinjecte cette structure dans la recherche. Priors de position, ordonnancement appris des coups, fouille d'anti-motifs, décodage de records, et le mode de défaillance où un signal appris s'effondre.
- [Le jeu de données](https://eternity2.dev/fr/research/build/dataset/) — Un jeu de données public sous licence CC0 pour Eternity II, en deux volets : quatorze instances de référence à résoudre, et un corpus de 7 658 plateaux forts distincts dont on peut s'inspirer. Chaque score est recalculé à partir du plateau lui-même, et le corpus est vérifié comme réellement varié, plutôt que mille copies d'un même plateau.
- [Les expériences de Raphaël Anjou](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/) — Un carnet d'expériences de recherche sur Eternity II, organisé autour des moteurs partagés qui les font tourner, des pipelines de combinaison qui courent après le score, de quatre études qui décortiquent un paradigme de recherche une décision à la fois, et de résolutions exactes de fin de partie. Chacune expose son idée, son meilleur plateau et les questions qu'elle laisse ouvertes. La meilleure atteint 463 sur 480.
- [L'étude DFS](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/) — Une seule question, posée avec soin : parmi les backtrackers en profondeur d'abord pour Eternity II, qu'apporte réellement chaque ordre de remplissage, chaque heuristique et le mécanisme de rupture ? Une famille de backtrackers écrits de zéro, séparés chacun par un seul changement, exécutés sur les mêmes dix variantes à coins fixés, sur un seul cœur, pendant soixante secondes.
- [L'étude de la réparation](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/repair-study/) — La jumelle de l'étude DFS, pour l'autre manière d'attaquer Eternity II : détruire une partie d'un plateau, la reconstruire, garder le changement s'il aide. Une question, posée avec soin. Que rapporte chaque décision de cette boucle : quelle région détruire, comment la reconstruire, quand garder un mouvement, quand redémarrer, et de quel plateau partir ?
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
---
# KEYRING
> Construire un plateau de zéro en classant chaque pièce suivante selon trois signaux appris de plateaux forts passés. A atteint 460 dans une famille de plateaux qu'aucune recherche antérieure n'avait percée.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/keyring/
- Mise à jour: 2026-07-21
- Sujets: construction, learning
- Reproduire: `just research-record-boards`
- Source: La recherche en faisceau comme construction best-first à largeur bornée (page conceptuelle de ce projet) — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/construct/beam-search.mdx
---
[PRIOR](/fr/research/lab/experiments/raphael-anjou/learning/prior/) se fiait à un
seul signal appris, un décompte de positions, pour départager ses égalités.
KEYRING est l'étape suivante de l'[étude](/fr/research/lab/experiments/raphael-anjou/learning/) :
et si un seul signal ne suffisait pas ? Lorsqu'on construit un plateau une pièce
à la fois, le point difficile consiste à décider quelle pièce placer ensuite
quand plusieurs conviendraient, et une règle empirique unique, même apprise, tend
à conduire la recherche vers les mêmes impasses à chaque fois. KEYRING porte trois
intuitions apprises différentes en même temps, un trousseau, et les laisse voter,
ce qui empêche la recherche de trop se fier à un signal en particulier.
## Fonctionnement
À partir de la bibliothèque de plateaux forts, KEYRING apprend trois choses.
Premièrement, où chaque pièce aime se placer : à quelle fréquence une pièce
apparaît à chaque position dans les bons plateaux. Deuxièmement, quelles pièces
aiment être voisines : à quelle fréquence deux pièces finissent en contact.
Troisièmement, quels petits carrés 2×2 apparaissent dans les bons plateaux plutôt
que dans les mauvais.
Il remplit ensuite le plateau par une recherche en faisceau, en gardant de
nombreux plateaux partiels vivants à la fois. Lorsqu'il doit choisir la pièce
suivante, il note chaque option d'après le nombre d'arêtes qu'elle apparie, ajusté
par les trois signaux appris conjointement. Une petite dose d'aléa empêche les
nombreuses tentatives parallèles de s'effondrer sur un même chemin.
> **[Figure]** Interactif : le vote de placement à trois signaux — interactive: KeyringDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
## Le plateau
> **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
KEYRING a atteint 460 sur 480, et l'a fait dans une disposition de coins où aucun
plateau n'était parvenu à ce niveau auparavant : ce n'est donc pas une nouvelle
route vers un plateau connu, mais une région véritablement inédite. Sur des runs
répétés, il a décroché un plateau fort bien plus souvent que la version à signal
unique, plus simple, dont il est issu.
Ce n'est pas le meilleur score du projet (c'est 463), mais trouver un plateau
élevé dans une famille inédite compte : les plateaux forts sont réputés isolés les
uns des autres, si bien que chaque nouvelle famille constitue son propre point
d'appui.
## Méthode
Les trois signaux, rendus précis, puis la manière dont ils orientent le faisceau.
Le plus fort des trois est le **prior de carré 2×2**. Sur le corpus, on sépare les
plateaux en *hauts* (score ≥ 460) et *bas* (< 460), et pour chaque carré 2×2 $q$
(quatre pièces avec leurs rotations) on le note par un rapport de log-odds lissé
à la Laplace :
$$
\text{score}(q) = \log\big(\text{count}_\text{high}(q) + \alpha\big) - \log\big(\text{count}_\text{low}(q) + \alpha\big), \quad \alpha = 0{,}5
$$
Un carré qui apparaît dans les plateaux forts et non dans les faibles obtient un
score positif ; un carré piège à consensus obtient un score négatif. (Dans le run
qui a trouvé le 460, le corpus se répartissait en 23 plateaux hauts contre 1255
bas.) Les deux autres signaux sont des décomptes plus simples : une fréquence de
**pièce-en-position** et une fréquence d'**adjacence de paires de pièces**, chacune
comptabilisée sur le même ensemble de plateaux forts.
La construction est une **recherche en faisceau** : on garde $W$ plateaux partiels
vivants, et à chaque étape on étend chaque faisceau en notant chaque placement
candidat comme son gain en arêtes appariées plus une somme pondérée des trois
priors, puis on conserve les $W$ meilleurs. Un peu d'aléa injecté empêche les $W$
faisceaux de s'effondrer sur un seul chemin, ce qui a permis à KEYRING d'atteindre
une *nouvelle* famille de coins plutôt que de redériver un plateau connu. Les
carrés se compactent dans une clé `u64` (pièce ≤ 8 bits, rotation 2 bits, ×4
cellules = 40 bits), de sorte que la consultation du prior est un accès de hachage.
Comme pour [PRIOR](/fr/research/lab/experiments/raphael-anjou/learning/prior/), la
construction en faisceau atteint seule la zone haute des 450 ; le plateau 460
retenu prend cette construction et ajoute par-dessus une queue de raffinement
local, la même séparation construire-puis-raffiner qu'emploient les pipelines de
record. Les trois signaux sont ce qui porte la *construction* dans une famille
inédite ; les dernières arêtes relèvent du raffinement.
Une limite qu'il vaut la peine d'énoncer : les priors sont appris d'un corpus
lui-même sous-optimal, et encodent donc autant le plafond de la communauté que sa
sagesse : cette même double arête que [PALIMPSEST](/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/)
transforme en atout en séparant le bon consensus des pièges.
## Reproduire
`just research-record-boards` vérifie octet par octet le score du plateau 460
retenu à partir de sa chaîne Bucas stockée. La recherche est stochastique
(recherche en faisceau avec aléa injecté), si bien qu'un nouveau run ne
reproduira pas le même plateau ; le plateau est l'artefact de référence. Le moteur
est le producteur en faisceau partagé ; le changement décrit par cette page tient
aux trois signaux de classement appris. Ces signaux sont extraits d'un corpus de
plateaux forts, de sorte que le run n'est pas reproduit de zéro ici.
## Questions ouvertes
Graduer le signal de carré par degré, plutôt que de traiter les carrés comme
simplement bons ou mauvais, aiderait-il davantage ? Les poids des trois signaux
pourraient-ils évoluer à mesure que le plateau se remplit, en se fiant davantage à
la structure en fin de construction ? Et cette nouvelle famille peut-elle être
poussée au-delà de 460 avec un raffinement plus long ?
## À lire aussi
- [Ordonnancement des coups appris](https://eternity2.dev/fr/research/build/learning/learned-value-ordering/) — Quand plusieurs pièces conviennent, laquelle poser ensuite ? Plutôt qu'une seule règle empirique, on transporte plusieurs signaux appris des bons plateaux et on les fait voter. Le vote empêche la recherche de trop se fier à une intuition unique et de foncer vers la même impasse.
- [Apprendre à partir des grilles fortes](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/) — Une étude en cinq expériences d'une seule idée : plutôt que de chercher Eternity II à partir de zéro, exploiter la structure du corpus de grilles fortes déjà trouvées et la réinjecter dans une recherche. Un a priori de position, un vote de coup appris, une boussole de demande rare, un mineur d'anti-motifs et un décodage de record, du signal le plus simple au plus subtil, et le mur unique que les cinq atteignent.
- [PRIOR](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/prior/) — Construire un plateau à partir de rien, en départageant les égalités selon la position habituelle des pièces dans les bons plateaux déjà connus. Il atteint un score élevé sans aucun plateau de départ à copier.
- [Pourquoi le basin-hopping semble impossible](https://eternity2.dev/fr/research/why/sigma-cycles/) — Si l'on ne peut pas améliorer un excellent plateau en le peaufinant, peut-être peut-on sauter vers un autre excellent plateau. Sur chaque paire de records testée, c'est impossible, et la raison structurelle mérite qu'on la voie.
- [Motifs interdits](https://eternity2.dev/fr/research/why/forbidden-patterns/) — Presque tout petit assemblage de pièces que l'on pourrait construire est impossible. Pour un carré 2×2, 99,72 % des façons de placer quatre pièces ne pourront jamais s'accorder.
- [Recherche en faisceau](https://eternity2.dev/fr/research/build/construct/beam-search/) — Maintenir en vie les K plaquettes partielles les plus prometteuses à la fois et les faire croître case par case. La recherche en faisceau est le moteur des constructeurs ex nihilo de ce projet, et une illustration limpide des raisons pour lesquelles la largeur seule s'enlise dans les profondeurs de l'intérieur.
---
# LODESTONE
> Une boussole ténue pour une recherche partie de zéro : l'inciter à engager les pièces rares tôt, là où elles sont nécessaires. Elle ne relève pas le plafond ; elle fait que la recherche atteint de façon fiable le sommet de sa propre plage.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/lodestone/
- Mise à jour: 2026-07-21
- Sujets: construction, search-space, learning
- Reproduire: `just research-record-boards`
- Source: Géographie des couleurs rares (ce projet) : où se situent les demandes (N,O) rares — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/why/rare-color-geography.mdx
---
[KEYRING](/fr/research/lab/experiments/raphael-anjou/learning/keyring/) ajoutait des
signaux ; LODESTONE, la troisième expérience de l'
[étude](/fr/research/lab/experiments/raphael-anjou/learning/), se réduit à un unique
signal délibérément ténu, et ce faisant met au jour la lame de rasoir sur
laquelle chaque signal appris tient ici en équilibre. Les bonnes grilles
s'accordent discrètement sur un point : à mesure que le score monte, elles
satisfont de plus en plus un ensemble particulier de demandes rares, ces
emplacements où seules une ou deux pièces de tout le jeu peuvent servir les
couleurs nord et ouest d'une case. LODESTONE se demande si le fait de renseigner
une recherche partie de zéro sur ces demandes l'aide à engager les bonnes pièces
rares avant qu'elles ne soient volées.
## Fonctionnement
À partir du corpus des bonnes grilles, LODESTONE construit un prior : pour chaque
pièce, la fréquence à laquelle elle finit par servir l'une de ces demandes rares
nord-ouest dans une bonne grille, pondérée fortement à la hausse pour les plus
rares, de sorte qu'une pièce qui est le seul serveur possible reçoit le plus gros
bonus. La recherche par faisceau classe alors ses placements candidats selon le
score d'arêtes appariées habituel, augmenté d'un petit multiple de ce prior ;
ainsi, parmi des coups par ailleurs équivalents, elle préfère placer les pièces
que les bonnes grilles ont appris à dépenser tôt.
Le détail crucial, c'est la taille de ce multiple. Le prior doit être un pur
départage, pas une composante de l'objectif : il tranche entre des coups qui
s'apparient également, rien de plus.
> **[Figure]** Interactif : carte d'attraction des couleurs rares — interactive: LodestoneRarityLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
À un poids infime, le prior apporte un gain faible mais constant : sur cinq
graines, le score médian parti de zéro passe de 449 à 451, et, plus utile encore,
la dispersion se resserre, d'un éparpillement 446-451 à une plage fiable
450-451. Il fait atterrir le constructeur au sommet de sa plage au lieu de le
laisser trébucher par moments.
Montez le poids ne serait-ce qu'un peu et tout s'effondre (422, puis 380), car
courir après les demandes rares du corpus se paie alors directement au détriment
de l'appariement de l'arête qui est devant vous. Cet échec est lui-même le
résultat : la rareté est un vrai signal pour savoir *quelle* pièce préférer, mais
un signal faible, et sûr uniquement en tant que départage. LODESTONE reste modeste
sur son ampleur : il améliore la qualité et la régularité de la construction de
quelques arêtes, et ne touche pas au plafond de bassin qui arrête toute méthode
près du sommet.
## Méthode
Le signal d'abord, puis la manière délibérément minuscule dont il est employé.
**La mesure.** Une *demande rare* est une case dont les couleurs nord et ouest ne
peuvent être servies que par une ou deux pièces de tout le jeu. Sur l'ensemble du
corpus, le nombre de demandes rares satisfaites dans au moins la moitié des
grilles croît *de façon monotone* avec le score, à peu près 1 → 2 → 3 → 10 à
mesure que les grilles grimpent vers 458+. Les bonnes grilles ne placent pas
seulement les pièces rares par hasard ; elles satisfont de plus en plus les
*mêmes* demandes rares. C'est une structure réelle, corrélée au score, qu'aucun
constructeur antérieur n'avait intégrée.
**Le prior.** Pour chaque pièce, on pondère la fréquence à laquelle elle sert
l'une de ces demandes rares nord-ouest dans une bonne grille, avec un fort
renforcement pour les plus rares (une pièce qui est le *seul* serveur possible
reçoit le plus gros poids). Le faisceau classe les candidats selon le gain
d'arêtes appariées habituel, augmenté d'un petit multiple de ce poids.
**Le réglage est toute l'histoire.** Le multiple doit être un pur *départage* :
il décide entre des coups qui s'apparient également et rien d'autre. À un poids
infime : score médian parti de zéro 449 → 451 sur cinq graines, et la dispersion
se resserre de 446-451 à une plage fiable 450-451. Poussez le poids et tout
s'effondre (422, puis 380), car courir après les demandes rares se paie alors
directement au détriment de l'appariement de l'arête qui est devant vous.
L'effondrement *est* le résultat : la rareté dit *quelle* pièce préférer, mais
faiblement, sûre seulement en tant que départage.
## Reproduire
Graine fixée ; l'artefact reproductible ici est l'*effet* du départage (une
dispersion plus resserrée et une médiane +2 sur cinq graines), et non une grille
unique. Le moteur est le producteur par faisceau partagé ; le changement que
décrit cette page est un ténu départage pièce-rare-tôt. Ce poids de départage est
dérivé du jeu de pièces et d'un corpus, si bien que le run n'est pas ici reproduit
depuis zéro.
## Questions ouvertes
Pourrait-on rendre le prior conscient de la position sans qu'il devienne une
composante de l'objectif, fort uniquement dans les régions où les demandes rares
se concentrent réellement ? Le combiner aux trois signaux de KEYRING ajoute-t-il
un quatrième vote utile, ou seulement davantage de bruit ? Et le gain de
régularité vaut-il plus que le gain de médiane, sachant qu'une recherche plus
resserrée est plus facile à échafauder en échelle ?
## À lire aussi
- [Priors de corpus](https://eternity2.dev/fr/research/build/learning/corpus-priors/) — La façon la plus simple d'apprendre des bons plateaux : compter où chaque pièce tend à se placer, ou à quelle fréquence elle satisfait une demande rare, et se servir de ce décompte comme d'un léger départage en construction. Ce doit rester un départage ; dès qu'il entre dans l'objectif, il fait s'effondrer la recherche.
- [Quand l'apprentissage s'effondre](https://eternity2.dev/fr/research/build/learning/when-learning-collapses/) — La moitié désenchantée de l'apprentissage à partir des grilles fortes. Un signal appris atteint fiablement le sommet de la plage propre à une recherche, puis s'arrête. Faites-lui trop confiance et la recherche s'effondre ; même utilisé parfaitement il ne relève pas le plafond, car le plafond n'est pas une chose que le corpus connaît.
- [Apprendre à partir des grilles fortes](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/) — Une étude en cinq expériences d'une seule idée : plutôt que de chercher Eternity II à partir de zéro, exploiter la structure du corpus de grilles fortes déjà trouvées et la réinjecter dans une recherche. Un a priori de position, un vote de coup appris, une boussole de demande rare, un mineur d'anti-motifs et un décodage de record, du signal le plus simple au plus subtil, et le mur unique que les cinq atteignent.
- [Le vol de pièce, là où meurent les solveurs](https://eternity2.dev/fr/research/why/piece-theft/) — Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
- [KEYRING](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/keyring/) — Construire un plateau de zéro en classant chaque pièce suivante selon trois signaux appris de plateaux forts passés. A atteint 460 dans une famille de plateaux qu'aucune recherche antérieure n'avait percée.
- [PRIOR](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/prior/) — Construire un plateau à partir de rien, en départageant les égalités selon la position habituelle des pièces dans les bons plateaux déjà connus. Il atteint un score élevé sans aucun plateau de départ à copier.
- [Les couleurs rares vivent sur le cadre](https://eternity2.dev/fr/research/why/rare-color-geography/) — Cinq des 22 couleurs d'Eternity II n'apparaissent que le long de l'anneau de bordure, chacune sur exactement 24 arêtes, jamais une seule fois à l'intérieur. Une séparation structurelle qui façonne la manière dont chaque solveur traite le cadre.
---
# PALIMPSEST
> Lire chaque plateau fort pour repérer les habitudes qui, en silence, plafonnent un plateau, puis les briser. Cette expérience a produit le meilleur plateau du projet : 463 sur 480.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/
- Mise à jour: 2026-07-21
- Sujets: local-search, learning
- Reproduire: `just research-record-boards`
- Source: Ropke & Pisinger 2006, recherche adaptative à grand voisinage (le cadre destruction-réparation que ceci oriente) — https://doi.org/10.1287/trsc.1050.0135
---
Jusqu'ici, chaque expérience de l'[étude](/fr/research/lab/experiments/raphael-anjou/learning/)
a fait confiance à l'accord entre plateaux forts : là où les bons plateaux
concordent, on les suit. PALIMPSEST est le moment où cette confiance est examinée,
et elle a produit le meilleur plateau du projet. Quand de nombreuses recherches
indépendantes atteignent toutes un plateau élevé mais imparfait, elles tendent à
s'accorder sur beaucoup de placements. Une partie de cet accord est une structure
authentique, une autre partie est une mauvaise habitude partagée : un choix local
qui paraît bon et maintient chaque recherche bloquée juste en deçà du sommet.
L'idée de cette expérience est de lire l'ensemble du corpus de plateaux forts, de
séparer l'accord utile du piège, et d'attaquer les pièges.
## Comment ça marche
On prend chaque plateau que quiconque a trouvé et qui obtient un score
raisonnable, et pour chaque paire de positions voisines on compte combien de fois
une paire de pièces donnée s'y trouve, pondérée par la qualité du plateau. Deux
motifs se dégagent. Certaines adjacences reviennent encore et encore dans les tout
meilleurs plateaux : ce sont des structures sûres, réelles. D'autres apparaissent
presque partout mais jamais dans les meilleurs plateaux : ce sont les pièges, les
choix qui semblent justes et plafonnent le score.
Les pièges se regroupent dans des régions particulières du plateau plutôt que de
se répartir uniformément. Savoir où ils sont transforme le corpus en une carte :
quels placements suivre, et lesquels démonter puis reconstruire. Regrouper les
plateaux selon l'agencement de leurs coins oriente alors la recherche vers la
famille la plus prometteuse à attaquer.
> **[Figure]** Interactif : la carte des pièges, famille de coins par famille de coins — interactive: PalimpsestDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
## Le plateau
> **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
Utilisée comme carte pour orienter la recherche, cette approche a atteint 463 des
480 arêtes appariées, le meilleur plateau que ce projet ait produit. À titre de
comparaison, le meilleur plateau de la communauté sur ce puzzle est 470, et une
solution complète en compte 480.
Une réserve mérite d'être dite : tenter d'utiliser directement la liste des
pièges, en forçant la recherche à éviter les placements piégés, n'a pas fonctionné
en soi et tendait à dégrader les plateaux. La valeur résidait dans la lecture du
corpus pour choisir où concentrer l'effort, non dans le codage en dur de ses
conclusions dans la recherche.
## Méthode
Pour le lecteur qui veut la procédure exacte. Elle se déroule en deux passes.
**1. Fouille de consensus pondérée par le score et séparée par bassin.** Sur un
corpus de plateaux dont le score va de 400 à 480, pour chaque paire de cellules
adjacentes $(i, j, \text{dir})$ et chaque paire de pièces qui s'y trouve un jour,
on calcule deux fréquences plutôt qu'une :
$$
\begin{aligned}
p_\text{high}(\text{pair}) &= \frac{\#\{\text{boards with the pair, score} \ge 460\}}{\#\{\text{boards with score} \ge 460\}} \\[4pt]
p_\text{all}(\text{pair}) &= \frac{\#\{\text{boards with the pair}\}}{\#\{\text{all boards}\}}
\end{aligned}
$$
ainsi qu'un *plafond* : le score maximal de tout plateau contenant cette paire.
C'est le plafond, et non $p_\text{high}$, qui sépare les deux catégories. Le **bon
consensus** correspond à un $p_\text{all}$ élevé assorti d'un plafond qui atteint
la famille de tête, les plateaux au niveau du meilleur du projet (463) ou à un
point de celui-ci : des motifs que les plateaux les plus forts conservent, donc
une structure fiable. Les **pièges de consensus** correspondent à un $p_\text{all}$
élevé assorti d'un plafond qui cale quelques points plus bas, aucun plateau portant
la paire ne franchissant le seuil des 460-et-quelques : le mauvais choix consenti
qui verrouille toute une famille sous le record. La coupure se situe entre
« atteint le sommet » et « cale juste en dessous » ; sur ce petit corpus (un
plafond à 463, des plateaux groupés du haut des 450 au bas des 460) elle est fixée
à la main plutôt que balayée, et $p_\text{high}$ (score $\ge$ 460) est rapporté à
côté mais n'est pas le discriminant. La vue à fréquence unique (la persistance
seule) ne peut pas les distinguer ; la séparation par plafond est toute l'astuce.
**2. ALNS de destruction des pièges.** On prend un plateau à 461 (il se situe *à
l'intérieur* du bassin des pièges par construction), on localise les ~50 paires-
pièges les mieux classées qu'il contient, et on trouve le coin : la position dont
le retrait brise le plus de paires-pièges tout en préservant les paires de bon
consensus. Puis on perturbe ces cellules-pièges, on les échange contre des pièces
non piégées, introduisant 4 à 8 discordances délibérées, et on renvoie le plateau
à la [recherche adaptative à grand voisinage](/fr/research/build/local-search/local-search-alns/).
L'opérateur de destruction de la pire bande d'ALNS déchire de préférence
exactement ces régions intentionnellement brisées et les reconstruit. Exécution :
30 minutes × 6 graines.
La complexité est banale : la passe de fouille est linéaire dans la taille du
corpus, et le coût réel est la recherche ALNS qu'elle oriente. La contribution
tient à l'*endroit* où elle dirige cette recherche, non à une nouvelle recherche.
## Reproduire
Le vérificateur `just research-record-boards` recalcule le score en arêtes
appariées du plateau à 463 versionné à partir de ses arêtes Bucas brutes et
vérifie qu'il égale l'annonce, si bien que le plateau est reproductible et
vérifiable octet par octet dans le visualiseur. La recherche qui l'*a trouvé* est
une exécution stochastique du moteur ALNS partagé (30 min × 6 graines), orientée
par la carte des pièges décrite ci-dessus. Elle ne reproduira pas le même plateau,
raison pour laquelle l'artefact de référence est le plateau, non une nouvelle
exécution. L'orientation est lue à partir d'un corpus de plateaux forts, si bien
que l'exécution n'est pas reproduite ici depuis zéro.
## Questions ouvertes
Pourquoi la reconstruction des régions piégées tend-elle à retomber sur le même
plateau de tête déjà connu plutôt que sur un plateau réellement nouveau ? Une
carte distincte par famille de coins révélerait-elle une structure que la carte
combinée masque ? Et une pénalité douce pour les placements piégés aiderait-elle
là où une interdiction stricte a nui ?
## À lire aussi
- [Fouille d'anti-motifs](https://eternity2.dev/fr/research/build/learning/anti-pattern-mining/) — L'idée subtile derrière l'apprentissage à partir des grilles fortes : tout accord entre elles n'est pas bon à prendre. Certains placements partagés sont de vraies structures ; d'autres sont un piège commun qui plafonne chaque recherche juste sous le sommet. Distinguer les deux, puis attaquer le piège.
- [Apprendre à partir des grilles fortes](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/) — Une étude en cinq expériences d'une seule idée : plutôt que de chercher Eternity II à partir de zéro, exploiter la structure du corpus de grilles fortes déjà trouvées et la réinjecter dans une recherche. Un a priori de position, un vote de coup appris, une boussole de demande rare, un mineur d'anti-motifs et un décodage de record, du signal le plus simple au plus subtil, et le mur unique que les cinq atteignent.
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [KEYRING](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/keyring/) — Construire un plateau de zéro en classant chaque pièce suivante selon trois signaux appris de plateaux forts passés. A atteint 460 dans une famille de plateaux qu'aucune recherche antérieure n'avait percée.
- [Recherche locale et ALNS](https://eternity2.dev/fr/research/build/local-search/local-search-alns/) — Détruire une partie du plateau, la reconstruire en mieux, et laisser l'algorithme apprendre quelles démolitions rapportent. La recherche à grand voisinage adaptative est le meilleur outil de finition de ce projet, et la démonstration la plus nette du mur où la finition s'arrête.
---
# PRIOR
> Construire un plateau à partir de rien, en départageant les égalités selon la position habituelle des pièces dans les bons plateaux déjà connus. Il atteint un score élevé sans aucun plateau de départ à copier.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/prior/
- Mise à jour: 2026-07-21
- Sujets: construction, learning
- Reproduire: `just research-record-boards`
- Source: Recherche en faisceau (page de concept de ce projet) : construction meilleur-d'abord à largeur bornée — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/construct/beam-search.mdx
---
PRIOR ouvre l'[étude sur l'apprentissage à partir des bons plateaux](/fr/research/lab/experiments/raphael-anjou/learning/)
avec la forme la plus simple que l'idée puisse prendre : un comptage. La plupart
des bons plateaux de ce site sont trouvés en partant d'un plateau déjà correct
puis en l'améliorant. PRIOR pose une question plus difficile : peut-on construire
un plateau compétitif à partir d'une grille vide, sans aucun plateau où s'ancrer ?
L'astuce consiste à laisser la foule des bons plateaux passés guider discrètement
la construction sans en copier aucun en particulier, et cette guidance n'est rien
de plus qu'un décompte des positions où les pièces ont tendance à se placer.
## Fonctionnement
À partir de la bibliothèque des plateaux au bon score, PRIOR apprend une seule
chose toute simple : pour chaque position du plateau, la fréquence à laquelle
chaque pièce y apparaît. Cela donne une préférence douce, un prior, sur ce qui a
tendance à aller où.
Il construit ensuite par recherche en faisceau, en gardant simultanément en vie
de nombreux plateaux partiels qu'il étend case par case. Quand deux options
raccordent le même nombre d'arêtes, le prior tranche l'égalité en faveur de la
pièce la plus typique des bons plateaux à cet endroit. Une règle de diversité
empêche les nombreuses tentatives parallèles de converger vers le même chemin.
Aucun plateau n'est copié à l'unité ; la guidance est statistique.
> **[Figure]** Interactif : la carte de chaleur du prior positionnel — interactive: PriorDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
## Le plateau
> **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
En partant de zéro, PRIOR atteint le milieu des 450, et avec un prior plus
tranché construit à partir des tout meilleurs plateaux uniquement, il monte plus
haut. Suivi d'un raffinement local, il atteint 460, le plateau montré ici. Le
fait qu'une construction à partir de rien se rapproche autant des records, c'est
là tout le propos : la structure des bons plateaux est en partie apprenable, et
il n'est pas nécessaire d'en partir pour y arriver.
Ce n'est pas le meilleur score du projet (463), et le gain final s'appuie ici
sur une étape de raffinement, ce que l'étiquette du plateau signale. Mais en tant
que résultat sur table rase, c'est le plus solide du projet, et c'est la base sur
laquelle les constructeurs multi-signaux ultérieurs ont grandi.
## Méthode
Le prior est délibérément la chose la plus simple qui puisse marcher : un
comptage. Sur chaque plateau du corpus dont le score dépasse un seuil (440 pour
le prior de base), on cumule une matrice $256 \times 256$ $M[p][c]$, le nombre de
bons plateaux qui placent la pièce $p$ dans la case $c$. Normalisée par case,
c'est la préférence utilisée pour départager les égalités.
Trois affinements, chacun une variante du même décompte :
- **Sensible à la rotation.** On scinde chaque pièce selon ses quatre rotations :
un tenseur $1024 \times 256$ ($256 \times 4$ lignes). Le prior préfère désormais
non seulement la bonne pièce mais la bonne orientation, 262 144 entrées contre
les 65 536 de base.
- **Par famille de coins.** Les bons plateaux se répartissent en familles selon
leurs quatre pièces de coin. Construire un prior *distinct* à partir des seuls
plateaux d'une famille donne un signal que la matrice mise en commun gomme par
moyennage ; c'est ce qui a permis à la construction à partir de zéro d'atteindre
un 460 inédit plutôt que le bassin commun encombré.
- **Seuil plus tranché.** Reconstruire le prior à partir des tout meilleurs
plateaux uniquement (une coupure plus haute) relève le plafond de la
construction, au prix d'un signal plus mince et plus bruité.
La construction est une [recherche en faisceau](/fr/research/build/construct/beam-search/) :
on garde $W$ plateaux partiels, on les étend case par case, et quand des
candidats sont à égalité sur les arêtes raccordées, on laisse $M$ trancher ; une
règle de diversité maintient les $W$ faisceaux à l'écart les uns des autres. Le
460 obtenu ici mène une construction en faisceau à partir de zéro jusqu'au milieu
des 450, puis un court raffinement local jusqu'à 460.
**La nouveauté a été vérifiée, pas supposée.** Le plateau obtenu est comparé à
chaque plateau du palier 460 déjà connu, par permutation des coins et distance de
Hamming sur (pièce, position) ; une correspondance ne compte comme un nouveau
bassin que lorsque la famille de coins diffère ou que la distance de Hamming est
grande. Le plateau de PRIOR a passé ce test : c'est un bassin réellement distinct,
pas une redécouverte.
## Reproduire
`just research-record-boards` vérifie exactement le score du plateau 460 validé,
arête par arête, à partir de sa chaîne Bucas stockée, de sorte que le résultat
est vérifiable même si la recherche qui l'a trouvé n'est pas déterministe (son
gain final utilise un raffinement stochastique). Le plateau est l'artefact de
référence. La recherche qui l'a produit est le producteur en faisceau partagé,
avec la seule modification que décrit cette page : le prior positionnel appris qui
départage ses égalités. Ce prior est une matrice extraite d'un large corpus de
bons plateaux, raison pour laquelle l'exécution n'est pas reproduite ici à partir
de zéro.
## Questions ouvertes
Jusqu'où le prior peut-il se resserrer avant de surapprendre ? Construit à partir
d'une poignée de plateaux de tête seulement, le signal est fort mais mince. Un
prior distinct par famille de plateaux pourrait-il capturer une structure que le
prior combiné gomme par moyennage ? Et quelle part de l'écart final tient à la
construction plutôt qu'au raffinement qui la suit ?
## À lire aussi
- [Priors de corpus](https://eternity2.dev/fr/research/build/learning/corpus-priors/) — La façon la plus simple d'apprendre des bons plateaux : compter où chaque pièce tend à se placer, ou à quelle fréquence elle satisfait une demande rare, et se servir de ce décompte comme d'un léger départage en construction. Ce doit rester un départage ; dès qu'il entre dans l'objectif, il fait s'effondrer la recherche.
- [Apprendre à partir des grilles fortes](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/) — Une étude en cinq expériences d'une seule idée : plutôt que de chercher Eternity II à partir de zéro, exploiter la structure du corpus de grilles fortes déjà trouvées et la réinjecter dans une recherche. Un a priori de position, un vote de coup appris, une boussole de demande rare, un mineur d'anti-motifs et un décodage de record, du signal le plus simple au plus subtil, et le mur unique que les cinq atteignent.
- [KEYRING](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/keyring/) — Construire un plateau de zéro en classant chaque pièce suivante selon trois signaux appris de plateaux forts passés. A atteint 460 dans une famille de plateaux qu'aucune recherche antérieure n'avait percée.
- [GAUNTLET](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/gauntlet/) — Lancer la même recherche en faisceau selon neuf ordres de parcours différents, pour qu'elle atterrisse dans des régions distinctes au lieu de toujours converger vers la même. L'ordre en zigzag a trouvé un plateau 458 inédit.
- [Le vol de pièce, là où meurent les solveurs](https://eternity2.dev/fr/research/why/piece-theft/) — Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
- [Recherche en faisceau](https://eternity2.dev/fr/research/build/construct/beam-search/) — Maintenir en vie les K plaquettes partielles les plus prometteuses à la fois et les faire croître case par case. La recherche en faisceau est le moteur des constructeurs ex nihilo de ce projet, et une illustration limpide des raisons pour lesquelles la largeur seule s'enlise dans les profondeurs de l'intérieur.
- [PALIMPSEST](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/) — Lire chaque plateau fort pour repérer les habitudes qui, en silence, plafonnent un plateau, puis les briser. Cette expérience a produit le meilleur plateau du projet : 463 sur 480.
---
# REPLAY
> Reconstruire à l'identique les plateaux stricts à 460 de la communauté, et découvrir au passage le coup que les solveurs ordinaires ne savent pas jouer : payer deux désaccords sur une même case.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/replay/
- Mise à jour: 2026-07-21
- Sujets: backtracking, learning
- Source: Plateaux stricts à 460 de la communauté (chronologie des records) : les témoins que REPLAY reconstruit — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/records.mdx
---
REPLAY clôt l'[étude](/fr/research/lab/experiments/raphael-anjou/learning/) sur une
forme d'apprentissage différente. Chaque expérience qui l'a précédée extrayait une
*statistique* de l'ensemble du corpus ; REPLAY apprend d'un *seul* plateau, et il
apprend la chose qu'une statistique ne peut pas montrer : le coup exact qu'un record
a joué et que notre recherche ne savait pas faire. Les plateaux publics entièrement
indicés servant d'étalon à ce projet atteignent 460 (le record communautaire est
depuis passé à 464), mais la propre recherche à ruptures autorisées de ce projet
plafonnait à 457 ou 458, quoi qu'il arrive. REPLAY s'est donné pour but de reproduire
ces plateaux 460 à l'identique, pièce par pièce, afin d'apprendre ce qu'ils faisaient
que notre recherche ne savait pas faire. La réponse s'est révélée être un unique coup
resté inaperçu.
## Fonctionnement
Une recherche à ruptures autorisées ne laisse normalement une case porter qu'un seul
désaccord au moment où on la place. REPLAY assouplit cette règle pour en admettre deux
sur certaines cases, et réordonne le classement des placements candidats de sorte que
les coups réellement joués par un bon plateau connu passent devant ceux qui semblent
moins coûteux. Avec ces deux changements, elle peut suivre le chemin même qu'a emprunté
le plateau témoin.
Rejoués ainsi, les plateaux 460 de la communauté se reconstruisent à l'identique,
chaque pièce à sa place, et le score se vérifie. La reproduction est la preuve que
l'ingrédient manquant était bien réel.
> **[Figure]** Interactif : les cases à double rupture — interactive: DoubleBreakDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
> **[Figure]** Interactif : rejouer l'ordonnancement des ruptures — interactive: DoubleBreakLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
Les deux plateaux stricts à 460 de la communauté se rejouent exactement jusqu'à 460.
La découverte : chacun contient quatre ou cinq cases qui paient deux désaccords à la
fois. Une recherche qui n'autorise qu'un seul désaccord par case ne peut littéralement
pas atteindre ces plateaux, et c'est précisément pour cela que les runs antérieurs du
projet saturaient à 457-458. Autoriser la double rupture hisse l'échelle stricte
jusqu'à 460.
C'est une explication nette d'un plateau de longue date, et une mise en garde : une
règle d'apparence raisonnable (une rupture par case) barrait en silence l'accès aux
plateaux mêmes que nous poursuivions.
## Méthode
Le rejeu est une recherche en profondeur d'abord menée dans un mode délibérément
contraint.
- **Ordonnancement prior-sur-coût.** Un DFS ordinaire tolérant aux ruptures classe les
placements candidats par coût de désaccord immédiat, le moins cher d'abord. REPLAY
inverse la priorité en *prior-sur-coût* : les candidats réellement utilisés par le
plateau témoin passent devant ceux qui semblent moins coûteux, si bien que la
recherche est attirée le long du bon chemin connu au lieu de s'en écarter. C'est le
drapeau `--prior-over-cost` piloté par l'ordonnancement propre au plateau témoin.
- **Queue exacte.** Les 14 dernières cases sont résolues exactement (`--exact-tail 14`)
plutôt qu'heuristiquement, si bien que la finale que les runs ordinaires bâclent se
referme de façon déterministe.
- **Le relâchement qui a compté.** Le budget de désaccords par case passe de un à deux.
C'est ce seul changement qui rend les plateaux témoins accessibles.
Menés sur un cadre 460 fixe, 8 threads, une cadence de redémarrage de 5 secondes et un
budget par run, les deux témoins stricts à 460 de la communauté se reconstruisent pièce
par pièce et le score se vérifie : la reproduction *est* la preuve que l'ingrédient
manquant était la double rupture.
**Le constat.** Chaque témoin contient quatre ou cinq cases qui paient deux désaccords
à la fois. Une recherche plafonnée à une rupture par case ne peut pas représenter ces
plateaux, et c'est exactement pour cela que les runs antérieurs du projet, tolérants aux
ruptures, saturaient à 457-458. C'est un résultat de complétude de recherche déguisé en
tentative de record : le mur était dans le jeu de coups, non dans le calcul.
## Reproduire
Celle-ci est initialisée par graine et plus proche du déterminisme que les
constructeurs stochastiques : le rejeu DFS à partir d'un cadre fixe et d'un
ordonnancement de témoin reconstruit les plateaux 460 de façon fiable. Les cibles qu'il
reconstitue sont les [records](/fr/research/records/) stricts à 460 propres à la communauté,
si bien que les plateaux eux-mêmes figurent dans la chronologie des records ; ce que
cette expérience ajoute, c'est le rejeu qui les reconstruit. Le rejeu réclame deux
entrées au-delà du puzzle, un cadre de bordure et le plateau témoin de la communauté
qu'il reconstitue ; un répertoire d'appui exécutable livrant les deux est prévu.
## Questions ouvertes
Autoriser deux ruptures par case ouvre-t-il une voie vers 461 et au-delà, ou seulement
vers les 460 connus ? Existe-t-il des plateaux nécessitant une triple rupture ? Et
peut-on prédire les cases à double rupture à partir d'un plateau partiel plutôt que de
les découvrir par rejeu ?
## À lire aussi
- [Décoder les records](https://eternity2.dev/fr/research/build/learning/decoding-records/) — La façon la plus littérale d'apprendre d'une grille forte : la reconstruire à l'identique, pièce par pièce, jusqu'à ce que votre recherche sache la reproduire. Ce que la reconstruction vous force à ajouter est l'ingrédient qui manquait à votre recherche, et la reproduction en est la preuve.
- [Apprendre à partir des grilles fortes](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/) — Une étude en cinq expériences d'une seule idée : plutôt que de chercher Eternity II à partir de zéro, exploiter la structure du corpus de grilles fortes déjà trouvées et la réinjecter dans une recherche. Un a priori de position, un vote de coup appris, une boussole de demande rare, un mineur d'anti-motifs et un décodage de record, du signal le plus simple au plus subtil, et le mur unique que les cinq atteignent.
- [LADDER](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/ladder/) — Lancer des centaines de courtes recherches bon marché sur le plateau, ne garder que les départs les plus profonds, et faire monter les survivants à travers des tours de plus en plus longs.
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [Apprentissage des no-goods : se souvenir de ses échecs](https://eternity2.dev/fr/research/build/reduce/nogood-learning/) — Un sous-arbre voué à l'échec est un théorème : cet état partiel ne pourra jamais s'étendre. Mémorisez-le et n'y revenez plus jamais. La communauté a essayé les deux variantes : tables de transposition à la manière des échecs sur la frontière de recherche, et contraintes extraites du puzzle lui-même. Le bilan complet de ce que la mémoire achète à l'échelle d'E2, et les petits plateaux où elle paie vraiment.
- [PALIMPSEST](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/) — Lire chaque plateau fort pour repérer les habitudes qui, en silence, plafonnent un plateau, puis les briser. Cette expérience a produit le meilleur plateau du projet : 463 sur 480.
---
# Un élagage correct par comptage des couleurs pour la recherche tolérante aux ruptures
> Suivre, couleur par couleur, l'offre de demi-arêtes face à la demande du front dans un DFS à budget de ruptures, et élaguer dès que le déficit ou sa parité dépasse les ruptures restantes. Correct par construction ; le gain se compose avec la profondeur.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/ledger/
- Mise à jour: 2026-07-22
- Sujets: backtracking, search-space, structure
- Reproduire: `just research-ledger-prune`
- Source: Le topic de reproduction ledger-prune : code, plan et résultats committés — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/ledger-prune
---
La recherche de hauts scores sur Eternity II tourne avec une tolérance aux
ruptures : le DFS peut poser une pièce discordante tant que le nombre total de
ruptures facturées reste dans un budget. Dans ce cadre, presque aucun élagage
classique n'est correct, car le budget est une ressource globale ; une branche
qui semble localement morte peut être sauvée en dépensant une rupture tout à
fait ailleurs. Je me suis demandé si un test de comptage purement global
pouvait élaguer malgré tout, sans jamais couper une complétion qui tient dans
le budget. C'est possible : zéro déclenchement erroné sur tous les rejeux, et
des réductions de nœuds qui se composent avec la profondeur, même si leur
ampleur dépend du moteur.
## Fonctionnement
À chaque nœud, la recherche tient un registre, couleur par couleur : l'offre de
demi-arêtes que proposent encore les pièces inutilisées (les quatre côtés de
chacune), et la demande du front (côtés exposés des cases posées face aux cases
vides, plus le bord gris que le cadre doit encore). Deux conditions nécessaires
en découlent pour toute complétion qui respecte le budget de ruptures restant
r :
- **Déficit.** Le manque total, sommé sur les couleurs comme max(0, demande
moins offre), ne peut jamais dépasser r. C'est la forme consciente du budget
de l'échec « plus de couleur c » qu'un DFS nu ne découvre que case par case.
- **Parité.** Le nombre de couleurs dont l'écart offre moins demande est impair
ne peut jamais dépasser 2r, plus une place par jonction d'indice non
facturée. Un placement parfaitement apparié déplace chaque balance de couleur
d'une quantité paire ; la parité ne bouge donc qu'à une rupture facturée (qui
bascule exactement deux couleurs) ou à une jonction d'indice non facturée (au
plus une).
Si l'une des deux conditions échoue, aucune complétion dans le budget n'existe
sous le nœud et tout le sous-arbre est sauté. Les deux se prouvent par le même
argument d'invariance, ce qui rend l'élagage correct et non heuristique : il
n'a jamais besoin de deviner où les ruptures seront dépensées.
## Ce qui a été mesuré
Trois sondes, toutes committées dans le topic de reproduction.
**La porte de correction.** Rejouer la queue parfaite connue d'un tableau à
marge nulle ; la vraie queue n'ayant besoin d'aucune rupture, tout
déclenchement est un bug. Huit tableaux générés, 257 profondeurs chacun : zéro
déclenchement. La version d'origine de cette étude, dans mon moteur de chasse
aux records, a passé la même porte sur quatre tableaux à haut score (251 cases
jugées chacun), zéro déclenchement aussi.
**La grille A/B.** Épuiser deux fois un suffixe fixé d'un tableau généré
résolu, élagage coupé puis actif, en comptant toutes les complétions dans le
budget. Les deux bras doivent trouver les mêmes complétions ; ce fut le cas
dans les 144 paires non censurées. Les 96 cellules de la grille (suffixes de 20
à 32 cases, budgets 1 à 3, 8 graines) montrent un ratio de nœuds au-dessus
de 1 : minimum 1,48x, médianes de 1,8x à 4,1x. La parité est partout le
déclencheur dominant.
**Les lignes de certificat.** Les trois tableaux 464 communautaires (retrouvés
via les URL committées de [l'étude design-recipe](/fr/research/why/design-recipe/) ;
le palmarès communautaire vit sur la [page des records](/fr/research/records/)) ont
été retournés de 180 degrés et leurs queues épuisées à budgets sans marge, le
protocole de l'étude d'origine. Les tableaux s'identifient par leur empreinte
de ruptures de suffixe ; l'un lit (2, 5, 6, 7) contre le (2, 5, 6, 8)
d'origine, trois profondeurs exactes et une décalée d'une seule rupture par
différence de convention de facturation. Ce tableau est le tableau 1 de l'étude
d'origine.
## Le résultat
| Affirmation (mesure d'origine) | Mesuré ici | Statut |
|---|---|---|
| Zéro déclenchement erroné en rejouant les vraies queues à marge nulle | 0 déclenchement sur 8 tableaux x 257 profondeurs | reproduit |
| L'élagage ne change jamais la réponse | complétions identiques dans les 144 paires A/B non censurées | reproduit |
| Ratio de nœuds au-dessus de 1 à petits budgets | les 96 paires de la grille au-dessus de 1 (min 1,48x) | reproduit |
| Le ratio se compose avec la profondeur (1,5x, 140x, 995x, 4 330x) | 1,7x, 19,4x, 45,3x ; ligne la plus profonde censurée | forme reproduite, ampleur liée au moteur |
| Nul à grand budget (~0,1 pour cent de déclenchements) | la sonde est restée dans le régime actif (76 à 82 pour cent) | non testé ici |
Sur le tableau 464 identifié, à budgets identiques à l'origine (r = 5 et r = 6
sur les lignes profondes), l'épuisement a trouvé exactement une complétion à
chaque profondeur non censurée, la forme de certificat que l'origine rapporte,
et le ratio se compose :
> **[Figure]** Lignes de certificat sur le tableau 464 (retourné 180°, budgets sans marge) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export.
Un multiplicateur qui grandit avec la profondeur est la signature d'une
réduction du facteur de branchement, la seule espèce d'accélération qui survit
au passage à l'échelle (l'argument est déroulé dans
[l'élagage bat la vitesse](/fr/research/why/prune-vs-speed/)).
## Portée et limites
La correction est le titre, et elle est indépendante du moteur ; les ampleurs
ne le sont pas. Le moteur d'origine jugeait le registre par candidat, sur une
mise à jour incrémentale, dans une recherche à godets limitée à une discordance
par case, et mesurait 140x à 4 330x sur les mêmes lignes. Ce portage juge une
fois par nœud sur un registre recalculé de zéro, facture les ruptures par arête
sans plafond par case, et atteint 45,3x avant que le plafond de 300 secondes ne
censure la ligne la plus profonde. Porter le registre incrémental par candidat
est l'étape suivante nommée ; d'ici là, le chiffre de 4 330x est attribué au
moteur d'origine, pas confirmé par celui-ci.
Deux choses de plus ne suivent pas. Ce n'est pas une revendication de score :
LEDGER élague un DFS à budget de ruptures existant (la famille de moteurs
derrière des recherches comme
[celle de Joshua Blackwood](/fr/research/lab/experiments/joshua-blackwood/solver/)) ;
il ne trouve rien tout seul. Et il ne paie que dans le régime petit budget et
suffixe profond : l'origine mesurait environ 0,1 pour cent de déclenchements
sous un budget généreux à l'échelle du tableau, où la tenue du registre est une
perte sèche. Ma sonde hors régime n'a même pas pu atteindre ce régime
silencieux sur un suffixe court (un budget épuisable s'assèche près des
feuilles, là où vivent la plupart des nœuds) ; ce nul reste donc non testé ici.
## À lire aussi
- [Pourquoi un ordinateur plus rapide ne change rien](https://eternity2.dev/fr/research/why/prune-vs-speed/) — L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
- [Arguments de parité](https://eternity2.dev/fr/research/build/analysis/parity-arguments/) — Comptez n'importe quoi sur un plateau à appariement d'arêtes deux fois, une fois de chaque côté, et les totaux doivent coïncider, livrant des preuves d'impossibilité au prix d'un seul passage. L'histoire du 479 en montre à la fois la puissance et le piège : un argument de parité limpide, vrai pour tout coup intérieur, mis en défaut par les soixante arêtes de bordure que personne ne comptabilise.
- [Conçu pour être insoluble : la recette](https://eternity2.dev/fr/research/why/design-recipe/) — Eternity II applique une recette pour obtenir le casse-tête à raccords de bords le plus difficile possible : forme compacte, aucune pièce symétrique ni dupliquée, palettes cloisonnées, fréquences plates, une seule solution attendue. La communauté a rétro-conçu chaque ingrédient dès l'année du lancement.
- [Le solveur de Blackwood, décodé et exécuté ici](https://eternity2.dev/fr/research/lab/experiments/joshua-blackwood/solver/) — Le backtracker record de Joshua Blackwood, décodé grâce aux notes de Jef Bucas (un échéancier de quotas de couleurs et une tolérance aux mismatchs en fin de partie, réglés presque optimalement), puis construit et exécuté sur mon M1 : tel que publié, il file jusqu'à 248 des 256 pièces en ignorant les indices ; épinglez les cinq indices officiels et le même moteur cale autour de 45.
---
# Meet in the middle
> Des expériences exactes de fin de partie qui se rejoignent au milieu : énumérer une région depuis deux extrémités et raccorder sur la couture, pour trouver la vraie meilleure complétion avec une preuve plutôt que la meilleure conjecture d'une heuristique. Elles mesurent exactement une petite région au lieu de courir après le score du plateau entier.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/
- Mise à jour: 2026-07-22
---
La recherche heuristique conjecture ; elle ne sait jamais qu'elle tient la
meilleure fin possible. Les expériences réunies ici prennent le parti inverse
pour une petite région : l'énumérer depuis deux extrémités, raccorder les
moitiés partout où les couleurs de leur couture concordent et où leurs
ensembles de pièces ne se recouvrent pas, et repartir avec la meilleure
complétion *exacte*, assortie de la preuve que rien ne fait mieux. C'est le
classique échange
[meet-in-the-middle](/fr/research/build/exact/meet-in-the-middle/) de temps contre
espace, pointé sur la fin de partie du puzzle.
Ce ne sont pas des tentatives sur le score. Elles répondent à une autre
question que les
[pipelines de combinaison](/fr/research/lab/experiments/raphael-anjou/pipelines/)
et les [études](/fr/research/lab/experiments/raphael-anjou/) de recherche : non pas
*jusqu'où une heuristique peut grimper*, mais *quelle est la vraie meilleure
fin de cette région, et à partir de quand les méthodes exactes cessent d'être
abordables*. Une réponse exacte sur une petite région vaut ici davantage qu'un
nouveau presque-succès sur le plateau entier.
La première et pour l'instant seule expérience de cette classe est
[BANDSAW](/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/).
Elle a résolu exactement une bande de rangées sur un banc d'essai 10×10,
prouvé à partir d'où le budget de mésappariements cesse d'être abordable, et
laissé en sous-produit un plateau à 437 sans cadre (compté en arêtes
appariées), la seule page de ce carnet à la rigueur prouvée. La section porte le
nom de la technique plutôt que celui de l'unique page, parce que d'autres idées
exactes de fin de partie ont vocation à la rejoindre à mesure qu'elles
arrivent.
## Pages de cette section
- [BANDSAW](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/) — Résoudre exactement une bande de rangées en se rejoignant au milieu, pour trouver la vraie meilleure fin et mesurer jusqu'où décider une fin de partie.
## À lire aussi
- [BANDSAW](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/) — Résoudre exactement une bande de rangées en se rejoignant au milieu, pour trouver la vraie meilleure fin et mesurer jusqu'où décider une fin de partie.
---
# BANDSAW
> Résoudre exactement une bande de rangées en se rejoignant au milieu, pour trouver la vraie meilleure fin et mesurer jusqu'où décider une fin de partie.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/
- Mise à jour: 2026-07-21
- Sujets: exact-methods
- Source: Rencontre au milieu (la page conceptuelle de ce projet) : la technique des deux moitiés et de la jointure — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/exact/meet-in-the-middle.mdx
---
La recherche heuristique devine ; elle ne sait jamais qu'elle tient la
meilleure fin possible. BANDSAW mène l'expérience inverse : pour une bande de
rangées près du bas, il calcule la meilleure complétion exacte, avec la preuve
que rien ne marque davantage. Le but n'est pas la vitesse mais la certitude, et
cette certitude sert aussi de règle pour mesurer la difficulté réelle de la fin
de partie.
## Fonctionnement
On coupe la bande en une moitié haute et une moitié basse. On énumère toutes
les façons de remplir la moitié haute jusqu'à un petit budget de désaccords,
indexées par deux éléments : les pièces employées et la rangée de couleurs
laissée pendante à la couture. On énumère la moitié basse de la même manière,
mais seulement à partir des pièces que la moitié haute n'a pas utilisées. Puis
on joint les deux moitiés partout où leurs couleurs de couture concordent et où
leurs jeux de pièces ne se recouvrent pas. Cette jointure au milieu trouve la
meilleure complétion exacte sans parcourir tout l'arbre.
Des tables de bornes inférieures exactes, calculées en remontant colonne par
colonne, lui permettent d'élaguer les branches qui ne peuvent déjà plus battre
le budget, et il relève le budget pas à pas jusqu'à ce qu'une passe ne trouve
plus rien de nouveau, ce qui prouve le meilleur score pour cette bande.
> **[Figure]** Interactif : l'arbre de fin de partie par rencontre au milieu — interactive: MeetInMiddleDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
Sur un banc d'essai 10×10, BANDSAW règle la fin de partie de façon exacte et
fixe le budget là où l'exactitude cesse d'être abordable : l'arbre de recherche
croît d'environ un facteur vingt par désaccord supplémentaire, des deux côtés,
si bien que la rencontre au milieu cesse d'être rentable à la taille pleine du
plateau. Ce résultat négatif est la partie utile : il indique précisément où
les méthodes exactes s'épuisent et où les heuristiques doivent prendre le
relais. Les pièces exactes qui ont survécu - les tables de bornes inférieures
de suffixe et le branch-and-bound élagué - sont devenues des instruments
réutilisables. Un plateau sans cadre marquant 437 est sorti de la même
mécanique.
## Méthode
La jointure est l'idée ; l'élagage est ce qui la rend abordable.
- **Rencontre au milieu.** On coupe la bande en une moitié haute et une moitié
basse. On énumère chaque remplissage de la moitié haute jusqu'à un budget de
désaccords, indexé par (jeu de pièces utilisé, rangée de couleurs de couture).
On énumère la moitié basse de la même façon, en ne puisant que dans les pièces
laissées par la moitié haute. On joint les deux moitiés partout où leurs
couleurs de couture concordent *et* où leurs jeux de pièces sont disjoints.
Cette jointure trouve la meilleure complétion exacte sans jamais parcourir
l'arbre entier : le classique compromis temps-contre-espace de la
[rencontre au milieu](/fr/research/build/exact/meet-in-the-middle/).
- **Bornes inférieures de suffixe.** Remonter colonne par colonne construit des
tables de bornes inférieures exactes, si bien qu'un partiel qui ne peut déjà
plus battre le budget courant est élagué avant d'être prolongé.
- **Cliquet de budget.** On relève le budget de désaccords d'un cran à la fois
et on résout à nouveau ; quand une passe ne trouve rien de meilleur, le
meilleur précédent est *prouvé* optimal pour cette bande. Cette preuve est la
raison pour laquelle cette page est étiquetée **proven**, et non mesurée : le
résultat est un certificat, pas un échantillon.
Le plafond mesuré : chaque moitié croît d'environ un facteur 20 par unité de
budget supplémentaire, si bien qu'à la taille pleine du plateau 16×16 la table
de la moitié haute ne tient plus ; c'est la mémoire, pas le temps, qui est le
mur. Ce résultat négatif est le livrable : il fixe précisément où les méthodes
exactes s'épuisent et où les heuristiques doivent prendre le relais. Le plateau
437 sans cadre est tombé de la même mécanique.
## Reproduire
Déterministe (`kind: exact`) : la résolution par rencontre au milieu et sa
preuve d'optimalité se reproduisent à l'octet près pour une bande donnée, et le
plateau 437 est vérifiable dans le visualiseur. L'énumérateur MITM et les tables
de bornes de suffixe sont versionnés avec le code de recherche.
## Questions ouvertes
Les tables de bornes inférieures peuvent-elles passer à l'échelle de la fin de
partie 16×16 complète, ou l'espace d'états de la couture croît-il trop ?
À quelle taille de bande la mémoire, plutôt que le temps, devient-elle la
limite ? Et les rares cas où la jointure du milieu se déclenche effectivement
peuvent-ils être repérés à l'avance et terminés de façon exacte ?
## À lire aussi
- [STAGED](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/staged/) — Construire tout le plateau depuis zéro, sans cadre pré-posé, par étapes, en laissant la bordure émerger en dernier des pièces restantes.
- [L'entropie et la loi d'aire](https://eternity2.dev/fr/research/why/entropy-area-law/) — Eternity II a deux règles : les bords doivent coïncider, et chaque pièce ne sert qu'une fois. La première est généreuse. Toute la difficulté tient dans la seconde.
- [Rendez-vous au milieu](https://eternity2.dev/fr/research/build/exact/meet-in-the-middle/) — Énumérer deux moitiés d'un problème et les recoller sur une interface partagée, en échangeant de la mémoire contre un exposant divisé par deux. L'astuce classique de Horowitz–Sahni, ce qu'elle donne sur des bandes du plateau, et ce que l'expérience BANDSAW de ce projet a mesuré, y compris la méthode unilatérale qui l'a battue.
---
# Pipelines de combinaison
> Sept expériences de recherche nommées qui visent le score, chacune un pipeline plutôt qu'un algorithme unique : elle construit un plateau avec un moteur, puis le relève ou l'achève avec un autre. À leurs côtés, deux constats décortiquent la machinerie sur laquelle les pipelines s'appuient. Chaque page consigne son idée, son plateau et les questions qu'elle laisse ouvertes.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/
- Mise à jour: 2026-07-22
---
Ce groupe rassemble sept expériences de pipeline avec score et deux constats.
Un *pipeline* construit un plateau avec un moteur, puis le relève ou l'achève
avec un autre ; l'intérêt tient autant à la *combinaison*, à la répartition du
travail entre construction, réparation et finition exacte, qu'à l'une ou
l'autre des étapes. Les deux constats, l'étude de largeur de faisceau et le
cadre fluide, n'ont pas de score propre : ils décortiquent la machinerie sur
laquelle cette famille s'appuie, le producteur en faisceau pour l'un, la
bordure gelée de CLOISTER pour l'autre. Les cartes ci-dessous distinguent les
deux genres. Ce chaînage de moteurs est aussi ce qui sépare ce groupe des
quatre études qui décortiquent chacune un paradigme unique : l'
[étude DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/), l'
[étude de réparation](/fr/research/lab/experiments/raphael-anjou/repair-study/),
l'[apprentissage sur plateaux forts](/fr/research/lab/experiments/raphael-anjou/learning/)
et l'[étude des indices](/fr/research/lab/experiments/raphael-anjou/hint-study/).
Elles partagent les [moteurs](/fr/research/lab/experiments/raphael-anjou/engines/) ;
ce qui diffère, c'est la façon dont chacune les compose et les pilote : ce
qu'elle amorce, ce qu'elle interdit, ce qu'elle démolit et reconstruit. La
section méthode de chaque page en parcourt les étapes dans l'ordre. Plusieurs des
constructeurs partant de zéro s'appuient sur le producteur en faisceau, et deux
sur la boucle de réparation ALNS, des moteurs qui n'ont pas encore leur propre
fiche ici (voir la [page des moteurs](/fr/research/lab/experiments/raphael-anjou/engines/)) ;
lorsqu'un pipeline le fait, sa page le dit clairement plutôt que de renvoyer vers
une page qui n'existe pas encore.
Elles sont classées par ce qu'elles ont appris, non par leur score. Un pipeline
qui a terminé plus bas mais a expliqué pourquoi vaut davantage ici qu'un pipeline
qui a grappillé un point sans savoir dire comment.
## Pages de cette section
- [GAUNTLET](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/gauntlet/) — Lancer la même recherche en faisceau selon neuf ordres de parcours différents, pour qu'elle atterrisse dans des régions distinctes au lieu de toujours converger vers la même. L'ordre en zigzag a trouvé un plateau 458 inédit.
- [CLOISTER](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fixer une bordure parfaite, puis explorer l'intérieur en traitant les arêtes de la bordure comme des contraintes dures dès la toute première case.
- [CAS](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/cas/) — Poser d'abord une bordure parfaite, puis résoudre le plateau vers l'intérieur, anneau par anneau, chaque anneau comme un problème d'affectation sur les pièces restantes.
- [MIDDEN](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/midden/) — Décider à l'avance non pas quand un plateau peut casser, mais où : confiner chaque désaccord à une forme de cellules choisie, et chercher la meilleure forme.
- [Le cadre fluide](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/fluid-frame/) — Une bordure parfaite de 60 pièces n'est pas un objet rigide. Chaque cadre entièrement apparié admet exactement 45 échanges libres à coût de bordure nul ; un tiers des cadres parfaits ne peuvent même pas démarrer l'intérieur, et un seul échange libre ranime chacun d'eux.
- [LADDER](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/ladder/) — Lancer des centaines de courtes recherches bon marché sur le plateau, ne garder que les départs les plus profonds, et faire monter les survivants à travers des tours de plus en plus longs.
- [Rendre un producteur beam 10x meilleur : la réponse est la largeur](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/beam-width/) — Une revue vérifiée plus des mesures appariées : aucune astuce par nœud ne bat la largeur brute du faisceau à temps de calcul égal. Les deux seuls additifs qui survivent sont la randomisation des clés de troncature exactement à égalité (gratuite) et le rééchantillonnage SMC des survivants (petit mais significatif).
- [MOSAIC](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/mosaic/) — Découper le plateau en petits blocs, résoudre chacun jusqu'à l'optimum prouvé, puis les recoller en payant les coutures au lieu de les interdire. En partant de zéro, sans record à recopier, la méthode atteint 448.
- [STAGED](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/staged/) — Construire tout le plateau depuis zéro, sans cadre pré-posé, par étapes, en laissant la bordure émerger en dernier des pièces restantes.
---
# Rendre un producteur beam 10x meilleur : la réponse est la largeur
> Une revue vérifiée plus des mesures appariées : aucune astuce par nœud ne bat la largeur brute du faisceau à temps de calcul égal. Les deux seuls additifs qui survivent sont la randomisation des clés de troncature exactement à égalité (gratuite) et le rééchantillonnage SMC des survivants (petit mais significatif).
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/beam-width/
- Mise à jour: 2026-07-22
- Sujets: construction, speed, search-space
- Reproduire: `just research-beam-width-smc`
- Source: Zhang, Complete Anytime Beam Search (AAAI-98) — https://cdn.aaai.org/AAAI/1998/AAAI98-060.pdf
- Source: Passage à l'échelle de l'inférence par filtre particulaire (2025) — https://arxiv.org/html/2502.01618v3
- Source: Pilotage par Monte-Carlo séquentiel — https://arxiv.org/pdf/2306.03081
---
Je cherchais le levier qui rendrait un constructeur à large faisceau dix fois
meilleur par unité de calcul : un score par nœud plus malin, un oracle de
complétabilité, une règle de dominance, n'importe quoi. Après une revue de la
littérature et une campagne de mesures A/B appariées, la réponse est
décevante et utile à la fois : le levier, c'est la largeur brute. Tout ce qui
est astucieux perd face à un faisceau simplement plus large à temps égal, avec
exactement deux exceptions bon marché, toutes deux des changements de la règle
de survie, pas du score des nœuds.
## Ce qui a été mesuré
Le banc d'essai est une échelle d'instances N×N plantées et résolubles,
construites avec le générateur du kit du projet : plateaux cadrés avec
l'équilibre de couleurs réel, un optimum connu de 2N(N−1) arêtes intérieures
appariées, et 5 cases de la solution épinglées comme indices, à l'image des
indices officiels. Un beam par couches remplit le plateau en ordre
ligne par ligne, et trois règles de survie s'affrontent à largeur et temps
fixés : troncature top-k déterministe (plain), top-k avec départage aléatoire
des clés exactement à égalité, et rééchantillonnage SMC, où les survivants
sont tirés proportionnellement à un softmax de leur score, façon filtre
particulaire. Chaque plateau fini est re-noté par le scoreur canonique qui
exclut le pourtour ; aucun auto-rapport du solveur n'est cru sur parole.
Deux disciplines comptent ici. D'abord, toutes les comparaisons sont
appariées : les deux bras voient la même instance et la même graine, et les
statistiques sont un t apparié et un Wilcoxon sur les deltas par graine.
Ensuite, la taille des barreaux est plafonnée à N=12, car à N=14 la
distribution des scores est fortement bimodale et la variance de graine écrase
la variance de mécanisme ; une comparaison à quelques graines y est du bruit.
L'effet de la dureté des instances sur les scores mesurés est un sujet en soi ;
voir [la dureté d'une instance](/fr/research/why/how-hard-is-this-instance/).
## Le résultat
La largeur est le levier dominant, et de loin. Sur le banc plus dur de l'étude
d'origine, le score moyen sur l'optimum monte de façon monotone de 0,210 à la
largeur 32 jusqu'à 0,346 (largeur 128), 0,527 (largeur 512) et 0,743 (largeur
2048) à budget fixe de 3 secondes. Les alternatives coûteuses perdent à temps
égal dans cette même étude : un oracle de complétabilité par couplage de Hall
atteint 0,441 à largeur 64 là où un faisceau plain, avec les mêmes 10
secondes, atteint 0,815 à largeur 8192, et une fusion par dominance de type
diagramme de décision fait chuter le score de 0,679 à 0,657. Leur coût par
nœud croît avec la taille du plateau exactement là où la profondeur est la
plus rare : le temps qu'ils brûlent achète moins que la largeur qu'il aurait
pu payer.
La reproduction versionnée confirme chaque signe sur le banc du kit :
> **[Figure]** Attendu (banc source) vs mesuré (banc du kit) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export.
Les deux additifs de la règle de survie sont significatifs chacun de leur
côté. Randomiser les clés de troncature exactement à égalité ne coûte rien et
gagne +2,06 arêtes à largeur 128. Le rééchantillonnage SMC gagne +1,75 arête à
N=10 (t = 3,30) et +1,92 à N=12 (t = 5,41), avec des comptes de nœuds
identiques dans les deux bras : le gain n'est pas du calcul en plus, mais un
autre choix de partiels survivants. Un front rééchantillonné reste divers et
vit plus profond avant de mourir, là où un front top-k déterministe peut
s'étouffer tôt sur des survivants quasi identiques. La température a dû être
balayée : T = 1,0 est catastrophique (17 à 29 arêtes perdues, chaque graine
perd), et le gain vit sur un plateau autour de T dans [0,1, 0,2]. Le meilleur
plateau de la campagne, un plateau SMC à N=12 qui marque
[237 sur 264](https://eternity2.dev/viewer?puzzle=smc_n12_c22_s34&puzzle_size=12&board_edges=adcaacpdafjcacofafqcadmfaeldabmeaetbacpeabmcaadbcmeaplimjunloswuquismgtulmngmmmmtqhmpwwqmjrwdabjejbaipwjnqopwjsqiiojtskinqusmsoqhmgswukmrtuubadtblbawkolomjksplmolipknulunwnoopngrgokhvrughhdaegbpdaorlpjtwrltntisutukjswstkpvisgltvvtklhwsteafwdlbaltqlwvjhnivouspijumstrnuiwigtwvikkwwsjvkfaejbsbaqjgsjrqjvltrpgqlmmignthmitvtvpntwrhqvkhreabkbgcagpogqhpptvshqwjviwvwhuiovgrunnnghhjnhrohbafrcheajrqhpqkrshiqupnhvkopirhkrklrnutijoouovrofaevekcaqvnkkniviggnnuopqjuuhgqjvlggtsrloqhsrvpmeafvcmfanujqklquglkloitlgvkinsnvgqjsrlpkhomsprqofabrfeaakdaewdadifadgdafweadscaehcacpfacmdafrcadbaac&hints=67.0-62.1-7.2-19.0-112.0),
se vérifie arête par arête dans le viewer.
## Ce qui ne suit pas
C'est un résultat sur des instances d'échelle, pas sur le 16×16 canonique.
Que le gain SMC se transfère à un vrai producteur 16×16, et à la qualité du
vivier qu'il alimente en aval, reste explicitement ouvert ; aucun de ces
chiffres n'est une revendication de record, d'aucune sorte (l'état des scores
qui comptent vit sur la [page des records](/fr/research/records/)).
Trois réserves mesurées bornent encore le résultat. Les instances du kit sont
nettement plus faciles que le banc source (ratios de score de 0,82 à 0,88
contre 0,21 à 0,74), ce qui comprime la marge au-dessus du beam plain : le
gain SMC atterrit ici vers +1 % relatif contre +6 % là-bas, même signe,
significativité plus forte. Le coût par nœud de ce portage est plus élevé que
celui du moteur source, donc la loi de largeur est rapportée à saturation
(plafond de 12 secondes, chaque passe se termine) plutôt que dans le cadre à
temps égal de la source ; les A/B de règle de survie n'en souffrent pas,
puisque les deux bras développent par construction les mêmes nœuds à largeur
fixée. Et le résultat sur les égalités n'autorise qu'une chose : randomiser
les clés *exactement* à égalité. Élargir la fenêtre de tolérance du score est
un autre geste, désastreux sur le vrai producteur 16×16 dans l'étude source
(450 tombe à 290 à tolérance 2). Randomisez les égalités ; n'élargissez jamais
la fenêtre.
## À lire aussi
- [Recherche en faisceau](https://eternity2.dev/fr/research/build/construct/beam-search/) — Maintenir en vie les K plaquettes partielles les plus prometteuses à la fois et les faire croître case par case. La recherche en faisceau est le moteur des constructeurs ex nihilo de ce projet, et une illustration limpide des raisons pour lesquelles la largeur seule s'enlise dans les profondeurs de l'intérieur.
- [Benchmark mono-cœur](https://eternity2.dev/fr/research/lab/experiments/single-core-benchmark/) — Quinze solveurs, les nôtres et nos implémentations des deux backtrackers record de la communauté, chacun exécuté une fois sur dix variantes à coins épinglés du casse-tête officiel, un seul cœur, 60 secondes par exécution. Le constat : le nombre de nœuds n'est pas le score.
- [Cette instance est-elle NP-complète, et comment l'encoder ?](https://eternity2.dev/fr/research/why/how-hard-is-this-instance/) — L'appariement de bords est NP-complet en tant que famille, mais cela ne dit rien d'un plateau 16×16 fixé : une instance isolée est une constante, pas un problème. Ce qui est vrai, c'est la dureté au pire cas de la famille et la dureté empirique de cette instance, et comment écrire le puzzle pour un solveur SAT, de couverture exacte ou de PLNE, avec de petits croquis détaillés. Une mesure sur plateaux plantés chiffre le choix de la formulation : une falaise de résolubilité qu'un paradigme de recherche heurte et qu'un autre franchit, et qui bouge avec le nombre de couleurs.
- [LADDER](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/ladder/) — Lancer des centaines de courtes recherches bon marché sur le plateau, ne garder que les départs les plus profonds, et faire monter les survivants à travers des tours de plus en plus longs.
---
# CAS
> Poser d'abord une bordure parfaite, puis résoudre le plateau vers l'intérieur, anneau par anneau, chaque anneau comme un problème d'affectation sur les pièces restantes.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/cas/
- Mise à jour: 2026-07-22
- Sujets: construction, local-search
- Reproduire: `just research-cas-annular`
- Source: Sujet de reproduction (ce projet) : plan archivé, crate de calcul et résultats par cadre derrière chaque nombre de cette page — https://github.com/raphael-anjou/eternity2/blob/main/research/topics/cas-annular/article.md
---
CAS (concentric annular solving, résolution annulaire concentrique)
construit le plateau comme pousse un oignon : on pose une bordure parfaite,
puis on résout vers l'intérieur, anneau par anneau, jusqu'à ce que les
quatre cases centrales ferment le plateau. La question posée : cet ordre de
l'extérieur vers l'intérieur peut-il être un chemin vers les records ? La
réponse est un non net doublé d'un oui utile : depuis n'importe quel cadre
parfait, le pipeline plafonne dans une bande étroite de 429 à 437, et depuis
ce même état de départ il bat une poursuite par destruction-réparation sur
chacun des cadres, sans exception.
## Fonctionnement
Le plateau 16×16 se décompose en 8 anneaux concentriques de 60, 52, 44, 36,
28, 20, 12 et 4 cases. CAS fixe d'abord l'anneau le plus externe comme cadre
parfait 60/60 : les 60 cases de bordure remplies avec des pièces de bordure,
chaque arête du pourtour grise, et les 60 adjacences internes à l'anneau
appariées. Il résout ensuite chaque anneau interne à son tour comme un
problème d'affectation sur les pièces encore libres, en maximisant les
arêtes appariées contre l'anneau qui l'entoure plus celles internes à
l'anneau lui-même. Une fois posé, un anneau est gelé ; la recherche n'y
revient jamais.
Les runs d'origine (volumes de recherche 74 à 79) résolvaient chaque anneau
par MIP, 25 à 45 secondes par cadre. La reproduction archivée le remplace
par un beam déterministe de largeur 1024 par anneau, qui retombe dans la
même bande, et ajoute un bras de comparaison : épingler le même cadre,
laisser l'intérieur vide, et confier cet état à une
[recherche locale par destruction-réparation](/fr/research/build/local-search/local-search-alns/).
## Le résultat
Vingt cadres parfaits énumérés, vingt scores entre 429 et 437 arêtes
appariées sur 480 (moyenne 432,8). L'audit source, sur ses propres 20
cadres, se tenait entre 430 et 436 avec une moyenne de 432,4. La bande et la
moyenne se reproduisent à un point près de chaque côté, et le cadre ne
compte pas : chaque cadre 60/60 mène au même plateau. Le meilleur plateau de
la reproduction score 437 ; il est vérifiable
[arête par arête dans la visionneuse](/viewer/?puzzle=official_eternity2&puzzle_size=16&board_edges=abdaabjbaeqbadteaftdafgfacrfabpcafubabjfafhbafqfadofadhdaendaabedgdajiggqphitwhptgiwgkogrphkpjppumhjjvomhnlvqgtnouvghmwuniombafjdpcagnnpwlmnhuqlisouoqwshwmqppvwhjqpoqtjlvmqtkuvvulkwswuommsfaemcpcansvpiujsqrluonjrkpgnmonpvmjoqgqmtrkgmhmrunhhlktnwhqkmorheabocnfavhunjlthljmlhukjgsquntksjkqtqmokkigmmhgihruhtrgrqpqrrhkpbachfoeaurhotusrgolukuwopmmukrvmqrtropprgmspgsjwuvusgtqvqvntkokvcacoeteahustsgrulorgwuiogvvlvitvtvphpsuvskpphvrkuwovqlhwnkolkgikcadgencaspwnrilpriliiklqvwvkuiwqooiqijjrprsjrmorinjmhsknoiisiwgidafwcqeawinqliwillkilwolvwlwwmulijjmqwlrtqqwosnqjtrukmttiommgllofaelepbanqrpwoiqklwooupllsnhuhwklsuhhwusqngwnnsnrqunttlqmrgtlslreaesbgbaringigqiwwvgpmiwnnvjvijnuksivrtknkvrssskujoslijjgpnilulpeaeubteanpgtqgmpvgsgisjgvntorkmnsmwktrsmvmtrtplmoslgjuhsnkoulqjkeafqeibagtgimsutsphsjnmptmqnmrwmwpkrstoptpjtlsnptgwshhlgouqnjuoufafubmdagmtlujvmqovjmnloqoqnwmsokqhmoriqjkgrntkkwvwtlrwvqvproknvfackdsdatjisvvijvlwvlkplqjskshvjhrphijurgwvjkrvwwhtrwjhhpjijnthjcadtdcaaidacidadweadpcaesbacveabpdaeufadvcafvbactfabhcafrbachcabdaac&hints=135.0-210.1-34.1-221.2-45.1).
> **[Figure]** Attendu vs mesuré (20 cadres CAS, 8 cadres de référence) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export.
La seconde moitié est le duel. Partie du même cadre épinglé avec un
intérieur vide, la poursuite par recherche locale perd à chaque fois. Dans
la mesure source (alns_only complet, 60 secondes par cadre), elle atteignait
385 à 398 et perdait les 8 comparaisons disponibles par 34 à 49 points. Le
proxy plus léger de la reproduction fait mieux en absolu (411 à 419) et perd
quand même chaque cadre, par 13 à 23 points. L'ampleur de l'écart n'est pas
comparable entre les deux montages ; sa direction et sa constance sur chaque
cadre le sont.
## Pourquoi ça s'arrête
Le plateau n'est pas un problème de réglage, ni un trou dans l'objectif :
les 480 arêtes sont toutes dans l'objectif de CAS. Le mécanisme est une
pénurie de pièces. Les anneaux externes, résolus gloutonnement, verrouillent
les pièces selon leur qualité vers l'extérieur, et aux anneaux 5 à 7 le pool
restant ne contient tout simplement plus de pièces dont les profils de
couleurs conviennent aux contraintes tournées vers l'intérieur. C'est la
version à l'échelle des anneaux du
[vol de pièces](/fr/research/why/piece-theft/) : une pièce rare dépensée tôt,
des anneaux avant la case qui en avait besoin.
Les volumes sources ont tenté les sauvetages évidents, et les deux
confirment le diagnostic. Un hybride CAS-ALNS score 418, pire que CAS seul ;
une passe de raffinement ALNS sur un plateau CAS terminé atteint 437 à 439,
un gain de quelques points qui reste loin de ce que d'autres pipelines de ce
carnet atteignent depuis zéro sur le même matériel. Pour situer la barre de
la communauté, voir la [page des records](/fr/research/records/).
## Ce qui suit, et ce qui ne suit pas
CAS est deux choses à la fois, et les deux moitiés font le résultat. Comme
chemin vers les records, il est réfuté en tant qu'ordre glouton : l'ordre de
l'extérieur vers l'intérieur affame sa propre fin de partie, depuis
n'importe quel cadre. Comme outil de sous-problème, c'est la meilleure
option que j'aie mesurée pour un état précis, un cadre parfait plus un
intérieur vide. Les opérateurs de destruction-réparation attendent un
plateau complet à muter ; face à un intérieur vide, ils doivent d'abord en
construire un, mal, tandis que CAS est exactement l'outil constructif de cet
état. Le bon algorithme dépend de l'état de départ ; la composition du
pipeline compte autant que ses composants.
[CLOISTER](/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/) est
l'expérience sœur qui garde le cadre épinglé mais abandonne l'ordre anneau
par anneau.
Trois réserves bornent la conclusion. La reproduction épingle les cinq
pièces indices officielles ; les pages sources ne disent pas si les runs
d'origine le faisaient. Les cinq indices sont tous à l'intérieur, le bras
cadre n'est donc pas affecté, et l'épinglage ne peut que rendre la
reproduction légèrement conservatrice, la direction sûre pour une
affirmation de plateau. Le bras de référence est un proxy léger : seules la
direction de l'écart et sa constance sur chaque cadre se transposent, pas sa
taille. Et les nombres sont des propriétés du jeu de pièces officiel 16×16 :
le mécanisme vit dans les anneaux 5 à 7, qu'un plateau 8×8 (4 anneaux)
n'atteint jamais, si bien qu'un test sur petit plateau ne peut ni confirmer
ni réfuter la conclusion.
## Reproduire
`just research-cas-annular` relance l'ensemble depuis zéro : énumération des
cadres par DFS de bordure avec graine, bras CAS à 20 cadres, bras de
référence à 8 cadres, et régénération du fichier de résultats archivé avec
scores par cadre, écarts et une URL de visionneuse pour chaque plateau.
## À lire aussi
- [CLOISTER](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fixer une bordure parfaite, puis explorer l'intérieur en traitant les arêtes de la bordure comme des contraintes dures dès la toute première case.
- [Le vol de pièce, là où meurent les solveurs](https://eternity2.dev/fr/research/why/piece-theft/) — Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
- [Recherche locale et ALNS](https://eternity2.dev/fr/research/build/local-search/local-search-alns/) — Détruire une partie du plateau, la reconstruire en mieux, et laisser l'algorithme apprendre quelles démolitions rapportent. La recherche à grand voisinage adaptative est le meilleur outil de finition de ce projet, et la démonstration la plus nette du mur où la finition s'arrête.
- [Impasses](https://eternity2.dev/fr/research/build/dead-ends/) — Des approches que nous avons essayées, séduisantes en apparence, mais qui ne font pas bouger les lignes sur Eternity II, consignées avec nos constats pour que vous investissiez votre temps ailleurs.
---
# CLOISTER
> Fixer une bordure parfaite, puis explorer l'intérieur en traitant les arêtes de la bordure comme des contraintes dures dès la toute première case.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/
- Mise à jour: 2026-07-21
- Sujets: local-search, backtracking
- Source: Géographie de la bordure à couleurs rares (ce projet) : pourquoi le cadre est la coupe naturelle — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/why/rare-color-geography.mdx
---
La bordure et l'intérieur sont d'ordinaire résolus ensemble, ce qui gaspille des
efforts : l'intérieur ne cesse de proposer des pièces qui ne pourront jamais
rejoindre la bordure par la suite. CLOISTER épingle d'abord un cadre parfait de
60 pièces, puis explore l'intérieur 14×14 en prenant les arêtes tournées vers
l'intérieur du cadre comme de véritables contraintes dès la première case ; un
intérieur condamné est ainsi rejeté immédiatement plutôt qu'à la fin.
## Fonctionnement
On part d'une bordure complète et parfaitement appariée. La recherche
intérieure est un remplissage en profondeur d'abord tolérant aux ruptures, mais
les cases longeant l'arête interne du cadre doivent s'accorder avec le cadre, et
cette exigence est active dès le premier placement, et non vérifiée seulement
une fois l'intérieur achevé. Des finales exactes évaluent la dernière région, y
compris la qualité de sa jonction avec le rebord.
Parce que la bordure est fixée, la recherche recueille quelque chose qu'un
intérieur reconstitué après coup ne peut pas obtenir : la poignée d'arêtes
supplémentaires qui découle du fait que l'intérieur épouse réellement le rebord
contre lequel il a été bâti, au lieu d'être greffé sur un rebord après coup.
> **[Figure]** Interactif : comment le cadre ancre l'intérieur — interactive: BorderAnchorDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
Essayez en direct : fixez un cadre et regardez la recherche intérieure se
dérouler face à lui dans votre navigateur.
> **[Figure]** Interactif : résolvez l'intérieur autonome en direct — interactive: CloisterLiveLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
En tant que solveur d'intérieur autonome, CLOISTER atteint un score intérieur de
453 sans indices, en quelques minutes, et confirme un effet réel : un intérieur
bâti contre son propre rebord s'y rattache avec quelques arêtes appariées de plus
que le même intérieur, de qualité équivalente, rattaché après coup. Avec les cinq
indices officiels forcés, il se stabilise dans le haut des 440 à le bas des 450.
Il ne bat pas les meilleurs records, et il sature comme tout le reste à
l'approche du mur. Mais il isole et mesure proprement le couplage
bordure-intérieur que la recherche sur plateau entier estompe.
## Méthode
La recherche est un DFS tolérant aux ruptures sur l'intérieur, mais le levier
tient dans le cadrage et dans une campagne en deux phases menée sur *de
nombreux* cadres.
- **Le cadre comme contrainte dure.** Une bordure complète de 60 pièces est
fixée, et les couleurs du cadre tournées vers l'intérieur deviennent des
contraintes dures sur les cases du rebord dès le tout premier placement
intérieur, et non un contrôle repoussé à la fin. Un intérieur condamné est
élagué immédiatement.
- **Finale exacte.** La région de finale est résolue exactement (une finale
exacte de 14 cases), y compris sa jonction avec le rebord, de sorte que les
dernières cases sont fermées de façon déterministe plutôt que par heuristique.
- **Campagne en largeur sur les cadres.** Plutôt qu'une seule bordure, on balaie
un répertoire de cadres candidats en deux phases : une sonde de compatibilité
avec les indices, peu coûteuse (~6 secondes), écarte les cadres incapables
d'accueillir les indices, puis une recette de finale de 30 secondes tourne sur
chaque cadre survivant avec 8 graines. Le meilleur intérieur l'emporte.
L'effet mesuré est faible mais réel, et il provient d'une seule chose : le
couplage bordure-intérieur que la recherche sur plateau entier moyenne et efface,
mais qu'une construction rebord d'abord peut exploiter tant qu'elle le peut
encore. 453 sans indices ; du haut des 440 au bas des 450 avec les cinq indices
forcés.
## Reproduire
Graine fixée et quasi déterministe à cadre donné : la résolution DFS de
l'intérieur à partir d'un cadre fixe reproduit son score de façon fiable, et le
plateau enregistré est vérifiable arête par arête dans la visionneuse. La
résolution requiert une entrée au-delà du puzzle, un cadre de bordure parfaite
pré-résolu ; un répertoire de support exécutable, livrant ce cadre aux côtés du
moteur, est prévu. Pour l'instant, l'exécution reste exploratoire : le plateau
453 se vérifie dans la visionneuse, mais aucune reproduction empaquetée en une
seule commande n'est encore livrée.
## Questions ouvertes
Quelle part du bonus de compatibilité au rebord peut-on récolter sans fixer
d'abord la bordure ? Le balayage de nombreuses bordures, plutôt que d'une seule,
trouve-t-il un intérieur qui se rattache mieux encore ? Et d'où vient
exactement le plafond de la version à indices stricts ?
## À lire aussi
- [STAGED](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/staged/) — Construire tout le plateau depuis zéro, sans cadre pré-posé, par étapes, en laissant la bordure émerger en dernier des pièces restantes.
- [Les couleurs rares vivent sur le cadre](https://eternity2.dev/fr/research/why/rare-color-geography/) — Cinq des 22 couleurs d'Eternity II n'apparaissent que le long de l'anneau de bordure, chacune sur exactement 24 arêtes, jamais une seule fois à l'intérieur. Une séparation structurelle qui façonne la manière dont chaque solveur traite le cadre.
- [MIDDEN](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/midden/) — Décider à l'avance non pas quand un plateau peut casser, mais où : confiner chaque désaccord à une forme de cellules choisie, et chercher la meilleure forme.
- [Rendez-vous au milieu](https://eternity2.dev/fr/research/build/exact/meet-in-the-middle/) — Énumérer deux moitiés d'un problème et les recoller sur une interface partagée, en échangeant de la mémoire contre un exposant divisé par deux. L'astuce classique de Horowitz–Sahni, ce qu'elle donne sur des bandes du plateau, et ce que l'expérience BANDSAW de ce projet a mesuré, y compris la méthode unilatérale qui l'a battue.
- [Le cadre fluide](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/fluid-frame/) — Une bordure parfaite de 60 pièces n'est pas un objet rigide. Chaque cadre entièrement apparié admet exactement 45 échanges libres à coût de bordure nul ; un tiers des cadres parfaits ne peuvent même pas démarrer l'intérieur, et un seul échange libre ranime chacun d'eux.
---
# Le cadre fluide
> Une bordure parfaite de 60 pièces n'est pas un objet rigide. Chaque cadre entièrement apparié admet exactement 45 échanges libres à coût de bordure nul ; un tiers des cadres parfaits ne peuvent même pas démarrer l'intérieur, et un seul échange libre ranime chacun d'eux.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/fluid-frame/
- Mise à jour: 2026-07-22
- Sujets: structure, local-search
- Reproduire: `just research-frame-manifold`
- Source: Sujet de reproduction (ce projet) : plan, code de calcul et résultats derrière chaque nombre de cette page — https://github.com/raphael-anjou/eternity2/blob/main/research/topics/frame-manifold/article.md
---
Les pipelines « bordure d'abord » comme
[CLOISTER](/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/)
construisent une bordure de 60 pièces entièrement appariée, la gèlent, puis
imposent ses 56 couleurs tournées vers l'intérieur comme contraintes dures à
la recherche intérieure. Je voulais savoir si cet objet gelé est vraiment un
seul objet, en partant d'un réflexe simple : quand l'intérieur cale contre le
rebord, pourquoi revenir en arrière sur la bordure alors qu'on pourrait
échanger une seule pièce du rebord ? Mesurée sur 500 cadres parfaits frais,
la réponse est plus nette que la question. Une bordure parfaite est une
variété connexe avec exactement 45 sorties libres ; un tiers des bordures
parfaites ne peuvent même pas démarrer l'intérieur ; et un échange libre
répare chaque cadre mort échantillonné, à coût de bordure nul.
## Ce qui a été mesuré
D'abord les définitions. Un cadre place les 4 coins et les 56 pièces de bord
sur les 60 cases de bordure du plateau officiel 16×16, le gris exactement
vers l'extérieur. BB compte les adjacences bord-à-bord appariées le long de
l'anneau, maximum 60 ; BB = 60 est un cadre parfait. Un échange légal permute
deux pièces posées de la même classe (coin avec coin, pièce de bord avec
pièce de bord) ; les rotations étant forcées par la règle du gris vers
l'extérieur, un échange est déterminé par la paire de cases. Un échange est
libre quand il laisse BB à 60.
Le crate de calcul génère ses propres cadres BB = 60 du jeu officiel de 256
pièces (un placement en profondeur d'abord randomisé sur les 60 cases de
bordure), puis mesure chaque affirmation directement :
1. chaque échange légal de même classe et son coût en BB, cumulé sur tous
les cadres ;
2. des chaînes d'échanges libres, l'ensemble libre étant recalculé sur
l'anneau courant à chaque pas, en suivant BB, le nombre de coups libres,
et la dérive de l'anneau et du vecteur de couleurs intérieures ;
3. la remplissabilité de chaque case intérieure touchant le cadre : un cadre
est mort quand une telle case ne peut être remplie par aucune des 196
pièces intérieures ;
4. une réparation gloutonne de chaque cadre mort par échanges libres
uniquement.
Passe principale : 500 cadres générés indépendamment, marche de longueur
100, réanimation tentée sur les 60 premiers cadres morts. La passe est
déterministe ; relancer la commande archivée reproduit le fichier de
résultats octet par octet. Le premier cadre généré se regarde dans la
[visionneuse](/viewer/?puzzle=official_eternity2&puzzle_size=16&board_edges=abdaaepbacqeadpcabmdacrbacpcafvcafufabtfachbabhcacsbaepcadteaacddtcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaencnfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeabofhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababgcidaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabafhdofaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaelfoeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeseqbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeabvbpcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabafuckfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafadufqfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadgfjbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaepbjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaetftdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeadwdhdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaendcaaocacrfacgfafqeafmfaewdafsdadidadgcadvbacjbabteabueaeibaeeaab).
## Le résultat
**Exactement 45 coups libres, sur chaque cadre.** Les 500 cadres parfaits
admettent exactement 45 échanges libres, jamais 44, jamais 46. Aucun échange
n'augmente jamais BB (60 est le maximum), et les coups libres se composent :
après 100 échanges libres enchaînés, BB vaut toujours 60 et 45 coups libres
restent disponibles. Le compte ne s'épuise jamais.
**Aucun n'est cosmétique.** Zéro des 45 échanges libres ne préserve la
couleur intérieure des pièces touchées : chaque coup libre change le vecteur
de contraintes que la bordure présente à l'intérieur. Une marche libre de
100 pas a visité 99 vecteurs de cibles de rebord distincts sur 101 possibles
sans jamais quitter BB = 60.
**Parfait n'est pas utilisable.** 180 des 500 cadres parfaits (36 pour cent)
avaient au moins une case intérieure qu'aucune des 196 pièces intérieures ne
pouvait remplir, et 46 (9,2 pour cent) étaient morts dès la toute première
case qu'un solveur en ordre de balayage visite : la recherche intérieure
meurt à la profondeur 0 malgré un score de bordure parfait. La réparation
gloutonne par échanges libres seuls a ranimé 60 cadres morts sur 60, BB ne
quittant jamais 60. Dans l'exemple travaillé de l'étude source, un seul
échange libre a fait passer un DFS cadré de la profondeur 0 à la profondeur
153 sur 196.
> **[Figure]** Attendu contre mesuré (passe principale, 500 cadres) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export.
Une passe de robustesse à graine indépendante (100 cadres frais, base de
graine 7001) concorde : 45 échanges libres sur chaque cadre, aucun gain, 45
cadres morts sur 100 (histogramme 38 / 7), les 45 tous ranimés, et la marche
tient de nouveau BB = 60 avec 45 coups libres du début à la fin. La chute
tient donc à travers générateurs et graines : une bordure parfaite et une
bordure utilisable sont deux propriétés différentes, et le cadre peut rester
mobile pendant la recherche au lieu d'être défait par retour arrière.
## Ce qui n'en découle pas
- Aucune affirmation n'est faite que marcher sur la variété ou ranimer des
cadres morts améliore les scores de plateaux complets. L'A/B de l'étude
source n'a produit aucun plateau cadré complet ; tout effet sur le score
reste une question ouverte, et un producteur qui garde le cadre fluide
pendant la recherche intérieure est un travail futur. Cette page publie la
mécanique seule.
- Le 45 est revendiqué comme une propriété du jeu de pièces officiel et
répliqué ici sur des cadres issus d'un autre générateur. Le taux de cadres
morts est une propriété de l'échantillonnage du générateur : 36,0 pour
cent sur la passe principale, 45 pour cent sur la passe à graine
indépendante ; l'énoncé défendable est un taux entre le milieu des 30 et
le milieu des 40 pour cent, pas un 36 universel.
- Le compte brut de paires de même classe est de 1546 par cadre ici contre
environ 1458 dans la source, qui excluait de toute évidence une classe de
paires sans effet. Les parts et les deux lignes porteuses (45 libres, 0
gain) concordent quoi qu'il en soit.
- Les cadres sont ici sans indices, comme dans la mesure source ; la
compatibilité des cadres avec les indices est un sujet distinct et ne fait
pas partie de cette affirmation.
## À lire aussi
- [CLOISTER](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fixer une bordure parfaite, puis explorer l'intérieur en traitant les arêtes de la bordure comme des contraintes dures dès la toute première case.
- [STAGED](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/staged/) — Construire tout le plateau depuis zéro, sans cadre pré-posé, par étapes, en laissant la bordure émerger en dernier des pièces restantes.
- [L'équilibre du bord](https://eternity2.dev/fr/research/why/border-balance/) — Un plateau résolu dissimule une loi comptable toute simple : chaque couleur que le bord tend vers l'intérieur, l'intérieur la lui rend aussitôt. La violer, c'est savoir sur-le-champ que le plateau est faux ; la respecter, en revanche, ne garantit rien.
- [Les couleurs rares vivent sur le cadre](https://eternity2.dev/fr/research/why/rare-color-geography/) — Cinq des 22 couleurs d'Eternity II n'apparaissent que le long de l'anneau de bordure, chacune sur exactement 24 arêtes, jamais une seule fois à l'intérieur. Une séparation structurelle qui façonne la manière dont chaque solveur traite le cadre.
---
# GAUNTLET
> Lancer la même recherche en faisceau selon neuf ordres de parcours différents, pour qu'elle atterrisse dans des régions distinctes au lieu de toujours converger vers la même. L'ordre en zigzag a trouvé un plateau 458 inédit.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/gauntlet/
- Mise à jour: 2026-07-21
- Sujets: construction
- Reproduire: `just research-record-boards`
- Source: Recherche en faisceau (la page de concept de ce projet) : la construction dont on fait varier l'ordre de parcours — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/construct/beam-search.mdx
---
Une recherche en faisceau qui remplit toujours le plateau dans le même ordre a
tendance à découvrir le même genre de plateau, quelle que soit la graine
aléatoire. L'ordre dans lequel on visite les cases décide en sourdine de la
région où l'on aboutit, et sur seize graines, un même ordre de parcours n'a
produit qu'une seule famille de disposition des coins. GAUNTLET en fait un
outil : lancer la recherche selon neuf ordres de parcours véritablement
différents, et l'on échantillonne des régions véritablement différentes.
## Fonctionnement
GAUNTLET dérive le faisceau constructif de PRIOR et lui confie un ordre de
parcours interchangeable : ligne, ligne inversée, colonne, colonne inversée,
zigzag, zigzag inversé, spirale entrante, spirale sortante et diagonale, neuf
en tout. Comme l'ordre des cases modifie quels plateaux partiels survivent à
chaque étape, chaque ordre explore une trajectoire différente au lieu de
s'agglutiner sur une seule. Un balayage de 9 parcours × 4 graines a produit
**18 signatures de disposition des coins distinctes**, contre une seule sur
seize graines du faisceau à parcours unique dont il est issu.
Chaque exécution complète produit un plateau entier ; les plus solides sont
ensuite polis par un rehaussement ALNS de 30 minutes. Le constat est net :
*l'ordre de parcours est un axe de diversité plus puissant que la graine
aléatoire.* Voilà le levier, et c'est sur lui que s'appuient KEYRING et PRIOR
par la suite.
> **[Figure]** Interactif : le calendrier de l'ordre de construction — interactive: GauntletDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
Déroulez un parcours pour voir comment l'ordre de visite oriente le faisceau.
> **[Figure]** Interactif : dérouler l'ordre de construction — interactive: GauntletStepThrough. Rendered on the canonical page (link above); not shown in this markdown export.
Ou faites courir les neuf ordres les uns contre les autres, en direct, dans
votre navigateur.
> **[Figure]** Interactif : faire courir les stratégies de construction — interactive: GauntletLiveRace. Rendered on the canonical page (link above); not shown in this markdown export.
## Le plateau
La recherche est stochastique, elle ne reproduira donc pas ce plateau exact,
mais le plateau qu'elle a trouvé est figé, fourni ici, et vérifiable arête par
arête.
> **[Interactive: RecordBoard]** Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
L'ordre en zigzag à la graine 99, rehaussé, a atteint 458 sur 480 dans la
disposition des coins cp=(3,0,1,2), le premier plateau égal ou supérieur à 458
jamais trouvé dans cette disposition au sein de notre base. Il se situe à au
moins 246 cases sur 256 de tout ce que nous avions à ce niveau : un bassin
véritablement nouveau, pas une autre route vers un bassin connu.
La contribution de GAUNTLET est donc une portée plutôt qu'un record : il a
ouvert une nouvelle région de plateaux solides. Un second tour (32
rehaussements supplémentaires) a plafonné à 457 sans aucun 461, ce qui indique
que la nouvelle famille sature comme les autres, mais la famille elle-même était
la prise.
## Méthode
Le pipeline comporte trois étapes, et les paramètres sont l'essentiel.
**Étape 1 : construction diversifiée.** On dérive le faisceau de PRIOR et on
lui confie un ordre de parcours interchangeable sur les 256 cases : `row`,
`row_rev`, `col`, `col_rev`, `zigzag`, `zigzag_rev`, `spiral_in`,
`spiral_out`, `diagonal`, neuf ordres, croisés avec les graines
`{1, 7, 42, 99}`. Tous partagent un même a priori (la matrice `high459`) à
faible température de softmax (0,05), de sorte que le faisceau est guidé par
l'a priori sans être déterministe. L'ordre modifie quels plateaux partiels
survivent à chaque étape, si bien que chaque couple (parcours, graine) suit une
trajectoire différente.
**Étape 2 : rehaussement.** Chaque construction solide reçoit un rehaussement
ALNS (opérateurs d'évasion d'a priori + destruction/réparation `basic_lkh`),
5 minutes par construction durant le balayage, plus longtemps pour les
finalistes.
**Étape 3 : regroupement.** On regroupe toutes les sorties par permutation des
coins et on signale les signatures absentes de la base existante. C'est ainsi
que le balayage 9×4 a fait émerger **18 familles de coins distinctes** là où
seize graines d'un parcours unique n'en avaient fait émerger qu'une, la
constatation mesurée selon laquelle *l'ordre de parcours est un axe de
diversité plus puissant que la graine.*
Le plateau gagnant, zigzag, graine 99, rehaussé, se trouve en
cp = (3, 0, 1, 2), à une distance de Hamming ≥ 246/256 de tout ce qui était
précédemment à ce niveau : un nouveau bassin selon le même test permutation des
coins plus Hamming qu'emploie [PRIOR](/fr/research/lab/experiments/raphael-anjou/learning/prior/).
## Reproduire
`just research-record-boards` vérifie le score du plateau 458 retenu,
exactement, à partir de sa chaîne Bucas stockée. Le balayage est stochastique
(neuf parcours × quatre graines, puis une passe de polissage), il ne
reproduira donc pas le même plateau ; le plateau est l'artefact de référence.
Le moteur est le producteur en faisceau partagé, exécuté selon neuf ordres de
remplissage ; il utilise le même a priori extrait du corpus que
[PRIOR](/fr/research/lab/experiments/raphael-anjou/learning/prior/), si bien que
l'exécution n'est pas reproduite ici à partir de zéro.
## Questions ouvertes
Cette nouvelle famille présente-t-elle la même structure locale rigide que les
autres, ou une forme différente ? Et un raffinement plus long peut-il la hisser
au-delà de 458, comme une famille fraîche a parfois plus de marge qu'une famille
bien rodée ?
## À lire aussi
- [PRIOR](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/prior/) — Construire un plateau à partir de rien, en départageant les égalités selon la position habituelle des pièces dans les bons plateaux déjà connus. Il atteint un score élevé sans aucun plateau de départ à copier.
- [KEYRING](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/keyring/) — Construire un plateau de zéro en classant chaque pièce suivante selon trois signaux appris de plateaux forts passés. A atteint 460 dans une famille de plateaux qu'aucune recherche antérieure n'avait percée.
- [Recherche en faisceau](https://eternity2.dev/fr/research/build/construct/beam-search/) — Maintenir en vie les K plaquettes partielles les plus prometteuses à la fois et les faire croître case par case. La recherche en faisceau est le moteur des constructeurs ex nihilo de ce projet, et une illustration limpide des raisons pour lesquelles la largeur seule s'enlise dans les profondeurs de l'intérieur.
- [Rendre un producteur beam 10x meilleur : la réponse est la largeur](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/beam-width/) — Une revue vérifiée plus des mesures appariées : aucune astuce par nœud ne bat la largeur brute du faisceau à temps de calcul égal. Les deux seuls additifs qui survivent sont la randomisation des clés de troncature exactement à égalité (gratuite) et le rééchantillonnage SMC des survivants (petit mais significatif).
---
# LADDER
> Lancer des centaines de courtes recherches bon marché sur le plateau, ne garder que les départs les plus profonds, et faire monter les survivants à travers des tours de plus en plus longs.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/ladder/
- Mise à jour: 2026-07-21
- Sujets: local-search
- Source: Halving successif / stratégies de redémarrage (la page concept sur les redémarrages de ce projet) — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/backtracking/restarts.mdx
---
L'essentiel d'une longue recherche est gaspillé sur des départs condamnés
dès le début. LADDER ne dépense presque rien pour découvrir quels débuts
valent la peine d'être poursuivis. Il lance une avalanche de sondages très
courts, garde les quelques-uns qui sont allés le plus loin, et ne paie
qu'ensuite pour des exécutions plus longues, sur ceux-là seuls. C'est une
sélection par tournoi appliquée aux départs de recherche.
## Comment ça marche
Le premier tour, ce sont des centaines de sondages de cinq secondes partant
de graines aléatoires différentes, chacun cherchant à poser une longue suite
de cellules parfaitement raccordées. On garde les préfixes les plus profonds,
et on écarte ceux qui sont de quasi-doublons les uns des autres pour que les
survivants restent diversifiés.
On promeut ces derniers vers un tour plus long doté de critères de qualité
plus stricts, puis on promeut les meilleurs d'entre eux vers une exécution de
pleine longueur. Chaque échelon consacre davantage de temps à des candidats
moins nombreux et meilleurs, à la manière dont les tournois par halving
successif allouent l'effort aux concurrents qui continuent de gagner.
> **[Figure]** Interactif : la progression échelon par échelon — interactive: LadderDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
> **[Figure]** Interactif : lancer la recherche en échelle en direct — interactive: LadderLiveLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
LADDER a produit un plateau à 451 respectant les cinq indices officiels, sans
aucune aide d'un quelconque record connu, la première fois que le projet
s'est échappé de la bande de 444 à 450 dans laquelle la recherche non guidée
n'arrêtait pas de retomber. Les finitions sont déterminées par leur préfixe :
une fois un début suffisamment fort mis en banque, le reste suit. Une
exécution plus longue a par la suite atteint 452, une arête de plus, même si
451 est le plateau retenu et reproductible ici.
Il a aussi cartographié les limites : la réserve de débuts parfaits s'épuise,
et au-delà d'un certain point les échelons convergent tous vers le même
plafond. LADDER est donc un bon moyen de trouver le meilleur départ, non un
moyen de franchir les murs structurels qui arrêtent toute méthode près du
sommet.
## Méthode
L'échelle est un tournoi récursif par halving successif sur les *départs* de
recherche, notés par la profondeur de préfixe.
- **Premier tour : avalanche.** Des centaines de sondages de 5 secondes
partant de graines différentes, chacun posant une suite aussi longue que
possible de cellules parfaitement raccordées. On classe par la profondeur de
ce préfixe parfait ; on garde les plus profonds, et on écarte les
quasi-doublons (des préfixes trop semblables à un survivant) pour que
l'ensemble conservé reste diversifié.
- **Cliquet.** Chaque tour suivant épingle le préfixe le plus profond mis en
banque au tour précédent (un épinglage à profondeur 15 dans l'exécution
enregistrée) et sonde *au-delà* de lui, poussant la frontière du préfixe
parfait d'un cran de plus. La récursion s'arrête lorsqu'un tour gagne moins
de quatre cellules de profondeur : la réserve de débuts plus profonds est à
sec.
- **Finition.** À partir des trois préfixes distincts les plus profonds, on
lance de longs échelons exact-tail-14 (300 s × 8 graines chacun) pour
convertir le début mis en banque en un plateau complet.
Le constat est que *la finition est déterminée par le préfixe* : une fois un
début parfait suffisamment profond mis en banque, la fin de partie suit.
C'est pourquoi concentrer le calcul sur la découverte du meilleur départ,
plutôt que de le répartir sur des exécutions complètes, a permis de s'échapper
de la bande 444-450 dans laquelle la recherche non guidée n'arrêtait pas de
retomber. Un tour de finition plus long a par la suite atteint 452 ; le
plateau retenu et reproductible ici est le 451.
## Reproduire
À graine fixée ; la structure sondage-et-promotion reproduit le *comportement*
de façon fiable, même si le plateau exact dépend des graines. Le plateau 451
retenu est vérifiable dans la visionneuse. La montée n'a besoin d'aucun
corpus, cadre ni témoin : elle part du puzzle seul, aussi un répertoire
d'accompagnement exécutable est-il prévu pour elle aux côtés des autres
expériences parties de zéro. Pour l'instant, l'exécution reste exploratoire :
le plateau 451 se vérifie dans la visionneuse, mais aucune reproduction
empaquetée en une seule commande n'est encore livrée.
## Questions ouvertes
Quel est le vrai plafond de la sélection par préfixe d'abord si l'on donne
davantage de calcul aux premiers échelons ? La règle de diversité pourrait-elle
être plus fine sur les quasi-doublons à conserver ? Et combiner les préfixes
les plus profonds de familles différentes bat-il la promotion au sein d'une
seule ?
## À lire aussi
- [REPLAY](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/replay/) — Reconstruire à l'identique les plateaux stricts à 460 de la communauté, et découvrir au passage le coup que les solveurs ordinaires ne savent pas jouer : payer deux désaccords sur une même case.
- [PRIOR](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/prior/) — Construire un plateau à partir de rien, en départageant les égalités selon la position habituelle des pièces dans les bons plateaux déjà connus. Il atteint un score élevé sans aucun plateau de départ à copier.
- [Redémarrages et lois à queue lourde](https://eternity2.dev/fr/research/build/backtracking/restarts/) — Lancez deux fois le même backtracker sur le même casse-tête et les temps d'exécution diffèrent d'un facteur dix, cent, mille. La communauté l'a mesuré en 2007 ; la littérature CSP l'avait déjà nommé. Le remède (couper, rebattre, redémarrer) explique pourquoi chaque solveur record depuis est un portefeuille de redémarrages.
- [Rendre un producteur beam 10x meilleur : la réponse est la largeur](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/beam-width/) — Une revue vérifiée plus des mesures appariées : aucune astuce par nœud ne bat la largeur brute du faisceau à temps de calcul égal. Les deux seuls additifs qui survivent sont la randomisation des clés de troncature exactement à égalité (gratuite) et le rééchantillonnage SMC des survivants (petit mais significatif).
- [L'échelle de tailles](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/scaling-ladder/) — Un banc qui fait tourner n'importe quel solveur, tel quel, sur des plateaux plantés entièrement résolubles à N = 8, 10, 12, 14, chacun avec un plafond prouvé de 2N(N-1) : la taille d'effondrement d'une méthode se mesure avant de passer des semaines sur le vrai 16×16.
---
# MIDDEN
> Décider à l'avance non pas quand un plateau peut casser, mais où : confiner chaque désaccord à une forme de cellules choisie, et chercher la meilleure forme.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/midden/
- Mise à jour: 2026-07-21
- Sujets: local-search
- Source: Vol de pièces (ce projet) : la vue spatiale de l'endroit où les plateaux échouent, ce que MIDDEN contrôle en amont — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/why/piece-theft.mdx
---
La plupart des solveurs tolérant les cassures contrôlent quand un désaccord est
permis : à certaines profondeurs, au-delà d'un certain remplissage. MIDDEN
contrôle où, à la place. Il fixe un masque, un ensemble de cellules choisi, et
impose que les désaccords ne puissent être payés qu'à l'intérieur ; partout
ailleurs, l'accord doit être parfait. Puis il cherche sur la forme de ce masque.
Les méthodes existantes disent quand encaisser des dégâts ; cette expérience
demande où les dégâts doivent se loger.
## Fonctionnement
Choisir un masque : deux ou trois lignes, deux ou trois colonnes, un treillis
dispersé de cellules, ou un ensemble choisi par couleur. Lancer la recherche en
forçant des accords parfaits hors du masque et en autorisant les désaccords
uniquement à l'intérieur. Des formes de masque différentes conduisent la
recherche dans des parties différentes de l'espace, si bien que le masque devient
un bouton de réglage plutôt qu'une règle figée.
Comparer les formes révèle quelle géométrie de dégâts autorisés permet à un
plateau de faire croître une longue série parfaite avant de devoir dépenser un
désaccord.
> **[Figure]** Interactif : les masques de cassure par géométrie des dégâts — interactive: MaskShapeDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
Un treillis dispersé de cellules à dégâts autorisés allonge nettement plus la
plus longue série parfaite que le fait de concentrer les dégâts sur une ligne ou
deux, poussant le mur parfait d'environ 150 cellules jusque dans les 170. Le
mécanisme est clair ; ce qui reste ouvert, c'est l'économie de l'affaire :
convertir une série parfaite plus longue en un score final plus élevé, une fois
que la fin de partie doit absorber les dégâts différés.
Le masque est donc un vrai levier, le complément spatial des contrôles de timing
habituels, avec un effet mesuré sur la distance à laquelle un plateau reste
parfait, mais pas encore une voie aboutie vers un record.
## Méthode
Toutes les autres recherches tolérant les cassures régulent les dégâts par
*quand* : une profondeur, une fraction de remplissage. MIDDEN régule par *où*.
C'est le premier contrôle de dégâts par ensemble de cellules (OÙ) face aux
régulations par profondeur (QUAND) de tous les autres.
- **Le masque.** Un ensemble de cellules choisi (un masque de 256 bits) est
passé via `--break-cells`. À l'intérieur du masque, les désaccords sont
autorisés ; partout ailleurs, l'accord doit être parfait. La recherche est par
ailleurs un DFS tolérant les cassures standard, à partir d'un cadre fixe.
- **Le balayage.** La *forme* du masque devient la variable de conception : deux
ou trois lignes, deux ou trois colonnes, un treillis dispersé, ou un ensemble
choisi par couleur, balayés sur les formes et les densités, chacun à 300 s × 8
graines.
Le résultat mesuré est une règle de conception à densité graduée : un **treillis
dispersé** de cellules à dégâts autorisés allonge la plus longue série parfaite
d'environ 153 cellules à 167-174 (**+21**), bien plus que le fait de concentrer
les dégâts sur une ligne ou deux. Le mécanisme est clair ; l'économie qui reste
ouverte, c'est la fin de partie : une série parfaite plus longue ne sert que si
la queue peut absorber les dégâts différés, et le masque dispersé qui maximise le
mur ne scelle pas à lui seul la fin de partie. L'étape suivante naturelle
(composer un masque de corps dispersé avec une queue ouverte) est exactement ce
que le balayage MIDDEN-v2 s'est proposé de tester.
## Reproduire
Amorcé sur un cadre fixe ; l'effet d'allongement du mur se reproduit d'un masque
à l'autre, même si le plateau exact dépend des graines, et le plateau 452
committé est vérifiable dans la visionneuse. Comme [CLOISTER](/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/),
il lui faut un cadre de bordure pré-résolu (plus le masque de cellules de
cassure, qui est un intrant littéral) ; un répertoire d'appui exécutable, livrant
le cadre, est prévu. Pour l'instant, l'exécution reste exploratoire : le plateau
452 se vérifie dans la visionneuse, mais aucune reproduction empaquetée en une
seule commande n'est encore livrée.
## Questions ouvertes
Quelles formes de masque convertissent une série parfaite plus longue en arêtes
réellement accordées à la fin, plutôt que de simplement différer les dégâts ?
Peut-on combiner des masques spatiaux avec des contrôles de timing, de sorte
qu'un plateau soit régulé à la fois sur où et sur quand il peut casser ? Et
existe-t-il un masque qui reflète l'endroit où les meilleurs plateaux connus
portent réellement leurs désaccords ?
## À lire aussi
- [LADDER](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/ladder/) — Lancer des centaines de courtes recherches bon marché sur le plateau, ne garder que les départs les plus profonds, et faire monter les survivants à travers des tours de plus en plus longs.
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [CLOISTER](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fixer une bordure parfaite, puis explorer l'intérieur en traitant les arêtes de la bordure comme des contraintes dures dès la toute première case.
- [Le vol de pièce, là où meurent les solveurs](https://eternity2.dev/fr/research/why/piece-theft/) — Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
---
# MOSAIC
> Découper le plateau en petits blocs, résoudre chacun jusqu'à l'optimum prouvé, puis les recoller en payant les coutures au lieu de les interdire. En partant de zéro, sans record à recopier, la méthode atteint 448.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/mosaic/
- Mise à jour: 2026-07-21
- Sujets: exact-methods
- Source: RC2 MaxSAT (le solveur de blocs exact) : un algorithme MaxSAT pondéré guidé par les noyaux — https://doi.org/10.3233/SAT190116
---
Eternity II ne possède aucune structure locale exploitable à l'échelle
globale, mais une petite fenêtre de cette structure, un bloc 4×4, se résout à
l'optimum parfait en quelques secondes. MOSAIC est une expérience bâtie sur ce
seul fait : si l'on sait résoudre un bloc exactement, peut-on composer seize
blocs exacts en un plateau entier ?
## Fonctionnement
Le plateau 16×16 est découpé en seize blocs 4×4, remplis un par un. Chaque bloc
est confié à un solveur MaxSAT exact, qui trouve le meilleur placement possible
des pièces qu'il contient. Toute l'astuce tient à la manière dont un bloc
rejoint ses voisins déjà posés : ces arêtes partagées ne sont pas des exigences
strictes mais des cibles *souples* que le bloc est récompensé d'atteindre. Un
bloc ne peut donc jamais devenir impossible ; il paie simplement toute couture
qu'il ne peut apparier, et se complète toujours.
La seconde idée s'attaque directement au vol de pièces. Avant de remplir un
bloc, MOSAIC met de côté les pièces globalement les plus rares, afin que les
derniers blocs ne soient pas privés des pièces rares que leurs coutures
réclameront. Régler la quantité à réserver est le seul véritable levier ; trop
peu et le coin s'affame, trop et les premiers blocs en pâtissent.
> **[Figure]** Interactif : la recherche d'assemblage des blocs — interactive: MosaicBlockLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
La primitive de fenêtre tient sa promesse : un bloc 4×4 se résout à son optimum
de 24 arêtes en une trentaine de secondes, un 3×3 en onze, confirmant que le
puzzle est bel et bien tractable à petite échelle. Composée sur l'ensemble du
plateau, en partant de zéro et sans démarrage à chaud, MOSAIC atteint 448 sur
480. Le point de réservation optimal se situe autour de huit pour cent du
réservoir.
Le déficit est instructif : il se concentre presque entièrement dans les trois
derniers blocs du coin inférieur droit, là où le réservoir finit par
s'épuiser : le vol de pièces, de nouveau, désormais visible comme un unique
point vif sur le plateau. L'exactitude à petite échelle se compose bien, mais
l'ordre de composition dépense sa liberté tôt et la paie à la fin, la même forme
que rencontre chaque méthode ici.
## Méthode
L'exactitude est authentique, tout comme le retour arrière qui la recoud.
- **Blocs exacts.** Chaque bloc 4×4 est encodé comme un problème *MaxSAT
pondéré* et résolu par RC2, un solveur guidé par les noyaux, jusqu'à un
remplissage prouvé optimal. Les arêtes partagées avec les voisins déjà posés
sont des clauses *souples* (récompensées, non exigées), de sorte qu'un bloc ne
peut jamais être infaisable : il paie toute couture qu'il ne peut apparier et
se complète toujours.
- **Retour arrière sur les solutions.** MOSAIC n'est pas un recollage en un
seul coup. Chaque niveau de bloc conserve un *énumérateur* de solutions
MaxSAT, meilleures d'abord, via RC2 augmenté de clauses de blocage qui
écartent les remplissages déjà vus. Lorsqu'un bloc ultérieur est affamé ou
qu'un niveau s'épuise, la recherche revient en arrière et tire la solution
*suivante* du bloc précédent (libérant un jeu de pièces différent). C'est une
recherche par retour arrière grossière sur 16 niveaux, où chaque nœud est un
bloc entier optimal.
- **Réservation de rareté.** Avant remplissage, MOSAIC met de côté les pièces
globalement les plus rares, afin que les blocs finaux ne soient pas privés des
pièces rares que leurs coutures réclament. Cette fraction de réservation est
le seul véritable levier ; le point optimal mesuré est d'environ 8 % du
réservoir.
La primitive de fenêtre est réelle : un bloc 4×4 atteint son optimum de 24
arêtes en environ 30 s, un 3×3 en environ 11 s, le puzzle *est* tractable à
petite échelle. Composée depuis zéro, elle atteint 448, le déficit résiduel se
concentrant dans les trois derniers blocs du coin inférieur droit :
le [vol de pièces](/fr/research/why/piece-theft/) rendu visible comme un unique
point vif.
## Reproduire
Déterministe : les résolutions de blocs MaxSAT et la composition par retour
arrière sont exactes, d'où `kind: exact` ; le plateau à 448 se reproduit et se
vérifie arête par arête dans le visualiseur. Le moteur de bloc fonctionne à
partir du seul puzzle, sans corpus ni plateau de départ, sa seule dépendance
externe étant un solveur MaxSAT ; un répertoire d'accompagnement exécutable est
donc prévu aux côtés des autres expériences exactes. Pour l'instant, l'exécution
reste exploratoire : le plateau 448 se vérifie dans le visualiseur, mais aucune
reproduction empaquetée en une seule commande n'est encore livrée.
## Questions ouvertes
Un ordre des blocs non ligne par ligne, en spirale vers l'intérieur ou
résolvant d'abord le coin contraint, déplacerait-il l'épuisement hors du bloc le
plus dur ? Les blocs pourraient-ils se chevaucher, de sorte que les coutures
soient résolues deux fois puis réconciliées ? Et une primitive plus rapide (en
Rust) rendrait-elle abordable une taille de bloc supérieure, avec sa garantie
d'exactitude plus forte ?
## À lire aussi
- [BANDSAW](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/) — Résoudre exactement une bande de rangées en se rejoignant au milieu, pour trouver la vraie meilleure fin et mesurer jusqu'où décider une fin de partie.
- [Le vol de pièce, là où meurent les solveurs](https://eternity2.dev/fr/research/why/piece-theft/) — Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
- [Quel mur arrête quelle méthode](https://eternity2.dev/fr/research/why/walls-and-methods/) — La section recherche a deux versants : les murs structurels qui rendent Eternity II difficile, et les algorithmes conçus pour les franchir. Cette page fait le pont : chaque méthode confrontée au mur qu'elle attaque réellement, et le score auquel ce mur l'a arrêtée.
- [Encodages SAT et CSP](https://eternity2.dev/fr/research/build/exact/sat-csp-encodings/) — Écrire le puzzle sous forme de clauses et le confier à un solveur industriel : le geste évident, tenté dès 2008. Pourquoi les solveurs complets s'enlisent sur le plateau complet, et où leurs verdicts gardent toute leur valeur comme preuves d'impossibilité.
---
# STAGED
> Construire tout le plateau depuis zéro, sans cadre pré-posé, par étapes, en laissant la bordure émerger en dernier des pièces restantes.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/staged/
- Mise à jour: 2026-07-21
- Sujets: construction
- Reproduire: `just research-record-boards`
- Source: Recherche par faisceau (la page-concept du projet) : la primitive de construction par étapes — https://github.com/raphael-anjou/eternity2/blob/main/web/content/research/build/construct/beam-search.mdx
---
Presque tous les solveurs commencent par verrouiller la bordure, parce que la
bordure est la partie la plus contrainte et que l'épingler rétrécit la
recherche. STAGED est une expérience qui refuse cette béquille. Il construit le
plateau par étapes, du haut vers le bas, avec les 256 pièces libres, et ne
s'engage jamais sur une bordure avant la toute fin, où la bordure tombe
simplement de ce qui reste. La question à laquelle il répond : peut-on
atteindre un plateau solide sans jamais s'ancrer à un cadre ?
## Comment ça marche
La construction se déroule en quatre étapes. Les deux premières remplissent la
moitié haute du plateau par une recherche simple et rapide, en mettant de côté
les plateaux partiels qui survivent. Au passage de relais, une estimation
admissible peu coûteuse écarte tout partiel qui ne peut manifestement pas être
bien terminé, de sorte que les étapes suivantes ne travaillent que sur des
départs prometteurs.
La troisième étape fait croître la bande de rangées suivante à partir de ces
survivants. La quatrième est un finisseur exact sur les rangées du bas qui
minimise les non-concordances, et il choisit la bordure du bas en dernier,
contre les pièces encore inutilisées. Le cadre n'est donc pas conçu d'emblée ;
il émerge comme une conséquence de tout ce qui le surplombe.
> **[Figure]** Interactif : la construction étape par étape — interactive: StageBuildDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
## Le résultat
STAGED atteint 436 sur 480 depuis zéro, avec une bordure émergente et les cinq
indices officiels respectés, construit de bout en bout sans aucun cadre sur
lequel s'appuyer. C'est bien en dessous des records, et cet écart est le
constat même : il mesure ce que vaut l'ancrage habituel du cadre-d'abord, et il
a montré que la mécanique sans cadre fonctionne à pleine échelle.
Au passage, il a cerné l'anatomie des tout meilleurs plateaux : ce sont un bloc
parfait couvrant l'essentiel du plateau, plus une fine bande de non-concordances
concentrée sur quelques rangées du haut. C'est cette forme que les constructeurs
ultérieurs cherchent à reproduire délibérément.
## Méthode
Quatre étapes, chacune transmettant ses survivants à la suivante à travers un
filtre admissible.
1. **Faisceaux de la moitié haute (étapes 1–2).** Remplir la moitié haute par
une recherche simple et rapide, en mettant de côté les plateaux partiels qui
survivent. Les 256 pièces sont libres, aucun cadre n'est épinglé.
2. **Passage de relais admissible.** À chaque frontière d'étape, une estimation
*admissible* peu coûteuse (une borne supérieure optimiste sur la meilleure
fin possible) écarte tout partiel qui, de manière prouvable, ne peut pas être
bien terminé. Comme l'estimation ne sous-évalue jamais le score atteignable,
l'élimination est sûre : elle ne retire que les partiels qui ne peuvent pas
gagner.
3. **Croissance de bande (étape 3).** Prolonger les partiels survivants vers le
bas, sur la bande de rangées suivante.
4. **Finisseur exact (étape 4).** Résoudre exactement les rangées du bas, en
minimisant les non-concordances, et *choisir la bordure en dernier* parmi les
pièces restantes. Le cadre n'est pas conçu d'emblée ; il tombe de tout ce qui
le surplombe.
Le résultat est 436 depuis zéro avec une bordure émergente, les cinq indices
respectés, bien en dessous des records, et cet écart est la mesure : il chiffre
ce que vaut l'ancrage habituel du cadre-d'abord. Le sous-produit a compté plus
que le score : STAGED a cerné l'anatomie des meilleurs plateaux, un grand bloc
parfait plus une fine bande de non-concordances sur quelques rangées du haut, la
forme cible que les constructeurs ultérieurs visent délibérément.
## Reproduire
Stochastique (les faisceaux de la moitié haute départagent les égalités de
façon aléatoire), donc une nouvelle exécution ne reproduira pas le plateau
exact ; le plateau 436 versionné est l'artefact de référence et est vérifiable
dans le visualiseur. Le moteur est le producteur par faisceau partagé, exécuté
par étapes pour que la bordure émerge en dernier plutôt que d'être fixée
d'abord. Il ne nécessite ni corpus ni plateau de départ, aussi un répertoire de
support exécutable pour l'ensemble du pipeline par étapes est-il prévu aux côtés
des autres constructeurs depuis zéro.
## Questions ouvertes
Un générateur qui dépenserait délibérément ses non-concordances sur les rangées
du haut, pour garder le reste parfait, peut-il atteindre les 450 sans cadre ?
Quelle part de l'écart de 436 aux records tient à l'ancrage de cadre manquant,
par opposition à la fin de partie plus difficile ? Et une estimation apprise de
la qualité de fin sélectionne-t-elle de meilleurs survivants que l'estimation
admissible peu coûteuse ?
## À lire aussi
- [CLOISTER](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fixer une bordure parfaite, puis explorer l'intérieur en traitant les arêtes de la bordure comme des contraintes dures dès la toute première case.
- [BANDSAW](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/) — Résoudre exactement une bande de rangées en se rejoignant au milieu, pour trouver la vraie meilleure fin et mesurer jusqu'où décider une fin de partie.
- [Recherche en faisceau](https://eternity2.dev/fr/research/build/construct/beam-search/) — Maintenir en vie les K plaquettes partielles les plus prometteuses à la fois et les faire croître case par case. La recherche en faisceau est le moteur des constructeurs ex nihilo de ce projet, et une illustration limpide des raisons pour lesquelles la largeur seule s'enlise dans les profondeurs de l'intérieur.
- [Le cadre fluide](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/fluid-frame/) — Une bordure parfaite de 60 pièces n'est pas un objet rigide. Chaque cadre entièrement apparié admet exactement 45 échanges libres à coût de bordure nul ; un tiers des cadres parfaits ne peuvent même pas démarrer l'intérieur, et un seul échange libre ranime chacun d'eux.
---
# L'étude de la réparation
> La jumelle de l'étude DFS, pour l'autre manière d'attaquer Eternity II : détruire une partie d'un plateau, la reconstruire, garder le changement s'il aide. Une question, posée avec soin. Que rapporte chaque décision de cette boucle : quelle région détruire, comment la reconstruire, quand garder un mouvement, quand redémarrer, et de quel plateau partir ?
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/repair-study/
- Mise à jour: 2026-07-16
- Sujets: local-search, search-space, speed
- Reproduire: `just experiments repair-study`
- Source: Moteur exécutable + résultats commités + scripts (le répertoire de référence de cette étude) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/repair-study
---
Il existe deux façons concrètes d'attaquer Eternity II. La première consiste à
construire un plateau case par case et à revenir en arrière lorsqu'il échoue ;
l'[étude DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/) la décortique.
La seconde consiste à tenir un plateau entier et à le *réparer* : arracher une
région, la reconstruire, garder le changement s'il a aidé, et recommencer. La
réparation est l'ultime étape des chaînes construire-puis-affiner derrière les
plateaux quasi-record de ce projet, et c'est la méthode vers laquelle la
littérature se tourne dès qu'un plateau est trop bon pour qu'un déplacement d'une
seule pièce l'améliore. Cette étude décortique la boucle de réparation comme sa
jumelle a décortiqué le retour arrière : une décision à la fois, sur les mêmes
dix variantes à coins épinglés, un cœur, soixante secondes par exécution. Le
score maximal est de 480 arêtes appariées.
La boucle elle-même est courte. Une itération, parcourue ci-dessous.
> **[Figure]** Une itération de destruction-réparation, étape par étape — interactive: RepairLoopDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
Le but n'est pas de gagner. La plupart des variantes terminent entre 360 et 379,
et celle qui fait le mieux (446) y parvient en partant d'un plateau solide obtenu
par retour arrière plutôt que d'un plateau construit, ce qui constitue en soi la
leçon centrale de l'étude. Réparer un simple plateau glouton sur un cœur pendant
une minute est peu de chose à côté des chaînes qu'emploient les records ; ce que
l'étude mesure, c'est *ce que vaut chaque décision de la boucle*, en changeant
une chose à la fois et en mesurant le résultat avec le même scoreur canonique
qu'utilisent l'étude DFS et le reste du site.
## La famille, et le classement
Cinq familles, disposées de sorte que les voisines ne diffèrent que par une seule
décision, toutes issues d'une même boucle d'ancrage épurée (départ glouton,
destruction des cases dépareillées, recomplétion gloutonne, conservation du
résultat sauf s'il perd du score, jamais de redémarrage). Le **plateau de départ**
change le point où la boucle commence. L'**opérateur de destruction** change quelles
cases chaque itération soulève. La **réparation** change la manière dont le trou
est reconstruit. L'**acceptation** change le moment où un mouvement non améliorant
est conservé. Le **redémarrage** change ce qui se passe une fois que la boucle
s'enlise.
> **[Interactive: RepairStudyLeaderboard]** Rendered on the canonical page (link above); not shown in this markdown export.
## Ce que l'étude a trouvé
- **Partir d'un plateau solide obtenu par retour arrière remporte l'étude
entière.** La variante qui consacre ses vingt premières secondes à exécuter le
break-DFS de l'étude DFS, puis répare le plateau à un peu plus de 440 qui en
résulte, termine la plus haute de toutes, avec une moyenne de 446 (meilleur
résultat 449). La réparation n'ajoute qu'une poignée d'arêtes par-dessus ce
plateau, mais le plateau dont elle part vaut cent points de plus qu'une
construction gloutonne, et cela se répercute jusqu'au bout. C'est la division du
travail construire-puis-affiner qu'emploient les records, reproduite de bout en
bout sur un cœur en une minute.
- **Parmi les variantes à départ glouton, la destruction aléatoire l'emporte et
cibler les défauts se retourne contre soi.** Une destruction aveugle à la
géométrie qui soulève douze cases *aléatoires* termine à une moyenne de 402
(meilleur résultat 409) et continue de s'améliorer tard dans l'exécution. Tout
opérateur qui cible les cases dépareillées termine en dessous, et plus il se
fixe précisément, plus il fait mal : l'ancre des cases dépareillées atterrit à
366, une destruction par composante connexe plus large à 350. Sur un plateau
médiocre, il y a de l'amélioration disponible partout, si bien qu'explorer vaut
mieux qu'attaquer là où ça fait déjà mal. Cela s'inverse sur un plateau
quasi-record, où les quelques défauts restants sont la seule chose qu'il reste à
corriger.
- **Le plateau de départ fixe le plancher.** Une construction gloutonne démarre
autour de 348 ; une construction aléatoire démarre près de 18, et bien que la
boucle la fasse gagner un spectaculaire 308 points, elle termine tout de même en
dessous de là où le départ glouton *commençait*. La construction est le levier,
la réparation est le polissage.
- **La règle d'acceptation est l'autre véritable levier.** Le recuit simulé, qui
descend occasionnellement pour quitter un plateau, est la règle d'acceptation la
plus forte avec une nette marge (moyenne 377, meilleur résultat 394), bien devant
une montée de colline stricte (361). Le degré de tolérance accordé à un mouvement
non améliorant vaut un écart de seize points sur la même boucle.
- **Les raffinements astucieux ne rapportent rien ici.** Une destruction de bande
entière est inerte (zéro amélioration sur neuf instances sur dix). Une
recomplétion *exacte* bornée d'un petit trou ne bat pas une recomplétion
gloutonne simple du même trou, un résultat négatif net : ses reconstructions
localement parfaites coûtent assez d'itérations pour que davantage de
reconstructions gloutonnes moins chères aillent tout aussi loin. Ni un coup de
pied aléatoire ni un retour-au-meilleur en cas d'enlisement ne décollent le score
de la référence sans redémarrage.
Chacun de ces points a son propre traitement : la manière dont le moteur est
construit et la signification de chaque statistique avancée sont sur la [page
méthode](/fr/research/lab/experiments/raphael-anjou/repair-study/method/), et les
comparaisons de destruction, réparation, acceptation, redémarrage et plateau de
départ sont détaillées sur la [page des
résultats](/fr/research/lab/experiments/raphael-anjou/repair-study/findings/).
## Comment lire les chiffres
Chaque plateau est re-scoré par l'unique scoreur canonique, et le score
auto-déclaré d'aucun moteur n'est cru. La boucle maintient son score de manière
incrémentale à mesure qu'elle place et soulève des pièces, mais le nombre publié
est toujours un re-score canonique frais du plateau produit. Le débit est reporté
en itérations de réparation par seconde et n'est **jamais comparé d'une famille à
l'autre**, car une itération qui exécute une recomplétion exacte n'est pas la même
unité de travail qu'une itération qui exécute un remplissage glouton.
L'axe à surveiller est le *plateau d'enlisement* : l'itération à laquelle le
meilleur global s'est amélioré pour la dernière fois, face au nombre total
d'itérations exécutées. Quand la première est de quelques milliers et le second de
centaines de milliers, l'exécution a trouvé sa réponse tôt puis a rabâché le même
bassin pour le reste de la minute. Cet écart est la forme mesurée d'une
observation de longue date sur ce casse-tête : la destruction-réparation est une
superbe exploratrice de bassin et ne s'échappe pour ainsi dire jamais du bassin où
elle atterrit.
Tout l'appareillage (le moteur, les dix variantes, les résultats par exécution
commités et les scripts de la grille) réside sous le [répertoire de
référence](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/repair-study)
de l'étude, et `just experiments repair-study` reconstruit le moteur et réexécute
toute la grille. Le plateau, le scoreur et la couche d'E/S proviennent d'une
[bibliothèque
partagée](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/common)
qu'utilise aussi l'étude DFS, de sorte qu'un plateau réparé et un plateau obtenu
par retour arrière sont scorés par exactement le même code.
## Pages de cette section
- [Comment l'étude de la réparation est construite](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/repair-study/method/) — Le moteur derrière l'étude sur la réparation : une unique boucle composable de destruction-réparation où une variante est un changement déclaré par rapport à un parent, l'IO et le scoreur partagés avec l'étude DFS, une carte des désaccords maintenue de façon incrémentale, et la définition de chaque statistique que l'étude fait ressortir.
- [Ce que l'étude de la réparation a montré](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/repair-study/findings/) — Les cinq comparaisons au cœur de l'étude sur la réparation, décortiquées : la destruction aléatoire aveugle l'emporte tandis que tout opérateur ciblant les conflits perd ; la construction fixe le plancher ; le recuit simulé est la règle d'acceptation la plus forte ; et les raffinements astucieux (recharge exacte, redémarrages) ne rapportent rien à ce budget.
## À lire aussi
- [Les expériences de Raphaël Anjou](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/) — Un carnet d'expériences de recherche sur Eternity II, organisé autour des moteurs partagés qui les font tourner, des pipelines de combinaison qui courent après le score, de quatre études qui décortiquent un paradigme de recherche une décision à la fois, et de résolutions exactes de fin de partie. Chacune expose son idée, son meilleur plateau et les questions qu'elle laisse ouvertes. La meilleure atteint 463 sur 480.
- [L'étude DFS](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/) — Une seule question, posée avec soin : parmi les backtrackers en profondeur d'abord pour Eternity II, qu'apporte réellement chaque ordre de remplissage, chaque heuristique et le mécanisme de rupture ? Une famille de backtrackers écrits de zéro, séparés chacun par un seul changement, exécutés sur les mêmes dix variantes à coins fixés, sur un seul cœur, pendant soixante secondes.
- [Recherche locale et ALNS](https://eternity2.dev/fr/research/build/local-search/local-search-alns/) — Détruire une partie du plateau, la reconstruire en mieux, et laisser l'algorithme apprendre quelles démolitions rapportent. La recherche à grand voisinage adaptative est le meilleur outil de finition de ce projet, et la démonstration la plus nette du mur où la finition s'arrête.
---
# Ce que l'étude de la réparation a montré
> Les cinq comparaisons au cœur de l'étude sur la réparation, décortiquées : la destruction aléatoire aveugle l'emporte tandis que tout opérateur ciblant les conflits perd ; la construction fixe le plancher ; le recuit simulé est la règle d'acceptation la plus forte ; et les raffinements astucieux (recharge exacte, redémarrages) ne rapportent rien à ce budget.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/repair-study/findings/
- Mise à jour: 2026-07-16
- Sujets: local-search, search-space, speed
- Source: Résultats par exécution versionnés (results.jsonl) et rapport par famille (report.md) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/repair-study/results
---
Cinq comparaisons portent l'[étude sur la réparation](/fr/research/lab/experiments/raphael-anjou/repair-study/).
Chacune isole une décision en maintenant les quatre autres fixes sur une boucle de
référence simple : départ glouton, destruction des cellules en défaut, recharge
gloutonne, conservation du résultat sauf s'il perd du score, jamais de redémarrage.
Tous les scores sont le nombre moyen d'arêtes concordantes sur les dix variantes à
coins épinglés, mono-cœur, soixante secondes. Le débit d'itérations n'est jamais
comparé d'une famille à l'autre.
## Le plateau de départ : le levier que la boucle ne peut remplacer
Ne changez que le plateau depuis lequel la boucle démarre, et tout le reste de
l'exécution en découle. Une construction gloutonne démarre autour de 348 et la
boucle la porte à une moyenne de 366. Un plateau aléatoire démarre près de 18 et la
boucle le porte de 308 points, énormes, jusqu'à une moyenne de 326. Ce gain plus
important n'est pas la boucle qui fait mieux ; c'est la boucle qui fait mal le travail
de la construction. Le départ aléatoire, après des millions d'itérations, termine
encore en dessous de là où le départ glouton *commençait*.
C'est le premier résultat de l'étude, et le plus solide : **la construction est le
levier, la réparation est le polissage.** Une construction gloutonne « couleur la
plus rare d'abord » (l'heuristique de Selby et Riordan selon laquelle une couleur
rare doit être dépensée là où elle est forcée) démarre un peu plus haut encore et
termine à une moyenne de 373, le meilleur des départs *gloutons*.
La preuve la plus nette de ce point est de partir d'un plateau réellement fort plutôt
que d'un plateau glouton. La dernière variante de plateau de départ confie à la boucle
un plateau construit par le break-DFS de l'[étude DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/) :
l'exécution passe ses vingt premières secondes à revenir en arrière jusqu'à un plateau
autour de 440, puis le répare pendant les quarante restantes. Ce départ se situe cent
points au-dessus d'une construction gloutonne, et il se propage directement jusqu'à
l'arrivée. C'est la variante au plus haut score de toute l'étude, à une moyenne de 446
(meilleur 449), bien au-dessus des 402 de la boucle à destruction aléatoire, et elle
tranche la question construire-puis-raffiner autour de laquelle tourne le reste de
l'étude : la réparation *ajoute* bien quelques arêtes par-dessus un plateau fort obtenu
par backtracking, mais seulement quelques-unes, et le plateau dont elle part décide
presque tout. C'est exactement la division du travail qu'emploient les records, et
cette étude la reproduit de bout en bout sur un cœur en une minute : un backtracker
pour construire un bon plateau, puis une boucle de réparation pour en extraire les
dernières arêtes.
## L'opérateur de destruction : attaquer les cassures peut se retourner contre soi
Fixons maintenant le départ glouton et ne changeons que les cellules que chaque
itération soulève. C'est l'axe qui porte le résultat le plus surprenant de l'étude.
> **[Figure]** Les quatre opérateurs de destruction, sur un même plateau aux jointures rompues — interactive: DestroyOperatorDiagram. Rendered on the canonical page (link above); not shown in this markdown export.
- **Une destruction aléatoire aveugle à la géométrie remporte la comparaison des
opérateurs, à une moyenne de 402 (meilleur 409).** En soulevant douze cellules
*aléatoires* au lieu des cellules rompues, elle continue d'échantillonner de nouvelles
régions du plateau, accepte près des trois quarts de ses mouvements, et son meilleur
score continue de s'améliorer tard dans l'exécution : sa dernière amélioration survient
au-delà de trois millions d'itérations, là où toute variante pilotée par les conflits a
gelé depuis longtemps. C'est la meilleure de toutes les variantes qui partent d'un plateau
glouton (seul le départ ensemencé par le DFS, un tout autre levier, termine plus haut).
- **Tout opérateur piloté par les conflits termine en dessous d'elle, et plus il se
fixe sur les cassures, moins il réussit.** L'ancre « cellules en défaut », qui soulève
jusqu'à une douzaine des cellules rompues, atteint en moyenne 366 et stagne tôt : elle
arrache le même enchevêtrement groupé, le reconstruit gloutonnement dans presque la même
disposition, et son meilleur score cesse de bouger en quelques milliers d'itérations.
L'opérateur « composante plus halo », qui soulève tout un enchevêtrement connexe (un trou
bien plus grand), fait pire encore, à 350, et son meilleur ne s'améliore plus après
l'itération 211 : un trou de cette taille confie à la recharge gloutonne un sous-problème
qu'elle ne sait pas améliorer, de sorte que presque rien n'est jamais conservé.
- **Une destruction de bande entière est inerte.** Soulever les deux rangées comptant le
plus de cassures laisse à la recharge gloutonne un sous-problème presque aussi difficile
que le casse-tête lui-même ; sur neuf des dix instances, elle ne fait *aucune* amélioration
sur toute la minute, de sorte que le score reporté est simplement son plateau de départ.
Le schéma est net et mérite d'être énoncé clairement : sur ce départ glouton médiocre,
plus un opérateur cible précisément les cassures existantes, moins il réussit, et la
destruction aléatoire aveugle l'emporte. C'est l'inverse de l'intuition naturelle, et
de ce qui fonctionne sur un plateau *proche du record*, où tout le plateau est proche
de l'optimum et où le réglage de la communauté a jugé les opérateurs pilotés par les
conflits et par composante les plus précieux, précisément parce que les quelques défauts
restants sont la seule chose qu'il reste à corriger. Cette étude n'atteint jamais ce
régime. Soixante secondes sur un plateau médiocre laissent une marge d'amélioration large
partout, et là un opérateur qui rattaque sans cesse le même amas rompu, ou qui arrache un
trou trop grand pour être bien reconstruit, perdent tous deux face à un opérateur qui se
contente d'essayer sans relâche de nouvelles petites régions. Le constat n'est pas « la
destruction pilotée par les conflits est mauvaise » mais « l'opérateur gagnant dépend de la
qualité déjà atteinte par le plateau, et sur un plateau médiocre, explorer bat à la fois se
fixer et sur-détruire ».
## Réparation : comment le trou est reconstruit
Fixons la destruction et ne changeons que la recharge. Rompre les ex æquo exacts de score
de la recharge gloutonne par une pièce ensemencée, plutôt que de façon déterministe, ajoute
un peu d'exploration et aide légèrement, jusqu'à une moyenne de 365. La comparaison la plus
tranchante est gloutonne contre recharge *exacte*, et elle doit être montée avec soin pour
constituer un test propre à un seul axe : la recharge exacte ne paie que lorsque le trou est
assez petit pour être exploré, aussi l'étude l'associe-t-elle à une petite destruction (au
plus six cellules en défaut) et la compare-t-elle à la *même* petite destruction rechargée
gloutonnement, de sorte que la seule chose qui change entre les deux est la recharge. Montée
ainsi, la recharge exacte tourne à chaque itération plutôt que de retomber sur la gloutonne,
reconstruisant chaque petit trou à son véritable optimum.
Le résultat est un franc négatif. La recharge exacte (moyenne 360) ne bat **pas** la
recharge gloutonne du même petit trou (moyenne 363) ; si tant est qu'elle soit une nuance
en retrait. Deux choses l'expliquent. La recharge exacte accepte presque chaque itération,
car une reconstruction localement optimale d'un trou de six cellules ne fait presque jamais
baisser le score, si bien que la boucle dérive latéralement au lieu de grimper. Et elle paie
cette optimalité locale à environ un tiers du nombre d'itérations, si bien que sur une minute
fixe elle explore moins le plateau. Sur ce casse-tête, à ce budget, une reconstruction
localement parfaite d'une région minuscule ne vaut pas ce qu'elle coûte : les reconstructions
moins chères et légèrement moins bonnes de la recharge gloutonne, exécutées plus souvent, vont
tout aussi loin. C'est la même question « le débit de nœuds n'est pas le score » que soulèvent
les moteurs heuristiques de l'étude DFS, et ici la réponse penche du côté d'itérations plus
nombreuses et moins chères, ce qui mérite d'être consigné précisément parce que l'on suppose
si souvent le contraire.
## Acceptation : à quel point on autorise un mouvement non améliorant, cela compte
Fixons la boucle et ne changeons que le moment où un candidat non améliorant est conservé.
Des cinq axes, c'est celui qui déplace le plus le score après l'opérateur de destruction.
- **Une montée de colline stricte, qui ne conserve que les améliorations strictes, est la
plus faible, à une moyenne de 361.** Refuser tout mouvement latéral la verrouille dans le
premier bassin qu'elle trouve ; son taux d'acceptation est essentiellement nul.
- **Autoriser les mouvements égaux ou meilleurs (l'ancre) fait mieux, à 366.** Les mouvements
latéraux lui permettent de dériver à travers les plateaux à score égal qui dominent ce
paysage.
- **Une règle de recuit simulé avec refroidissement est l'acceptation la plus forte, avec une
marge nette, à 377 (meilleur 394), parmi les meilleures des variantes à départ glouton.**
Autoriser occasionnellement des mouvements *aggravants* au début, puis refroidir, lui permet
de quitter un plateau où la simple dérive latérale est piégée, et son meilleur score continue
de s'améliorer jusqu'aux environs de l'itération vingt mille au lieu de geler dans les
premiers milliers. Une règle d'acceptation tardive, qui compare au score de quelques dizaines
d'itérations plus tôt, se place entre les deux à 369.
Ainsi la règle d'acceptation est ici un vrai levier, non un détail : du strict au recuit, c'est
un écart de seize points sur la même boucle (361 à 377). Cela mérite d'être énoncé face à une
observation connue du propre réglage ALNS de la communauté : sur une large plage de températures
de recuit, les scores finaux étaient essentiellement identiques. Les deux ne sont pas en
contradiction. Ce réglage avait été fait sur des plateaux proches du record, où le paysage est
une mer de plateaux à score égal et où toute température accepte presque tout ; le plateau de
départ médiocre de cette étude conserve une vraie structure en descente à exploiter, de sorte
que le fait que la règle veuille bien descendre pour échapper à un plateau importe réellement.
Quelle règle d'acceptation l'emporte, comme quel opérateur de destruction l'emporte, dépend de
la qualité déjà atteinte par le plateau.
## Redémarrage : aucune perturbation ne fait bouger l'aiguille
Fixons la boucle et ne changeons que ce qui se passe une fois qu'elle stagne. Ne rien faire
laisse l'exécution ratisser le même bassin pour le reste de la minute. Un *coup* aléatoire, qui
déplace et recharge aléatoirement une vingtaine de cellules quand le meilleur n'a pas bougé
depuis un moment, et un *retour au meilleur plateau atteint*, qui rattaque le titulaire, sont
les deux perturbations testées. Toutes deux se situent à un point près de l'ancre sans
redémarrage (365 et 365, contre 366 pour l'ancre). C'est un net résultat nul : greffer un
détecteur de stagnation et une perturbation sur la boucle glouton-défaut ne l'aide pas, car la
perturbation soit jette la structure qui rendait le plateau bon (le coup), soit revient à un
plateau sur lequel le même opérateur a déjà stagné (le retour). Ni l'une ni l'autre ne
transforme la boucle en évadeuse de bassin ; sur ce casse-tête, s'échapper d'un bassin exige un
mouvement différent de perturber-et-réparer, ce qu'expliquent précisément le
[mur de rigidité](/fr/research/why/rigidity-wall/) et la
[structure des σ-cycles](/fr/research/why/sigma-cycles/).
## Le fil conducteur
Deux thèmes traversent les cinq comparaisons. Le premier est que **les deux décisions qui
déplacent le score sont l'opérateur de destruction et la règle d'acceptation**, et toutes deux
le déplacent dans la même direction contre-intuitive : les choix gagnants sont ceux qui gardent
la boucle en *exploration* plutôt qu'en *exploitation*. La destruction aléatoire bat tout
opérateur qui cible les cassures ; le recuit, qui descend pour quitter un plateau, bat toute
règle qui ne bouge que latéralement ou vers le haut. Raffiner la recharge et greffer un
redémarrage, les deux décisions qui tentent d'être plus astucieuses au sujet d'une région où la
boucle est déjà bloquée, ne rapportent rien.
Le second est pourquoi explorer gagne ici tandis que se fixer gagne sur un plateau proche du
record : **la boucle de réparation est une exploratrice de bassin, non une évadeuse de bassin.**
Sur un plateau médiocre il y a une large structure en descente partout, de sorte que les
mouvements qui en couvrent davantage l'emportent ; sur un plateau proche du record il n'en reste
aucune, hormis un unique cycle imbriqué, de sorte que les mouvements qui le ciblent précisément
l'emportent. Aucun des deux régimes ne permet à perturber-et-réparer de s'échapper d'un bassin
une fois qu'elle y est. Voilà pourquoi les pipelines construire-puis-raffiner qui atteignent les
meilleurs plateaux de ce projet divisent le travail comme ils le font : un producteur constructif
fort pour choisir un bon bassin, et la réparation comme dernier kilomètre à l'intérieur, jamais
sommée d'en sortir.
## À lire aussi
- [L'étude de la réparation](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/repair-study/) — La jumelle de l'étude DFS, pour l'autre manière d'attaquer Eternity II : détruire une partie d'un plateau, la reconstruire, garder le changement s'il aide. Une question, posée avec soin. Que rapporte chaque décision de cette boucle : quelle région détruire, comment la reconstruire, quand garder un mouvement, quand redémarrer, et de quel plateau partir ?
- [Comment l'étude de la réparation est construite](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/repair-study/method/) — Le moteur derrière l'étude sur la réparation : une unique boucle composable de destruction-réparation où une variante est un changement déclaré par rapport à un parent, l'IO et le scoreur partagés avec l'étude DFS, une carte des désaccords maintenue de façon incrémentale, et la définition de chaque statistique que l'étude fait ressortir.
- [Recherche locale et ALNS](https://eternity2.dev/fr/research/build/local-search/local-search-alns/) — Détruire une partie du plateau, la reconstruire en mieux, et laisser l'algorithme apprendre quelles démolitions rapportent. La recherche à grand voisinage adaptative est le meilleur outil de finition de ce projet, et la démonstration la plus nette du mur où la finition s'arrête.
---
# Comment l'étude de la réparation est construite
> Le moteur derrière l'étude sur la réparation : une unique boucle composable de destruction-réparation où une variante est un changement déclaré par rapport à un parent, l'IO et le scoreur partagés avec l'étude DFS, une carte des désaccords maintenue de façon incrémentale, et la définition de chaque statistique que l'étude fait ressortir.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/repair-study/method/
- Mise à jour: 2026-07-16
- Sujets: local-search, speed
- Source: L'espace de travail du moteur (repair-engine, repair-run) sur la bibliothèque partagée e2-core / e2-io — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/repair-study/engine
---
Cette page décrit l'appareillage derrière l'[étude sur la réparation](/fr/research/lab/experiments/raphael-anjou/repair-study/) :
comment le moteur est construit, pourquoi une nouvelle variante est peu coûteuse à
ajouter, et ce que signifie chaque nombre des résultats. Elle est le jumeau
délibéré de la
[page méthode de l'étude DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/method/),
et elle repose sur la *même* bibliothèque partagée : le plateau, le jeu de
pièces, l'unique scoreur canonique et le contrat d'IO proviennent tous d'un crate
`e2-core` / `e2-io` commun qu'utilise aussi l'étude sur le backtracking. Un
plateau réparé et un plateau issu du backtracking sont donc évalués par le code
identique, ce qui permet aux nombres des deux études de se placer sur un même axe.
## Une variante est un changement déclaré par rapport à un parent
Chaque algorithme de l'étude est la *même* boucle de destruction-réparation,
paramétrée par cinq choix indépendants :
- **plateau de départ** : le plateau à partir duquel la boucle commence
(aléatoire, construction gloutonne, ou construction gloutonne priorisant la
couleur la plus rare) ;
- **opérateur de destruction** : quelles cellules chaque itération retire
(aléatoires, les cellules en désaccord, la pire bande de lignes, ou une
composante connexe de désaccords plus son halo) ;
- **réparation** : comment le trou est comblé (glouton le plus contraint d'abord,
le même avec départage bruité, ou un remplissage exact borné pour les petits
trous) ;
- **acceptation** : si un candidat remplace le plateau de travail (garder si ce
n'est pas pire, améliorations strictes uniquement, recuit simulé, ou acceptation
différée) ;
- **redémarrage** : ce qui se produit lors d'un blocage (rien, une secousse
aléatoire, ou un retour au meilleur plateau obtenu jusque-là).
Une variante est un petit enregistrement nommant ces cinq choix, accompagné du
**parent dont elle dérive et d'une description en une ligne de l'unique changement
qu'elle ajoute**. Ajouter une variante revient à ajouter un enregistrement au
registre, sans nouveau code de boucle sauf si l'idée constitue une stratégie
véritablement nouvelle. La matrice « quoi s'empile sur quoi » de la page des
résultats est générée à partir de ces descriptions, de sorte qu'elle ne peut pas
diverger du code qui a réellement tourné.
## La carte des désaccords, maintenue de façon incrémentale
Un backtracker construit un plateau à partir de rien ; une boucle de réparation
détient toujours un plateau *complet* et le modifie. Les cellules qui valent la
peine d'être attaquées sont celles qui touchent une arête cassée ; le moteur tient
donc à jour, par cellule, un décompte vivant des arêtes intérieures cassées qui
lui sont incidentes. Poser ou retirer une pièce ne met à jour que les arêtes
autour de cette seule cellule, jamais tout le plateau, si bien qu'un opérateur de
destruction guidé par les conflits peut demander « quelles cellules touchent un
désaccord ? » sans réexaminer l'ensemble. Le score courant est tenu de la même
manière : chaque placement l'ajuste en fonction de la poignée de coutures qui ont
changé. Un rebalayage complet a lieu exactement une fois, lorsque le plateau de
départ est construit ; à partir de là, la boucle est incrémentale. C'est ce qui
rend possibles des centaines de milliers d'itérations en soixante secondes, et
c'est la même discipline que la
[page théorique sur l'ALNS](/fr/research/build/local-search/local-search-alns/) décrit
comme maintenir la destruction à un coût proportionnel au trou, non au plateau.
## Le scoreur est l'unique source de vérité
Le score auto-déclaré d'aucun moteur n'est digne de confiance. Le score
incrémental de la boucle est un dispositif de performance ; le nombre *publié* est
toujours un re-score canonique frais du plateau de sortie, à travers le même
scoreur qu'utilisent le site et l'étude DFS (arêtes appariées, non bordurières,
adjacences intérieures, comptées vers la droite et vers le bas par cellule). Un
test vérifie que le score incrémental et le score canonique concordent après des
milliers de poses-et-retraits aléatoires, afin que l'on puisse faire confiance au
chemin rapide pour suivre la vérité plutôt que de s'en écarter.
## Les statistiques que l'étude fait ressortir
Pour chaque exécution, le moteur enregistre - et les résultats transportent
jusqu'à la page :
- **score final** : les arêtes canoniquement appariées (sur 480) du meilleur
plateau trouvé.
- **gain** : le score final moins le score du plateau de départ. Cela isole la
contribution propre de la boucle de réparation par rapport à la construction
dont elle est partie : une variante qui démarre haut peut n'ajouter que peu et
finir tout de même haut, et c'est le gain qui distingue les deux.
- **le blocage (dernière itération record vs itérations totales)** : l'itération à
laquelle le meilleur global s'est amélioré pour la dernière fois, comparée au
nombre d'itérations que le budget a permis. C'est l'axe phare de l'étude :
lorsque le premier est très en dessous du second, l'exécution a trouvé sa
réponse tôt puis n'a plus rien bougé.
- **taux d'acceptation** : la fraction d'itérations conservées par la règle
d'acceptation. Un taux proche de zéro signifie que la boucle propose des
changements qu'elle rejette presque toujours, souvent le signe qu'elle
ré-attaque la même région.
- **taille moyenne de destruction** : cellules retirées par itération, afin qu'un
opérateur à grand trou ne soit pas comparé en silence à un opérateur à petit
trou.
- **itérations par seconde** : rapportées par variante et **jamais comparées entre
familles**, car une itération exécutant un remplissage exact n'est pas la même
unité de travail qu'une itération exécutant un remplissage glouton.
- **redémarrages** : perturbations déclenchées, zéro pour une variante sans
politique de redémarrage.
La page trace aussi une **courbe de convergence** pour quelques variantes
représentatives : le meilleur score obtenu jusque-là, échantillonné toutes les
deux cents itérations, à mesure qu'une exécution typique progresse. C'est l'image
la plus claire du blocage : la courbe monte fortement, puis s'aplatit tandis que
le compteur d'itérations continue de grimper.
## Honnêteté sur la vitesse du moteur glouton
Comme le moteur MRV de l'étude DFS, la boucle de réparation ici est écrite d'abord
pour la clarté. Le remplissage glouton réexamine le réservoir de pièces restantes
pour chaque cellule qu'il remplit, plutôt que de maintenir des listes de candidats
de façon incrémentale ; ses itérations par seconde sont donc celles de ce moteur
au code propre, non le meilleur qu'un noyau de réparation optimisé pourrait
atteindre. Le classement par score n'en dépend pas, puisque le débit est un axe
distinct jamais mêlé à la comparaison des scores, mais les cadences d'itération
doivent être lues comme celles de ce moteur, non comme le plafond de la
destruction-réparation.
## Ce que cette étude se garde délibérément d'affirmer
Il s'agit d'une étude de la boucle de réparation *nue*, une décision à la fois, à
un petit budget fixe. Ce n'est pas le pipeline record : les plateaux qui
atteignent le milieu des 450 et au-delà combinent un producteur constructif
puissant, des exécutions plus longues, et la réparation comme polissage final, et
plusieurs des observations sur les opérateurs se liraient ici différemment sur un
plateau proche du record que sur le départ glouton médiocre dont la boucle est
issue. Là où un résultat dépend de la qualité du plateau de départ, la page des
observations le précise. Le réglage propre de la communauté a par exemple trouvé
que les opérateurs guidés par les conflits et par composantes sont précieux
précisément sur des plateaux quasi optimaux, où les rares désaccords restants sont
la seule chose qu'il reste à corriger - le régime que les courtes exécutions de
cette étude n'atteignent jamais.
## Reproductibilité
Le moteur, les dix variantes, les résultats par exécution versionnés et les
scripts de grille vivent tous sous le
[répertoire support](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/repair-study)
de l'étude. `just experiments repair-study` reconstruit le moteur et relance toute
la grille ; l'exécution est déterministe à une graine fixe, et l'agencement des
coins est le seul axe de diversité.
## À lire aussi
- [L'étude de la réparation](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/repair-study/) — La jumelle de l'étude DFS, pour l'autre manière d'attaquer Eternity II : détruire une partie d'un plateau, la reconstruire, garder le changement s'il aide. Une question, posée avec soin. Que rapporte chaque décision de cette boucle : quelle région détruire, comment la reconstruire, quand garder un mouvement, quand redémarrer, et de quel plateau partir ?
- [Ce que l'étude de la réparation a montré](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/repair-study/findings/) — Les cinq comparaisons au cœur de l'étude sur la réparation, décortiquées : la destruction aléatoire aveugle l'emporte tandis que tout opérateur ciblant les conflits perd ; la construction fixe le plancher ; le recuit simulé est la règle d'acceptation la plus forte ; et les raffinements astucieux (recharge exacte, redémarrages) ne rapportent rien à ce budget.
- [Recherche locale et ALNS](https://eternity2.dev/fr/research/build/local-search/local-search-alns/) — Détruire une partie du plateau, la reconstruire en mieux, et laisser l'algorithme apprendre quelles démolitions rapportent. La recherche à grand voisinage adaptative est le meilleur outil de finition de ce projet, et la démonstration la plus nette du mur où la finition s'arrête.
---
# L'échelle de tailles
> Un banc qui fait tourner n'importe quel solveur, tel quel, sur des plateaux plantés entièrement résolubles à N = 8, 10, 12, 14, chacun avec un plafond prouvé de 2N(N-1) : la taille d'effondrement d'une méthode se mesure avant de passer des semaines sur le vrai 16×16.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/scaling-ladder/
- Mise à jour: 2026-07-22
- Sujets: structure, backtracking
- Reproduire: `just research-scaling-ladder`
- Source: Ansótegui et al., la transition de phase des puzzles d'appariement d'arêtes (contexte du seuil de difficulté) — https://doi.org/10.1007/978-3-540-85958-1_42
---
Le vrai 16×16 est un endroit coûteux pour découvrir qu'une méthode ne passe
pas à l'échelle. L'échelle de tailles pose d'abord une question moins chère :
elle fait tourner n'importe quel solveur, sans le modifier, sur des plateaux
plantés entièrement résolubles à N = 8, 10, 12 et 14, chacun avec un plafond
prouvé, et lit la taille à laquelle la méthode s'effondre. Les deux solveurs
de référence livrés se séparent nettement et se dégradent de façon monotone
en montant l'échelle : c'est précisément la lecture que le banc existe pour
produire.
## Fonctionnement
Chaque barreau est construit à rebours depuis une solution plantée, donc il
est résoluble par construction, et sa cible de résolution complète vient
gratuitement : une grille N×N compte exactement 2N(N-1) adjacences internes,
le plateau planté les apparie toutes, et aucun plateau ne peut faire mieux.
Les quatre barreaux portent des plafonds de 112, 180, 264 et 364. Aucun
solveur externe n'est requis pour certifier quoi que ce soit ; avant tout
solveur, le banc re-score le plateau planté à travers le même scoreur
(bordure exclue) que les solveurs affronteront et vérifie qu'il atteint
exactement le plafond. Cette assertion est active : un premier brouillon
avait placé un petit plateau dans une grille de largeur 16, obtenu 28/60, et
s'est fait prendre par elle.
Cinq cases de la solution sont épinglées comme indices à la manière du puzzle
officiel, chaque solveur reçoit un budget mural fixe de 12 secondes sur un
seul cœur, et chaque plateau rendu est re-scoré indépendamment depuis ses
arêtes ; l'auto-déclaration du solveur n'est jamais utilisée. Une ligne JSON
par (solveur, N, graine) enregistre le score vérifié, le plafond, leur
rapport, si la résolution est complète, le nombre de nœuds et un lien vers le
plateau. Chaque plateau s'ouvre dans le [visualiseur](/viewer/) : voici un
[barreau planté N=8](/viewer/?puzzle=ladder_n8_c22_s1&puzzle_size=8&board_edges=adcaabtdacrbafkcabofabmbaflbaadfcnfatrunrsgrkwisohuwmgvhlqjgdadqfmcaupimgnupikonujvkvrnjjoordadocheaikrhujikokujvvlknqpvopsqdaepehbarglhinwgulsnltnlpkmtspskeaepbidaljqiwvojstivnwhtmjpwstljeaetdhbaqmvhoqwmimrqhqgmpsuqlgtseadgbeaavbaewfabrfafgcafucactcacdaac)
et le [meilleur partiel N=14](/viewer/?puzzle=ladder_n14_c22_s5&puzzle_size=14&board_edges=abdaaclbafncadkfabqdafibacufadhcafkdadhfacqdaewcacueaadcducalijunowikwsoqjkwihpjuvjhhnnvkqonhihqqqqiwmsqunumdaenctbajrptwrlrsisrkroipwtrjpjwnlopouvlhvnuqrtvsjgruttjeaftbpbapmnplkwmsiskothitsltjlosovvlvgpvnqhgtosqgkootrgkfaerbwbanslwwnkssghnhiggljmiotjjvmttpmgmhwgmsrvwokhrgpukeafpbiealpuikvwphluvgrslmurrjskutmgsgknmghlkvijhhgiiuhhgfabhescauupswvjuukjvsjikrrwjkokrglqonmollwlmjoiwinwohqjnbaeqcidapgvijirgjsuiisnswlnskhmlqlthottlloptiswownusjhrneaehdgfavtwgrjhtuuwjnkmunqnkmirqtmtitglmpqggwpoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaocaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&hints=56.2-186.0-114.3-53.2-37.0)
produit par cette exécution.
Les deux solveurs livrés couvrent les deux familles que l'étude originale
sépare : un retour arrière en profondeur d'abord qui ne place que des pièces
parfaitement concordantes (le membre le plus simple de la famille
propagative) et un remplisseur glouton ligne par ligne, sans aucun retour
arrière.
## Le résultat
Dans l'exécution originale à treize méthodes (13 méthodes × 11 instances ×
3 graines = 429 tâches), l'échelle a séparé les familles de solveurs d'un
barreau entier : la famille propagative, pilotée par les contraintes, a tenu
un rapport parfait de 1.000 jusqu'à N=12 inclus (264 arêtes sur 264), les
ordres « bordure d'abord » s'étaient déjà effondrés vers 0.15 à 0.22 à cette
taille, et à N=14 toutes les méthodes sont tombées entre 0.055 et 0.157. La
reproduction archivée rejoue le banc de bout en bout avec les deux solveurs
de référence :
> **[Figure]** Attendu vs mesuré (4 barreaux × 8 graines × 2 solveurs, budget mono-cœur de 12 s) — interactive figure. Rendered on the canonical page (link above); not shown in this markdown export.
Toute la mécanique se reproduit : le plafond prouvé gratuit, la certification
de chaque plateau planté à travers le scoreur même que les solveurs
affrontent, le re-score indépendant de chaque plateau rendu, et la
dégradation monotone du DFS, parfait à N=8 puis sans aucune résolution
complète à N=14, tandis que le glouton ne résout jamais complètement nulle
part. La dispersion entre graines est large sur les barreaux hauts (0.216 à
1.0 à N=12, 0.047 à 0.613 à N=14 pour le DFS) ; c'est pour cela que chaque
barreau garde 8 graines.
## Ce qui n'en découle pas
- **Réussir aux petits N ne prédit rien sur le 16×16.** Les méthodes
parfaites à N=12 sont presque sans valeur un barreau plus haut ; le
livrable est la courbe de dégradation, jamais un classement à une taille
donnée. Pour l'état de l'instance réelle, voir
[la page des records](/fr/research/records/).
- **Des échelles issues de générateurs différents ne sont pas
interchangeables.** La profondeur de l'effondrement dépend du profil
d'instance. Les barreaux originaux reprenaient le profil de couleurs du
vrai puzzle (22 couleurs intérieures, 5 couleurs rares confinées à
l'anneau adjacent au cadre) et comptaient jusqu'à 10 à 11 pièces
dupliquées à N=14 ; le générateur du kit ne produit aucun doublon et pas
d'anneau de couleurs rares, et l'effondrement à N=14 y est visiblement
moins profond (des partiels vers 0.6 contre un plancher de 0.157 dans la
grille originale). Les formes de courbes se transfèrent ; les points de
rupture exacts, non.
- **Qu'un solveur de référence faible échoue sur un barreau ne réfute
rien.** Les lignes parfaites jusqu'à N=12 appartiennent à des solveurs
propagatifs précis pas encore portés dans le kit ; un solveur
sous-dimensionné ne peut que rester en dessous.
## Reproduire
`just research-scaling-ladder` reconstruit les quatre barreaux depuis le
générateur à graines (un binaire par barreau, le moteur partagé fixant la
taille du plateau à la compilation) et relance les deux solveurs au budget de
12 secondes, en écrivant une ligne JSONL par exécution plus un recensement
des barreaux avec le lien visualiseur de chaque plateau planté. Cela
reproduit la mécanique du banc et la forme des courbes ; une égalité case
par case avec la table originale à treize méthodes exige le jeu d'instances
original archivé et le portage du registre de solveurs, comme le précise le
plan de reproduction.
## À lire aussi
- [Benchmark mono-cœur](https://eternity2.dev/fr/research/lab/experiments/single-core-benchmark/) — Quinze solveurs, les nôtres et nos implémentations des deux backtrackers record de la communauté, chacun exécuté une fois sur dix variantes à coins épinglés du casse-tête officiel, un seul cœur, 60 secondes par exécution. Le constat : le nombre de nœuds n'est pas le score.
- [Calibré sur le pic de difficulté](https://eternity2.dev/fr/research/why/phase-transition/) — Eternity II utilise 22 couleurs, réparties entre 17 couleurs intérieures et 5 réservées au cadre, et ce chiffre d'environ 17 se situe près du point où ce type de casse-tête est le plus difficile à résoudre (la transition est une bande, pas un entier unique).
- [Cette instance est-elle NP-complète, et comment l'encoder ?](https://eternity2.dev/fr/research/why/how-hard-is-this-instance/) — L'appariement de bords est NP-complet en tant que famille, mais cela ne dit rien d'un plateau 16×16 fixé : une instance isolée est une constante, pas un problème. Ce qui est vrai, c'est la dureté au pire cas de la famille et la dureté empirique de cette instance, et comment écrire le puzzle pour un solveur SAT, de couverture exacte ou de PLNE, avec de petits croquis détaillés. Une mesure sur plateaux plantés chiffre le choix de la formulation : une falaise de résolubilité qu'un paradigme de recherche heurte et qu'un autre franchit, et qui bouge avec le nombre de couleurs.
- [Les benchmarks de la communauté](https://eternity2.dev/fr/research/build/benchmarks/) — Comment une communauté à qui il était interdit de partager les pièces s'est malgré tout dotée d'une culture de test partagée : protocoles de vérification par comptages dérivés, les suites Txibilis et débutants, duels au nombre de nœuds, énumérations complètes, et le seul benchmark qui reste ouvert aujourd'hui.
---
# Benchmark mono-cœur
> Quinze solveurs, les nôtres et nos implémentations des deux backtrackers record de la communauté, chacun exécuté une fois sur dix variantes à coins épinglés du casse-tête officiel, un seul cœur, 60 secondes par exécution. Le constat : le nombre de nœuds n'est pas le score.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/single-core-benchmark/
- Mise à jour: 2026-07-13
- Sujets: speed, construction, backtracking
- Reproduire: `just experiments single-core-benchmark`
- Source: Moteur exécutable + résultats commités + scripts (le répertoire de support de cette expérience) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark
---
Donnez à chaque solveur le même budget, un cœur et une minute : lequel l'emporte ?
La réponse renverse l'intuition évidente. Plusieurs solveurs, les nôtres et nos
implémentations des deux backtrackers record de la communauté, ont chacun été
exécutés une fois sur dix variantes à coins épinglés du casse-tête officiel, en
mono-thread, 60 secondes par exécution. Chaque plateau a été re-noté par un
unique scoreur canonique ; aucun score auto-déclaré par un moteur n'est
digne de confiance. Le score maximal possible est 480.
> **Chaque moteur ici est notre code**
>
> `blackwood_style` et `verhaard_style` sont **nos implémentations réécrites de zéro** des algorithmes publiés par Joshua Blackwood et Louis Verhaard, et non les programmes propres des auteurs. Le `eii` de Verhaard n'a jamais été diffusé que sous forme de binaire Win32 ; une ré-implémentation (dont les constantes ont été récupérées depuis `eii.exe`) est donc le seul moyen de l'exécuter. Le vrai C# de Blackwood, lui, *est* [public](https://github.com/jblackwood345/EternityII_Solver), mais il code en dur ses 256 pièces et son nombre de threads : il ne peut donc ni lire les variantes de cette grille ni être épinglé sur un seul cœur sans être modifié. Les scores présentés ici mesurent notre lecture de chaque algorithme, non l'ingénierie des auteurs, et ne doivent pas être cités comme « Blackwood obtient N ».
Le classement ci-dessous montre les méthodes qui rivalisent au score. Une
seconde famille, les préréglages CSP (un moteur d'arc-cohérence exécuté sous une
douzaine de réglages d'ordonnancement), relève d'une catégorie différente : son
meilleur préréglage atteint environ 183, moins de la moitié du score d'un
prétendant, il ne mérite donc aucune ligne au classement. Ce balayage de
préréglages est une étude à part entière, sur sa
[propre page](/fr/research/lab/experiments/single-core-benchmark/csp-presets/).
## Ce qu'achète une minute d'un cœur
Les deux backtrackers record dominent ce budget. Notre moteur de style Verhaard
atteint une moyenne de **440,8** (meilleur 451) et notre moteur de style
Blackwood **436,4** (meilleur 440), tous deux explorant de 20 à 40 millions de
nœuds de recherche par seconde. Rien d'autre n'en approche : le DFS naïf se pose
à **365,6**, et le meilleur préréglage CSP à environ **183**.
L'écart entre ces deux groupes est le constat. Les quatre familles voient le
même casse-tête et les mêmes 60 secondes, et elles terminent séparées de 250
points. Ce qui les distingue n'est pas la vitesse : les moteurs CSP sont trois
ordres de grandeur plus lents par nœud que les backtrackers et battent tout de
même le DFS naïf sur les variantes favorables, car chaque nœud est élagué plutôt
que simplement visité. Le nombre de nœuds et le score ne sont pas le même axe.
Ce que cette grille ne peut pas vous dire, c'est où se situe le plafond. Le
meilleur plateau ici (451) reste à 13 points du record 5 indices de la
communauté, 464, et la moyenne du meilleur moteur se situe à environ 24 points
en dessous ; les records n'ont pas été établis en une minute, ils sont venus de
fermes de calcul et de mois d'effort. On mesure ici l'efficacité par cœur à
budget faible et fixe, rien de plus.
> **[Figure]** Le classement : score moyen sur dix variantes de coins, mono-cœur, 60 s — interactive: BenchmarkLeaderboard. Rendered on the canonical page (link above); not shown in this markdown export.
## Lire le tableau
Les deux backtrackers sont en tête de ce tableau et ils s'y maintiennent avec
stabilité : le moteur de style Verhaard couvre 437 à 451 sur les dix variantes,
le moteur de style Blackwood 431 à 440. La référence naïve est le plancher : un
365 rapide et bourré de déchets qui montre à quoi ressemble un simple décompte
d'arêtes appariées sans aucune qualité de plateau.
Les unités de débit diffèrent selon la famille et ne sont jamais comparées entre
elles. Les backtrackers comptent les nœuds de recherche par seconde, les moteurs
CSP de même mais entre 5 et 10 milliers, car chacun de leurs nœuds exécute une
arc-cohérence complète. La famille CSP troque le débit contre l'élagage, ce qui
explique qu'elle explore bien moins de nœuds tout en battant le DFS naïf sur les
bonnes variantes.
## Ce que fait chaque prétendant
- **Verhaard et Blackwood (backtrackers, rangs 1 et 2).** DFS à rupture
contrôlée par la profondeur, à 20 à 40 millions de nœuds par seconde. Ils
poussent jusqu'à 437 à 451 mais heurtent un mur : la fin de partie exige bien
plus de calcul que ne le permettent 60 secondes. Blackwood a trouvé son 470
après environ un mois sur un seul PC, et l'a qualifié de « coup de chance »
([message 10194](https://groups.io/g/eternity2/message/10194)).
- **DFS naïf (la référence).** Remplit tout le plateau en autorisant toutes les
ruptures. En ordre ligne par ligne (`anjou-naive_rowmajor`) il atteint un
décompte d'arêtes appariées élevé (365) mais un plateau de faible qualité,
criblé de ruptures. Rapide, et sans valeur. Il siège sur le tableau comme un
plancher : le nombre qu'une méthode doit franchir pour valoir quelque chose.
(La sensibilité du DFS naïf à l'ordre de visite, et la raison pour laquelle la
variante en spirale s'effondre à 78, figurent sur la
[page des préréglages CSP](/fr/research/lab/experiments/single-core-benchmark/csp-presets/)
aux côtés des autres ablations du même moteur.)
## Où se situent ces chiffres
Cette grille plafonne chaque moteur à un cœur pendant 60 secondes, bien en deçà
du calcul qui a produit les records ci-dessous. Elle mesure l'efficacité par
cœur et la qualité heuristique, non le score maximal atteignable. Un moteur qui
se classe bien ici atteint de bons plateaux à moindre coût ; les chiffres record
exigent de nombreux cœurs multipliés par des heures.
Chaque variante ici épingle les 5 indices officiels (plus 3 coins, soit 8
amorces au total), si bien que le plafond pertinent est le **record 5 indices de
la communauté, 464**, et non le 470 tous indices (qui utilise plus que les 5
indices). C'est ce 464 que marque la ligne pointillée du classement.
| référence | score | conditions |
|:--|--:|:--|
| Record communautaire 5 indices | 464 | Benjamin Riotte, juillet 2026 (mêmes 5 indices que ces variantes épinglent) |
| Meilleur de cette grille (style Verhaard) | 451 | un cœur, 60 s (moyenne 440,8 sur 10 variantes) |
| Style Blackwood dans cette grille | 440 | un cœur, 60 s (moyenne 436,4 sur 10 variantes) |
| Plafond communautaire tous indices | 470 | Blackwood, ~1 mois sur un seul PC, utilise plus que 5 indices |
## Méthode et reproductibilité
Chacune des dix variantes est le casse-tête officiel augmenté de trois cellules
de coin épinglées (des dispositions distinctes des pièces de coin) : les dix
partagent donc le jeu de 256 pièces et les 5 amorces d'indices mais diffèrent par
trois contraintes de coin. Elles sont émises à la fois en JSON au schéma du site
(pour les moteurs natifs) et en CSV (pour les moteurs autonomes) depuis un unique
générateur, de sorte que chaque algorithme voit des instances identiques. Une
exécution par casse-tête, graine fixe ; la disposition des coins est le seul axe
de diversité. Chaque exécution émet une `.url` bucas, et le score est le décompte
canonique d'arêtes appariées produit par le même scoreur, jamais l'auto-déclaration
du moteur. Il n'y a eu aucun échec sur l'ensemble des 150 exécutions.
Chaque moteur de la grille est notre propre code open source et s'exécute depuis
ce dépôt, y compris les deux écrits à partir des algorithmes publiés par la
communauté ; aucun solveur tiers n'est intégré ici. La grille les mesure tous ;
le classement ci-dessus ne montre que les cinq qui rivalisent au score, et la
[page des préréglages CSP](/fr/research/lab/experiments/single-core-benchmark/csp-presets/)
montre le reste. L'espace de travail des crates, les dix variantes, les résultats
commités par exécution et les scripts de la grille résident tous dans le
[répertoire de support](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark)
de l'expérience, et `just experiments single-core-benchmark` compile les moteurs
et relance la grille entière. La famille native (le naïf et les préréglages CSP)
est un unique binaire sélectionné par préréglage ; les deux backtrackers sont un
binaire chacun, pilotés par un petit wrapper. Tous deux parlent le même contrat
casse-tête-en-entrée, url-bucas-en-sortie, et chaque plateau est re-noté par
l'unique scoreur canonique.
## Constats connexes
Le profilage a placé 96,6 pour cent du temps de la famille CSP dans une seule
boucle AC-3 lourdement pré-optimisée. Ce moteur est déjà à son plafond de
performance ; les vitesses du benchmark sont ses vraies vitesses, non un écart
d'implémentation. Par ailleurs, les constantes Blackwood de la communauté ne se
transfèrent pas d'un étiquetage de couleurs à l'autre : ses couleurs privilégiées
publiées ont obtenu 387 dans notre étiquetage contre 435 pour un ré-ajustement,
un écart de 48 points que notre Blackwood comble en ré-ajustant seulement les ID
de couleur relatifs à l'étiquetage tout en respectant chaque élément structurel
de la spécification publiée.
## Travaux ouverts
La grille exécute nos implémentations. Deux des trois moteurs record de la
communauté peuvent en principe être exécutés directement, et c'est la prochaine
mesure évidente :
- **Le générateur en C de Peter McGavin.** Il en a posté le code source sur la
liste en janvier 2026 sous le nom `genbody71.zip`
([message 11749](https://groups.io/g/eternity2/message/11749)). Il compile sur
Apple silicon avec `clang` et sa passe de génération émet un `body.c` de 10 363
lignes spécialisé pour un seul casse-tête. C'est le moteur le plus rapide que
la communauté ait mesuré, à 295 M de placements/s sur le CPU de Joe
([message 11750](https://groups.io/g/eternity2/message/11750)), et il est
absent de cette grille.
- **Le C# de Joshua Blackwood.** [Public et sous
GPL-3.0](https://github.com/jblackwood345/EternityII_Solver) ; il compile sans
modification sur .NET 8. Mais il code en dur ses 256 pièces dans `Util.cs`,
fixe `number_virtual_cores = 64`, et ne prend aucun argument : l'épingler sur
un seul cœur ou lui fournir les variantes de cette grille suppose de modifier
son code source, moment où l'artefact n'est plus purement le sien. L'exécuter
tel que publié, sur le casse-tête brut, est la forme fidèle de cette mesure.
- **Le `eii` de Louis Verhaard** ne peut pas du tout être exécuté : le
téléchargement depuis son propre site fournit `eii.exe` et aucun code source,
raison pour laquelle notre moteur le reconstruit à partir du binaire.
Aucun de ces moteurs n'est intégré à ce dépôt ; tous deux sont récupérés et
exécutés localement au moment de la mesure.
## Pages de cette section
- [Presets CSP, à la mesure](https://eternity2.dev/fr/research/lab/experiments/single-core-benchmark/csp-presets/) — Un seul moteur de propagation de contraintes, exécuté sous une douzaine de presets d'ordonnancement et de propagateurs, sur les dix mêmes variantes à coins fixés que le classement. Une étude de ce qu'apporte chaque réglage, tenue à l'écart du classement principal parce que le meilleur preset atteint moins de la moitié du score d'un prétendant.
## À lire aussi
- [PRIOR](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/prior/) — Construire un plateau à partir de rien, en départageant les égalités selon la position habituelle des pièces dans les bons plateaux déjà connus. Il atteint un score élevé sans aucun plateau de départ à copier.
- [Recherche en faisceau](https://eternity2.dev/fr/research/build/construct/beam-search/) — Maintenir en vie les K plaquettes partielles les plus prometteuses à la fois et les faire croître case par case. La recherche en faisceau est le moteur des constructeurs ex nihilo de ce projet, et une illustration limpide des raisons pour lesquelles la largeur seule s'enlise dans les profondeurs de l'intérieur.
---
# Presets CSP, à la mesure
> Un seul moteur de propagation de contraintes, exécuté sous une douzaine de presets d'ordonnancement et de propagateurs, sur les dix mêmes variantes à coins fixés que le classement. Une étude de ce qu'apporte chaque réglage, tenue à l'écart du classement principal parce que le meilleur preset atteint moins de la moitié du score d'un prétendant.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/lab/experiments/single-core-benchmark/csp-presets/
- Mise à jour: 2026-07-15
- Sujets: backtracking, search-space
- Reproduire: `just experiments single-core-benchmark`
- Source: Moteur exécutable + résultats versionnés + scripts (le répertoire support de cette expérience) — https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark
---
Le classement du [benchmark mono-cœur](/fr/research/lab/experiments/single-core-benchmark/)
montre les méthodes qui rivalisent sur le score. Cette page montre le reste :
une douzaine de presets d'un seul moteur de satisfaction de contraintes, plus le
DFS naïf dans son ordre de visite le plus faible. Ce ne sont pas une douzaine de
solveurs. C'est un unique cœur d'arc-cohérence coiffé de têtes différentes, tenu
pour que le coût exact de chaque technique classique se lise sur un nombre plutôt
que se discute.
> **[Figure]** Presets CSP : score moyen sur dix variantes à coins, mono-cœur, 60 s — interactive: BenchmarkLeaderboard. Rendered on the canonical page (link above); not shown in this markdown export.
## Ce qu'apporte chaque réglage
Les presets font varier deux choses : l'ordre dans lequel le moteur affecte les
cellules, et l'intensité de la propagation avant qu'il ne s'engage. À puzzle et
budget fixés, l'écart de score entre deux presets est la valeur de ce seul
réglage.
- **L'ordonnancement par valeur la moins contraignante aide.** `anjou-gacolor_ac3_lcv`
atteint une moyenne de 114 contre 76 pour le simple `anjou-gacolor_ac3` :
choisir la valeur qui élimine le moins de voisins vaut ici environ 38 points.
- **Certains réglages sont inertes à cette profondeur.** Trois presets
(`anjou-gacolor_ac3`, `anjou-gacolor_ac3_ns1`, `anjou-verhaard_preferred`) ont
produit des plateaux identiques au bit près sur ce puzzle. NS-1 et
l'ordonnancement préféré n'ajoutent rien en 60 secondes : le moteur ne descend
jamais assez profond pour qu'ils mordent.
- **L'ordonnancement bord d'abord est le preset le plus fort.** `anjou-border_first_lcv`
et `anjou-rare_color_first` dominent la campagne à environ 183, en fixant le
cadre sur-contraint avant l'intérieur libre. Cela reste moins de la moitié du
score d'un prétendant.
## Pourquoi aucun d'eux ne rivalise
Chaque preset est bimodal. Sur une disposition de coins favorable, la recherche
par arc-cohérence atteint 340 à 349 ; sur une disposition hostile, elle s'effondre
à environ 55, piégée dans un mauvais bassin dont elle ne peut sortir en 60
secondes. La moyenne reste basse parce que les mauvais coins la tirent vers le
bas, et aucun réglage d'ordonnancement ne corrige le problème du bassin. Voilà la
vraie histoire de cette famille : la propagation rend chaque nœud bien élagué mais
coûteux, si bien que la recherche est forte là où l'instance est clémente et
impuissante là où elle ne l'est pas. Les moteurs constructifs du classement
n'entrent jamais dans ce piège, et c'est pourquoi un preset à 183 se trouve sur
une page différente des prétendants du classement, qui plafonnent à 451.
## Le DFS naïf est ici aussi, pour une seule raison
La recherche en profondeur naïve, toutes ruptures autorisées, n'est pas un preset
CSP, mais son ordre de visite relève de la même leçon. En ordre ligne par ligne
(`anjou-naive_rowmajor`, présent au classement comme référence) il atteint 365 ;
le même DFS en ordre de visite en spirale (`anjou-naive_spiral`) s'effondre à une
moyenne de 78. Le seul choix de l'ordre de visite coûte à la recherche naïve près
de 290 points, la même sensibilité à l'ordonnancement que montrent les presets
CSP, à plus grande échelle.
## Méthode et reproductibilité
Ces presets ont tourné dans la même grille que le classement : dix variantes du
puzzle officiel, chacune avec trois cellules de coin fixées, mono-cœur, 60
secondes, graine fixe, une exécution par variante. Chaque plateau est re-scoré
par l'unique scoreur canonique à arêtes appariées, jamais par l'auto-déclaration
du moteur. Le moteur, les dix variantes, les résultats versionnés par exécution
et les scripts vivent sous le
[répertoire support](https://github.com/raphael-anjou/eternity2/tree/main/research/experiments/single-core-benchmark)
de l'expérience, et `just experiments single-core-benchmark` rejoue la grille
entière, prétendants et presets ensemble.
## À lire aussi
- [Benchmark mono-cœur](https://eternity2.dev/fr/research/lab/experiments/single-core-benchmark/) — Quinze solveurs, les nôtres et nos implémentations des deux backtrackers record de la communauté, chacun exécuté une fois sur dix variantes à coins épinglés du casse-tête officiel, un seul cœur, 60 secondes par exécution. Le constat : le nombre de nœuds n'est pas le score.
- [La cohérence d'arc, à partir d'AC-3](https://eternity2.dev/fr/research/build/reduce/arc-consistency/) — Le forward checking regarde un coup à l'avance ; la cohérence d'arc oblige la liste de candidats de chaque case à se défendre contre celle de chaque voisine, jusqu'à un point fixe. AC-3 de Mackworth, les raffinements optimaux qui ont suivi, ce que toute cette famille a réellement mesuré sur ce casse-tête, et où elle devient incorrecte.
- [Ordres de remplissage](https://eternity2.dev/fr/research/build/backtracking/fill-order/) — L'ordre dans lequel un algorithme de retour arrière visite les 256 cases est son unique liberté : il ne coûte rien à l'exécution et fait varier la taille de l'arbre de recherche de plusieurs ordres de grandeur. Vingt ans de science communautaire, des guerres fixe-contre-dynamique aux courses de stratégies, jusqu'au carré magique 10×16 et à la recherche en peigne de Verhaard, répondent tous à la même question : quel chemin à travers le plateau est le moins coûteux ?
---
# Problèmes ouverts
> La frontière ouverte d'Eternity II réunie au même endroit : chaque angle qui vaut encore une tentative, le mur qu'il attaque, ce qui a déjà été essayé et où cela s'est arrêté, et s'il s'agit d'une cible abordable pour un débutant ou d'un objectif difficile et bien cartographié.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/open-problems/
- Mise à jour: 2026-07-21
- Source: Archive de la liste de diffusion eternity2 (groups.io) : où les cibles ouvertes sont annoncées et discutées — https://groups.io/g/eternity2
---
Voici le tableau des angles ouverts : une ligne par direction qui mérite encore
une tentative. Chaque entrée pose la question en une ligne, nomme le mur qu'elle
attaque (issu de [pourquoi c'est difficile](/fr/research/why/)), renvoie à ce qui a
déjà été essayé et à l'endroit où cela s'est arrêté (dans la
[carte murs-méthodes](/fr/research/why/walls-and-methods/) et les
[impasses](/fr/research/build/dead-ends/)), et indique son abordabilité. Les
étiquettes disent ce qu'elles disent : **abordable pour un débutant** désigne
une cible qu'on peut prendre sans dix ans de contexte ; **difficile, bien
cartographié** désigne une cible que beaucoup de tentatives solides ont balisée
sans qu'aucune ne l'ait franchie ; **sans prise en charge** désigne un angle
sur lequel personne ne travaille activement, ce qui est distinct d'un angle qui
a été attaqué puis a tenu.
Pour l'état de l'art, le score vit sur la page
[records](/fr/research/records/) ; cette page ne montre que ce qui reste ouvert.
## L'écart de 470 à 480
> **Une méthode peut-elle franchir le plafond de 470 jusqu'à un 480 complet ?**
>
> La piste canonique. Le meilleur plateau ne respectant que l'indice de départ obligatoire est à 470/480 depuis que la communauté l'a atteint, et un 480 conçu est acquis : l'éditeur a construit le puzzle à partir d'une solution, donc un plateau parfait existe et seul son emplacement reste ouvert.
**Mur.** [Rigidité](/fr/research/why/rigidity-wall/) : les plateaux records sont des
îles localement figées, et les dix arêtes manquantes se trouvent de l'autre côté
de [tous les murs structurels à la fois](/fr/research/why/walls-and-methods/).
**Essayé, et où cela s'est arrêté.** Toute méthode de la
[carte murs-méthodes](/fr/research/why/walls-and-methods/) finit contre la rigidité ;
les constructions depuis zéro et depuis le corpus plafonnent entre 458 et 463, et
aucune ne franchit le plafond. La force de calcul brute ne le comble pas non plus,
ce qui est consigné sous [jeter plus de calcul contre le mur](/fr/research/build/dead-ends/).
**Étiquette.** Difficile, bien cartographié. C'est le sommet du puzzle entier :
on sait beaucoup de choses sur pourquoi il résiste, ce qui est précisément la
raison pour laquelle un franchissement inédit ferait la une.
## La cible stricte à cinq indices, de 464 à 465
> **Un plateau honorant les cinq indices officiels peut-il dépasser 464 ?**
>
> La ligne stricte à cinq indices est suivie séparément de la ligne ouverte à 470, car [l'essentiel des progrès sur le record ouvert s'est fait sans les indices](/fr/research/build/clue-puzzles/). Le meilleur plateau respectant les cinq placements est à 464.
**Mur.** [Rigidité](/fr/research/why/rigidity-wall/) de nouveau, plus les placements
d'indices qui rétrécissent la région atteignable : moins de plateaux satisfont les
cinq, donc la botte de foin est plus petite, mais l'aiguille aussi.
**Essayé, et où cela s'est arrêté.** Le 464 est la marque courante de la ligne
stricte sur la page [puzzles à indices](/fr/research/build/clue-puzzles/) ; les
constructions strictes et re-compressions du projet atteignent la classe des 460
sans la dépasser, comme le montre la
[carte murs-méthodes](/fr/research/why/walls-and-methods/).
**Étiquette.** Difficile, bien cartographié, mais un pas plus court que l'écart de
470 à 480 : 464 à 465, c'est une seule arête, sur une ligne où la région
atteignable est plus resserrée et donc plus facile à raisonner que le record ouvert.
## Le 10x10 sans indice set_2 de Brendan Owen
> **Résoudre set_2, le 10x10 sans indice jamais résolu.**
>
> Brendan Owen a publié une paire de 10x10 générés sans indice avec leurs statistiques. L'un (set_1) est tombé ; l'autre (set_2) n'a jamais été résolu et reste le prochain échelon convenu par la communauté sous le 16x16 complet.
**Mur.** La même difficulté d'appariement d'arêtes que le puzzle complet, à une
taille qu'une seule machine peut réellement terminer. Set_1 a demandé une
recherche vaste mais bornée, donc set_2 est une cible d'ingénierie de recherche,
pas une cible structurelle.
**Essayé, et où cela s'est arrêté.** L'histoire complète est sur la page
[benchmarks](/fr/research/build/benchmarks/#les-1010-de-brendan--lun-est-tombé-lautre-tient-encore) :
set_1 a été résolu, les statistiques de set_2 sont connues, et il
[tient toujours](/fr/research/build/benchmarks/#les-1010-de-brendan--lun-est-tombé-lautre-tient-encore).
**Étiquette.** Abordable pour un débutant. C'est la seule cible ouverte
dimensionnée pour une machine personnelle et un backtracker bien réglé plutôt
qu'une grappe de calcul, donc la première vraie tentative recommandée.
## Franchir un bassin de rigidité
> **Existe-t-il un chemin local d'un bassin record à un autre ?**
>
> Chaque plateau record se trouve dans un bassin que des preuves MIP montrent localement optimal jusqu'à un halo de plusieurs cellules. La question ouverte est de savoir si une suite de petits coups légaux atteint un autre bassin.
**Mur.** [Rigidité](/fr/research/why/rigidity-wall/) sous sa forme la plus tranchée,
et [pourquoi le saut de bassin paraît impossible](/fr/research/why/sigma-cycles/) : le
pas d'un grand plateau vers un meilleur est un unique échange géant et indivisible,
sans gradient à suivre.
**Essayé, et où cela s'est arrêté.** Le théorème de rigidité consigne des preuves
MIP d'optimalité de halo sur plusieurs bassins, et la recherche d'une courte
chaîne d'évasion entre bassins a échoué pour une raison structurelle exposée sur
[pourquoi le saut de bassin paraît impossible](/fr/research/why/sigma-cycles/). L'entrée
[recombiner deux bons plateaux](/fr/research/build/dead-ends/) est le même mur vu du
côté du croisement.
**Étiquette.** Difficile, bien cartographié. Un seul coup de franchissement, ou une
preuve qu'aucun n'existe, changerait la façon dont on juge toute méthode de
recherche locale.
## Le mur mémoire du meet-in-the-middle
> **Les deux moitiés d'une recherche par meet-in-the-middle peuvent-elles se rejoindre à taille réelle ?**
>
> Faire se rejoindre deux recherches partielles au milieu est complet en principe, mais le nombre de plateaux partiels à stocker croît d'environ un facteur vingt par erreur d'appariement supplémentaire tolérée, si bien que les moitiés cessent de se rejoindre bien avant le 16x16 complet.
**Mur.** Le coût de l'exactitude mesuré directement : l'approche
[meet-in-the-middle](/fr/research/build/exact/meet-in-the-middle/) est exacte, mais sa
mémoire dépasse ce que toute machine peut contenir.
**Essayé, et où cela s'est arrêté.** BANDSAW a résolu une bande de fin de partie à
l'optimalité prouvée et, ce faisant, a mesuré la croissance d'environ un facteur
vingt par erreur des deux côtés, donc se rejoindre au milieu cesse de payer à
taille réelle ; ce résultat est la [ligne BANDSAW](/fr/research/why/walls-and-methods/)
de la carte. Une meilleure représentation, ou une rencontre avec perte qui reste
saine, est le levier ouvert.
**Étiquette.** Difficile, bien cartographié. Le mur est ici quantifié, donc le
progrès est mesurable : tout encodage qui abaisse le facteur de croissance par
erreur est un gain réel, même sans résolution complète.
## Un axe de diversité au-delà du parallel tempering
> **Existe-t-il un mécanisme de recherche qui trouve de nouveaux bassins de façon fiable, au-delà du parallel tempering ?**
>
> Presque toute méthode redécouvre la même poignée de bassins. Dans un balayage complet des méthodes, seul le parallel tempering a produit de façon fiable de nouveaux bassins, et même lui plafonne vite.
**Mur.** [Rigidité](/fr/research/why/rigidity-wall/) vue comme un goulot de diversité :
la contrainte n'est pas le score qu'une méthode atteint mais le nombre de bassins
distincts qu'elle sait trouver, et l'arsenal standard en trouve trop peu.
**Essayé, et où cela s'est arrêté.** L'étude de diversité est écrite sur la
[carte murs-méthodes](/fr/research/why/walls-and-methods/) : la recherche locale
adaptative, le placement en serpent et le haut de la distribution d'un générateur
entraîné retombent tous dans les bassins connus, et seul le parallel tempering
s'en échappe de façon fiable. [Générer des plateaux avec un transformeur](/fr/research/build/dead-ends/)
est l'une des tentatives de diversité qui n'ont pas tenu.
**Étiquette.** Sans prise en charge, et ouvert. Contrairement aux cibles
cartographiées ci-dessus, celle-ci n'a pas de liste d'attaques balisée à battre :
un mécanisme de diversité vraiment neuf est une idée que personne n'a encore
plantée, ce qui en fait l'entrée la plus spéculative et la moins contrainte par
les travaux antérieurs.
## La rigidité locale est-elle une conséquence de l'effondrement de distinction de la loi d'aire ?
> **Les plateaux records gèlent-ils parce que les partiels distincts s'effondrent, ou est-ce une coïncidence d'échelle ?**
>
> Les plus petits mouvements qui séparent les meilleurs plateaux connus et l'échelle à laquelle les plateaux partiels réellement distincts s'effondrent sont tous deux un patch de quelques centaines de cases. La question ouverte est de savoir si c'est un lien causal, la rigidité découlant de la loi d'aire, ou deux faits indépendants partageant par hasard une échelle de longueur.
**Mur.** [Rigidité](/fr/research/why/rigidity-wall/) et
[la loi d'aire](/fr/research/why/entropy-area-law/). La rigidité est établie de
manière indépendante, par des preuves MIP d'optimalité de halo et un halo SAT
versé ; la loi d'aire est une estimation de distinction. Réduire l'une à l'autre
les relierait, mais rien sur le site ne le dérive.
**Essayé, et où cela s'est arrêté.** La [page de la loi d'aire](/fr/research/why/entropy-area-law/)
observe l'échelle partagée et renvoie à
[pourquoi le saut de bassin semble impossible](/fr/research/why/sigma-cycles/) ; elle
ne prétend pas que la rigidité est causée par l'effondrement. Le résultat de
rigidité est exact et région par région, et tient seul sans invoquer la loi
d'aire. Aucune page n'affirme le pont causal, ce qui est justement pourquoi il
figure ici comme question.
**Étiquette.** Difficile, bien cartographié. Les deux extrémités sont parmi les
murs les plus étudiés de la section ; la part ouverte est l'arête entre eux, et
la trancher dans un sens ou l'autre reformulerait la lecture des deux murs.
## Le pic de difficulté produit-il le profil de branchement d'aucun coup forcé ?
> **Le facteur de branchement élevé est-il imposé par la position au pic à une solution ?**
>
> Chaque case intérieure conserve 73 à 137 pièces légales, et le puzzle se situe à la transition de phase d'environ une solution attendue. Les deux sont regroupés sous « rien de local à élaguer », mais aucune dérivation ne lie le décompte de branchement à la position à environ 17 couleurs intérieures.
**Mur.** [Aucun coup forcé](/fr/research/why/no-forced-moves/) et
[le pic de difficulté](/fr/research/why/phase-transition/). Le décompte de branchement
est un compte de candidats par case sur le jeu de pièces ; le pic est un énoncé
sur le nombre de solutions à 17 couleurs. Un puzzle pourrait en principe avoir
l'un sans l'autre.
**Essayé, et où cela s'est arrêté.** [Élagage contre vitesse](/fr/research/why/prune-vs-speed/)
et la [carte mur-méthode](/fr/research/why/walls-and-methods/) regroupent les deux
murs sous le même thème, qu'il n'y a rien de local à élaguer, ce qui est une
union thématique et non une affirmation causale. Aucune page ne dérive le profil
de branchement du décompte de couleurs.
**Étiquette.** Difficile, bien cartographié. Les deux murs sont chacun mesurés
exactement ; la pièce manquante est la dérivation qui les relie, laquelle
transformerait un thème partagé en mécanisme.
## La géométrie des sigma-cycles plafonne-t-elle la recherche constructive, pas seulement la réparation locale ?
> **Le mur des sigma-cycles est-il la raison pour laquelle les producteurs beam et DFS saturent aussi, ou seulement la recherche locale ?**
>
> Le mouvement entre deux plateaux records est un cycle indivisible de nombreuses cases, et chaque préfixe propre score moins ; cela montre pourquoi la réparation locale ne peut franchir entre bassins. La question ouverte est de savoir si la même géométrie plafonne les producteurs DFS et beam constructifs, qui saturent entre 458 et 463 pour des raisons calculées seulement entre plateaux finis, pas dans l'arbre de recherche.
**Mur.** [Sigma-cycles](/fr/research/why/sigma-cycles/) et
[rigidité](/fr/research/why/rigidity-wall/), vus sur l'axe de diversité. Le résultat
des sigma-cycles est un énoncé exact sur chaque paire de planches embarquées,
mais il est calculé entre plateaux records finis, pas sur l'arbre de recherche
constructif qui les produit.
**Essayé, et où cela s'est arrêté.** La [carte mur-méthode](/fr/research/why/walls-and-methods/)
documente que les producteurs à partir de zéro et beam saturent comme les autres,
et l'enquête de diversité a trouvé que l'arsenal standard redécouvre sans cesse
les mêmes bassins. Étendre le mécanisme des sigma-cycles pour expliquer ce
plafond constructif, plutôt que seulement celui de la réparation locale, n'est
pas prouvé et n'est affirmé nulle part sur le site.
**Étiquette.** Difficile, bien cartographié, et proche de la question de
diversité ci-dessus : une preuve que la même géométrie de cycle régit la
saturation constructive unifierait deux plafonds observés indépendamment.
## D'où viennent ces problèmes, et où en écrire un
Chaque affirmation ci-dessus s'appuie sur une page déjà présente sur ce wiki : les
murs dans [pourquoi c'est difficile](/fr/research/why/), les tentatives arrêtées dans
la [carte murs-méthodes](/fr/research/why/walls-and-methods/) et les
[impasses](/fr/research/build/dead-ends/), les cibles de référence sur la page
[benchmarks](/fr/research/build/benchmarks/). Si vous en prenez une et qu'elle bouge,
[le carnet est ouvert](/fr/research/contribute/) et il y a une place pour le compte rendu.
## À lire aussi
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
- [Quel mur arrête quelle méthode](https://eternity2.dev/fr/research/why/walls-and-methods/) — La section recherche a deux versants : les murs structurels qui rendent Eternity II difficile, et les algorithmes conçus pour les franchir. Cette page fait le pont : chaque méthode confrontée au mur qu'elle attaque réellement, et le score auquel ce mur l'a arrêtée.
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [Impasses](https://eternity2.dev/fr/research/build/dead-ends/) — Des approches que nous avons essayées, séduisantes en apparence, mais qui ne font pas bouger les lignes sur Eternity II, consignées avec nos constats pour que vous investissiez votre temps ailleurs.
- [Les benchmarks de la communauté](https://eternity2.dev/fr/research/build/benchmarks/) — Comment une communauté à qui il était interdit de partager les pièces s'est malgré tout dotée d'une culture de test partagée : protocoles de vérification par comptages dérivés, les suites Txibilis et débutants, duels au nombre de nœuds, énumérations complètes, et le seul benchmark qui reste ouvert aujourd'hui.
- [Rendez-vous au milieu](https://eternity2.dev/fr/research/build/exact/meet-in-the-middle/) — Énumérer deux moitiés d'un problème et les recoller sur une interface partagée, en échangeant de la mémoire contre un exposant divisé par deux. L'astuce classique de Horowitz–Sahni, ce qu'elle donne sur des bandes du plateau, et ce que l'expérience BANDSAW de ce projet a mesuré, y compris la méthode unilatérale qui l'a battue.
- [Contribuez vos recherches](https://eternity2.dev/fr/research/contribute/) — Ce wiki est le foyer de recherche de la communauté, et il y a de la place pour votre travail. Trois façons de le faire publier, du message sur la liste de diffusion à la pull request, plus le petit jeu de règles maison qui garde chaque page digne de confiance.
---
# Articles
> La littérature académique sur Eternity II et les casse-têtes à raccordement d'arêtes, tirée des notes de recherche du projet et de la liste de lectures de la communauté, classée selon l'utilité réelle de chaque article lorsqu'on cherche à écrire un solveur.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/papers/
- Mise à jour: 2026-07-15
- Sujets: exact-methods, search-space
---
En résumé : les résultats de complexité expliquent pourquoi le problème est
difficile, les articles SAT/CSP montrent pourquoi les solveurs génériques
butent sur un mur, et ce sont les articles sur la propagation de contraintes et
les grands voisinages dont les idées se retrouvent dans les solveurs les plus
performants.
> **[Interactive: PapersView]** Rendered on the canonical page (link above); not shown in this markdown export.
---
# Le who's who de la recherche sur E2
> Deux décennies de recherche sur Eternity II ont été menées par des personnes identifiées, sur une liste de diffusion. Cette page en est la galerie : qui elles sont, ce que chacune a apporté, et où le lire dans leurs propres mots. Un remerciement autant qu'un index.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/people/
- Mise à jour: 2026-07-02
- Source: Brendan Owen établit le partage 17+5 comme le puzzle le plus difficile possible (message groups.io 1947) — https://groups.io/g/eternity2/message/1947
- Source: Le récit à la première personne de Louis Verhaard sur le 467 : « c'est mon programme qui a fait le travail » (message groups.io 6891) — https://groups.io/g/eternity2/message/6891
- Source: Peter McGavin résout le benchmark 10×10 de Brendan Owen (message groups.io 9686) — https://groups.io/g/eternity2/message/9686
- Source: Le 470 de Joshua Blackwood, le record en vigueur (message groups.io 10117) — https://groups.io/g/eternity2/message/10117
- Source: Al Hopfer énonce l'équilibre de bordure NS-1 (message groups.io 10754) — https://groups.io/g/eternity2/message/10754
- Source: Brendan Owen revient sur la liste après quatorze ans (message groups.io 11500) — https://groups.io/g/eternity2/message/11500
---
Les [pages d'histoire](/fr/research/community/hunt/) racontent l'aventure de la
communauté dans l'ordre chronologique ; cette page la raconte par personne.
Presque tout ce que ce wiki sait (chaque record, chaque théorie, chaque outil
et chaque [impasse documentée](/fr/research/build/dead-ends/)) remonte à quelqu'un
qui l'a publié sur la [liste de diffusion eternity2](https://groups.io/g/eternity2),
le plus souvent gratuitement, souvent pendant des années. Voyez cette galerie
comme un index et un remerciement à la fois. Les noms apparaissent tels que
chacun signait ses messages publics ; chaque affirmation renvoie à un message.
Beaucoup des personnes ci-dessous ont leur propre page de contributeur : un nom
en **gras avec un lien** l'ouvre, rassemblant leur profil, leurs messages
sourcés et toutes les pages qu'elles ont écrites ici.
[Raphaël Anjou](/fr/research/people/raphael-anjou/), qui maintient le wiki et mène
les expériences du labo, a la sienne lui aussi, un chercheur parmi les autres.
Les noms sans lien sont documentés directement ici, sur cette page.
## Les fondateurs et les analystes du lancement (2000–2007)
### [Brendan Owen](/fr/research/people/brendan-owen/)
Le fondateur. Owen a créé le groupe eternity_two en octobre 2000, soit six ans
et demi avant que le puzzle n'existe
([msg 384](https://groups.io/g/eternity2/message/384)), et lui a donné son ton
scientifique : dans les deux jours suivant l'annonce de janvier 2007, il avait
dérivé la formule du nombre attendu de solutions qui fait de la difficulté un
paramètre de conception ([msg 38](https://groups.io/g/eternity2/message/38)), et
le week-end du lancement il a numérisé les vraies pièces et publié la première
estimation du nombre de solutions
([msg 987](https://groups.io/g/eternity2/message/987)). Ses résultats phares :
la preuve qu'un partage de couleurs 17+5 est le 16×16 le plus difficile possible
([msg 1947](https://groups.io/g/eternity2/message/1947)), le modèle exact de
l'arbre de recherche que l'on appelle désormais
[théorie complexe](/fr/research/why/complex-theory/)
([msg 5197](https://groups.io/g/eternity2/message/5197),
[msg 5209](https://groups.io/g/eternity2/message/5209)), les
[puzzles de référence](/fr/research/build/benchmarks/) 9×9/10×10 sur lesquels la
communauté s'affronte encore, et la preuve en forme close de la profondeur de
pic 256 × (1 − 1/e)
([msg 8125](https://groups.io/g/eternity2/message/8125)). Après un adieu à la
clôture du concours
([msg 8429](https://groups.io/g/eternity2/message/8429)), il est revenu en
2025, affinant son propre modèle
([msg 11500](https://groups.io/g/eternity2/message/11500),
[msg 11546](https://groups.io/g/eternity2/message/11546)).
### [Günter Stertenbrink](/fr/research/people/gunter-stertenbrink/)
Un vétéran d'Eternity I et le premier à provoquer les estimations du groupe :
en 2001, il demandait, des années avant les faits, comment on concevrait un
puzzle doté d'un prix colossal et n'ayant qu'environ 1 % de chances d'être
résolu en dix ans ([msg 15](https://groups.io/g/eternity2/message/15)), et il
a accueilli les annonces de presse de 2005 par « So we can conclude, the end of
the universe is in several years. »
([msg 34](https://groups.io/g/eternity2/message/34)). Pendant deux décennies, il
a vérifié les chiffres de la liste, des conversions en couverture exacte de 2007
jusqu'au registre matériel « nœuds par watt » des années 2010.
### [Dave Clark](/fr/research/people/dave-clark/)
Auteur du solveur distribué ESolve pour Eternity I, il a rejoint le groupe en
2001 ([msg 21](https://groups.io/g/eternity2/message/21)) et a bâti
eternity2.net, le projet BOINC qui était le visage public de la communauté en
2007 ([msg 756](https://groups.io/g/eternity2/message/756)). Il l'a arrêté avec
une comptabilité complète : 1,6 TFlops, plus de 10^19 opérations, aucune
solution ([msg 3511](https://groups.io/g/eternity2/message/3511)). Il a ouvert
le code de son solveur
([msg 3716](https://groups.io/g/eternity2/message/3716)) et a laissé aux
archives leur meilleure source primaire sur la création du puzzle : son entretien
téléphonique avec Monckton décrivant comment la solution a été générée puis mise
sous scellés ([msg 4177](https://groups.io/g/eternity2/message/4177)).
### Txibilis
Angel de Vicente, qui signait Txibilis, a construit la suite standard de
plateaux de référence de type E2
([msg 1886](https://groups.io/g/eternity2/message/1886)) et était le meilleur
concepteur manuel d'[ordres de remplissage](/fr/research/build/backtracking/fill-order/)
de la communauté. Son duel avec l'optimiseur automatisé de doc_s_smith a fait
chuter les compteurs de nœuds de la recherche exhaustive de plusieurs ordres de
grandeur ([msg 2928](https://groups.io/g/eternity2/message/2928)). La culture
du benchmark qui a plus tard validé la théorie complexe commence avec lui.
### doc_s_smith
En plein duel, la liste a découvert qui était doc_s_smith : Dietmar Wolz, le
découvreur de la plupart des solutions connues d'Eternity I
([msg 2972](https://groups.io/g/eternity2/message/2972)). Son optimiseur de
stratégie automatisé a établi des records de benchmark en 2007
([msg 2896](https://groups.io/g/eternity2/message/2896)) ; de retour en 2010, il
a publié une boîte à outils Java qui a transformé la liste en atelier
d'algorithmes ([msg 7755](https://groups.io/g/eternity2/message/7755)) et a
donné à l'après-concours son objectif de travail : « beat 468 matching edges »
([msg 7803](https://groups.io/g/eternity2/message/7803)).
### kubzpa
Auteur du premier article sérieux sur le comptage des solutions, situant E2
autour de 15 millions de solutions
([msg 3497](https://groups.io/g/eternity2/message/3497)), et du résultat
d'impossibilité le plus net de l'époque : l'argument de parité montrant qu'aucun
plateau ne peut marquer exactement 479 par ses coutures intérieures
([msg 1640](https://groups.io/g/eternity2/message/1640)). Il a tenu dix-sept
mois, jusqu'à ce que Verhaard signale l'unique faille
([msg 6317](https://groups.io/g/eternity2/message/6317)) : retourner une pièce
de bordure dont les deux arêtes de bord extérieures partagent une couleur, et le
plateau se lit comme un 479 tandis que ces arêtes de rebord non comptées restent
intactes. C'est une subtilité de la bordure non comptée, non une brèche dans le
calcul de parité intérieure, qui tient toujours, comme Verhaard l'a lui-même
noté : 479 « cannot be achieved in another way »
([msg 6319](https://groups.io/g/eternity2/message/6319)).
### mjqxxxx
Michael Quist était l'arbitre mathématique de la liste. Il a publié le premier
cadre de comptage entièrement rigoureux pour les puzzles de type E2
([msg 1221](https://groups.io/g/eternity2/message/1221)), a affiné la théorie de
l'équilibre de bordure
([msg 2098](https://groups.io/g/eternity2/message/2098)), et ses relectures ont
débusqué les défauts qui ont rendu solides les résultats des autres. Kubzpa a
amendé son article sur le comptage des solutions après que sa relecture eut
repéré une simulation Monte-Carlo erronée
([msg 3589](https://groups.io/g/eternity2/message/3589)).
## Les années du prix (2007–2010)
### [Louis Verhaard](/fr/research/people/louis-verhaard/)
La seule personne que le puzzle ait jamais payée. Son solveur eii, rendu public
« because I am stuck » ([msg 5940](https://groups.io/g/eternity2/message/5940)),
a trouvé le 467 qui a remporté le prix de vérification de 10 000 $, inscrit sous
le nom de sa femme, Anna Karlsson, comme il l'a lui-même confirmé : « Anna is my
wife… it was my program that did the job »
([msg 6349](https://groups.io/g/eternity2/message/6349),
[msg 6891](https://groups.io/g/eternity2/message/6891),
[msg 7451](https://groups.io/g/eternity2/message/7451)). Ses méthodes sont
devenues canoniques : les ordres de remplissage en peigne (comb-search)
([msg 6112](https://groups.io/g/eternity2/message/6112)) et le glissement
d'arêtes contrôlé par la profondeur
([msg 7321](https://groups.io/g/eternity2/message/7321)). Il fut aussi le
défenseur le plus acharné de la théorie complexe : « the finest work that has
ever been published about E2 »
([msg 7810](https://groups.io/g/eternity2/message/7810)), et son 467 a tenu
douze ans.
### Yannick Kirschhoffer
Auteur de l'Eternity II Editor, l'éditeur et interface de solveur Java
multiplateforme publié en février 2008
([msg 4544](https://groups.io/g/eternity2/message/4544)) qui est devenu l'outil
de plateau standard de la communauté pendant des années. Il proposait encore son
aide sur le code lorsque celui-ci a refait surface en 2012
([msg 9064](https://groups.io/g/eternity2/message/9064)).
### Fred
Signant Eternity Blogger, Fred a construit E2Lab dans une salve de publications
quasi quotidiennes à l'automne 2009
([msg 7148](https://groups.io/g/eternity2/message/7148)), un éditeur/solveur dont
le retrait délibéré de son propre « bouton magique », « to respect the game
rules », en dit long sur l'éthique de la liste
([msg 7150](https://groups.io/g/eternity2/message/7150)). Son blog a hébergé les
tableaux de la communauté durant les années de l'après-concours.
### [Al Hopfer](/fr/research/people/al-hopfer/)
Un habitué depuis 2008 et le théoricien de la bordure de la communauté. Sa
« doctrine de l'équilibre » pour la génération de puzzles apparaît en 2009
([msg 6842](https://groups.io/g/eternity2/message/6842),
[msg 6844](https://groups.io/g/eternity2/message/6844)) ; en 2022, il a énoncé la
condition exacte que ce wiki appelle l'[équilibre de bordure NS-1](/fr/research/why/border-balance/)
([msg 10754](https://groups.io/g/eternity2/message/10754),
[msg 10757](https://groups.io/g/eternity2/message/10757)), et l'a étayée par un
partiel de 222 pièces à bordure complétée, entièrement documenté
([msg 10862](https://groups.io/g/eternity2/message/10862)).
## La longue décennie (2010–2019)
### [Peter McGavin](/fr/research/people/peter-mcgavin/)
Le pilier de l'époque, et sans doute le chercheur le plus déterminant du puzzle
après Owen. Son travail a [sa propre page](/fr/research/lab/experiments/peter-mcgavin/backtracker/).
Il a calculé le nombre canonique d'environ 14 702 solutions attendues
([msg 8924](https://groups.io/g/eternity2/message/8924)), a transcrit la théorie
complexe en LaTeX ([msg 9188](https://groups.io/g/eternity2/message/9188)) puis,
plus tard, en code C exact
([msg 11197](https://groups.io/g/eternity2/message/11197)), que ce site porte. En
2017, il a résolu le 10×10 sans indice d'Owen en environ 180 années-cœur, dans
les barres d'erreur de la théorie, sa plus forte validation à ce jour
([msg 9686](https://groups.io/g/eternity2/message/9686),
[msg 9688](https://groups.io/g/eternity2/message/9688)), et en 2020 il a détenu
le record lui-même : « New record score of 469! Only 11 breaks! »
([msg 10045](https://groups.io/g/eternity2/message/10045)).
### Tony Wauters
L'université en personne. Il a publié l'article hyper-heuristique de son équipe,
évalué par les pairs (461/480 en une heure), et est resté pour répondre aux
questions ([msg 9017](https://groups.io/g/eternity2/message/9017),
[msg 9023](https://groups.io/g/eternity2/message/9023)), et son équipe a
enchaîné avec les travaux MILP et Max-Clique de 2017
([msg 9683](https://groups.io/g/eternity2/message/9683)).
### Michael Field
Un vétéran des solveurs les plus rapides des premières années, devenu le
réaliste matériel du groupe : son architecture de backtracker sur FPGA
projetait environ 5 G placements par seconde et par puce
([msg 9226](https://groups.io/g/eternity2/message/9226)), et ses analyses de
capacité des voies GPU et FPGA ont dit à la liste ce que le silicium pouvait et
ne pouvait pas acheter ([msg 9003](https://groups.io/g/eternity2/message/9003)).
### Arnaud Carré
Arrivé en 2009, il a redéfini le standard de vitesse en 2014 avec un solveur
mono-cœur à 114,5 millions de récursions par seconde, offert comme référence de
comparaison ([msg 9233](https://groups.io/g/eternity2/message/9233)), et est
revenu en 2018 pour les courses de benchmark.
### Adam Miles
Le flanc GPU. Arrivé en 2017, il est passé des astuces de bits sur CPU à un
solveur de calcul DirectX 12 tournant sur une Xbox One X
([msg 9811](https://groups.io/g/eternity2/message/9811)) et a re-vérifié
exhaustivement sur GPU le jeu 9×9 numéro 1 d'Owen : les mêmes 2 solutions que le
recensement CPU de 2014, en 25,4 heures
([msg 9822](https://groups.io/g/eternity2/message/9822)).
### JSA
Le vérificateur de la communauté et, plus tard, son sauveur. En 2009, il a
reproduit le 467 avec le solveur public de Verhaard, environ 82 jours sur un
seul PC, consignant précisément à quel point l'air se raréfie au-dessus de 466
([msg 6687](https://groups.io/g/eternity2/message/6687)). Lorsque Yahoo a
annoncé qu'il effacerait les archives en 2019, JSA a payé les frais de transfert
vers groups.io, proposant « I can pay for the first 5 years »
([msg 2](https://groups.io/g/eternity2/message/2)), et il rédige encore les
messages de bienvenue du groupe
([msg 11771](https://groups.io/g/eternity2/message/11771)).
### Ole Knudsen
Kronjuvel (Kron) était là depuis les toutes premières années, a revendiqué a
posteriori un partiel de 231 pièces d'octobre 2007
([msg 7563](https://groups.io/g/eternity2/message/7563)), et, en tant que
propriétaire du groupe, a créé le nouveau domicile groups.io lors de la migration
de 2019. Le message de bienvenue de 2026 s'ouvre par un hommage à lui ; il a
disparu de la liste depuis 2023
([msg 11771](https://groups.io/g/eternity2/message/11771)).
## La vague de records et l'ère moderne (2019–2026)
### [Joshua Blackwood](/fr/research/people/joshua-blackwood/)
L'inconnu qui a mis fin au gel de douze ans. Inconnu de la liste, il a annoncé
un 468 sur Reddit en août 2020
([msg 10032](https://groups.io/g/eternity2/message/10032)), a ouvert le code de
son solveur quelques jours plus tard
([msg 10037](https://groups.io/g/eternity2/message/10037)) accompagné de rares
résultats négatifs (SAT, GPU et caches 2×2 tous mesurés puis écartés,
[msg 10056](https://groups.io/g/eternity2/message/10056)), et en mars 2021 il a
publié le 470 qui tient toujours
([msg 10117](https://groups.io/g/eternity2/message/10117)), trouvé avec le code
public exact ([msg 10161](https://groups.io/g/eternity2/message/10161)). Son
algorithme est [décodé sur ce wiki](/fr/research/lab/experiments/joshua-blackwood/solver/).
### [Jef Bucas](/fr/research/people/jef-bucas/)
L'infrastructure de l'ère moderne. Il a donné l'alerte qui a déclenché la
migration des archives
([msg 9920](https://groups.io/g/eternity2/message/9920)), a construit le
visualiseur de plateaux [e2.bucas.name](https://e2.bucas.name) qui est devenu le
livre des records de la communauté
([msg 9955](https://groups.io/g/eternity2/message/9955)), a réécrit le solveur de
Blackwood en C sous le nom de libblackwood, doublant grosso modo sa vitesse et
alimentant la vague de 469 de novembre 2020
([msg 10065](https://groups.io/g/eternity2/message/10065),
[msg 10078](https://groups.io/g/eternity2/message/10078),
[msg 10067](https://groups.io/g/eternity2/message/10067)), et a égalé le 470 en
2024 ([msg 11401](https://groups.io/g/eternity2/message/11401)), en créditant
toujours Blackwood. Son étude de paramètres wrapper_blackwood est republiée
[sur ce wiki](/fr/research/lab/experiments/joshua-blackwood/solver/) avec sa
permission ([msg 11905](https://groups.io/g/eternity2/message/11905)).
### Carlos Fernandez
Le chirurgien de plateaux. Il a produit un 469 par un simple échange d'une pièce
du plateau record de McGavin
([msg 10074](https://groups.io/g/eternity2/message/10074)), une variante 470 à
bordure réarrangée ([msg 11403](https://groups.io/g/eternity2/message/11403)),
des résolutions de quadrant 14×14 en quatre minutes
([msg 10802](https://groups.io/g/eternity2/message/10802)), et des barreaux
élevés de l'échelle des cinq indices
([msg 11068](https://groups.io/g/eternity2/message/11068)).
### Bruno Gauthier
Un vétéran de la vitesse de l'époque 2014, dont le solveur en Forth tournait à
80–90 millions de nœuds par seconde
([msg 9265](https://groups.io/g/eternity2/message/9265)), il a détenu le record
le plus strict des annales pendant plus de trois ans : 460/480 avec les cinq
pièces indices à leurs positions officielles, à partir de 2023
([msg 11074](https://groups.io/g/eternity2/message/11074)) jusqu'au 464 de
Benjamin Riotte en juillet 2026.
### Benjamin Riotte
Détenteur du record strict des cinq indices. En juillet 2026, il a fait passer
le meilleur plateau respectant les cinq placements d'indices du 460 de longue
date de Gauthier à **464/480** (16 arêtes brisées), avec son propre DFS
Blackwood modifié
([groups.io](https://groups.io/g/eternity2/message/11919)). Igor Pejic a atteint
la même plage 463–464 indépendamment dans le même fil. Ce fut le premier
mouvement sur la ligne strictement canonique en plus de trois ans.
### [Marijn Heule](/fr/research/people/marijn-heule/)
Le point de contact du monde SAT. Dans le fil SAT au long cours, un
collaborateur de Marijn Heule a rapporté que l'équipe de Heule avait
réimplémenté et amélioré l'encodage à l'origine des résultats de benchmark SAT
de 2008 ([msg 10969](https://groups.io/g/eternity2/message/10969)), l'état de
l'art du flanc des méthodes exactes, qui débattait encore d'encodages CNF de
4 Go le tout dernier jour des archives
([msg 11822](https://groups.io/g/eternity2/message/11822)).
### [Raphaël Anjou](/fr/research/people/raphael-anjou/)
Maintient ce wiki et mène les expériences cataloguées dans
[le labo](/fr/research/lab/) ; ses comptes rendus se rassemblent sur sa
[page de contributeur](/fr/research/people/raphael-anjou/), un chercheur parmi les
autres.
### [William Millilaw](/fr/research/people/william-millilaw/)
A mené une campagne de solveur dense de deux semaines en 2026, consignée pour
l'essentiel comme des réfutations de méthodes qui ne percent pas le puzzle. Deux
de ses résultats affinent le plafond : un test de gel par réplique, et un test
de résidu SAT en halo montrant que les plateaux records sont des optima locaux
stricts. Nous avons reproduit le second sur les plateaux publics, et il atterrit
sur le [mur de rigidité](/fr/research/why/rigidity-wall/) aux côtés des preuves de
programmation en nombres entiers
([reproduction](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/rigidity-sat-halo)).
### onesmallstep
A fondé le serveur Discord de la communauté en novembre 2021 et l'a maintenu en
vie durant les années creuses (rapporté sur le Discord de la communauté,
novembre 2021 ; pas de lien de message public). Solveur dévoué à part entière
(meilleur score auto-déclaré autour de 466–467), il est aussi la raison pour
laquelle le wiki a un temps colporté par erreur un « 470 de 2025 » : un *relais*
de record pris pour une *revendication* de record, corrigé ici à partir des
archives Discord elles-mêmes.
### Reinout Annaert
Le chasseur méthodique de l'ère Discord : un meilleur score auto-déclaré de 469,
la sous-culture des séries linéaires (partiels consécutifs de 229 et 230 pièces),
et l'homme qui a tranché la question de l'origine des placements d'indices :
« They directly come from Tomy's Hint Puzzles » (rapporté sur le Discord de la
communauté, décembre 2024 ; pas de lien de message public). Sur la liste de
diffusion, il confirme conserver des figures de solutions marquant au-dessus de
467/480 ([msg 11549](https://groups.io/g/eternity2/message/11549)). Ses
suggestions ont aussi façonné la feuille de route du terrain de jeu de ce site.
## Et bien d'autres encore
Aucune galerie de cette taille n'est complète. Parmi les nombreuses personnes
qui y ont leur place : Alan O'Donnell, qui avait le premier solveur fonctionnel
quelques semaines après l'annonce
([msg 64](https://groups.io/g/eternity2/message/64)) ; Max, le partenaire
d'entraînement de Verhaard dans la course au 467, dont le meilleur score fut 465
([msg 6348](https://groups.io/g/eternity2/message/6348)) ; istarinz, qui a
franchi les 558 millions de placements par seconde en 2008 et est devenu
l'autorité du groupe en matière de vérification par recherche exhaustive
([msg 6212](https://groups.io/g/eternity2/message/6212)) ; antminder, dont
l'hybride affectation-réparation atteignait en moyenne un 462 par jour en 2008
([msg 5589](https://groups.io/g/eternity2/message/5589)) ; Pierre Schaus, dont
l'article de programmation par contraintes a fourni cet opérateur de réparation
([msg 5601](https://groups.io/g/eternity2/message/5601)) ; capiman26061973,
fondateur de l'échelle des cinq indices
([msg 11037](https://groups.io/g/eternity2/message/11037)) et du programme de
minage des combinaisons invalides
([msg 7768](https://groups.io/g/eternity2/message/7768)) ; David Barr, auteur de
solveurs GPU et navigateur open source pendant une décennie
([msg 9367](https://groups.io/g/eternity2/message/9367),
[msg 11121](https://groups.io/g/eternity2/message/11121)) ; Henk van der
Griendt, qui a déniché l'annonce du prix que tous les autres avaient manquée
([msg 6337](https://groups.io/g/eternity2/message/6337)) ; et juraj.pivovarov,
la conscience du prototypage rapide de la communauté
([msg 9411](https://groups.io/g/eternity2/message/9411)).
## Corrections bienvenues
Cette page sera toujours incomplète, et elle peut être erronée par endroits : un
résultat mal attribué, un nom manquant, une orthographe préférée. Si l'un de ces
points vous concerne, vous ou votre travail, dites-le sur la
[liste de diffusion](https://groups.io/g/eternity2) ou via la
[page de contribution](/fr/research/contribute/) : les corrections arrivent avec les
mêmes règles de sourçage que tout le reste ici, et le crédit est tout l'objet de
cette page.
## À lire aussi
- [La traque, une histoire (partie I : 2000-2009)](https://eternity2.dev/fr/research/community/hunt/) — L'histoire de la communauté, d'une liste de diffusion fondée sept ans avant que le casse-tête n'existe jusqu'au prix d'examen de 10 000 $ remporté sous un nom d'emprunt, chaque événement rattaché à son message d'origine. Partie I d'une chronique en cours.
- [La traque, une histoire, partie II : 2009-2026](https://eternity2.dev/fr/research/community/hunt-part-2/) — Dix-sept ans après le prix : le concours s'éteint avec sa solution enfermée dans un coffre, 467 tient une décennie, l'archive survit à la fermeture de Yahoo à quelques jours près, puis un inconnu venu de Reddit réécrit le livre des records. Chaque événement est rattaché à son message d'origine.
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
---
# Records et solveurs
> Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/records/
- Mise à jour: 2026-07-22
- Source: Archive de la liste de diffusion eternity2 (groups.io) : les annonces de records ; compte gratuit requis pour la lecture — https://groups.io/g/eternity2
- Source: Wikipédia : le casse-tête Eternity II (le prix de 2 M$, l'échéance de 2010 et le 467 de Verhaard) — https://en.wikipedia.org/wiki/Eternity_II_puzzle
- Source: Le récit de Louis Verhaard sur son propre solveur à 467 — https://www.shortestpath.se/eii/eii_details.html
- Source: e2.bucas.name (Jef Bucas) : le visualiseur de plateaux de la communauté ; chaque plateau lié peut y être re-scoré — https://e2.bucas.name
---
Cette page suit le score : qui détenait le meilleur plateau à chaque étape, et
comment il l'a obtenu. Pour le récit autour des chiffres, les points de bascule
qui ont fait avancer le casse-tête, voyez l'[histoire en un coup d'œil](/fr/research/history/) ;
les méthodes les plus fortes vivent dans la liste de diffusion et sur Discord,
pas dans les revues scientifiques.
> **[Interactive: RecordsView]** Rendered on the canonical page (link above); not shown in this markdown export.
## Lignée du carnet : comment les chiffres propres au projet ont été atteints
Cette section concerne le carnet du projet, pas l'échelle des records
communautaires. Rien ici n'est un record communautaire : chaque marque des
tableaux ci-dessus (470 en régime « pièce de départ seule », 464 avec les cinq
indices) reste au-dessus de chaque ligne ci-dessous. Ces lignes existent pour
que les chiffres propres au projet restent traçables, chacune avec sa
convention de score explicitée. Les méthodes sont documentées dans
[le labo](/fr/research/lab/).
| Date | Plateau | Score | Convention de score | Comment |
| --- | --- | --- | --- | --- |
| 2026-07-13 | Plateau du producteur, brut | 457/480 | Les cinq indices à leurs cases officielles ; arêtes appariées sur 480 | Un producteur en faisceau suivant un ordre de remplissage en peigne ; c'est le plateau brut, avant toute réparation. |
| 2026-07-13 | Même plateau, après réparation | 461/480 | Les cinq indices à leurs cases officielles ; arêtes appariées sur 480 | Une passe de destruction-réparation a porté le 457 brut à 459, puis 460, puis 461. La boucle elle-même est étudiée dans [l'étude de réparation](/fr/research/lab/experiments/raphael-anjou/repair-study/). |
| 2026-07 | PALIMPSEST | 463/480 | Pièce de départ seule ; arêtes appariées sur 480 | Un prior de placement extrait du corpus de plateaux communautaires, plus une destruction-réparation ciblée. Décrit dans [PALIMPSEST](/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/). |
Les deux conventions ne se comparent pas : un score « pièce de départ seule »
et un score à cinq indices ne visent pas la même cible, d'où la convention
nommée sur chaque ligne. Sous la convention à cinq indices, le meilleur du
projet est 461 face au 464 communautaire ; en régime « pièce de départ seule »,
son meilleur est 463 face au 470 communautaire.
## À lire aussi
- [Histoire : les grandes étapes](https://eternity2.dev/fr/research/history/) — L'histoire d'Eternity II en un coup d'œil, de la liste de diffusion fondée en 2000 au record de 470 qui tient toujours. Une chronologie parcourable des tournants, chacun renvoyant à l'histoire complète en deux parties et au message où il s'est produit.
- [Expériences](https://eternity2.dev/fr/research/lab/experiments/) — Les expériences de recherche nommées du laboratoire, une section par chercheur. Chacune est un run réel contre Eternity II avec son idée, son meilleur plateau et les questions qu'elle a laissées ouvertes. Le carnet de Raphaël Anjou est ici en entier ; le carnet reste ouvert à tous les autres.
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
---
# Nombres de référence
> Dénombrements exacts du nombre de façons valides de remplir un petit bloc à une position donnée du plateau officiel d'Eternity II, sous des règles de plus en plus contraintes : des nombres sûrs pour vérifier le code d'appariement des bords et de contraintes de votre solveur.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/reference/
- Mise à jour: 2026-07-11
- Sujets: backtracking
- Reproduire: `just research-subgrid`
- Source: Dénombrements de sous-grilles publiés par sylvogel (message groups.io 11879) — https://groups.io/g/eternity2/message/11879
- Source: Générateur Rust reproductible de ce projet + résultats versionnés (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/subgrid-placement-counts
---
Combien de façons distinctes, respectant l'appariement des bords, existe-t-il de
remplir un petit bloc du plateau officiel ? Ces dénombrements sont la vérité de
terrain sur laquelle éprouver un solveur : si votre code d'appariement des bords
et de contraintes est en désaccord avec les nombres ci-dessous sur un coin 2×2,
le bug est dans votre code, pas dans la table.
Les chiffres en romain sont calculés à partir du jeu de pièces officiel par le
générateur Rust reproductible de ce projet (lien plus bas), de sorte que
quiconque peut les recalculer. La poignée de chiffres en italique correspond à
des dénombrements trop grands pour être énumérés exactement en quelques secondes
(de dizaines de milliards à dizaines de milliers de milliards de remplissages) ;
ce sont **les valeurs publiées par sylvogel**, reproduites ici par souci
d'exhaustivité et créditées dans les sources. Tout le reste est recalculé ici à
partir de zéro.
> **[Interactive: ReferenceTableView]** Rendered on the canonical page (link above); not shown in this markdown export.
## À lire aussi
- [Faits et chiffres établis](https://eternity2.dev/fr/research/build/known-facts/) — Les chiffres que tout chercheur sur Eternity II finit par redémontrer, rassemblés au même endroit avec leur provenance : la définition du puzzle, le placement des indices, les conventions de score, le tableau des records, la taille de l'espace de recherche et les comptages structurels.
- [Les benchmarks de la communauté](https://eternity2.dev/fr/research/build/benchmarks/) — Comment une communauté à qui il était interdit de partager les pièces s'est malgré tout dotée d'une culture de test partagée : protocoles de vérification par comptages dérivés, les suites Txibilis et débutants, duels au nombre de nœuds, énumérations complètes, et le seul benchmark qui reste ouvert aujourd'hui.
---
# Pourquoi c'est difficile
> Eternity II n'est pas difficile par accident. Le casse-tête a été conçu pour résister à l'ingéniosité, et les murs structurels mesurables (rigidité, entropie, motifs interdits) expliquent pourquoi aucune recherche, si ingénieuse soit-elle, n'a atteint la fin.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/
- Mise à jour: 2026-07-21
---
Eternity II n'est pas difficile par accident. Voici la science derrière le fait
qu'aucune recherche, si ingénieuse soit-elle, n'ait atteint la fin : la
conception du casse-tête, et les murs structurels qui apparaissent dès qu'on se
met à mesurer.
> **[Interactive: ScoringPrimer]** Rendered on the canonical page (link above); not shown in this markdown export.
## Par où commencer
- **[Quel mur arrête quelle méthode](/fr/research/why/walls-and-methods/)** aligne
chaque méthode face au mur qu'elle attaque et au score où ce mur l'a arrêtée.
La carte d'une page, et l'endroit pour s'orienter d'abord.
- **[Le mur de rigidité](/fr/research/why/rigidity-wall/)** est le mur contre lequel
presque toute méthode finit : les records sont des îles localement figées,
sans gradient vers un meilleur plateau.
- **[Le pic de difficulté](/fr/research/why/phase-transition/)** explique pourquoi
les nombres de pièces et de couleurs se situent exactement là où la recherche
est au pire.
- **[Aucun coup forcé](/fr/research/why/no-forced-moves/)** est le mur qu'on ressent
en premier : chaque case intérieure garde des dizaines de pièces légales, si
bien que la recherche ne se resserre jamais d'elle-même.
Si vous êtes venu vous demander si le plateau est
[NP-complet, et comment l'encoder](/fr/research/why/how-hard-is-this-instance/),
commencez par là : l'appariement de bords est NP-complet en tant que famille,
mais une instance 16×16 fixée est une constante, pas un problème.
## Conçu pour résister à l'ingéniosité
Eternity I est tombé en 2000 parce qu'Alex Selby et Oliver Riordan ont
découvert que le casse-tête possédait bien plus de solutions que son concepteur
ne le croyait, et qu'ils ont dirigé leur recherche vers les régions les plus
« denses en solutions ». Pour Eternity II, l'éditeur a recruté les vainqueurs :
Selby et Riordan ont participé à la conception et aux tests de résistance du
nouveau casse-tête afin qu'aucun raccourci statistique de ce genre ne subsiste.
Les empreintes visibles de cette validation : une unique solution conçue
intégrée à des décomptes de couleurs équilibrés, aucune pièce à symétrie de
rotation, aucune pièce en double, et des paramètres de nombre de pièces et de
nombre de couleurs situés au pic empirique de difficulté (confirmé plus tard
par Ansótegui et al.). Le casse-tête n'est pas difficile par accident. Il a été
réglé pour l'être.
Un détail qui ressemble à un choix de conception sans en être un : la bordure
utilise son propre ensemble de cinq motifs, distinct de celui de l'intérieur.
Cette séparation est automatique, non délibérée. Comme le rebord extérieur est
gris uni, chaque pièce de bordure a son arête grise fixée vers l'extérieur, si
bien que ses arêtes colorées ne rencontrent jamais que d'autres arêtes de
bordure (latéralement) ou l'intérieur (vers le centre), et les deux réservoirs
ne se touchent jamais. Les motifs de bordure pourraient être n'importe quelles
cinq couleurs, voire un simple réétiquetage de celles de l'intérieur, sans rien
changer au casse-tête. Ils paraissent « rares » uniquement parce qu'il y a moins
d'arêtes de bordure à colorer, et non parce que les concepteurs auraient
cantonné une ressource rare au cadre pour déjouer les solveurs. (Merci à
Vasily V. sur la liste groups.io pour la correction.)
## Les murs structurels
Au-delà du récit de conception, le casse-tête possède une structure mesurable
qui explique l'écart entre le meilleur plateau connu (470/480) et une solution
complète, publiée ci-dessous avec le calcul exact qui sous-tend chaque mur.
Une manière utile de tenir tout cela ensemble consiste à lire
[un plateau complet comme un mot de code](/fr/research/why/permutation-code-wall/) :
ses 480 jointures intérieures sont des contrôles de type parité, le score vaut
480 moins le nombre de contrôles en échec, et la règle « chaque pièce une seule
fois » devient un code de permutation superposé aux contrôles de couleur. La
lentille renomme le score plutôt qu'elle n'ajoute un nombre, mais elle met les
deux contraintes dures dans un même cadre, et le dénombrement qui la sous-tend
se reproduit exactement. Dans la même clé algébrique, les
[invariants de flux](/fr/research/why/flux-invariants/) pondèrent chaque couleur
d'arête et lisent chaque pièce comme un vecteur signé : les coutures intérieures
s'annulent, le plateau entier somme à zéro, et un quart de tour multiplie le
vecteur par l'unité imaginaire, si bien que la loi est de rang complexe plein 22
sur l'ensemble officiel et que chacun de ses bits est invisible au comptage de
couleurs.
Certains de ces murs sont le même énoncé vu à des échelles différentes. Le
[vol de pièce](/fr/research/why/piece-theft/), où une pièce rare dépensée tôt affame
une case bien plus loin, est le visage à l'échelle de la case de la
[loi d'aire](/fr/research/why/entropy-area-law/) : les deux sont la règle « chaque
pièce une seule fois », la règle discrète qui porte la difficulté, l'une
ressentie comme une seule case morte et l'autre mesurée comme l'effondrement des
plateaux réellement distincts au-delà d'un patch de quelques centaines de cases.
À l'échelle d'un remplissage entier, le même couplage produit
[une région difficile qu'on ne peut pas concevoir autrement](/fr/research/why/irreducible-hard-region/) :
remplissez le plateau dans n'importe quel ordre fixe et la difficulté se
rassemble dans la bande que vous terminez en dernier, si bien qu'une
décomposition déplace la difficulté au lieu de la supprimer.
Les [motifs interdits](/fr/research/why/forbidden-patterns/) se placent à côté, sur
un autre axe : ils comptent exactement à quelle vitesse les petits patchs
épuisent leurs arrangements légaux sous le seul appariement des couleurs, tandis
que l'effondrement de la loi d'aire est la surcouche distincte « une seule fois »
posée sur des patchs valides en couleur. Les deux sont des décomptes exacts de
rareté cohérents, pas le même axe, et les pages les gardent séparés à dessein.
Savoir si les liens causals plus profonds tiennent, si la rigidité est
elle-même une conséquence de l'effondrement de distinction dont elle partage
l'échelle, de l'ordre de la centaine de cases, et si la géométrie des sigma-cycles est
ce qui plafonne la recherche constructive, sont des questions ouvertes du tableau
des [problèmes ouverts](/fr/research/open-problems/), pas des affirmations faites ici.
## Pages de cette section
- [Pourquoi un ordinateur plus rapide ne change rien](https://eternity2.dev/fr/research/why/prune-vs-speed/) — L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
- [Un jeu de pièces extrême sur chaque axe mesuré](https://eternity2.dev/fr/research/why/why-e2-is-hard/) — Mesurez les 256 pièces officielles sans aucun solveur en vue et chaque porte structurelle est fermée : aucune pièce symétrique par rotation, 5 paires jumelles sur 32 640 appariements, un plafond de 307 sur 480 si rien ne tourne, des budgets de couleurs qui s'apparient à exactement 480 sans aucun jeu, et une palette 17+5 posée au point d'une-solution-attendue.
- [Quel mur arrête quelle méthode](https://eternity2.dev/fr/research/why/walls-and-methods/) — La section recherche a deux versants : les murs structurels qui rendent Eternity II difficile, et les algorithmes conçus pour les franchir. Cette page fait le pont : chaque méthode confrontée au mur qu'elle attaque réellement, et le score auquel ce mur l'a arrêtée.
- [Cette instance est-elle NP-complète, et comment l'encoder ?](https://eternity2.dev/fr/research/why/how-hard-is-this-instance/) — L'appariement de bords est NP-complet en tant que famille, mais cela ne dit rien d'un plateau 16×16 fixé : une instance isolée est une constante, pas un problème. Ce qui est vrai, c'est la dureté au pire cas de la famille et la dureté empirique de cette instance, et comment écrire le puzzle pour un solveur SAT, de couverture exacte ou de PLNE, avec de petits croquis détaillés. Une mesure sur plateaux plantés chiffre le choix de la formulation : une falaise de résolubilité qu'un paradigme de recherche heurte et qu'un autre franchit, et qui bouge avec le nombre de couleurs.
- [La théorie complexe : compter l'arbre de recherche avant de le parcourir](https://eternity2.dev/fr/research/why/complex-theory/) — La théorie complexe de Brendan Owen estime la largeur de l'arbre de recherche à chaque profondeur, et jusqu'au nombre total de solutions. Beaucoup, dans la communauté, la tiennent pour la chose la plus importante à comprendre sur Eternity II.
- [Pourquoi 479 est impossible](https://eternity2.dev/fr/research/why/parity-defect-floor/) — Un argument de comptage sur le jeu de pièces officiel interdit un score d'exactement 479/480 : les demi-arêtes de chaque couleur viennent en nombre pair, et un unique raccord cassé laisserait deux comptes impairs. Le plancher sous le parfait est 478, et au plus 76 quasi-solutions à un coup peuvent entourer une solution.
- [Calibré sur le pic de difficulté](https://eternity2.dev/fr/research/why/phase-transition/) — Eternity II utilise 22 couleurs, réparties entre 17 couleurs intérieures et 5 réservées au cadre, et ce chiffre d'environ 17 se situe près du point où ce type de casse-tête est le plus difficile à résoudre (la transition est une bande, pas un entier unique).
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [Le mur des 470 : une frontière de phase, pas une limite d'ingénierie](https://eternity2.dev/fr/research/why/the-470-wall/) — Le plateau communautaire dans les hauts 460 se lit comme une frontière de phase entropique de l'instance, pas comme une limite du génie logiciel : le calcul exact sur le jeu officiel donne une densité de contraintes proche de 0,0094, un paysage recuit qui s'effondre au-delà de 470 et ne franchit 1 qu'à 480, et un nombre attendu de 10 à 20 solutions parfaites quasi orthogonales entre elles. Les nombres côté instance sont exacts ; le tableau du fossé de recouvrement en 16x16 est une conjecture assumée.
- [L'entropie et la loi d'aire](https://eternity2.dev/fr/research/why/entropy-area-law/) — Eternity II a deux règles : les bords doivent coïncider, et chaque pièce ne sert qu'une fois. La première est généreuse. Toute la difficulté tient dans la seconde.
- [Motifs interdits](https://eternity2.dev/fr/research/why/forbidden-patterns/) — Presque tout petit assemblage de pièces que l'on pourrait construire est impossible. Pour un carré 2×2, 99,72 % des façons de placer quatre pièces ne pourront jamais s'accorder.
- [Aucun coup forcé](https://eternity2.dev/fr/research/why/no-forced-moves/) — La manière habituelle de résoudre un casse-tête logique consiste à repérer un emplacement où une seule pièce convient, à la poser, puis à recommencer. Ce levier n'existe pas ici : chaque pièce intérieure admet entre 73 et 137 voisines possibles, et aucune n'est jamais contrainte à une seule option.
- [Pureté de l'anneau : le bord est un sous-puzzle clos, sans aucun jeu](https://eternity2.dev/fr/research/why/ring-purity/) — Cinq des 22 couleurs ne touchent jamais les 196 pièces intérieures. La liste des pièces force toute solution valide à dépenser les 120 demi-arêtes de cadre sur l'anneau du bord : un sous-puzzle autonome à jeu exactement nul (120 = 120), un circuit eulérien sur cinq sommets, relié à l'intérieur par seulement 56 arêtes tournées vers le centre.
- [Invariants de flux : une loi de rotation que l'ensemble officiel respecte exactement](https://eternity2.dev/fr/research/why/flux-invariants/) — Pondérez chaque couleur d'arête et lisez chaque pièce comme un vecteur signé, est moins ouest sur un axe, sud moins nord sur l'autre. Sommé sur une région quelconque, les coutures intérieures s'annulent et seule la bordure survit, si bien que le plateau totalise zéro. Un quart de tour pivote le vecteur d'un angle droit, ce qui fait de la loi une algèbre dans les entiers de Gauss.
- [Pourquoi le basin-hopping semble impossible](https://eternity2.dev/fr/research/why/sigma-cycles/) — Si l'on ne peut pas améliorer un excellent plateau en le peaufinant, peut-être peut-on sauter vers un autre excellent plateau. Sur chaque paire de records testée, c'est impossible, et la raison structurelle mérite qu'on la voie.
- [Le casse-tête n'a pas de fonction de hauteur](https://eternity2.dev/fr/research/why/no-height-function/) — Empruntez l'astuce du physicien qui rend les défauts cristallins solubles et tentez de transformer un joint dépareillé en dislocation dotée d'une charge conservée. Cela échoue de trois façons : une hauteur scalaire est aveugle aux ruptures, l'ensemble des ruptures forme des chaînes ouvertes et non des boucles fermées, et le courant orienté par couleur n'est pas conservé. Seul un bit de parité non signé survit.
- [Où vivent les désaccords](https://eternity2.dev/fr/research/why/mismatch-geometry/) — Un plateau quasi parfait ne répartit pas uniformément ses rares erreurs. Il les concentre dans une seule bande de cinq rangées et laisse tout le reste impeccable. Quelle bande ? Cela dépend de la direction dans laquelle la recherche a rempli le plateau, et l'on voit le reflet sur les vrais plateaux record.
- [La région difficile qu'on ne peut pas concevoir autrement](https://eternity2.dev/fr/research/why/irreducible-hard-region/) — Remplissez un plateau dans un ordre fixe et les trois quarts du haut se posent librement, tandis que la difficulté s'entasse dans la bande que vous terminez en dernier. Sur quarante plateaux générés, tout le reste tombe dans la moitié basse à chaque fois ; mélangez l'ordre de remplissage et il se disperse, donc la région difficile est fabriquée par le balayage, pas cachée dans le plateau.
- [L'immédiateté des contraintes : chaque ordre de remplissage paie les mêmes 480](https://eternity2.dev/fr/research/why/constraint-immediacy/) — Sommez, pour n'importe quel ordre de visite du plateau 16x16, le nombre de voisins déjà posés que chaque case affronte à l'instant où elle est remplie : le total vaut exactement 480, quel que soit l'ordre. Un ordre de remplissage ne peut pas ajouter de restriction ; il choisit seulement quand chaque restriction s'applique. Ce qui sépare les ordres, c'est l'immédiateté, la distance entre une décision et sa réfutation, et seuls les extrêmes de ce classement appartiennent au puzzle plutôt qu'au moteur.
- [Le plateau comme mot de code](https://eternity2.dev/fr/research/why/permutation-code-wall/) — Lisez un plateau complet comme un mot de code dont les 480 jointures intérieures sont des contrôles de type parité, et le score d'arêtes appariées devient 480 moins le nombre de contrôles en échec. C'est une lentille nette reposant sur une seule identité porteuse, et il vaut la peine d'être précis sur ce que la vue par codes correcteurs apporte et sur ce qu'elle ne fait que renommer.
- [Le vol de pièce, là où meurent les solveurs](https://eternity2.dev/fr/research/why/piece-theft/) — Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
- [L'emplacement des indices l'emporte sur leur nombre](https://eternity2.dev/fr/research/why/hint-geometry/) — Sur un casse-tête 16×16 construit à l'image d'Eternity II, dix-huit indices dispersés sur le plateau le résolvent en quelques minutes, là où les entasser en rangées contiguës en réclame une centaine rien que pour ramener la recherche à des dizaines de milliards de placements. C'est la position, non le nombre, qui fait levier, et elle pointe droit vers la fin de partie.
- [Relier les indices tôt n'aide pas, cela nuit](https://eternity2.dev/fr/research/why/clue-corridors/) — Relier les paires d'indices par des couloirs de pièces posés tôt donne l'impression d'ajouter des contraintes. Le comptage dit le contraire : un couloir de largeur 1 entre les deux indices les plus proches admet environ deux millions de milliards de remplissages distincts, donc il n'exclut presque rien tout en dépensant des pièces dont la fin de partie aura besoin. Dans un A/B contrôlé, chaque bras couloir a perdu face à son propre témoin à chaque taille de plateau.
- [Les couleurs rares vivent sur le cadre](https://eternity2.dev/fr/research/why/rare-color-geography/) — Cinq des 22 couleurs d'Eternity II n'apparaissent que le long de l'anneau de bordure, chacune sur exactement 24 arêtes, jamais une seule fois à l'intérieur. Une séparation structurelle qui façonne la manière dont chaque solveur traite le cadre.
- [Le cadre n'est pas le bassin : une bordure différente n'ouvre pas un plateau plus haut](https://eternity2.dev/fr/research/why/frame-is-not-the-basin/) — L'anneau de bordure est la partie la plus contrainte du casse-tête ; une bordure forte différente devrait donc fixer un intérieur haut différent. Il n'en est rien. De nombreuses bordures entièrement appariées et distinctes, chacune complétée par un même producteur d'intérieur fixe, donnent des sommets quasi maximalement différents les uns des autres mais uniformément bas, aucun près de la zone record. La bordure diversifie le plateau sans en prédire le plafond.
- [L'équilibre du bord](https://eternity2.dev/fr/research/why/border-balance/) — Un plateau résolu dissimule une loi comptable toute simple : chaque couleur que le bord tend vers l'intérieur, l'intérieur la lui rend aussitôt. La violer, c'est savoir sur-le-champ que le plateau est faux ; la respecter, en revanche, ne garantit rien.
- [Conçu pour être insoluble : la recette](https://eternity2.dev/fr/research/why/design-recipe/) — Eternity II applique une recette pour obtenir le casse-tête à raccords de bords le plus difficile possible : forme compacte, aucune pièce symétrique ni dupliquée, palettes cloisonnées, fréquences plates, une seule solution attendue. La communauté a rétro-conçu chaque ingrédient dès l'année du lancement.
- [La moisson de théorèmes : treize lois de structure](https://eternity2.dev/fr/research/why/theorem-sweep/) — Un seul arc de recherche, treize familles de théorèmes structurels : pureté de l'anneau, le plancher de parité à 479, le mur des 470 comme frontière de phase, les invariants de flux, la loi d'aire entropique, et les résultats d'impossibilité qui chiffrent chaque raccourci classique. Cette page est la carte.
---
# L'équilibre du bord
> Un plateau résolu dissimule une loi comptable toute simple : chaque couleur que le bord tend vers l'intérieur, l'intérieur la lui rend aussitôt. La violer, c'est savoir sur-le-champ que le plateau est faux ; la respecter, en revanche, ne garantit rien.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/border-balance/
- Mise à jour: 2026-07-22
- Sujets: search-space, structure
- Reproduire: `just research-border-mismatch-share`
- Source: Équilibre des types d'arêtes du bord observé lors de l'été de lancement (angwin_uk, août 2007) — https://groups.io/g/eternity2/message/2073
- Source: La condition de bord plus forte de mjqxxxx : effectifs pairs, répartis à parts égales entre arêtes gauche et droite (août 2007) — https://groups.io/g/eternity2/message/2098
- Source: Observation de Brendan Owen sur l'appariement des effectifs d'arêtes dans les jeux plantés (juin 2007) — https://groups.io/g/eternity2/message/422
- Source: Énoncé de Hopfer (2022) de la condition d'égalité des multiensembles (groups.io msg 10754) — https://groups.io/g/eternity2/message/10754
- Source: Reformulation nette de Hopfer : même mélange d'images internes sur les 56 pièces de bord (msg 10757) — https://groups.io/g/eternity2/message/10757
---
Ne considérez que la couture entre l'anneau extérieur de pièces de bord et le
premier anneau de pièces intérieures. Chaque arête qui traverse cette couture
présente une couleur, comptée une fois côté bord et une fois côté intérieur.
Dans toute solution complète, les deux décomptes sont identiques : le
multiensemble des couleurs que le bord présente vers l'intérieur égale
exactement le multiensemble que l'intérieur présente vers l'extérieur.
Appelons **déficit** ce déséquilibre, $\Delta$ : la moitié du désaccord total
entre les deux décomptes. Un plateau achevé et correct a $\Delta = 0$. Les
quatre solutions complètes connues, sur quatre jeux de pièces différents, la
satisfont toutes exactement. Ainsi $\Delta > 0$ est un certificat qu'un plateau
ne pourra jamais être complété : une condition nécessaire, réelle et peu
coûteuse.
## La loi, en une ligne
À travers la couture bord↔intérieur, les couleurs que le bord montre vers
l'intérieur et les couleurs que l'intérieur montre vers l'extérieur forment le
même multiensemble. En notant $A[c]$ et $B[c]$ les deux décomptes par couleur :
$$
\Delta \;=\; \tfrac{1}{2} \sum_{c} \bigl|\, A[c] - B[c] \,\bigr| \;=\; 0 .
$$
## Le voir sur un vrai plateau
Un plateau 8×8 résolu part à l'équilibre ($\Delta = 0$). Retirez une pièce de
bord et observez quelles couleurs se déséquilibrent, et le déficit grimper.
Essayez ensuite le bouton d'échange, et observez le piège.
> **[Figure]** Interactif : le déficit d'équilibre du bord NS-1 — interactive: Ns1Lab. Rendered on the canonical page (link above); not shown in this markdown export.
## Le piège, et pourquoi il compte
Échanger deux pièces de bord laisse $\Delta$ à 0. L'échange déplace des couleurs
le long de la couture sans modifier l'un ou l'autre décompte ; l'invariant y est
donc aveugle. Pire, sur une quasi-solution, la plupart des erreurs restantes ne
se trouvent pas du tout sur la couture du bord. Elles siègent d'intérieur à
intérieur, là où NS-1 ne regarde jamais. Sur les neuf plateaux de la classe 469
du corpus, parmi les 99 arêtes non appariées qui subsistent, 86,9 % siègent
d'intérieur à intérieur et pas une seule n'est de bord à bord ; seuls les 13,1 %
restants tombent sur la couture qu'inspecte NS-1. L'invariant est aveugle à la
grande majorité de ce qui reste faux.
C'est là toute la texture d'Eternity II en miniature. Une vérification aussi
propre soit-elle ne dit jamais que « assurément cassé », jamais « assurément
correct ». Le puzzle résiste à tout certificat de progrès à bon marché.
## Est-ce utile, alors ?
Oui, comme élagueur de fin de recherche. Une fois que le solveur a refermé
l'anneau de bord, imposer $\Delta = 0$ rejette une part utile des impasses
profondes au prix d'un seul passage sur les 56 arêtes de la couture (l'ampleur
exacte de cette part est mise en file pour mesure, pas encore un banc figé). C'est
nécessaire-mais-lâche : cela écarte les mauvais états à peu de frais et laisse
intacte la partie difficile, l'intérieur.
## À lire aussi
- [Les couleurs rares vivent sur le cadre](https://eternity2.dev/fr/research/why/rare-color-geography/) — Cinq des 22 couleurs d'Eternity II n'apparaissent que le long de l'anneau de bordure, chacune sur exactement 24 arêtes, jamais une seule fois à l'intérieur. Une séparation structurelle qui façonne la manière dont chaque solveur traite le cadre.
- [Motifs interdits](https://eternity2.dev/fr/research/why/forbidden-patterns/) — Presque tout petit assemblage de pièces que l'on pourrait construire est impossible. Pour un carré 2×2, 99,72 % des façons de placer quatre pièces ne pourront jamais s'accorder.
- [Aucun coup forcé](https://eternity2.dev/fr/research/why/no-forced-moves/) — La manière habituelle de résoudre un casse-tête logique consiste à repérer un emplacement où une seule pièce convient, à la poser, puis à recommencer. Ce levier n'existe pas ici : chaque pièce intérieure admet entre 73 et 137 voisines possibles, et aucune n'est jamais contrainte à une seule option.
---
# Relier les indices tôt n'aide pas, cela nuit
> Relier les paires d'indices par des couloirs de pièces posés tôt donne l'impression d'ajouter des contraintes. Le comptage dit le contraire : un couloir de largeur 1 entre les deux indices les plus proches admet environ deux millions de milliards de remplissages distincts, donc il n'exclut presque rien tout en dépensant des pièces dont la fin de partie aura besoin. Dans un A/B contrôlé, chaque bras couloir a perdu face à son propre témoin à chaque taille de plateau.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/clue-corridors/
- Mise à jour: 2026-07-22
- Sujets: structure, search-space
- Reproduire: `cd research/topics/clue-corridors/compute && cargo run --release --bin corridors > ../results/corridor_counts.json`
- Source: Placements officiels des indices (cases 34, 45, 135, 210, 221 ; données d'instance sur e2.bucas.name) — https://e2.bucas.name/
---
Les cinq indices sont les seules cases du puzzle officiel dont le contenu est
connu avec certitude. Regardez le plateau une minute et une idée s'impose
d'elle-même : les relier. Poser une courte chaîne de pièces d'un indice à
l'autre, faire de chaque chaîne une épine dorsale fixe, et espérer que ces
épines contraignent tout ce qui suit. L'idée m'a plu au point de la mesurer,
et la mesure est un négatif net, deux fois plutôt qu'une. Un comptage exact
montre qu'un couloir d'indice à indice admet environ deux millions de
milliards de remplissages distincts, donc s'y engager ne contraint presque
rien ; et dans un A/B contrôlé, chaque bras qui posait ses couloirs tôt a
fini derrière le même solveur sans couloirs, à chaque taille de plateau
testée.
## Cinq îlots, et les ponts entre eux
Les indices occupent les cases 34, 45, 135, 210 et 221, soit (x, y) = (2, 2),
(13, 2), (7, 8), (2, 13) et (13, 13) : quatre en retrait de deux cases par
rapport aux coins, un juste à gauche du centre. Leurs distances de Manhattan
deux à deux vont de 10 à 22. Aucune paire d'indices n'est proche de
l'adjacence : le pont le plus court entre deux d'entre eux est une chaîne de
dix placements.
Ce que vaut un placement de chaîne dépend du nombre de côtés qu'il doit
apparier. Avec $n = 196$ pièces intérieures et $C = 22$ couleurs intérieures
déclarées, une case qui doit s'accorder avec $k$ voisins déjà posés a en
espérance $b_k = 4n / C^k$ candidats légaux : $b_1 \approx 35{,}6$,
$b_2 \approx 1{,}62$, $b_3 \approx 0{,}074$. Un placement n'élague, en
espérance, que lorsque $b_k$ passe sous 1, ce qui exige $k \ge 3$ côtés
appariés. Un couloir de largeur 1 est bâti entièrement de placements à
$k = 1$ : chaque nouvelle pièce ne touche que la précédente et hérite
d'environ 36 candidats légaux à chaque pas.
## Ce que vaut un couloir : deux millions de milliards de remplissages
La table de branchement est un modèle uniforme, alors le vérificateur compte
aussi exactement sur le vrai jeu de pièces. Le vrai jeu est plutôt plus
permissif : le nombre de couples (pièce, rotation) présentant une couleur
intérieure donnée sur un côté donné vaut en moyenne 46,1 (de 43 à 49), contre
35,6 pour le modèle. Construisez la matrice de transfert $T[a][b]$ qui compte
les pièces intérieures montrant la couleur $a$ d'un côté et la couleur $b$ du
côté opposé, élevez-la à la longueur du couloir, et ses puissances donnent
des comptages exacts de chemins. Pour le couloir de longueur 10 entre la
paire d'indices la plus proche, les deux couleurs d'extrémité étant fixées
par les indices, ce comptage vaut $2{,}59\times10^{15}$ chemins (moyenne sur
les paires de couleurs). Un chemin peut réutiliser une pièce ; la correction
de distinction en champ moyen $\prod_{j=0}^{9}(1 - j/196) = 0{,}792$ laisse
$2{,}05\times10^{15}$ remplissages à pièces toutes distinctes. Mon premier
passage sur ce comptage, avec un modèle de pièces un peu plus serré, donnait
$1{,}9\times10^{15}$ ; le vérificateur archivé s'établit à
$2{,}05\times10^{15}$, et la conclusion ne bouge pas entre les deux.
Un engagement satisfiable de deux millions de milliards de façons n'est pas
une contrainte au sens utile du terme. Le poser exclut une fraction
infinitésimale de l'espace de recherche, tout en retirant dix pièces du pot à
$k = 1$, précisément là où l'arithmétique dit que la recherche ne récupère
rien. Reliez deux ou trois paires d'indices et la facture monte à 10 à 20
pièces dépensées avant qu'une seule case réellement contrainte n'ait été
remplie.
## L'A/B : chaque bras couloir a perdu
Le comptage dit que le couloir n'apporte rien ; il faut une expérience pour
montrer qu'il coûte. La série d'origine de l'étude comparait trois bras qui
ne diffèrent que par la phase couloir : un témoin (indices épinglés, puis un
remplissage glouton à contact maximal avec redémarrages), un bras couloir de
largeur 1, et un bras ruban de largeur 2, chacun posant ses routes d'indice à
indice avant le même remplissage. Elle a tourné sur des instances à l'échelle
avec une géométrie d'indices fidèle, aux tailles N = 8 à 16, avec 12 graines
appariées par cellule et 20 secondes par exécution monocœur.
| Plateau | Moyenne témoin | Couloir largeur 1 | Ruban largeur 2 |
|---:|---:|---:|---:|
| 8×8 | 92,50 | -4,67 | -3,00 |
| 10×10 | 144,17 | -9,58 | -5,50 |
| 12×12 | 209,83 | -13,58 | -6,75 |
| 14×14 | 285,67 | -12,00 | -7,83 |
| 16×16 | 377,17 | -17,67 | -8,08 |
Les scores sont des arêtes appariées, et chaque delta oppose un bras à son
propre témoin sur graines appariées. Chaque bras couloir a perdu face à son
témoin à chaque taille, avec un Wilcoxon apparié $|z| \ge 2{,}80$. Le
dommage croît avec les plateaux, et donc avec les couloirs : une perte
moyenne de 4,7 arêtes à N = 8 devient 17,7 à N = 16, où les deux
distributions de scores se séparent franchement (la pire graine du témoin a
marqué 373 ; la meilleure du bras couloir, 365). Et élargir le couloir en
ruban de 2 cases, ce qui permet à son second rang d'arriver à 2 contacts au
lieu de 1, divise à peu près le dommage par deux à chaque taille. C'est
exactement la dépendance en largeur que le comptage prédit, et c'est ce qui
relie le mécanisme à la mesure.
## Ce que cela ferme, et ce que cela laisse ouvert
Le négatif est précis : poser tôt des couloirs d'indice à indice de largeur 1
(ou 2) nuit, et plus de couloir nuit davantage. La même arithmétique qui les
condamne désigne aussi l'endroit où la contrainte est réelle : les cases
posées avec 2 contacts ou plus, puisque seul $k \ge 3$ élague franchement et
que $k = 2$ s'en approche. Faire croître des régions compactes ancrées sur
les indices, où la plupart des cases arrivent avec plusieurs contacts, est un
geste différent, que cette expérience ne touche pas.
Le résultat rejoint aussi ce que les études d'indices trouvent avec
constance. Sur un puzzle 16×16 apparenté,
[la position des indices l'emporte sur leur nombre](/fr/research/why/hint-geometry/)
parce que la valeur d'un indice tient à ce qu'il atteigne la partie du
plateau où la recherche peine ; et dans
[l'étude d'indices du labo](/fr/research/lab/experiments/raphael-anjou/hint-study/),
les cinq indices officiels seuls n'ont jamais aidé un backtracker
chronologique sur les plateaux testés. Un couloir est la façon extrême de mal
dépenser ce cadeau : il encaisse les cinq cases fixes immédiatement, dans la
région la moins chère de la recherche, et le paie sur le pot de pièces. Comme
les négatifs du [balayage de théorèmes](/fr/research/why/theorem-sweep/),
celui-ci vient avec son prix : pour que relier les indices paie, il faudrait
que ses cases arrivent avec trois contacts, et un chemin de largeur 1 n'y
parvient jamais.
> **Note**
>
> Le versant comptage se reproduit exactement : le vérificateur du répertoire du sujet recalcule la géométrie des indices, la table de branchement, l'offre de couleurs et les comptages de couloirs par matrice de transfert depuis le jeu de pièces officiel en une seconde environ, et sa sortie est archivée dans results/corridor_counts.json. Le tableau A/B est la mesure d'origine de l'étude : la re-exécution empaquetée des trois bras est spécifiée dans le plan de reproduction du sujet et ses tableaux ne sont pas encore archivés ; lisez donc ces deltas comme le relevé d'une série, la confirmation par une série fraîche restant à venir.
## À lire aussi
- [L'emplacement des indices l'emporte sur leur nombre](https://eternity2.dev/fr/research/why/hint-geometry/) — Sur un casse-tête 16×16 construit à l'image d'Eternity II, dix-huit indices dispersés sur le plateau le résolvent en quelques minutes, là où les entasser en rangées contiguës en réclame une centaine rien que pour ramener la recherche à des dizaines de milliards de placements. C'est la position, non le nombre, qui fait levier, et elle pointe droit vers la fin de partie.
- [L'étude sur les indices](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/hint-study/) — Donner à un backtracker cinq pièces correctes gratuitement, dans la géométrie même des indices du puzzle. Il s'avère que cela n'aide pas, et selon l'ordre de remplissage cela peut nuire gravement, car une pièce épinglée est une contrainte dure qu'un ordre de remplissage fixe doit satisfaire à son arrivée. Une famille d'ordres de remplissage, exécutée sur les mêmes plateaux indicés, un seul cœur, mesurée contre l'absence totale d'indices.
- [La moisson de théorèmes : treize lois de structure](https://eternity2.dev/fr/research/why/theorem-sweep/) — Un seul arc de recherche, treize familles de théorèmes structurels : pureté de l'anneau, le plancher de parité à 479, le mur des 470 comme frontière de phase, les invariants de flux, la loi d'aire entropique, et les résultats d'impossibilité qui chiffrent chaque raccourci classique. Cette page est la carte.
---
# La théorie complexe : compter l'arbre de recherche avant de le parcourir
> La théorie complexe de Brendan Owen estime la largeur de l'arbre de recherche à chaque profondeur, et jusqu'au nombre total de solutions. Beaucoup, dans la communauté, la tiennent pour la chose la plus importante à comprendre sur Eternity II.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/complex-theory/
- Mise à jour: 2026-07-02
- Sujets: structure, backtracking
- Source: La forme close du pic de profondeur de Brendan Owen, 256·(1−1/e) (groups.io msg 8125, 2010) — https://groups.io/g/eternity2/message/8125
- Source: La résolution 10×10 de Peter McGavin validant la théorie complexe (groups.io msg 9686, 2017) — https://groups.io/g/eternity2/message/9686
- Source: Les estimations du nombre de solutions de Brendan Owen (groups.io message 5209) — https://groups.io/g/eternity2/message/5209
- Source: L'implémentation de référence et la table de profondeurs de Peter McGavin (groups.io message 11197) — https://groups.io/g/eternity2/message/11197
- Source: La tabulation « Backtracker estimates » de Brendan Owen pour les puzzles à indices et E2 (groups.io Databases) — https://groups.io/g/eternity2/databases
- Source: La validation estimé-contre-réel de Brendan Owen, « NxM puzzles using Eternity II subset pieces » (groups.io Files, dossier Brendan) — https://groups.io/g/eternity2/files/Brendan/NxM_actual_theory.pdf
- Source: L'étude heuristique-contre-nombre-de-nœuds de Brendan Owen, « Heuristics: 20×2 rectangle » (groups.io Files, dossier Brendan) — https://groups.io/g/eternity2/files/Brendan/heuristics.pdf
- Source: La mesure profondeur-contre-temps du backtracker par Joe, échantillon de 1 milliard d'itérations (groups.io msg 11725, 2026) — https://groups.io/g/eternity2/message/11725
---
> **À qui l'on doit cette idée**
>
> La théorie complexe est due à Brendan Owen, l'un des vérificateurs du puzzle ; Peter McGavin l'a [implémentée en C](https://groups.io/g/eternity2/message/11197) en arithmétique à précision arbitraire et a publié les chiffres. Nous la reprenons ici parce qu'un membre de la communauté (Dan Karlsson) a justement fait remarquer qu'elle manquait, et parce qu'elle sous-tend presque toutes les bonnes décisions qu'on peut prendre pour un solveur, à commencer par le choix de l'ordre de recherche.
## L'idée
Prenez un ordre de balayage et parcourez-le case par case. À chaque nouvelle
case, une pièce inutilisée tirée au hasard s'accorde à ses voisines déjà posées
avec une certaine probabilité : un produit de chances d'accord de couleur par
arête. Multipliez cela par le nombre de pièces restantes et vous obtenez le
nombre attendu de façons d'étendre le plateau d'une case de plus. Enchaînez ce
calcul sur les 256 cases et vous disposez d'une estimation en forme close de la
largeur de l'arbre de recherche à chaque profondeur et, à la dernière case, du
nombre de solutions complètes du puzzle.
C'est une moyenne, non un décompte exact : le modèle suppose que les 22
couleurs d'arête sont tirées indépendamment, ce qui est faux (quatre arêtes
sont soudées à une même pièce rigide). Mais calibré sur de petits puzzles dont
le nombre réel est connu, il tombe à un facteur deux près. C'est amplement
suffisant pour en discerner la forme.
## Les chiffres phares
| Indices posés | Solutions attendues |
| ------------------------------------ | ------------------- |
| Un indice (la pièce centrale seule) | ≈ 14 702 |
| Les cinq indices officiels | ≈ 1 |
Avec la seule pièce centrale imposée, le puzzle compte de l'ordre de quinze
mille solutions ; ajoutez les quatre autres indices et le nombre attendu chute
à environ $4\times10^{-8}$ : de manière écrasante, exactement une. C'est la
raison formelle pour laquelle le puzzle à 5 indices possède une unique solution
conçue.
## Les mêmes chiffres, confrontés à la réalité
Brendan a tabulé l'estimation non seulement pour E2 mais aussi pour les quatre
*puzzles à indices* plus petits, et c'est là qu'elle gagne sa crédibilité. Ces
puzzles à indices sont assez petits pour que leurs arbres aient été explorés
exhaustivement, si bien que l'estimation se place juste à côté du nombre réel.
Elle tombe à un facteur deux près, la calibration que cette page ne cesse de
promettre. La table consigne aussi le meilleur ordre de remplissage connu pour
chaque puzzle, et ils ne sont pas tous identiques : l'ordre est un choix que la
forme de l'espace de recherche récompense ou pénalise, non une propriété du
puzzle.
> **[Interactive: ClueEstimatesTable]** Rendered on the canonical page (link above); not shown in this markdown export.
Les puzzles à indices fournissent quatre points de mesure ; Brendan a vérifié
le modèle bien plus largement. Son étude **« NxM puzzles using Eternity II
subset pieces »** trace les nœuds-par-solution estimés contre le nombre *réel*
pour de l'ordre d'une centaine de plateaux plus petits construits à partir des
pièces mêmes d'E2, et sur un axe log-log le nuage épouse la diagonale sur onze
ordres de grandeur, de dix nœuds à $10^{11}$. Voilà le vrai fondement de la
confiance qu'on peut accorder à l'estimation sur un plateau trop grand pour
jamais être exploré : elle a eu raison partout où elle *pouvait* être vérifiée.
Une étude compagnon montre même qu'un score statique tout bête (la somme, au
carré, des comptes d'accords d'arête par case) prédit le nombre total de nœuds
d'un rectangle avec un $R^2$ d'environ 0,84, preuve de plus que le coût de la
recherche est inscrit dans la structure du plateau avant même qu'on ait posé
une pièce.
## L'entonnoir
Tracez la largeur attendue à chaque profondeur et trois régimes apparaissent.
Leur forme est ce que la communauté appelle l'entonnoir d'E2. Lancez le
balayage ci-dessous et observez le compteur : il grimpe astronomiquement,
puis bouge à peine pendant une centaine de cases à travers le plateau, cette
reptation plate au sein d'une bande astronomiquement large, c'est le mur, avant que les soixante dernières pièces ne le fassent redescendre en entonnoir.
> **[Figure]** interactive: ComplexFunnelAnimated. Rendered on the canonical page (link above); not shown in this markdown export.
## À vous d'essayer : l'ordre décide de l'entonnoir
La même estimation, exécutée en direct pour différents ordres de balayage. Le
pic du plateau (le point le plus large que la recherche doit franchir) est
décidé par le seul ordre, avant qu'un seul nœud ne soit posé.
> **[Figure]** Interactif : l'entonnoir de l'espace de recherche — interactive: ComplexFunnelLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Trois régimes
- **Croissance (profondeur 1–50).** Les solutions se multiplient
géométriquement, de un à environ $10^{27}$. Chaque placement est pour ainsi
dire gratuit ; rien ne vous contraint encore.
- **Plateau (profondeur 50–200).** L'arbre est à sa largeur maximale, environ
$10^{45}$ façons d'étendre, tandis que le nombre de solutions ne bouge
presque pas. C'est là que les backtrackers passent l'essentiel de leur temps :
un échantillon empirique ([groups.io msg 11725](https://groups.io/g/eternity2/message/11725),
un calcul de 1 milliard d'itérations) a mesuré 99 % du temps du backtracker à
une profondeur $>132$ et 70 % à une profondeur $>150$, c'est-à-dire au fond de
l'arbre plutôt qu'au début.
- **Effondrement (profondeur 200–256).** La largeur retombe de $10^{45}$ à
environ $10^{4}$. Les ~60 dernières pièces sont fortement contraintes :
chacune posée élimine des ordres de grandeur de branches. La fin de partie
est localement facile ; le difficile, c'est d'y parvenir.
## Pourquoi cela change votre façon de chercher
Si l'essentiel du travail se situe dans le plateau, l'objectif n'est pas la
vitesse brute. C'est de traverser le plateau jusqu'à l'entrée de l'entonnoir
(vers la profondeur 200), après quoi la recherche s'enchaîne de manière
déterministe. Et comme la théorie complexe note un ordre de balayage avant de
l'exécuter, on peut comparer des ordres par la hauteur du pic de leur plateau
plutôt que par tâtonnement. C'est la version rigoureuse d'une règle que ce site
énonce partout : l'ordre de remplissage est un choix de premier plan, et le
balayage de McGavin, du coin inférieur gauche et de gauche à droite, a été
retenu parce que la théorie complexe le disait bon.
## Des tuiles plus grandes
La même idée fonctionne si l'on place des tuiles 2×2 ou 3×3 au lieu de pièces
isolées : un bloc entier de cases est engagé d'un coup, ses arêtes internes
étant déjà accordées. Le [terrain de jeu des chemins de recherche](/playground/paths/)
vous permet de le faire pour de vrai : choisissez une forme de bloc (1×1, 2×1,
2×2, 3×3, …) et estampez des blocs sur la grille pour construire un chemin par
blocs. Lancez la course et un solveur de macro-pièces dédié engage un
sous-assemblage valide entier par bloc au lieu d'une pièce à la fois, si bien
que la recherche progresse région par région. L'estimation du pic de plateau,
en regard, note toujours l'ordre de cases qu'impliquent vos blocs, prédisant le
coût avant que vous n'exécutiez le moindre nœud.
## Ce qu'elle ne peut pas voir
La théorie complexe est une estimation au premier moment ; elle est donc
aveugle à une chose : la question de savoir si les nombreux plateaux partiels
comptés sont réellement distincts. Les [résultats d'entropie et de loi d'aire](/fr/research/why/entropy-area-law/)
montrent que la distinction s'effondre à mesure que l'aire remplie grandit, un effet du second
ordre que le modèle à arêtes indépendantes ne peut capter. Servez-vous donc de
la théorie complexe pour choisir des ordres et lire la forme de l'arbre, jamais
comme un décompte exact ni comme une borne.
## Provenance et validation
La trace écrite de la théorie court à travers la liste de diffusion. Brendan
Owen a publié le modèle achevé en avril 2008
([msg 5197](https://groups.io/g/eternity2/message/5197),
[5209](https://groups.io/g/eternity2/message/5209)), et a plus tard démontré
une élégante forme close : pour un ordre de balayage, le pic du nombre de nœuds
se situe à la profondeur
$256\,(1 - 1/e) \approx 161.8$
([msg 8125](https://groups.io/g/eternity2/message/8125)) ; l'entonnoir
ci-dessus y culmine empiriquement. Peter McGavin a mis la théorie en forme
([msg 9188](https://groups.io/g/eternity2/message/9188)), a publié le chiffre
de 14 702 solutions attendues dès 2011
([msg 8924](https://groups.io/g/eternity2/message/8924)), et a livré en 2017 sa
validation la plus forte : la résolution du benchmark 10×10 sans indice de
Brendan en explorant les premières rangées classées par théorie complexe,
soit environ 180 années-cœur, tombant dans les prédictions de la théorie
([msg 9686](https://groups.io/g/eternity2/message/9686),
[9688](https://groups.io/g/eternity2/message/9688)). Son implémentation C de
référence de 2024 ([msg 11197](https://groups.io/g/eternity2/message/11197))
est ce que l'estimateur en direct de cette page porte, ligne pour ligne.
## À lire aussi
- [Pourquoi un ordinateur plus rapide ne change rien](https://eternity2.dev/fr/research/why/prune-vs-speed/) — L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
- [Calibré sur le pic de difficulté](https://eternity2.dev/fr/research/why/phase-transition/) — Eternity II utilise 22 couleurs, réparties entre 17 couleurs intérieures et 5 réservées au cadre, et ce chiffre d'environ 17 se situe près du point où ce type de casse-tête est le plus difficile à résoudre (la transition est une bande, pas un entier unique).
- [L'entropie et la loi d'aire](https://eternity2.dev/fr/research/why/entropy-area-law/) — Eternity II a deux règles : les bords doivent coïncider, et chaque pièce ne sert qu'une fois. La première est généreuse. Toute la difficulté tient dans la seconde.
- [Cette instance est-elle NP-complète, et comment l'encoder ?](https://eternity2.dev/fr/research/why/how-hard-is-this-instance/) — L'appariement de bords est NP-complet en tant que famille, mais cela ne dit rien d'un plateau 16×16 fixé : une instance isolée est une constante, pas un problème. Ce qui est vrai, c'est la dureté au pire cas de la famille et la dureté empirique de cette instance, et comment écrire le puzzle pour un solveur SAT, de couverture exacte ou de PLNE, avec de petits croquis détaillés. Une mesure sur plateaux plantés chiffre le choix de la formulation : une falaise de résolubilité qu'un paradigme de recherche heurte et qu'un autre franchit, et qui bouge avec le nombre de couleurs.
---
# L'immédiateté des contraintes : chaque ordre de remplissage paie les mêmes 480
> Sommez, pour n'importe quel ordre de visite du plateau 16x16, le nombre de voisins déjà posés que chaque case affronte à l'instant où elle est remplie : le total vaut exactement 480, quel que soit l'ordre. Un ordre de remplissage ne peut pas ajouter de restriction ; il choisit seulement quand chaque restriction s'applique. Ce qui sépare les ordres, c'est l'immédiateté, la distance entre une décision et sa réfutation, et seuls les extrêmes de ce classement appartiennent au puzzle plutôt qu'au moteur.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/constraint-immediacy/
- Mise à jour: 2026-07-22
- Sujets: backtracking, search-space
- Reproduire: `cd research/topics/constraint-immediacy/compute && cargo run --release -- repro-korder ../results`
- Source: Le kit de reproduction derrière cette page : vérificateur des comptes de contraintes, solveur simple à deux bras, résultats archivés (research/topics/constraint-immediacy) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/constraint-immediacy
---
Une intuition récurrente au sujet des backtrackers d'Eternity II tient en
une phrase : si la recherche visitait d'abord les cinq cases indices, en
suivant un chemin qui les relie tôt, les indices « restreindraient le puzzle
plus vite » et l'arbre de recherche rétrécirait. L'intuition sonne juste, et
la comptabilité dit le contraire. Aucun ordre de remplissage ne restreint le
puzzle plus qu'un autre. Ce qu'un ordre contrôle réellement, c'est *quand*
chaque restriction s'applique, et cette question de calendrier a une réponse
nette : les restrictions payées tard sont les plus chères.
## Une somme qu'aucun ordre ne peut changer
Fixez un ordre de visite complet des 256 cases. Quand la case $i$ est
remplie, notez $k_i$ le nombre de ses voisines déjà posées : le nombre de
contraintes d'arête que la nouvelle pièce doit satisfaire à cet instant.
Chaque jointure intérieure du plateau est vérifiée exactement une fois, par
celle de ses deux extrémités posée en second. La somme des $k_i$ vaut donc
le nombre de jointures intérieures, soit sur le plateau 16x16
$2 \times 16 \times 15 = 480$, les mêmes 480 jointures que compte le
[plancher de parité](/fr/research/why/parity-defect-floor/). Le total est
invariant par chemin :
$$\sum_i k_i = 480 \quad \text{pour tout ordre de visite.}$$
Le kit de reproduction vérifie cela exactement pour cinq ordres de visite
sur le plateau officiel. Les cinq somment à 480 ; seule change la façon dont
le total se distribue :
| ordre | k=0 | k=1 | k=2 | k=3 | k=4 | somme |
|---|---|---|---|---|---|---|
| hint-link | 1 | 75 | 137 | 41 | 2 | 480 |
| outer-spiral | 1 | 58 | 170 | 26 | 1 | 480 |
| row-major | 1 | 30 | 225 | 0 | 0 | 480 |
| boustrophédon | 1 | 30 | 225 | 0 | 0 | 480 |
| border-first | 1 | 58 | 170 | 26 | 1 | 480 |
Ces cinq valeurs sont les mesures d'origine du moteur de l'étude source ; la reproduction empaquetée couvre l'invariant et les deux solveurs simples ci-dessous, pas ce tableau.
L'ordre ligne par ligne (row-major) est presque uniforme : passées la
première ligne et la première colonne, chaque case affronte exactement deux
contraintes. L'ordre hint-link (un chemin qui enchaîne tôt les cinq cases
indices par des corridors de liaison) paie ses 41 cases à trois contraintes
et ses 2 cases à quatre en posant d'abord 75 cases vérifiées contre une
seule voisine. La loi de conservation en fait un échange, jamais un gain :
une case ne peut affronter trois ou quatre voisines posées que parce que
d'autres cases ont été posées presque sans vérification avant elle.
## L'immédiateté : le moment où la facture tombe
Si le volume total de contraintes est fixé, qu'est-ce qui distingue les
ordres en pratique ? Le coût d'un placement erroné est la taille du
sous-arbre que la recherche explore avant que la réfutation n'apparaisse. Un
ordre fait de longues portions sous-contraintes (des suites de cases
vérifiées contre une seule voisine, avec des dizaines de candidats chacune)
suivies de fermetures sur-contraintes (des cases vérifiées contre trois ou
quatre) échoue *en dernier* : les erreurs commises à bas prix dans le
corridor ne sont détectées qu'à la fermeture, un sous-arbre entier plus
tard. Un ordre qui maintient la distance entre une décision et sa réfutation
près de zéro échoue *tout de suite*, et tout le bénéfice est là.
C'est le principe d'immédiateté des contraintes : restreindre tôt est le bon
choix exactement quand la restriction teste chaque décision sur-le-champ.
L'ordre bord-d'abord (border-first) engage en premier le sous-ensemble le
plus contraint (les 60 pièces de bord, qui n'admettent qu'une seule
orientation sur le pourtour), si bien que ses restrictions s'appliquent à
l'instant où elles naissent. Le chemin hint-link est le cas opposé, une
précocité géométrique sans immédiateté : les indices sont atteints tôt, mais
le long de corridors dont les placements restent presque sans test jusqu'à
ce que le plateau se referme autour d'eux.
## Ce que le moteur a mesuré
Le principe a été extrait de runs à ordre fixe du moteur de recherche du
projet, la même famille qu'examine
[l'étude DFS](/fr/research/lab/experiments/raphael-anjou/dfs-study/). Ici et
plus bas, les scores sont des arêtes intérieures appariées sur 480 selon le
scoreur canonique qui exclut le pourtour ; aucun de ces nombres n'est une
revendication de record, et les tables de records vivent sur
[/research/records](/fr/research/records/).
| ordre | arêtes appariées (moteur) |
|---|---|
| hint-link | 51 |
| outer-spiral | 204 |
| couture à deux fronts | 3 à 5 sous row-major |
| row-major | 433 |
| border-first | 445 |
Un seul principe couvre toute la table : hint-link et la spirale échouent en
dernier et s'effondrent ; row-major est uniforme et solide ; border-first
ajoute un test immédiat sur les pièces les plus contraintes et finit en
tête.
## La contre-épreuve au solveur simple
Un classement mesuré sur un seul moteur peut être une propriété de ce
moteur. Pour séparer les deux, la reproduction a relancé les cinq ordres sur
un solveur volontairement simple, deux bras à 60 s par ordre et par bras sur
le plateau officiel, un seul cœur sur Apple Silicon : une passe gloutonne au
meilleur ajustement qui remplit tout le plateau en tolérant les défauts, et
une recherche en profondeur à ajustement parfait avec retour arrière
chronologique, notée sur son plus profond préfixe cohérent (16 à 47
milliards de nœuds par ordre, le budget a donc été réellement dépensé). Le
fichier de résultats archive un lien visionneuse pour chaque plateau final.
| ordre | glouton | score DFS | profondeur DFS |
|---|---|---|---|
| hint-link | 316 | 44 | 60/256 |
| outer-spiral | 366 | 28 | 35/256 |
| row-major | 343 | 344 | 194/256 |
| boustrophédon | 359 | 342 | 193/256 |
| border-first | 358 | 28 | 35/256 |
Ce qui survit au changement de moteur, ce sont les extrêmes. Hint-link est
de loin le pire ordre à ajustement parfait, et son score DFS de 44 atterrit
près du 51 du moteur. Row-major et le boustrophédon forment le milieu de
tableau solide dans les deux bras. Et sur le plateau officiel, le bras
glouton garde border-first devant row-major, 358 contre 343, la même
direction que le 445 contre 433 du moteur.
Ce qui ne survit pas, c'est tout le reste. Sous le DFS simple, la spirale ne
s'effondre plus dans une classe à part (elle fait jeu égal avec
border-first, ce qui est cohérent avec le fait que les deux ordres partagent
ici un profil de contraintes identique et les 60 mêmes premières cases), et
border-first lui-même bute sur un mur de fermeture du pourtour à la
profondeur 35 sur 256 au lieu de mener. Sur quatre plateaux 16x16 générés
avec cadre, l'avantage glouton s'inverse purement et simplement : row-major
gagne le bras glouton sur 4 graines sur 4 et le bras en profondeur sur 3 sur
4, le score DFS de border-first oscillant de 28 à 366 selon la graine.
L'énoncé rigoureux de cette page est donc à deux faces : l'invariant et les
extrêmes appartiennent au puzzle ; le milieu fin de tout classement d'ordres
de remplissage appartient au moteur qui l'a produit.
## Où reste le levier
La loi de conservation borne ce que la géométrie seule peut faire. Un profil
uniforme à deux contraintes est le meilleur calendrier qu'un ordre de visite
puisse atteindre, puisque les cases affrontant trois ou quatre voisines
posées n'existent qu'en aval de cases posées presque sans vérification.
Row-major atteint déjà ce profil, et les vingt ans d'ingénierie
communautaire des ordres de remplissage recensés sur la
[page des ordres de remplissage](/fr/research/build/backtracking/fill-order/)
sont des raffinements à l'intérieur de ce cadre. Toute liaison précoce
supplémentaire doit être informationnelle plutôt que géométrique : propager
ce que la réserve de pièces restante peut encore servir (le mode d'échec que
rend visible le [vol de pièce](/fr/research/why/piece-theft/)), des a priori de
placement, des réserves de candidats restreintes, des portes d'élagage
calculées. L'invariance elle-même est un petit énoncé exact dans l'esprit du
[balayage de théorèmes](/fr/research/why/theorem-sweep/) : peu profond, mais il
ferme une porte proprement. Personne ne rétrécira cette recherche en
déroutant le chemin à travers le plateau ; les 480 vérifications sont dues
en totalité, sur tout chemin, et seul leur calendrier vous appartient.
## À lire aussi
- [Le vol de pièce, là où meurent les solveurs](https://eternity2.dev/fr/research/why/piece-theft/) — Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
- [La moisson de théorèmes : treize lois de structure](https://eternity2.dev/fr/research/why/theorem-sweep/) — Un seul arc de recherche, treize familles de théorèmes structurels : pureté de l'anneau, le plancher de parité à 479, le mur des 470 comme frontière de phase, les invariants de flux, la loi d'aire entropique, et les résultats d'impossibilité qui chiffrent chaque raccourci classique. Cette page est la carte.
- [Ordres de remplissage](https://eternity2.dev/fr/research/build/backtracking/fill-order/) — L'ordre dans lequel un algorithme de retour arrière visite les 256 cases est son unique liberté : il ne coûte rien à l'exécution et fait varier la taille de l'arbre de recherche de plusieurs ordres de grandeur. Vingt ans de science communautaire, des guerres fixe-contre-dynamique aux courses de stratégies, jusqu'au carré magique 10×16 et à la recherche en peigne de Verhaard, répondent tous à la même question : quel chemin à travers le plateau est le moins coûteux ?
- [L'étude DFS](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/dfs-study/) — Une seule question, posée avec soin : parmi les backtrackers en profondeur d'abord pour Eternity II, qu'apporte réellement chaque ordre de remplissage, chaque heuristique et le mécanisme de rupture ? Une famille de backtrackers écrits de zéro, séparés chacun par un seul changement, exécutés sur les mêmes dix variantes à coins fixés, sur un seul cœur, pendant soixante secondes.
---
# Conçu pour être insoluble : la recette
> Eternity II applique une recette pour obtenir le casse-tête à raccords de bords le plus difficile possible : forme compacte, aucune pièce symétrique ni dupliquée, palettes cloisonnées, fréquences plates, une seule solution attendue. La communauté a rétro-conçu chaque ingrédient dès l'année du lancement.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/design-recipe/
- Mise à jour: 2026-07-02
- Sujets: structure
- Source: guenter stertenbrink pose le problème de conception : un casse-tête ayant ~1 % de chances de tomber en dix ans (msg 15, février 2001) — https://groups.io/g/eternity2/message/15
- Source: Brendan Owen, Concevoir le casse-tête le plus difficile : la recette complète et la dérivation du 17,14 (msg 1947, août 2007) — https://groups.io/g/eternity2/message/1947
- Source: Brendan Owen, Estimations du casse-tête le plus difficile : le tableau des paramètres les plus durs pour chaque taille de plateau (msg 2164) — https://groups.io/g/eternity2/message/2164
- Source: Brendan Owen, Fréquences des pièces : la distribution plate qui a tué la méthode d'Eternity I (msg 1667) — https://groups.io/g/eternity2/message/1667
- Source: Brendan Owen citant The Times : Selby et Riordan ont écrit le générateur pour Monckton (msg 3373) — https://groups.io/g/eternity2/message/3373
- Source: Le récit par Dave Clark d'un appel téléphonique avec Christopher Monckton sur la façon dont le casse-tête a été généré (msg 4177) — https://groups.io/g/eternity2/message/4177
- Source: Le recensement de l'espace de conception des pièces : 256 pièces sur environ 21 000 possibles, formes symétriques évitées (msgs 8014–8034 ; recensement au msg 8025) — https://groups.io/g/eternity2/message/8025
- Source: Brendan Owen sur la solution des concepteurs enfermée dans un coffre (msg 8823) — https://groups.io/g/eternity2/message/8823
---
Eternity II n'est pas un casse-tête qui se trouve être difficile. C'est le
produit d'une recette : une courte liste de règles de conception qui,
appliquées ensemble, produisent le casse-tête à raccords de bords le plus
difficile qu'un nombre donné de pièces puisse former, tout en garantissant
l'existence d'une solution. Le plus remarquable, c'est que la recette n'a pas
été divulguée ni publiée par les concepteurs. La communauté l'a reconstituée,
ingrédient par ingrédient, en quelques semaines après le lancement, pour
l'essentiel dans un unique message d'août 2007 signé Brendan Owen et intitulé,
fort à propos, « Concevoir le casse-tête le plus difficile »
([msg 1947](https://groups.io/g/eternity2/message/1947)).
Cette page parcourt cette recette : ce qu'est chaque règle, ce qu'elle coûte à
quiconque tente de résoudre le casse-tête, et d'où provient chaque affirmation.
La mesure de l'ingrédient le plus tranchant (le nombre de couleurs situé
exactement sur le pic de difficulté) fait l'objet de
[sa propre page](/fr/research/why/phase-transition/) ; ici, elle prend simplement
place parmi les autres.
## Le problème a précédé le casse-tête
Le problème de conception a été énoncé sur la liste de diffusion six ans avant
que quiconque ait à le résoudre. En février 2001, alors qu'Eternity I était à
peine refroidi et qu'Eternity II n'était encore qu'une rumeur, guenter
stertenbrink a demandé au groupe comment on concevrait un casse-tête assorti
d'un prix de 5 M£ de sorte qu'il n'ait qu'environ 1 % de probabilité d'être
résolu en dix ans ([msg 15](https://groups.io/g/eternity2/message/15)). Les
réponses ont évoqué la mise à l'échelle d'une difficulté de type Eternity I,
voire la dissimulation de problèmes cryptographiques dans les bords.
C'est exactement le fil du rasoir sur lequel un casse-tête à prix doit avancer.
Rendez-le trop facile et le prix est perdu ; c'est ce qui est arrivé à
Eternity I, tombé en 2000 parce qu'il avait infiniment plus de solutions que
son concepteur ne le croyait. Rendez-le littéralement impossible et le concours
est une escroquerie. La cible, c'est un casse-tête dont on peut prouver qu'il
possède une solution, positionné de telle sorte qu'aucune quantité réaliste de
calcul ne la trouve dans la fenêtre du concours. Les concepteurs d'Eternity II
avaient vu mourir Eternity I, et la recette qui suit se lit comme une réponse
point par point.
## La recette, ingrédient par ingrédient
### Garder une forme compacte
La première règle de la dérivation d'Owen : utiliser un plateau compact, le
carré 16×16, plutôt qu'une forme allongée ou irrégulière
([msg 1947](https://groups.io/g/eternity2/message/1947)). Une forme compacte
maximise la part des jointures intérieures, là où l'incertitude est la plus
forte, et ne laisse ni bras étroits ni couloirs qu'un solveur pourrait épuiser
à bon compte et utiliser comme point d'ancrage. Owen a ensuite vérifié la
conséquence par l'expérience : sur des conceptions 16×16 comparables à palettes
déséquilibrées, il existe toujours une région moins coûteuse à paver en premier
(pour un partage 2/19, démarrer au milieu revient plus de cent fois moins cher
qu'un balayage par lignes), mais sur les paramètres réels d'E2, aucune région
de ce genre n'existe. La conception ne présente, selon ses propres mots,
« aucune zone faible par où commencer le pavage »
([msg 5263](https://groups.io/g/eternity2/message/5263), comparaison de
conceptions [msg 5243](https://groups.io/g/eternity2/message/5243)).
### Aucune pièce symétrique, aucun doublon
Chacune des 256 pièces est unique, et aucune n'est symétrique par rotation
([msg 1947](https://groups.io/g/eternity2/message/1947)). En 2010, la
communauté a dénombré l'espace de conception pour mesurer à quel point ce choix
est délibéré : avec 5 motifs de cadre et 17 motifs intérieurs, il existe
environ 21 000 conceptions de pièces possibles, y compris des formes comme
*aaaa* et *abab* qui se répètent sous rotation. Le jeu réel les évite
toutes, ostensiblement ([msgs 8014–8034](https://groups.io/g/eternity2/message/8014)).
La conséquence, c'est l'absence de cadeaux. Une paire dupliquée permettrait de
réécrire n'importe quelle solution en échangeant les deux pièces, doublant
gratuitement le nombre de solutions ; une pièce à symétrie de rotation
regrouperait des orientations et rétrécirait l'espace de décision. Refuser les
deux maintient le nombre de solutions attendu exactement là où les concepteurs
le voulaient et ne laisse au solveur strictement aucune symétrie à exploiter :
chaque placement est une décision pleine et indépendante parmi 4 orientations
de pièces distinctes.
Il y a une seconde raison, plus discrète, d'interdire les pièces symétriques,
et Owen l'a mesurée. Une pièce symétrique n'est pas seulement structurellement
redondante, elle est aussi plus facile à *placer*, parce qu'elle s'insère dans
davantage de contextes. Il a construit un jeu de 289 pièces (les 17 formes à
symétrie de 90 degrés, les 136 formes à symétrie de 180 degrés, et 136 pièces
asymétriques aléatoires), pavé un petit rectangle de toutes les façons
possibles, et compté la fréquence d'apparition de chaque pièce sur l'ensemble
des 759 millions de solutions. Les pièces asymétriques apparaissaient
**2,08 fois** plus souvent que les pièces à symétrie de 180 degrés et
**4,14 fois** plus souvent que celles à symétrie de 90 degrés
([msg 2076](https://groups.io/g/eternity2/message/2076)). Les pièces
symétriques sont donc les *plus difficiles à paver*, et un casse-tête qui les
aurait incluses aurait remis au solveur précisément la prise offerte par une
pavabilité inégale - celle-là même que les
[fréquences de couleurs plates](#rendre-chaque-fréquence-plate) sont censées
supprimer. Les bannir maintient chaque pièce à peu près aussi difficile à
placer, sans aucune pièce facile à garder pour la fin.
### Deux palettes, strictement séparées
Les 22 couleurs se répartissent en 17 couleurs intérieures et 5 qui
n'apparaissent que sur les raccords entre pièces de bordure, jamais à
l'intérieur ([msg 1947](https://groups.io/g/eternity2/message/1947)). Cela
transforme le cadre en un sous-casse-tête à part entière, dont la difficulté
peut être réglée indépendamment de l'intérieur, de sorte qu'aucune des deux
parties n'offre un point d'entrée facile : le même exercice d'équilibre que la
forme compacte, appliqué à la palette. Les cinq couleurs réservées au cadre
sont aussi les rares, mises en quarantaine sur le pourtour : les pièces de bord
étant moins nombreuses que celles de l'intérieur, et les cases de bord ne
prenant qu'une seule orientation, la recette d'Owen nivelle les deux groupes
pour que leurs pièces restent à peu près aussi faciles à poser, plutôt que de
laisser le cadre comme un point d'entrée mou et inégal
([msg 1947](https://groups.io/g/eternity2/message/1947)). Cette signature
visible fait l'objet de [sa propre page](/fr/research/why/rare-color-geography/).
### Rendre chaque fréquence plate
Lorsque Owen a numérisé son jeu le jour du lancement, il a trouvé la
distribution des couleurs de bords « aussi plate que possible » : 24 arêtes
pour chacune des 5 couleurs de raccord de bordure, 48 à 50 pour chacune des 17
couleurs intérieures ([msg 1054](https://groups.io/g/eternity2/message/1054)).
C'est cet ingrédient unique qui a tué la stratégie d'Eternity I. Eternity I a
été cassé en grande partie par l'ordonnancement selon la difficulté des pièces :
les pavabilités de ses pièces variaient énormément, de sorte que les solveurs
pouvaient garder les pièces les plus faciles pour la fin et laisser les
statistiques les mener à bon port. Deux semaines après le lancement, Owen a
montré que la distribution plate d'E2 rend cette approche inutile : quand chaque
couleur est également fréquente, chaque pièce est à peu près également pavable,
et aucune heuristique d'ordonnancement ne prend prise
([msg 1667](https://groups.io/g/eternity2/message/1667)). Comme l'a formulé en
réponse doc_s_smith, l'une des personnes ayant réellement résolu Eternity I, la
sélection de la position la plus contrainte est devenue « notre seul autre
espoir » ([msg 1722](https://groups.io/g/eternity2/message/1722)).
### Viser exactement une solution
Le dernier ingrédient fixe les décomptes de couleurs eux-mêmes. Owen a
raisonné à rebours à partir de l'exigence « environ une solution attendue » :
en imposant que le nombre attendu de pavages intérieurs soit égal à 1 et en
résolvant pour le nombre de couleurs intérieures, on obtient
$$I = (196! \cdot 4^{196})^{1/392} \approx 17.14$$
Arrondissez à 17, ajoutez les 5 couleurs de bordure réglées séparément, et
vous avez la palette exacte d'Eternity II
([msg 1947](https://groups.io/g/eternity2/message/1947)). Owen a étayé la
dérivation par des simulations, défendu le 17+5 contre la conception voisine
16+8 issue de la même famille à une solution attendue - car elle équilibre
mieux la pavabilité des pièces de bordure et intérieures et ne laisse aucune
entrée facile par le cadre ([msg 2426](https://groups.io/g/eternity2/message/2426)) -puis complété par un tableau des paramètres les plus durs pour chaque taille de
plateau, une recette générale dont E2 est la ligne 16×16
([msg 2164](https://groups.io/g/eternity2/message/2164)).
Une solution attendue n'est pas un caprice esthétique arbitraire. C'est le
réglage où les solutions sont aussi rares qu'elles peuvent l'être tout en
existant encore : le sommet de la transition de phase, le point où l'on peut
prouver que la recherche est à son pire. Cette mesure, et les analyses publiées
qui ont plus tard confirmé le nombre d'Owen, se trouvent sur la
[page du pic de difficulté](/fr/research/why/phase-transition/). Le revers prouve
que le curseur est réel : une conception 16×16 délibérément *relâchée* discutée
sur la liste compte environ 10^42 solutions attendues, quoiqu'Owen ait prévenu
que même celle-là n'a rien d'une promenade de santé
([msg 4968](https://groups.io/g/eternity2/message/4968)).
## Qui l'a réellement conçu
Christopher Monckton a inventé la franchise Eternity et mis le prix en jeu,
mais son idée originale pour la suite était un casse-tête tridimensionnel de
1001 pièces. Owen l'a rapporté en notant que « la conception réelle est
d'Alex et Oliver » ([msg 2697](https://groups.io/g/eternity2/message/2697)).
Alex Selby et Oliver Riordan sont les deux mathématiciens qui ont remporté
Eternity I en découvrant qu'il avait bien plus de solutions que prévu ;
Monckton a engagé ceux qui l'avaient battu. Le groupe l'a soupçonné des
semaines avant le lancement ([msg 716](https://groups.io/g/eternity2/message/716)),
l'a vu confirmé dans un dépliant officiel Tomy (l'inventeur a rencontré les
vainqueurs d'E1 lors d'une émission télévisée du matin et leur a demandé de
travailler au développement d'E2 ;
[msg 901](https://groups.io/g/eternity2/message/901)), et l'a enfin recoupé
avec un article du Times : Selby et Riordan ont conçu le programme générateur
du casse-tête ([msg 3373](https://groups.io/g/eternity2/message/3373)).
Cette provenance explique la précision de la recette. La seule équipe au monde
ayant une expérience de première main de la façon dont un casse-tête à prix
échoue statistiquement a été payée pour s'assurer que ce mode de défaillance
avait disparu. Chaque ingrédient ci-dessus (platitude, absence de doublons,
palettes équilibrées, une solution attendue) ferme une porte que Selby et
Riordan avaient eux-mêmes franchie en 2000.
## Comment les pièces ont été générées : un récit de seconde main
Le seul récit détaillé du processus de génération présent dans l'archive est de
seconde main et doit être lu comme tel. Dave Clark, fondateur du projet
distribué eternity2.net, a rapporté une longue conversation téléphonique qu'il
a eue avec Monckton le 26 juillet 2007 : le casse-tête a été généré à partir de
l'entropie saisie au clavier par les juges du concours (quelque 200 entrées),
régénéré jusqu'à satisfaction des juges, puis imprimé une seule fois et mis en
coffre. Monckton lui a décrit le générateur de nombres aléatoires comme
utilisant « des résidus gaussiens de puissances de nombres premiers
convenablement choisis », ce que Clark a interprété comme l'implémentation
propre à Selby et Riordan
([msg 4177](https://groups.io/g/eternity2/message/4177)). Le fil a brièvement
envisagé l'idée d'attaquer un générateur cryptographiquement faible ; une
réponse a souligné que si la construction était de type Blum-Blum-Shub, elle
serait prouvablement difficile
([msg 4180](https://groups.io/g/eternity2/message/4180)). Rien n'est sorti de
cette piste, mais le récit demeure la meilleure source quasi primaire de
l'archive sur l'origine réelle des 256 pièces.
## La police d'assurance
Un casse-tête conçu pour ne jamais être résolu doit tout de même prouver qu'il
*peut* l'être. Le matériel de lancement de Tomy indiquait que personne, ni
l'inventeur ni les concepteurs, ne connaît la solution : le générateur l'a
imprimée « entre des pages de texte aléatoire pendant que toutes les parties
étaient hors de la pièce », et la sortie a été scellée devant témoins
([msg 901](https://groups.io/g/eternity2/message/901)). Une fois le concours
clos sans vainqueur, Owen a livré la formule encore citée aujourd'hui : « Je
suis certain qu'Alex et Oliver ont créé une solution lorsque Chris les a payés
pour générer un casse-tête pratiquement impossible », et qu'elle repose cachée
au milieu de rames de texte imprimé enfermées dans un coffre, comme assurance
contre toute contestation en justice de la bonne foi du concours
([msg 8823](https://groups.io/g/eternity2/message/8823)).
Ce coffre est l'ingrédient final de la recette. La solution conçue est ce qui
permet au casse-tête de se poser à une solution attendue plutôt qu'à zéro :
existence garantie par construction, découverte tarifée au-delà de la portée de
tout concurrent.
## Ce que la recette signifie si vous attaquez le casse-tête aujourd'hui
Chaque raccourci générique que vous pourriez être tenté de saisir a été anticipé
et facturé il y a près de vingt ans. L'ordonnancement selon la fréquence des
pièces est mort avec la distribution plate. Les astuces de symétrie et de
doublons n'ont rien à quoi s'accrocher. Il n'y a aucune région molle à paver en
premier, aucun déséquilibre de palette à faire levier, et le nombre de couleurs
se tient au réglage exact où la recherche est au pire. Le plafond brut de la
communauté n'a bougé que deux fois en vingt ans (467 en 2008, 470 en 2021) et
s'y maintient depuis (la piste à indices stricts, elle, a continué d'avancer
indépendamment ; voir [/research/records](/fr/research/records/)) ; ce palier est le
relevé empirique d'une conception qui a fonctionné précisément comme prévu. Cela ne
rend pas le casse-tête impossible : une solution existe de façon certifiée,
imprimée et mise sous clé. Cela signifie que l'écart restant n'est pas un
problème de réglage. Ce qui le comblera devra être une idée que les concepteurs
n'ont pas pu anticiper. C'est là, au fond, la raison d'être de ce wiki.
## À lire aussi
- [Calibré sur le pic de difficulté](https://eternity2.dev/fr/research/why/phase-transition/) — Eternity II utilise 22 couleurs, réparties entre 17 couleurs intérieures et 5 réservées au cadre, et ce chiffre d'environ 17 se situe près du point où ce type de casse-tête est le plus difficile à résoudre (la transition est une bande, pas un entier unique).
- [Les couleurs rares vivent sur le cadre](https://eternity2.dev/fr/research/why/rare-color-geography/) — Cinq des 22 couleurs d'Eternity II n'apparaissent que le long de l'anneau de bordure, chacune sur exactement 24 arêtes, jamais une seule fois à l'intérieur. Une séparation structurelle qui façonne la manière dont chaque solveur traite le cadre.
- [La traque, une histoire (partie I : 2000-2009)](https://eternity2.dev/fr/research/community/hunt/) — L'histoire de la communauté, d'une liste de diffusion fondée sept ans avant que le casse-tête n'existe jusqu'au prix d'examen de 10 000 $ remporté sous un nom d'emprunt, chaque événement rattaché à son message d'origine. Partie I d'une chronique en cours.
---
# L'entropie et la loi d'aire
> Eternity II a deux règles : les bords doivent coïncider, et chaque pièce ne sert qu'une fois. La première est généreuse. Toute la difficulté tient dans la seconde.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/entropy-area-law/
- Mise à jour: 2026-07-22
- Sujets: structure
- Reproduire: `just research-entropy-area-law`
- Source: Le lemme de sous-additivité de Fekete, le théorème qui garantit l'existence même de la limite d'entropie h∞ — https://en.wikipedia.org/wiki/Subadditivity#Subadditive_sequences
- Source: L'entropie de Shannon d'une source, les quantités h(n) mesurées ici — https://doi.org/10.1002/j.1538-7305.1948.tb01338.x
---
CartesianGrid,
Line,
LineChart,
ResponsiveContainer,
Tooltip,
XAxis,
YAxis,
} from "recharts";
Oublions un instant la règle qui impose d'utiliser chaque pièce une seule
fois et traitons les 196 pièces intérieures comme des tuiles réutilisables.
En dénombrant les blocs entièrement compatibles, on constate qu'ils
croissent exponentiellement avec la taille : les façons localement valides
de paver ne manquent pas. La grammaire d'appariement est riche, et non
restrictive.
Cette richesse se mesure exactement. Pour une bande de largeur $n$, le taux
de croissance par cellule est une densité d'entropie $h(n)$, et la suite
décroît vers la vraie valeur bidimensionnelle à mesure que la bande
s'élargit.
## L'entropie de la grammaire, largeur par largeur
> **[Figure]** interactive: EntropyChart. Rendered on the canonical page (link above); not shown in this markdown export.
## Puis la loi d'aire frappe
Rétablissons maintenant la règle qui impose d'utiliser chaque pièce une
seule fois, et demandons-nous à quelle fréquence un bloc $n \times n$
compatible en couleurs emploie effectivement des pièces distinctes. Nous le
comptons exactement, dans le dépôt : pour chaque taille de bloc intérieur nous
comptons $A(n)$, les remplissages compatibles en couleurs quand les pièces
peuvent se répéter, et $B(n)$, ceux qui emploient des pièces distinctes, puis
prenons $\rho(n) = B(n)/A(n)$. Elle s'effondre, et elle s'effondre selon
l'aire, non selon le périmètre :
$$
\rho(n) \;\approx\; \exp(-\alpha\, n^2), \qquad \alpha \approx 0.044.
$$
L'exposant est ajusté par moindres carrés sur la plage comptée exactement :
$A$ et $B$ sont calculés ici pour $n$ jusqu'à $3$ (et $A$ jusqu'à $4$), avec
$B(2) = 4\,059\,952$ concordant avec la table de référence sub-grille du dépôt.
L'exposant par bloc croît encore sur cette petite plage (0,029 à $n=2$, 0,048 à
$n=3$), si bien que 0,044 est une estimation basse de la valeur pour les grands
blocs. À $n=4$, le comptage réutilisable $A(4)$ atteint déjà $6{,}3\times10^{16}$,
au-delà de l'énumération distincte exacte en temps raisonnable ; la courbe
au-delà de $n=3$ est donc une extrapolation de l'ajustement.
Une décroissance en loi d'aire est brutale, car l'aire croît de façon
quadratique. Par extrapolation, la proportion de blocs réalisables passe sous le
seuil du millième aux alentours de 155 cellules. (Une étude hors site antérieure
rapportait un $\alpha \approx 0.085$ plus raide et un seuil vers 80 cellules ;
les comptages exacts du dépôt sur $n \le 3$ donnent les valeurs plus douces
présentées ici, l'exposant par bloc croissant restant compatible avec la valeur
hors site atteinte pour de plus grands blocs.)
> **[Figure]** interactive: RhoChart. Rendered on the canonical page (link above); not shown in this markdown export.
## Voir l'écart se creuser
La même idée appliquée aux pièces réelles, dénombrées exactement. Faites
varier la taille du bloc et observez combien de blocs compatibles en
couleurs survivent à la règle d'usage unique des pièces.
> **[Figure]** Interactif : effondrement de la distinction et décroissance de rho — interactive: EntropyScarcityLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Pourquoi c'est important
Un effondrement de l'ordre de la centaine de cellules est à l'échelle des plus
petits mouvements qui séparent les meilleurs blocs connus. La grammaire
d'appariement reste riche, puis la règle de distinction l'effondre sur l'aire.
Le mur ne se dresse donc pas là où le problème paraît difficile, dans
l'appariement des couleurs ; il se dresse dans la règle discrète selon laquelle
chaque pièce ne sert qu'une fois, dont le coût croît avec l'aire, sur un plateau
juste assez grand pour qu'elle morde.
Voir [pourquoi le basin-hopping est impossible](/fr/research/why/sigma-cycles/).
## Le théorème, en bref
L'entropie par largeur possède une limite bien définie. Accoler côte à côte
une bande de largeur $n_1$ et une bande de largeur $n_2$ n'ajoute qu'une
contrainte de couture, si bien que les valeurs propres vérifient
$$
\lambda_{n_1+n_2} \;\le\; \lambda_{n_1}\,\lambda_{n_2}.
$$
En passant au logarithme, $\log \lambda_n$ devient sous-additif, et le lemme
de Fekete donne la limite comme un infimum, ce qui explique précisément
pourquoi la courbe ci-dessus décroît :
$$
h_\infty \;=\; \lim_{n\to\infty}\frac{\log_{10}\lambda_n}{n} \;=\; \inf_n \frac{\log_{10}\lambda_n}{n}.
$$
La borne supérieure est le taux purement horizontal : ignorer les
contraintes verticales ne fait qu'ajouter des blocs, donc
$$
0 \;<\; h_\infty \;\le\; \log_{10}\lambda_H \;=\; 1.6645,
$$
avec $\lambda_H = 46.18$ le rayon spectral de la matrice de compatibilité
des couleurs à l'horizontale. La positivité tient parce que la grammaire
admet exponentiellement de nombreuses chaînes, si bien que la densité est
strictement comprise entre zéro et 1,6645, mesurée aux environs de 0,67.
Ce que le théorème démontre, c'est qu'une limite positive existe et qu'elle
est majorée par $\log_{10}(46.18) = 1.6645$. Sa valeur précise aux environs de
0,67 provient d'un balayage hors ligne. L'exposant de loi d'aire
$\alpha \approx 0.044$ est ajusté ici à partir des comptages de blocs exacts du
dépôt sur $n \le 3$ ; son extrapolation aux plus grands blocs (et le seuil des
~155 cellules) dépasse la plage comptée exactement. Le théorème ne fixe pas ces
valeurs.
## À lire aussi
- [Calibré sur le pic de difficulté](https://eternity2.dev/fr/research/why/phase-transition/) — Eternity II utilise 22 couleurs, réparties entre 17 couleurs intérieures et 5 réservées au cadre, et ce chiffre d'environ 17 se situe près du point où ce type de casse-tête est le plus difficile à résoudre (la transition est une bande, pas un entier unique).
- [Pourquoi un ordinateur plus rapide ne change rien](https://eternity2.dev/fr/research/why/prune-vs-speed/) — L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
- [Motifs interdits](https://eternity2.dev/fr/research/why/forbidden-patterns/) — Presque tout petit assemblage de pièces que l'on pourrait construire est impossible. Pour un carré 2×2, 99,72 % des façons de placer quatre pièces ne pourront jamais s'accorder.
- [Le vol de pièce, là où meurent les solveurs](https://eternity2.dev/fr/research/why/piece-theft/) — Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
- [Compter les solutions : mesurer ce qu'on ne peut pas trouver](https://eternity2.dev/fr/research/build/analysis/solution-counting/) — Personne n'a jamais vu une solution complète d'Eternity II, et pourtant la communauté sait, à un facteur deux près, combien il en existe. Cette page raconte l'histoire et le métier de ce nombre : recensements exacts sur petits plateaux, la formule d'espérance et sa convergence sur 14 702 en vingt ans, et les estimations par recherche élaguée auxquelles on n'a fait confiance que lorsque quatre exécutions indépendantes concordaient.
---
# Invariants de flux : une loi de rotation que l'ensemble officiel respecte exactement
> Pondérez chaque couleur d'arête et lisez chaque pièce comme un vecteur signé, est moins ouest sur un axe, sud moins nord sur l'autre. Sommé sur une région quelconque, les coutures intérieures s'annulent et seule la bordure survit, si bien que le plateau totalise zéro. Un quart de tour pivote le vecteur d'un angle droit, ce qui fait de la loi une algèbre dans les entiers de Gauss.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/flux-invariants/
- Mise à jour: 2026-07-22
- Sujets: structure
- Source: Invariants de flux : topic de reproduction avec l'article, le vérificateur versionné et le JSON de résultats (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/flux-invariants
- Source: Conway et Lagarias, Tiling with polyominoes and combinatorial group theory : les invariants de mot de bord que cette loi adapte à l'appariement d'arêtes (JCTA 1990) — https://doi.org/10.1016/0097-3165(90)90057-4
- Source: Brendan Owen numérise l'ensemble de pièces : l'histogramme de couleurs que cette loi confronte (groups.io msg 1054, juillet 2007) — https://groups.io/g/eternity2/message/1054
- Source: Brendan Owen, Design the hardest puzzle : la séparation délibérée des palettes bordure et intérieur (groups.io msg 1947, août 2007) — https://groups.io/g/eternity2/message/1947
---
Les scores de cette page suivent la convention d'appariement d'arêtes : le score
d'un plateau est le nombre, sur les 480 jointures intérieures, dont les deux
demi-arêtes montrent la même couleur. Une solution complète vaut 480. Les
invariants ci-dessous ne concernent pas le score d'un plateau ; ils concernent
les rotations de pièces qu'un plateau-480 valide a le droit d'employer, et ils
tiennent pour toute solution valide, quel que soit son score.
## L'idée en une ligne
Donnez à chacune des 22 couleurs d'arête un poids numérique, la couleur de
bordure grise recevant le poids zéro. Lisez une pièce posée comme un vecteur à
deux dimensions : son poids côté est moins son poids côté ouest sur l'axe
horizontal, son poids sud moins son poids nord sur l'axe vertical. Sommez maintenant ce vecteur
sur un bloc de pièces posées. Chaque couture intérieure du bloc est partagée par
deux pièces, et elle entre dans la somme une fois avec un signe plus depuis une
pièce et une fois avec un signe moins depuis sa voisine, la même couleur sur les
deux faces, si bien que les deux s'annulent. Rien ne survit à la somme, sauf la
bordure extérieure du bloc.
Sur le plateau entier cette bordure extérieure est le rebord gris, de poids zéro,
donc le total est exactement le vecteur nul. C'est une loi de conservation, la
cousine discrète d'un théorème de la divergence : le flux sortant de toute région
égale le flux traversant sa frontière, et pour le plateau entier la frontière ne
porte aucun flux.
## Pourquoi un quart de tour fait entrer les nombres complexes
Le vecteur n'est pas insensible à la rotation. Tournez une pièce de quatre-vingt-dix
degrés dans le sens horaire et sa couleur nord passe à l'est, l'est au sud, le sud
à l'ouest, l'ouest au nord. Suivez ce que cela fait au vecteur et les axes
horizontal et vertical s'échangent avec un signe : le nouveau vecteur est l'ancien
tourné d'un angle droit. Dans le plan, un quart de tour est une multiplication par
l'unité imaginaire. Donc si vous écrivez le vecteur comme un nombre complexe, un
quart de tour de la pièce le multiplie par $i$, et les quatre rotations qu'une
pièce carrée peut prendre correspondent aux quatre puissances $1, i, -1, -i$.
Ce seul fait est ce qui élève une identité de comptabilité en algèbre. La loi de
conservation, écrite couleur par couleur, dit qu'une certaine somme d'entiers de
Gauss, un terme par pièce, chacun multiplié par une puissance de $i$ fixée par la
rotation choisie de cette pièce, doit valoir zéro. C'est une contrainte non pas
sur l'emplacement des pièces mais sur les rotations que l'ensemble entier peut
adopter.
## La famille complète, et ce qui est nouveau
Le groupe de rotation d'un carré a quatre caractères, et la loi de flux n'en est
qu'un. Décomposer la pièce selon les quatre donne le treillis complet des
invariants linéaires, intrinsèques à la pièce, de l'appariement d'arêtes : rien de
linéaire ne lui échappe. Les quatre membres sont un simple recensement de couleurs
(insensible à la rotation, le décompte total de chaque couleur sur la pièce), la
loi de flux gaussienne que l'on vient de décrire, son conjugué complexe (la même
information), et un quatrième membre, à valeurs entières, qui couple le choix par
chaque pièce de la paire d'arêtes opposées qui se retrouve horizontale à la couleur
d'échiquier de sa case. Ce dernier est l'écho, côté appariement d'arêtes, de
l'obstruction de bicoloration que Conway et Lagarias ont utilisée pour le pavage
par polyominos, la méthode du mot de bord dont toute cette famille est adaptée.
Le recensement n'a rien de neuf : ce n'est que du comptage de couleurs. La valeur
de la loi de flux, c'est qu'elle, elle en apporte. Sur l'ensemble officiel son
ombre insensible à la rotation, la version obtenue en oubliant le $i$ et en
fusionnant plus et moins, est identiquement nulle pour les 22 couleurs, parce que
tout décompte de couleur sur le plateau est pair. Autrement dit, le comptage de
couleurs sait déjà tout ce que l'ombre pourrait lui dire, et il n'en sait rien de
plus. Chaque contrainte que la loi de flux impose au-delà de cette ombre est une
information réellement nouvelle qu'un recensement ne peut pas voir.
## L'algèbre linéaire sur l'instance réelle
Alignez les 22 couleurs en lignes et les 256 pièces en colonnes, et les
coefficients de flux par pièce forment une matrice. Son rang mesure à quel point
la loi contraint réellement le casse-tête. Recalculés sur l'ensemble officiel de
256 pièces, les nombres sortent ainsi.
22
rang complexe, plein (22 sur 22 couleurs)
40
contraintes réelles indépendantes
21
contraintes de parité indépendantes (mod 2)
Un rang complexe plein de 22 signifie que la loi lie les 22 couleurs à la fois,
sans qu'aucune couleur ne s'échappe comme variable libre. Scinder les équations
complexes en leurs parties réelle et imaginaire donne 40 contraintes réelles
indépendantes sur l'assignation des rotations. Et réduire tout le système modulo
2, où la rotation d'une pièce se ramène à un unique bit de parité (un quart de
tour et un trois-quarts de tour deviennent identiques modulo 2), laisse 21
contraintes de parité indépendantes, le système augmenté restant lui aussi de rang
21, donc cohérent plutôt que contradictoire. Ce système mod 2 à lui seul retire un
facteur d'environ deux millions de l'espace des parités de rotation.
Les faits d'instance que la loi confronte se reproduisent eux aussi exactement,
chiffre pour chiffre face à l'ensemble de pièces numérisé par Brendan Owen : 196
pièces intérieures, 56 pièces de bord, 4 coins ; la couleur de bordure grise sur
64 demi-arêtes ; cinq couleurs de cadre qui ne touchent que des pièces de bord, 24
demi-arêtes chacune ; les couleurs intérieures restantes se répartissant en cinq à
48 et douze à 50 ; et tout décompte de couleur pair, ce qui est exactement ce
qu'exige un appariement d'arêtes parfait. Les cinq indices officiels sont toutes
des pièces intérieures. Rien de tout cela ne dépend d'une confiance dans une
numérotation de couleurs : le vérificateur dérive l'ensemble des couleurs de cadre
des données (les couleurs qui n'apparaissent jamais sur une pièce intérieure), si
bien qu'un renumérotage entre le kit de départ et la liste source ne peut pas le
tromper.
## D'une loi à une vérification de fin de partie
Une loi de conservation qui doit tenir pour le plateau entier contraint aussi tout
plateau partiel, parce que les pièces encore à poser doivent porter exactement le
flux qui manque aux pièces posées. Au cours d'une recherche qui remplit la grille
pièce par pièce, le flux dû par les pièces restantes est fixé dès l'instant où
l'ensemble posé est fixé. Si aucune assignation de rotations aux pièces restantes
ne peut fournir ce flux dû, le plateau partiel est mort, et l'on peut s'arrêter
sans explorer son sous-arbre.
Réduit modulo 2 cela devient un petit système linéaire sur les parités de rotation
des pièces restantes, décidé par élimination de Gauss, et c'est un certificat de
fin de partie fiable. Fiable veut dire qu'il ne rejette jamais un plateau
réellement complétable : la loi est une condition nécessaire, donc un partiel réel
passe toujours. Ce qu'il peut faire, c'est attraper une erreur. Testé sur un
réservoir de plateaux 8 sur 8 résolus et encadrés, avec des rotations implantées,
en injectant une unique rotation illégale dans le préfixe posé, le contrôle n'a pas
rejeté une seule fois un partiel valide sur 3 600 essais, et sa probabilité
d'attraper l'erreur injectée croissait avec la fraction de remplissage.
| Fraction de remplissage | Partiels valides rejetés | Erreur de rotation unique attrapée |
|---|---|---|
| 0,50 | 0 sur 900 | 0,6 % |
| 0,75 | 0 sur 900 | 14,1 % |
| 0,90 | 0 sur 900 | 88,3 % |
| 0,95 | 0 sur 900 | 94,6 % |
Le contenu reproduit ici est le mécanisme et la forme de cette courbe, pas les
pourcentages exacts. La source rapporte une courbe plus raide (13 %, 50 %, 100 %
aux remplissages 0,50, 0,75, 0,90) sur une famille implantée différente ; le run
ci-dessus utilise un plateau 8 sur 8 à 13 couleurs avec une pièce injectée choisie
uniformément et un réservoir de 30 plateaux, 30 ordres chacun (900 par remplissage), si bien
que les taux de détection absolus se situent plus bas. Ce qui tient exactement, et
c'est là le point, c'est que le certificat est fiable et que sa probabilité de
détection grimpe de façon monotone vers le plein à mesure que le plateau se
remplit. C'est précisément le comportement utile pour une recherche : le contrôle
s'affûte exactement là où la queue de branchement de l'arbre est la plus coûteuse,
vers la fin, et chaque prise est orthogonale à l'élagage par couleur et par
décompte, donc elle s'ajoute par-dessus au lieu de les dupliquer.
## Ce que c'est et ce que ce n'est pas
La loi de flux est une obstruction. Elle peut certifier un plateau partiel mort ;
elle ne peut jamais en certifier un complétable. C'est le rôle correct et voulu
pour un invariant à l'intérieur d'une recherche par séparation et élagage, et il
est partagé par tous les résultats de cette famille. Deux réserves de plus, dites
franchement. La loi contraint les rotations que l'ensemble de pièces peut employer,
pas la case où chaque pièce se pose ; seul le membre d'échiquier se couple à la
position, et seulement par la parité de la case, si bien qu'aucun membre n'épingle
une pièce à un emplacement. Et l'extension non linéaire naturelle, un produit de
mot de bord non abélien à la manière de la construction originale de Conway et
Lagarias, ne survit pas en deux dimensions : une case intérieure a quatre arêtes
partagées mais seulement deux voisines adjacentes à elle dans tout ordre de lecture
linéaire, si bien qu'au moins deux de ses arêtes ne pourront jamais s'annuler, et
la construction retombe sur la loi de flux linéaire. Tout invariant strictement
plus fort que ceux-ci doit être non linéaire et se situe hors de la famille des
groupes de pavage.
## Où cela se place
Voici le compte-rendu détaillé d'une loi de la
[revue des théorèmes](/fr/research/why/theorem-sweep/), l'arc qui a demandé ce qui
pouvait être prouvé sur l'instance plutôt que quel score pouvait être atteint. Elle
se place à côté de la [pureté de l'anneau](/fr/research/why/ring-purity/), l'autre loi
exacte que la bordure respecte, et elle est le complément algébrique de la
[lentille du code de permutation](/fr/research/why/permutation-code-wall/), qui lit le
plateau entier comme un mot de code : la loi de flux est un ensemble de contrôles
de parité que les rotations doivent satisfaire, la même monnaie que celle dans
laquelle cette lentille est écrite. La
[page de théorie complexe](/fr/research/why/complex-theory/) compte la largeur de la
recherche ; cette page y ajoute une façon peu coûteuse et fiable d'élaguer sa fin
de partie.
Chaque nombre ci-dessus est recalculé par le vérificateur versionné dans le topic
de reproduction lié sous les sources : un unique programme Rust déterministe qui
charge l'instance officielle, dérive les couleurs de cadre des données, calcule les
trois rangs, vérifie l'ombre d'orthogonalité au recensement et exécute le balayage
de fin de partie graine par graine, en émettant un unique fichier JSON (versionné
sous `results/flux_invariants.json`) qui contient chaque chiffre cité ici. Les
faits d'instance et les rangs se reproduisent octet pour octet ; le certificat
rapporte sa propre courbe de prises, fiable à chaque remplissage.
## À lire aussi
- [La moisson de théorèmes : treize lois de structure](https://eternity2.dev/fr/research/why/theorem-sweep/) — Un seul arc de recherche, treize familles de théorèmes structurels : pureté de l'anneau, le plancher de parité à 479, le mur des 470 comme frontière de phase, les invariants de flux, la loi d'aire entropique, et les résultats d'impossibilité qui chiffrent chaque raccourci classique. Cette page est la carte.
- [Pureté de l'anneau : le bord est un sous-puzzle clos, sans aucun jeu](https://eternity2.dev/fr/research/why/ring-purity/) — Cinq des 22 couleurs ne touchent jamais les 196 pièces intérieures. La liste des pièces force toute solution valide à dépenser les 120 demi-arêtes de cadre sur l'anneau du bord : un sous-puzzle autonome à jeu exactement nul (120 = 120), un circuit eulérien sur cinq sommets, relié à l'intérieur par seulement 56 arêtes tournées vers le centre.
- [Le plateau comme mot de code](https://eternity2.dev/fr/research/why/permutation-code-wall/) — Lisez un plateau complet comme un mot de code dont les 480 jointures intérieures sont des contrôles de type parité, et le score d'arêtes appariées devient 480 moins le nombre de contrôles en échec. C'est une lentille nette reposant sur une seule identité porteuse, et il vaut la peine d'être précis sur ce que la vue par codes correcteurs apporte et sur ce qu'elle ne fait que renommer.
- [La théorie complexe : compter l'arbre de recherche avant de le parcourir](https://eternity2.dev/fr/research/why/complex-theory/) — La théorie complexe de Brendan Owen estime la largeur de l'arbre de recherche à chaque profondeur, et jusqu'au nombre total de solutions. Beaucoup, dans la communauté, la tiennent pour la chose la plus importante à comprendre sur Eternity II.
---
# Motifs interdits
> Presque tout petit assemblage de pièces que l'on pourrait construire est impossible. Pour un carré 2×2, 99,72 % des façons de placer quatre pièces ne pourront jamais s'accorder.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/forbidden-patterns/
- Mise à jour: 2026-07-01
- Sujets: structure, search-space
- Reproduire: `just research-forbidden-patterns`
- Source: Motifs interdits : article, code source et résultats (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/forbidden-patterns
---
Eternity II compte 256 tuiles carrées, chacune portant une couleur sur ses
quatre côtés. 196 d'entre elles sont des pièces intérieures, celles dépourvues
de bord gris, donc les seules à pouvoir se retrouver à l'intérieur du plateau.
Prenez-en quelques-unes, disposez-les dans une petite forme et faites-les
pivoter à votre guise. La plupart du temps, les couleurs ne s'aligneront tout
simplement pas, quoi que vous fassiez.
Plus la forme est grande, plus la situation empire. Deux pièces côte à côte
échouent à s'accorder dans environ 39 % des cas. Ajoutez-en une troisième en L
et vous êtes bloqué dans 83 % des cas. Fermez un carré 2×2 et 99,72 % de tous
les placements sont morts-nés : seul environ 1 sur 358 fonctionne.
## L'un s'accorde, l'autre non
> **[Figure]** interactive: BoardSvg. Rendered on the canonical page (link above); not shown in this markdown export.
> **[Figure]** interactive: BoardSvg. Rendered on the canonical page (link above); not shown in this markdown export.
## À vous de jouer : tirez quatre pièces
> **[Figure]** Interactif : peignez un assemblage et regardez-le s'interdire lui-même — interactive: ForbiddenPatchLab. Rendered on the canonical page (link above); not shown in this markdown export.
## D'où vient ce 99,72 %
Une estimation grossière explique pourquoi ce nombre est si élevé. Deux pièces
adjacentes partagent une arête. Chaque pièce intérieure porte des couleurs
issues de la palette intérieure de 17 couleurs, si bien qu'une paire aléatoire
de demi-arêtes s'accorde avec une probabilité d'environ
$$
\Pr[\text{one edge matches}] \;\approx\; \frac{1}{17} \;\approx\; 6\%.
$$
Un carré 2×2 comporte quatre arêtes internes à satisfaire simultanément. Les
rotations offrent quatre chances à chaque pièce, mais les quatre arêtes sont
couplées, si bien qu'une estimation d'indépendance faite au dos d'une enveloppe
situe la probabilité que les quatre s'accordent à très grossièrement
$$
\Pr[\text{2}\times\text{2 feasible}] \;\sim\; 1 - \left(1 - \tfrac{1}{17}\right)^{\!c} \ \text{per rotation budget} \;\Rightarrow\; \lesssim 1\%,
$$
ce qui est déjà en dessous de un pour cent. Le décompte exhaustif exact aboutit
à 0,28 % de configurations réalisables, soit 99,72 % d'interdites
$(\,0.28\% = \tfrac{3{,}993{,}696}{1{,}431{,}033{,}240}\,)$. L'estimation est
grossière parce que les arêtes ne sont pas indépendantes et les couleurs ne
sont pas uniformes, mais elle donne le bon ordre de grandeur et montre pourquoi
fermer un carré est bien plus difficile que placer une simple paire.
## Les décomptes exacts
Tous les placements à pièces distinctes de chaque forme, vérifiés
exhaustivement, sans échantillonnage.
| Forme | Placements | Interdits | % interdits |
| ---------------- | -------------: | ------------: | ----------: |
| Deux côte à côte | 38,220 | 14,890 | 38.96% |
| Deux empilées | 38,220 | 14,890 | 38.96% |
| L de trois | 7,414,680 | 6,173,828 | 83.26% |
| Carré 2×2 | 1,431,033,240 | 1,427,039,544 | 99.72% |
Calculé exactement à partir du jeu officiel ; l'exécution se reproduit à
l'identique à chaque fois (une vingtaine de secondes).
[L'article, le code source et les résultats sont sur GitHub](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/forbidden-patterns).
## Interdit avant même d'avoir choisi une pièce
La rareté commence un niveau en dessous des pièces entières, au niveau des
couleurs. Une cellule intérieure présente deux des 17 couleurs intérieures à
n'importe quel coin donné, les deux arêtes qui s'y rejoignent, ce qui fait
$17 \times 17 = 289$ paires de couleurs ordonnées possibles. Elles n'existent pas
toutes. Dès 2008, la communauté a remarqué que **20 de ces 289 paires sont des
absences** : aucune pièce intérieure, dans quelque rotation que ce soit, ne
présente cette paire particulière de couleurs sur des arêtes adjacentes
([msg 5027](https://groups.io/g/eternity2/message/5027)). Ainsi, un plateau
partiel qui force une cellule à répondre par l'une de ces 20 paires de coin est
mort sur-le-champ, avant même qu'une seule pièce ne soit essayée, et un solveur
rapide peut le rejeter par une simple consultation de table. C'est la même leçon
que le décompte 2×2, poussée jusqu'à la plus petite unité qui puisse être
impossible : les contraintes mordent si tôt que des catégories entières
d'exigence locale n'ont tout bonnement aucune réponse légale.
## Pourquoi c'est important
Un plateau terminé et correct ne comporte aucun assemblage interdit : par
définition, tout s'accorde. Compter les assemblages interdits d'un plateau
indique donc à peu près à quelle distance il se trouve d'une véritable solution,
même lorsque deux plateaux ont le même nombre d'arêtes accordées. Les plateaux
faibles regorgent de carrés interdits ; les meilleurs plateaux jamais trouvés
n'en gardent qu'une petite vingtaine.
Cela montre aussi, sous un autre angle, pourquoi le puzzle résiste aux
corrections locales astucieuses. Quand 99,72 % des petits carrés sont
impossibles, les pièces qui s'accordent réellement sont rares et spécifiques.
Il n'y a presque aucune marge pour réagencer les choses sans casser quelque
chose. Les bons agencements sont rares et rigides.
## Un second axe de progression
Compter les carrés interdits transforme l'idée en un signal exploitable.
Prenez un vrai plateau record : le nombre de fenêtres 2×2 interdites décroît à
mesure que le score d'arêtes accordées augmente. Deux plateaux au même score
d'arêtes peuvent malgré tout différer ici : celui qui compte le moins de carrés
interdits est structurellement plus proche d'une solution, et c'est pourquoi
certains solveurs suivent le nombre d'assemblages interdits comme critère de
départage.
> **[Figure]** Interactif : comptez les placements réalisables face aux interdits — interactive: ForbiddenCountLab. Rendered on the canonical page (link above); not shown in this markdown export.
## À lire aussi
- [L'entropie et la loi d'aire](https://eternity2.dev/fr/research/why/entropy-area-law/) — Eternity II a deux règles : les bords doivent coïncider, et chaque pièce ne sert qu'une fois. La première est généreuse. Toute la difficulté tient dans la seconde.
- [KEYRING](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/keyring/) — Construire un plateau de zéro en classant chaque pièce suivante selon trois signaux appris de plateaux forts passés. A atteint 460 dans une famille de plateaux qu'aucune recherche antérieure n'avait percée.
- [La cohérence d'arc, à partir d'AC-3](https://eternity2.dev/fr/research/build/reduce/arc-consistency/) — Le forward checking regarde un coup à l'avance ; la cohérence d'arc oblige la liste de candidats de chaque case à se défendre contre celle de chaque voisine, jusqu'à un point fixe. AC-3 de Mackworth, les raffinements optimaux qui ont suivi, ce que toute cette famille a réellement mesuré sur ce casse-tête, et où elle devient incorrecte.
---
# Le cadre n'est pas le bassin : une bordure différente n'ouvre pas un plateau plus haut
> L'anneau de bordure est la partie la plus contrainte du casse-tête ; une bordure forte différente devrait donc fixer un intérieur haut différent. Il n'en est rien. De nombreuses bordures entièrement appariées et distinctes, chacune complétée par un même producteur d'intérieur fixe, donnent des sommets quasi maximalement différents les uns des autres mais uniformément bas, aucun près de la zone record. La bordure diversifie le plateau sans en prédire le plafond.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/frame-is-not-the-basin/
- Mise à jour: 2026-07-22
- Sujets: structure, search-space
- Reproduire: `just research-frame-is-not-the-basin`
- Source: Le cadre n'est pas le bassin : topic de reproduction avec l'article, le producteur versionné et les deux fichiers JSON de résultats (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/frame-is-not-the-basin
---
Il existe un raccourci tentant pour Eternity II. L'anneau de bordure est la
partie la plus contrainte du plateau : soixante cases sur cinq couleurs
d'anneau seulement, remplies par les quatre coins et les cinquante-six pièces de
bord (la [page pureté de l'anneau](/fr/research/why/ring-purity/) montre pourquoi ces
cinq couleurs ne quittent jamais le rebord). Si une bordure entièrement
appariée fixe le sommet du plateau, alors une bordure *différente* devrait fixer
un intérieur haut *différent*, et construire plusieurs bordures fortes distinctes
ouvrirait plusieurs bassins hauts distincts. La diversification par la bordure
serait un levier pour les scores.
Cette page est la mesure qui referme cette porte. Générer de nombreuses bordures
entièrement appariées et structurellement distinctes, puis compléter chacune
avec le même producteur d'intérieur fixe, donne des sommets quasi maximalement
différents les uns des autres et pourtant tous logés dans la même bande basse,
loin de la zone record. La bordure est un fort *diversifiant* du plateau obtenu
et un *sélecteur* de qualité inutile. L'identité du cadre ne prédit pas le
plafond de l'intérieur.
28
bordures entièrement appariées distinctes, deux bases de graines
~190 / 196
cases intérieures qui diffèrent entre deux sommets quelconques
441
meilleur plateau, strict 5/5, encore à 14 de 455
Chaque score de cette page relève de la convention stricte à cinq indices (les
cinq indices officiels respectés, adjacences non grises appariées sur 480) ; les
cinq indices se trouvent sur des cases intérieures, aucun sur l'anneau, si bien
que chaque complétion ici est un plateau strict 5/5 légal et que la bordure est
libre de toute contrainte d'indice. Pour situer ces nombres par rapport aux
records communautaires et de carnet, voir la [page des records](/fr/research/records/).
## Le cadre est un objet lâche
La raison de douter du raccourci est structurelle. L'anneau de bordure est un
problème d'appariement de bords cyclique et autonome sur cinq couleurs à
approvisionnement équilibré, si bien que les bordures entièrement appariées sont
astronomiquement abondantes : le cadre seul admet, on le sait depuis longtemps,
plus de $10^{15}$ arrangements. En produire des versions structurellement
distinctes est trivial, et elles se couplent à l'intérieur par un unique canal à
faible information : soixante couleurs tournées vers l'intérieur, un mot-frontière
que l'intérieur doit satisfaire, sur un intérieur de 196 cases et 22 couleurs. Ce
canal est bien trop mince pour déterminer l'intérieur. L'espoir qu'une bordure
différente fixe un intérieur haut différent repose donc sur une information que
le cadre ne porte pas.
L'expérience transforme cet argument structurel en test direct.
## Ce qui a été mesuré
Sur l'ensemble officiel de 256 pièces, les cinq indices officiels épinglés :
1. générer N bordures entièrement appariées structurellement distinctes à partir
de zéro (un placement en profondeur d'abord randomisé sur les soixante cases
de bordure, gris vers l'extérieur, chaque adjacence d'anneau appariée,
dédupliqué par égalité exacte de l'anneau) ;
2. figer chaque bordure et remplir ses 196 cases intérieures avec **un** seul
producteur fixe à budget fixe : un faisceau tolérant aux ruptures qui remplit
l'intérieur ligne par ligne, notant chaque candidat par arêtes appariées moins
non appariées contre ses voisins déjà placés (bordure figée comprise) et
élaguant à une largeur fixe avec une départage graine ;
3. rapporter la bande de score plateau complet, la distance de Hamming par tuiles
entre les meilleures complétions, et si une bordure atteint la zone record.
Deux questions, et deux seulement : **les sommets sont-ils distincts ?** et
**les sommets sont-ils hauts ?**
### L'exécution principale
Seize bordures entièrement appariées structurellement distinctes, faisceau
d'intérieur de largeur 128, trois graines par bordure, meilleure conservée :
| Grandeur | Résultat |
| --- | --- |
| Bordures entièrement appariées distinctes générées | 16 (sur 17 tentatives en profondeur d'abord) |
| Bande de score des sommets (min / médiane / max) | 434 / 437 / 440 |
| Une bordure atteint la zone record (>= 455) | non |
| Écart du meilleur sommet par bordure à 455 | 15 |
| Hamming par tuiles intérieures (sur 196 cases) | 188 à 191, moyenne 190,4 (120 paires) |
| Meilleur plateau, strict 5/5, bordure toujours appariée | oui et oui (440, 40 ruptures) |
Les deux lignes porteuses sont la troisième et l'avant-dernière. **Aucune
bordure n'atteint la zone record** : la meilleure des seize marque 440, encore à
15 de 455 et à une vingtaine du haut strict 5/5 du carnet. Et les complétions
sont **quasi maximalement distinctes** : entre deux quelconques, 188 à 191 des
196 cases intérieures diffèrent. Les bordures diversifient le plateau presque
entièrement et n'en sélectionnent aucunement la qualité ; chacune des seize se
loge dans une fenêtre de six points, 434 à 440. Le meilleur plateau de
l'exécution, complétion strict 5/5 légale d'une bordure entièrement appariée, est
visualisable depuis le fichier de résultats versionné du topic de reproduction.
### La passe de robustesse
Le point étant précisément que l'identité du cadre n'importe pas, le résultat
doit montrer qu'il n'est pas un accident d'une seule base de graines. Une seconde
passe indépendante (douze bordures, une base de graines différente) concorde :
bande 434 à 441 (médiane 438), meilleur 441 encore à 14 de 455, Hamming par
tuiles intérieures 187 à 191 (moyenne 190,3), et le meilleur plateau à nouveau
une complétion strict 5/5 d'une bordure entièrement appariée. Deux bases de
graines indépendantes, 28 bordures distinctes en tout, et aucune ne franchit
445, encore moins la zone record.
## Pourquoi un intérieur plus fort ne fait que l'affûter
Une passe de carnet antérieure a mené ce même test avec un intérieur plus
faible, à ajustement dur, qui calait dans les 250 et n'approchait jamais la zone
record. Cette reproduction y substitue délibérément un producteur d'intérieur
*plus fort*, le faisceau tolérant aux ruptures ci-dessus, qui remplit toujours
les 196 cases. Sa bande absolue est donc plus haute, la mi-430 plutôt que les
250. Cela n'adoucit pas le constat ; cela l'affûte. Même avec un solveur
d'intérieur bien meilleur, aucune bordure distincte n'atteint la zone record, et
les bordures restent quasi maximalement distinctes. Un intérieur plus fort ne
peut rendre la bordure informative, car la bordure est une coque en aval, à
faible entropie, suspendue à l'intérieur, et non la chose qui le fixe. La bande
est une propriété du solveur d'intérieur ; le constat négatif est une propriété
du couplage cadre-intérieur, et il est indépendant du producteur.
## Ce que cela referme, et ce que cela ne referme pas
Le résultat est un énoncé de rigidité sur la bordure. Il referme la
diversification par la bordure comme voie vers de meilleurs scores : une bordure
entièrement appariée différente donne un plateau différent, mais pas un plateau
plus haut, si bien qu'il n'y a aucun gradient à gravir en parcourant l'espace des
bordures. Là où vit réellement l'information des hauts scores, c'est l'intérieur
des rangées du haut, et c'est exactement la région que le
[mur de rigidité](/fr/research/why/rigidity-wall/) décrit comme une île figée. Le
cadre ne fixe pas le sommet ; le sommet se fixe lui-même, et la bordure y est
suspendue. La comptabilité de couture qui couple les deux, l'équilibre exact des
couleurs à travers l'interface bordure-intérieur, fait l'objet de la
[page équilibre de la bordure](/fr/research/why/border-balance/).
C'est un constat négatif à configuration unique, borné franchement. Il est
établi purement à partir de bordures générées de zéro et complétées par un seul
producteur fixe, la forme de robustesse que l'étude d'origine réclamait. Il ne
tente pas le contrôle plus difficile consistant à figer la bordure propre d'un
plateau record et à la compléter, ce qui exigerait un plateau qui ne fait pas
partie du kit de départ public ; le constat tient sans lui. Et la bande absolue
est celle du solveur d'intérieur, non une affirmation sur un chiffre exact : ce
qui porte, c'est l'écart à la zone record, et il se reproduit avec de la marge.
Chaque nombre ci-dessus est recalculé par le producteur versionné du topic de
reproduction lié dans les sources : un programme Rust qui charge l'instance
officielle, génère ses propres bordures entièrement appariées, fige chacune et
complète l'intérieur avec le seul faisceau fixe tolérant aux ruptures, et émet
deux fichiers JSON (l'exécution principale et la passe à graine indépendante)
contenant chaque chiffre cité ici.
## À lire aussi
- [Pureté de l'anneau : le bord est un sous-puzzle clos, sans aucun jeu](https://eternity2.dev/fr/research/why/ring-purity/) — Cinq des 22 couleurs ne touchent jamais les 196 pièces intérieures. La liste des pièces force toute solution valide à dépenser les 120 demi-arêtes de cadre sur l'anneau du bord : un sous-puzzle autonome à jeu exactement nul (120 = 120), un circuit eulérien sur cinq sommets, relié à l'intérieur par seulement 56 arêtes tournées vers le centre.
- [L'équilibre du bord](https://eternity2.dev/fr/research/why/border-balance/) — Un plateau résolu dissimule une loi comptable toute simple : chaque couleur que le bord tend vers l'intérieur, l'intérieur la lui rend aussitôt. La violer, c'est savoir sur-le-champ que le plateau est faux ; la respecter, en revanche, ne garantit rien.
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
---
# L'emplacement des indices l'emporte sur leur nombre
> Sur un casse-tête 16×16 construit à l'image d'Eternity II, dix-huit indices dispersés sur le plateau le résolvent en quelques minutes, là où les entasser en rangées contiguës en réclame une centaine rien que pour ramener la recherche à des dizaines de milliards de placements. C'est la position, non le nombre, qui fait levier, et elle pointe droit vers la fin de partie.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/hint-geometry/
- Mise à jour: 2026-07-10
- Sujets: structure, search-space, backtracking
- Reproduire: `just experiments hint-study-solve`
- Source: L'étude de densité d'indices de Joe et la résolution à 18 indices de Peter McGavin (fil groups.io « A method to prune E2 search space by 17-30%+ », msg 11725) — https://groups.io/g/eternity2/message/11725
- Source: Peter McGavin : 18 indices dispersés résolvent le casse-tête 16×16 façon E2 en moins de 15 minutes (groups.io msg 11746) — https://groups.io/g/eternity2/message/11746
- Source: Peter McGavin : le backtracker optimisé remonte au message de Mike de 2007 (groups.io msg 3098) — https://groups.io/g/eternity2/message/3098
---
Donnez gratuitement à un solveur quelques pièces correctes et le casse-tête
devient plus facile. La question évidente est de savoir combien il en faut. La
meilleure question, il s'avère, est de savoir *où* les placer. Sur un casse-tête
16×16 construit avec la recette de couleurs exacte d'Eternity II, dix-huit
indices posés aux bons endroits le résolvent en quelques minutes ; les entasser
au contraire dans des rangées contiguës, une mesure en a réclamé une centaine
(soixante de bordure plus quarante intérieurs) rien que pour ramener la
recherche à des dizaines de milliards de placements. Pour établir nous-mêmes le
seuil de bascule, nous avons rejoué le même affrontement sur un plateau assez
petit pour être résolu jusqu'au bout : égaler un réseau dispersé de seize
indices a demandé **cinq rangées contiguës, quarante indices**, environ deux
fois et demie le nombre, tranché par la seule géométrie.
## Deux façons de dépenser les mêmes dix-huit indices
> **[Interactive: HintGeometryDiagram]** Rendered on the canonical page (link above); not shown in this markdown export.
Le plateau de gauche est la disposition réelle qu'a employée Peter McGavin :
dix-huit indices sur un réseau régulier, une colonne sur trois, sur quelques
rangées éparses. Son backtracker à balayage de rangées, sans fioritures, a
résolu le casse-tête 16×16 façon E2 de Joe (cinq couleurs de bordure, dix-sept
couleurs intérieures, la même distribution que le casse-tête officiel) en moins
de quinze minutes sur un seul cœur, en parcourant un arbre de recherche de
41 160 067 167 placements. Entassez au contraire les
dix-huit indices dans les premières rangées, à la manière dont un balayage de
haut en bas les accumule naturellement, et ils n'achètent presque rien : la
partie difficile du plateau reste entièrement ouverte.
Joe l'avait abordé par l'autre bout, en amorçant des rangées contiguës entières
à partir d'une solution connue, et il lui en fallait bien davantage pour ramener
la recherche à une taille maniable : une centaine d'indices (soixante de bordure
plus quarante rangées intérieures) laissait encore un arbre d'environ 47
milliards de placements
([msg 11725](https://groups.io/g/eternity2/message/11725)).
Ni l'un ni l'autre de ces chiffres n'établit le seuil avec précision, car un
plateau 16×16 ne se termine jamais en quelques secondes et le décompte brut est
brouillé par les correspondances gratuites qu'un bloc plein vous offre. Nous
avons donc réduit le casse-tête à une taille qui, elle, se termine, un 8×8
construit selon la même recette de couleurs, et mesuré la vraie grandeur : le
nombre de nœuds jusqu'à une résolution complète, sur trente instances graines
par disposition. Là, un réseau dispersé de seize indices résout chaque instance
en quelques milliers de nœuds de recherche. Les rangées contiguës doivent grimper
à cinq rangées pleines, quarante indices, avant de résoudre chaque instance dans
le même budget de nœuds. À nombre *égal*, seize indices dispersés l'emportent
sur seize entassés en deux rangées de plus de deux ordres de grandeur en nœuds de
recherche, et le bloc échoue à en résoudre six sur trente. Le réseau atteint la
fin de partie ; le bloc ne l'atteint jamais avant de presque l'ensevelir.
18
indices dispersés, résolu en minutes
2,5×
d'indices en plus, en rangées contiguës, pour égaler un réseau dispersé (mesuré jusqu'à la résolution)
99%
du temps de recherche passé au-delà de la profondeur 132
70%
du temps de recherche passé au-delà de la profondeur 150
## Pourquoi la position gagne : les indices doivent atteindre la fin de partie
Les deux nombres de droite expliquent ceux de gauche. Joe a instrumenté son
backtracker sur plus d'un milliard d'itérations et constaté que le travail n'est
pas du tout réparti sur le plateau : 99 % s'effectue après la profondeur 132 sur
256, et 70 % après la profondeur 150. Presque toute la douleur est dans la
seconde moitié du remplissage, et l'essentiel au-delà des trois cinquièmes.
Un bloc d'indices contigus en haut est dépensé exactement là où la recherche
n'allait jamais peiner. Il raccourcit un début facile et laisse intacte la queue
coûteuse. Les indices dispersés font l'inverse : parsemés à travers le plateau,
jusque dans la région que la recherche atteint en dernier, ils devancent les
choix qui, sinon, exploseraient loin dans l'arbre. C'est le même fait que les
plateaux records portent à leur surface. Un plateau quasi parfait concentre tous
ses dégâts dans la bande de rangées sur laquelle la recherche s'est terminée,
parce que
[ce sont les rangées remplies en dernier qui vous font payer le casse-tête](/fr/research/why/mismatch-geometry/).
Les indices n'aident que dans la mesure où ils atteignent cette bande avant la
recherche.
Cela cadre aussi avec [le fait que l'intérieur ne donne aucun coup forcé](/fr/research/why/no-forced-moves/) :
chaque cellule intérieure acceptant encore des dizaines de voisines, la valeur
d'un indice ne tient pas à une propagation locale mais à une contrainte globale,
qui élague des sous-arbres entiers que la recherche aurait sinon dû parcourir.
Un indice loin de la région difficile n'élague que des sous-arbres qui étaient
de toute façon bon marché.
## Ce que cela dit et ne dit pas
C'est un résultat sur un casse-tête 16×16 construit selon la recette de couleurs
d'Eternity II, et non sur le casse-tête officiel, dont les cinq indices fixes
constituent un cadeau différent, bien plus modeste, à des endroits différents.
Ce qui se transpose, c'est la forme de la leçon, et c'est la même que celle que
l'argument [élagage contre vitesse](/fr/research/why/prune-vs-speed/) formule par
l'autre bout : ce qui compte, c'est de changer l'endroit où la recherche dépense
son effort, et l'effort réside dans la fin de partie. Une poignée d'indices
visant cette fin de partie vaut une multitude d'indices visant n'importe où
ailleurs.
> **Note**
>
> Les décomptes, l'arbre de 41 milliards de nœuds et les statistiques de profondeur sont les mesures de Joe et de Peter McGavin, rapportées sur la liste groups.io eternity2 en janvier 2026 ; la disposition dispersée montrée est décodée du plateau publié par Peter (msg 11746). Le backtracker optimisé qu'a employé Peter remonte au message de Mike de 2007 (msg 3098). Ce sont des résultats communautaires sur un casse-tête façon E2 particulier, consignés ici avec attribution plutôt que redérivés. Le seuil des cinq rangées est notre propre mesure, sur nos propres plateaux 8×8 générés et notre backtracker : le plus petit nombre de rangées contiguës dont le taux de résolution et le nombre médian de nœuds jusqu'à la solution égalent tous deux un réseau dispersé de seize indices, sur trente instances graines par disposition. Reproduisez-le avec `just experiments hint-study-solve`.
## À lire aussi
- [Où vivent les désaccords](https://eternity2.dev/fr/research/why/mismatch-geometry/) — Un plateau quasi parfait ne répartit pas uniformément ses rares erreurs. Il les concentre dans une seule bande de cinq rangées et laisse tout le reste impeccable. Quelle bande ? Cela dépend de la direction dans laquelle la recherche a rempli le plateau, et l'on voit le reflet sur les vrais plateaux record.
- [Aucun coup forcé](https://eternity2.dev/fr/research/why/no-forced-moves/) — La manière habituelle de résoudre un casse-tête logique consiste à repérer un emplacement où une seule pièce convient, à la poser, puis à recommencer. Ce levier n'existe pas ici : chaque pièce intérieure admet entre 73 et 137 voisines possibles, et aucune n'est jamais contrainte à une seule option.
- [Pourquoi un ordinateur plus rapide ne change rien](https://eternity2.dev/fr/research/why/prune-vs-speed/) — L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
---
# Cette instance est-elle NP-complète, et comment l'encoder ?
> L'appariement de bords est NP-complet en tant que famille, mais cela ne dit rien d'un plateau 16×16 fixé : une instance isolée est une constante, pas un problème. Ce qui est vrai, c'est la dureté au pire cas de la famille et la dureté empirique de cette instance, et comment écrire le puzzle pour un solveur SAT, de couverture exacte ou de PLNE, avec de petits croquis détaillés. Une mesure sur plateaux plantés chiffre le choix de la formulation : une falaise de résolubilité qu'un paradigme de recherche heurte et qu'un autre franchit, et qui bouge avec le nombre de couleurs.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/how-hard-is-this-instance/
- Mise à jour: 2026-07-22
- Sujets: exact-methods
- Source: Demaine & Demaine 2007, « Jigsaw Puzzles, Edge Matching, and Polyomino Packing: Connections and Complexity » (Graphs and Combinatorics 23) : l'appariement de bords est NP-complet — https://doi.org/10.1007/s00373-007-0713-4
- Source: Ansótegui, Béjar, Fernàndez & Mateu, How Hard is a Commercial Puzzle: the Eternity II Challenge (CCIA 2008) — https://repositori.udl.cat/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/download
- Source: Knuth, The Art of Computer Programming, Volume 4B : Algorithme X et Algorithme C (couverture exacte avec couleurs) — https://www-cs-faculty.stanford.edu/~knuth/taocp.html
- Source: Puzzle Eternity II (Wikipédia) — https://en.wikipedia.org/wiki/Eternity_II_puzzle
---
Cette page répond à une question qui ressurgit sans cesse sur les Stack Exchange
de mathématiques et d'informatique, et qui domine la liste des différends sur la
page de discussion Wikipédia du puzzle : l'appariement de bords est NP-complet en
général, alors cela nous apprend-il quelque chose sur *ce* plateau 16×16 fixé, et
concrètement, comment confierait-on Eternity II à un solveur ? Les réponses
brèves sont : non, pas directement, voici trois encodages, et une mesure en fin
de page montre à quel point le choix entre eux peut compter.
## D'abord, l'erreur de catégorie
La NP-complétude est une propriété d'un *problème*, ce qui, en théorie de la
complexité, désigne une famille infinie d'instances indexée par un paramètre de
taille $n$. Les « puzzles d'appariement de bords » forment une telle famille :
étant donné $n$, un ensemble de tuiles carrées et un alphabet de couleurs,
décider si les tuiles pavent un cadre $n \times n$ avec tous les bords adjacents
qui concordent. Ce problème de décision est NP-complet
([Demaine & Demaine 2007](https://doi.org/10.1007/s00373-007-0713-4)), ce qui
signifie à la fois qu'une solution proposée est vérifiable en temps polynomial et
que tout problème de NP s'y réduit.
Un plateau fixé unique n'est pas une famille. L'instance Eternity II a une
réponse bien définie, « oui, elle est résoluble » (les concepteurs l'ont
construite à partir d'une solution) ou, dans la forme de compétition à 5 indices,
« oui, avec exactement cet agencement ». Cette réponse tient en un seul bit. Un
seul bit est une constante, et « cette constante est-elle NP-complète ? » n'est
pas une question bien formée : il existe un algorithme en temps constant qui
affiche la réponse (`return true`), la réponse y est simplement inscrite en dur.
Demander si une instance isolée est NP-complète relève de la même erreur de
catégorie que demander si le nombre 17 est de temps polynomial.
La famille est donc dure et l'instance est une constante. Qu'y a-t-il, alors, de
réellement vrai et utile à dire sur la difficulté du plateau posé sur votre
bureau ?
## Ce qui est réellement vrai
Deux énoncés distincts, tenus séparés :
- **Dureté au pire cas de la famille.** Parce que le problème général est
NP-complet, on ne connaît aucun algorithme qui batte le temps exponentiel dans
le pire cas lorsque $n$ croît, et en trouver un prouverait
$\mathrm{P}=\mathrm{NP}$. Cela borne ce que tout solveur d'appariement de bords
générique peut promettre. Cela ne dit rien de la manière dont se comporte une
entrée *spécifique*.
- **Dureté empirique de cette instance.** Une dureté que l'on peut mesurer. Le
plateau 16×16 compte de l'ordre de $1{,}115\times10^{557}$ agencements distincts
de pièces et de rotations, et le puzzle semble n'admettre que très peu de
solutions (la forme à 5 indices est conçue pour n'en avoir essentiellement
qu'une ; voir la [théorie de la complexité](/fr/research/why/complex-theory/) pour
l'estimation du nombre attendu). Une recherche par retour sur trace faufile
donc un espace astronomiquement vaste vers un ensemble de solutions quasi vide,
et passe ainsi presque tout son temps à explorer des impasses. Voilà pourquoi
le puzzle est dur *en pratique*, et c'est une affirmation sur ce plateau, non
sur la famille.
Le théorème du pire cas et la difficulté empirique pointent ici dans la même
direction, mais ce sont des énoncés de nature différente et un seul des deux est
un théorème. Une famille peut être NP-complète alors qu'une instance donnée est
triviale (beaucoup le sont), et une instance peut être brutalement difficile à
résoudre en pratique même au sein d'une famille polynomiale. Ansótegui et al. ont
plaidé exactement ce cas empirique pour Eternity II, en en tirant des jeux de
tests pour solveurs et en mesurant la difficulté directement plutôt qu'en
invoquant le théorème général
([CCIA 2008](https://repositori.udl.cat/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/download)).
> **La version en une ligne**
>
> « Eternity II est-il NP-complet ? » Non : une instance n'a pas de classe de complexité. « Le problème d'appariement de bords est-il NP-complet ? » Oui. « Cette instance est-elle difficile à résoudre ? » Empiriquement oui, parce que l'espace de recherche est large de ~$10^{557}$ et que l'ensemble des solutions est quasi vide, si bien que la recherche se noie dans les impasses.
## L'encodage : la mise en place
Le reste est pratique : comment écrire le plateau pour qu'un solveur puisse le
mâcher ? Les trois encodages ci-dessous partagent le même squelette. Numérotons
les cases $c = 1 \dots 256$, les pièces $p = 1 \dots 256$, et les rotations
$r \in \{0, 1, 2, 3\}$. Un *placement* est un triplet $(c, p, r)$ : la pièce $p$
déposée dans la case $c$ tournée de $r$ quarts de tour. Chaque encodage doit
exprimer trois choses :
1. chaque case reçoit exactement un placement,
2. chaque pièce est utilisée exactement une fois,
3. partout où deux cases se touchent, les couleurs du bord partagé concordent.
Les encodages ne diffèrent que par la façon dont ils expriment la contrainte 3,
l'appariement des couleurs, et cette différence est toute l'affaire. Les croquis
ci-dessous utilisent un plateau 2×2 ou 3×3 pour que l'on puisse voir toutes les
clauses ; le 16×16 a la même forme à plus grande échelle.
## SAT / FNC
Introduisons une variable booléenne $x_{c,p,r}$, vraie lorsque la pièce $p$ se
trouve à la case $c$ dans la rotation $r$. Sur le plateau complet, cela fait
$256 \times 256 \times 4 \approx 262{,}000$ variables avant la moindre
contrainte. Ensuite :
- **Exactement un placement par case.** Pour chaque case $c$, une clause « au
moins un » sur tous ses placements, $\bigvee_{p,r} x_{c,p,r}$, plus des clauses
« au plus un » interdisant toute paire, $\lnot x_{c,p,r} \lor \lnot x_{c,p',r'}$
pour des placements distincts.
- **Exactement une case par pièce.** L'image miroir : pour chaque pièce $p$, une
clause « au moins un » sur les cases qu'elle pourrait occuper, plus des clauses
« au plus un » pour qu'elle ne soit placée qu'une fois.
- **Appariement de bords.** Pour chaque adjacence intérieure et chaque placement
dont le bord exposé montre la couleur $k$, interdire tout placement de la case
voisine dont le bord en vis-à-vis n'est pas $k$ : une clause binaire
$\lnot x_{c,p,r} \lor \lnot x_{c',p',r'}$ pour chaque paire en conflit.
Un croquis 2×2 rend la troisième famille concrète. Les cases $A$ (en haut à
gauche) et $B$ (en haut à droite) partagent un bord vertical ; le bord est de $A$
doit être égal au bord ouest de $B$. Pour chaque placement $(A,p,r)$ montrant la
couleur est $k$, et chaque placement $(B,p',r')$ dont la couleur ouest n'est pas
$k$, ajouter $\lnot x_{A,p,r} \lor \lnot x_{B,p',r'}$. Faire de même pour $A$/$C$
verticalement et pour les deux autres adjacences intérieures. Voilà tout ce
qu'est la contrainte 3 : un grand tas de clauses binaires « ces deux placements
ne peuvent pas être vrais tous les deux ».
Le hic, c'est que le tas est énorme. Les clauses de conflit dominent, les
encodages « au plus un » ajoutent leur propre explosion (l'approche naïve par
paires est quadratique ; les encodages en échelle ou par commandant l'échangent
contre des variables auxiliaires), et le résultat est une formule à des millions
de clauses dont la structure ne donne presque rien à apprendre à la recherche
guidée par les conflits. Cela a été tenté dès 2008 et les solveurs SAT complets
s'enlisent sur le plateau complet ; Blackwood, parmi d'autres, a rapporté que SAT
n'aidait pas. L'encodage est propre, le solveur n'est pas le goulot
d'étranglement, c'est l'*instance* qui l'est. Voir
[Encodages SAT et CSP](/fr/research/build/exact/sat-csp-encodings/) pour l'historique
des jeux de tests et les cas où les verdicts SAT gagnent encore leur place comme
preuves d'impossibilité sur de petites régions.
## Couverture exacte et liens dansants
La vue par couverture exacte est plus soignée, et elle cache un piège qui fait
trébucher presque tous ceux qui se tournent vers les liens dansants de Knuth.
Posons 512 *items* : un par case (« la case $c$ est remplie ») et un par pièce
(« la pièce $p$ est utilisée »). Chaque *option* est un placement $(c,p,r)$, et
elle couvre exactement deux items : la case $c$ et la pièce $p$. Un ensemble
d'options couvrant chaque item exactement une fois est un plateau où chaque case
est remplie et chaque pièce utilisée une fois. C'est une instance de couverture
exacte propre, et l'**Algorithme X** de Knuth avec liens dansants résout la
couverture exacte à merveille.
Voici le piège. Les contraintes 1 et 2 sont des conditions de couverture unique,
ce qui est exactement ce qu'exprime la couverture exacte. Mais la contrainte 3,
l'appariement des couleurs, n'est pas du tout une condition de couverture unique :
un bord partagé n'est pas « utilisé une fois », il se voit « attribuer une
couleur sur laquelle les deux voisins s'accordent ». L'Algorithme X ordinaire n'a
aucun moyen de dire cela. On l'encode, on le lance, et on obtient des plateaux
aux bords discordants, ou bien l'on tente de greffer des items supplémentaires et
la sémantique de couverture unique nous résiste. Cette confusion précise a sa
propre question sur le CS Stack Exchange.
La solution est l'extension de Knuth lui-même, l'**Algorithme C**, pour XCC, la
couverture exacte avec couleurs (TAOCP Volume 4B). À côté des items *primaires*
(couverts exactement une fois), on ajoute des items *secondaires* qui peuvent
être couverts un nombre quelconque de fois, *pourvu que toutes les options
couvrant un item secondaire donné lui attribuent la même couleur*. On donne à
chaque bord intérieur de la grille un item secondaire. Un placement qui expose la
couleur $k$ sur un bord partagé attribue la couleur $k$ à l'item secondaire de ce
bord. Deux placements ne peuvent alors coexister de part et d'autre du bord que
s'ils le colorent de façon identique, ce qui est précisément la contrainte
d'appariement de bords, désormais exprimée nativement.
Un croquis 3×3 : 9 items de case et 9 items de pièce (primaires), plus 12 items
de bord intérieur (secondaires, un par jonction horizontale ou verticale). Les
placements de la case centrale touchent chacun quatre items de bord secondaires
et doivent s'accorder en couleur avec les quatre voisins ; les placements d'une
case de coin en touchent deux. L'Algorithme C faufile tout cela sans jamais
produire de plateau discordant. Le point que les étudiants manquent :
**la couverture exacte par DLX pour Eternity II requiert l'Algorithme C, pas
l'Algorithme X.** La page
[couverture exacte et liens dansants](/fr/research/build/exact/exact-cover-dlx/)
déroule la construction XCC complète et montre où le DLX brille véritablement
(petits plateaux, dénombrement exhaustif des solutions) par opposition aux cas où
il s'enlise sur le 16×16.
## PLNE et clique maximale, brièvement
Deux cadrages de plus, utiles surtout comme aiguillages :
- **Programmation linéaire en nombres entiers.** Réutiliser les variables SAT
comme entiers 0/1 $x_{c,p,r}$. Les contraintes 1 et 2 deviennent des égalités
$\sum_{p,r} x_{c,p,r} = 1$ par case et $\sum_{c,r} x_{c,p,r} = 1$ par pièce.
L'appariement de bords devient, pour chaque bord intérieur et chaque couleur
$k$, une condition de liaison reliant les placements de couleur $k$ des deux
voisins (une forme propre : une nouvelle variable binaire de couleur de bord
$y_{e,k}$ avec $\sum_k y_{e,k} = 1$, les placements de chaque côté impliquant le
$y$ correspondant). C'est une PLNE de faisabilité, sans objectif, et la
relaxation linéaire est faible, si bien que la séparation-évaluation se comporte
à peu près comme la recherche SAT. Voir
[Relaxations linéaires](/fr/research/build/exact/lp-relaxations/).
- **Clique maximale.** Construire un graphe dont les sommets sont les placements
légaux et dont les arêtes joignent deux placements mutuellement compatibles
(cases différentes, pièces différentes, et accord sur tout bord partagé). Un
plateau complet est une clique de taille 256. C'est élégant sur le papier, mais
le graphe est immense et les solveurs de clique ne s'en sortent pas mieux ; cela
vaut d'être connu comme réduction, non comme attaque pratique.
## Combien pèse la formulation ? Une falaise mesurée
Les sections précédentes se terminent sur une note décourageante : l'encodage
est propre, l'instance est le mur. Cette affirmation méritait un chiffre, et le
chiffrer l'a affinée dans une direction inattendue. Le banc d'essai est une
famille de plateaux *plantés* : des instances cadrées, aux couleurs
équilibrées, construites à partir d'une solution connue, avec cinq cases de la
solution épinglées comme indices, notées selon la convention des bords appariés
hors pourtour (une résolution complète à la taille $N$ vaut exactement
$2N(N-1)$ bords appariés : 264 en 12×12, 480 en 16×16). Les plateaux plantés ne
sont pas l'Eternity II canonique ; ils admettent vraisemblablement de très
nombreuses solutions là où le vrai puzzle est conçu pour n'en avoir
essentiellement qu'une. Ce qu'ils offrent, c'est une échelle d'instances
résolubles par construction que deux paradigmes de recherche différents peuvent
attaquer côte à côte.
Sur ce banc, à 22 couleurs, une recherche en profondeur à redémarrages qui ne
place que des correspondances exactes résout entièrement quatre graines 10×10
sur cinq (la plus rapide en 4 ms) et deux graines 11×11 sur cinq, puis zéro sur
cinq en 12×12 et zéro à toutes les tailles au-dessus. L'échec n'est pas une
affaire de budget. L'instance 12×12 de graine 1 marque 127 sur 264 après
20 secondes, après 45 secondes et après 120 secondes, tandis que le nombre de
nœuds visités passe de 22 millions à 132 millions ; une instance 14×14 rampe de
236 à 240 sur 364 sur la même extension sextuple du budget. La recherche ne
converge pas lentement ; elle est clouée.
Confiez les instances identiques à CP-SAT avec un modèle structuré (une
variable entière par case parcourant les identifiants de pièces sous une
contrainte AllDifferent, des indices pièce-et-rotation canalisés par des tables
Element vers des variables de couleur par côté, le tout posé en question de
décision) et le mur se déplace. Quatre des cinq instances 12×12 tombent en 31,7
à 88,1 secondes (la cinquième dépasse le délai de 300 secondes), et l'une des
deux instances 13×13 essayées tombe en 74 secondes, chaque plateau retourné
étant revérifié indépendamment : distinction des pièces, conformité aux
indices, décompte des bords recalculé. Ce sont des résolutions complètes
vérifiées de plateaux qu'aucune graine de la DFS ne touche, quel que soit le
budget. La falaise appartient au paradigme de recherche, pas aux plateaux.
Le tour original de cette mesure tournait sur un générateur autorisant 26
couleurs intérieures, un réglage que le banc empaqueté ne peut pas produire
(son générateur plafonne les couleurs intérieures à 22, le compte du vrai
puzzle). À 26 couleurs, le contraste était plus net encore : CP-SAT a résolu
entièrement 25 instances sur 25 aux tailles 10 à 14 avec des temps médians de
0,10 à 0,84 seconde, une demi-seconde en 13×13, et a terminé un 16×16 planté en
15 secondes environ, pendant que la falaise de la DFS se tenait un barreau plus
haut, en 13×13. Ce même tour a aussi mesuré l'écart de formulation en
isolation : sur une instance 12×12, un MIP générique sur binaires de placement
avec lignes de somme à un, passé par la séparation-évaluation de HiGHS, a rendu
11 bords appariés sur 264 après 300 secondes ; CP-SAT a rendu les 264 sur la
même instance en 0,42 seconde. Même problème, même machine, environ trois
ordres de grandeur, et toute la différence tient à la façon d'écrire les
contraintes.
Mettre les deux réglages côte à côte fait apparaître un second résultat : la
falaise bouge avec le nombre de couleurs, pour les deux paradigmes à la fois. À
26 couleurs, la DFS meurt en 13×13 et CP-SAT traverse un 16×16 planté en
quelques secondes. À 22 couleurs, la DFS meurt un barreau plus tôt, en 12×12,
et CP-SAT lui-même ralentit d'environ vingt fois à la médiane entre 11×11 et
12×12 puis commence à dépasser ses délais à partir de 12×12 : les sondes 14×14
et 16×16 butent toutes deux sur un plafond de 120 secondes. (Les grands
barreaux étaient des sondes à graine unique, et les temps CP-SAT à 22 couleurs
portent une part d'inflation due à un volet DFS partageant la machine, qui
n'explique en rien l'écart avec les médianes sous la seconde à 26 couleurs.)
Plus de couleurs, c'est un plateau plus contraint et une recherche plus facile
pour tout le monde ; moins de couleurs tire les deux paradigmes vers le bas
ensemble, si bien que des mesures prises à 26 couleurs avantagent tous les
solveurs de la course. Le 16×16 planté sur lequel la sonde a échoué mérite
d'être vu, montré ici comme sa solution construite :
[16×16 planté, 480/480](https://eternity2.dev/viewer?puzzle=gen_16x16_c22_s1&puzzle_size=16&board_edges=aebaabgeabvbacvbadvcacrdadlcadodadidaeqdafneadgfacwdafscachfaabcbjcagmujvhpmvuohvtpurnttlrsnouvriphuqowpnluogqllwpqqsvgphkgvbackcgdauwsgpluwoqmlpjoqtikjsnnivvvnhmrvwhpmuuuhlutuqqkugguqgnhgcabndgdassrguihsmqkiokhqkjnknokjvkrormikpptmuroptrirkomruumohjsubaejdlearsulhqmskvpqhqkvnwpqknuwrlqnikrltjlkosnjiglsmoogmnjoslqneaclerdauhjrmiihpklikwlkprmwunprqnwnrgnnlgjgnvmglknvowskjkowqwpkcafwdjfajjgjiqqjlptqlnipmslnpowswjjonoljjttomsrtnwtssrowosmrpmisfafmfhdagvkhqjsvtinjitsilwntwjrwjvrjlkovtsvkrhqstquhojhqmkqjitrkfaftdufakstusuisnmvuslsmnrmlrsvrrhnsoomhvtloqvntutvvhkltqukkrmtufaemfhfatwhhirhwvtrrsjptmtujvtgtnvstmohvliionwhivqqwlomqkgpotljgeaflfqeahgqqhmngrprmpqhpuugqgiquslqihqrliimqhkjiqwwkmspwpqisjkjqfaekembaqipmnioirkwihvkkgntvqhhnqnshrwgnmvlwjgwvwqkgpwmqiliwjulleadububapssuohjswmuhkowmtnpohrtnspgrgnrplnvnwgpnkvvgmhlvihwhlnshdadnbkeasgtkjjigumvjwwwmpjgwtpojgujprvtuvruvptorvmmtlsomwigssopidafoegcatppgiltpvpwlwohpgiuoolhijroltigrujgiotljmkjtorkkgiirppmifabpcbaapeabtbaewcabhcacueacheaeocaegfacgcaflbacjfabkbafieabmdaebaad).
> **Un témoin, compté dix fois**
>
> Le tour à 26 couleurs a aussi essayé dix familles heuristiques sur la falaise, d'un remplisseur naïf ligne par ligne à la propagation AC-3 et à l'élagage par déficit de Hall : six ont résolu entièrement le 12×12 et aucune n'a résolu le 13×13. Dix solveurs d'accord ressemblaient à dix preuves que les instances étaient le mur. C'en était une seule. Les dix s'engagent chronologiquement et gloutonnement sur une information locale, donc ils échouent ensemble pour la raison partagée, et le premier solveur d'un paradigme réellement différent a renversé la conclusion en une demi-seconde. L'accord de N solveurs de la même famille est un témoin à N voix.
## Où cela vous laisse
Si vous êtes venu demander si la théorie de la NP-complétude rend cette instance
prouvablement difficile, la réponse est qu'elle ne le fait pas, et ne le peut
pas : les classes de complexité décrivent des familles, et ce plateau est une
entrée fixée avec une réponse fixée. Le problème général d'appariement de bords
est NP-complet, ce qui plafonne ce que tout solveur peut promettre lorsque $n$
croît, mais la difficulté que vous ressentez réellement est empirique : un espace
large de $10^{557}$ au-dessus d'un ensemble de solutions quasi vide. Chaque
encodage ci-dessus capture fidèlement le puzzle, et sur le 16×16 complet aucun
ne le rend facile ; mais la falaise des plateaux plantés montre que le choix du
formalisme n'a rien de neutre en deçà de cette échelle, où le même plateau peut
être hors d'atteinte pour un paradigme et une résolution d'une minute pour un
autre. Une fois le
plateau encodé, le levier qui subsiste est la
[cohérence d'arc](/fr/research/build/reduce/arc-consistency/) et un ordre de recherche
avisé, ce dont s'empare la suite de cette section.
## À lire aussi
- [La théorie complexe : compter l'arbre de recherche avant de le parcourir](https://eternity2.dev/fr/research/why/complex-theory/) — La théorie complexe de Brendan Owen estime la largeur de l'arbre de recherche à chaque profondeur, et jusqu'au nombre total de solutions. Beaucoup, dans la communauté, la tiennent pour la chose la plus importante à comprendre sur Eternity II.
- [Encodages SAT et CSP](https://eternity2.dev/fr/research/build/exact/sat-csp-encodings/) — Écrire le puzzle sous forme de clauses et le confier à un solveur industriel : le geste évident, tenté dès 2008. Pourquoi les solveurs complets s'enlisent sur le plateau complet, et où leurs verdicts gardent toute leur valeur comme preuves d'impossibilité.
- [Couverture exacte et liens dansants](https://eternity2.dev/fr/research/build/exact/exact-cover-dlx/) — Eternity II se formule proprement comme un problème de couverture exacte, et l'algorithme X de Knuth muni des liens dansants en est la machine classique. Là où il brille vraiment (petits plateaux, dénombrement exhaustif) et les deux raisons pour lesquelles il ne vient pas à bout du 16×16 : un arbre de recherche jamais réduit, et aucun crédit partiel.
- [La cohérence d'arc, à partir d'AC-3](https://eternity2.dev/fr/research/build/reduce/arc-consistency/) — Le forward checking regarde un coup à l'avance ; la cohérence d'arc oblige la liste de candidats de chaque case à se défendre contre celle de chaque voisine, jusqu'à un point fixe. AC-3 de Mackworth, les raffinements optimaux qui ont suivi, ce que toute cette famille a réellement mesuré sur ce casse-tête, et où elle devient incorrecte.
---
# La région difficile qu'on ne peut pas concevoir autrement
> Remplissez un plateau dans un ordre fixe et les trois quarts du haut se posent librement, tandis que la difficulté s'entasse dans la bande que vous terminez en dernier. Sur quarante plateaux générés, tout le reste tombe dans la moitié basse à chaque fois ; mélangez l'ordre de remplissage et il se disperse, donc la région difficile est fabriquée par le balayage, pas cachée dans le plateau.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/irreducible-hard-region/
- Mise à jour: 2026-07-22
- Sujets: structure, search-space
- Reproduire: `just research-irreducible-hard-region`
---
Deux choses sont vraies de presque toute tentative de casser Eternity II en
découpant le plateau en morceaux remplis tour à tour. Le premier morceau rempli
se pose facilement. Le dernier, non. Que les morceaux soient des lignes, des
bandes, des bandeaux, des blocs ou des anneaux concentriques, la difficulté ne
s'étale pas sur eux ; elle se rassemble dans la région que la recherche atteint
en dernier, et s'y dresse comme un mur.
Cette page teste la version la plus nette de cette affirmation et la trouve
vérifiée nettement, avec une nuance que la mesure rend évidente : la région
difficile n'est pas un patch fixe du plateau attendant qu'on le trouve. Elle est
fabriquée par l'ordre dans lequel vous remplissez, et elle atterrit là où cet
ordre se termine.
## L'affirmation, et ses trois volets
La conjecture complète, dans le carnet du projet, comporte trois volets.
D'abord, **la difficulté se localise** : remplissez de façon séquentielle et le
reste, les cases que la recherche ne parvient pas à poser, se concentre dans la
dernière région. Ensuite, **cette région est trop grande pour être résolue
exactement** : elle dépasse la fenêtre d'environ 112 cases où une complétion
exacte revient encore en un temps raisonnable. Enfin, **elle est trop
globalement couplée pour être achevée par une heuristique** : comme chaque pièce
sert une seule fois, dépenser une pièce rare tôt dans la partie facile affame la
partie difficile plus tard, si bien qu'aucune réparation locale n'atteint un
nouveau plateau élevé.
Seul le premier volet est un fait net qu'on lit directement sur un plateau. Les
deux autres sont des plafonds liés à un solveur exact particulier et à la rareté
propre à l'ensemble officiel de 22 couleurs, et le carnet lui-même les qualifie
d'empiriques plutôt que de démontrés. Cette page reproduit donc le premier volet,
la localisation, et porte les deux autres comme conjecture. La seule lecture
qu'elle ajoute au carnet est que la localisation se comprend mieux comme une
propriété de l'ordre de balayage que du plateau, ce que le contrôle ci-dessous
rend inévitable.
## L'instrument, et pourquoi il est loyal
La mesure part de zéro sur des plateaux encadrés, équilibrés en couleur et **à
solution plantée**, construits par le générateur ensemencé du kit de départ : une
solution parfaite existe forcément, donc tout blocage revient à la recherche et
non à une instance insoluble. Pour chaque graine du générateur, le vérificateur
construit un plateau 16x16 sans indices épinglés, puis lance sur lui deux fois la
même recherche en profondeur à appariement exact avec redémarrages, une fois en
ordre de cases row-major et une fois dans un ordre de cases aléatoire ensemencé,
et lit deux nombres sur le partiel le plus profond que chaque bras atteint :
- la **fraction de front**, la ligne remplie la plus profonde divisée par le côté
du plateau, qui dit jusqu'où la partie facile est allée ; et
- la **fraction de reste dans la moitié basse**, parmi les cases encore vides, la
part qui se situe dans les lignes 8 à 15, qui dit où la difficulté a atterri.
Les deux nombres sont définis pour n'importe quel ordre de remplissage, ce qui
est précisément ce qui permet au bras aléatoire d'être un contrôle équitable face
au bras row-major. Les scores sont ici donnés selon la convention des arêtes
appariées (jointures intérieures seulement ; une solution 16x16 complète vaut
480), même si cette page ne revendique aucun record ; les statistiques de front
et de reste relèvent de la géométrie des cases, pas du score d'arêtes. Pour
situer les plateaux du projet face aux meilleurs de la communauté, voir la
[page des records](/fr/research/records/).
## Ce que fait le balayage
Exécuté sur Apple Silicon, un seul cœur, quarante plateaux fois deux bras en
environ trois minutes au budget par défaut de 1,5 million de nœuds. La source du
carnet est une synthèse de nombreuses expériences de décomposition plutôt qu'une
seule mesure, si bien qu'elle n'engage aucun tableau de chiffres par graine pour
un plateau du kit ; les nombres ci-dessous sont la forme que la conjecture
prédit, et l'accord porte sur cette forme et son signe.
Balayage de localisation, quarante plateaux 16x16 générés et encadrés, 22
couleurs, partis de zéro :
| Quantité | Forme prédite par la conjecture | Mesuré, row-major | Mesuré, contrôle aléatoire |
| --- | --- | ---: | ---: |
| Plateaux entièrement résolus | aucun attendu (ce n'est pas un solveur) | 0 / 40 | 0 / 40 |
| Fraction de front médiane sur les plateaux calés | les dix lignes et plus du haut se remplissent librement (au-dessus de 0,6) | 0,75 (12 lignes sur 16) | 0,0 (aucune ligne ne se remplit entièrement) |
| Plage de la fraction de front | élevée | 0,6875 à 0,75 | sans objet |
| Fraction de reste moyenne dans la moitié basse | proche de 1,0 (la région difficile est la dernière bande) | 1,000 | 0,503 |
| Plateaux dont tout le reste est dans la moitié basse | tous | 40 / 40 | 0 / 40 |
La recherche row-major atteint un front médian des trois quarts du plateau,
douze lignes complètes sur seize, avant de ne plus pouvoir poser un appariement
parfait. Cela correspond à l'image du carnet où les dix lignes et plus du haut se
remplissent quasi librement. Et sur chacun des quarante plateaux, tout le reste
se situe dans la moitié basse : la fraction de reste moyenne dans la moitié basse
vaut exactement 1,000.
## Le contrôle, c'est tout l'enjeu
Prenez les mêmes quarante plateaux et remplissez chacun dans un ordre de cases
uniformément aléatoire au lieu de row-major. Il n'y a plus de dernière région, et
le reste se disperse. La fraction de reste moyenne dans la moitié basse vaut
0,503, indiscernable d'un partage égal, et pas un seul des quarante plateaux ne
concentre son reste en bas.
La région difficile n'est donc pas quelque part sur le plateau à découvrir. Le
même plateau a toute sa difficulté en bas sous un balayage row-major et n'en
concentre nulle part sous un ordre aléatoire. La difficulté est réelle, mais elle
est placée par la décomposition. C'est l'image en miroir de ce que montrent
directement les plateaux records : leurs
[quelques défauts s'entassent dans une bande](/fr/research/why/mismatch-geometry/)
dont la position est fixée par la direction dans laquelle la recherche a rempli
le plateau. Ici, on peut voir cette bande se créer et se déplacer en ne changeant
rien d'autre que l'ordre de remplissage.
## Le blocage est un mur, pas un démarrage lent
Une dernière vérification sépare un mur d'une recherche qui a simplement manqué
de nœuds. Réexécutez huit des plateaux à quatre millions de nœuds, soit environ
2,7 fois le budget du balayage, et comparez le front aux mêmes graines de la
série principale.
| Quantité | Balayage à 1,5 million de nœuds | Réexécution à 4 millions de nœuds |
| --- | ---: | ---: |
| Fraction de front, graines 1 à 8 | 0,6875 à 0,75 | 0,6875 à 0,75 |
| Fraction de reste moyenne dans la moitié basse | 1,000 | 1,000 |
Le front ne monte pas avec le budget. Quatre des huit plateaux montent d'une
ligne, un descend d'une ligne, et trois ne bougent pas du tout, le tout dans une
seule ligne de gigue, et le reste demeure entièrement dans la bande basse. La
recherche n'est pas lente ; elle est arrêtée, et elle est arrêtée à la dernière
région qu'elle tente de remplir. C'est l'échec insensible au budget que la
conjecture prédit, reproduit directement.
## Ce que cela règle et ne règle pas
Cela reproduit uniquement le volet localisation de la conjecture. Les deux volets
restants sont énoncés comme conjecture et ne sont pas mesurés ici, délibérément.
Le volet **trop grande pour être résolue exactement** est propre à la machine et
au solveur : la fenêtre exacte d'environ 112 cases est une propriété d'une
recherche à arêtes strictes particulière, et un solveur exact plus puissant la
déplacerait. Notre région difficile est constituée des quatre à cinq lignes du
bas, environ 64 à 80 cases, ce qui se situe en réalité en dessous de la fenêtre
d'environ 112 cases ; c'est plus petit que les environ 96 à 128 cases que décrit
la conjecture, parce que ces plateaux générés se remplissent plus profondément
que les décompositions de l'ensemble officiel que le carnet a synthétisées.
Savoir si une région difficile dépasse un jour la fenêtre sur l'ensemble officiel
est l'affirmation distincte et non mesurée.
Le volet **trop globalement couplée** est un plafond empirique lié à la rareté de
l'ensemble officiel, le couplage qui permet à une pièce rare dépensée en haut d'
[affamer une case bien plus bas](/fr/research/why/piece-theft/). Nos plateaux
proviennent du générateur encadré du kit, à solution plantée et admettant
plausiblement de nombreuses solutions, là où le vrai casse-tête est réputé n'en
admettre essentiellement qu'une. La localisation vaut pour tout plateau soluble
sous un remplissage séquentiel, car le reste doit bien vivre quelque part et un
balayage row-major le met en bas, si bien que la famille générée est un test
adéquat de la localisation ; ce n'est pas un test de l'affirmation de couplage,
qui exigerait l'ensemble officiel. Cet écart de famille d'instances explique
pourquoi cette reproduction est qualitative plutôt qu'exacte : il n'y a pas de
tableau source à reproduire au bit près, seulement un signe et une bande, et les
deux se reproduisent.
La leçon plus large tombe là où tombent les autres murs structurels. Une
décomposition ne supprime pas la difficulté ; elle la déplace. C'est la même
forme que le [mur de rigidité](/fr/research/why/rigidity-wall/), où un record est une
île localement figée, et c'est pourquoi la
[carte des méthodes](/fr/research/why/walls-and-methods/) montre chaque famille de
décomposition s'arrêtant contre un mur à un endroit différent du plateau plutôt
que d'en échapper à un.
## À lire aussi
- [Où vivent les désaccords](https://eternity2.dev/fr/research/why/mismatch-geometry/) — Un plateau quasi parfait ne répartit pas uniformément ses rares erreurs. Il les concentre dans une seule bande de cinq rangées et laisse tout le reste impeccable. Quelle bande ? Cela dépend de la direction dans laquelle la recherche a rempli le plateau, et l'on voit le reflet sur les vrais plateaux record.
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [Le vol de pièce, là où meurent les solveurs](https://eternity2.dev/fr/research/why/piece-theft/) — Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
- [Quel mur arrête quelle méthode](https://eternity2.dev/fr/research/why/walls-and-methods/) — La section recherche a deux versants : les murs structurels qui rendent Eternity II difficile, et les algorithmes conçus pour les franchir. Cette page fait le pont : chaque méthode confrontée au mur qu'elle attaque réellement, et le score auquel ce mur l'a arrêtée.
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
---
# Où vivent les désaccords
> Un plateau quasi parfait ne répartit pas uniformément ses rares erreurs. Il les concentre dans une seule bande de cinq rangées et laisse tout le reste impeccable. Quelle bande ? Cela dépend de la direction dans laquelle la recherche a rempli le plateau, et l'on voit le reflet sur les vrais plateaux record.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/mismatch-geometry/
- Mise à jour: 2026-07-22
- Sujets: structure
- Source: Annonce du record 469 de Peter McGavin : le plateau dont cette page analyse les onze arêtes non appariées (groups.io msg 10045, septembre 2020) — https://groups.io/g/eternity2/message/10045
---
Notez un plateau record arête par arête et un fait frappant apparaît : les
désaccords ne sont pas dispersés. Le 469 de McGavin place la totalité de ses
onze arêtes non appariées dans les cinq premières rangées (rangées 0 à 4) ;
les rangées 5 à 15 sont localement parfaites.
Le plateau est, de fait, une dalle impeccable de 11 rangées avec tous les dégâts
balayés contre une seule arête.
Notez maintenant de la même manière les meilleurs plateaux construits de zéro
de ce projet. Les dégâts se retrouvent là encore dans une bande de cinq
rangées, mais en bas. Les désaccords de KEYRING et de GAUNTLET siègent dans les
rangées 11 à 15, les rangées 0 à 10 restant parfaites. C'est la même image
retournée de haut en bas.
## Le voir sur les vrais plateaux
Choisissez un plateau. La bande ombrée indique où tombent réellement ses
désaccords, calculée en direct avec la règle de notation propre au moteur : les
plateaux de la communauté en haut, ceux de ce projet en bas.
> **[Figure]** Interactif : où les désaccords sont contraints de vivre — interactive: MismatchGeometryLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Prendre du recul : la bande est une loi du corpus
Deux plateaux pourraient n'être qu'une anecdote. Agrégeons donc. Prenez tous
les plateaux à haut score que ce projet a jamais archivés, soit 1 964
plateaux à 455 arêtes appariées ou mieux (convention des arêtes appariées ;
la [page des records](/fr/research/records/) replace ces chiffres internes dans
leur contexte), et marquez chaque jointure selon sa fréquence d'échec. La
même image réapparaît sous forme de loi de fréquence. Les jointures qui
relient les rangées 11 à 14 à leurs voisines cassent dans environ 38 à
49 % de tous les plateaux. La jointure la plus fragile de tout le plateau se
trouve en rangée 12, colonne 2, brisée dans 49,4 % des cas ; les quatre
suivantes (47,5 %, 47,3 %, 46,3 %, 46,0 %) appartiennent elles aussi à la
rangée 12, et les vingt jointures les plus souvent brisées se situent toutes
dans les rangées 11 à 13. Ce sont des décomptes exacts sur le corpus
archivé, pas des échantillons.
Une mise en garde, qui est en réalité le constat lui-même : chacun de ces
1 964 plateaux est sorti du pipeline propre à ce projet, qui remplit de haut
en bas. La carte de chaleur n'est pas une propriété du puzzle ; c'est la
signature du pipeline, écrite 1 964 fois. Un remplissage descendant dépense
son budget de conflits en chemin, l'ensemble de contraintes devient trop
tendu autour de la rangée 12, et cette couture craque dans la moitié des
exécutions. Un solveur avec un autre ordre de remplissage déplacerait la
couture, ce que montrent précisément les plateaux de la communauté dans la
figure ci-dessus.
## Pourquoi cela bascule : l'ordre de balayage
Le basculement n'est pas une coïncidence ; c'est l'empreinte de la manière dont
chaque plateau a été construit. Une recherche qui remplit le plateau du bas vers
le haut dépense tôt ses placements parfaits, en bas, et se voit contrainte
d'absorber tous les conflits accumulés dans les dernières rangées qu'elle
atteint : le haut. Une recherche qui remplit du haut vers le bas fait
exactement l'inverse et entasse les dégâts en bas. Les désaccords finissent
toujours agglutinés contre l'arête sur laquelle le solveur a terminé. Même
puzzle, même type de plateau, ordre de construction opposé.
Une nuance que le récit à deux solveurs dissimule : la bascule se joue par
exécution, pas par outil. Au sein même de la production de ce projet
coexistent deux familles de plateaux quasi record à géométrie inversée. Dans
l'une (meilleur plateau à 458 arêtes appariées, un ancien meilleur score
interne ; voir la [page des records](/fr/research/records/) pour le contexte),
tous les désaccords intérieurs occupent les cinq dernières rangées de
l'intérieur et les neuf premières rangées intérieures sont parfaites. Dans
l'autre (meilleur à 457), les vingt désaccords intérieurs occupent tous les
rangées 1 à 4, les rangées 5 à 14 restant parfaites. Les meilleurs plateaux
des deux familles ne partagent que 7 placements sur 256 (2,7 %) : ce sont
des plateaux presque disjoints, pas deux arrangements d'un même cadre. Et
les deux sont localement figés ; la programmation en nombres entiers exacte,
appliquée à chaque amas de dégâts jusqu'à une trentaine de cellules,
n'améliore ni l'un ni l'autre d'une seule arête. Ce sont des familles que
nous avons échantillonnées, quelques plateaux chacune : la partition
elle-même est une observation, pas un recensement. Mais elle adoucit le
récit : l'ordre de balayage est la force dominante, et pourtant ce qui fixe
réellement la bande, c'est la trajectoire de l'exécution individuelle, le
bassin dans lequel elle est tombée. Même pipeline, bandes opposées.
## La même bande, sous un objectif différent
Le motif n'est pas un artefact de notre façon de noter. Certains solveurs
optimisent tout autre chose : non pas les arêtes appariées sur un plateau
complet, mais le plus grand nombre de pièces plaçables sans aucun conflit,
quitte à laisser des trous plutôt que des désaccords. Poursuivez cet objectif
et les trous atterrissent au même endroit. Le plateau « Only seven holes » de
Louis Verhaard place 249 des 256 pièces sans conflit, et les sept trous
siègent tous dans les rangées 1 à 4, la bande du haut encore une fois. Laurent
Zamofing, atteignant un plafond similaire en 2026 en recombinant les plateaux
record de la communauté, a relevé la même chose : « le résidu non résolu tombe
toujours dans cette bande du haut »
([msg 11901](https://groups.io/g/eternity2/message/11901)). Deux objectifs qui
ne partagent rien d'autre que le puzzle, et les dégâts résiduels se rassemblent
contre la même arête. C'est l'ordre de construction, et non la règle de
notation, qui décide où se loge la difficulté. (Davantage sur cette variante sur
la [page des variantes](/fr/research/build/variants/).)
## La forme des dégâts
Les dégâts ont une forme constante, pas seulement un lieu constant. Sur
chaque plateau quasi record que nous avons profilé, le graphe des arêtes en
désaccord est une forêt : il ne referme jamais de boucle. Et à mesure que
les plateaux s'améliorent, les dégâts se fragmentent. Les plateaux
intermédiaires, entre 444 et 447 (arêtes appariées), portent 24 à 26
désaccords répartis en cinq à dix amas, le plus grand couvrant 13 à 15
cellules. Trois plateaux à 458, trouvés indépendamment, partagent une
empreinte identique : 17 désaccords en deux amas seulement, le plus grand de
25 cellules ; très probablement un même bassin trouvé trois fois. Un plateau
à 459 se scinde en quatre petits amas, le plus grand de 10 cellules à peine.
Les meilleurs plateaux portent un résidu plus petit et plus dispersé. Cela
suggère une conjecture, et rien de plus : l'amélioration procéderait en
fragmentant les dégâts jusqu'à ce que chaque fragment soit assez petit pour
être réparé localement.
La concentration elle-même se mesure. Comprimez la densité de désaccords par
cellule avec une transformée de Fourier bidimensionnelle en ne gardant que
1 % des coefficients : des dégâts bien concentrés se reconstruisent avec une
faible erreur, des dégâts dispersés non. Sur cette échelle, un plateau à 457
en particulier est plus concentré (erreur de reconstruction 0,145) que les
trois plateaux à 458 (0,236 chacun, identiques : le même bassin, encore) et
fait quasiment jeu égal avec le 459 (0,148), tandis que les plateaux
intermédiaires se situent entre 0,32 et 0,34. Le corpus est petit (une
dizaine de plateaux), mais deux mesures structurelles indépendantes
confirment le classement, et cela suggère une hypothèse à garder en tête :
la qualité structurelle serait un axe en partie orthogonal au score brut. Un
457 peut être plus proche de la forme d'un record qu'un 458.
## Rien ne tombe sur la bordure
Répartissez les 480 jointures d'un plateau en trois classes : 60 jointures
bordure-bordure le long de l'anneau, 56 jointures où l'anneau rencontre
l'intérieur, et 364 jointures intérieur-intérieur. Comparez le 469 de
McGavin avec un plateau de ce projet monté à 444 arêtes appariées sur une
bordure équivalente : la décomposition raconte deux fois la même histoire.
Tous deux réalisent un 60 sur 60 parfait sur l'anneau et 55 sur 56 sur la
couture. La totalité de l'écart de 25 arêtes est intérieur-intérieur, 354
sur 364 contre 329 sur 364. (Deux plateaux seulement : lisez ceci comme une
illustration de la décomposition, pas comme une loi du corpus.) Les cinq
couleurs réservées au cadre forment un cycle autonome que toute recherche
compétente sature ; les dix-sept couleurs intérieures sont là où mord la
rareté.
Une sonde plus tranchante suggère que la bordure ne porte même pas
l'information. Gelez uniquement la bordure du meilleur plateau de ce projet
et laissez un remplissage glouton compléter l'intérieur : il n'atteint que
204 à 209 arêtes appariées, la même plage qu'une bordure valide aléatoire
(202 à 214). Gelez plutôt les rangées du haut et le remplissage grimpe
régulièrement : 209 sans rien geler, 258 avec quatre rangées, 334 avec huit,
364 avec dix, 406 avec douze, 424 avec treize, et le score complet avec les
seize. Une seule politique de complétion gloutonne a été utilisée ; traitez
donc cela comme une sonde, pas comme une loi. Mais sous ce remplissage,
l'identité d'un grand plateau vit dans le squelette intérieur de sa douzaine
de premières rangées, pas dans son cadre.
## La bande des dégâts est la bande de la liberté
La bande du bas n'est pas seulement là où les plateaux de ce projet cassent ;
c'est là où ils divergent entre eux. Sur 421 plateaux complets à 455 arêtes
appariées ou mieux (tous issus, là encore, d'une même famille de pipeline),
comptez combien d'arrangements distincts chaque rangée présente à travers le
corpus. Les rangées 0 à 11 affichent chacune 39 à 63 arrangements distincts,
soit environ 9 à 15 % de plateaux uniques dans cette rangée. Les rangées 12
à 15 bondissent à 131 ou 132 chacune, environ 31 % : trois fois plus de
diversité. Les rangées où vivent les désaccords sont aussi celles où les
plateaux quasi record diffèrent le plus les uns des autres.
Zoomez sur quatre plateaux distincts atteignant tous 459 arêtes appariées et
la même partition apparaît cellule par cellule. Seules 3 des 256 cellules
sont identiques sur les quatre (les deux coins supérieurs plus une cellule
de l'anneau de bordure) ; 212 cellules basculent entre exactement deux
placements ; et les 24 cellules qui diffèrent sur les quatre plateaux se
logent entièrement dans les rangées 13 à 15 (neuf, dix et cinq cellules ;
aucune dans les rangées 0 à 12). Dans les quatre plateaux de score égal que
nous avons comparés, toute la variation véritable vit dans la bande des
dégâts. Un contraste mérite une phrase : le réarrangement qui sépare l'un de
ces plateaux du 469 de McGavin s'étend sur tout l'intérieur de façon à peu
près uniforme, quatre à neuf cellules dans chaque rangée de 1 à 14. Passer
d'un plateau à un autre de même score est un remaniement de la bande du
bas ; passer à un plateau réellement meilleur exige de reconstruire partout
(la [page des cycles sigma](/fr/research/why/sigma-cycles/) rend cela précis).
Le mécanisme derrière la diversité est le même que derrière les dégâts : les
dernières rangées remplies absorbent à la fois les conflits accumulés et la
liberté accumulée. Tout ce qui est en amont est squelette ; la bande du bas
est là où les complétions distinctes à haut score bifurquent.
## Ce que cela nous apprend
C'est la forme visible de deux faits plus profonds. D'abord, les grands plateaux
sont réellement quasi complets : l'écart jusqu'à 480 est concentré, non
diffus, ce qui explique pourquoi la programmation en nombres entiers les trouve
localement figés partout, sauf dans cette unique bande (le mur de rigidité).
Ensuite, cela dit que la fin de partie est toute la partie : les rangées que
vous remplissez en dernier sont celles où le puzzle vous fait payer, si bien que
l'ordre dans lequel vous cherchez décide où atterrit la difficulté. C'est la
même leçon que la course de chemins de l'espace de jeu vous fait ressentir, ici
inscrite dans la structure de chaque plateau record.
Deux sondes rendent ces deux faits concrets. La première : un ancien
meilleur plateau de ce projet à 459 arêtes appariées montre le motif sous sa
forme la plus pure. Ses 21 désaccords siègent tous dans les rangées 12 à 15,
les 192 cellules des rangées 0 à 11 sont parfaites, et les défauts forment
une unique région connexe sur les quatre dernières rangées. Le remède
évident consiste à épingler les douze rangées parfaites et à ne rechercher
que le bas. Cette recherche meurt en quelques millisecondes, vers la
profondeur 211 : étant donné ces engagements du haut, 459 est l'optimum. (Un
seul plateau, une seule configuration de recherche ; l'épuisement, lui, est
exact.) La région parfaite n'est pas une réserve en attente. Elle est
dépensée : chaque degré de liberté en amont a été consommé pour la rendre
parfaite, ce qui explique pourquoi la bande résiduelle ne peut pas être
réparée sur place, et pourquoi améliorer ce plateau a fini par exiger des
mouvements de destruction-réparation traversant tout le plateau.
La seconde sonde est le test miroir sur le 469 de McGavin, dont les dégâts
se cachent en haut. Épinglez ses 14 rangées du haut et laissez une recherche
de destruction-réparation recompléter le bas : elle reconstruit le 469
entier. Épinglez ses 14 rangées du bas et recomplétez le haut : elle
n'atteint que 462, sans seuil net en chemin (443, 453, 454, 462 à mesure que
le bloc épinglé passe de onze à quatorze rangées). Et épingler quinze
rangées du bas fait pire (460) que quatorze, car geler davantage le plateau
supprime le jeu dont la recherche avait besoin pour absorber le haut
difficile. C'était une sonde rapide à configuration unique (une graine,
soixante secondes de réparation par point) : tenez les chiffres exacts avec
prudence ; la direction de l'asymétrie, elle, avait été prédite avant
l'exécution et confirmée par elle. La lecture : la bande où vivent les
désaccords est exactement la partie du plateau qui le définit, et le reste
s'en déduit. Pour cette famille de plateaux, l'écart au-dessus de 469 se lit
comme un problème des cinq rangées du haut (une interprétation, pas un
théorème). La bande que votre recherche garde pour la fin n'est pas
seulement là où vous payez ; c'est là que se fait le travail irremplaçable.
> **Note**
>
> Les décomptes par rangée et la bande surlignée sont calculés dans votre navigateur à partir des vraies arêtes du plateau (la même règle de notation que celle du moteur), et non placés à la main. Le constat sous-jacent et l'explication par l'ordre de balayage sont consignés dans le carnet de laboratoire du projet.
## À lire aussi
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [STAGED](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/staged/) — Construire tout le plateau depuis zéro, sans cadre pré-posé, par étapes, en laissant la bordure émerger en dernier des pièces restantes.
- [Quel mur arrête quelle méthode](https://eternity2.dev/fr/research/why/walls-and-methods/) — La section recherche a deux versants : les murs structurels qui rendent Eternity II difficile, et les algorithmes conçus pour les franchir. Cette page fait le pont : chaque méthode confrontée au mur qu'elle attaque réellement, et le score auquel ce mur l'a arrêtée.
- [Pourquoi le basin-hopping semble impossible](https://eternity2.dev/fr/research/why/sigma-cycles/) — Si l'on ne peut pas améliorer un excellent plateau en le peaufinant, peut-être peut-on sauter vers un autre excellent plateau. Sur chaque paire de records testée, c'est impossible, et la raison structurelle mérite qu'on la voie.
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
---
# Aucun coup forcé
> La manière habituelle de résoudre un casse-tête logique consiste à repérer un emplacement où une seule pièce convient, à la poser, puis à recommencer. Ce levier n'existe pas ici : chaque pièce intérieure admet entre 73 et 137 voisines possibles, et aucune n'est jamais contrainte à une seule option.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/no-forced-moves/
- Mise à jour: 2026-07-01
- Sujets: structure, search-space
- Reproduire: `just research-no-forced-moves`
- Source: Aucun coup forcé : article, source et résultats (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/no-forced-moves
---
Bar,
BarChart,
CartesianGrid,
ResponsiveContainer,
Tooltip,
XAxis,
YAxis,
} from "recharts";
Chacune des 196 pièces intérieures compte entre 73 et 137 autres pièces qui
peuvent légitimement se placer à sa droite (en dénombrant les partenaires de
droite, comme le fait le graphique ci-dessus). La pièce typique dispose de plus
d'une centaine d'options. Pas une seule pièce n'est jamais contrainte à un
unique choix.
C'est le revers des motifs interdits. Là, presque toutes les combinaisons de
pièces sont impossibles. On pourrait croire que toutes ces règles finiraient
par acculer les pièces à une position unique. Il n'en est rien : les
contraintes excluent des combinaisons sans jamais acculer une pièce
individuelle, si bien qu'un solveur ne se voit jamais offrir de coup gratuit et
forcé sur lequel bâtir.
{data.forcedPieces}
pièces contraintes à une seule option
{data.minPartners}–{data.maxPartners}
partenaires par pièce (du min au max)
{data.meanPartners}
partenaires en moyenne
## Combien de voisines chaque pièce autorise
Les 196 pièces intérieures, réparties selon le nombre de voisines de droite que
chacune accepte. La distribution tout entière se tient bien loin de un.
> **[Interactive: PartnerHistogram]** Rendered on the canonical page (link above); not shown in this markdown export.
## À l'œuvre sur un vrai casse-tête
Le moteur remplit quelques cases ; puis on dénombre, en direct, combien de
pièces conviennent légitimement à la suivante. Le compte ne tombe presque
jamais à un.
> **[Figure]** Interactif : nombre de candidats, case après case — interactive: ForcedMovesLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Pourquoi c'est important
Placez ce constat aux côtés des motifs interdits et la véritable forme de la
difficulté se dessine. Localement, le casse-tête paraît lâche : n'importe quelle
pièce s'accommode d'une foule d'autres, si bien qu'il n'y a rien à propager ni
aucune chaîne de coups forcés à exploiter. Globalement, presque toutes les
combinaisons sont illégales. La dureté loge dans cet écart : beaucoup de liberté
locale, presque aucune cohérence globale. Un solveur doit enchaîner une longue
suite de choix d'apparence libre qui ne se révèlent erronés que bien plus tard.
## À lire aussi
- [Pourquoi un ordinateur plus rapide ne change rien](https://eternity2.dev/fr/research/why/prune-vs-speed/) — L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
- [Le vol de pièce, là où meurent les solveurs](https://eternity2.dev/fr/research/why/piece-theft/) — Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
- [Calibré sur le pic de difficulté](https://eternity2.dev/fr/research/why/phase-transition/) — Eternity II utilise 22 couleurs, réparties entre 17 couleurs intérieures et 5 réservées au cadre, et ce chiffre d'environ 17 se situe près du point où ce type de casse-tête est le plus difficile à résoudre (la transition est une bande, pas un entier unique).
- [La cohérence d'arc, à partir d'AC-3](https://eternity2.dev/fr/research/build/reduce/arc-consistency/) — Le forward checking regarde un coup à l'avance ; la cohérence d'arc oblige la liste de candidats de chaque case à se défendre contre celle de chaque voisine, jusqu'à un point fixe. AC-3 de Mackworth, les raffinements optimaux qui ont suivi, ce que toute cette famille a réellement mesuré sur ce casse-tête, et où elle devient incorrecte.
---
# Le casse-tête n'a pas de fonction de hauteur
> Empruntez l'astuce du physicien qui rend les défauts cristallins solubles et tentez de transformer un joint dépareillé en dislocation dotée d'une charge conservée. Cela échoue de trois façons : une hauteur scalaire est aveugle aux ruptures, l'ensemble des ruptures forme des chaînes ouvertes et non des boucles fermées, et le courant orienté par couleur n'est pas conservé. Seul un bit de parité non signé survit.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/no-height-function/
- Mise à jour: 2026-07-23
- Sujets: structure, search-space
- Source: Vérificateur sans fonction de hauteur : article, code source Rust et tableau de résultats par plateau (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/no-height-function
---
Il existe une idée empruntée qui, si elle tenait, changerait la façon d'attaquer
ce casse-tête. Dans la physique statistique des cristaux, un pavage porte une
**fonction de hauteur** : un nombre vivant sur les faces et qui monte ou descend
d'une quantité fixe à travers chaque arête. Quand le pavage est parfait, la
hauteur est univaluée. Un défaut est un point où parcourir une petite boucle en
additionnant les pas ne vous ramène pas au point de départ ; le reste est une
charge conservée (les physiciens l'appellent un **vecteur de Burgers**), et les
défauts ne peuvent être créés ou détruits que par paires qui s'annulent. C'est ce
dernier fait qui est le trésor. C'est lui qui autorise le **mouvement de ver** :
une réécriture étalée sur le réseau mais simple dans l'espace des hauteurs, qui
fait glisser deux défauts l'un vers l'autre jusqu'à ce qu'ils s'annulent.
Notez un plateau complet d'Eternity II en comptant ses joints internes appariés
sur 480 (la convention des arêtes appariées utilisée dans tout ce wiki ; la
[page des records](/fr/research/records/) replace dans son contexte les nombres qui
suivent). Un joint dépareillé est une **rupture**. Si les ruptures étaient des
dislocations dotées d'une charge orientée conservée, il existerait un mouvement
non local et fondé qui abaisse le nombre de ruptures en faisant marcher une paire
d'entre elles l'une vers l'autre pour les annihiler, exactement le genre de
mouvement que la recherche par simple échange ne peut voir. Cette page consigne
pourquoi cet espoir ne survit pas au contact d'un vrai plateau. L'échec n'est pas
affaire de goût. Ce sont deux faits concrets mesurables sur n'importe quel
plateau, plus un troisième qui n'a besoin d'aucun plateau, et le vérificateur du
sujet de reproduction mesure les deux premiers sur les plateaux records
consignés de ce projet.
## La hauteur scalaire est aveugle dès le départ
Prenons d'abord la version la plus naïve : placez un seul nombre sur chaque case
et lisez le « pas » à travers un joint comme la différence des deux nombres de
cases. Parcourez les quatre cases autour d'un coin intérieur de la grille et
additionnez les quatre pas. Le nombre de chaque case entre dans la boucle une
fois avec un plus et une fois avec un moins, donc la somme est **zéro**,
toujours, pour toute affectation de nombres et quelles que soient les ruptures.
Une rupture vit sur un joint ; elle ne change jamais la somme de boucle d'aucun
coin. Une hauteur scalaire par case ne peut donc pas détecter une rupture du
tout. Ce n'est pas qu'elle les détecte mal ; elle y est structurellement sourde.
Cette partie est une identité en une ligne, elle est donc énoncée ici plutôt que
mesurée.
## L'ensemble des ruptures est fait de chaînes ouvertes, pas de boucles fermées
La correction du physicien consiste à cesser d'utiliser les valeurs des cases et
à placer plutôt le pas sur un joint **exactement quand ce joint est rompu**.
Alors la somme de boucle autour d'un coin de la grille compte les joints rompus
touchant ce coin, pris modulo deux. La hauteur n'est univaluée que si chaque coin
touche un nombre pair de ruptures, c'est-à-dire seulement si les ruptures forment
des boucles fermées sur la grille des coins.
Ce n'est pas le cas. Sur chaque plateau mesuré, des dizaines de coins touchent un
nombre **impair** de ruptures. Dans l'image cristalline, ces coins impairs sont
des **cœurs** de dislocation, les bouts libres de chaînes de ruptures ouvertes.
Une hauteur ne peut pas se refermer autour d'un bout libre, elle ne peut donc pas
exister globalement. Le décompte de ces cœurs est le premier nombre rapporté par
le vérificateur, et il reste grand même sur les meilleurs plateaux :
| Plateau (ce projet) | Arêtes appariées | Ruptures | Cœurs de degré impair | Couleurs à courant déséquilibré |
| --- | ---: | ---: | ---: | ---: |
| meilleur en arêtes appariées, 463 | 463 | 17 | 22 | 10 |
| un plateau 460 | 460 | 20 | 22 | 9 |
| un plateau 458 | 458 | 22 | 34 | 15 |
| un plateau 460 antérieur | 460 | 20 | 26 | 12 |
Les quatre sont des scores en arêtes appariées, revérifiés par le vérificateur
avant que la topologie ne soit mesurée ; un plateau dont la valeur revérifiée
diverge de celle consignée est refusé d'emblée, de sorte que les nombres
ci-dessus décrivent toujours un plateau de qualité connue et vérifiée. Le
meilleur d'entre eux ne se tient qu'à 17 ruptures d'une hypothétique solution et
porte encore 22 cœurs à chaînes ouvertes. L'obstruction ne s'adoucit pas à mesure
qu'un plateau approche d'une solution, et c'est là tout le propos : il n'existe
aucun plateau près du sommet où les boucles se referment tranquillement.
## Le courant orienté n'est pas conservé
Une dernière échappatoire mérite d'être écartée. Peut-être que résoudre les
ruptures couleur par couleur sauve une charge conservée. Pour une seule couleur,
orientez chaque joint à demi rompu (un joint dont exactement un côté montre cette
couleur, ce qui est nécessairement une rupture) comme une flèche pointant de la
case porteuse de la couleur vers sa voisine non appariée, et additionnez les
flèches en un vecteur par couleur sur tout le plateau. Un courant réellement
conservé sommerait à **zéro**. Ce n'est pas le cas. Sur chaque plateau, plusieurs
couleurs ont un total non nul, listé dans la dernière colonne ci-dessus : entre 9
et 15 des 22 couleurs portent un courant déséquilibré, selon le plateau.
La raison est structurelle, et elle explique pourquoi aucune ingéniosité n'y
remédie. Sur une solution réelle, chaque arête colorée est appariée à une arête
de la même couleur, il n'y a donc pas de joint à demi rompu et le courant de
chaque couleur est trivialement nul. Un joint à demi rompu est précisément une
demi-arête **non appariée**, une demi-arête dont le partenaire manque, de sorte
que sa flèche n'a rien contre quoi s'annuler. La somme déséquilibrée n'est pas
une erreur de comptabilité ; c'est la signature du partenaire manquant.
À titre d'orientation seulement, une exécution antérieure et indépendante du
carnet a mesuré les mêmes décomptes de cœurs sur trois plateaux différents (un
plateau 451, un 463 et un 458) et a obtenu **28, 22 et 32** cœurs impairs ; les
quatre plateaux présentés ici se situent à **22, 22, 34 et 26**, exactement dans
le même régime, le plateau 463 correspondant à 22 des deux côtés. Les couleurs et
signes précis qui ressortent déséquilibrés sont des étiquettes liées à la façon
dont un plateau particulier a été numéroté et n'ont aucun sens propre ; seul le
décompte des couleurs déséquilibrées, et le fait qu'il ne soit jamais nul, est le
contenu reproduit. Ce sont les propres plateaux de ce projet, bien en dessous des
meilleurs de la communauté, 470 sous la convention de l'indice central et 464
avec les cinq indices posés (là encore, la [page des records](/fr/research/records/)
conserve ce contexte) ; ils sont utilisés ici parce que l'obstruction doit être
vérifiée sur un vrai plateau à haut score de l'instance officielle, non sur un
petit plateau généré où elle serait soit vide soit hors instance.
## Ce qui survit est un unique bit
Réunissez les trois échecs. Une hauteur scalaire est sourde aux ruptures ;
l'ensemble des ruptures est fait de chaînes ouvertes aux dizaines de bouts libres
; le courant orienté par couleur ne s'équilibre pas. Toute route vers une hauteur
à vecteur de Burgers est fermée. Ce qui reste est bien plus faible qu'une hauteur
: le seul invariant conservé de l'ensemble des ruptures est une **parité par
couleur non signée**, un bit par couleur (un élément d'un espace de dimension 22
sur le corps à deux éléments). Un bit enregistre si le décompte de joints à demi
rompus d'une couleur est pair ou impair ; il n'a ni direction ni magnitude. Un
bit n'est la holonomie d'aucune fonction de hauteur, et aucun mouvement de ver ne
peut se construire dessus.
Voilà le résultat négatif, et il vaut la peine d'être énoncé clairement car
l'idée qu'il tue est réellement séduisante : l'image des dimères et défauts est
fermée du côté des ruptures, et avec elle le rêve d'un mouvement non local net
qui fait marcher les défauts jusqu'à l'annihilation. L'intuition physique qu'il
laisse debout est plus prometteuse et vit ailleurs : la bonne sortie d'un plateau
localement figé (voir le [mur de rigidité](/fr/research/why/rigidity-wall/)) est un
**mouvement d'amas corrélé**, plusieurs tuiles tournées ensemble, plutôt qu'une
édition d'un seul site. Ce récit compagnon est un résultat distinct et n'est pas
mesuré ici.
Cela épouse aussi la forme du casse-tête telle qu'on la voit sur les plateaux
eux-mêmes. Les ruptures ne se dispersent pas ; elles
[s'entassent dans une seule bande](/fr/research/why/mismatch-geometry/) et le graphe
des arêtes dépareillées est toujours une forêt, ne fermant jamais de boucle, ce
qui est le même fait de chaîne ouverte que cette page démontre impossible à
refermer. Le bit de parité survivant est un cousin de la loi de comptage derrière
[pourquoi 479 est impossible](/fr/research/why/parity-defect-floor/) : les deux sont
ce que l'on obtient quand un invariant orienté s'effondre en un invariant non
signé sur le corps à deux éléments. La direction est exactement ce que cette
instance refuse de vous donner.
## Vérifiez par vous-même
Le vérificateur charge chaque plateau consigné via l'analyseur de plateau du kit
de démarrage, le renote avec la règle canonique (et refuse tout plateau dont la
valeur renotée diverge de son score consigné), puis fait une passe linéaire pour
compter les cœurs de degré impair et les courants par couleur déséquilibrés. Il
est déterministe, n'utilise aucun aléa, s'exécute en bien moins d'une seconde sur
un seul cœur, et sa sortie est stable au bit près d'une exécution à l'autre.
L'[article, le code source Rust et le tableau de résultats sont sur GitHub](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/no-height-function),
et le bloc de reproduction de cette page pointe vers le même sujet. Deux réserves
de portée, que la trouvaille énonce clairement à son propre sujet : ceci est une
reproduction **qualitative**. Les décomptes exacts de cœurs et les sommes de
courant sont des fonctions du plateau précis, ils se lisent donc comme « dans le
même régime que », jamais comme une correspondance au bit près avec un tableau
antérieur ; et l'obstruction de la hauteur scalaire de la première section est
une identité démontrée, affirmée plutôt que recalculée.
## À lire aussi
- [Où vivent les désaccords](https://eternity2.dev/fr/research/why/mismatch-geometry/) — Un plateau quasi parfait ne répartit pas uniformément ses rares erreurs. Il les concentre dans une seule bande de cinq rangées et laisse tout le reste impeccable. Quelle bande ? Cela dépend de la direction dans laquelle la recherche a rempli le plateau, et l'on voit le reflet sur les vrais plateaux record.
- [Pourquoi le basin-hopping semble impossible](https://eternity2.dev/fr/research/why/sigma-cycles/) — Si l'on ne peut pas améliorer un excellent plateau en le peaufinant, peut-être peut-on sauter vers un autre excellent plateau. Sur chaque paire de records testée, c'est impossible, et la raison structurelle mérite qu'on la voie.
- [Pourquoi 479 est impossible](https://eternity2.dev/fr/research/why/parity-defect-floor/) — Un argument de comptage sur le jeu de pièces officiel interdit un score d'exactement 479/480 : les demi-arêtes de chaque couleur viennent en nombre pair, et un unique raccord cassé laisserait deux comptes impairs. Le plancher sous le parfait est 478, et au plus 76 quasi-solutions à un coup peuvent entourer une solution.
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
---
# Pourquoi 479 est impossible
> Un argument de comptage sur le jeu de pièces officiel interdit un score d'exactement 479/480 : les demi-arêtes de chaque couleur viennent en nombre pair, et un unique raccord cassé laisserait deux comptes impairs. Le plancher sous le parfait est 478, et au plus 76 quasi-solutions à un coup peuvent entourer une solution.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/parity-defect-floor/
- Mise à jour: 2026-07-22
- Sujets: structure, search-space
- Source: David Eddy ouvre le fil Parity : le nombre d'arêtes de chaque type est pair, et la conséquence sur la dernière pièce (msg 332, juin 2007) — https://groups.io/g/eternity2/message/332
- Source: L'exemple détaillé de Christophe Weibel d'une dernière pièce qui ne correspond pas à son trou (msg 335) — https://groups.io/g/eternity2/message/335
- Source: Le verdict de Brendan Owen sur la parité dans E2 : correcte par construction, utile seulement vers la fin d'une recherche (msg 346) — https://groups.io/g/eternity2/message/346
- Source: Plancher de défaut par parité : article, source du vérificateur et résultats du recensement (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/parity-defect-floor
---
Classez les plateaux complets par score, en comptant les raccords internes
appariés sur 480 (la convention arêtes-appariées utilisée partout dans ce
wiki), et l'échelle semble continue : barreau après barreau, chacun occupé
par un plateau que quelqu'un a construit. Elle a exactement un trou. Aucun
placement complet légal des 256 pièces ne marque 479. C'est un théorème sur
le jeu de pièces publié, démontrable par simple comptage, et cette page
déroule l'argument entier : la parité qui l'impose, le plancher de défaut de
2 qui en découle, et le recensement qui borne le nombre de quasi-solutions à
un coup autour de toute solution. C'est aussi une entrée de
[la moisson de théorèmes](/fr/research/why/theorem-sweep/), le tour d'horizon de
ce qui se démontre à partir du sac avant toute recherche.
## Compter les demi-arêtes
256 tuiles à quatre bords portent 1024 demi-arêtes. Le gris du cadre en
occupe 64, exactement le nombre d'emplacements tournés vers l'extérieur sur
le pourtour (16 par côté). Les 960 restantes portent les 22 couleurs, et le
recensement est remarquablement pair :
| Groupe de couleurs | Demi-arêtes |
| --------------------------------------- | ----------: |
| Bord gris du cadre | 64 |
| Cinq couleurs de jonction du cadre (1 à 5) | 24 chacune |
| Cinq couleurs intérieures (6 à 10) | 48 chacune |
| Douze couleurs intérieures (11 à 22) | 50 chacune |
Chaque compte coloré est pair. Le total coloré, 960, vaut exactement deux
fois le nombre de raccords internes ($2 \times 16 \times 15 = 480$) : dans
un placement complet à cadre légal, où les 64 demi-arêtes grises regardent
vers l'extérieur, les demi-arêtes colorées remplissent exactement les 960
places des raccords internes, sans reste. Rien de tout cela ne dépend de la
position des pièces. Ce sont des propriétés du sac.
Un raccourci plaisant se cache ici : la parité aurait pu être prédite sans
examiner une seule pièce. Les concepteurs garantissent qu'une solution
existe, et un plateau résolu apparie chaque demi-arête colorée avec une
partenaire de même couleur, donc le compte de chaque couleur vaut deux fois
son nombre de raccords, pair par définition. Le recensement ne fait que
confirmer sur le jeu réel ce que la solvabilité promettait déjà.
## L'argument, en quatre lignes
Fixez un placement complet à cadre légal (chaque bord tourné vers
l'extérieur est gris) et fixez une couleur $c$. Chacun des 480 raccords
internes montre deux demi-arêtes. Certains raccords montrent $c$ des deux
côtés, d'autres d'un seul. En comptant les demi-arêtes de $c$ :
$$h(c) = 2 \cdot \#\{\text{raccords montrant } c \text{ deux fois}\} + \#\{\text{raccords montrant } c \text{ une fois}\}.$$
Puisque $h(c)$ est pair, le nombre de raccords montrant $c$ exactement une
fois est pair aussi. Cela vaut pour toutes les couleurs à la fois, dans tout
placement complet, résolu ou cassé.
Supposons maintenant un placement à 479. Il a exactement un raccord cassé,
et un raccord cassé montre deux couleurs différentes, disons $a$ et $b$ (si
les deux côtés s'accordaient, ce serait un appariement ; le gris est exclu,
puisque ses 64 demi-arêtes regardent vers l'extérieur). Tout autre raccord
est apparié et montre sa couleur deux fois. Donc exactement un raccord
montre $a$ exactement une fois. Un est impair. Cela contredit la parité de
$h(a)$, et le placement ne peut pas exister.
## Le plancher sous le parfait est 478
Notons le défaut d'un plateau comme $480$ moins son score. La parité
interdit le défaut 1 et n'interdit rien d'autre : au défaut 2, les comptes
impairs peuvent s'absorber par paires, et l'argument se tait. Tout placement
complet légal est donc soit une solution, soit rate au moins deux raccords.
Un dernier fait recensé ferme l'échappatoire restante : aucune tuile
d'Eternity II n'est fixée par une rotation (0 sur 256), donc un plateau ne
peut pas marquer 480 en différant d'une solution seulement par une tuile
tournée sur place. Score 480 veut dire solution. Tout le reste veut dire 478
ou moins.
Pour les classements d'aujourd'hui, le barreau manquant est académique : les
meilleurs plateaux complets de la communauté sont à 470 sous la convention
indice-central-seul et à 464 avec les cinq indices posés
([la page des records](/fr/research/records/) tient l'échelle complète). Mais il
change ce que « presque résolu » peut jamais vouloir dire. Il n'y a pas de
479 par où passer en route vers 480. Le dernier pas de l'ascension va de 478
à 480, deux raccords d'un coup, et toute méthode qui améliore les plateaux
un raccord à la fois est structurellement incapable de le franchir.
## La coquille des 478 est clairsemée
Une solution existe ; le casse-tête a été construit à partir d'elle.
Qu'est-ce qui se trouve juste à côté, à 478 ? Un plateau à un coup d'une
solution doit venir d'un coup qui casse exactement deux raccords, et seules
deux sortes de coups uniques peuvent le faire. Les deux se comptent dans le
sac :
- **Échanges de jumelles.** Deux tuiles intérieures qui s'accordent, dans
certaines orientations, sur trois de leurs quatre bords. Placées de sorte
que les bords communs s'alignent, les échanger ne dérange qu'un bord de
chacune : deux raccords. Le jeu contient exactement **50** telles paires
quasi-jumelles.
- **Rotations sur place.** Une tuile dont les couleurs répétées permettent à
un demi-tour ou à un quart de tour de garder deux de ses quatre couleurs
de bord en position, si bien que la tourner là où elle est casse
exactement les deux autres raccords. Le jeu contient **23** tuiles à
demi-tour et **3** tuiles à quart de tour de ce type.
En les additionnant, toute solution a au plus $50 + 23 + 3 = 76$ voisins de
défaut 2 atteignables par un seul échange ou une seule rotation. C'est une
borne supérieure tirée du sac : qu'une paire de jumelles donnée s'aligne
vraiment dans une solution précise dépend de cette solution, si bien que le
compte réalisé pour la solution des concepteurs reste ouvert. Le plafond
tient malgré tout. Autour du sommet de l'échelle, les quasi-solutions sont
clairsemées, quelques dizaines de plateaux au plus, alors que les barreaux
plus bas sont peuplés astronomiquement. C'est la même rareté que
[les motifs interdits](/fr/research/why/forbidden-patterns/) montrent à
l'échelle 2×2, lue au sommet.
## Le cadre paie sa facture d'avance
Le recensement a une seconde histoire à raconter. Les couleurs 1 à 5
n'apparaissent sur aucune tuile intérieure ; leurs $5 \times 24 = 120$
demi-arêtes vivent entièrement sur les bords latéraux des 60 tuiles du
pourtour. L'anneau du pourtour a exactement 60 raccords, donc dans toute
solution les cinq couleurs de jonction du cadre les saturent exactement, 12
raccords par couleur, sans aucun jeu. Et comme l'orientation d'une tuile du
pourtour est forcée (gris vers l'extérieur), chacune des 56 tuiles de bord
montre une couleur fixe vers l'intérieur où qu'elle atterrisse. Sommé sur le
sac, l'intérieur reçoit un vecteur de demande fixe sur les couleurs 6 à 22,
à savoir (4, 5, 3, 3, 1, 1, 2, 3, 4, 6, 4, 2, 3, 6, 4, 3, 2), 56 bords
tournés vers l'intérieur en tout. Quel que soit le cadre construit, la
facture de frontière de l'intérieur reste ces mêmes 17 nombres, connus avant
toute recherche.
## Ce que la communauté a vu en juin 2007
La parité a été repérée avant même la sortie du casse-tête. En juin 2007,
David Eddy ouvre un fil de la liste de diffusion intitulé Parity avec
l'observation que « le nombre d'arêtes de chaque type est pair », et en tire
la conséquence sur la dernière pièce : si la pièce finale a quatre bords
différents, le trou final doit montrer les mêmes quatre couleurs dans un
certain ordre, ce qu'il évalue à une chance sur 6 de correspondre
([msg 332](https://groups.io/g/eternity2/message/332)). Christophe Weibel
fournit l'exemple détaillé montrant que la dernière pièce peut réellement ne
pas correspondre à son trou
([msg 335](https://groups.io/g/eternity2/message/335)), et Brendan Owen, qui
avait étudié la conception, clôt le fil avec le verdict pratique : la parité
est correcte pour E2 par construction, et dans une recherche elle n'aide
jamais que tout près de la fin
([msg 346](https://groups.io/g/eternity2/message/346)).
Tout cela est vrai, et le fil s'est arrêté là. Poussée un pas plus loin, la
même observation contient le théorème ci-dessus : la parité fait plus que
rendre la dernière pièce aléatoire, elle supprime le barreau 479 purement et
simplement, fixe le plancher de défaut à 2, et plafonne à 76 la coquille à
un coup autour de chaque solution.
## Vérifiez-le vous-même
Chaque nombre de cette page se réduit à un recensement en une passe du jeu
officiel : les comptes de demi-arêtes et leur parité, l'identité
d'ajustement exact 960, le zéro tuile symétrique par rotation, la partition
4/56/196 en coins/bords/intérieur, les générateurs de défaut 2 en 50/23/3,
la saturation du cadre et le vecteur de demande vers l'intérieur. Le
vérificateur recalcule chaque valeur à côté de sa valeur attendue et émet un
drapeau de réussite par affirmation ; les 16 vérifications passent et la
sortie est identique à l'octet près d'une exécution à l'autre.
[L'article, la source du vérificateur et les résultats sont sur GitHub](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/parity-defect-floor),
et le bloc de reproduction de cette page pointe vers le même sujet. Une
réserve de périmètre : l'argument de parité couvre les placements complets
des 256 pièces avec un cadre gris légal. Les plateaux partiels, et ceux qui
violent la règle du cadre, sont hors de sa portée.
## À lire aussi
- [La moisson de théorèmes : treize lois de structure](https://eternity2.dev/fr/research/why/theorem-sweep/) — Un seul arc de recherche, treize familles de théorèmes structurels : pureté de l'anneau, le plancher de parité à 479, le mur des 470 comme frontière de phase, les invariants de flux, la loi d'aire entropique, et les résultats d'impossibilité qui chiffrent chaque raccourci classique. Cette page est la carte.
- [Motifs interdits](https://eternity2.dev/fr/research/why/forbidden-patterns/) — Presque tout petit assemblage de pièces que l'on pourrait construire est impossible. Pour un carré 2×2, 99,72 % des façons de placer quatre pièces ne pourront jamais s'accorder.
- [Conçu pour être insoluble : la recette](https://eternity2.dev/fr/research/why/design-recipe/) — Eternity II applique une recette pour obtenir le casse-tête à raccords de bords le plus difficile possible : forme compacte, aucune pièce symétrique ni dupliquée, palettes cloisonnées, fréquences plates, une seule solution attendue. La communauté a rétro-conçu chaque ingrédient dès l'année du lancement.
- [Où vivent les désaccords](https://eternity2.dev/fr/research/why/mismatch-geometry/) — Un plateau quasi parfait ne répartit pas uniformément ses rares erreurs. Il les concentre dans une seule bande de cinq rangées et laisse tout le reste impeccable. Quelle bande ? Cela dépend de la direction dans laquelle la recherche a rempli le plateau, et l'on voit le reflet sur les vrais plateaux record.
---
# Le plateau comme mot de code
> Lisez un plateau complet comme un mot de code dont les 480 jointures intérieures sont des contrôles de type parité, et le score d'arêtes appariées devient 480 moins le nombre de contrôles en échec. C'est une lentille nette reposant sur une seule identité porteuse, et il vaut la peine d'être précis sur ce que la vue par codes correcteurs apporte et sur ce qu'elle ne fait que renommer.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/permutation-code-wall/
- Mise à jour: 2026-07-22
- Sujets: structure
- Reproduire: `cd research/topics/permutation-code-wall/compute && cargo run --release > ../results/permutation_code_wall.json`
- Source: Le jeu de pièces d'Eternity II et le visualiseur interactif de plateau (bucas.name) — https://e2.bucas.name/
- Source: La lentille plateau-comme-mot-de-code : article, code du vérificateur et résultats JSON (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/permutation-code-wall
---
Il existe une manière de regarder un plateau achevé qui emprunte tout son
vocabulaire aux codes correcteurs d'erreurs, et elle est réellement éclairante
dès qu'on sait exactement ce qu'elle affirme. Étalez la grille 16 sur 16,
traitez chaque tuile comme un symbole, et traitez chaque endroit où deux tuiles
voisines se rencontrent comme un *contrôle* qui réussit (les deux arêtes en
regard sont de la même couleur) ou échoue. Il y a 480 de ces jointures
intérieures. La liste des contrôles qui échouent est un *syndrome*, et une
solution complète est le seul plateau dont le syndrome est vide. Notez un
plateau selon la [convention d'arêtes appariées](/fr/research/records/) employée
partout dans ce wiki (comptez les jointures intérieures qui s'apparient, sur
480), et l'arithmétique vient d'elle-même : le score vaut 480 moins le nombre de
contrôles en échec.
Cette seule ligne, score égale 480 moins le poids du syndrome, est tout le
moteur de la lentille par codes. Tout le reste de ce qu'elle dit du casse-tête
(distance minimale, décodeurs, ensembles bloquants) est bâti dessus. Il vaut
donc la peine de bien cerner ce qu'est réellement cette identité, et de séparer
la part de ce tableau qui est un fait réel et dénombrable sur le jeu officiel de
la part qui n'est qu'un changement d'habit.
## Ce que la lentille renomme, et ce qu'elle mesure
Le partage franc, énoncé clairement parce que c'est là tout l'enjeu.
L'identité elle-même renomme plutôt qu'elle ne révèle. Le « poids du syndrome »
est le décompte des arêtes intérieures non appariées ; le scoreur appelle déjà
ce décompte *ruptures* et le définit déjà comme le score maximal moins le score
atteint. Donc « score égale 480 moins le poids du syndrome » n'est pas une
découverte sur Eternity II. C'est la définition du score écrite en langage de
codes. Ce n'est pas un reproche : un bon renommage peut rendre une structure
lisible. Cela signifie simplement que l'identité vous offre un point de vue, pas
un nombre.
Sous le vocabulaire, en revanche, se trouvent trois faits qui sont de vraies
propriétés du design publié à 256 pièces, chacun exactement dénombrable, chacun
vérifiable face à l'instance officielle :
- **480 contrôles.** Une grille 16 sur 16 possède exactement 480 jointures
intérieures. C'est $2WH - W - H$ avec $W = H = 16$, c'est la longueur de la
liste d'adjacences du scoreur lui-même, et c'est le score maximal du kit.
Trois chemins indépendants vers le même 480.
- **Un code de permutation.** Les 256 tuiles sont toutes distinctes à rotation
près, si bien qu'un plateau légal emploie chacune des 256 pièces exactement
une fois. En langage de codes, le mot de code n'est pas une chaîne libre de
symboles ; c'est une permutation, et cette contrainte est bien plus forte que
les seuls contrôles de jointure.
- **Un code de bordure.** Exactement cinq couleurs (étiquetées 1 à 5)
n'apparaissent que sur le cadre, jamais sur une tuile intérieure, et la
couleur de cadre grise repose sur zéro demi-arête intérieure. Le rebord est un
petit code séparé empilé sur les jointures.
Voilà ce qui donne à la lentille quelque chose de concret sur quoi s'appuyer. Le
[théorème de parité](/fr/research/why/parity-defect-floor/), lu dans ce langage, est
un énoncé selon lequel ce code n'a pas de syndrome de poids un : on ne peut pas
faire échouer exactement un contrôle sur un plateau complet légal, si bien que
479 est un barreau vide et que le plancher de défaut est 2. La
[loi d'aire](/fr/research/why/entropy-area-law/) et le
[vol de pièce](/fr/research/why/piece-theft/) sont, dans ce langage, des énoncés sur
le code de permutation : c'est la règle « chaque pièce une seule fois », et non
l'appariement des couleurs, qui porte la difficulté.
## L'identité, vérifiée bit à bit
Comme l'identité est porteuse, la reproduction la confirme directement au
travers du scoreur canonique du kit, le même scoreur excluant le rebord que le
site et chaque moteur utilisent, si bien qu'un contrôle en échec ici signifie la
même chose qu'une rupture partout ailleurs sur ce wiki.
Le contrôle part d'une vraie solution : un plateau 16 sur 16 généré et résolu
qui marque 480 sur 480 avec un syndrome vide. Il injecte ensuite un nombre
exactement connu de contrôles rompus en corrompant une demi-arête en regard à la
fois vers une couleur qu'aucune pièce ne porte, n'acceptant une corruption que
lorsqu'elle fait baisser le score d'exactement un. Ce garde-fou pas à pas est ce
qui fait du compte injecté une quantité connue plutôt qu'inférée : $k$ ruptures
signifie exactement $k$ contrôles en échec, chacun vérifié à part. Il relit
ensuite le score, le nombre de ruptures et un recomptage indépendant du
syndrome, et confirme que les trois concordent.
Exécuté sur cinq plateaux résolus et huit nombres de ruptures (quarante lignes
en tout, sur la convention d'arêtes appariées, sur 480), chaque ligne obéit à
l'identité :
| Ruptures injectées $k$ | Score | Ruptures | Recomptage indépendant du syndrome | 480 moins $k$ |
| ---------------------: | ----: | -------: | ---------------------------------: | ------------: |
| 0 | 480 | 0 | 0 | 480 |
| 1 | 479 | 1 | 1 | 479 |
| 2 | 478 | 2 | 2 | 478 |
| 5 | 475 | 5 | 5 | 475 |
| 10 | 470 | 10 | 10 | 470 |
| 29 | 451 | 29 | 29 | 451 |
| 60 | 420 | 60 | 60 | 420 |
| 120 | 360 | 120 | 120 | 360 |
Chaque ligne satisfait score égale 480 moins $k$, ruptures égale $k$, et le
recomptage indépendant du syndrome égale $k$, sur les cinq graines. L'exécution
est déterministe et se termine en moins d'une seconde sur puce Apple Silicon ; le
JSON de résultats archivé est stable octet pour octet à la réexécution. La ligne
à $k$ égale 29 est là exprès : elle affiche le score 451, qui est exactement le
couple score-et-ruptures que porte le plateau champion à bande inférieure conçu
de zéro par le papier (29 ruptures, 451 arêtes appariées). L'identité 480 moins
29 égale 451 tient face au couple score-et-ruptures que le papier rapporte pour
ce plateau champion. (Ce 451 est un chiffre
de carnet obtenu de zéro, bien en dessous des meilleurs plateaux complets de la
communauté, à 470 et 464, sur la [page des records](/fr/research/records/) ; l'enjeu
ici est seulement que l'arithmétique de codes tombe dessus.)
## Les faits structurels, sur l'instance officielle
| Fait | Attendu | Mesuré |
| --- | --- | --- |
| Nombre de contrôles | 480 | 480 de trois façons : formule $2WH - W - H$, liste d'adjacences énumérée, score maximal du kit |
| Code de permutation | 256 tuiles, chacune une fois | 256 pièces, toutes distinctes à rotation près |
| Code de bordure, couleurs de cadre | cinq, confinées au rebord | 5 couleurs de cadre (1 à 5), 17 couleurs intérieures |
| Code de bordure, gris | rebord extérieur seul | 0 demi-arête grise sur une pièce intérieure quelconque |
Les quatre sont recalculés à partir des données de l'instance plutôt que
supposés, et les quatre concordent.
## Ce que la vue par codes correcteurs apporte et n'apporte pas
Ce qu'elle apporte, c'est un modèle mental net et un endroit où loger les deux
contraintes dures. Les contrôles de jointure forment à eux seuls un code faible :
localement, un plateau presque parfait a quantité de motifs de couleurs à faible
désaccord à proximité, d'où le fait que les
[désaccords se regroupent](/fr/research/why/mismatch-geometry/) en une seule bande
plutôt qu'ils ne s'étalent. La force réside dans le code de permutation superposé
par-dessus, l'exigence que les symboles soient un vrai réarrangement de la
totalité des 256 pièces. Nommer cette couche, et la séparer des contrôles de
couleur, est une manière utile de dire où se situe la difficulté : non pas dans
l'appariement des couleurs, mais dans leur appariement alors que chaque pièce est
dépensée exactement une fois.
Ce qu'elle n'apporte pas, c'est un nombre nouveau. L'identité centrale est la
propre définition du score dans un autre alphabet, et le vocabulaire des
décodeurs et de la distance minimale décrit le même paysage que les pages
[rigidité](/fr/research/why/rigidity-wall/) et
[loi d'aire](/fr/research/why/entropy-area-law/) mesurent directement, sans ajouter
de mesure à elle. L'affirmation plus forte qu'une lecture par codes voudrait
faire, à savoir que la distance minimale du code de permutation est ce qui fixe
en place un plateau record précis, est une mesure propre à un plateau qui vit sur
un unique plateau champion privé que le kit public ne fournit pas, si bien
qu'elle n'est ici ni confirmée ni infirmée. Ce qui se reproduit exactement, c'est
l'échafaudage : 480 contrôles, un code de permutation à 256 pièces, un code de
bordure à cinq couleurs, et l'unique identité qui soutient tout le tableau.
## À lire aussi
- [Pourquoi 479 est impossible](https://eternity2.dev/fr/research/why/parity-defect-floor/) — Un argument de comptage sur le jeu de pièces officiel interdit un score d'exactement 479/480 : les demi-arêtes de chaque couleur viennent en nombre pair, et un unique raccord cassé laisserait deux comptes impairs. Le plancher sous le parfait est 478, et au plus 76 quasi-solutions à un coup peuvent entourer une solution.
- [Où vivent les désaccords](https://eternity2.dev/fr/research/why/mismatch-geometry/) — Un plateau quasi parfait ne répartit pas uniformément ses rares erreurs. Il les concentre dans une seule bande de cinq rangées et laisse tout le reste impeccable. Quelle bande ? Cela dépend de la direction dans laquelle la recherche a rempli le plateau, et l'on voit le reflet sur les vrais plateaux record.
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [L'entropie et la loi d'aire](https://eternity2.dev/fr/research/why/entropy-area-law/) — Eternity II a deux règles : les bords doivent coïncider, et chaque pièce ne sert qu'une fois. La première est généreuse. Toute la difficulté tient dans la seconde.
- [Le vol de pièce, là où meurent les solveurs](https://eternity2.dev/fr/research/why/piece-theft/) — Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
---
# Calibré sur le pic de difficulté
> Eternity II utilise 22 couleurs, réparties entre 17 couleurs intérieures et 5 réservées au cadre, et ce chiffre d'environ 17 se situe près du point où ce type de casse-tête est le plus difficile à résoudre (la transition est une bande, pas un entier unique).
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/phase-transition/
- Mise à jour: 2026-07-02
- Sujets: structure
- Reproduire: `just research-phase-transition`
- Source: Brendan Owen, Concevoir le casse-tête le plus difficile : la dérivation 17+5 (liste de diffusion eternity2, août 2007) — https://groups.io/g/eternity2/message/1947
- Source: Ansótegui, Béjar, Fernández & Mateu, On the hardness of solving edge matching puzzles as SAT or CSP problems (Constraints, Springer 2013) — https://link.springer.com/article/10.1007/s10601-012-9128-9
- Source: Ansótegui, Béjar, Fernández & Mateu, How Hard is a Commercial Puzzle: the Eternity II Challenge — https://repositori.udl.cat/server/api/core/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/content
---
Les problèmes de recherche difficiles possèdent un bouton de réglage de la
difficulté. Desserrez-le et les solutions se multiplient : une recherche en
trouve une presque aussitôt. Serrez-le et il n'en existe plus, ce qui est
souvent facile à prouver. Entre les deux se trouve une bande étroite où les
solutions sont rares mais bien réelles, et c'est là que la recherche explose.
On parle de transition de phase, comme l'eau qui gèle.
Pour les casse-tête à appariement de bords, ce bouton est le nombre de
couleurs. Trop peu et les pièces s'emboîtent d'innombrables façons ; trop et
elles ne s'ajustent presque plus. L'
[analyse publiée](https://link.springer.com/article/10.1007/s10601-012-9128-9)
situe le pic autour de 17 couleurs intérieures, le réglage pour lequel un
casse-tête de cette taille possède environ une seule solution. Eternity II en
utilise 17.
La communauté disposait de ce chiffre quelques semaines après le lancement :
en août 2007, Brendan Owen a dérivé $I = (196! \cdot 4^{196})^{1/392} \approx 17.14$
couleurs intérieures à partir du critère « environ une solution attendue »,
exactement les paramètres publiés, des années avant les analyses académiques
([Concevoir le casse-tête le plus difficile, msg 1947](https://groups.io/g/eternity2/message/1947)).
Nous l'avons mesuré ici. Le critère d'Owen n'a jamais été énoncé que pour le
plateau complet ; nous l'avons donc passé à une seconde taille pour voir s'il
tient. La même formule prédit $(36! \cdot 4^{36})^{1/72} \approx 7.56$ couleurs
intérieures pour un plateau 8x8, et un 8x8 est assez petit pour qu'un
backtracker ordinaire résolve réellement des instances aléatoires : sa courbe de
difficulté se balaie directement. En mesurant l'effort du solveur en fonction du
nombre de couleurs intérieures sur des plateaux 8x8 générés (le générateur et le
DFS du site), la bande dure, là où la recherche cesse de trouver une solution
dans le budget imparti, tombe exactement où le critère à la taille 8 le prédit.
Le balayage 16x16 complet forme l'autre moitié du tableau : un backtracker
ordinaire ne le termine à aucun nombre de couleurs, et la profondeur qu'il
atteint décroît régulièrement à mesure que les couleurs augmentent, si bien que
le vrai plateau se situe au-delà du point où la courbe est déjà devenue
verticale. L'[expérience hardness-peak](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/hardness-peak)
contient le code, les deux balayages et le critère recalculé dans le dépôt (il
reproduit le 17,14 d'Owen à la taille 16).
## Le mur de la difficulté
> **[Figure]** Interactif : le pic de difficulté selon le nombre de couleurs — interactive: PhaseTransitionLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Ou mesurez-le vous-même
Le graphique ci-dessus est précalculé. Celui-ci ne l'est pas : le moteur
résout en direct des casse-tête inédits, un par nombre de couleurs, et trace le
pic à partir de véritables exécutions dans votre navigateur.
> **[Figure]** Interactif : résoudre en direct de part et d'autre du pic de difficulté — interactive: PhaseTransitionLiveLab. Rendered on the canonical page (link above); not shown in this markdown export.
## La transition, mesurée sur de vraies pièces
L'argument fondé sur le nombre de couleurs indique *où* se trouve le pic. En
mars 2008, Brendan Owen est allé observer une transition de phase directement,
sur les pièces réelles. Il a pris un mince rectangle intérieur de 2 par L et l'a
pavé avec des ensembles aléatoires de pièces intérieures d'E2 - quatre cents
ensembles aléatoires pour chaque longueur - en notant combien pouvaient être
complétés sans aucun désaccord
([msg 4909](https://groups.io/g/eternity2/message/4909)).
> **[Interactive: RectangleTransitionChart]** Rendered on the canonical page (link above); not shown in this markdown export.
La forme obtenue est la transition de phase en miniature. Une bande de 2 par 1
ou 2 par 2 est si courte que des pièces aléatoires s'y ajustent souvent : 58 %
de cas résolubles à la longueur 1. Puis tout s'effondre. De la longueur 4 à la
longueur 15, pas un seul ensemble aléatoire sur quatre cents ne pave le
rectangle, quelle que soit la longueur : les solutions sont si rares qu'elles
n'existent pratiquement pas. Et elles reviennent ensuite. À la longueur 16, un
ensemble sur quatre cents fonctionne ; à 19, on atteint 8,5 % ; à 21, 57 % ; et
à 22, près de neuf sur dix. La région où les solutions sont extrêmement rares
sans être encore impossibles est précisément la bande difficile, et ici ce
n'est ni un récit ni un modèle : c'est un décompte. C'est aussi pourquoi un
intérieur large de 14 cases est si redoutable : il se situe dans la partie
raide de cette montée, là où une solution existe mais où presque aucun
arrangement aléatoire n'en est une.
## La répartition, lue directement sur les pièces
Trier les couleurs de l'ensemble officiel selon l'endroit où elles apparaissent
révèle clairement l'intention de conception.
5 couleurs réservées au cadre
{data.frameOnlyColors.map((c) => (
> **[Interactive: MotifSwatch]** Rendered on the canonical page (link above); not shown in this markdown export.
'{colorToLetter(c)}'
))}
Elles n'apparaissent que sur les pièces de bord et de coin, jamais à
l'intérieur. Ce sont les couleurs rares, cantonnées au pourtour.
17 couleurs intérieures
{data.interiorColors.map((c) => (
> **[Interactive: MotifSwatch]** Rendered on the canonical page (link above); not shown in this markdown export.
'{colorToLetter(c)}'
))}
La palette de l'intérieur du plateau, là où se joue la quasi-totalité des
appariements.
## L'ensemble en chiffres
| | Nombre |
| ---------------------- | -----: |
| Pièces de coin | 4 |
| Pièces de bord | 56 |
| Pièces intérieures | 196 |
| Couleurs intérieures | 17 |
| Couleurs du cadre | 5 |
## Pourquoi c'est important
C'est le signe le plus net qu'Eternity II a été rendu difficile
délibérément. La taille du plateau, le nombre de pièces et la répartition des
couleurs visent tous la même cible : un casse-tête à environ une seule
solution, placé à l'endroit le plus défavorable qui soit pour n'importe quelle
recherche. La difficulté a été choisie, comme un bon examen n'est ni trivial ni
impossible.
Comment savons-nous que ce pic est réel et non un simple récit ? Deux voies se
rejoignent ici. L'analyse publiée le
[dérive](https://repositori.udl.cat/server/api/core/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/content) :
pour les casse-tête à appariement de bords avec cadre, le nombre de couleurs
pour lequel on attendrait environ une solution tombe près de 17, et c'est le
réglage le plus difficile à explorer. Et vous pouvez en observer une part
vous-même dans la démonstration ci-dessus : construisez de vrais casse-tête,
comptez le travail effectué, et voyez-le exploser lorsque les couleurs se font
rares. La conséquence est concrète. Elle signifie que l'écart jusqu'à une
solution n'est pas un problème de réglage que l'on peut réduire à force d'une
machine plus rapide ; le casse-tête a été placé là où la recherche est la pire,
volontairement, de sorte que le vaincre exige une idée réellement meilleure, et
non simplement plus d'efforts.
Voyez la difficulté mesurée en direct sur la [page Algorithmes](/algorithms/).
## À lire aussi
- [Conçu pour être insoluble : la recette](https://eternity2.dev/fr/research/why/design-recipe/) — Eternity II applique une recette pour obtenir le casse-tête à raccords de bords le plus difficile possible : forme compacte, aucune pièce symétrique ni dupliquée, palettes cloisonnées, fréquences plates, une seule solution attendue. La communauté a rétro-conçu chaque ingrédient dès l'année du lancement.
- [Pourquoi un ordinateur plus rapide ne change rien](https://eternity2.dev/fr/research/why/prune-vs-speed/) — L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
- [L'entropie et la loi d'aire](https://eternity2.dev/fr/research/why/entropy-area-law/) — Eternity II a deux règles : les bords doivent coïncider, et chaque pièce ne sert qu'une fois. La première est généreuse. Toute la difficulté tient dans la seconde.
- [Aucun coup forcé](https://eternity2.dev/fr/research/why/no-forced-moves/) — La manière habituelle de résoudre un casse-tête logique consiste à repérer un emplacement où une seule pièce convient, à la poser, puis à recommencer. Ce levier n'existe pas ici : chaque pièce intérieure admet entre 73 et 137 voisines possibles, et aucune n'est jamais contrainte à une seule option.
---
# Le vol de pièce, là où meurent les solveurs
> Un solveur remplit quelques rangées sans effort, puis se heurte à un mur au milieu du plateau. Voici le mécanisme : une pièce rare dépensée au mauvais endroit, plusieurs rangées plus tôt.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/piece-theft/
- Mise à jour: 2026-07-01
- Sujets: structure, search-space
- Reproduire: `just research-piece-theft`
- Source: Régin 1994, « A Filtering Algorithm for Constraints of Difference in CSPs » (AAAI-94) : l'argument all-different/ensemble de Hall que le décompte de demandes rares de cette page motive — https://cdn.aaai.org/AAAI/1994/AAAI94-055.pdf
---
Bar,
BarChart,
CartesianGrid,
ResponsiveContainer,
Tooltip,
XAxis,
YAxis,
} from "recharts";
Remplissez le plateau du coin haut-gauche vers le coin bas-droite, et chaque
nouvelle case connaît déjà deux de ses couleurs : la couleur nord vient de la
pièce du dessus, la couleur ouest de la pièce à gauche. La case réclame une
pièce inutilisée capable d'afficher exactement cette paire. Ces demandes sont
rares, avec seulement trois pièces possibles en moyenne, et 47 d'entre elles
n'en ont qu'une seule.
Ainsi, un plateau qui paraît en bonne santé, avec la plupart des pièces encore
dans la boîte, peut déjà être condamné. Quelque part plus haut sur le plateau,
l'unique pièce qui aurait pu servir une case à venir a été employée à autre
chose. Lorsque le solveur atteint enfin cette case, il n'a plus rien à poser.
## Comment une case meurt
> **[Interactive: PieceTheftDiagram]** Rendered on the canonical page (link above); not shown in this markdown export.
## Combien de pièces peuvent satisfaire une demande
{data.uniqueServerDemands}
demandes satisfaites par une seule pièce
{data.meanServers}
pièces par demande, en moyenne
{data.occurringDemands}
demandes distinctes rencontrées
> **[Figure]** interactive: ServersChart. Rendered on the canonical page (link above); not shown in this markdown export.
## Affamez une case vous-même
Le moteur remplit un plateau jusqu'à une case n'ayant qu'un seul fournisseur
légal ; volez cette pièce et regardez la case mourir alors que la boîte est
encore pleine.
> **[Figure]** Interactif : là où les solveurs meurent du vol de pièce — interactive: PieceTheftLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Pourquoi c'est important
Un correctif tentant serait une vérification globale : les pièces restantes
couvrent-elles encore les cases restantes ? Cela n'aide en rien. Globalement,
l'offre est suffisante ; l'échec tient à une seule pièce rare mal affectée, non
à une pénurie. Un contrôle global en avant ne voit donc rien d'anormal, jusqu'au
moment où la case se révèle sans fournisseur, ce qui explique pourquoi un
contrôle global naïf passe à côté.
Mettez cela en regard de l'[absence de coups forcés](/fr/research/why/no-forced-moves/)
et le piège est complet. Chaque pièce dispose de dizaines d'emplacements
possibles, si bien que le solveur ne sait jamais où une pièce rare doit être
réservée, alors même que chaque pièce rare a exactement une demande pour laquelle
elle doit être préservée. Liberté de poser, aucune indication sur ce qu'il faut
garder.
## À lire aussi
- [Aucun coup forcé](https://eternity2.dev/fr/research/why/no-forced-moves/) — La manière habituelle de résoudre un casse-tête logique consiste à repérer un emplacement où une seule pièce convient, à la poser, puis à recommencer. Ce levier n'existe pas ici : chaque pièce intérieure admet entre 73 et 137 voisines possibles, et aucune n'est jamais contrainte à une seule option.
- [L'entropie et la loi d'aire](https://eternity2.dev/fr/research/why/entropy-area-law/) — Eternity II a deux règles : les bords doivent coïncider, et chaque pièce ne sert qu'une fois. La première est généreuse. Toute la difficulté tient dans la seconde.
- [All-different, le filtre par matching de Régin](https://eternity2.dev/fr/research/build/reduce/alldiff-regin/) — Aucune pièce ne peut servir deux fois : une seule contrainte all-different globale sur 256 cases. Jean-Charles Régin a montré en 1994 comment un matching biparti la filtre complètement en temps polynomial ; sa variante par couleur est le propagateur le plus puissant jamais mesuré sur l'edge matching, avec une réserve nette sur les recherches tolérantes aux erreurs.
- [PRIOR](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/prior/) — Construire un plateau à partir de rien, en départageant les égalités selon la position habituelle des pièces dans les bons plateaux déjà connus. Il atteint un score élevé sans aucun plateau de départ à copier.
---
# Pourquoi un ordinateur plus rapide ne change rien
> L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/prune-vs-speed/
- Mise à jour: 2026-07-01
- Sujets: speed, search-space, backtracking
- Reproduire: `just research-prune-vs-speed`
- Source: Article, source et résultats sur GitHub (research/topics/prune-vs-speed) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/prune-vs-speed
- Source: Peter McGavin : l'élagage par détection précoce d'impasse est en général trop coûteux pour en valoir la peine (groups.io msg 11848) — https://groups.io/g/eternity2/message/11848
- Source: @95A31 : toute une batterie de tests de faisabilité s'est révélée inutile sur une recherche 8×8 (groups.io msg 11856) — https://groups.io/g/eternity2/message/11856
---
Voyez la recherche comme un arbre. Depuis le plateau vide, vous choisissez une
pièce pour la première case ; de là une pièce pour la deuxième ; et ainsi de
suite, sur 256 cases de profondeur. Le nombre de feuilles tout en bas est le
facteur de branchement élevé à la puissance de la profondeur, un nombre
astronomiquement grand. Pour prouver qu'une région n'a pas de solution, une
recherche doit parcourir cet arbre.
Il y a alors deux façons de faire moins de travail. Vous pouvez aller plus
**vite** : un meilleur moteur, plus de cœurs, des boucles internes optimisées à
la main. Ou vous pouvez rendre l'arbre plus **petit**, en élaguant les branches
qui ne peuvent mener à aucune solution, de sorte que le facteur de branchement
effectif diminue. Cela paraît similaire. Ce n'est même pas comparable.
## Constant contre exponentiel
Une accélération est un diviseur constant. Rendez la machine 1000× plus rapide
et vous attendez 1000× moins, que l'arbre fasse dix niveaux de profondeur ou
dix mille. Elle vous achète un multiple fixe, un point c'est tout.
Un élagage, lui, se compose. Rognez ne serait-ce que quelques pour cent sur le
facteur de branchement et vous économisez cette fraction à chaque niveau. Sur
256 niveaux, les économies se multiplient entre elles : faire passer le facteur
de branchement de $b$ à $b'$ divise le travail par $(b/b')^{256}$. Une coupe de
5 %, appliquée jusqu'au bout, vaut $(1/0.95)^{256} \approx 5\times10^{5}$, soit
l'équivalent d'une accélération de cinq cent mille fois, à partir d'une seule
idée structurelle peu coûteuse. Cela bat presque toute accélération qu'une
machine réelle peut offrir.
## Sentez l'écart
Mettez une accélération brute en balance avec un petit élagage par niveau et
regardez l'élagage l'emporter de plusieurs ordres de grandeur.
> **[Figure]** Interactif : puissance de l'élagage contre vitesse brute — interactive: PruneVsSpeedLab. Rendered on the canonical page (link above); not shown in this markdown export.
## En quoi c'est exactement la malédiction d'E2
Si l'élagage est le levier qui compte, les casse-têtes difficiles sont ceux
qu'on ne peut pas élaguer. Eternity II a été réglé pour être précisément cela.
Quatre de ses murs disent, au fond, la même chose : il n'y a rien de local à
élaguer.
- **[Aucun coup forcé](/fr/research/why/no-forced-moves/)** : chaque case
intérieure a encore 73 à 137 voisins légaux, si bien que la propagation ne
réduit presque jamais une case à un seul choix. Le facteur de branchement
reste obstinément élevé.
- **[Au sommet de la difficulté](/fr/research/why/phase-transition/)** : les
décomptes de pièces et de couleurs se situent là où l'on attend environ une
solution, ne laissant aucune région dense en solutions vers laquelle diriger
un raccourci statistique, l'astuce qui a fait tomber Eternity I.
- **[La loi d'aire](/fr/research/why/entropy-area-law/)** : le nombre de plateaux
partiels véritablement distincts s'effondre à mesure que l'aire remplie grandit, mais aucun
signal de score local ne peut voir cet effondrement global, si bien qu'on ne
peut pas élaguer vers lui à bon compte.
- **[La rigidité](/fr/research/why/rigidity-wall/)** : même à partir d'un plateau
record, le passage à un meilleur est énorme et indivisible, sans gradient à
suivre ni rien à proximité à élaguer.
## Ce que cela signifie pour tout le reste ici
C'est la grille de lecture de toute la section recherche. Un moteur bien plus
rapide rend la même recherche moins coûteuse, pas plus petite, et ne fait pas
bouger le record. Chaque expérience qui a vraiment fait bouger les choses a
plutôt changé la forme de la recherche : un ordre de parcours différent, un
a priori appris sur l'emplacement des pièces, une région confinée pour les
défauts d'appariement. Et chaque impasse est, au fond, un élagage que la
structure globale du casse-tête refuse d'honorer. La vitesse donne d'abord un
sentiment de productivité ; ce n'est presque jamais là que se cache l'écart
avec 480.
## La communauté a abouti là aussi, à la dure
Le versant contre-intuitif, c'est que même un élagage *légal* est souvent
perdant. Un test qui détecte un plateau partiel condamné et rebrousse chemin
tôt semble être un gain gratuit, mais si le test coûte plus cher que le
sous-arbre qu'il économise, un simple backtracker qui fonce tout droit est plus
rapide. Peter McGavin a exposé sans détour le consensus établi sur la liste
groups.io : les méthodes qui tentent de détecter un placement partiel condamné
et de rebrousser chemin tôt « sont en général considérées comme trop coûteuses
pour en valoir la peine ». Un nouveau venu faisant tourner un solveur à
diagramme de décision, @95A31, l'a ensuite confirmé de zéro : après avoir
construit toute une batterie de tests de faisabilité, il a rapporté que « tous
les tests de faisabilité que j'ai implémentés se sont révélés inutiles », une
recherche 8×8 complète peinant encore à traverser 953 milliards de nœuds en
17 heures. La leçon n'est pas que l'élagage est mauvais, c'est qu'un élagage ne
paie que s'il est *moins coûteux que la recherche qu'il supprime*, et sur ce
casse-tête presque rien de local ne franchit ce seuil.
> **Note**
>
> Les nombres de l'arbre dans la démo sont illustratifs : un facteur de branchement et une profondeur choisis pour être proches d'E2 et lisibles, non la mesure d'un solveur précis. La courbe de difficulté et les décomptes de nœuds, en revanche, sont de vraies mesures de moteur sur de petits casse-têtes, déterministes et reproductibles avec `just research-prune-vs-speed`. Le principe lui-même, diviseur constant contre diviseur exponentiel, est exact.
## À lire aussi
- [Quel mur arrête quelle méthode](https://eternity2.dev/fr/research/why/walls-and-methods/) — La section recherche a deux versants : les murs structurels qui rendent Eternity II difficile, et les algorithmes conçus pour les franchir. Cette page fait le pont : chaque méthode confrontée au mur qu'elle attaque réellement, et le score auquel ce mur l'a arrêtée.
- [La théorie complexe : compter l'arbre de recherche avant de le parcourir](https://eternity2.dev/fr/research/why/complex-theory/) — La théorie complexe de Brendan Owen estime la largeur de l'arbre de recherche à chaque profondeur, et jusqu'au nombre total de solutions. Beaucoup, dans la communauté, la tiennent pour la chose la plus importante à comprendre sur Eternity II.
- [Aucun coup forcé](https://eternity2.dev/fr/research/why/no-forced-moves/) — La manière habituelle de résoudre un casse-tête logique consiste à repérer un emplacement où une seule pièce convient, à la poser, puis à recommencer. Ce levier n'existe pas ici : chaque pièce intérieure admet entre 73 et 137 voisines possibles, et aucune n'est jamais contrainte à une seule option.
- [Calibré sur le pic de difficulté](https://eternity2.dev/fr/research/why/phase-transition/) — Eternity II utilise 22 couleurs, réparties entre 17 couleurs intérieures et 5 réservées au cadre, et ce chiffre d'environ 17 se situe près du point où ce type de casse-tête est le plus difficile à résoudre (la transition est une bande, pas un entier unique).
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [La cohérence d'arc, à partir d'AC-3](https://eternity2.dev/fr/research/build/reduce/arc-consistency/) — Le forward checking regarde un coup à l'avance ; la cohérence d'arc oblige la liste de candidats de chaque case à se défendre contre celle de chaque voisine, jusqu'à un point fixe. AC-3 de Mackworth, les raffinements optimaux qui ont suivi, ce que toute cette famille a réellement mesuré sur ce casse-tête, et où elle devient incorrecte.
---
# Les couleurs rares vivent sur le cadre
> Cinq des 22 couleurs d'Eternity II n'apparaissent que le long de l'anneau de bordure, chacune sur exactement 24 arêtes, jamais une seule fois à l'intérieur. Une séparation structurelle qui façonne la manière dont chaque solveur traite le cadre.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/rare-color-geography/
- Mise à jour: 2026-07-01
- Sujets: structure
- Reproduire: `just research-rare-color-geography`
- Source: Brendan Owen dérive le design 17+5 couleurs comme le puzzle le plus difficile possible (message groups.io 1947) — https://groups.io/g/eternity2/message/1947
---
Bar,
BarChart,
CartesianGrid,
Legend,
ResponsiveContainer,
Tooltip,
XAxis,
YAxis,
} from "recharts";
Les 22 couleurs ne jouent pas des rôles équivalents. Triez-les selon
l'emplacement de leurs arêtes et elles se scindent en deux classes nettes :
cinq couleurs rares cantonnées à la bordure, et dix-sept couleurs communes qui
font presque tout leur travail à l'intérieur du plateau.
## Où les couleurs rares sont autorisées
Choisissez l'une des cinq couleurs rares et observez le plateau : ses 24 arêtes
s'allument tout autour de l'anneau du cadre, et l'intérieur 14×14 reste
entièrement vierge. Passez à une couleur commune et c'est l'intérieur qui se
remplit à la place. Ce centre vide, pour chaque couleur rare, constitue tout le
résultat.
> **[Figure]** interactive: RareColorRing. Rendered on the canonical page (link above); not shown in this markdown export.
## Les cinq couleurs rares
> **[Interactive: RareSwatches]** Rendered on the canonical page (link above); not shown in this markdown export.
{data.edgesPerRareColor}
arêtes chacune
{data.rareEdgesTotal}
arêtes rares, toutes sur le cadre
0
arêtes rares à l'intérieur
## Cadre contre intérieur, couleur par couleur
> **[Figure]** interactive: FrameInteriorChart. Rendered on the canonical page (link above); not shown in this markdown export.
> **[Figure]** Interactif : la géographie des couleurs rares sur la bordure — interactive: RareColorLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Pourquoi c'est important
La séparation elle-même est structurelle, ce n'est pas une astuce défensive.
Comme le liseré extérieur est uniformément gris, chaque pièce de bordure garde
son arête grise tournée vers l'extérieur, si bien que ses arêtes colorées ne
rencontrent jamais que d'autres arêtes de bordure ou l'intérieur : les couleurs
de bordure et d'intérieur vivent dans des réservoirs séparés, quoi qu'il
arrive. Les cinq couleurs de bordure paraissent « rares » simplement parce
qu'il y a bien moins d'arêtes de bordure à colorer, et on pourrait les
réétiqueter avec n'importe quelles cinq valeurs (y compris en réutilisant
celles de l'intérieur) sans rien changer au puzzle. (Voir la [note de conception
sur le pourquoi](/fr/research/why/#conçu-pour-résister-à-lingéniosité), avec nos
remerciements à Vasily V. sur la liste groups.io pour la correction.)
Ce qui est réel, et ce qui compte pour la résolution, c'est la conséquence :
l'intérieur 14×14 est laissé à dix-sept couleurs communes sans aucun signal
rare, fortement contraignant, nulle part en son sein, ce qui explique en grande
partie pourquoi la recherche à l'intérieur a si peu de prise. La bordure, où le
réservoir de couleurs est petit et les correspondances serrées, est en
conséquence la partie que tout plateau solide réalise pour ainsi dire
parfaitement. Les décomptes de couleurs d'Eternity II ont été équilibrés pour
supprimer les points d'appui statistiques qui avaient coulé Eternity I ; cette
géographie, c'est là que l'on en ressent le résultat.
Voir [pourquoi l'intérieur n'offre aucun coup forcé](/fr/research/why/no-forced-moves/).
## À lire aussi
- [Conçu pour être insoluble : la recette](https://eternity2.dev/fr/research/why/design-recipe/) — Eternity II applique une recette pour obtenir le casse-tête à raccords de bords le plus difficile possible : forme compacte, aucune pièce symétrique ni dupliquée, palettes cloisonnées, fréquences plates, une seule solution attendue. La communauté a rétro-conçu chaque ingrédient dès l'année du lancement.
- [Motifs interdits](https://eternity2.dev/fr/research/why/forbidden-patterns/) — Presque tout petit assemblage de pièces que l'on pourrait construire est impossible. Pour un carré 2×2, 99,72 % des façons de placer quatre pièces ne pourront jamais s'accorder.
- [L'équilibre du bord](https://eternity2.dev/fr/research/why/border-balance/) — Un plateau résolu dissimule une loi comptable toute simple : chaque couleur que le bord tend vers l'intérieur, l'intérieur la lui rend aussitôt. La violer, c'est savoir sur-le-champ que le plateau est faux ; la respecter, en revanche, ne garantit rien.
- [CLOISTER](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/) — Fixer une bordure parfaite, puis explorer l'intérieur en traitant les arêtes de la bordure comme des contraintes dures dès la toute première case.
---
# Le mur de rigidité
> Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/rigidity-wall/
- Mise à jour: 2026-07-22
- Sujets: structure, local-search, exact-methods
- Source: Théorème de rigidité locale (article du projet, 2026-05-16) : ≥13 preuves PLNE d'optimalité de halo sur 3 à 4 bassins, jusqu'au halo-4 — https://github.com/raphael-anjou/eternity2/tree/main/research
- Source: Land & Doig 1960, séparation et évaluation, la méthode exacte derrière chaque résolution de région — https://doi.org/10.2307/1910129
- Source: benj39100 : le recuit sur GPU appliqué au plateau strict à 5 indices bute sur le même cœur figé ; le meilleur score croît avec la distance au sortant (message groups.io 11902) — https://groups.io/g/eternity2/message/11902
- Source: Tests indépendants de résidu SAT sur halo et de gel des répliques de William Millilaw, reproduits ici sur cinq plateaux publics (chaque résolution terminée UNSAT, jusqu'à un halo de rayon 4 au sens de Chebyshev) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/rigidity-sat-halo
- Source: kissat, le solveur SAT derrière les preuves UNSAT sur anneaux de bordure et intérieur complet — https://github.com/arminbiere/kissat
- Source: Google OR-Tools CP-SAT, le solveur certifiant derrière les mouvements de grappe et les re-résolutions de fenêtres — https://developers.google.com/optimization
- Source: Diaconis & Sturmfels 1998, bases de Markov : le cadre d'algèbre des mouvements derrière la théorie du rayon de connectivité — https://doi.org/10.1214/aos/1030563990
- Source: Graver 1975, connectivité des fibres bornées : le même cercle d'idées — https://doi.org/10.1007/BF01584976
- Source: Wolff 1989, la classe de mouvements de grappe corrélés issue de la physique statistique qui a inspiré le recensement des permutations — https://doi.org/10.1103/PhysRevLett.62.361
---
Voici l'intuition par laquelle presque tout le monde commence : s'approcher,
puis nettoyer les derniers désaccords. Échanger deux ou trois pièces, en
faire pivoter quelques-unes, et le score va sûrement grimper jusqu'à 480.
Ce n'est pas le cas. Sur chaque plateau de tête que nous avons testé, les
derniers désaccords sont verrouillés. Déplacez quoi que ce soit dans le
voisinage et le score reste identique ou baisse. Les bons plateaux ne sont pas
des quasi-solutions attendant un polissage ; ce sont des points isolés qui
n'ont nulle part de meilleur où aller à côté.
## Regardez la région grandir
> **[Interactive: RigidityHalo]** Rendered on the canonical page (link above); not shown in this markdown export.
## Essayez de faire mieux vous-même
Un vrai petit plateau parfait. Échangez n'importe quelles deux pièces, ou
laissez le moteur essayer tous les échanges. Rien ne le bat ; c'est la
rigidité, en direct.
> **[Figure]** Interactif : échangez des pièces et regardez le score refuser de monter — interactive: RigidityLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Commencer par les plus petits mouvements
Avant même de convoquer un solveur, les vérifications les moins chères se
font par force brute : essayer chaque petit mouvement existant, et compter.
Voici une version de poche, qui tient dans la tête. Le plateau 469 de la
communauté et un plateau 466 connu ne diffèrent que sur exactement quatre
cellules : les quatre mêmes pièces, décalées d'une position le long d'une
bande de la rangée du bas. Énumérez les 6 144 agencements de ces quatre pièces
dans ces quatre cellules (24 permutations fois 256 combinaisons de rotations) :
le maximum est 469, atteint uniquement par l'agencement du sortant lui-même.
Le plateau 466 est l'un des 6 143 agencements moins bons. Deux bons plateaux
peuvent n'être qu'à quatre cellules l'un de l'autre sans aucun chemin entre
eux, ni au-dessus d'eux, à travers ces cellules.
Passez à l'échelle. Sur l'un de nos plateaux à 459 (convention stricte à cinq
indices ; nos chiffres restent en dessous des meilleurs de la communauté, voir
[la page des records](/fr/research/records/) pour le contexte), chaque rotation
non triviale de chaque pièce a été testée : 768 rotations, zéro amélioration ;
chaque vraie rotation fait strictement baisser le score. Les 32 640 échanges
de paires de pièces : zéro amélioration. Les combinaisons échange-plus-rotation :
47 164 d'entre elles, tirées d'un échantillon de 5 000 paires sur les 522 240
possibles, zéro encore ; celle-ci est un large échantillon, pas une
énumération complète. Il existe aussi une raison analytique pour laquelle une
rotation ne peut même jamais être neutre : une rotation de 180 degrés laisse
le compte local de concordances inchangé dans tous les voisinages possibles
seulement si les couleurs haut et bas de la pièce coïncident, ainsi que ses
couleurs gauche et droite, et zéro des 256 pièces possède cette symétrie
(aucune n'est non plus totalement symétrique par rotation). Aucune rotation
n'est jamais gratuite. La même sonde bon marché, passée sur onze de nos hauts
plateaux, scores 454 à 459, donne 8 448 tests de rotation simple et pas une
seule amélioration.
Sur un plateau à 457 (convention des arêtes concordantes), l'énumération a
été poussée à tout mouvement touchant jusqu'à cinq pièces : 1 024
basculements de rotation simple, 6 720 rotations de paires adjacentes,
20 240 transpositions non adjacentes, 32 796 3-cycles sur les 38 cellules
adjacentes aux désaccords, 982 200 4-cycles et 28 480 440 5-cycles. Environ
29,5 millions de mouvements, zéro amélioration, plus deux balayages par
séparation et évaluation (une recherche de permutation sur 38 cellules et un
halo de rayon 1 sur 82 cellules) qui n'ont rien trouvé non plus. Ce même
plateau à 457 a été atteint 11 fois de manière indépendante par une recherche
à redémarrages chauds, identique à l'octet près à chaque fois : la recherche
n'orbite pas autour d'un bon plateau, elle s'effondre sur un point exact et y
reste.
Même les mouvements conçus pour paraître gratuits échouent. Certaines paires
de pièces partagent trois de leurs quatre couleurs d'arêtes ; les échanger
semble presque neutre. Sur le 469 de la communauté, les 114 échanges simples
de ce type ont tous été essayés : exactement un conserve le score de 469 (et
produit le seul plateau jumeau connu), 2 donnent 468 et 111 donnent 467. Les
6 441 doubles échanges : aucun n'atteint 470, le meilleur donne 468. Sur
6 555 perturbations construites précisément pour être presque neutres en
score, l'ensemble de niveau 469 contient exactement deux plateaux.
Les chiffres s'expliquent d'eux-mêmes. À un score de 459, une cellule
contribue en moyenne environ 3,6 arêtes concordantes, alors qu'une pièce
aléatoire déposée dans un voisinage fixé n'en espère qu'environ 0,18 (à peu
près quatre arêtes fois une chance sur 22 couleurs) ; un échange aléatoire
s'attend donc à perdre environ 6,8 arêtes. Une borne probabiliste grossière
plafonne la probabilité d'un échange améliorant vers 5 pour cent ; la
fréquence mesurée est inférieure à $3\times10^{-5}$. Chaque placement d'un
plateau de tête est co-adapté à ses voisins bien au-delà de ce que le hasard
seul prédirait. Une note de portée : chaque recensement ici est exhaustif
dans sa classe de mouvements mais porte sur un seul plateau (les recensements
de rotations et d'échanges sur un 459, l'énumération à cinq pièces sur un
457, le recensement des quasi-jumelles sur le 469) ; ce sont les preuves
exactes ci-dessous qui les généralisent.
## Comment le sait-on
Le résultat ne repose pas sur le fait d'essayer un grand nombre d'échanges puis
d'abandonner. Il provient d'une question exacte posée à un solveur de
programmation en nombres entiers : prendre une région du plateau, libérer chaque
pièce qui s'y trouve, et trouver l'unique meilleure façon de la remplir à
nouveau. Le solveur explore tout cet espace local de manière exacte, non par
échantillonnage.
La réponse revient toujours la même : le meilleur agencement est celui qui est
déjà là. Nous l'avons démontré région après région, plateau après plateau, et
jusqu'à un rayon de quatre cellules ; la plus grande région fermée par un
certificat compte 79 cellules, près d'un tiers du plateau. À chaque fois,
aucune amélioration n'existe.
Une prudence apprise en chemin : une re-résolution exacte à froid d'une
grande région peut sous-performer en silence. Sommé de reconstruire de zéro
les trois dernières rangées d'un plateau solide (48 cellules), le solveur n'a
même pas retrouvé la propre queue du plateau dans le temps imparti,
atteignant 68 arêtes concordantes contre les 72 du sortant après 201 s (une
seule exécution). Sur les grandes fenêtres, « rien trouvé de mieux » peut
n'être qu'une difficulté du solveur, pas une preuve. Un verdict de rigidité
n'est retenu ici que lorsque le solveur part du sortant, de sorte que tout
mieux est strictement plus facile à trouver, et qu'il certifie malgré tout un
écart nul.
## Méthode : la preuve PLNE
La question exacte, énoncée précisément. Autour de chaque cellule défectueuse,
on prend la région *halo-$r$* : toute cellule à moins de $r$ pas. On libère
toutes les pièces qu'elle contient, on garde le reste du plateau fixé comme
frontière, et on résout un programme en nombres entiers pour le meilleur
remplissage légal. Des variables binaires $x_{c,p,\theta} \in \{0,1\}$ placent
la pièce $p$ à la rotation $\theta$ dans la cellule $c$ ; des contraintes
d'une-pièce-par-cellule et d'une-cellule-par-pièce en font un problème
d'affectation ; l'objectif maximise les arêtes concordantes, en comptant la
frontière fixée. Une région de 64 cellules représente environ 18 700 variables
binaires. La séparation et évaluation trouve alors soit un remplissage
strictement meilleur, soit prouve, à l'aide d'une borne duale, qu'il n'en
existe aucun. La définition qui vaut d'être retenue : un plateau est
*localement rigide au rayon $r$* si, pour chaque composante connexe de ses
cellules adjacentes aux désaccords, libérer toutes les cellules à distance au
plus $r$ de celle-ci et résoudre exactement n'apporte aucune amélioration.
Elle n'en trouve jamais. Les preuves, région par région. Ces exécutions PLNE
proviennent du carnet de recherche du projet (l'article du 2026-05-16 cité dans
les sources) ; le tableau ci-dessous n'est pas encore rejoué par la chaîne de
résultats validés de ce site, de sorte que ses temps de solveur et ses bornes
duales ne sont pas vérifiables de façon indépendante depuis ce dépôt, à la
différence du résultat SAT sur halo plus bas. La même note de provenance
couvre chaque recensement, énumération et escalade SAT ajoutés à cette page ;
la reproduction SAT au rayon 4 est le seul résultat committé dans ce dépôt :
| Région | Plateau | Cellules | Temps solveur | Résultat |
|---|---|---:|---:|---|
| halo-2, par composante (×8) | 3 bassins (469, 459, 458) | 2–34 | quelques secondes chacune | tous Δ = +0, **prouvé** |
| halo-1 conjoint | McGavin 469 | 37 | 895 s | Δ = +0, **prouvé** |
| halo-1 conjoint | Local 459 | 59 | 1800 s | Δ = +0, **prouvé** |
| halo-1 conjoint | trois 458 distincts | 57, 62, 64 | 180 s chacun | Δ = +0, **prouvé** |
| halo-1 par composante | un second 459, disjoint | 52 + 4 | ~60 s | Δ = +0, **prouvé** |
| 3 rangées du haut (une bande, pas un halo) | McGavin 469 | 48 | 70 s | Δ = +0, **prouvé** |
| halo-3, par composante | McGavin 469 | 42 + 47 | 929 s | Δ = +0, **prouvé** |
| halo-3, grappe la plus dense | un 458 | 79 + 19 | 1200 s + 0,2 s | Δ = +0, **prouvé** |
| halo-4, composante 0 | McGavin 469 | 57 | 1200 s | Δ = +0, **prouvé** |
Sur au moins six plateaux distincts et plus de vingt régions, la réponse est
invariante : le plateau sortant est localement PLNE-optimal, jusqu'au halo-4
pour le 469 de McGavin. Deux lignes méritent un mot. La ligne des trois
rangées du haut est une bande géométrique complète, pas un halo : elle libère
des cellules propres à côté des cellules brisées, et exclut donc en plus les
mouvements qui échangeraient des pièces entre cellules brisées et propres à
l'intérieur de la bande. Et la région de 79 cellules, la plus grande jamais
fermée ici, se trouve sur un 458 plutôt que sur le 469 parce que la
résolubilité suivait la *densité de défauts*, pas la taille brute de la
région : les régions denses en défauts se ferment, les plus grandes mais
clairsemées expirent.
L'unique région laissée avec un écart, les quatre rangées supérieures, 64
cellules, donne encore un résultat *rigoureux* : une borne duale de 123 contre
les 116 du sortant, de sorte que même le cas non fermé ne peut dépasser le mur
que de peu (cela implique une borne de ≤ 476 à l'échelle du plateau).
Toutes les résolutions n'ont pas abouti, et le registre garde aussi
celles-là. La résolution conjointe halo-2 de 54 cellules sur le 469 est
restée bloquée sur sa relaxation racine pendant 55 minutes avant d'être
arrêtée ; la bande des 5 rangées du haut (80 cellules) a expiré ; sur les
trois 458, les deux grandes composantes halo-2 ont atteint une limite de
120 s en rapportant +0 *sans* certificat, ce qui compte comme « aucune
amélioration trouvée », pas comme prouvé. Une ligne inachevée de plus élargit
le constat à une autre convention de score : un plateau à 460 joué *sans* la
contrainte des indices a reçu une résolution conjointe halo-1 (42 cellules
libres, liberté totale des pièces) et une exécution de 900 secondes n'a rien
trouvé de mieux tout en laissant un écart dual de 9,5 pour cent ouvert ;
cette ligne aussi est « rien trouvé dans le budget », pas « prouvé optimal ».
Un seul plateau, une seule exécution.
Ce n'est pas non plus un plateau malchanceux isolé. Un second plateau à 459,
trouvé par un chemin de construction complètement différent, ne coïncide avec
le premier que sur 3 des 256 cellules, essentiellement les cellules des
indices ; les deux plateaux sont structurellement disjoints, et le second est
*lui aussi* prouvé rigide au halo-1 (deux composantes, 52 et 4 cellules, +0
prouvé en une minute environ). Au halo-2, sa petite composante (7 cellules) a
été prouvée +0 en 18 s ; sa grande composante (67 cellules) est restée
indécise après environ 13 minutes et demeure ouverte. La conjecture que cela
soutient, énoncée comme telle : l'ensemble de niveau 459 est une union
disjointe de nombreux points rigides, et le dépasser exige un réagencement à
l'échelle du plateau ou un autre départ, jamais une retouche locale.
Le badge indique *prouvé* plutôt que *conjecturé* pour les régions
effectivement fermées ; l'énoncé général sur *tous* les plateaux reste une
conjecture, étayée par chaque région testée à ce jour.
## Aucun échange astucieux n'existe non plus
La PLNE libère une région et la remplit depuis l'ensemble complet des pièces.
Il existe une classe de mouvements complémentaire qu'elle ne couvre pas :
choisir $k$ cellules et essayer toutes les façons de permuter et re-pivoter
les pièces *qui s'y trouvent déjà*, le reste du plateau gelé. Une algèbre de
mouvements différente, et la même réponse.
Sur un de nos plateaux à 452 (convention stricte à cinq indices, 2026-07) :
$k=1$, exhaustif sur les 251 cellules libres, zéro mouvement améliorant.
$k=2$, exhaustif sur les 31 375 paires hors indices, zéro. $k=3$ à $6$,
environ 29 000 grappes échantillonnées (près des défauts, sur tout le
plateau, connexes et non connexes), zéro ; ce palier est un large
échantillon, pas une énumération. Pour $k=7$ et $8$, l'échantillonnage a été
promu en véritable énumération : chaque sous-ensemble connexe de 7 et 8
cellules parmi les cellules touchant un défaut, sur deux plateaux
indépendants, 849 sous-ensembles en tout (231 sur le 452, 618 sur un 451
structurellement étranger qui en diffère sur 249 des 256 cellules), tous
résolus jusqu'au bout, zéro améliorant, zéro dépassement de délai ; plus les
7 845 sous-ensembles connexes de 7 cellules à un pas d'une arête en défaut,
zéro encore. Environ 60 000 mouvements de grappe évalués, et le meilleur
delta trouvé où que ce soit est exactement zéro.
Ce zéro n'est pas un détecteur cassé. En témoin positif, un sabotage
délibéré de deux pièces (452 ramené à 447) a été réparé par la même machinerie
en un seul mouvement de 4 cellules, retour direct à 452. Et la recherche
locale gloutonne sur cette classe de mouvements, lancée depuis trois plateaux
d'origines indépendantes (le 452, un jumeau de même score n'en différant que
sur 2 cellules, et le 451 étranger), a touché un point fixe immédiat dans les
20 exécutions ensemencées : minimum, médiane et maximum identiques, zéro
évasion.
Le détail qui pique : le 452 lui-même est *né* de cette classe de mouvements.
Une co-rotation de deux pièces a soulevé un 451 rigide sous tout mouvement de
pièce unique. Un authentique mouvement corrélé à deux corps a existé ; une
fois pris, plus aucun mouvement corrélé de taille jusqu'à 8 ne subsiste près
des défauts. Le rayon de rigidité grandit à mesure que le plateau s'améliore.
Changer la géométrie de l'ensemble libéré n'aide pas davantage. Libérez des
bandes de rangées contiguës plutôt que des taches : 54 bandes d'une rangée
sur 54, à travers les bandes de défauts des deux plateaux (largeurs 8 à 14,
jusqu'à 15 cellules libérées), certifient exactement le score du plateau en
moins d'une seconde chacune, et 18 bandes de deux rangées sur 18, hors de la
pire bande, certifient la rigidité jusqu'à 26 cellules. Dans la bande de
défauts la plus dense de chaque plateau, les bandes plus larges (16 à 26
cellules) deviennent difficiles à *certifier* : après escalade à 300 s et 3
graines, 6 sur 10 restent ouvertes avec des écarts de borne de 2 à 6 arêtes.
Mais sur les 30 exécutions d'escalade, le solveur n'a jamais trouvé le
moindre agencement meilleur que celui du plateau. C'est un écart de
certification, pas l'indice d'une amélioration, et les bandes ouvertes sont
consignées comme ouvertes, pas comme prouvées.
Les fenêtres rectangulaires racontent la même histoire. Sur le 452, dont les
28 arêtes brisées se répartissent en 22 concentrées dans la bande du bas et 6
éparses, chaque fenêtre de jusqu'à 18 cellules autour de chaque grappe de
défauts (quatre fenêtres, 9 à 18 cellules) se re-résout à un optimum certifié
exactement à la valeur du plateau. Chaque défaut est forcé par des pièces
engagées *ailleurs* ; aucune fenêtre qui se contente de contenir le défaut ne
peut le réparer.
Même laisser les pièces s'échanger à travers la frontière bon/mauvais ne
bouge rien. Sur un de nos plateaux à 459 (strict à cinq indices), les deux
rangées du bas (32 cellules) certifient l'optimalité en 49 s. Une fenêtre de
46 cellules, et des fenêtres de 52 et 72 cellules qui libèrent en plus 6 à 10
cellules donneuses *dans la région parfaite*, pour que des pièces puissent
circuler entre parties propres et brisées, renvoient toutes le plateau
identique : zéro cellule déplacée,
pas même un remaniement latéral à score égal (150 à 180 s chacune, graine
unique, si bien que ces fenêtres plus grandes comptent comme « aucune
amélioration et aucun mouvement trouvés », pas comme des certificats). Le
même opérateur appliqué à un plateau plus faible à 455 le soulève de 2
jusqu'à 457 : il améliore donc bel et bien les plateaux qui ne sont pas
encore à leur point fixe ; le 459, lui, y est déjà. Dans chaque fenêtre, la
relaxation linéaire croit qu'environ 17 concordances de plus sont
disponibles ; la contrainte chaque-pièce-une-seule-fois les interdit toutes.
La contrainte qui mord, c'est quelles pièces le reste du plateau laisse en
réserve, jamais la taille de la fenêtre. La difficulté est la distinction
globale, pas la concordance locale.
## Rigide une rangée entière à la fois
Halos et fenêtres sont des taches. Essayez une géométrie qui traverse le
plateau : libérez une rangée entière de 16 cellules, restreignez-la aux
pièces non utilisées ailleurs sur le plateau, et énumérez les remplissages
alternatifs par programmation dynamique. Sur un plateau à 460 (désaccords
tous dans les rangées 11 à 14) et sur le 469 de la communauté (désaccords
dans les rangées 0 à 4), le remplissage actuel de chaque rangée est le
meilleur disponible, et plusieurs rangées n'admettent *aucune alternative
légale* : la chaîne posée est l'unique façon de faire passer cette rangée à
travers le reste du plateau.
Les chiffres. Sur le 460 : les rangées 1 à 10 sont parfaites et n'admettent
qu'une seule chaîne chacune, celle qui est posée ; les rangées 12 et 14 ont
zéro chaîne alternative ; la rangée 13 a 176 alternatives, toutes moins
bonnes, la meilleure perdant 10 arêtes. Sur le 469 : la rangée 3 a zéro
alternative ; les rangées 2 et 4 ont leurs meilleures alternatives à 20
arêtes de moins ; les rangées 5 à 14 sont parfaites, l'originale figurant
parmi jusqu'à environ 17 857 chaînes légales sans qu'aucune fasse mieux. En
libérant deux rangées conjointement (32 cellules, jointure interne libre) :
les paires (11,12), (12,13) et (13,14) sur le 460 donnent 0 à 4 chaînes
alternatives au total, toutes moins bonnes (12 à 16 arêtes de moins) ou
infaisables. Trois rangées conjointement (48 cellules) : les rangées
(11,12,13) et (12,13,14) donnent zéro chaîne alternative. Ces rangées ne sont
pas seulement optimales ; elles sont souvent *forcées*. Unicité, pas
simplement optimalité. Portée : l'énumération est une programmation dynamique
à faisceau (largeur 100 000 pour une rangée, 5 000 à 50 000 pour deux et
trois rangées), exhaustive en pratique mais non certifiée comme le sont les
lignes PLNE ; disons faisceau-exhaustive. Deux plateaux.
Un pendant exact sur des bandes : videz entièrement les 2 rangées du bas (32
cellules) d'un plateau à 460 et laissez une recherche exacte par contraintes
énumérer chaque remplissage légal à partir des pièces libérées. Il existe
exactement 32 remplissages alternatifs, tous à 460 ou moins. Videz les 4
rangées du bas (64 cellules) : la seule complétion que la recherche exacte
atteint est le plateau original lui-même. Un seul plateau, ces deux tailles
de bandes seulement ; mais sur chaque bande qu'on a pu fermer exactement, le
score actuel est le vrai plafond.
## Où vivent les derniers désaccords, et pourquoi ils sont coincés
Sur un de nos plateaux à 458, l'anatomie de l'échec est remarquablement
concentrée. L'anneau de bordure est parfait (60 sur 60), les neuf rangées
intérieures du haut sont parfaites, et les 22 désaccords (4
bordure-intérieur, 18 intérieur-intérieur) vivent tous dans les cinq rangées
du bas, regroupés en 10 minuscules grappes disjointes de 2,8 cellules en
moyenne, la plus grande n'en comptant que 5. Chaque grappe semble réparable
trivialement. Les résolutions exactes disent le contraire : re-remplissages
par grappe, delta zéro ; élargissements halo-1 et halo-2 jusqu'à 16 cellules,
delta zéro ; et l'union des 28 cellules touchant un défaut, résolue
conjointement à l'optimalité prouvée en 1,74 s, delta zéro.
C'est le mécanisme de tout le mur en miniature : la région des défauts est à
son optimum exact *étant donné les pièces qu'on lui a laissées*. Le haut
parfait du plateau a consommé un ensemble de pièces précis, et c'est cet
engagement qui plafonne le bas. Réparer les derniers désaccords exigerait de
désengager des pièces de la région déjà parfaite, un grand mouvement
inter-régions, pas une réparation locale. (Une relaxation linéaire lit un
plafond de 478 pour cette bordure ; c'est un plafond de relaxation pour cette
bordure particulière, pas une affirmation sur le véritable optimum.) Un seul
plateau, mais le motif, des défauts tassés en quelques minuscules grappes que
les re-remplissages exacts ne peuvent réparer, est exactement ce que le
tableau des halos ci-dessus retrouve sur les autres bassins.
## Pourquoi personne ne peut certifier le mur par le haut
Deux faits coexistent sur le plateau à 452 (strict à cinq indices), et leur
tension est l'état de l'art actuel. Fait A : aucun mouvement local d'aucune
sorte testée ne le bat, et quatre cadres indépendants concordent (mouvements
de grappe, re-résolutions de fenêtres, un certificat exact à écart nul
attestant que le lot de pièces posé sur ses cellules touchant un défaut est
placé optimalement, et une sonde thermodynamique qui, ou bien gèle sur le
sortant, ou bien fond vers l'aléatoire, sans échappée douce entre les deux).
Fait B : toute tentative de borner une *grande* région par le haut échoue ;
les bornes sont lâches et ne convergent pas. Sur la queue de trois rangées du
plateau, 8 graines à 20 minutes chacune ont toutes rendu exactement le
sortant, aucune n'a jamais rien trouvé de mieux, tandis que la borne
supérieure du solveur *montait* de 79 (à 300 s) à 89 (à 1200 s), s'éloignant
des 72 du sortant au lieu de s'en approcher. Une borne de programmation
linéaire sur l'intérieur lit 478,5 sur 480 : vide de sens.
Il y a un récit d'avertissement là-dedans. Une première lecture de
l'exécution à 300 s donnait « un écart de 7, de la marge vers un score plus
haut ». La chasse à 8 graines a montré que l'écart était l'artefact d'une
relaxation non convergente, pas l'indice d'un meilleur plateau atteignable.
La raison pour laquelle les bornes restent lâches : la rareté qui rend ce
puzzle difficile est du second ordre, une affaire de *paires* de couleurs
conjointement rares, et les relaxations de concordance du premier ordre, sur
lesquelles sont bâties les bornes LP et de propagation, ne peuvent pas la
voir, quel que soit leur temps de calcul.
Ainsi la rigidité locale (prouvée) et l'écart global ouvert ne se
contredisent pas. Le sortant est un optimum local profond, *et* un meilleur
agencement déconnecté peut exister qu'aucun mouvement local n'atteint ;
aujourd'hui aucune borne ne l'exclut et aucune recherche ne le trouve. Fermer
l'une ou l'autre direction d'un seul écart de grande région serait une
première : un meilleur remplissage serait un nouveau meilleur plateau, et une
borne ramenée jusqu'au sortant serait le premier plafond de score local
prouvé. La borne duale des quatre rangées du haut (123 contre 116) est ce qui
ressemble le plus à un progrès par le haut, et elle reste lâche de 7 arêtes.
Portée : le fait A est prouvé sur un plateau à travers plusieurs lentilles ;
le fait B porte une dispersion à 8 graines sur son exécution décisive.
## Impossible même de recombiner les bons plateaux
La rigidité survit même quand l'ensemble des mouvements est « emprunter à
chaque bon plateau jamais trouvé ». Construisez une optimisation où chaque
cellule peut prendre la pièce et la rotation que *n'importe lequel* de 25 à
30 plateaux distincts à haut score y place, avec chaque-pièce-une-seule-fois
imposé, et libérez le plateau entier, les 256 cellules. L'optimum est
exactement le meilleur plateau déjà présent dans le corpus, jamais un mélange
qui le batte : 457 avec les cinq indices épinglés (convention stricte ;
corpus de 25 plateaux, résolu en 24 s), et 459 sans imposer les indices
(convention des arêtes concordantes). Les versions par région à rayons
croissants, 77, 127, 191 et 252 cellules libres, sont toutes à delta zéro en
quelques secondes à environ 30 s. Ces optima sont des certificats, par
corpus ; le corpus date de 2026-05, quand nos meilleurs étaient 457 strict et
459 en arêtes concordantes, tous deux sous les chiffres de la communauté hier
comme aujourd'hui ([page des records](/fr/research/records/)).
Le corpus n'est pas à court de choix. Chacune des 256 cellules a au moins 2
options distinctes à travers les plateaux, et une pièce typique apparaît à 6
à 19 positions différentes dans le corpus. La diversité est riche ; l'unicité
des pièces la fragmente. Les plateaux issus de familles d'agencements de
coins différentes ne peuvent pas du tout se mélanger, et ajouter le 469 de la
communauté au corpus fait que l'optimiseur choisit simplement ce plateau en
bloc, à 469, plutôt que de le mélanger à quoi que ce soit.
La lecture : l'écart au-dessus des meilleurs plateaux connus est un écart de
*découverte*, pas de recombinaison. L'amélioration ne se cache dans aucune
combinaison de ce qui est déjà connu ; elle exige des plateaux hors du corpus
connu tout entier.
## Pourquoi c'est important
Cela recadre tout l'écart jusqu'à 480. La distance entre le meilleur plateau
connu et une solution n'est pas un amas de petites corrections en attente d'être
trouvées. Si c'était le cas, ce type de recherche locale les aurait trouvées.
L'obstacle, c'est que les bons plateaux siègent au fond de leurs propres petites
vallées, et que les parois de ces vallées sont exactes, non approximatives.
Cela dit aussi ce qui ne marchera pas. Le polissage, l'ascension de colline et
la plupart des heuristiques de réparation locale tentent de remonter la pente
depuis un point figé. Il n'y a pas de pente à remonter. Atteindre une solution
exige un mouvement qui réagence une grande région d'un seul coup, ou un point de
départ entièrement différent, non un meilleur polissage. Les preuves
conjointes au halo-1 rendent cela quantitatif : tout opérateur de
destruction-réparation dont la portée est au plus le halo, des fenêtres
jusqu'à environ 30 cellules autour des défauts, est mathématiquement épuisé
sur ces plateaux. Le gel n'est pas « notre heuristique est faible » ; cette
classe d'opérateurs entière est terminée.
Même le plus grand mouvement unique que nous sachions faire ne s'échappe
pas. Sur notre plateau à 461 (strict à cinq indices ; pour situer ce chiffre
face aux records de la communauté, voir [la page des
records](/fr/research/records/)), les mouvements de cycles entiers
indécomposables décrits sur la [page des
sigma-cycles](/fr/research/why/sigma-cycles/) ont été appliqués *atomiquement*,
chacun suivi d'une re-résolution de fenêtre locale pour réparer les cellules
dérangées. Environ 4 000 mouvements de ce type : zéro évasion, et la sortie
non locale la moins chère perd encore au moins un point (meilleur résultat
460, deux cellules de différence). Cela n'exclut que la variante à nettoyage
local ; une re-résolution compensatrice globale n'a pas été testée. Mais un
grand mouvement ne suffit pas si son nettoyage est local.
Une chose de plus que la rigidité ne signifie *pas* : difficile à
reconstruire. Épinglez les quatorze premières rangées du 469 de la communauté
et laissez une recherche de réparation reconstruire le reste : 3 graines sur
4 reviennent à 469 (la quatrième reste coincée à 454). Faites de même avec
les préfixes de nos propres plateaux records : aucune graine ne dépasse
jamais 460. Une petite sonde (4 graines, réparations de 30 secondes par
plateau), mais la forme est nette. Le mur ne mesure pas la difficulté de
reconstruire un plateau ; il dit *à quelle vallée appartient le squelette du
plateau*. Un préfixe admet une excellente complétion ou n'en admet pas, et
aucune chance de graine ne change laquelle.
### La fin de partie se décide tôt
Épinglez les $N$ rangées supérieures du 469 de la communauté et laissez la
recherche locale compléter le reste. Le score de complétion n'est pas graduel
en $N$ ; c'est une falaise avec des leurres : $N=1$ donne 400, $N=2$ donne
382, $N=4$ donne 401, $N=8$ donne 418, $N=12$ donne 450, $N=13$ donne 455,
et $N=14$ donne 469, une reconstruction *exacte*, zéro cellule de
différence, $N=15$ pareil. À 13 rangées épinglées, il existe une complétion
alternative des trois dernières rangées, avec les mêmes pièces autrement, qui
ne marque que 455 et constitue elle-même un piège : la concordance locale des
couleurs admet plusieurs complétions et la recherche ne sait pas laquelle se
prolonge. Réussir 87 pour cent d'un record n'est pas « presque y être ». Ce
sont des exécutions de complétion uniques par point, sur des budgets de
l'ordre de la minute, sans dispersion de graines ; lisez le seuil, pas les
scores individuels.
Deux notes complètent le tableau. Le balayage prouve que la machinerie de
complétion est capable *d'atteindre* 469 ; le mur consiste à trouver les
quelque 224 premières pièces de la structure, pas dans une faiblesse de
l'étape de polissage. Et l'influence ne circule pas dans l'autre sens : une
rangée du haut seule, une parmi au moins $5\times10^{8}$ rangées du haut
légales, ne détermine presque rien. Quatre préréglages d'opérateurs de notre
famille de recherche locale, poussés depuis une rangée du haut épinglée,
calent tous entre 378 et 400 ; les autres familles de recherche ne sont pas
testées, ce négatif est donc circonscrit à notre chercheur. Pendant ce temps,
363 de nos plateaux à 455 et plus n'ont utilisé que 47 rangées du haut
distinctes : les bons plateaux se regroupent en haut bien avant que le bas ne
soit décidé.
## Quelqu'un a heurté le même mur du côté du recuit
La preuve PLNE aborde le mur de façon analytique. En juin 2026, un autre
chercheur s'y est heurté de plein fouet, empiriquement. En travaillant le
plateau strict à cinq indices avec un solveur de recuit simulé sur GPU (4096
répliques parallèles), benj39100 a rapporté deux choses qui se lisent comme une
reformulation de cette page. Premièrement, le meilleur score qu'une exécution
pouvait atteindre *augmentait avec la distance au meilleur plateau courant* :
pour grimper de 429 vers 432, les perturbations gagnantes devaient migrer
régulièrement plus loin, parce qu'au voisinage du sortant il n'y avait aucun
mouvement améliorant à trouver. Deuxièmement, à travers tous leurs meilleurs
plateaux, les mêmes quelque quarante-deux arêtes brisées formaient un « noyau
dur » figé que la recherche locale ne touchait jamais, si bien qu'ils ont dû
ajouter un terme explicite qui *récompensait* le fait d'ouvrir ce noyau de
force. Un sortant localement figé sans gradient à proximité, et un petit
ensemble verrouillé de défauts que rien de local ne déplace : voilà le mur de
rigidité, vu depuis une méthode complètement différente.
## Et encore, depuis un solveur SAT
Un troisième chercheur est parvenu à la même conclusion avec un troisième outil.
William Millilaw, travaillant le plafond de façon indépendante, a mené deux
tests. Le premier était un test de gel : perturber la racine d'un plateau de
tête, ré-optimiser, et voir quelles cellules reviennent. Sur ses meilleurs
plateaux, 93 à 100 pour cent des cellules revenaient exactement à leur place, un
noyau figé que la recherche ne pouvait déplacer. Le second était une question de
décision pour un solveur SAT. Libérer les cellules autour des désaccords,
exiger que chaque arête libérée concorde, et demander si un quelconque agencement
de ces pièces la satisfait. Son solveur a répondu UNSAT.
Nous avons [reproduit ce test SAT](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/rigidity-sat-halo)
sur cinq plateaux publics, avec notre propre encodeur et un témoin positif pour
nous assurer qu'une région concordante revient satisfiable. Sur les quatre
plateaux records de la communauté, du 467 de Verhaard au 470 de Blackwood, et le
464 de Riotte (le record strict à cinq indices), chaque résolution qui aboutit
est UNSAT jusqu'à un halo de rayon 4 au sens de Chebyshev (cette reproduction
mesure la région libérée par rayon de Chebyshev, alors que les échelles SAT du
carnet plus bas comptent des pas de Manhattan ; les deux échelles de halo ne
sont donc pas la même métrique) : aucun réagencement local des
propres pièces d'un plateau record ne referme un seul désaccord, même lorsque la
région libérée dépasse la centaine de cellules. Les instances de rayon 4 sont
assez grandes pour que quelques-unes n'aboutissent pas dans le temps imparti au
solveur ; celles-ci sont enregistrées comme dépassements de délai et laissées
ouvertes, non comptées comme prouvées, de sorte que le tableau validé énonce
exactement ce qui a été décidé. La programmation en nombres entiers optimise et
borne ; le recuit se cogne au mur à la main ; SAT décide et renvoie une
réfutation. Trois méthodes, une seule réponse.
Un quatrième outil est d'accord. Un optimiseur MaxSAT, une variante de SAT
qui renvoie à la fois le meilleur remplissage et une preuve de son
optimalité, a été pointé sur des sous-régions d'un de nos plateaux à 454 plus
ancien : épingler tout ce qui est hors d'une région, libérer la région,
demander le meilleur remplissage prouvable. Chaque fenêtre $k\times k$
jusqu'à 5×5 a été prouvée optimale dans son budget de 60 s (les fenêtres 6×6
ont dépassé le budget et sont consignées comme non fermées, pas comme
prouvées), et la zone de défauts entière du plateau, 45 cellules contenant
ses 26 désaccords intérieurs, a été prouvée optimale en 83 s : ces 26
désaccords sont le mieux que cette région puisse faire étant donné le reste
du plateau. Ce 454 avait lui-même été atteint à l'octet près depuis 4 graines
aléatoires différentes, le même effondrement sur un point unique que le 457
du recensement plus haut : les exécutions indépendantes n'atteignent pas
seulement le même score, elles atteignent exactement le même plateau.
Poussez la question SAT plus loin et la réponse devient plus spectaculaire.
Prenez un de nos plateaux à 459 (cinq indices imposés), libérez chaque
cellule à distance au plus 10 de ses désaccords, 218 des 256 cellules libres
et seulement 38 épinglées, et demandez si *une quelconque* complétion atteint
un 480 complet. UNSAT, en 0,31 s. L'échelle en chemin : les halos 0 à 5 tous
UNSAT en moins de 2 s chacun ; le halo 7, 173 libres et 83 épinglées, UNSAT
en 0,17 s. Les 38 cellules encore épinglées au halo 10 sont essentiellement
les deux rangées du haut plus 3 des 5 indices. Les deux rangées supérieures
de ce plateau sont donc, à elles seules, prouvées incompatibles avec toute
solution parfaite : tout 480 doit différer de ce plateau quelque part dans
ces 38 cellules. La rigidité est portée par un mince squelette en haut du
plateau, pas par les voisinages des défauts. Au rayon 15, seulement 4
cellules épinglées, le solveur a expiré à 600 s ; ce cas est ouvert. Un
plateau précis ; on ignore si d'autres plateaux à 459 partagent la même
rigidité du haut épinglé.
Ses travaux antérieurs sur le serpent et la recherche locale ont chiffré le
pourquoi. Le plus grand pavé qu'un quelconque de ses opérateurs de réparation
pouvait réécrire en un mouvement faisait environ 48 cellules, alors que deux des
bons plateaux connus, tous deux proches du plafond, diffèrent sur environ 225
cellules. Un mouvement qui ne peut toucher que 48 cellules ne peut franchir un
écart de 225 cellules, si bien qu'aucune suite de tels mouvements n'atteint un
bassin différent. Il a cherché une chaîne de petits mouvements améliorants qui
permettrait de percer un tunnel vers la sortie et n'en a trouvé aucune : zéro
amélioration sur vingt-huit millions de combinaisons de quatre et cinq
mouvements au plateau. C'est le même mur, énoncé comme un budget. La réparation
locale réécrit trop peu à la fois pour quitter la vallée, ce qui explique
pourquoi s'en échapper exige un mouvement qui réagence une grande région d'un
seul coup, exactement comme le conclut la section de preuve ci-dessus.
## Le mur va jusqu'à 480
Tout ce qui précède demande si un réagencement local peut refermer un
désaccord. Il y a une question bien plus grande : en ne gardant que l'anneau
de bordure d'un plateau, *un quelconque* agencement des 196 pièces restantes
atteint-il un 480 parfait ? Sur notre plateau à 459 (convention des arêtes
concordantes, indices canoniques), la réponse est une preuve de non, à toutes
les échelles. Libérer les 32 cellules en désaccord : UNSAT en 0,09 s (14 000
variables, 81 000 clauses). Libérer tout ce qui est à 5 pas d'un désaccord,
140 cellules, plus de la moitié du plateau : UNSAT en 1,56 s. Libérer
*l'intérieur entier*, les 191 cellules intérieures hors indices, en ne
gardant que l'anneau de bordure de 60 pièces : UNSAT en 1,37 s (160 000
variables, 5,4 millions de clauses). Les barreaux intermédiaires, halo-1 à 70
cellules (0,33 s), halo-2 à 93 cellules (0,89 s), halo-3 à 109 cellules
(0,80 s), sont tous UNSAT aussi. Le solveur est kissat, cité dans les
sources.
Et ce n'est pas la malchance d'un seul plateau. Neuf configurations
d'anneaux de bordure distinctes ont été testées, couvrant quatre agencements
de coins différents : la bordure du 469 de la communauté, nos bordures
records 459 et 458, un plateau à 435 issu de la propagation de croyances, et
cinq bordures partielles énumérées systématiquement. Chacune, sans exception,
est UNSAT pour 480, en moins de 2 secondes à chaque fois. Fait le plus
notable, la bordure du 469 de la communauté, à 11 désaccords de la
perfection, ne peut prouvablement héberger aucun intérieur à 480 : UNSAT en
moins de 0,01 s. L'encodeur a été validé aller-retour sur de petits puzzles
solubles, où des résolutions fraîches se décodent en plateaux parfaits
vérifiés et où épingler une bordure correcte rend SAT, la même discipline de
témoin positif que la reproduction plus haut ; les verdicts UNSAT sont
réels, pas des artefacts.
Le bord ouvert de ce résultat en est le meilleur résumé. Seules neuf
configurations de bordure existent dans notre corpus, et une bordure
compatible avec un 480 existe à coup sûr : le puzzle a été construit à partir
d'une solution. Elle n'est simplement aucune des bordures qu'une recherche de
classe record ait jamais produites. Polir près d'un record n'est pas
seulement lent ; sous la propre bordure de ce record, atteindre 480 est
prouvé impossible. Une solution exige une autre bordure.
## Pourquoi le mur existe
La page jusqu'ici prouve le mur ; voici ce qui se rapproche le plus d'une
raison. Modélisez l'ensemble des plateaux à score fixé comme un graphe dont
les arêtes sont des mouvements touchant au plus $k$ cellules, et demandez le
plus petit $k$ qui le connecte : le rayon de connectivité. Sur de petites
instances d'appariement d'arêtes où chaque plateau peut être énuméré
exactement, deux lois émergent. Premièrement, le rayon est petit sur
l'essentiel du spectre des scores et saute au plateau entier exactement au
score maximal : sur une instance à 6 cellules, $k$ vaut 2 à 4 cellules aux
scores intérieurs et 6, le plateau entier, au maximum ; sur une instance à 9
cellules, le rapport $k/N$ se situe autour de 0,22 à 0,44 à l'intérieur et
0,78 au sommet. Deuxièmement, la rigidité s'allume avec la richesse des
couleurs : en balayant la palette sur les instances à 9 cellules, le support
moyen du mouvement minimal monte de 1,4 à 7,6 cellules quand les couleurs
passent de 2 à 8, et la fraction d'instances dont les solutions parfaites
exigent un mouvement plein-plateau pour s'interconnecter monte de 0 à 70
pour cent.
À l'échelle jouet, il y a un théorème, prouvé par un argument de forçage et
vérifié par énumération exhaustive : si le jeu de couleurs est assez riche
pour que chaque couleur d'arête exposée n'admette au plus qu'une tuile légale
pendant un remplissage, alors deux solutions parfaites distinctes ne
partagent *aucune cellule*, si bien que tout mouvement entre elles doit
toucher chaque cellule. À une richesse de couleurs comparable à celle du
vrai puzzle, chaque instance testée était rigide exactement en ce sens : zéro
cellule partagée entre toute paire de solutions parfaites.
Pour Eternity II lui-même, c'est une conjecture, et nous l'étiquetons comme
telle. Avec 22 couleurs intérieures, chacune réutilisée environ 24 à 50 fois
sur 480 adjacences intérieures, le vrai puzzle siège profondément dans le
régime rigide, si bien que des plateaux quasi parfaits distincts devraient
être quasi orthogonaux (ce qui correspond à la différence de 225 cellules
observée plus haut entre bons plateaux) et qu'aucun mouvement de taille
bornée ne devrait relier des optima distincts. La condition « au plus une
tuile » n'est pas strictement vraie sur E2, donc l'affirmation défendable est
« une grande fraction du plateau », pas « prouvablement les 256 cellules ».
Le corollaire est la partie satisfaisante : la recherche locale gèle
*précisément aux hauts scores* parce que c'est là que le graphe des
mouvements se déconnecte. L'intérieur de la gamme des scores se parcourt
facilement, d'où le fait qu'atteindre les 450 et 460 soit routinier ; le
sommet est un ensemble de points isolés, d'où le fait que le polissage y
meure. Une théorie, les deux moitiés de l'histoire de cette page. (Les
mathématiques sont le cercle d'idées des bases de Markov et de Graver en
statistique algébrique ; voir les sources. Les seuls mouvements de sommet bon
marché que la théorie autoriserait sont des symétries globales, et ce jeu de
pièces n'en a essentiellement aucune.)
> **La pièce suivante du tableau**
>
> Si vous ne pouvez pas améliorer un plateau localement, peut-être pouvez-vous sauter d'un bon plateau à un autre. Cela échoue aussi, pour une raison connexe : [voyez pourquoi le saut de bassin est impossible](/fr/research/why/sigma-cycles/).
*Les preuves utilisent la programmation en nombres entiers sur des régions de
chaque plateau ; elles tournent plusieurs minutes par région sur un solveur, et
ne sont donc pas reproduites en direct ici. Les plateaux eux-mêmes sont fournis
et vérifiables dans la visionneuse.*
## À lire aussi
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
- [Pourquoi le basin-hopping semble impossible](https://eternity2.dev/fr/research/why/sigma-cycles/) — Si l'on ne peut pas améliorer un excellent plateau en le peaufinant, peut-être peut-on sauter vers un autre excellent plateau. Sur chaque paire de records testée, c'est impossible, et la raison structurelle mérite qu'on la voie.
- [Quel mur arrête quelle méthode](https://eternity2.dev/fr/research/why/walls-and-methods/) — La section recherche a deux versants : les murs structurels qui rendent Eternity II difficile, et les algorithmes conçus pour les franchir. Cette page fait le pont : chaque méthode confrontée au mur qu'elle attaque réellement, et le score auquel ce mur l'a arrêtée.
- [Pourquoi un ordinateur plus rapide ne change rien](https://eternity2.dev/fr/research/why/prune-vs-speed/) — L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
- [PALIMPSEST](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/) — Lire chaque plateau fort pour repérer les habitudes qui, en silence, plafonnent un plateau, puis les briser. Cette expérience a produit le meilleur plateau du projet : 463 sur 480.
- [MIDDEN](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/pipelines/midden/) — Décider à l'avance non pas quand un plateau peut casser, mais où : confiner chaque désaccord à une forme de cellules choisie, et chercher la meilleure forme.
- [Relaxations LP et PLNE : une demi-pièce partout](https://eternity2.dev/fr/research/build/exact/lp-relaxations/) — Écrivez Eternity II comme un programme en nombres entiers, abandonnez l'intégralité, et un solveur linéaire atteint une erreur nulle en quelques secondes, 30 % d'une pièce et 20 % d'une autre partageant un même coin. Dix-huit ans de campagnes communautaires ont mesuré où s'arrête le confort fractionnaire : un plateau à 420–440 arêtes dès que les pièces doivent être entières, un mur PLNE dès le 8×8, et un record académique de 461 en une heure. Ce qu'enseigne la route de l'optimiseur, et là où le LP reste utile.
---
# Pureté de l'anneau : le bord est un sous-puzzle clos, sans aucun jeu
> Cinq des 22 couleurs ne touchent jamais les 196 pièces intérieures. La liste des pièces force toute solution valide à dépenser les 120 demi-arêtes de cadre sur l'anneau du bord : un sous-puzzle autonome à jeu exactement nul (120 = 120), un circuit eulérien sur cinq sommets, relié à l'intérieur par seulement 56 arêtes tournées vers le centre.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/ring-purity/
- Mise à jour: 2026-07-22
- Sujets: structure
- Source: Pureté de l'anneau : le sujet de reproduction avec l'article, le vérificateur versionné et le JSON de résultats (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/ring-purity
- Source: Brendan Owen numérise le jeu de pièces : 24 demi-arêtes pour chacune des 5 couleurs de jonction du bord, 48 ou 50 pour chaque couleur intérieure (groups.io msg 1054, juillet 2007) — https://groups.io/g/eternity2/message/1054
- Source: Brendan Owen, Design the hardest puzzle : la séparation délibérée de la palette en 17+5 (groups.io msg 1947, août 2007) — https://groups.io/g/eternity2/message/1947
---
Cinq des 22 couleurs d'arêtes n'apparaissent sur aucune des 196 pièces
intérieures. Dans la numérotation standard, ce sont les couleurs 1 à 5 : les
couleurs de cadre. Chacune occupe exactement 24 demi-arêtes, toutes portées
par les 60 pièces de bord, soit une réserve totale de 120. La pureté de
l'anneau, c'est l'énoncé suivant : les données des pièces ne laissent aucun
choix à cette réserve. Toute solution valide dépense l'intégralité des 120
demi-arêtes sur les 120 emplacements de l'anneau du bord tournés vers
l'anneau lui-même, sans aucun jeu. Le bord est un sous-puzzle autonome, et
son seul contact avec l'intérieur passe par 56 arêtes tournées vers le
centre.
120 = 120
demande de l'anneau contre réserve de cadre, jeu nul
5 × 24
couleurs de cadre × demi-arêtes chacune
56
arêtes reliant l'anneau à l'intérieur
## Trois faits sur la liste des pièces
La preuve repose sur trois propriétés vérifiables en parcourant une seule
fois les 256 pièces. Aucune recherche, aucun échantillonnage.
Premièrement, les couleurs de cadre n'apparaissent que sur les pièces de
bord. Le vérificateur ne fait pas confiance aux étiquettes : il dérive
l'ensemble des couleurs de cadre depuis les données, comme les couleurs à
zéro occurrence sur les pièces intérieures, et en trouve exactement cinq.
Deuxièmement, chacune des 56 pièces d'arête porte exactement deux
emplacements de couleur de cadre et un emplacement hors cadre parmi ses trois
emplacements non nuls, et l'emplacement hors cadre se trouve à l'opposé de
l'emplacement gris. C'est le cas 56 fois sur 56.
Troisièmement, les deux emplacements non nuls de chaque pièce de coin sont de
couleur de cadre, et les deux emplacements gris sont adjacents. C'est le cas
4 fois sur 4.
Pour mémoire, le reste de la palette est aussi plat que la partie cadre :
parmi les 17 couleurs intérieures, 5 apparaissent 48 fois et 12 apparaissent
50 fois. Brendan Owen a mesuré exactement ces effectifs la semaine où il a
numérisé son jeu ([msg 1054](https://groups.io/g/eternity2/message/1054)), et
la séparation stricte des deux palettes était une décision de conception
([msg 1947](https://groups.io/g/eternity2/message/1947)) ; la
[page sur la recette de conception](/fr/research/why/design-recipe/) raconte
cette histoire.
## L'argument de forçage
Une pièce d'arête se pose sur le pourtour avec son emplacement gris tourné
vers l'extérieur ; l'emplacement opposé au gris regarde donc l'intérieur. Son
voisin de ce côté est une pièce intérieure, qui, par le premier fait, n'a
aucune couleur de cadre à offrir. L'emplacement tourné vers l'intérieur ne
peut donc pas porter une couleur de cadre. Par le deuxième fait, la pièce
d'arête possède exactement un emplacement hors cadre, et il se trouve
précisément à l'opposé du gris, c'est-à-dire à la position intérieure. Les
deux emplacements de cadre sont donc forcés sur les deux positions tournées
vers l'anneau, le long du pourtour. Les coins, par le troisième fait,
apportent leurs deux emplacements non nuls à l'anneau.
Comptons. Demande : $56 \times 2 + 4 \times 2 = 120$ emplacements tournés
vers l'anneau. Réserve : $5 \times 24 = 120$ demi-arêtes de cadre. Les deux
nombres coïncident exactement. Chaque demi-arête de cadre est consommée sur
l'anneau, aucune ne reste, et aucune couleur hors cadre n'apparaît jamais sur
une jonction de l'anneau. C'est le sens de « sans aucun jeu » : le budget des
couleurs de cadre est dépensé jusqu'à la dernière demi-arête.
## L'anneau est un circuit eulérien
Cette saturation admet une lecture nette en théorie des graphes. Prenez un
multigraphe à 5 sommets, un par couleur de cadre, avec une arête par pièce de
bord, joignant ses deux couleurs tournées vers l'anneau. Un arrangement
valide de l'anneau du bord est exactement un circuit eulérien de ce
multigraphe : parcourir l'anneau, c'est lire un circuit fermé qui utilise
chaque arête-pièce une fois, et réciproquement.
Sur l'instance réelle, le multigraphe compte 60 arêtes, tous ses degrés
valent 24, et il est connexe : un circuit eulérien existe donc, comme il le
doit, puisqu'une solution complète existe. Parmi les 60 arêtes, 14 sont des
boucles (des pièces montrant la même couleur de cadre sur leurs deux
emplacements d'anneau), et les arêtes couvrent les 15 paires de couleurs
possibles, les 10 paires non ordonnées plus les 5 boucles.
## Ce que vaut la loi
Deux mesures de force accompagnent le théorème, une exacte et une
échantillonnée.
L'exacte est le branchement du premier pas. Fixez une pièce de bord posée ;
la pièce suivante le long de l'anneau doit s'accorder à la couleur de cadre
exposée. Parmi les pièces de bord, seules celles incidentes à cette couleur
conviennent : selon la couleur, 20, 21, 21, 22 ou 22 d'entre elles, moyenne
21,2, contre 59 candidates pour un ordre sans contrainte. L'accord de couleur
divise à lui seul le premier facteur de branchement par 2,78.
L'échantillonnée est une estimation par échantillonnage préférentiel
séquentiel sur 1000 constructions gloutonnes ensemencées de l'anneau. Le
log10 moyen de la probabilité d'un chemin achevé vaut -27,30 (écart-type
0,64) pour la graine 1 et -27,39 (écart-type 0,62) pour la graine 2, contre
une référence uniforme de $\log_{10}(1/59!) = -80,14$. Autrement dit : la loi
d'accord des couleurs concentre la masse de probabilité d'environ 53 ordres
de grandeur par rapport à un ordre uniforme des pièces de bord, tout en
laissant une rareté résiduelle proche de $10^{-27}$. Une marche gloutonne
purement guidée par les couleurs n'achève donc presque jamais un anneau :
8,7 % de complétions pour la graine 1, 9,3 % (graine 2, exécutée pour vérifier la cohérence ; le JSON archivé couvre la graine 1) pour la graine 2, la mesure
d'origine donnant 9,4 %. Les 87 constructions achevées de la graine 1 se sont
toutes refermées en circuit, extrémités concordantes, ce qui est la structure
eulérienne visible dans l'échantillon.
## Ce qui reste ouvert
Le décompte exact des circuits eulériens non orientés du multigraphe réel de
l'anneau est ouvert. Un raccourci à orientation unique via le théorème BEST a
été tenté pendant l'étude d'origine, démasqué comme sous-décompte par un test
de contrôle sur K5, puis retiré ; aucun décompte de circuits n'est revendiqué
nulle part. La mesure de complétion gloutonne ignore par ailleurs
l'alternance géométrique coins/arêtes de l'anneau physique : elle mesure la
loi d'accord des couleurs isolément, pas la contrainte complète de l'anneau.
## Où cela se place, et comment le vérifier
Le théorème découpe le puzzle le long du pourtour. Côté intérieur, les 56
pièces d'arête montrent chacune une couleur de la palette intérieure à 17
couleurs, et ces 56 arêtes constituent toute l'interface du bord avec les 196
pièces intérieures ; la comptabilité à travers cette couture est le sujet de
la [page sur l'équilibre du bord](/fr/research/why/border-balance/). Le visage
visible de la même séparation, les cinq couleurs rares cantonnées au
pourtour, se trouve sur la
[page de géographie des couleurs rares](/fr/research/why/rare-color-geography/).
Et cette page est le récit détaillé d'une des lois du
[balayage des théorèmes](/fr/research/why/theorem-sweep/), aux côtés du reste de
la structure exacte de l'instance.
Chaque nombre ci-dessus est recalculé par le vérificateur versionné du sujet
de reproduction indiqué dans les sources : un programme Rust unique qui
charge l'instance officielle, dérive les couleurs de cadre depuis les
données, vérifie exhaustivement chaque clause du théorème, construit le
multigraphe de l'anneau, exécute les deux mesures Monte-Carlo ensemencées et
produit un fichier JSON (versionné sous `results/ring_purity.json`) contenant
tous les chiffres cités ici. Les clauses déterministes se reproduisent à
l'octet près ; les mesures échantillonnées concordent, à l'erreur
d'échantillonnage près, sur des graines indépendantes.
## À lire aussi
- [La moisson de théorèmes : treize lois de structure](https://eternity2.dev/fr/research/why/theorem-sweep/) — Un seul arc de recherche, treize familles de théorèmes structurels : pureté de l'anneau, le plancher de parité à 479, le mur des 470 comme frontière de phase, les invariants de flux, la loi d'aire entropique, et les résultats d'impossibilité qui chiffrent chaque raccourci classique. Cette page est la carte.
- [L'équilibre du bord](https://eternity2.dev/fr/research/why/border-balance/) — Un plateau résolu dissimule une loi comptable toute simple : chaque couleur que le bord tend vers l'intérieur, l'intérieur la lui rend aussitôt. La violer, c'est savoir sur-le-champ que le plateau est faux ; la respecter, en revanche, ne garantit rien.
- [Les couleurs rares vivent sur le cadre](https://eternity2.dev/fr/research/why/rare-color-geography/) — Cinq des 22 couleurs d'Eternity II n'apparaissent que le long de l'anneau de bordure, chacune sur exactement 24 arêtes, jamais une seule fois à l'intérieur. Une séparation structurelle qui façonne la manière dont chaque solveur traite le cadre.
- [Conçu pour être insoluble : la recette](https://eternity2.dev/fr/research/why/design-recipe/) — Eternity II applique une recette pour obtenir le casse-tête à raccords de bords le plus difficile possible : forme compacte, aucune pièce symétrique ni dupliquée, palettes cloisonnées, fréquences plates, une seule solution attendue. La communauté a rétro-conçu chaque ingrédient dès l'année du lancement.
---
# Pourquoi le basin-hopping semble impossible
> Si l'on ne peut pas améliorer un excellent plateau en le peaufinant, peut-être peut-on sauter vers un autre excellent plateau. Sur chaque paire de records testée, c'est impossible, et la raison structurelle mérite qu'on la voie.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/sigma-cycles/
- Mise à jour: 2026-07-22
- Sujets: structure, local-search
- Reproduire: `just research-sigma-cycles`
- Source: Annonce du record 469 de Peter McGavin : l'un des plateaux contre lesquels les cycles sont calculés (groups.io msg 10045, septembre 2020) — https://groups.io/g/eternity2/message/10045
- Source: J. Houdayer, A cluster Monte Carlo algorithm for 2-dimensional spin glasses (arXiv) : l'original, en physique, du mouvement de transplantation de boucles entières — https://arxiv.org/abs/cond-mat/0101116
- Source: Théorème de Jordan pour le groupe symétrique : l'outil de théorie des groupes derrière le calcul d'absence de structure cachée — https://en.wikipedia.org/wiki/Jordan%27s_theorem_(symmetric_group)
---
Deux plateaux de haut niveau paraissent totalement différents, et pourtant ils
sont liés : on peut transformer l'un en l'autre en prélevant un ensemble de
pièces et en déplaçant chacune vers l'emplacement qu'occupait la suivante, tout
le long d'une boucle. Les mathématiciens appellent cette boucle un cycle.
Parcourez la boucle entière et vous arrivez à l'autre plateau.
Voici le hic. Entre les meilleurs plateaux, cette boucle est énorme. Passer d'un
plateau à 464 de Riotte à celui à 469 de McGavin, c'est une boucle imbriquée
allant jusqu'à 189 cellules, accompagnée de quelques plus courtes, déplaçant
presque toutes les pièces du plateau.
Une habitude de ce paysage mérite d'être nommée avant les schémas : la distance
en score ne dit rien de la distance en configuration. Dans une paire mesurée,
deux plateaux séparés de deux points de score différaient sur 88 % de leurs
positions ; dans une autre, deux plateaux séparés d'un point différaient sur 72
cellules. (Deux paires, des exemples illustratifs et non des statistiques de
population ; la preuve à l'échelle de la population, c'est le balayage
ci-dessous.) « Marcher d'un 456 vers un 457 voisin » n'est pas un plan sensé
quand le plateau « voisin » peut se trouver à presque tout un plateau de
distance. Sauf mention contraire, chaque score de cette page compte les arêtes
appariées sur 480 du puzzle canonique ; quand l'un de nos propres plateaux
apparaît, nous précisons si ses cinq pièces-indices sont en place.
## Une seule boucle, tout ou rien
> **[Interactive: SigmaCycleDiagram]** Rendered on the canonical page (link above); not shown in this markdown export.
## Essayez sur un vrai petit puzzle
Ce n'est pas un schéma : le moteur en direct trouve deux solutions réelles,
calcule les cycles effectifs entre elles, et note chaque étape que vous
franchissez.
> **[Figure]** Interactif : appliquer une partie du cycle de permutation — interactive: SigmaCycleLab. Rendered on the canonical page (link above); not shown in this markdown export.
## Comment nous le savons
Nous l'avons fait tourner sur chaque plateau que nous fournissons. Pour chaque
paire ordonnée de plateaux partageant un même jeu de pièces, nous calculons les
cycles exacts, puis essayons chaque mouvement partiel : n'appliquer qu'un préfixe
de boucle et re-noter. Cela fait **246 paires**, **1 154 grandes boucles** et
**54 238 applications partielles** au total. Aucune n'a atteint le score du
plateau dont elle partait. Chaque mouvement partiel a perdu du terrain ; au mieux
un préfixe s'est arrêté à un seul point sous son départ, et le pire a chuté de
224 points.
C'est ce qui en fait un mur. Pour passer d'un bon plateau vers un meilleur,
il faudrait s'engager à déplacer une boucle entière d'un coup, jusqu'à 195
cellules, sans aucune étape améliorante en chemin pour vous y guider. Toute
recherche qui procède par étapes est aveugle à un mouvement de ce genre.
Les préfixes ne ferment que la moitié de la porte ; les boucles complètes
ferment l'autre. L'un de nos plateaux à 458, décomposé contre le 469 de
McGavin, donne 11 boucles (tailles 80, 42, 42, 40, 25, 10, 4, 4, 3, 2, 2).
Appliquer une boucle seule fait chuter le score de 5 à 170 points ; même les
boucles de 2 cellules perdent 6 à 7 arêtes chacune. Seule la permutation
complète, toutes boucles ensemble, atteint 469. Une seconde paire raconte la
même histoire avec plus de détail : entre l'un de nos plateaux à 460 et le 469,
la permutation se scinde en 15 cycles (longueurs jusqu'à 52), tout cycle isolé
coûte 4 à 143 arêtes appariées, chaque combinaison testée des petits cycles
finit 10 à 29 arêtes plus bas, et seul le mouvement complet des 253 pièces
récupère le gain de 9 points. La proximité en score n'adoucit rien : contre des
plateaux à un, deux et trois points au-dessus de ce 460, le meilleur mouvement
à un seul cycle véritablement non trivial coûte encore 4 arêtes. Ce sont des
calculs exacts et déterministes, mais sur une poignée de paires de notre propre
collection ; lisez-les comme « sur chaque paire testée », pas comme un
théorème.
La version la plus tranchante : même quand nous connaissons un meilleur plateau
à une boucle de distance, les étapes ne peuvent pas couvrir cette distance.
L'un de nos plateaux à 459 diffère d'un 460 trouvé un jour de seulement 39
cellules, réparties en trois boucles de 21, 14 et 4 cellules. Chaque boucle
appliquée seule fait chuter le score de 9 à 11 points, la boucle de 4 cellules
comprise ; les paires de boucles atterrissent entre 442 et 454 ; seules les
trois ensemble donnent le 460. La recherche par destruction-réparation lancée
depuis le meilleur partiel à deux boucles (un 451) est remontée au mieux à 459,
jamais au 460 pourtant connu, sur 15 configurations (5 graines, 3 jeux
d'opérateurs, 30 secondes chacune). Une seule paire source-cible, et ce 460
était une trouvaille unique ; mais l'indivisibilité mord à 4 cellules
exactement comme elle mord à 154.
## Fabriquer nos propres boucles
Tout ce qui précède compare des paires de plateaux connues. Nous avons aussi
attaqué par l'autre côté : construire les boucles nous-mêmes. Prenez un plateau
fort, choisissez un anneau de cellules, faites tourner chaque pièce d'un cran
le long de l'anneau comme un seul mouvement indivisible, puis donnez au plateau
la réparation locale la plus forte que nous ayons pu bâtir (re-tourner chaque
pièce touchée, puis re-permuter exhaustivement le pire amas cassé, jusqu'à 6
cellules). Nous avons lancé environ 4 000 boucles construites de ce genre sur
deux plateaux : notre meilleur plateau bâti de zéro, à 461 arêtes appariées
avec les cinq pièces-indices en place, et un 456 issu du même pipeline. Ce sont
nos propres meilleurs, bien en dessous de ceux de la communauté ; voyez [la
page des records](/fr/research/records/) pour les situer. Sur 8 graines et plus et
trois familles de construction de boucles, le nombre de mouvements ayant
atteint un plateau *différent* au score de départ ou mieux : exactement zéro.
Chaque fois que la réparation remontait au score de départ, elle avait
silencieusement défait la boucle et reconstruit le plateau d'entrée à
l'identique.
Le mécanisme est la même arithmétique de frontière qui traverse toute cette
page : une boucle construite présente de nouvelles couleurs le long de tout son
pourtour, la perte avant réparation vaut à peu près la taille du pourtour, et
une réparation locale ne peut regagner ces arêtes qu'en inversant la boucle.
S'échapper exigerait des pièces affluant de tout le plateau, précisément le
mouvement tout-ou-rien que l'analyse des cycles réclame. Le mouvement non local
le moins cher trouvé coûte exactement une arête : échangez deux pièces
éloignées aux couleurs quasi identiques et vous obtenez un plateau
véritablement différent à 460, à deux cellules du 461. L'affirmation « zéro
évasion » vaut pour cet opérateur et cette force de réparation (fenêtres
locales jusqu'à 6 cellules), pas pour toute réparation concevable.
## Les cycles, mesurés
Les plateaux se répartissent en deux familles qui utilisent les mêmes pièces (le
visualiseur les stocke sous deux alphabets de couleurs), et nous testons chaque
paire à l'intérieur de chacune :
- Les plateaux-records vers le 469 de McGavin se résolvent en une boucle géante
allant jusqu'à 189 cellules, accompagnée de quelques plus courtes, déplaçant
environ 250 des 256 cellules.
- La plus grande boucle d'une paire va de 6 à 195 cellules, médiane 119 ; deux
paires se réduisent à une boucle unique, tout ou rien.
- **Chaque préfixe propre de chaque grande boucle donne un score strictement
moins bon que son plateau de départ, sur les 54 238 testés, sans une seule
exception.** Trois paires choisies à la main le suggéraient ; la population
complète le confirme sur les plateaux que nous fournissons, même s'il n'est
toujours pas prouvé que cela vaille pour tout plateau concevable.
Une propriété mesurée de plus compte pour qui conçoit des opérateurs : les
grandes boucles sont éparpillées, pas régionales. En décomposant l'un de nos
plateaux à 458 contre le 469, chaque boucle de 25 cellules ou plus couvre les
lignes 1 à 14 et les colonnes 1 à 14, autrement dit tout l'intérieur, et une
petite boucle de 4 cellules est exactement les quatre coins. (Une seule paire
de plateaux, mais cela concorde avec le mécanisme des coins plus bas.) Un
opérateur régional (détruire une fenêtre, réparer une fenêtre) ne peut donc
jamais contenir une boucle ; pire, chaque cellule d'une boucle a besoin d'une
*pièce différente*, pas d'un réarrangement des pièces déjà dans la région.
## Pourquoi tout mouvement partiel doit perdre : la loi de la frontière
Le recensement dit que les mouvements partiels perdent toujours ; voici la
raison géométrique, et elle est quantitative. Les cellules d'une boucle étant
éparpillées sur le plateau, tout sous-ensemble partiel possède une longue
frontière face aux cellules intactes. Chaque arête de frontière appose une
pièce déplacée contre un voisin auquel elle n'a jamais été appariée dans aucun
des deux plateaux d'arrivée, et presque chacune de ces arêtes casse. La perte
de score d'un mouvement partiel vaut, à bonne approximation, la taille de sa
frontière.
Mesuré sur la boucle de 154 cellules entre l'un de nos plateaux à 459 et le
469 : la frontière minimale sur toutes les applications partielles contiguës
est d'environ 190 arêtes de grille, atteinte vers la mi-parcours (autour de 113
cellules appliquées) ; le ratio frontière-par-cellule va de 1,07 à 4,0 selon la
taille du sous-ensemble. Ces chiffres de boucle géante viennent de ce seul
cycle ; des boucles plus petites à score égal, mesurées sur deux paires de
plateaux indépendantes, donnent 2,0 à 3,5 arêtes de frontière par cellule. La
réparation locale après un mouvement partiel regagne typiquement de l'ordre de
30 à 50 arêtes. Une capacité de réparation de 30 à 50 face à un trou d'environ
190 arêtes : cette inégalité, c'est le mur.
La loi est aussi serrée, partout où nous avons regardé. Sur plus de 200
applications partielles couvrant 5 boucles, la perte réalisée colle à la
frontière à 2 arêtes près pour les sous-ensembles jusqu'à 50 cellules ; entre
92 % et 100 % des arêtes de frontière cassent réellement. Le meilleur résultat
jamais observé perd 3 arêtes, sur un mouvement d'une seule cellule à frontière
4. Le sous-ensemble le plus mince de tout le corpus (ratio frontière-taille
0,67, un sous-ensemble de 45 cellules d'une boucle de 190 cellules entre deux
plateaux au même score) perd exactement sa frontière : moins 30 prédit, moins
30 mesuré. Aucun sous-ensemble à gain positif n'existe dans le corpus. C'est un
seul corpus interne de 7 plateaux ; la bonne formulation est « sur chaque paire
mesurée », pas « prouvé pour tout plateau ».
Ruser sur le sous-ensemble n'échappe pas non plus à la loi. Au lieu de blocs
contigus, nous avons fait croître gloutonnement le sous-ensemble qui minimise
la frontière, puis laissé la recherche par destruction-réparation nettoyer
derrière. Les sous-ensembles gloutons à frontière minimale de la boucle de 154
cellules atteignent bien 35 à 45 % de frontière en moins que les contigus ; aux
tailles 10, 20 et 40, les frontières font 24, 38 et 64 arêtes et les pertes
réalisées 22, 38 et 63, soit pour l'essentiel 100 % de la frontière. La
réparation depuis ces plateaux abîmés plafonne à 448, 441 et 430
respectivement, tous bien sous le départ à 459, sur 12 combinaisons de graines
et d'opérateurs à 30 secondes chacune ; une exécution de 5 minutes sur le
meilleur cas stagne encore à 446-448. (Une boucle, une méthode gloutonne de
construction du sous-ensemble.) La partie instructive : un mouvement partiel
n'a pas laissé le plateau à mi-chemin entre deux bons plateaux ; il l'a fait
tomber dans une troisième vallée, plus basse, dont le propre plafond se trouve
sous le point de départ. Le plateau de score était déterminé par la vallée, pas
par le budget.
## Le paysage que relient les boucles
Que relient donc les boucles ? Mesuré sur nos propres collections de plateaux,
le paysage à score égal est binaire : quasi-jumeaux ou quasi-étrangers, rien
entre les deux. Parmi sept de nos plateaux qui font tous 459, six forment une
seule famille, différant deux à deux de seulement 34 à 44 cellules sur 256 avec
des boucles de 9 à 25 cellules ; le septième est une île, différant de la
famille de 251 à 253 cellules avec des boucles jusqu'à 190 cellules. Aucune
paire ne se trouve à distance intermédiaire, et une raison algébrique fait
attendre exactement cette forme : les boucles se composent en conservant les
pièces, donc ajouter une petite boucle à une boucle géante donne une autre
boucle géante ; rien n'interpole entre une paire proche et une paire lointaine.
(Un corpus de 7 plateaux produits par notre propre pipeline, biaisé vers la
famille que notre recherche trouve ; le compte de la famille est une borne
inférieure et le nombre d'îles inconnu.)
À l'échelle de la population, l'image de l'île tient. En groupant les 135
plateaux uniques à 455 ou mieux que notre recherche ait jamais produits, en
reliant deux plateaux qui diffèrent de moins de 100 cellules, on obtient 47
composantes : 18 singletons, une plus grande famille de 22 membres (une famille
à 458), et le 469 de McGavin comme composante dont le plus proche voisin du
corpus se trouve à 247 cellules. C'est environ dix fois le plus grand opérateur
de destruction que notre recherche de réparation utilise (64 cellules). (Un
instantané d'un corpus biaisé par la recherche.)
Il existe aussi un candidat structurel au fait que les plateaux du sommet
diffèrent presque partout : ils s'engagent sur des arrangements différents des
quatre pièces de coin. Les trois plateaux du sommet examinés (le 469, un 459 et
un 458) utilisent trois permutations différentes des quatre coins ; le 469 et
le 459 partagent exactement une position de pièce sur 256, l'indice central
obligatoire, tandis que le 459 et le 458 en partagent 29. Déplacer une pièce de
coin vers un autre coin force le ré-appariement de tout l'anneau de bord de 60
cellules, qui conditionne à son tour l'intérieur : un mouvement à l'échelle du
plateau par construction. Avec 4! = 24 arrangements de coins possibles, le
paysage pourrait se scinder en jusqu'à 24 classes incompatibles par le bord ;
ce dernier pas est une conjecture tirée de trois plateaux, pas une mesure. Avec
[le mur de rigidité](/fr/research/why/rigidity-wall/), l'indivisibilité des boucles
et leur éparpillement, cela fait une quatrième ligne indépendante pointant vers
une même conclusion : seuls des mouvements à l'échelle du plateau relient les
plateaux de classe record.
## Y a-t-il une structure cachée dans les boucles ?
Question de suite naturelle : les permutations entre plateaux du sommet
obéissent-elles à une algèbre, une loi de groupe exploitable pour prédire ou
construire de nouveaux plateaux du sommet ? Nous avons calculé la réponse
exactement, et c'est non. Prenez les permutations reliant six plateaux du
sommet (trois 458, un 459, un 460 et le 469) et regardez le groupe qu'elles
engendrent dans le groupe symétrique sur 256 pièces. La seule structure
présente est forcée et sans intérêt : les pièces de coin vont sur des coins,
les pièces de bord sur des bords, l'intérieur sur l'intérieur. Cela est un
théorème pour tout plateau légal, puisqu'une pièce à k côtés gris ne peut
occuper qu'une cellule à k faces tournées vers l'extérieur. À l'intérieur de
ces trois classes (196 intérieures, 56 de bord, 4 de coin), le groupe engendré
est le groupe symétrique complet à une seule relation de parité près (la parité
intérieure égale la parité des coins ; la parité des bords est libre), un objet
d'ordre environ 4,3 × 10441. Deux paires de plateaux engendrent déjà
tout cela, exactement comme se comportent des permutations *aléatoires*. Et le
groupe n'a aucun rapport avec le score : appliquez l'un de ces ré-étiquetages à
tout plateau autre que sa cible unique et le score s'effondre (le 469 tombe à
119, un 458 à 44, un 459 à 50). (Calcul exact avec preuves via le théorème de
Jordan, sur les six plateaux analysés ; la contrainte de type de pièce seule
vaut pour tous les plateaux ; le résultat ne dépend pas du choix de base et ne
change pas si l'on exclut le plateau communautaire.)
Trois conséquences méritent d'être écrites noir sur blanc. Les statistiques de
longueur de cycle ci-dessus ne sont que la structure de cycle générique d'un
immense groupe symétrique. Les arguments de comptage par symétrie ne peuvent
pas prédire combien de plateaux du sommet existent. Et il n'y a aucun raccourci
algébrique pour recombiner de bons plateaux : la rareté des plateaux du sommet
est un phénomène de score et de géométrie, pas de symétrie.
L'expérience de recombinaison directe est d'accord. Nous avons croisé des
plateaux : 56 hybrides à lignes entrelacées issus de 18 parents à 458 ou mieux,
chacun avec 5 minutes de réparation. Les seuls hybrides à bien scorer (quatre,
à 461) étaient une illusion : leurs familles parentes partageaient tant de
placements que l'entrelacement reproduisait un plateau déjà dans notre
collection ; ces parents étaient déjà reliés par exactement les petites boucles
que décrit cette page, et la réparation n'a rien apporté (zéro conflit avant la
première itération). Chaque hybride issu de parents véritablement étrangers a
fini entre 371 et 436, et la réparation n'a pas pu les récupérer. Avec ce
schéma de croisement et ce court budget de réparation, le croisement soit
rebrasse des plateaux reliés par boucles, soit vole en éclats.
## Le seul petit mouvement gratuit : l'échange de jumelles
Une famille de petits mouvements préservant le score existe bel et bien, et
elle confirme la règle au lieu de la casser. Deux pièces quasi jumelles,
identiques sur trois de leurs quatre couleurs d'arête, peuvent échanger leurs
places ; l'échange change *quelles* arêtes cassent, pas nécessairement
combien. Appliqué au 469 de McGavin (les pièces de tuples de couleurs
13-16-14-16 et 13-16-14-18, qui diffèrent d'une seule arête, posées à deux
positions de la même ligne), un tel échange produit un plateau véritablement
différent qui score aussi 469 ; les deux plateaux diffèrent d'exactement 2
cellules. Celui-là est déterministe et vérifié sur les deux plateaux. Le jeu de
pièces canonique contient 5 paires jumelles et 114 paires quasi jumelles, donc
ces mouvements existent en quantité, mais ce sont des trocs, pas des gains :
sur nos propres plateaux, échanger deux pièces dont les quatre couleurs
coïncident comme multiensemble mais pas en ordre cyclique coûte toujours 4
arêtes (aucune rotation ne les réaligne), et le meilleur échange quasi jumeau
trouvé coûte 1. Un ensemble de niveau de score est clos par échanges de
jumelles, ce qui le rend épais dans cette seule direction triviale ; tout petit
mouvement non trivial perd. Qu'un échange de jumelles quelque part gagne un
point reste ouvert ; aucun de ceux que nous avons essayés ne l'a fait.
## Tout ce que nous avons lancé contre le mur
Les résultats ci-dessus suggèrent des contre-attaques évidentes, et nous les
avons essayées. Chaque entrée ci-dessous est l'échec d'une configuration,
cadré comme tel ; aucune n'est une réfutation universelle.
**La chaleur.** Une chaîne de Metropolis assez chaude pour accepter presque
tout mouvement n'escalade pas le mur ; elle tombe de la montagne. Des chaînes à
échanges de paires aléatoires parties de l'un de nos plateaux à 459, 100 000
itérations à chacune de six températures (T de 2 à 50), s'effondrent à des
scores de 20 à 25 en quelques milliers de pas et ne revisitent jamais 450 ou
mieux (la seule visite à cette hauteur est l'état de départ), malgré des taux
d'acceptation de 85 à 99 %. Une chaîne dont les mouvements sont des boucles
entières fait mieux en un sens étroit : elle navigue indéfiniment entre
plateaux au même score, planant à 459 et y visitant plusieurs plateaux
distincts, mais le maximum jamais vu est 459 (exécutions courtes : 500
itérations, 2 configurations). Un seul plateau de départ, et la seule famille
des chaînes chauffées simples ; des variantes plus fines comme le tempering
parallèle à mouvements de boucles ne sont pas testées ici, donc pas réfutées.
Le mécanisme : les plateaux du sommet sont une aiguille de mesure nulle dans
l'espace des configurations, et un marcheur aléatoire perd l'aiguille
instantanément ; les mouvements de boucle préservent le score en entier et le
perdent en partie, donc la chaîne peut errer sur un ensemble de niveau sans
jamais construire une ascension.
**Les transplantations de boucles entières.** Transplanter le jeu complet de
boucles d'un meilleur plateau « oracle » est un vrai opérateur ; c'est la
version puzzle du mouvement de cluster de la physique des verres de spin (le
Monte Carlo à clusters de Houdayer, en sources). Il a même marché une fois, à
plus basse altitude : appliquer le jeu complet de boucles d'un oracle à 456 sur
un plateau à 447, suivi d'une phase de redémarrage à haute température, a sauté
de 447 à 457 par-dessus une unique barrière de 76 cellules, d'un coup. Depuis
un plateau du sommet, jamais aucun gain : depuis un 457 contre deux oracles à
456 distincts, chacune des 4 à 6 boucles par paire a un delta strictement
négatif, et l'application complète fait tomber le plateau à 453-456. Une seule
instance de succès et deux paires d'oracles en échec, donc le cadre est « sur
les paires essayées » ; notablement, l'opérateur n'a jamais été testé avec un
oracle *meilleur* que le plateau de départ, faute d'en avoir eu un. Le
mécanisme : une transplantation n'aide que si la bonne région de l'oracle
recouvre la zone de désaccord du plateau courant ; entre vallées distinctes du
sommet, les bonnes régions ne s'alignent pas, et chaque boucle importe plus
d'erreurs qu'elle n'en corrige.
**Dire à la réparation où est la boucle.** Nous avons donné à la recherche par
destruction-réparation les cellules exactes qu'occupe une boucle : détruire
précisément celles-là, laisser la réparation les remplir. Aucun effet. Sur un
plateau partiellement construit (score 442, plus grande boucle de 71 cellules
contre une référence à 459), l'opérateur de destruction ciblant la boucle se
déclenche 9 à 13 fois par exécution et est toujours accepté, et pourtant les
scores finaux font 448 avec ou sans lui (exécutions de 120 secondes ; un
plateau, une graine, un budget). La partie instructive : la contrainte ne vit
pas dans les cellules de la boucle mais dans l'anneau d'arêtes intactes qui les
entoure, qui force la réparation à réinstaller les pièces mêmes qu'elle vient
de retirer. Il faudrait les *pièces* de l'autre plateau, pas seulement son
ensemble de cellules.
**L'adoption forcée.** Enfin nous avons tenté la téléportation : épingler 61
cellules d'un plateau du sommet aux paires de pièces caractéristiques de la
vallée du record (elles se concentrent dans les lignes du bas, là où ce plateau
est le plus rigide), puis laisser la réparation reconstruire tout le reste.
L'épinglage ravage le plateau, jusqu'à 254 sur 480, et une demi-heure de
réparation par tentative remonte au mieux à 374 sur 6 graines (meilleurs par
graine de 363 à 374) : très loin du départ à 461, sans parler du record. Un
plateau de départ, une taille d'ensemble d'épingles, aucun balayage du nombre
d'épingles. C'est encore la loi de la frontière : forcer un sous-ensemble de la
structure de destination sans la boucle entière est un mouvement partiel de
boucle sous un autre nom.
## Pourquoi c'est important
Conjuguée avec [le mur de rigidité](/fr/research/why/rigidity-wall/), cette
observation ferme d'un coup les deux voies de sortie évidentes. On ne peut pas
s'extraire localement d'un bon plateau, et on ne peut pas non plus sauter vers un
voisin, car le meilleur plateau le plus proche se trouve à un unique mouvement
indivisible de nombreuses cellules, sans étape améliorante pour vous y conduire.
Ces cycles atteignent le 469 de McGavin et le 470 de Blackwood ; lire le même
mur à travers les deux alphabets raconte une seule histoire. C'est une
explication plausible de la raison pour laquelle le record de 470 tient depuis
2021 : les mouvements qui le battraient semblent trop vastes pour qu'une
recherche pas à pas puisse les trouver.
Les ajouts ci-dessus affinent ce tableau sans le changer. Le mur ne cache pas
de symétrie exploitable : les boucles sont des mélanges génériques, preuve à
l'appui. La proximité en score ne l'adoucit pas : même à un point de distance,
le meilleur mouvement à un seul cycle non trivial perd. Les distances sont hors
d'échelle pour nos outils : le plateau le plus proche du 469 que nous ayons
jamais produit se trouve à 247 cellules, environ dix fois le plus grand
opérateur de destruction que manie notre recherche de réparation. Et le seul
mouvement gratuit, l'échange de jumelles, change quelles arêtes cassent mais
n'a jamais été vu en changer le nombre dans le bon sens.
*Le résultat est calculé exactement par `just research-sigma-cycles` et versionné
dans le [sujet sigma-cycles](https://github.com/raphael-anjou/eternity2/tree/main/research/topics/sigma-cycles),
qui lit les plateaux fournis, les regroupe par jeu de pièces partagé, et note
chaque préfixe propre de chaque grand cycle dans chaque paire ordonnée. Le
laboratoire interactif ci-dessus exécute le même mécanisme en direct sur de
petits puzzles fraîchement générés ; l'animation est une schématisation du
mécanisme, non un cycle en particulier. Le balayage des préfixes sur toute la
population est la partie couverte par ce pipeline reproductible ; les mesures
de la loi de la frontière, le groupement du paysage, le calcul de groupe, les
boucles construites et les expériences négatives ci-dessus sont des expériences
de carnet distinctes sur nos collections internes de plateaux, chacune
rapportée avec son propre cadre dans le texte et pas encore branchée au
pipeline automatisé.*
## À lire aussi
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [Où vivent les désaccords](https://eternity2.dev/fr/research/why/mismatch-geometry/) — Un plateau quasi parfait ne répartit pas uniformément ses rares erreurs. Il les concentre dans une seule bande de cinq rangées et laisse tout le reste impeccable. Quelle bande ? Cela dépend de la direction dans laquelle la recherche a rempli le plateau, et l'on voit le reflet sur les vrais plateaux record.
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
- [KEYRING](https://eternity2.dev/fr/research/lab/experiments/raphael-anjou/learning/keyring/) — Construire un plateau de zéro en classant chaque pièce suivante selon trois signaux appris de plateaux forts passés. A atteint 460 dans une famille de plateaux qu'aucune recherche antérieure n'avait percée.
---
# Le mur des 470 : une frontière de phase, pas une limite d'ingénierie
> Le plateau communautaire dans les hauts 460 se lit comme une frontière de phase entropique de l'instance, pas comme une limite du génie logiciel : le calcul exact sur le jeu officiel donne une densité de contraintes proche de 0,0094, un paysage recuit qui s'effondre au-delà de 470 et ne franchit 1 qu'à 480, et un nombre attendu de 10 à 20 solutions parfaites quasi orthogonales entre elles. Les nombres côté instance sont exacts ; le tableau du fossé de recouvrement en 16x16 est une conjecture assumée.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/the-470-wall/
- Mise à jour: 2026-07-22
- Sujets: structure
- Reproduire: `cd research/topics/the-470-wall/compute && cargo run --release --bin the_470_wall > ../results/landscape.json`
- Source: Achlioptas & Coja-Oghlan, Algorithmic barriers from phase transitions (FOCS 2008) : le regroupement des solutions et là où les algorithmes locaux calent dans les CSP aléatoires — https://arxiv.org/abs/0803.2122
- Source: Gamarnik, The overlap gap property: a topological barrier to optimizing over random structures (PNAS 2021) — https://www.pnas.org/doi/10.1073/pnas.2108492118
---
Les meilleurs plateaux publics se regroupent depuis des années dans les hauts
460, et le plafond se tient à 470 sur 480 (l'historique des records vit sur
la [page des records](/fr/research/records/)). La question posée ici est de
savoir si ces dix derniers points sont un problème d'ingénierie, quelque
chose qu'un meilleur backtracker ou une heuristique plus fine finira par
arracher, ou une propriété de l'instance elle-même. Traiter le jeu de pièces
officiel comme un membre d'un ensemble aléatoire à solution plantée donne une
réponse quantitative, et cette réponse désigne l'instance : la réserve de
plateaux qu'une recherche peut effectivement atteindre s'effondre exactement
là où la communauté s'est arrêtée.
L'argument comporte deux couches au statut très différent, et je les garde
séparées d'un bout à l'autre. Les nombres calculés sur le vrai jeu de pièces
sont exacts, et l'étape de calcul derrière cette page les reproduit bit à
bit. Le tableau structurel qui les interprète en 16×16 est une conjecture,
appuyée par l'énumération exhaustive de petites instances réglées sur le même
paramètre, et elle est étiquetée comme telle plus bas.
## Le sac, mesuré exactement
Les 256 pièces se répartissent en 4 coins, 56 pièces de bord et 196 pièces
intérieures. En écartant les 64 demi-arêtes grises du pourtour, il reste 960
demi-arêtes colorées, qui s'apparient en les 480 adjacences internes d'un
plateau rempli. La comptabilité est serrée : $960 = 2 \times 480$, sans
aucun jeu nulle part. Les scores de cette page comptent les adjacences
internes appariées sur 480, la même convention d'arêtes appariées que le
plafond communautaire ; rien ici ne porte sur la piste stricte à cinq
indices.
L'économie des couleurs se scinde ensuite en deux sous-systèmes qui ne se
parlent jamais. L'anneau du cadre, le cycle des 60 joints entre pièces de
bord, n'utilise que les couleurs 1 à 5, chacune présente sur exactement 24
demi-arêtes ; la probabilité que deux demi-arêtes de cadre tirées
uniformément s'accordent vaut $p_f = 5 \cdot (24/120)^2 = 0{,}200$. Le
sous-système intérieur couvre les 420 autres joints sur les couleurs 6 à 22
(cinq couleurs à 48 demi-arêtes, douze à 50), ce qui donne
$p_i \approx 0{,}0588$, presque exactement $1/17$. Ces deux probabilités
portent toute l'analyse.
Une vérification exacte de plus mérite d'être notée : le vrai sac ne contient
aucune pièce qui se répète par rotation. Face à un nul aléatoire apparié,
cela semble être la seule empreinte statistiquement significative de la passe
de conception ; le côté nul de cette comparaison demande encore son propre
générateur, seul le côté jeu réel (exactement zéro) est vérifié ici.
## Un seul nombre situe le régime
Le paramètre qui positionne Eternity II dans son ensemble est la densité de
contraintes : le nombre attendu de pièces qui conviennent à une case
intérieure totalement contrainte, dont les quatre voisines sont déjà posées.
Avec 196 pièces intérieures, 4 rotations chacune et une probabilité de
collision par arête de 0,0589 pour une arête de pièce intérieure aléatoire,
$$\mu = 196 \cdot 4 \cdot 0{,}0589^4 \approx 0{,}0094.$$
Un trou entièrement entouré admet environ un candidat sur cent. C'est très
en dessous de un, ce qui place l'instance en plein régime rigide des
ensembles de satisfaction de contraintes à solution plantée : le régime où la
théorie dit que l'ensemble des solutions se réduit à des points isolés et
bien séparés, et où les algorithmes locaux calent prouvablement avant de les
atteindre ([Achlioptas & Coja-Oghlan 2008](https://arxiv.org/abs/0803.2122),
[Gamarnik 2021](https://www.pnas.org/doi/10.1073/pnas.2108492118)). Le nombre
lui-même est une fonction exacte des vrais comptes de couleurs ; ce que le
régime implique à cette taille relève de la couche conjecturale, reprise plus
bas.
## Le paysage de score recuit
La pièce maîtresse côté instance est un comptage au premier moment : combien
de configurations de plateau *non corrélées* à la solution plantée atteignent
un score donné ? Le compte de base des placements respectant les classes
(coins aux coins, bords sur le pourtour, intérieures à l'intérieur, rotations
libres pour les pièces intérieures) vaut
$W_{\text{geom}} = 4! \cdot 56! \cdot 196! \cdot 4^{196} \approx 10^{559{,}9}$.
Le score d'une telle configuration aléatoire est la somme de 60 indicatrices
de Bernoulli($0{,}200$) pour le cadre et de 420 indicatrices de
Bernoulli($0{,}0588$) pour l'intérieur, et une convolution exacte en espace
logarithmique de ces 480 variables donne le paysage complet. Une
configuration uniformément aléatoire marque $36{,}7 \pm 5{,}7$.
| score | configurations non corrélées à ce score (log10) |
| ----: | ----------------------------------------------: |
| 37 | 558,8 |
| 200 | 462,8 |
| 400 | 186,6 |
| 460 | 59,6 |
| 470 | 33,1 |
| 480 | +1,28 |
Deux choses ressortent. D'abord, la réserve de plateaux non corrélés à haut
score reste astronomique remarquablement haut : environ $10^{60}$
configurations au score 460 et encore environ $10^{33}$ à 470. Ensuite, le
compte franchit 1 pratiquement à 480 même : le nombre attendu de placements
parfaits non corrélés au plateau planté vaut $10^{1{,}28} \approx 19$. Le
modèle de travail que cela chiffre est un ensemble de solutions de l'ordre de
10 à 20 plateaux parfaits, quasi orthogonaux entre eux et orthogonaux au
planté, au sommet d'une courbe d'entropie qui dépasse tout juste zéro.
## Exact en dessous, conjecture au-dessus
Tout ce qui précède cette ligne est un calcul exact sur le jeu officiel : les
comptes de classes, l'économie des 960 demi-arêtes, les deux probabilités de
collision, $\mu$, $W_{\text{geom}}$ et chaque ligne du tableau du paysage. La
commande de reproduction de cette page régénère tout cela depuis le moteur
partagé en moins d'une seconde, dans `results/landscape.json` du dossier du
sujet.
Ce que le paysage ne dit pas, c'est comment ces rares hauts scores sont
*disposés* : la masse entropique se connecte-t-elle aux plateaux parfaits, ou
un fossé vide les sépare-t-il ? À cette question je ne peux répondre
exactement que sur de petites instances. L'énumération exhaustive de plateaux
plantés $n \times n$ pour $n$ jusqu'à 7, avec le nombre de couleurs réglé
pour apparier la densité de contraintes, montre une tendance nette : à $\mu$
lâche, l'histogramme de recouvrement avec le planté de l'ensemble des
solutions est continu, et quand $\mu$ descend vers le 0,009 d'E2 il devient
bimodal puis s'effondre. Au point apparié ($n = 5$, 11 couleurs,
$\mu = 0{,}009$), l'énumération trouve la solution plantée, un amas juste à
côté d'elle, une grande famille à recouvrement zéro, et une bande totalement
vide entre les deux.
> **Là où commence la conjecture**
>
> Les énoncés en 16×16 (un ensemble de 10 à 20 plateaux parfaits quasi orthogonaux, un fossé de recouvrement vide en dessous, et le mur des 470 comme bord visible de ce fossé) sont des extrapolations de la tendance des petites instances le long du paramètre de densité de contraintes. C'est une conjecture, pas une mesure : aucun calcul faisable ne les vérifie directement à taille réelle. Le tableau du paysage et chaque nombre côté instance de cette page sont exacts ; la structure du fossé en 16×16 est la partie à tenir pour un modèle de travail.
## Lire le mur
Rapprochez la couche exacte et la couche conjecturale, et le plateau
communautaire cesse de ressembler à un déficit d'outillage. Une heuristique
qui grimpe le paysage de score puise dans la bande entropique, et cette bande
est profonde : avec $10^{33}$ configurations non corrélées encore disponibles
à 470, atteindre les hauts 460 est bon marché en un sens précis, et le génie
des solveurs moissonne cette bande depuis des années. Au-delà, la réserve
s'amincit d'une trentaine d'ordres de grandeur sur dix points de score, et si
l'extrapolation du fossé de recouvrement tient, il n'y a rien entre les deux
pour grimper : les dix points manquants sont la largeur d'une région vide qui
sépare les derniers plateaux entropiques d'une poignée de plateaux parfaits
isolés. C'est la propriété du fossé de recouvrement dans son rôle de manuel,
une barrière topologique qu'une recherche locale et stable ne peut pas
franchir, quelle que soit la qualité de l'implémentation.
Cette lecture s'accorde avec ce que nous mesurons ailleurs sur le wiki : le
[mur de rigidité](/fr/research/why/rigidity-wall/) trouve les plateaux records
figés en optima locaux isolés sans gradient vers l'extérieur, exactement la
sensation que devrait donner le bord inférieur d'un fossé vu d'en bas. Elle
précise aussi ce que « progresser » devrait vouloir dire. Plus de vitesse et
un meilleur ordre achètent des points entropiques, et ceux-ci s'épuisent vers
470 d'après le tableau ci-dessus ; ce qui franchira le fossé devra injecter
de la corrélation avec une vraie solution parfaite plutôt que grimper la
fonction de score. Les énoncés sur l'instance qui tiennent au niveau de la
preuve, par opposition au modèle de travail de cette page, sont rassemblés
dans le [balayage des théorèmes](/fr/research/why/theorem-sweep/).
## À lire aussi
- [La moisson de théorèmes : treize lois de structure](https://eternity2.dev/fr/research/why/theorem-sweep/) — Un seul arc de recherche, treize familles de théorèmes structurels : pureté de l'anneau, le plancher de parité à 479, le mur des 470 comme frontière de phase, les invariants de flux, la loi d'aire entropique, et les résultats d'impossibilité qui chiffrent chaque raccourci classique. Cette page est la carte.
- [Calibré sur le pic de difficulté](https://eternity2.dev/fr/research/why/phase-transition/) — Eternity II utilise 22 couleurs, réparties entre 17 couleurs intérieures et 5 réservées au cadre, et ce chiffre d'environ 17 se situe près du point où ce type de casse-tête est le plus difficile à résoudre (la transition est une bande, pas un entier unique).
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [Conçu pour être insoluble : la recette](https://eternity2.dev/fr/research/why/design-recipe/) — Eternity II applique une recette pour obtenir le casse-tête à raccords de bords le plus difficile possible : forme compacte, aucune pièce symétrique ni dupliquée, palettes cloisonnées, fréquences plates, une seule solution attendue. La communauté a rétro-conçu chaque ingrédient dès l'année du lancement.
---
# La moisson de théorèmes : treize lois de structure
> Un seul arc de recherche, treize familles de théorèmes structurels : pureté de l'anneau, le plancher de parité à 479, le mur des 470 comme frontière de phase, les invariants de flux, la loi d'aire entropique, et les résultats d'impossibilité qui chiffrent chaque raccourci classique. Cette page est la carte.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/theorem-sweep/
- Mise à jour: 2026-07-22
- Sujets: structure
- Source: Conway et Lagarias, Tiling with polyominoes and combinatorial group theory : l'ancêtre des arguments par invariants de bord pour les problèmes de pavage (JCTA 1990) — https://doi.org/10.1016/0097-3165(90)90057-4
- Source: Le théorème BEST, qui compte les circuits eulériens d'un graphe orienté : le bon outil (et un piège documenté) pour compter les arrangements de bordure — https://en.wikipedia.org/wiki/BEST_theorem
- Source: Chemins et circuits eulériens : la théorie classique à laquelle l'anneau de bordure se réduit — https://en.wikipedia.org/wiki/Eulerian_path
- Source: Johnson, Papadimitriou et Yannakakis, How easy is local search? : le cadre PLS derrière le résultat de complétude de la recherche locale (JCSS 1988) — https://doi.org/10.1016/0022-0000(88)90046-3
- Source: Ben-Sasson et Wigderson, Short Proofs Are Narrow : la machinerie de largeur de résolution derrière la borne inférieure d'épuisement (JACM 2001) — https://doi.org/10.1145/375827.375835
- Source: Krzakala, Montanari, Ricci-Tersenghi, Semerjian et Zdeborova, Gibbs states and the set of solutions of random CSPs : le tableau de la phase condensée sur lequel s'appuie l'analyse du paysage des scores (PNAS 2007) — https://doi.org/10.1073/pnas.0703685104
- Source: Gamarnik, The overlap gap property : le concept de barrière qui correspond à la bande de recouvrement vide mesurée (PNAS 2021) — https://doi.org/10.1073/pnas.2108492118
---
Pendant un moment de ce projet, j'ai posé les solveurs pour poser une autre
question : non pas « quel score puis-je atteindre » mais « que puis-je
démontrer ». Le plan était une moisson. Emmener le casse-tête dans chaque
branche des mathématiques qui a plausiblement quelque chose à en dire (flots et
coupes, combinatoire extrémale, physique statistique, algèbre, théorie des CSP,
automates, complexité des preuves, complexité de la recherche locale) et
pousser chaque branche jusqu'à ce qu'elle livre un théorème ou explique
précisément pourquoi elle ne le peut pas. La moisson a produit treize familles
de résultats. Cette page est la carte : quelques phrases par famille, avec des
liens vers les articles complets quand ils existent. Trois familles ont
aujourd'hui leur page dédiée ; les autres recevront la leur au fur et à mesure
que leurs reproductions arrivent dans le dépôt.
Une remarque de saveur avant la liste. Certains de ces résultats sont des lois
que le jeu de pièces respecte, d'autres des théorèmes d'impossibilité sur
l'échelle des scores, d'autres encore des négatifs propres : la preuve qu'un
outil standard d'un autre domaine, correctement appliqué, ne certifie rien ici.
Les négatifs sont énoncés avec le même soin que les positifs. Savoir qu'une
porte est verrouillée, et pourquoi, c'est ce qui permet d'arrêter d'en payer le
loyer.
## Les lois que le jeu de pièces respecte
**La pureté de l'anneau.** Les cinq couleurs qui n'apparaissent que sur les
pièces de bordure sont plus rares qu'il n'y paraît : leurs $5\times24=120$
demi-arêtes saturent exactement les 120 emplacements tournés vers l'anneau des
60 pièces de bordure, sans aucun jeu. Dans toute solution, chaque pièce de bord
est forcée de pointer son unique couleur non-cadre vers l'intérieur, et tout le
problème de la bordure se réduit à trouver un circuit eulérien dans un
multigraphe à 5 sommets et 60 arêtes. Article complet :
[la pureté de l'anneau](/fr/research/why/ring-purity/).
**Le comptage de l'anneau du cadre.** Cette famille chiffre ce que la loi de
l'anneau rapporte. Le raccord des couleurs à lui seul ramène le premier
placement de bordure de 59 candidats à environ 21, et un anneau construit
légalement au hasard reste vers $10^{-27}$ sur l'échelle des probabilités : 53
ordres de grandeur mieux qu'un ordre uniforme ($10^{-80}$), et toujours
astronomiquement loin de la certitude. Le cadre présente aussi une facture fixe
à l'intérieur : chaque couleur de cadre ferme exactement 12 joints de l'anneau,
et les 56 arêtes tournées vers l'intérieur portent une demande de couleurs,
déterminée par le seul jeu de pièces, que toute solution doit reproduire. Un
article dédié suivra.
**Les invariants de flux.** Donnez à chaque couleur un poids numérique et à
chaque pièce le vecteur de ses différences de poids est-ouest et sud-nord ;
sommé sur n'importe quelle région, cela se télescope en un flux de bord, et un
quart de tour agit sur le vecteur comme la multiplication par $i$. La
décomposition selon les quatre caractères du groupe des rotations donne le
treillis complet des invariants linéaires intrinsèques aux pièces : un
recensement des couleurs, une loi de flux à valeurs dans les entiers de Gauss,
de rang plein 22 sur le vrai jeu de pièces, et une parité en damier qui couple
la rotation d'une pièce à sa case. La loi de flux sert aussi de certificat
incrémental valide qui attrape les erreurs de placement en fin de partie. Un
article suivra.
**Un jeu de pièces quasi aléatoire.** Chaque statistique d'ordre deux auditée
(fréquences des paires de couleurs, matrices d'adjacence, spectre du graphe de
transition induit) est indiscernable d'un témoin aléatoire aux mêmes comptes de
couleurs ; le seul signal délibéré est l'absence connue de pièces dupliquées
par rotation. Côté génération, les preuves soutiennent des comptes de couleurs
imposés exactement sur un coloriage par ailleurs uniforme et cohérent avec le
raccord, et un théorème boucle la boucle : reconstruire la disposition cachée à
partir du sac de pièces est exactement aussi dur que résoudre le casse-tête. Un
article suivra.
## Là où l'échelle des scores se ferme
**Le plancher de parité : 479 est impossible.** Dans tout placement légal, les
apparitions d'une couleur d'un seul côté d'un joint vont par paires. Un unique
raccord manqué laisserait deux couleurs impaires, donc aucun plateau ne marque
479 : l'échelle saute de 478 à 480. Le défaut minimal non nul est 2, réalisé en
échangeant des pièces quasi jumelles, et autour de toute solution il existe au
plus 76 plateaux à un coup de ce défaut : les presque-réussites sont
prouvablement rares, et non abondantes. Article complet :
[le plancher de parité des défauts](/fr/research/why/parity-defect-floor/).
**Le paysage recuit et le mur des 470.** Traitez les plateaux non corrélés à la
solution d'origine comme un ensemble aléatoire et comptez-les par score : le
compte est astronomique jusqu'à environ 465 à 470 puis s'effondre au-delà. Le
plateau communautaire vieux de vingt ans se lit alors comme une frontière de
phase, pas comme un échec d'ingénierie. La même analyse évalue l'instance à
environ 10 à 20 plateaux parfaits mutuellement quasi orthogonaux, des aiguilles
isolées entourées d'une bande de recouvrement vide ; c'est exact sur les
petites instances plantées et une conjecture énoncée telle quelle à pleine
taille. Le meilleur plateau communautaire est à 470 sur la piste ouverte et 464
sur la piste stricte à cinq indices ; les conventions et le tableau complet
vivent sur [la page des records](/fr/research/records/). Article complet :
[le mur des 470](/fr/research/why/the-470-wall/).
**La loi d'aire entropique.** Le casse-tête a deux règles : les bords doivent
se raccorder, et chaque pièce ne sert qu'une fois. Le budget entropique mesuré
montre que la première règle est généreuse et que la seconde porte pour
l'essentiel toute la difficulté, l'unicité des pièces effondrant le compte des
blocs légaux à une échelle mesurable. Cette famille a déjà sa page :
[l'entropie et la loi d'aire](/fr/research/why/entropy-area-law/).
## Les machineries qui ne peuvent prouvablement pas le comprimer
**La largeur du CSP.** La grille nue de 16 par 16 a une largeur arborescente
d'exactement 16, ce qui semble exploitable jusqu'à ce que la contrainte globale
de différence sur les 256 cases entre en scène et rende vide tout argument de
tractabilité par la largeur. Le tableau de la propagation concorde : la
cohérence d'arc ordinaire réduit 48 des 196 domaines intérieurs, la cohérence
globale par couplage en réduit 191. La contrainte qui fait mal est celle
qu'aucune décomposition ne peut couper. Un article suivra.
**Les relaxations convexes.** Le lift SDP standard et une relaxation LP
correctement dérivée, construits exactement sur de petites sous-instances
plantées aux optima connus, ne certifient que le plafond trivial et manquent
des obstructions qu'un comptage élémentaire résout immédiatement. À l'échelle
de cette instance, la convexité ne rapporte rien. Un article suivra.
**Les certificats algébriques.** Dans le Nullstellensatz à degré borné sur
GF(2), tout ce que la propagation par comptage d'un bon solveur fait déjà
possède un certificat de degré 2, et rien d'autre n'est bon marché : réfuter un
défaut de réutilisation de pièce dans une fenêtre $K\times K$ exige un degré
qui croît avec l'aire, donc aucun certificat algébrique global n'existe à
l'échelle du plateau. L'alternative par réseaux de tenseurs meurt d'un calcul
de rang : le tenseur par case a une dimension de lien effective proche de 289,
sans trou spectral contre lequel tronquer. Un article suivra.
**Aucune compression sans perte du front.** Un programme dynamique exact sur
les fronts de balayage ne comprime que si deux ensembles distincts de pièces
utilisées peuvent fusionner sans risque, et un argument à la Myhill-Nerode
montre qu'ils ne le peuvent jamais, quel que soit l'ordre de balayage ; mesuré
sur la vraie instance, le front exact de la première rangée est multiplié par
environ 8,9 à chaque colonne. Les découpes en meet-in-the-middle échouent pour
une raison complémentaire : les deux moitiés puisent dans le même stock fini de
pièces, donc l'optimum à deux voies est dégénéré et aucune signature
d'interface valide n'existe en deçà de l'égalité littérale. Un article suivra.
## Le plancher de complexité
**La recherche locale est PLS-complète.** Pour la famille naturelle d'instances
de raccord de bords qui contient ce casse-tête, le paysage d'amélioration est
PLS-complet (démontré pour une palette généralisée, le raffinement à palette
bornée étant énoncé comme conjecture), et décider si un plateau meilleur donné
est atteignable par les seuls coups améliorants est PSPACE-complet. Un plateau
de plusieurs années est le comportement attendu d'un tel paysage, pas la
signature d'un solveur mal réglé. Un article suivra.
**La complexité des preuves d'épuisement.** Chaque sous-arbre « aucune
complétion n'existe ici » qu'un backtracker referme est une réfutation par
résolution arborescente, et son coût est borné inférieurement par la largeur de
résolution, gouvernée par la coupe autour de la région ouverte. La contrainte
d'unicité des pièces n'apporte aucune difficulté de type pigeonnier que la
résolution étendue pourrait attaquer, car le raccord des bords raréfie le
graphe de compatibilité pièces-cases jusqu'à une quasi-permutation. La
conséquence est nette : l'apprentissage de clauses et de meilleurs encodages
rapportent des facteurs polynomiaux, et aucune méthode de la famille résolution
n'épuise super-polynomialement plus vite que ce que nous faisons déjà tourner.
Un article suivra.
## Ce que la moisson change
Le but n'a jamais été de baisser les attentes. Un plateau parfait existe par
construction, et rien dans ces treize familles ne touche à ce fait. Ce que la
moisson fait, c'est remplacer le folklore par des énoncés chiffrés : le mur a
un mécanisme, le plateau de scores a une classe de complexité, et chaque
raccourci manquant a une preuve d'impossibilité au lieu d'une vague réputation.
Chaque route encore ouverte vient désormais avec la facture qu'elle devra
payer, et c'est un bien meilleur point de départ pour la prochaine tentative
qu'une carte vierge.
## À lire aussi
- [Pureté de l'anneau : le bord est un sous-puzzle clos, sans aucun jeu](https://eternity2.dev/fr/research/why/ring-purity/) — Cinq des 22 couleurs ne touchent jamais les 196 pièces intérieures. La liste des pièces force toute solution valide à dépenser les 120 demi-arêtes de cadre sur l'anneau du bord : un sous-puzzle autonome à jeu exactement nul (120 = 120), un circuit eulérien sur cinq sommets, relié à l'intérieur par seulement 56 arêtes tournées vers le centre.
- [Pourquoi 479 est impossible](https://eternity2.dev/fr/research/why/parity-defect-floor/) — Un argument de comptage sur le jeu de pièces officiel interdit un score d'exactement 479/480 : les demi-arêtes de chaque couleur viennent en nombre pair, et un unique raccord cassé laisserait deux comptes impairs. Le plancher sous le parfait est 478, et au plus 76 quasi-solutions à un coup peuvent entourer une solution.
- [Le mur des 470 : une frontière de phase, pas une limite d'ingénierie](https://eternity2.dev/fr/research/why/the-470-wall/) — Le plateau communautaire dans les hauts 460 se lit comme une frontière de phase entropique de l'instance, pas comme une limite du génie logiciel : le calcul exact sur le jeu officiel donne une densité de contraintes proche de 0,0094, un paysage recuit qui s'effondre au-delà de 470 et ne franchit 1 qu'à 480, et un nombre attendu de 10 à 20 solutions parfaites quasi orthogonales entre elles. Les nombres côté instance sont exacts ; le tableau du fossé de recouvrement en 16x16 est une conjecture assumée.
- [L'entropie et la loi d'aire](https://eternity2.dev/fr/research/why/entropy-area-law/) — Eternity II a deux règles : les bords doivent coïncider, et chaque pièce ne sert qu'une fois. La première est généreuse. Toute la difficulté tient dans la seconde.
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [Cette instance est-elle NP-complète, et comment l'encoder ?](https://eternity2.dev/fr/research/why/how-hard-is-this-instance/) — L'appariement de bords est NP-complet en tant que famille, mais cela ne dit rien d'un plateau 16×16 fixé : une instance isolée est une constante, pas un problème. Ce qui est vrai, c'est la dureté au pire cas de la famille et la dureté empirique de cette instance, et comment écrire le puzzle pour un solveur SAT, de couverture exacte ou de PLNE, avec de petits croquis détaillés. Une mesure sur plateaux plantés chiffre le choix de la formulation : une falaise de résolubilité qu'un paradigme de recherche heurte et qu'un autre franchit, et qui bouge avec le nombre de couleurs.
- [Records et solveurs](https://eternity2.dev/fr/research/records/) — Eternity II n'a jamais été résolu, mais près de deux décennies d'efforts collectifs ont porté le meilleur plateau à 470/480. Qui détient quoi, comment ils y sont parvenus, et pourquoi certains plateaux « 480 » annoncés ne correspondent pas au vrai casse-tête.
---
# Quel mur arrête quelle méthode
> La section recherche a deux versants : les murs structurels qui rendent Eternity II difficile, et les algorithmes conçus pour les franchir. Cette page fait le pont : chaque méthode confrontée au mur qu'elle attaque réellement, et le score auquel ce mur l'a arrêtée.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/walls-and-methods/
- Mise à jour: 2026-07-21
- Sujets: structure
- Source: Ansótegui, Béjar, Fernández & Mateu, How Hard is a Commercial Puzzle: the Eternity II Challenge — https://repositori.udl.cat/server/api/core/bitstreams/0b6533fe-54e5-4070-85fe-80f7d35837d8/content
---
C'est l'outil pour choisir son créneau. Si vous voulez décider où investir vos
efforts, lisez les colonnes de haut en bas : choisissez le mur qui vous
intéresse le plus, et le tableau vous remet chaque méthode qui l'a attaqué et le
score exact où elle s'est arrêtée. Pour un panorama plus large par famille de
méthodes, voyez la [carte de toutes les approches connues](/fr/research/build/approaches-map/) ;
pour les angles encore ouverts, le tableau des
[problèmes ouverts](/fr/research/open-problems/) ; et pour les approches qui, de
manière prouvée, ne font pas bouger le score, les
[impasses](/fr/research/build/dead-ends/).
Chaque case de la carte ci-dessous repose sur les travaux publiés de ce projet.
Les quatre murs eux-mêmes sont corroborés par la littérature publiée ; les
résultats d'expériences sont le travail propre de ce projet, chacun documenté sur
sa propre page ; ils ne sont pas présentés comme vérifiés de l'extérieur.
## Sur quoi repose chaque mur
Tous les murs ne sont pas de même nature de preuve. Certains sont des calculs
exacts et déterministes versés dans ce dépôt ; l'un est répliqué de l'extérieur
par plusieurs méthodes indépendantes ; plusieurs sont des mesures réelles prises
sur l'unique planche Eternity II et son jeu de records. C'est une base légitime,
mais le lecteur mérite de savoir laquelle est laquelle avant de s'appuyer sur une
ligne. Le tableau ci-dessous ramène chaque affirmation structurelle de cette
section à la forme la plus forte que ses preuves soutiennent réellement, au
niveau de cette preuve, à la présence d'une réplication externe, et à la seule
réserve à garder en tête.
> **Les quatre niveaux**
>
> - **Prouvé, externe.** Un théorème ou un calcul exact qu'un tiers a énoncé ou répliqué, et la page cite ce tiers. - **Prouvé, interne.** Un calcul exact et déterministe réalisé ici, code et résultat versés sous `research/topics/` et reproductibles depuis la commande de la page. - **Mesuré, instance unique.** Une mesure réelle, prise sur l'unique planche Eternity II (ou une planche de type E2), sans réplication. Vraie, et non un défaut en soi, mais c'est un seul point de donnée. - **Conjecture.** La page elle-même présente l'affirmation comme non prouvée en général. Un mur n'est pas déclassé pour avoir été mesuré sur une instance unique. Il ne l'est que là où un niveau inférieur est présenté comme supérieur, et aucun ici ne l'est.
| Mur / affirmation | Forme la plus forte soutenue | Niveau | Réplication externe | La seule réserve |
| --- | --- | --- | --- | --- |
| [Pic de difficulté](/fr/research/why/phase-transition/) | 17,14 couleurs intérieures découlent du critère d'une solution attendue ; 17 est proche du pic de difficulté de recherche pour l'assemblage de bords encadré | Prouvé, externe | Oui : la dérivation de Owen en 1947 ; Ansótegui, Béjar, Fernández & Mateu confirment le pic | « Une solution attendue » est une moyenne au premier moment supposant des couleurs de bord indépendantes ; elle situe le pic, elle ne compte pas les solutions |
| [Théorie complexe / l'entonnoir](/fr/research/why/complex-theory/) | Un estimateur au premier moment de la largeur d'arbre et du nombre de solutions, juste à un facteur deux près partout où on a pu le vérifier | Conjecture (badge de la page), sur réplication externe | Oui : le modèle de Owen ; le portage C de McGavin et sa résolution 10×10, dans la prédiction | C'est une moyenne, aveugle au caractère réellement distinct des partiels comptés ; un outil pour classer les ordres de balayage, jamais un compte exact ni une borne |
| [Aucun coup forcé](/fr/research/why/no-forced-moves/) | Un décompte exhaustif exact sur le jeu intérieur officiel : aucune pièce intérieure n'est jamais forcée à un seul partenaire droit (73 à 137 partenaires chacune) | Prouvé, interne | Aucune réplication externe ; le décompte est propre au projet, versé et reproductible | Il compte la compatibilité par paires sur le jeu complet, pas les candidats dans une planche partielle vivante ; une propriété des pièces, pas une preuve que la recherche ne se resserre jamais |
| [Motifs interdits](/fr/research/why/forbidden-patterns/) | Décomptes exhaustifs exacts : 38,96 % des paires, 83,26 % des L-triominos, 99,72 % des carrés 2×2 sont infaisables sur des pièces intérieures distinctes | Prouvé, interne | Les décomptes 2×2 sont le résultat exact versé du projet ; les 20 paires-coins vides sont une observation communautaire citée de 2008 | La lecture « le décompte de patchs interdits suit la distance à une solution » est un signal heuristique, pas une distance monotone prouvée |
| [Loi d'aire de l'entropie](/fr/research/why/entropy-area-law/) | Les décomptes de blocs A(n)/B(n) sont désormais exacts en dépôt jusqu'à n=3 (B(2)=4 059 952 recoupe la table de sous-grilles), donnant un exposant en dépôt α≈0,044 ; la limite d'entropie près de 0,67 et le point d'effondrement sont des extrapolations | Prouvé, interne (les décomptes de blocs) + mesuré (l'ajustement) | Partiel : le lemme de Fekete et l'entropie de Shannon sont les théorèmes externes qui rendent la limite bien définie ; l'ajustement de α et l'échelle d'effondrement sont propres au projet | Le théorème garantit qu'une limite positive existe ; il n'en fixe pas la valeur. L'exposant est ajusté sur n≤3 et sa valeur par bloc croît encore, donc le point d'effondrement des grands patchs est une extrapolation au-delà des largeurs comptées |
| [Rigidité](/fr/research/why/rigidity-wall/) | Sur les planches records publiques, aucun réarrangement des pièces propres d'une planche dans un halo jusqu'à quatre cases ne clôt un décalage (SAT : UNSAT), désormais versé | Prouvé, interne pour le halo SAT ; la table MIP plus profonde est prouvée pour les régions closes mais portée depuis un article hors site | Oui, le mur le mieux répliqué : les tests de gel et de résidu SAT de Millilaw reproduits ici avec un contrôle positif ; le noyau gelé du recuit GPU de benj39100 l'atteint par une troisième méthode | La preuve versée du site est le halo SAT au rayon 4 sur cinq planches (quelques instances au rayon 4 dépassent le temps, notées ouvertes). La table MIP et la borne planche entière ≤476 proviennent de l'article hors site, et l'énoncé « toutes planches » est une conjecture |
| [Sigma-cycles](/fr/research/why/sigma-cycles/) | Sur **chaque** paire ordonnée de même jeu de pièces des planches embarquées (246 paires, 1 154 grandes boucles), **chaque** préfixe propre de chaque grande boucle score strictement moins que son départ, sur les 54 238 applications partielles | Prouvé, interne (un énoncé de population sur le jeu embarqué) | Aucune réplication externe ; calculé ici contre le 469 de McGavin et les planches records et de projet embarquées | Le décompte est exact sur les planches livrées ; la propriété « tout sous-cycle est pire » n'est toujours pas prouvée pour toute planche possible. Une forte observation de population, pas un théorème général |
| [Géométrie des décalages](/fr/research/why/mismatch-geometry/) | Sur les planches records et de projet, les décalages résiduels se groupent dans une bande de rangées qui bascule avec le sens de construction ; un objectif de comptage de trous y dépose les restes | Mesuré, instance unique | Partiel : le basculement selon le sens est la lecture du projet ; la planche à sept trous de Verhaard et le résidu en bande haute de Zamofing sont cités comme observations de même sens, désormais vérifiables dans l'archive étendue | Un motif sur une poignée de planches avec une histoire mécaniste, pas une preuve |
| [Vol de pièce](/fr/research/why/piece-theft/) | Un décompte exact des demandes (nord, ouest) sur le jeu intérieur : la plupart ont un à trois fournisseurs, et un nombre précis en a exactement un | Prouvé, interne (les décomptes) ; mesuré (le mécanisme « où meurent les solveurs ») | Aucune réplication externe ; Régin 1994 est cité comme la théorie all-different qui nomme le mécanisme | Les décomptes de fournisseurs rares sont exacts ; « c'est là que meurent les vrais solveurs » est un mécanisme illustré sur l'instance, pas un taux d'échec mesuré sur les solveurs |
| [Géométrie des indices](/fr/research/why/hint-geometry/) | Sur un puzzle 16×16 de type E2, des indices dispersés le résolvent en minutes là où des rangées contiguës empilées échouent, car le travail vit dans la seconde moitié du remplissage | Mesuré, instance unique (une planche de type E2, pas le puzzle officiel) | Oui, proprement attribué : la résolution à 18 indices de McGavin et son arbre de 41 milliards de nœuds ; les statistiques de profondeur de Joe | Pas le puzzle officiel, dont les cinq indices fixes diffèrent. Les chiffres de profondeur sont l'échantillon d'un seul backtracker |
| [Équilibre du bord / NS-1](/fr/research/why/border-balance/) | Une condition nécessaire exacte ; les quatre solutions complètes connues la vérifient ; un déficit positif certifie l'infaisabilité. La part intérieur-intérieur des erreurs restantes est désormais exacte : **86,9 %** sur les neuf planches embarquées de classe 469, aucune bord-bord | Prouvé, externe (la condition), prouvé, interne (la répartition des erreurs) | Oui pour la condition, citée aux énoncés communautaires 2007–2022 ; la répartition des erreurs est le recompte versé du projet | La condition est nécessaire, jamais suffisante : un déficit nul ne prouve rien, et l'invariant est aveugle à la majorité intérieur-intérieur des erreurs restantes. Le rendement d'élagage est une mesure sur instance unique, pas encore un banc versé |
| [Géographie des couleurs rares](/fr/research/why/rare-color-geography/) | Un décompte exact sur le jeu officiel : les cinq couleurs de bord n'apparaissent jamais sur un bord intérieur | Prouvé, interne | Aucune réplication externe du décompte ; l'intention de conception 17+5 est citée à Owen | Correctement présenté comme structurel (bordure grise, pools de couleurs séparés), pas une ruse de rareté ; l'étiquette « rare » est un artefact du moindre nombre de bords de bordure |
| [Recette de conception](/fr/research/why/design-recipe/) | La communauté a reconstruit une recette cohérente de puzzle le plus dur, ingrédient par ingrédient, chacun sourcé à un message de l'année de lancement | Conjecture (badge de la page), chaque ingrédient sourcé de l'extérieur | Oui, densément : les dérivations et mesures de Owen, le recensement de l'espace de conception, la chaîne de provenance jusqu'à Selby et Riordan | Une reconstruction de l'intention de conception, pas un énoncé que les concepteurs ont publié ; la page la badge conjecturée |
| [Cadre de complexité](/fr/research/why/how-hard-is-this-instance/) | L'assemblage de bords est NP-complet comme famille ; une planche fixe unique est une constante, pas un problème ; la difficulté d'E2 est empirique sur un espace ~10^557 | Prouvé, externe | Oui : Demaine & Demaine 2007 pour la NP-complétude ; Ansótegui et al. pour le cas empirique | La distinction de catégorie porte le raisonnement : la NP-complétude plafonne ce que les solveurs généraux peuvent promettre, elle ne dit rien de cette planche |
| [Élagage contre vitesse](/fr/research/why/prune-vs-speed/) | L'argument de composition est de l'arithmétique exacte ; sur E2, un élagage légal coûte souvent plus que le sous-arbre qu'il retire | Prouvé (l'arithmétique), mesuré (le verdict « l'élagage ne paie pas ») | Partiel : le principe est autonome ; le verdict communautaire est cité à McGavin et 95A31, désormais vérifiables dans l'archive étendue | Les chiffres de l'arbre de démonstration sont illustratifs, pas une mesure d'un vrai solveur, et la page le dit |
Trois évolutions depuis le premier tracé de cette carte méritent d'être
soulignées, car elles font monter des affirmations d'un niveau. Les sigma-cycles
étaient une observation sur trois paires ; c'est désormais un énoncé exact sur
chaque paire de même jeu de pièces des planches embarquées, 54 238 applications
partielles sans une exception. La répartition des erreurs de bord est désormais
un recompte exact (86,9 % intérieur-intérieur) plutôt qu'un chiffre hors site.
Et les décomptes de blocs de la loi d'aire sont désormais calculés en dépôt et
se reproduisent depuis la commande de la page, l'exposant étant ajusté sur la
plage comptée exactement. Enfin, les quatre citations communautaires qui se
situaient au-delà de l'instantané d'archive valident désormais l'export
étendu, si bien que les passages de corroboration de la rigidité, de la
géométrie des décalages et de l'élagage contre vitesse reposent sur des sources
qu'un lecteur peut vérifier.
La lecture d'ensemble : seule la rigidité porte trois méthodes indépendantes
(SAT, MIP, recuit) aboutissant à un même verdict. Les autres murs sont des
calculs exacts propres au projet ou des mesures sur instance unique, sur
l'unique planche qui compte. Lisez « corroboré par la littérature » comme
signifiant que la transition de phase et le gradient manquant ont été
reproduits ailleurs, pas chaque mur.
## Les quatre murs, en une ligne chacun
Chacun d'eux est une version d'un même énoncé : il n'y a rien de local à élaguer.
- **[Aucun coup forcé](/fr/research/why/no-forced-moves/)**. Chaque case intérieure
conserve 73 à 137 pièces légales, si bien que le facteur de branchement ne
s'effondre jamais.
- **[Le pic de difficulté](/fr/research/why/phase-transition/)**. Avec ≈17 couleurs
intérieures, le puzzle se situe à la transition de phase : environ une solution
attendue, le pire endroit où chercher.
- **[La loi d'aire](/fr/research/why/entropy-area-law/)**. Les plateaux partiels
réellement distincts s'effondrent à mesure que l'aire remplie grandit, mais aucun score local
ne peut percevoir ce fait global.
- **[La rigidité](/fr/research/why/rigidity-wall/)**. Les records sont localement
figés ; le pas vers un meilleur plateau est un unique échange géant et
indivisible, sans gradient à suivre.
## La carte
Les colonnes sont les murs ; les lignes, les méthodes, meilleur score en tête. Une
marque pleine (●) signifie que la méthode travaille fondamentalement contre ce
mur. Le plafond communautaire sur ce puzzle est 470 ; la solution complète est 480.
| Méthode | Meilleur | [Coups forcés](/fr/research/why/no-forced-moves/) | [Pic de difficulté](/fr/research/why/phase-transition/) | [Loi d'aire](/fr/research/why/entropy-area-law/) | [Rigidité](/fr/research/why/rigidity-wall/) | Nouveau bassin |
| --- | --- | :-: | :-: | :-: | :-: | --- |
| [PALIMPSEST](/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/) · depuis le corpus | 463/480 | | | | ● | non |
| [PRIOR](/fr/research/lab/experiments/raphael-anjou/learning/prior/) · from scratch | 460/480 | | ● | | ● | non |
| [KEYRING](/fr/research/lab/experiments/raphael-anjou/learning/keyring/) · from scratch | 460/480 | | | | ● | nouvelle famille |
| [REPLAY](/fr/research/lab/experiments/raphael-anjou/learning/replay/) · décoder et rejouer | 460/480 | | | | ● | non |
| [GAUNTLET](/fr/research/lab/experiments/raphael-anjou/pipelines/gauntlet/) · from scratch | 458/480 | | | | ● | nouvelle famille |
| [CLOISTER](/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/) · ancrer et contraindre | 453/480 | | | ● | ● | non |
| [MIDDEN](/fr/research/lab/experiments/raphael-anjou/pipelines/midden/) · ancrer et contraindre | 452/480 | | | ● | ● | non |
| [LADDER](/fr/research/lab/experiments/raphael-anjou/pipelines/ladder/) · concentrer l'effort | 451/480 | ● | ● | | | nouvelle famille |
| [LODESTONE](/fr/research/lab/experiments/raphael-anjou/learning/lodestone/) · from scratch | 451/480 | ● | | | | non |
| [MOSAIC](/fr/research/lab/experiments/raphael-anjou/pipelines/mosaic/) · résoudre un fragment exactement | 448/480 | ● | ● | | | non |
| [BANDSAW](/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/) · résoudre un fragment exactement | 437/480 | ● | ● | | | non |
| [STAGED](/fr/research/lab/experiments/raphael-anjou/pipelines/staged/) · from scratch | 436/480 | ● | | ● | | non |
### Comment la lire
Presque toutes les méthodes finissent contre la rigidité, le mur qui dit que les
grands plateaux sont des îlots isolés. Les méthodes construites from scratch ou à
partir du corpus (PRIOR, KEYRING, PALIMPSEST, GAUNTLET) tentent d'atteindre un
nouvel îlot en pilotant la construction par un signal appris ; elles plafonnent à
458–463 et deux d'entre elles atteignent bien des familles réellement nouvelles,
mais aucune ne passe jusqu'au plafond. Les méthodes de concentration et exactes
(LADDER, BANDSAW) attaquent plutôt la recherche elle-même (le facteur de
branchement élevé et le pic infouillable) et le paient en fin de partie. Les
méthodes d'ancrage (CLOISTER, MIDDEN) localisent les dégâts mais butent sur le mur
de la loi d'aire à l'intérieur. Aucun mur pris isolément ne raconte toute
l'histoire, et aucune méthode ne franchit les quatre.
## Où chacune a calé, et pourquoi
Le plafond n'est jamais arbitraire. Pour chaque méthode, son propre compte rendu
consigne la raison exacte pour laquelle le score a cessé de grimper, citée ici en
une ligne.
- **[PALIMPSEST](/fr/research/lab/experiments/raphael-anjou/learning/palimpsest/)** (463/480).
A atteint 463, le meilleur du projet, en lisant le corpus pour repérer quels
choix partagés sont des pièges et en pilotant un balayage de 15 bassins pour les
contourner. Forcer directement la recherche à éviter les pièges dégradait les
plateaux : la valeur résidait dans le lieu où chercher, pas dans une règle stricte.
- **[PRIOR](/fr/research/lab/experiments/raphael-anjou/learning/prior/)** (460/480).
Plafonne à 460 : le prior de position appris amène rapidement une construction
from scratch dans la classe des 460, mais le signal du corpus ne suffit pas à
elle seule pour en sortir.
- **[KEYRING](/fr/research/lab/experiments/raphael-anjou/learning/keyring/)** (460/480).
Trois signaux appris votant ensemble (position, adjacence, patch 2×2) ont atteint
460 dans un agencement de coins qu'aucun plateau n'avait percé auparavant, une
nouvelle famille, mais le signal de patch est marginal et le polissage plafonne
toujours à 460.
- **[REPLAY](/fr/research/lab/experiments/raphael-anjou/learning/replay/)** (460/480).
Rejoue exactement les plateaux stricts-460 de la communauté et révèle le coup
que la recherche ordinaire manque : 4 à 5 cases qui encaissent deux inadéquations
d'un coup, inatteignables pour une recherche qui n'en autorise qu'une au plus.
- **[GAUNTLET](/fr/research/lab/experiments/raphael-anjou/pipelines/gauntlet/)** (458/480).
Lancer le beam dans neuf directions de balayage a ouvert une toute nouvelle
famille à 458 (l'ordre de balayage est un axe de diversité plus fort que la graine
aléatoire), mais une seconde passe a plafonné à 457 sans aucun 461 : la nouvelle
famille sature comme les autres.
- **[CLOISTER](/fr/research/lab/experiments/raphael-anjou/pipelines/cloister/)** (453/480).
En tant que solveur intérieur autonome, il confirme un réel bonus de compatibilité
avec le pourtour, mais ce bonus ne peut pas se greffer après coup (la même
rigidité que le plateau complet), si bien qu'il se fixe dans le bas des 450.
- **[MIDDEN](/fr/research/lab/experiments/raphael-anjou/pipelines/midden/)** (452/480).
Choisir où (et non quand) le plateau peut se rompre allonge la série parfaite de
153 à 167–174 cases, mais la géométrie dispersée échoue toujours en fin de partie :
rien n'absorbe les derniers dégâts.
- **[LADDER](/fr/research/lab/experiments/raphael-anjou/pipelines/ladder/)** (451/480).
Inonde de sondes bon marché et promeut la plus profonde, atteignant un plateau
strict-451 sans record à copier, la première évasion hors de la bande universelle
444–450, mais le stock d'ouvertures parfaites s'épuise et les échelons convergent
tous vers un même plafond.
- **[LODESTONE](/fr/research/lab/experiments/raphael-anjou/learning/lodestone/)** (451/480).
Un prior de demande-rare utilisé uniquement comme départage relève la médiane
from scratch de deux points (449→451) et resserre la variance, mais tout poids
plus élevé l'effondre : la rareté est un signal réel mais faible, et il ne touche
jamais au plafond du bassin.
- **[MOSAIC](/fr/research/lab/experiments/raphael-anjou/pipelines/mosaic/)** (448/480).
Compose des solutions exactes de blocs 4×4 avec des coutures souples, atteignant
448 from scratch, mais le déficit se concentre presque entièrement dans les trois
derniers blocs de coin, où le vivier de pièces s'amenuise : le même vol de pièces,
désormais réduit à un seul point vif.
- **[BANDSAW](/fr/research/lab/experiments/raphael-anjou/meet-in-the-middle/bandsaw/)** (437/480).
Résout une bande de fin de partie jusqu'à l'optimalité prouvée, et ce faisant
mesure le mur de l'exactitude : l'arbre de recherche croît d'environ un facteur
vingt par inadéquation supplémentaire autorisée, des deux côtés, si bien que se
rejoindre au milieu cesse d'être rentable à pleine taille.
- **[STAGED](/fr/research/lab/experiments/raphael-anjou/pipelines/staged/)** (436/480).
Construit le plateau entier sans cadre préétabli et avec une bordure émergente,
atteignant 436, bien en deçà des records. C'est cet écart qui constitue le
résultat : il mesure exactement ce que vaut l'ancrage cadre-d'abord habituel.
## La forme de l'écart
Parcourez la table de haut en bas et la leçon de tout le projet saute aux yeux :
les méthodes qui font bouger le score changent la forme de la recherche - un ordre
de balayage, un prior appris, une région confinée -, jamais sa vitesse brute. Et
chacune d'elles cale contre un mur qui est global, pas local. Les dix arêtes de 470
à 480 ne relèvent pas d'un problème de finition ; elles se trouvent de l'autre côté
des quatre murs à la fois.
Une campagne distincte menée en 2026 par William Millilaw a abouti à la même
conclusion par le versant de la diversité. En balayant toute la liste des méthodes,
il a constaté que presque tout (recherche locale adaptative from scratch, placement
en serpentin, le sommet de la distribution d'un générateur entraîné) redécouvre
sans cesse la même poignée de bassins, et que seul le parallel tempering produisait
de façon fiable des bassins réellement nouveaux, des plateaux très éloignés de
l'ensemble connu. Même celui-là plafonne vite. Sa lecture est celle que cette table
ne cesse de formuler : le goulot d'étranglement n'est pas le score qu'une méthode
atteint mais le nombre de bassins distincts qu'elle sait trouver, et aucune méthode
de l'arsenal standard n'en trouve assez.
> **Note**
>
> Chaque ligne de saturation est distillée du carnet de laboratoire du projet (une entrée par expérience). Les quatre murs sont corroborés par la littérature publiée : la transition de phase à 17 couleurs par Ansótegui, Béjar, Fernández & Mateu, « How Hard is a Commercial Puzzle: the Eternity II Challenge » ; le gradient manquant et les bassins profonds par la littérature de recherche locale sur Eternity II.
## À lire aussi
- [Pourquoi un ordinateur plus rapide ne change rien](https://eternity2.dev/fr/research/why/prune-vs-speed/) — L'idée la plus importante de la recherche combinatoire difficile : réduire l'espace que l'on explore l'emporte, d'une marge exponentielle, sur le fait de l'explorer plus vite. Eternity II est conçu pour qu'on ne puisse presque pas le réduire.
- [Le mur de rigidité](https://eternity2.dev/fr/research/why/rigidity-wall/) — Chaque plateau record dont nous disposons est figé sur place. Impossible de progresser par petites retouches d'un excellent plateau vers un plateau parfait, et nous pouvons le démontrer.
- [Expériences](https://eternity2.dev/fr/research/lab/experiments/) — Les expériences de recherche nommées du laboratoire, une section par chercheur. Chacune est un run réel contre Eternity II avec son idée, son meilleur plateau et les questions qu'elle a laissées ouvertes. Le carnet de Raphaël Anjou est ici en entier ; le carnet reste ouvert à tous les autres.
- [Aucun coup forcé](https://eternity2.dev/fr/research/why/no-forced-moves/) — La manière habituelle de résoudre un casse-tête logique consiste à repérer un emplacement où une seule pièce convient, à la poser, puis à recommencer. Ce levier n'existe pas ici : chaque pièce intérieure admet entre 73 et 137 voisines possibles, et aucune n'est jamais contrainte à une seule option.
- [Une carte de toutes les approches connues](https://eternity2.dev/fr/research/build/approaches-map/) — La synthèse que la communauté réclame sans jamais la trouver : chaque famille d'attaque tentée sur Eternity II, ce que chacune a réellement atteint, où elle bute, et un lien vers la page de fond. Une même idée directrice les traverse toutes.
- [Impasses](https://eternity2.dev/fr/research/build/dead-ends/) — Des approches que nous avons essayées, séduisantes en apparence, mais qui ne font pas bouger les lignes sur Eternity II, consignées avec nos constats pour que vous investissiez votre temps ailleurs.
- [Problèmes ouverts](https://eternity2.dev/fr/research/open-problems/) — La frontière ouverte d'Eternity II réunie au même endroit : chaque angle qui vaut encore une tentative, le mur qu'il attaque, ce qui a déjà été essayé et où cela s'est arrêté, et s'il s'agit d'une cible abordable pour un débutant ou d'un objectif difficile et bien cartographié.
---
# Un jeu de pièces extrême sur chaque axe mesuré
> Mesurez les 256 pièces officielles sans aucun solveur en vue et chaque porte structurelle est fermée : aucune pièce symétrique par rotation, 5 paires jumelles sur 32 640 appariements, un plafond de 307 sur 480 si rien ne tourne, des budgets de couleurs qui s'apparient à exactement 480 sans aucun jeu, et une palette 17+5 posée au point d'une-solution-attendue.
- Page canonique (avec figures et démos interactives): https://eternity2.dev/fr/research/why/why-e2-is-hard/
- Mise à jour: 2026-07-22
- Sujets: structure
- Reproduire: `cd research/topics/adversarial-piece-set/compute && cargo run --release > ../results/invariants.json`
- Source: Le jeu de pièces adverse : article, code source et résultats (GitHub) — https://github.com/raphael-anjou/eternity2/tree/main/research/topics/adversarial-piece-set
- Source: Brendan Owen, Design the hardest puzzle : la recette et la dérivation du 17,14 (msg 1947, août 2007) — https://groups.io/g/eternity2/message/1947
- Source: Le recensement de l'espace des pièces possibles : les formes symétriques existent dans cet espace et le jeu réel les évite toutes (msg 8025, septembre 2010) — https://groups.io/g/eternity2/message/8025
- Source: Les pages Eternity de Selby et Riordan, le site des concepteurs eux-mêmes — https://www.archduke.org/eternity/
---
Posez les solveurs et mesurez l'objet lui-même. Le jeu officiel compte 256
pièces carrées, quatre bords colorés chacune. Si ces pièces avaient été tirées
sans soin, un peu de mou structurel survivrait quelque part : une pièce
répétée, une pièce symétrique, une couleur en surplus, un biais d'orientation
qui ne coûte rien, une clique de pièces qui se préfèrent entre elles. C'est de
ce mou-là que les solveurs se nourrissent. Cette page vérifie chacune de ces
portes directement sur le jeu de pièces seul, et chacune est fermée,
exactement, pas approximativement.
Cinq des six mesures ci-dessous sont versionnées comme un seul sujet
reproductible. Chacune se recalcule depuis l'instance publiée en moins d'une
seconde, et le binaire vérifie lui-même ses valeurs attendues : reproduire les
nombres et les contrôler sont un seul et même geste.
## Les cinq mesures versionnées
| Axe | Mesure | L'extrême où il se trouve |
| --- | --- | --- |
| Symétrie de rotation | 256 pièces sur 256 ont leurs quatre rotations distinctes | 1 024 pièces-rotations, rien à quotienter |
| Jumelles | 251 multiensembles de couleurs distincts ; 5 paires jumelles et 114 quasi-jumelles sur 32 640 appariements | aucun doublon, coïncidence au niveau de 0,4 % |
| Plafond à orientation fixe | au plus 307 joints sur 480 peuvent s'apparier si aucune pièce ne tourne | la rotation est structurellement nécessaire |
| Budget de couleurs | les 22 couleurs ont toutes un nombre pair de côtés ; la capacité d'appariement somme à 480 | exactement suffisant, aucun jeu |
| Palette scindée | 17 couleurs intérieures, 5 couleurs de joints de bordure | 17 est le réglage d'une-solution-attendue |
### Aucune symétrie de rotation nulle part
Une pièce identique à elle-même après un quart ou un demi-tour réduirait les
orientations et rétrécirait l'espace de décision, et la réduction standard,
chercher une forme canonique par orbite, empocherait la remise. Mesuré :
chacune des 256 pièces a une orbite de rotation complète de taille 4, le
puzzle possède donc réellement 1 024 pièces-rotations distinctes et la
recherche par formes canoniques ne gagne strictement rien. Le recensement
communautaire de l'espace de conception montre que c'est un choix, pas un
accident : avec cette palette, l'espace des pièces possibles contient des
formes qui se répètent sous rotation, et le jeu réel les évite toutes
([msg 8025](https://groups.io/g/eternity2/message/8025)). La
[recette de conception](/fr/research/why/design-recipe/) porte le versant
intentionnel de cette histoire, y compris la mesure de Brendan Owen montrant
que des pièces symétriques se placeraient assez inégalement pour rendre au
solveur le signal d'ordonnancement par difficulté que les concepteurs
retiraient.
### Cinq jumelles sur 32 640 appariements
Oubliez l'ordre des bords et demandez quelles pièces portent le même budget de
quatre couleurs. Les 256 pièces produisent 251 multiensembles distincts :
exactement 5 paires coïncident, les pièces (2,3), (5,14), (7,51), (109,110) et
(171,181) dans la numérotation de recherche, et dans chaque paire les couleurs
partagées occupent un ordre cyclique différent, si bien qu'aucune pièce ne se
répète, même à rotation près. En relâchant la question vers les
quasi-jumelles, les paires partageant 3 de leurs 4 bords à même position dans
l'orientation stockée, on ajoute 114 paires en 79 groupes. Rapportée aux
32 640 paires non ordonnées que le jeu offre, même cette coïncidence relâchée
reste une fraction de pour cent. La porte ainsi fermée est le doublement
gratuit : une vraie paire de doublons permettrait de réécrire toute solution
en échangeant les deux pièces, et il n'y en a aucune.
### La rotation est structurellement nécessaire
Figez chaque pièce dans son orientation publiée et demandez combien des 480
joints pourraient s'apparier. Couleur par couleur, les joints horizontaux
utilisent au plus la plus petite des offres tournées vers l'est et vers
l'ouest, et les joints verticaux la plus petite des offres nord et sud. La
somme plafonne à **307 sur 480**. C'est une borne de comptage, pas un résultat
de recherche : aucun arrangement de pièces non tournées, où que ce soit sur le
plateau, ne peut la dépasser. Un pipeline qui fixe les orientations tôt
concède donc au moins 173 joints avant même de chercher, et 307 se situe très
en dessous de tous les hauts plateaux de la
[page des records](/fr/research/records/). Les deux nombres comptent ici les bords
appariés entre pièces adjacentes, pourtour extérieur exclu, la convention en
usage sur tout ce site.
### Un budget de couleurs sans aucun jeu
Comptez les côtés de pièces par couleur. Chacune des 22 couleurs non grises a
un total pair, et les capacités d'appariement, la moitié du nombre de côtés
par couleur, somment à exactement 480, le nombre géométrique de joints du
plateau. L'offre est exactement suffisante pour un plateau parfait : aucune
couleur ne manque, ce qui certifierait l'impossibilité de la solution
construite, et aucune couleur n'est en excès, ce qui laisserait du jeu à
dépenser aux plateaux partiels. Aucun jeu signifie aussi aucun levier. Aucun
argument de comptage sur la seule offre de couleurs ne peut élaguer quoi que
ce soit, la difficulté loge donc entièrement dans quelles pièces portent
quelles couleurs, pas dans la quantité de chaque couleur. Ce que le
raisonnement d'offre produit de plus aiguisé est l'invariant
d'[équilibre de bordure](/fr/research/why/border-balance/), et cette condition est
nécessaire, jamais suffisante.
### La palette scindée, et ce qui a été réglé
Les 22 couleurs se divisent en 17 couleurs intérieures et 5 qui n'apparaissent
que sur les joints entre pièces de bordure. La séparation elle-même est
automatique : avec un pourtour gris massif, les bords colorés d'une pièce de
bordure ne rencontrent jamais que d'autres bords de bordure ou l'intérieur,
les deux réservoirs ne se mélangent donc jamais, comme l'explique la page de
[géographie des couleurs rares](/fr/research/why/rare-color-geography/). Ce qui a
été choisi, ce sont les comptes. La dérivation d'Owen l'année du lancement
retrouve 17,14 couleurs intérieures à partir de l'exigence d'environ une
solution attendue ([msg 1947](https://groups.io/g/eternity2/message/1947)), le
plus rare qu'une solution puisse être tout en existant encore, et la page du
[pic de difficulté](/fr/research/why/phase-transition/) mesure que c'est le pire
endroit possible pour une recherche. La recette reconstruite complète,
ingrédient par ingrédient, se trouve sur la page de la
[recette de conception](/fr/research/why/design-recipe/).
## Le sixième axe, décrit sans ses chiffres
Une mesure de plus appartient à la thèse mais ne fait pas encore partie du
sujet versionné. Construisez le graphe dont les nœuds sont les 256 pièces,
pondéré par le nombre d'adjacences par rotation que chaque paire supporte, et
lisez son spectre. Le graphe se sépare proprement en exactement deux blocs,
les 60 pièces de cadre et les 196 pièces intérieures, et au-delà de cette
coupure il ne montre aucune structure de communauté à aucune échelle : pas de
cliques de pièces mutuellement compatibles, pas de sous-puzzle bon marché à
découper et résoudre d'abord. Le regroupement est à échelle unique, et la
seule frontière de grappe visible est la ligne cadre-intérieur que tout
solveur connaît déjà. Les chiffres spectraux derrière cette description sont
différés jusqu'à ce que leur calcul soit versionné aux côtés des cinq autres ;
lisez donc cet axe comme une description pour l'instant, et les cinq
précédents comme exacts.
## Ce que ces extrêmes interdisent
Chaque axe ferme une porte standard.
- **Réduction par symétrie.** Rien à quotienter : les 1 024 pièces-rotations
sont toutes distinctes.
- **Astuces de doublons.** Aucun doublement gratuit des solutions : 5
quasi-coïncidences sur 32 640 appariements, aucune n'étant un vrai doublon.
- **Raccourcis d'orientation.** Fixer les rotations tôt concède 173 joints sur
480 par un argument de comptage, avant toute recherche.
- **Arguments d'offre.** Des budgets pairs et exactement suffisants : compter
les couleurs n'élague rien.
- **Sous-communautés bon marché.** Rien de plus tendre que la coupure
cadre-intérieur pour commencer.
Cette page est le pendant métrologique de deux voisines. La
[recette de conception](/fr/research/why/design-recipe/) reconstruit, depuis les
archives de l'année du lancement, pourquoi le jeu a été bâti ainsi ; le
[balayage de théorèmes](/fr/research/why/theorem-sweep/) rassemble les lois
prouvées sur le même objet. Et les extrêmes d'ici sont le rez-de-chaussée des
murs de la section : [aucun coup forcé](/fr/research/why/no-forced-moves/) est la
même platitude ressentie cellule par cellule pendant une construction, et les
[cycles sigma](/fr/research/why/sigma-cycles/) sont ce que l'absence de petits
échanges devient entre hauts plateaux finis. Pour savoir quelle méthode meurt
contre quel mur, la [carte murs et méthodes](/fr/research/why/walls-and-methods/)
sert d'index.
## Reproduction et conventions
Le répertoire du sujet contient un binaire Rust autonome qui charge l'instance
officielle embarquée (256 pièces, sans indices) et recalcule chaque nombre
ci-dessus : le recensement des orbites de rotation, les comptes de jumelles et
quasi-jumelles, le plafond d'appariement à orientation fixe, et la parité et
capacité d'appariement par couleur. L'exécution est déterministe, s'achève en
bien moins d'une seconde, imprime un unique document JSON, et sort avec un
code non nul si une valeur attendue échoue ; le fichier de résultats versionné
est identique octet pour octet d'une exécution à l'autre. Les identifiants de
pièces de la liste des jumelles suivent la numérotation de recherche du jeu.
Les deux nombres de type score de cette page, 307 et 480, comptent les bords
appariés entre pièces adjacentes pourtour extérieur exclu, la même convention
que la page des [records](/fr/research/records/) ; rien ici ne note un plateau
candidat, et rien sur cette page n'est une revendication de record.
## À lire aussi
- [Conçu pour être insoluble : la recette](https://eternity2.dev/fr/research/why/design-recipe/) — Eternity II applique une recette pour obtenir le casse-tête à raccords de bords le plus difficile possible : forme compacte, aucune pièce symétrique ni dupliquée, palettes cloisonnées, fréquences plates, une seule solution attendue. La communauté a rétro-conçu chaque ingrédient dès l'année du lancement.
- [La moisson de théorèmes : treize lois de structure](https://eternity2.dev/fr/research/why/theorem-sweep/) — Un seul arc de recherche, treize familles de théorèmes structurels : pureté de l'anneau, le plancher de parité à 479, le mur des 470 comme frontière de phase, les invariants de flux, la loi d'aire entropique, et les résultats d'impossibilité qui chiffrent chaque raccourci classique. Cette page est la carte.
- [Quel mur arrête quelle méthode](https://eternity2.dev/fr/research/why/walls-and-methods/) — La section recherche a deux versants : les murs structurels qui rendent Eternity II difficile, et les algorithmes conçus pour les franchir. Cette page fait le pont : chaque méthode confrontée au mur qu'elle attaque réellement, et le score auquel ce mur l'a arrêtée.
- [Calibré sur le pic de difficulté](https://eternity2.dev/fr/research/why/phase-transition/) — Eternity II utilise 22 couleurs, réparties entre 17 couleurs intérieures et 5 réservées au cadre, et ce chiffre d'environ 17 se situe près du point où ce type de casse-tête est le plus difficile à résoudre (la transition est une bande, pas un entier unique).
- [Les couleurs rares vivent sur le cadre](https://eternity2.dev/fr/research/why/rare-color-geography/) — Cinq des 22 couleurs d'Eternity II n'apparaissent que le long de l'anneau de bordure, chacune sur exactement 24 arêtes, jamais une seule fois à l'intérieur. Une séparation structurelle qui façonne la manière dont chaque solveur traite le cadre.
- [Aucun coup forcé](https://eternity2.dev/fr/research/why/no-forced-moves/) — La manière habituelle de résoudre un casse-tête logique consiste à repérer un emplacement où une seule pièce convient, à la poser, puis à recommencer. Ce levier n'existe pas ici : chaque pièce intérieure admet entre 73 et 137 voisines possibles, et aucune n'est jamais contrainte à une seule option.
- [Pourquoi le basin-hopping semble impossible](https://eternity2.dev/fr/research/why/sigma-cycles/) — Si l'on ne peut pas améliorer un excellent plateau en le peaufinant, peut-être peut-on sauter vers un autre excellent plateau. Sur chaque paire de records testée, c'est impossible, et la raison structurelle mérite qu'on la voie.