Neues Test-Verfahren für Schach-Programme
Der «Barometer»-Engine-Test (B-E-T)
Walter Eigenmann
Schon seit Jahren besteht die Hauptbeschäftigung der weltweit zahlreichen PC-Schach-Anwender darin, auf ihren heimischen Rechnern die mittlerweile hunderte von Schach-Engines mehr oder weniger systematisch gegeneinander antreten zu lassen, um aufgrund der Partien-Ergebnisse Rankings zu generieren. Denn in der internationalen (Computer-)Schach-Szene galt und gilt es bis heute als ausgemacht, dass die Spielstärke eines Schach-Programmes allein mit Hilfe von entsprechenden Turnieren zuverläßig zu ermitteln sei. Andere Verfahren der Rangierung wurden/werden praktisch einhellig als «zufällig», als «partikulär» oder gar als «subjektiv» kritisiert.
In vielwöchiger Arbeit – verteilt auf zwei Jahre – hat der Autor nun einen Stellungstest für Schach-Programme entwickelt, welcher die Rangliste der Engines genau so zuverläßig generiert wie die beiden Referenz-Turnier-Rankings der aktuellen Computerschach-Szene (nämlich CEGT und CCRL).
Die neue Test-Suite heißt B-E-T («Barometer Engine Test») und umfasst exakt 400 Schach-Aufgaben, die je innerhalb einer Minute zu lösen sind. Der «Barometer» benötigt also nur knapp sieben Stunden, um die definitive Spielstärke eines neuen Programmes zu eruieren. Das u.U. wochen- und monatelange zeitaufwändige Austragen abertausender Turnier-Partien allein zwecks Ermittlung der Engine-Performances ist damit Vergangenheit.
Positiv formuliert: Der B-E-T setzt Rechner- wie Human-Time-Ressourcen frei, welche inskünftig sinnvolleren Computerschach-Beschäftigungen als der (statistisch relevanten, aber schachlich meist völlig ignorierten Blitz-) Partien-«Produktion auf Halde» zugute kommen (könnten).
Unnötig zu erwähnen, dass selbstverständlich die Generierung von Engine-Engine-Partien, sofern sie mit langen Bedenkzeiten (=mind. 30Min/Engine) auf schneller Hardware gespielt werden und damit qualitativ hochstehendes Schach produzieren, nach wie vor wichtig ist, ja immer wichtiger wird. Denn je länger die Software-Entwicklung des Computerschachs andauert, umso klarer wird der gesamten Schach-Welt, dass mittlerweile das ganz «hohe Schach» nicht mehr in den Säälen der Großmeister-Turniere, sondern in den Veranstaltungen des virtuellen «Freestyle-Chess» stattfindet – oder in absehbarer Zeit überhaupt nur noch auf den privaten 8-Cores-Maschinen.
Exkurs1: Die «Spielstärke»
Ein ewiger definitorischer Streitpunkt nicht in der weltweiten Schach-Community, aber in den Computerschach-Foren ist der Begriff der «Spielstärke». Die vorliegende Untersuchung verwendet diesen Terminus in einem pragmatischen Sinne – wie das in der gesamten Schach-Welt der Fall ist. Demnach nennt man beispielsweise Ex-Weltmeister-Kasparow (zurecht) deshalb den «stärksten Spieler» seiner Epoche, weil er mehr Turnier-Partien gegen seinesgleichen gewann als die anderen. Er war also nicht zwingend gleichzeitig der «stärkste Blitzer», der «stärkste Problemlöser», der «stärkste Kommentator», der «stärkste Eröffnungstheoretiker», etc. – aber er war der stärkste Turnier-Spieler, weltweit anerkannt als die Nummer Eins, und als solche mathematisch dokumentiert im internationalen Elo-System.
Die Dominanz Kasparows hat im aktuellen Computerschach ihr Analogon: Das Programm «Rybka» beherrscht zurzeit die Turnier-Szene unangefochten; es ist das also «spielstärkste» Programm. (Dabei ist es beispielsweise allenfalls Image-schädigend, aber ihre Performance nicht wirklich beeinflussend, dass diese «stärkste» Engine bis heute auch durchaus Peinlichkeiten produzieren kann, wie sie andere Spitzen-Programme nicht aufweisen (beispielsweise mangelhafte Unterverwandlung, oder spezifische Zugzwang-Probleme, oder ziemliche Defizite im Königsangriff, u.a.)
Eine wesentliche Komponente von «Spielstärke» ist zweitens – gerade, aber nicht nur im Zusammenhang mit Computerschach – die Schnelligkeit. Bereits Vidmar (in seinen legendären «Goldenen Schachzeiten») wies explizit darauf hin, dass «die Geschwindigkeit des Denkapparates» für den Erfolg in dem Zeit-Sport Schach entscheidend ist. Für den B-E-T heißt das, dass das schnellste Programm in einer bestimmten Stellung auch dann das «stärkste» heißt, wenn alle anderen (langsameren) Programme die Aufgabe genauso lösen. (Pointiert formuliert: Irgendwann findet auch die «dümmste» unter den Engines die Lösung…) Der «Barometer» relativiert allerdings diesbezüglich nicht weiter (im Gegensatz etwa zu differenzierteren, aber mit anderen Fehlern behafteten Auswertungsverfahren wie z.B. «EloStatTS» des Statistikers Frank Schubert), sondern addiert schlicht die richtigen Lösungen; Der B-E-T gibt ein Zeit-Fenster vor, und das vermag ein Programm einzuhalten – oder eben nicht einzuhalten.
Exkurs2: Der «beste Zug»
Für gehörige Begriffsverwirrung, und diesmal nicht nur in der Computerschach-Szene, sorgt eine zweite, ebenso häufig wie nebulös benützte Vokabel: jene des sog. besten Zuges. Der Grundsatz-Streit, ob – wie z.B. Tarrasch proklamierte – jede Schach-Stellung (auch die vordergründig völlig «ausgeglichene») einen objektiv «einzigen besten» Zug aufweise, den es zu finden gelte, ist alt. Nun kann für den menschlichen Turnier-Kämpfer die Maxime, nach diesem «Einzigen» zu fahnden, nur schon aus Zeit-Gründen nicht gelten. Vielmehr beziehen bekanntlich moderne Großmeister nicht nur ihr theoretisches, sondern konsequent ebenso ihr Wissen über die spezifischen (auch psychologischen) Stärken und Schwächen der Gegnerschaft mit in die Zug-Auswahl ein.
Anders beim computerisierten Schach – zumal im Zusammenhang mit einer Aufgaben-Sammlung: Hier ist die Forderung nach dem «Einzigen Besten» nicht nur legitim, sondern sogar zwingend. Denn es gilt (ohnehin jenseits aller Psychologie) die Zufälligkeiten der Engine-typischen Zug-Generierung, resultierend aus meist «vager» Bewertung nach Bauerneinheiten, dergestalt zu umgehen, dass sich der gesuchte von den Kandidaten-Zügen «deutlich» abhebt, damit die Test-Stellung aussagekräftig wird.
«Praktisch gleich gute Züge» können schachlich interessant oder amüsant sein (und z.B. im Fernschach durchaus zur Plan-Findung durch den Menschen beitragen), sind aber als Test-Grundlage für Schach-Programme völlig ungeeignet, weil sie die «Entscheidung», den «Willen», das «wahre» Rechen-Ergebnis einer Engine nicht unmissverständlich und definitiv dokumentieren, sondern der präferierte Zug zum Zufalls-Produkt auch außerschachlicher Prozesse (Hardware-technische «Unebenheiten», Hintergrund-Aktivitäten, Memory-Nutzung u.a.) werden kann.
Dieses Problem der Nichtreproduzierbarkeit von Test-Ergebnissen wird noch verschärft durch die modernen Multi-CPU-fähigen Engines; schon bald nach Erscheinen der ersten Dual- und Quad-Geräte wurde klar, dass manchmal Partie-Züge in gleichen Stellungen bei manchen Programmen unter sonst gleichen Bedingungen unterschiedlich ausfallen (Siehe dazu auch einen im technischen Kern richtigen, aber in seinen Schlussfolgerungen irrational übertriebenen Artikel von Lars Bremer: Chaos-System Deep Engine, CSS-Online 2007).
Das Phänomen kann jedenfalls (von einem Stellungstest-Autor) grundsätzlich ignoriert werden. Denn erstens sind die angesprochenen Verwerfungen sehr selten (sprich auf ein paar hundert Stellungen und hundert Engines schätzungsweise in 15-20 Fällen vorkommend, wie entspr. Meldungen in einschlägigen Foren sowie eigene Stichproben nahelegen), und zweitens kann es durch die (schon oben angesprochene) sorgfältige Selektion «deutlich bester» Züge praktisch eliminiert werden. Drittens fängt allein schon ein je großzügig bemessenes Zeitfenster – in unserem Falle: 60 Sek./Zug – solche Verwerfungen in der Zug-Suche auf. Denn auch MP-Schach-Engines sind mitnichten Chaoten mit zufälligen Produkten: Eine MP-Engine wird, wie jede praktische Erfahrung beweist, immer stärker Schach spielen als ihr Single-Pendant, sofern sie hardwareseits gut adaptiert wurde.
(Sobald die 400 Aufgaben-Stellungen allgemein verfügbar sind, wird es für interessierte Tester ein Leichtes sein, das Ausmaß dieser «Nicht-Reproduzierbarkeit» im Experiment nachzuprüfen, indem die fraglichen MP-Engines je drei Mal (besser 5-7 Mal) den B-E-T zu durchlaufen haben. Dabei dürfte es jedesmal zu leicht abweichenden Gesamt-Lösungszahlen kommen, aber unterm Strich (= im Durchschnitt) werden sich die Ergebnisse die Waage halten, wie der Autor überzeugt ist. Dass also schließlich eine ganz andere Rangliste als die untenstehende resultiert, ist zwar theoretisch nicht unmöglich – aber extrem unwahrscheinlich.)
Kurzum: Erfolgreiches Spielen heißt grundsätzlich, einerseits gute Züge zu finden und andererseits schlechte Züge zu vermeiden – in diesem Grundsatz unterscheiden sich Mensch und Maschine nicht; Das bessere Programm findet insgesamt mehr beste Züge, und das insgesamt schneller, als das schlechtere – und genau dies zu dokumentieren ist Aufgabe eines sorgfältig konzipierten Computerschach-Stellungstests.
Genesis eines Stellungstests
Ausgangspunkt meiner Beschäftigung mit dem B-E-T war die Frage, welchen Grad an (computer-)schachlicher Repräsentanz ein paar hundert Aufgaben-Stellungen aufweisen müssen/können, damit die jeweilige Summe der von einem Programm erzielten Lösungen stark mit jenem Rang korreliert, den dieses Programm im durchschnittlichen Turnier-Betrieb innehat. Dieser «durchschnittliche» Rang wird ausgewiesen in den «Elo»-Ergebnissen, welche die beiden weltweit meistkonsultierten und zuverläßigsten, weil statistisch abgesicherten und dabei sowohl personell wie organisatorisch unabhängig voneinander agierenden Engine-Test-Organisationen CEGT und CCRL liefern. Die Zielsetzung war also, dass die Engine-Ergebnisse des B-E-T in keinem Falle einen höheren Abweichungsgrad aufweisen, als ihn eine Engine im direkten durchschnittlichen Vergleich dieser beiden Referenz-Ranglisten aufweist.
Nun war dem Problem mit mehr oder weniger wahllosem Engine-«Ausprobieren» von ein paar hundert Schachstellungen grundsätzlich nicht beizukommen. Angesichts so hochkomplexer Wirkungsketten, wie sie Schachpartien-Züge darstellen, würde einen Sterblichen das schiere Material erschlagen, und stünden ihm auch zwanzig Hochleistungs-Computer gleichzeitig zur Verfügung.
Die Lösung lag vielmehr da, wo sie auch jeder Großmeister sehr erfolgreich findet: in der Typisierung. Es galt, die insbesondere computer-schachlich relevanten Stellungs-Muster so systematisch wie möglich zu katalogisieren: Taktisch bereinigte, analoge Zug- bzw. Züge-Elemente wurden zu übergeordneten Motiven zusammengefasst; diese miteinander verwandten Motiv-Bündel wiederum ergaben ein neuerlich übergeordnetes Paradigma. Das heißt also, dass jede Aufgabe des B-E-T quasi als Paradigma fungiert, welches seinerseits eine Reihe von taktisch verschiedenen, aber «im Kern» analogen, also von ihrer schachlichen «Idee» her grundsätzlich austauschbaren Motive subsumiert. Dies Verfahren ist stark an das vielgerühmte «Muster-Denken» aller Meisterspieler angelehnt. Auf diese Weise lassen sich noch am ehesten die Miriaden von Schach-Zugmöglichkeiten bändigen bzw. durch ein paar hundert Stellungen repräsentieren.
Hierzu waren selbstverständlich eine Menge Recherchen vonnöten. Neben vielerlei moderner Schach-Lektüre war mir hier insbesondere der große Systematiker Max Euwe mit seinem 750-seitigen »Mittelspiel» hilfreich; die methodische Akribie in diesem Wälzer ist m.E. immer noch unerreicht. Rein vom Katalogisieren her konsultierte ich sodann ein zweites einschlägiges Kompendium, nämlich die Polgar-Enzyklopädie «ChessMiddleGames» (siehe deren Inhaltsverzeichnis unten) – obschon daraus kaum eine der rund 4’000 Positionen in meinem Test auftaucht, weil erstens eine Suite mit vorwiegend erstmals von mir veröffentlichten Aufgaben entstehen sollte, zweitens der grössere Teil der Test-Stellungen aus spezifischen Computerschach-Partien stammen musste, und drittens viele dieser Polgar-Aufgaben (gemäß zahlreichen Stichproben) nicht 100%ig korrekt sind.
Was wiederum das Computerschach-Material betrifft, nutzte ich sehr ausgedehnt die sog. COMP2007, deren (bei fast 700’000 Partien) umfassende Sammlung von ausschließlich Games mit längeren und langen Bedenkzeiten auf sehr langsamer bis sehr schneller Hardware ideal für meine Stellungs-Recherchearbeit war. Hinsichtlich des Endspiels durchforstete ich – neben zahlreichen Computer- und Fernschach-Partien – schließlich die große Studien-Datenbank von H. Van Der Heijden; deren Kompositionen präsentieren, wo sie auf technisch hohem Niveau daherkommen, die «Idee», den thematischen Kern eines Endspieles oft in besonders «reiner», unverschnörkelter Form, womit sie sehr geeignet sind für Computerschach-Tests. Dabei wurde allerdings auf größtmögliche Realitätsnähe geachtet; bis auf wenige Ausnahmen hätten die fraglichen Stellungen problemlos auch in tatsächlich gespielten Computer- oder Menschen-Partien entstanden sein können. Die «Ausnahmen» betreffen v.a. spezifisch Computerschach-Technisches wie beispielsweise «Zugzwang»-, «Horizont»- oder «Nullmove»-Probleme, welche gerade mit Studien hervorragend untersucht werden können.
Bedenkzeit: 60 Sekunden pro Stellung
Für eine Computerschach-Testsuite ist die Dauer der Bedenkzeit pro Aufgabe von wesentlicher Bedeutung – zumal dann, wenn mehrere hundert Stellungen von möglicherweise mehreren hundert Programmen getestet werden sollen… Hier verfolgte ich einen pragmatischen bzw. praktikablen Ansatz, denn zum einen soll der «Barometer» ein «Über-Nacht-Test» sein, der Resultate nach wenigen Stunden liefert; andererseits muss pro Aufgabe eine hohe Stabilität der Zug-Generierung gewährleistet sein; drittens soll die Bedenkzeit einigermaßen mit jener zu tun haben, die im durchschnittlichen Engine-Turnier-Betrieb der internationalen Computerschach-Community – namentlich der beiden erwähnten CEGT- und CCRL-Tester-Gruppierungen – favoritisiert wird; und schließlich war die aktuelle Hardware bzw. deren Entwicklung zu berücksichtigen.
Um allen diesen vier Punkten zu genügen, wurde der B-E-T – mittels recht ausgedehntem Stichproben-Experimentieren mit ein paar sehr starken wie sehr schwachen Engines auf einem (eher gemütlichen) «Athlon64/3000+» – auf eine Bedenkzeit von 60 Sekunden pro Stellung «geeicht». (Übrigens enthält der «Barometer» auch ca. zwei Dutzend extrem schwierige, vornehmlich strategische Aufgaben, die wahrscheinlich in absehbarer Zukunft von keinem Schachprogramm gelöst werden dürften).
Der Einfluss der Partie-Bedenkzeiten auf die Turnier-Ränge eines Schach-Programmes wird im übrigen immer wieder überschätzt. Hierzu sei eine eigene kleine Untersuchung zitiert (siehe hier ), welche das Fazit hat, dass sogar der Unterschied zwischen langer Turnier- und kurzer Blitz-Bedenkzeit nur in Ausnahmefällen relevant auf die Ranglisten durchschlägt. Mehr noch: Bei einer statistisch ausreichenden Anzahl Partien sind überhaupt Match-Details wie Rechner-Typen, Programm-Parameter, Pondering-Einstellungen, Eröffnungsbücher, Endspiel-Datenbanken oder die Hash-Größen von sekundärer Bedeutung.
Der B-E-T in der Praxis
Dem Autor steht seit kurzem (anfangs Mai 2008) ein No-Name-Dual-Core6400-Gerät (mit Vista-Home/32bit, 128Mb Hash, 3-6 Nalimov-, Shredder- & EGBB-Bases, «Arena»-, «Fritz»- & «Shredder»-GUIs) zur Verfügung, und inzwischen hat er mit der Test-Arbeit bzw. der Generierung der entspr. Rangliste begonnen (siehe unten). (Ich behalte mir allerdings vor, nicht absolut jede kommerzielle Engine-Neuheit zu kaufen… :-)
Diese Rangliste wird über einen längeren Zeitraum hinweg ständig aktualisiert werden; für interessierte Computerschach-Freunde und Programmierer dürfte es sich also lohnen, hier regelmäßig reinzuschauen. Die 400 Aufgaben sind zurzeit nur privat, da die (in der Vergangenheit immer wieder bestätigte) «Gefahr» besteht, dass manche Programmierer der Verlockung nicht widerstehen können (= ihre Engines gezielt auf die bekannten Stellungstests zu tunen pflegen…) Zu gegebenem Zeitpunkt wird aber der B-E-T selbstverständlich (inklusive Analysen sowie PGN-&EPD-Files) zum Gratis-Download angeboten werden.
Wie ist das nachstehende Ranking grundsätzlich zu interpretieren?
Der B-E-T kann (und will) seine Rangierungen nicht so differenzieren wie z.B. Listen, die nach Arpad Elos berühmter Formel berechnet wurden (siehe u.a. die oben erwähnten CEGT- und CCRL-Ranglisten). Der «Barometer»-Test erlaubt aber Aussagen wie: «Engine A ist ungefähr gleich stark wie Engine B», «Engine C ist deutlich schwächer als Engine C», «Engine D ist etwas stärker als Engine E». Dabei entsprechen ca. 0-5 BET-Punkte der Charakterisierung «ungefähr gleich stark», 6-10 BET-Punkte «etwas stärker/schwächer» und 11-n BET-Punkte «deutlich stärker/schwächer».
Der B-E-T zeigt also das relative Spielstärke-«Umfeld» eines Programmes an, ohne absolute Vergleiche anzustellen; dementsprechend sind auch die Abstände der Engines cum grano salis zu nehmen. Aber selbstverständlich kann dort von einem massiven Spielstärke-Unterschied ausgegangen werden, wo eine BET-Differenz mehr als 40 Punkte beträgt.
Die Computerschach-Rangliste gemäß B-E-T
Programm Lösungen 001 Rybka 2.3.2a x32 2CPU 273 002 Rybka 2.3.2a x32 1CPU 263 003 Zappa Mexico II x32 2CPU 249 004 Naum 3 x32 2CPU 248 005 Zappa Mexico x32 2CPU 244 006 Deep Shredder 11 x32 2CPU 244 007 Toga II 1.4.2JD x32 2CPU 240 008 Fritz 11 CB x32 1CPU 237 009 Glaurung 2.1 x32 2CPU 237 010 Hiarcs 11.2 x32 1CPU 230 011 Deep Shredder 11 x32 1CPU 229 012 Fritz 10 CB x32 1CPU 229 013 Loop 13.6 x32 2CPU 228 014 Toga II 1.3.1 x32 1CPU 224 015 Fruit 05/11/03 x32 1CPU 224 016 Bright 0.3a x32 2CPU 224 017 Spike 1.2 Turin x32 2CPU 223 018 Zappa Mexico x32 1CPU 222 019 Shredder 10 x32 1CPU 222 020 Rybka WinFinder 2.2 x32 1CPU 221 021 Fritz 9 x32 1CPU 219 022 Deep Sjeng 2.7 x32 2CPU 218 023 Bright 0.2c x32 2CPU 218 024 Glaurung2 eps/5 x32 2CPU 217 025 Hiarcs 10.0 x32 1CPU 216 026 Spike 1.2 Turin x32 1CPU 201 027 Deep Sjeng 2.7 x32 1CPU 201 028 Chessmaster11000 x32 2CPU 201 029 Junior 10.1 CB x32 1CPU 196 030 Ktulu 8.0 x32 1CPU 194 031 Bright 0.2c x32 1CPU 194 032 Glaurung2 eps/5 x32 1CPU 192 033 Naum 2.0 x32 1CPU 191 034 Chess Tiger 2007.1 x32 1CPU 190 035 Frenzee Feb08 x32 1CPU 190 036 SmarThink 1.00 x32 1CPU 189 037 Junior 9 CB x32 1CPU 183 038 Alaric 707 x32 1CPU 181 039 Pharaon 3.5.1 x32 2CPU 181 040 Movei 0.08.438 x32 1CPU 179 041 Gandalf 6.0 x32 1CPU 178 042 Chessmaster10000 x32 1CPU 173 043 WildCat 8 x32 1CPU 171 044 Ruffian 2.1.0 x32 1CPU 164 045 SlowChessBlitzWV2.1 x32 1CPU 162 046 Pharaon 3.5.1 x32 1CPU 160 047 Pro Deo 1.2 x32 1CPU 153 048 WildCat 7 x32 1CPU 153 049 Aristarch 4.50 x32 1CPU 153 050 The Baron 1.8.1 x32 1CPU 153 051 Crafty 20.14 CB x32 2CPU 150 052 Anaconda 2.0.1 CB x32 1CPU 150 053 SOS 5.1 x32 1CPU 150 054 Colossus 2007a x32 1CPU 146 055 Alfil 8.11 x32 1CPU 140 056 Hermann 2.3 x32 2CPU 136 057 Crafty 20.14 CB x32 1CPU 136 058 Nimzo 8 CB x32 1CPU 134 059 Yace 0.99.87 x32 1CPU 130 060 Quark 2.35 x32 1CPU 129 061 Amyan 1.597 x32 1CPU 125 062 Gaia 3.5 x32 1CPU 125 063 AnMon 5.60 x32 1CPU 124 064 Delphil 1.9 x32 1CPU 117 065 Twisted Logic 20080404x/32/1 112 066 Cyrano 0.4 x32 1CPU 112 067 Comet B68 CB x32 1CPU 109 068 Djinn 0.925x x32 1CPU 105 069 NanoSzachy 3.3 x32 1CPU 104 070 Cheese 1.2 x32 1CPU 102 071 Homer 2.0 x32 1CPU 099 072 Caligula 0.3b x32 1CPU 093 073 Doctor? 3.0 CB x32 1CPU 090 074 ZCT 0.3.2447 x32 1CPU 082 075 Arion 1.7 x32 1CPU 081 076 Resp 0.19 x32 1CPU 081 077 FireFly 2.5 x32 1CPU 081 078 BikJump 1.7 x32 1CPU 081 079 Uralochka 1.1b x32 1CPU 079 080 GreKo 5.7 x32 1CPU 070 081 BSC 0.3 x32 1CPU 068 082 Bambam CB x32 1CPU 066 083 Wing 2.0a x32 1CPU 065 084 Mint 2.3 x32 1CPU 063 085 Ifrit B2.1 x32 1CPU 062 086 ECE 0.3 x32 1CPU 061
(Stand: 14.Juni 2008 - Die Testarbeit am B-E-T wurde bis auf weiteres eingestellt)
.
2 comments