Thomas Zipproth hat netterweise ein Programm erstellt, mit dem man pgn-Dateien, die die Decision Time für jeden Ply enthalten, auswerten kann. Dazu muß man die Enginepartien natürlich mit der neuen Version von cutechess (-cli und GUI), die ich von Patrick habe bauen lassen, spielen lassen.
Vielen Dank an Thomas, und wie von mir vorhergesagt, die Decision Time ist ein extrem interessantes, neues Feature, das unglaublich viele Möglichkeiten eröffnet, die vorher schlicht nicht existierten!
Es gibt eine erste lauffähige Version (Release erwarte ich sehr bald, denn Thomas ist schneller als die Polizei erlaubt) und Thomas hat mal meine UHO-Top15 Datenbank durchlaufen lassen, die bis auf ein head-to-head Match von 1000 Partien (Obsidian vs Integral) mittlerweile nur noch Partien mit DT enthält:
Code:
Decision Time Statistics
========================
Input file : D:\chess\UHO_Ratinglist_games.pgn
Games processed : 120,000
Engines found : 16
Moves processed : 19,356,972
Book moves : 1,440,000
Comments with DT : 17,773,142
Timed comments without DT : 135,271
Unrecognized comments : 8,559
Games missing engine headers : 0
Games with unknown result : 0
Engine statistics (sorted by mean Decision Time descending)
------------------------------------------------------------------------------------------------------------------------------------------------------
Engine Games Score% DT moves Missing Miss% Mean Median P90 Max DT=0% >1s% >3s% >5s% >15s%
----------------------------------------------------------------------------------------------------------------------------------------------
Cinder 0.5.1 avx2 15,000 42.10 1,071,621 0 0.00 1.66s 0.13s 5.60s 53.00s 37.40 28.91 16.15 11.12 1.35
Quanticade 260717 15,000 42.54 1,098,345 0 0.00 0.89s 0.00s 1.90s 109.00s 66.01 13.68 7.28 4.89 1.18
Integral 250805 a512 15,000 45.09 984,920 67,629 6.43 0.87s 0.00s 1.70s 74.00s 76.94 12.07 7.46 5.37 1.27
Berserk 14.0 a512 15,000 43.00 1,156,483 0 0.00 0.86s 0.00s 1.80s 69.00s 68.67 12.44 7.60 5.36 1.18
Stormphrax 8.0.0 15,000 44.61 1,126,155 0 0.00 0.82s 0.00s 1.80s 94.00s 71.66 13.30 7.30 4.86 0.97
Torch 4d a512 15,000 56.31 1,095,181 0 0.00 0.81s 0.00s 1.60s 53.00s 77.47 11.64 7.15 5.09 1.13
Alexandria 9.0 a512 15,000 45.59 1,125,620 0 0.00 0.77s 0.00s 1.90s 62.00s 73.18 13.55 7.23 4.70 0.76
Obsidian 250706 a512 15,000 49.48 1,024,793 67,642 6.19 0.76s 0.00s 1.50s 66.00s 76.82 11.60 6.80 4.84 0.98
Raphael 4.2.0 a512 15,000 40.19 1,167,723 0 0.00 0.74s 0.00s 2.20s 26.00s 68.96 15.09 7.73 4.62 0.38
Viridithas 20.0 a512 15,000 49.08 1,114,080 0 0.00 0.72s 0.07s 1.30s 83.00s 2.26 11.18 6.12 4.00 0.70
Reckless 260502 a512 15,000 58.77 1,147,110 0 0.00 0.69s 0.00s 1.10s 74.00s 74.73 10.34 5.96 4.07 0.95
Pawnocchio 2.0 a512 15,000 52.30 1,135,873 0 0.00 0.64s 0.00s 1.40s 43.00s 75.66 11.70 6.23 3.96 0.58
Coda 0.9.0 AI 15,000 42.64 1,229,552 0 0.00 0.64s 0.00s 1.50s 40.00s 74.27 11.79 6.55 4.14 0.43
PlentyChess 8.0.0 15,000 55.56 1,091,139 0 0.00 0.62s 0.00s 1.20s 40.00s 78.48 10.58 5.77 3.76 0.71
Stockfish 18 260131 15,000 64.24 1,102,102 0 0.00 0.62s 0.00s 0.75s 53.00s 79.74 8.64 4.93 3.46 0.96
Stockfish 260720 15,000 68.51 1,102,445 0 0.00 0.58s 0.00s 0.64s 57.00s 80.27 8.20 4.64 3.21 0.86
Notes
-----
- Percentages and DT percentiles are based only on moves with a recorded Decision Time.
- A recorded DT of 0s means less than 0.01 seconds according to the source format.
- Book moves are excluded from all DT statistics.
- A missing Decision Time is counted separately and is never treated as zero.
- Thresholds are strict: >1s means 1.01s or more in the stored 0.01s resolution.
Und Thomas hat eine sehr ausführliche, deutsche Erläuterung verfaßt, es ist eigentlich ein schönes pdf, hier sieht es etwas gruselig aus, aber lesen kann man es:
Erläuterung der Spalten
Name und Version der Engine gemäß PGN-Header.
Games
Anzahl der ausgewerteten Partien dieser Engine, unabhängig davon, ob sie mit Weiß oder
Schwarz gespielt hat.
Score%
Erfolgsscore der Engine in Prozent
Sieg = 1 Punkt
Remis = 0,5 Punkte
Niederlage = 0 Punkte
DT moves
Anzahl der Züge, für die eine gültige Decision Time vorhanden war und statistisch ausgewertet
werden konnte.
Missing
Anzahl der Züge, bei denen zwar eine Zugzeit, aber keine Decision Time im Kommentar
vorhanden war.
Miss%
Prozentualer Anteil der fehlenden Decision Times an allen zeitlich erfassten Nicht-Buchzügen
dieser Engine.
Mean
Arithmetischer Mittelwert aller vorhandenen Decision Times.
Median
Der mittlere Wert der DT-Verteilung. Bei mindestens 50 Prozent aller Züge ist die Decision Time
kleiner oder gleich diesem Wert.
P90
90. Perzentil. Bei 90 Prozent aller ausgewerteten Züge ist die Decision Time kleiner oder gleich
diesem Wert. Nur 10 Prozent der Züge liegen darüber.
Max
Höchste aufgezeichnete Decision Time der Engine.
DT=0%
Prozentualer Anteil der Decision Times, die als 0s gespeichert wurden. Laut Datenformat
bedeutet dies eine DT von weniger als 0,01 Sekunden, nicht zwingend eine mathematisch exakte
Null.
1s%, 3s%, 5s%, 15s%
Prozentualer Anteil der Züge, deren Decision Time strikt größer als 1, 3, 5 beziehungsweise 15
Sekunden war.
Diese Bereiche sind kumulativ. Eine Decision Time von 16 Sekunden wird daher in allen vier
Spalten gezählt.
Plausibilitätsprüfung des Ergebnisses
Der Output wirkt intern sehr konsistent.
Von insgesamt 19.356.972 Zügen waren 1.440.000 Buchzüge. Es verbleiben damit 17.916.972
Nicht-Buchzüge.
Diese verteilen sich exakt auf
17.773.142 Kommentare mit gültiger Decision Time
135.271 Kommentare mit Zugzeit, aber fehlender Decision Time
8.559 nicht erkannte oder nicht statistisch verwertbare Kommentare
Die Summe entspricht genau der Anzahl aller Nicht-Buchzüge. Es scheint daher kein Zug verloren
gegangen oder doppelt gezählt worden zu sein.
Auch die Engine-Zuordnung ist plausibel
120.000 Partien ergeben 240.000 Engine-Teilnahmen.
16 Engines mit jeweils 15.000 Partien ergeben ebenfalls exakt 240.000 Teilnahmen.
Alle fehlenden Decision Times entfallen ausschließlich auf Integral und Obsidian.
Die Summe der dort fehlenden Werte entspricht exakt dem globalen Missing-Zähler.
Das passt zu der Information, dass nur das Head-to-Head Integral gegen Obsidian noch keine
Decision Times enthielt.
Aussagekraft von Mittelwert, Median und P90
Die DT-Verteilungen sind stark rechtsschief.
Bei vielen Engines liegt der Median bei 0,00s , während der Mittelwert dennoch ungefähr
zwischen 0,6 und 0,9 Sekunden beträgt. Das bedeutet
Die Engine hat bei mehr als der Hälfte aller Züge den später tatsächlich gespielten Zug bereits
praktisch sofort favorisiert. Einzelne deutlich längere Meinungswechsel ziehen den Durchschnitt
jedoch nach oben.
Ein gutes Beispiel ist Cinder
Mean 1,66 Sekunden
Median 0,13 Sekunden
P90 5,60 Sekunden
Maximum 53 Sekunden
Der Mittelwert liegt damit weit über dem Median. Einige längere Decision Times haben einen
erheblichen Einfluss auf den Durchschnitt.
Aus diesem Grund sollten Mean, Median und P90 immer gemeinsam betrachtet werden. Der
Mean allein beschreibt die Verteilung nicht ausreichend.
DT=0% ist besonders aussagekräftig
Diese Spalte zeigt enorme Unterschiede
Viridithas 2,26 %
Cinder 37,40 %
Quanticade 66,01 %
Stockfish 260720 80,27 %
Viridithas fällt extrem auf. Nur 2,26 Prozent seiner Decision Times wurden als 0s registriert,
gleichzeitig liegt der Median aber bei lediglich 0,07 Sekunden.
Das muss kein Fehler sein. Wahrscheinlich stabilisiert sich Viridithas sehr häufig nach ungefähr
0,05 bis 0,10 Sekunden, während andere Engines den später tatsächlich gespielten Zug bereits
innerhalb der ersten 0,01 Sekunden melden.
Mögliche Ursachen sind
unterschiedliche Häufigkeit der Ausgabe von info pv
anderes Iterative-Deepening-Verhalten
spätere Ausgabe des ersten ernsthaften Hauptzuges
eine Besonderheit der Cutechess-Messung im Zusammenspiel mit der jeweiligen Engine
Die Statistik misst daher nicht nur abstrakte Suchqualität. Sie kann auch Unterschiede im
Ausgabe- und Suchverhalten der Engines sichtbar machen.
Gerade solche Unterschiede sind ein wesentlicher Zweck der Auswertung.
Erste inhaltlich interessante Ergebnisse
Die Tabelle deutet auf einen möglichen Zusammenhang zwischen Spielstärke und Decision Time
hin
Stockfish 260720 hat den höchsten Score und gleichzeitig den niedrigsten DT-Mittelwert.
Stockfish 18 besitzt den zweithöchsten Score und ebenfalls eine sehr niedrige mittlere DT.
Reckless und PlentyChess erzielen starke Scores bei vergleichsweise niedrigen mittleren Decision
Times.
Cinder hat einen relativ schwachen Score und mit deutlichem Abstand die höchste mittlere DT.
Dies beweist noch keinen allgemeinen statistischen Zusammenhang. Stefans Vermutung
erscheint aber durchaus plausibel
Stärkere moderne Engines scheinen den letztlich gespielten Zug häufig bereits sehr früh
festzulegen.
Es gibt allerdings Ausnahmen. Torch erreicht einen starken Score, liegt beim mittleren DT-Wert
aber relativ weit oben.
Für eine belastbare Aussage sollte später eine formale Korrelationsanalyse ergänzt werden
Pearson-Korrelation für einen möglichen linearen Zusammenhang
Spearman-Rangkorrelation für den Zusammenhang zwischen Rangfolge und DT-Verhalten
Dabei könnten unter anderem folgende Beziehungen untersucht werden
Score% zu Mean DT
Score% zu Median DT
Score% zu DT=0%
Score% zu Anteil DT 1s
Score% zu Anteil DT 5s
Bewertung der gewählten Zeitbereiche
Die Bereiche 1s , 3s , 5s und 15s sind für eine erste Version gut gewählt.
Sie unterteilen das Verhalten verständlich in
mehr als 1 Sekunde merklicher Meinungswechsel
mehr als 3 Sekunden längere Unsicherheit
mehr als 5 Sekunden ausgeprägter später Wechsel
mehr als 15 Sekunden außergewöhnlich lange Festlegung
Die Schwellen sollten beibehalten werden.
Als spätere Ergänzung wären besonders sinnvoll
P95
P99
durchschnittliche DT nur für Werte größer als null
P95 und P99 wären robuster als das Maximum, da ein einzelner extremer Wert das Maximum
stark beeinflussen kann.
Der Durchschnitt nur der positiven Decision Times könnte zusätzlich unterscheiden zwischen
Engines mit häufigen kleinen positiven DTs
Engines mit sehr vielen 0s , aber wenigen extrem langen Wechseln
Vorläufiges Gesamturteil
Das Programm scheint bereits in der ersten Variante korrekt und praktisch einsetzbar zu sein.
Besonders überzeugend sind
die vollständige und exakt aufgehende Zählung aller Züge
die korrekte Trennung von Buchzügen, gültigen DTs, fehlenden DTs und unbekannten
Kommentaren
die plausible Zuordnung der fehlenden Werte zu Integral und Obsidian
die konsistente Anzahl der Partien pro Engine
die deutlich unterschiedlichen und inhaltlich interessanten DT-Verteilungen
Die gewählten Statistikbereiche sind sinnvoll.
Die Ergebnisse zeigen bereits jetzt Unterschiede,
die mit einer normalen Spielstärkerangliste allein nicht sichtbar wären.