Calibration de ma liste elo
Aligner son labo sur l'échelle CCRL
Comment donner à des moteurs testés sur sa propre machine une cote comparable à celle de CCRL ? La réponse tient en trois moteurs-ancres, un bridage temporel, et une formule. Voici la méthode complète, avec les gauntlets intégraux des trois ancres et leurs écarts mesurés au référentiel CCRL.
L'idée. Choisir des moteurs dont la cote CCRL est connue et fiable (les ancres), les faire jouer sur le Ryzen mais bridés en temps pour qu'ils rejouent leur force CCRL. Tout moteur qui les affronte à pleine cadence se positionne alors sur l'échelle CCRL via son score.
Le principe, étape par étape
- Choisir trois ancres étagées. Trois moteurs de cote CCRL connue, répartis sur l'échelle — haut, milieu, bas — pour que le pont soit tenu en plusieurs points plutôt qu'en un seul. Ici : 3327, 2911 et 2608, soit ≈ 730 points couverts.
- Brider les ancres en temps. Chaque ancre joue à ~½ temps (8 s/coup) là où le moteur testé joue à pleine cadence (15 s/coup). Ce handicap neutralise l'avantage de fréquence par cœur du Ryzen : l'ancre joue « comme si » elle tournait sur un matériel plus lent, et reproduit son niveau CCRL.
- Faire jouer chaque ancre contre des sous-ancres CCRL. Un gauntlet de 100 parties (20 par adversaire, couleurs équilibrées) contre 4-5 moteurs de cote CCRL connue, eux aussi bridés. Le score mesure la force de l'ancre sur le Ryzen.
- Calculer la performance. Formule maison : moyenne des cotes CCRL des adversaires + conversion logistique du pourcentage. On obtient la cote Ryzen de l'ancre.
- Épingler les trois ancres dans Ordo. On fixe les trois à leur valeur CCRL mesurée, et Ordo redérive toute la liste sur le référentiel CCRL à partir de ces points fixes.
σ = 400 · √( p(1 − p) / N ) — forme « table », colonne Err ±
Ancre hauteDeep Shredder 13 — 8 threads
Cote CCRL 3327 (4CPU) · movetime 15 / 8 · 100 parties · couleurs 50/50
| Adversaire (sous-ancre) | CCRL | Score | % | + / = / − | Perf ind. |
|---|---|---|---|---|---|
| Caissa 1.17 | 3601 | 3.5 / 20 | 17,50 % | 0 / 7 / 13 | 3332 |
| Stockfish 10 | 3522 | 6.5 / 20 | 32,50 % | 0 / 13 / 7 | 3395 |
| Ethereal 12.75 | 3454 | 9.5 / 20 | 47,50 % | 1 / 17 / 2 | 3437 |
| Wasp 5.50 | 3325 | 14.0 / 20 | 70,00 % | 9 / 10 / 1 | 3472 |
| Gull 3 | 3223 | 12.0 / 20 | 60,00 % | 4 / 16 / 0 | 3293 |
| Total · moy. 3425 | — | 45.5 / 100 | 45,50 % | 14 / 63 / 23 | 3394 |
Ancre médianeGlaurung 2.2 JA — 8 threads
Cote CCRL 2911 (4CPU) · movetime 15 / 8 · 100 parties
| Adversaire (sous-ancre) | CCRL | Score | % | + / = / − | Perf ind. |
|---|---|---|---|---|---|
| Igel 2.3.1 | 3097 | 6.0 / 20 | 30,00 % | 0 / 12 / 8 | 2950 |
| Deep Shredder 12 | 3043 | 10.5 / 20 | 52,50 % | 6 / 9 / 5 | 3060 |
| Wasp 2.00 | 2946 | 9.0 / 20 | 45,00 % | 5 / 8 / 7 | 2911 |
| Stockfish 1.4 JA | 2845 | 15.5 / 20 | 77,50 % | 12 / 7 / 1 | 3060 |
| Lux 5.0 | 2811 | 15.0 / 20 | 75,00 % | 11 / 8 / 1 | 3002 |
| Total · moy. 2948 | — | 56.0 / 100 | 56,00 % | 34 / 44 / 22 | 2990 |
Ancre basseList 5.12 — 1 thread
Cote CCRL 2608 · movetime 15 / 8 · 92 parties · pool sans Tao, avec Hermann
| Adversaire (sous-ancre) | CCRL | Score | % | + / = / − | Perf ind. |
|---|---|---|---|---|---|
| Toga II 1.2.1a | 2766 | 8.0 / 20 | 40,00 % | 5 / 6 / 9 | 2696 |
| Spike 1.1 | 2690 | 10.0 / 20 | 50,00 % | 6 / 8 / 6 | 2690 |
| Ruffian 1.0.5 | 2599 | 10.0 / 20 | 50,00 % | 6 / 8 / 6 | 2599 |
| Hermann 2.8 | 2487 | 22.0 / 32 | 68,75 % | 16 / 12 / 4 | 2624 |
| Total · moy. 2635,5 | — | 50.0 / 92 | 54,35 % | 33 / 34 / 25 | 2666 |
Le triplet d'ancrage et la leçon des écarts
Trois points fixes pour le réétalonnage global · échelle couverte ≈ 730 points
| Moteur | Th. | CCRL | Ryzen 9 | Écart CCRL |
|---|---|---|---|---|
| Deep Shredder 13 x64 | 8 | 3327 | 3394 ± 20 | +67 |
| Glaurung 2.2 JA | 8 | 2911 | 2990 ± 20 | +79 |
| List 5.12 | 1 | 2608 | 2666 ± 21 | +58 |
Conclusion opératoire : on épingle ces trois points à leur valeur CCRL connue dans Ordo, et l'on redérive l'ensemble de la liste sur le référentiel CCRL. Les ancres tiennent le pont en trois endroits — haut, milieu, bas — et tout moteur testé contre elles, à pleine cadence, hérite d'une cote directement comparable à CCRL, sans facteur correctif arbitraire. La précision du pont, ≈ ± 20 par ancre, fixe le plancher d'incertitude de tout le réétalonnage.
De la partie au tableau publié
La chaîne complète, du PGN brut au classement et aux débriefs en ligne
Une fois les ancres posées et les gauntlets joués, le passage des parties brutes au tableau publié suit une chaîne fixe en quatre temps. Rien n'est saisi à la main : tout est dérivé des PGN.
Laboratoire · calibration · 24 656 parties
Recaler l’échelle : le mur de Rebel 6
Les cotes des programmes émulés ont bougé d’une cinquantaine de points, et celles des moteurs natifs bien davantage. Ce n’est pas une retouche : c’est la correction d’un défaut d’échelle qui faussait tout le haut du classement. Voici ce qui n’allait pas, et comment c’est réglé.
Le symptôme : un mur infranchissable
Le laboratoire note les vieux programmes tournant sur matériel émulé (486, Pentium 90, 68k) en les faisant jouer contre une échelle de moteurs de référence à cote fixe, le tout ajusté par Ordo. Un détail clochait : à partir de Rebel 6, les machines émulées ne marquaient plus rien du tout — un mur. Or la cote affichée de ces moteurs ne justifiait pas un tel écart.
Le révélateur : deux adversaires à cote quasi identique, mais des résultats sans rapport.
| Adversaire des PC émulés | cote affichée | score des PC émulés |
|---|---|---|
| Stockfish 11 68040 40 MHz | 2546 | ~31 % |
| Rebel 6.0 | 2535 | ~4 % |
Deux moteurs étiquetés au même niveau, et pourtant les mêmes machines marquent huit fois plus contre l’un que contre l’autre. L’une des deux cotes est fausse — et ce n’est pas celle du Stockfish.
Le diagnostic : deux échelles décalées
En réanalysant les 24 656 parties, le pool se sépare en deux mondes qui ne se recouvrent presque pas. D’un côté l’échelle émulée (machines dédiées, 486, Pentium 90, moteurs portés sur 68k) ; de l’autre l’échelle native (les moteurs UCI tournant à pleine vitesse sur le Ryzen : Rebel 6, Yace, Fritz 5.32, Hiarcs, Shredder… et tout le classement moderne au-dessus). Sur les 1 112 parties qui relient les deux mondes, l’échelle native tout entière se tient 139 points trop bas.
La soudure entre les deux est Stockfish 11 68040 : un moteur moderne, mais brélé par un 68040 émulé à 40 MHz. Il appartient de fait à l’échelle émulée, et ses résultats l’y placent exactement à sa cote (il performe à 2582 contre le seul matériel émulé, pour une cote de 2546 : écart négligeable). C’est le pont fiable entre les deux référentiels.
Quant à Rebel 6, sa cote de 2535 provenait d’une calibration où le moteur était bridé à 1 % de sa puissance. Dans les gauntlets, il jouait à pleine puissance — d’où le mur. Contre le matériel émulé, il tourne en réalité à 93 % sur 295 parties.
La correction
Plutôt que de réestimer chaque moteur un par un, on a corrigé le décalage d’échelle, qui est un seul paramètre. Trois gestes :
- poser deux ancres fixes fiables qui tiennent l’échelle : Stockfish 11 68040 à 2546 (la soudure) et Saitek RISC 2500 400 MHz à 2440 (calibré contre les machines émulées) ;
- remonter de +139 toutes les ancres à partir de Rebel 6 (de Rebel 6 jusqu’au sommet moderne), ce qui préserve leur ordre interne ;
- relancer Ordo sur l’ensemble du PGN avec ce jeu d’ancres.
Pris isolément, Rebel 6 performe à ~2855 contre le matériel émulé — ce qui suggérerait +320. Mais un score de quasi-blanchissage gonfle mécaniquement la performance, et cette valeur placerait Rebel 6 au-dessus de Yace, Fritz 5.32 et Shredder — des moteurs qu’il perd en duel direct dans tous les gauntlets. Un décalage uniforme qui conserve l’ordre et s’appuie sur deux ancres sûres est la correction réaliste ; un recalcul moteur par moteur ne l’est pas.
Le résultat
Les deux mondes se rejoignent, et les cotes se déplacent de façon cohérente. Les ancres du cluster natif montent de 139 ; les prétendants émulés, recalculés, gagnent une cinquantaine de points.
| Moteur | avant | après | rôle |
|---|---|---|---|
| Stockfish 11 68040 40 MHz | 2546 | 2546 | ancre fixe — la soudure |
| Saitek RISC 2500 400 MHz | 2347 | 2440 | nouvelle ancre fixe |
| Rebel 6.0 | 2535 | 2674 | ancre, +139 |
| Yace Paderborn | 2587 | 2726 | ancre, +139 |
| Chess Genius 1 Pentium 90 | 2482 | 2533 | recalculé |
| Chess Genius 2 Pentium 90 | 2490 | 2552 | recalculé |
| Chess Genius 3 Pentium 90 | 2519 | 2574 | recalculé |
| Chess Genius 4 Pentium 90 | 2519 | 2575 | recalculé |
| Chess Genius 5 Pentium 90 | 2479 | 2530 | recalculé |
Tout le classement moderne au-dessus de Rebel 6 remonte aussi de 139 (Fritz 20 passe de 3679 à 3818, Stockfish 18 de 3709 à 3850), et les machines émulées 486 gagnent une trentaine de points. Le mur disparaît : l’écart entre un Pentium 90 émulé et Rebel 6 pleine puissance redevient crédible, de l’ordre de 120 à 150 points.
C’est une correction d’échelle, pas une rerévaluation individuelle. L’ordre des moteurs natifs entre eux est intact, de même que celui des machines émulées ; seul le niveau absolu du cluster natif a été recalé, désormais tenu par les deux ancres fiables (Stockfish 68040 à 2546, RISC 400 à 2440). Les parties, elles, n’ont pas été rejouées : ce sont les mêmes 24 656.
chess.lumn.eu · laboratoire de calibration · 16 octobre 2026 · 24 656 parties, 32 ancres
