Wie spare ich Suchtiefe wenn ich mich bei der Positionsauswertung auf Quiet Positions beschränken will (in einem Schachcomputer)?
Hallo Community,
Ich versuchte die Tage die Stellungsbewertung auf ruhige Stellungen zu beschränken und stehe vor einem Problem:
Wenn eine Seite im Suchbaum eine Figur schlägt sollte die Suchtiefe um ein ply wachsen. Wenn die andere Seite dann auf dem selben Feld schlägt um ein weiteres ply. Natürlich ist mir dann aufgefallen, dass man die Stellungen nach einem Zug von Schwarz nicht mit einer Stellung von einem Zug nach weiß vergleichen kann, die Seite die zuletzt gezogen hat steht zwangsläufig im Durchschnitt besser da.
Das hat mich zu folgender beta-Lösung gebracht:
Wenn beim letzten regulären ply keine Figur geschlagen wird, endet die Suche mit einer Auswertung der Stellung für weiß. Wenn im letzten regulären ply eine Figur geschlagen wird, wächst die Suchtiefe um zwei ply und endet wieder mit einer Auswertung der Stellung nach einem Zug von weiß. Wenn eine Figur schlägt, der Gegner zurückschlägt und dann wieder auf dem selben Feld geschlagen wird, steigt die Tiefe um zwei weitere Ply.
Diese Methode verursacht nur eine Menge scheinbar unnötiger möglicher Zugberechnung, da ich nachdem der Spieler schlägt alle Möglichkeiten für den Gegner berechnen muss, nur um zu wissen ob er zurückschlägt. Und für alle Wege im Suchbaum, in denen er nicht zurückschlägt, scheint die Vorausberechnung sinnlos, da die Stellungsbewertung ein Ply weiter vorne im Suchbaum geschieht.
Gibt es einen Weg um entweder das vorausberechnete zusätzliche Ply zu verwenden um die Bewertung zu verbessern oder die Vorausberechnung doch irgendwie komplett wegzulassen?
1 Antwort
schau mal bei chatgpt nach:
Hier seine Antwort die eigentlich immer weiterhelfen:
Die beschriebene Strategie ist in der Schachprogrammierung ein bekanntes Verfahren, das oft als "Quiescence Search" bezeichnet wird. Das Ziel ist, Züge zu berücksichtigen, die das Gleichgewicht der Position drastisch verändern könnten (wie das Schlagen von Figuren), bevor die Stellungsbewertung vorgenommen wird. Dies verhindert, dass der Computer eine Position überbewertet, weil er nicht gesehen hat, dass eine Figur im nächsten Zug geschlagen werden könnte.
Ein üblicher Ansatz, um unnötige Berechnungen zu reduzieren, besteht darin, die Quiescence Search auf eine bestimmte Tiefe zu beschränken oder nur bestimmte Züge (wie Schlag- und Promotionszüge) zu berücksichtigen.
Wenn die Quiescence Search weiterhin zu zeitaufwändig ist, könnten Sie eine Heuristik einsetzen, um zu entscheiden, ob es wahrscheinlich ist, dass der Gegner zurückschlägt. Beispielsweise könnten Sie berücksichtigen, ob das geschlagene Stück von höherem Wert ist oder ob das schlagende Stück durch den Zug gefährdet wird.
In Bezug auf die Verwendung der vorausberechneten zusätzlichen Ply zur Verbesserung der Bewertung: Dies ist durchaus möglich und wird oft als "Principal Variation Search" (PVS) bezeichnet. Mit PVS speichern Sie die Züge des "besten Pfads", den Sie bisher gefunden haben, und untersuchen diesen Pfad zuerst, wenn Sie tiefer in den Baum eintauchen. Dies kann dazu führen, dass weniger Züge in Betracht gezogen werden müssen, da Sie oft denselben Pfad verfolgen und dadurch weniger "schlechte" Züge untersuchen.
Eine weitere Methode zur Verbesserung der Effizienz ist das "Transposition Table" (TT), bei dem bereits bewertete Positionen in einer Datenstruktur gespeichert werden. Wenn dieselbe Position später erneut auftritt (was im Schach oft vorkommt), können Sie einfach die gespeicherte Bewertung verwenden, anstatt die Position erneut zu berechnen.
Bitte beachten Sie jedoch, dass all diese Methoden die Komplexität des Programms erhöhen und es schwieriger machen können, Fehler zu finden und zu beheben. Es ist also eine Frage des Ausgleichs zwischen der Effizienz der Suche und der Komplexität des Codes.
gerne, ja verstehe ich. Chatgpt gibt nicht immer 100% richtige Antworten, da darf man nicht drauf vertrauen. Allerdings kannst du ihn solange schlagen und volllabern bis du das Problem gelöst hast
Ich mag die KI's an sich nicht. Aus moralischer Sicht, dass sie Arbeitsplätze frisst und die Leute vom selber nachdenken abhält.
Also ich habe die Quiescence Search bereits auf eine bestimmte Tiefe beschränkt und schaue auch nur auf Schlag-Züge. Wenn ich nur gucke ob die schlagende Figur wertvoller ist als die geschlagene, ignoriere ich viele wichtige Möglichkeiten. Schauen ob zurückgeschlagen werden kann klingt sinnvoll, das verbraucht weniger Ressourcen als ein ganzes Ply Tiefe. Das probiere ich mal (dauert eine Weile, wenn ich es umgesetzt habe, komme ich darauf zurück). Wenn ich das zusätzliche Ply für eine PVS verwenen will, müsste ich ja direkt nach jedem möglichen Zug die Stellung auswerten, das wäre wieder zusätzlicher Rechenaufwand... Abgesehen davon mag ich Chat GPT nicht besonders, deswegen habe ich hier gefragt. Trotzdem Danke.