Méthode · étalonnage du laboratoire
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.
Le problème. CCRL note les moteurs sur son matériel et ses conditions de référence. Sur un Ryzen 9 7950X3D, plus rapide par cœur et souvent lancé avec davantage de threads, les mêmes moteurs marquent plus de points — leur cote « maison » est gonflée. Pour publier des valeurs comparables à CCRL, il faut un pont entre l'échelle du laboratoire et l'échelle 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.
perf = moyenne des ancres + 400 · log₁₀( p / (1 − p) )
σ = 400 · √( p(1 − p) / N ) — forme « table », colonne Err ±
Subtilité du bridage. Le handicap temporel est un facteur unique par cœur — il ne se cumule pas avec le nombre de threads. Chaque ancre tourne donc au nombre de threads de sa référence CCRL : la fréquence est neutralisée, mais pas le parallélisme. C'est ce qui explique que le seul gain possible au-dessus de la cote CCRL provienne des threads supplémentaires par rapport à la référence — et de rien d'autre.
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 |
Cote Ryzen 93394± 20 (table) · ± 9 (log) · écart CCRL +67
Cohérence. +67 au-dessus de la cote CCRL 4CPU, attribuable au doublement 4 → 8 threads — la fréquence par cœur étant neutralisée par le bridage. Profil propre : les cinq perfs individuelles s'ordonnent correctement avec la force des sous-ancres (3293 → 3472), sans outlier.
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 |
Cote Ryzen 92990± 20 (table) · ± 9 (log) · écart CCRL +79
Cohérence. +79 au-dessus de la cote CCRL 4CPU, là encore via le doublement 4 → 8 threads. À 20 parties par sous-ancre le profil est homogène : Igel (2950) et Wasp 2.00 (2911) alignés en bas, DS12 et Stockfish 1.4 en haut (3060) — aucun outlier de style.
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 |
Cote Ryzen 92666± 21 (table) · ± 9 (log) · écart CCRL +58
Cas particulier : pas de bonus SMP. List tourne en mono-thread, exactement comme sa référence CCRL — il n'y a donc aucun gain de threads ici. Son +58 ne vient pas du parallélisme mais du pool retenu sans Tao (avec Tao inclus, la perf retombait vers ~2610). List fait par ailleurs 50 % contre Ruffian (2599) et contre Spike (2690), deux sous-ancres distantes de 91 points : une légère non-transitivité qui fixe le plancher de précision à ± 21. Tao 5.6, statistiquement indistinguable de Hermann (z = 0,64), a été écarté du pool.
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 |
La leçon centrale. Les trois écarts — +67, +79, +58 — ne suivent aucune règle uniforme. Ils ne sont pas proportionnels au nombre de threads (les deux ancres 8T gagnent des montants différents), ni constants. L'écart au référentiel CCRL est propre à chaque moteur. C'est précisément pourquoi on ne peut pas décaler toute la liste d'une constante : il faut mesurer plusieurs ancres réelles et laisser Ordo interpoler entre elles.
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.
1 · Assemblage
Tous les PGN en un seul
Chaque gauntlet (un par moteur testé) est concaténé dans un PGN combiné unique — la matière première, l'intégralité des parties du laboratoire.
gauntlets_combined.pgn
▼
2 · OrdoStat
Ajustement global Ordo / BayesElo
Le PGN combiné passe dans OrdoStat. Avec les trois ancres CCRL épinglées à leur valeur (deux ancres minimum pour caler l'échelle), Ordo résout tout le graphe d'un coup et redérive chaque moteur sur le référentiel CCRL — bien mieux qu'une moyenne d'ancres, car il gère la non-transitivité.
▼
3 · Sorties
Fichiers CSV et TXT
OrdoStat produit la liste calée : un CSV structuré (cote, σ, parties, %) et un TXT ordonné (rang, nom, cote, points, parties, %). C'est le classement officiel, à l'état de données.
classement.csvclassement.txt
▼
4 · Générateur HTML
Classement + débriefs en ligne
Le générateur croise le PGN, la sortie Ordo et la liste des moteurs figés, puis produit deux fragments HTML dans le thème crème : le tableau de classement (avec liens internes) et l'ensemble des débriefs de gauntlets (tables d'adversaires par moteur). Collés dans deux widgets HTML Elementor de la page WordPress.
classement.htmldebriefs.html
Pourquoi cette séparation en deux outils. OrdoStat fait la science (l'ajustement statistique sur l'échelle CCRL) ; le générateur fait la mise en forme (le HTML). Les garder distincts permet de rejouer l'un sans l'autre — réétalonner après l'ajout d'un moteur sans retoucher la présentation, ou régénérer le HTML après un changement de style sans relancer Ordo.
Une chaîne reproductible. Du premier coup joué au tableau en ligne, chaque maillon part d'un fichier et en produit un autre. Ajouter un moteur, c'est rejouer son gauntlet, le verser dans le PGN combiné, et relancer la chaîne : Ordo repositionne tout, le générateur réédite le classement et les débriefs. Aucune valeur n'est jamais recopiée à la main — d'où la cohérence d'ensemble de la liste.