Benno Hartwig schrieb:
Und Stockfish mit einem gute Buch ist dann wohl ungefähr gleichstark wie Brainfish, richtig?
Nein, eben nicht. Die Ceberellum Library wurde nicht nur von Stockfish selbst berechnet, sondern - und das ist der wesentliche Punkt - rückwärts. Dadurch ist sie allen konventionellen Eröffnungsbüchern weit überlegen. Kurzer Auszug aus der Beschreibung dazu:
Was ist die Cerebellum Library?
Die Cerebellum Library ist eine Datenbank von Eröffnungsstellungen. Allerdings ist sie weit mehr, als ein klassisches Eröffnungsbuch, was einfach in die Stockfish-Engine eingefügt wurde. Und sie ist auch nicht nur eine simple Vorab-Berechnung von Stellungen mit einer Engine und das Abspeichern derselben in einer Datenbank. Deswegen spielt die Library auch tatsächlich besser als die verwendete Zugzeit und Hardware waren, und in einigen Fällen sogar besser, als es einer Engine heutzutage überhaupt möglich ist, d.h. es sind Analysen möglich, die mit einer Engine allein nicht machbar wären und es wird im praktischen Engine-Spiel eine Eloleistung erreicht, die deutlich und meßbar über die Leistung der Stockfish-Engine hinausgeht!
Nehmen wir an, man will z.B. im Fernschach über eine komplizierte Stellung die "letzte Wahrheit" erfahren, d.h. eine korrekte Bewertung und alle wichtigen Abspiele/Zugfolgen. Nun kann man irgendeine Engine lange rechnen lassen, und erhält einen Score und eine Haupvariante (im Multi-Varianten Modus auch mehrere für die besten Züge). Jetzt schaut man sich das Ergebnis an und denkt, hoppla, da kann doch was nicht stimmen, was spielt denn die Engine z.b. auf diese oder jenen Zug/Zugfolge?.Also geht man in der GUI im Stellungsbaum immer wieder vor und zurück und schaut sich an ,was die Engine zieht. Augrund der Hashtables kann das dann auch zu einer Veränderung der Bewertung der Ausgangsstellung führen. Was hat man am Ende vorliegen? Eine grosse Anzahl von analysierten Stellungen mit Bewertungen und eine Idee von möglichen besten Zugfolgen. Was man nicht hat, ist ein konsistenter Überlick über den gesamten Variantenbaum, und man hat auch keine richtige Vorstellung davon, ob diese Analyse evtl. Lücken oder Fehler aufweist.
Jetzt kommt die Library zum Zug:
Nehmen wir an, man hat eine große Zahl von Stellungsbewertungen (Score + bester Zug) in einem Variantenbaum. Was ist das Problem? Diese Bewertungen sind fast nie konsistent! Beispiel:
Ausgangsstellung: Score + 0.20, bester Zug e4.
Stellung nach e4: Score + 0.18, bester Zug e5.
Stellung nach d4: Score + 0.22, bester Zug d5.
Stellung nach c4: Score + 0.16, bester Zug e5.
Was also jetzt? Die Bewertung im Ausgangsknoten sagt: Ziehe e4, wenn man sich aber die Nachfolgestellungen anschaut, müßte man eigentlich d4 ziehen, da das ja zur besten Bewertung führt. Und so weiter...Das heißt, das Problem stellt sich für jede Stellung im gesamten Suchbaum. Der Score nach d4 kann wieder nicht konsistent sein mit den Nachfolgestellungen von d4. Was muss man also tun, wenn man z.b. eine Million analysierte Stellungen ausgehend von der Ausgangsstellung hat? Man muss diesen Stellungsbaum ausbalancieren, d.h. jede Stellung konsistent mit allen Nachfolgestellungen machen. Und das geht prinzipiell nicht mit der normalen Baumsuche einer Engine, da es sich aufgrund der Möglichkeit von Stellungswiederholungen um ein graphentheoretisches Problem handelt. Bei dieser Ausbalancierung kann man auch nicht einfach bei einer Stellungswiederholung den Knoten auf den Score 0 setzen, das führt zu unauflösbaren Wiedersprüchen.
Im Endergebnis erhält man dann für jeden Knoten einen neuen Score und auch evtl. einen neuen besten Zug. Diese nachträgliche Neuberechnung aller Stellungen ist die eigentliche Leistung der Library. Sie führt zu einer nachträgliche Erhöhung der Suchtiefe, die durchaus manchmal +40 betragen kann.
Einfacher ausgedrückt: Eine normale Engine rechnet in einer beliebigen Stellung in die Zukunft, also nach vorne. In der Library werden diese Berechnungsergebnisse nun in die Stellungen davor, d.h. in die Vergangenheit, zurückgeholt. Das Verfahren ähnelt, wie schon erwähnt, einer manuellen Analyse einer Stellung mit einer Engine, die persistente Hahstables nutzt: Man spielt Züge, ausgehend von einer Ausgangsstellung, vor. Die Engine sieht nun dabei (spätere) Konsequenzen dieser Züge und speichert diese als Bewertung in den persistenen Hashtables ab. Nun nimmt man die Züge wieder zurück und analysiert wieder die Ausgangsstellung. Nun „weiß“ die Engine aber schon um die möglichen Konsequenzen von späteren Zügen, weil diese ja schon in den Hashtables vorliegen. Dadurch wird die Ausgangsstellung nun anders (und besser, weil vertiefter) bewertet, auch der favorisierte beste Zug kann nun ein anderer sein. Die Analyse wird dadurch also schachlich hochwertiger, als nur mit reiner Engine-Berechnung in der Ausgangsstellung. Nur sind die Daten in der Library - im Gegensatz zu manuellen Analysen mit Hilfe persistenter Hashtables – konsistent und frei von Lücken.Brainfish enthält nun aber nicht das gesamte Wissen der Library (wie z.B. die Bewertung),sondern nur den nach der Neuberechnung ermittelten besten Zug (manchmal noch den zweitbesten Zug, um die Variabilität zu erhöhen), was für das praktische Spiel aber ausreicht. Da Brainfish sowieso nicht rechnet, wenn eine Stellung auf dem Brett ist, die in der Library gespeichert ist, ist eine Stellungsbewertung auch nicht vonnöten.