zeitliche Differenz im Schach umsetzen

10

Ich habe ein Schachprogramm entwickelt, das einen Alpha-Beta-Bereinigungsalgorithmus und eine Bewertungsfunktion verwendet, die Positionen unter Verwendung der folgenden Merkmale bewertet, nämlich Material, Königssicherheit, Mobilität, Bauernstruktur und gefangene Figuren usw. ..... Meine Bewertungsfunktion ist abgeleitet von der

f(p)=w1material+w2kingsafety+w3mobility+w4pawn-structure+w5trapped pieces

Dabei ist das Gewicht, das jedem Merkmal zugewiesen ist. An dieser Stelle möchte ich die Gewichte meiner Bewertungsfunktion anhand der zeitlichen Differenz einstellen, wobei der Agent gegen sich selbst spielt und dabei Trainingsdaten aus seiner Umgebung sammelt (was eine Form des verstärkenden Lernens ist). Ich habe einige Bücher und Artikel gelesen, um einen Einblick in die Implementierung in Java zu erhalten, aber sie scheinen eher theoretisch als praktisch zu sein. Ich benötige eine detaillierte Erklärung und Pseudocodes, wie ich die Gewichte meiner Bewertungsfunktion basierend auf früheren Spielen automatisch einstellen kann.w

user2890137
quelle

Antworten:

4

Ich empfehle jedem, der sich für das Thema interessiert, einen Blick auf das Papier zu werfen , das TDL und Deep Learning kombiniert.

In etwa müssen Sie die Engine dazu bringen, Spiele gegeneinander zu spielen. Notieren Sie die Mini-Max-Bewertung für jede Position. Am Ende des Spiels erhalten Sie eine Belohnung von {0,1, -1} für Schach. Dann müssen Sie Ihre Parameter anpassen mit:

Geben Sie hier die Bildbeschreibung ein

Diese Gleichung sagt uns, dass wir die Gewichte durch zeitliche Unterschiede anpassen sollten, gewichtet danach, wie weit Sie es tun sollten. Wenn Sie eine perfekte Bewertung haben, ist Ihre zeitliche Differenz immer Null, sodass Sie keine Anpassung vornehmen müssen.

Als nächstes müssen Sie die neuen Parameter verwenden, um ein neues Spiel zu spielen. Wiederholt so lange, bis Sie sich leisten können oder wenn Sie glauben, dass es konvergiert.

Einige Bemerkungen:

  1. Das von mir zitierte Papier wendet einen Abzinsungsfaktor an. Dies geschieht für den Backproportion-Algorithmus für neuronale Netze. Du brauchst es nicht.
  2. Sie müssen mit der optimalen Lernrate experimentieren (Alpha in der Gleichung). Zu groß macht Ihr Lernen instabil, zu wenig dauert länger, um zu konvergieren. Ich habe Leute gesehen, die 0,70 benutzt haben. Das Papier, das ich zitiere, verwendete 1.0.
Hallo Welt
quelle
Hallo, ich liebe deine Antwort, aber könntest du bitte den Link zum Papier reparieren?
Padura
@ Padura behoben. Bitte lesen Sie. Es war eine gute Lektüre für die Datenwissenschaft.
HelloWorld
(+1) Großartige Antwort.
Liebte
Das ist ein großartiger Artikel, schade, dass ich das zu der Zeit, als ich an meiner eigenen Schachmaschine arbeitete, nicht wusste;) Ich frage mich, ob wir uns durch die Kombination mit dieser Technik verbessern können: bjmc.lu.lv/fileadmin/user_upload/lu_portal/ projekti / bjmc /…
padura
2

Eine erste Bemerkung: Sie sollten sich 'Wargames' ansehen, um zu wissen, worauf Sie sich einlassen.

Was Sie wollen, ist f (p), so dass f (p) der Positionsstärke so nahe wie möglich kommt.

Eine sehr einfache Lösung mit genetischem Algo wäre, 10000 Spieler mit unterschiedlichen Gewichten einzurichten und zu sehen, welche gewinnt. Behalten Sie dann das Gewicht der 1000 besten Gewinner bei, kopieren Sie sie 10 Mal, ändern Sie sie leicht, um den Gewichtsraum zu erkunden, und führen Sie die Simulation erneut aus. Das ist Standard-GA, wenn man eine funktionale Form betrachtet, was sind die besten Koeffizienten dafür.

Eine andere Lösung besteht darin, die Positionen zu extrahieren, sodass Sie eine Tabelle "(Material, Königssicherheit, Mobilität, Bauernstruktur, gefangene Teile) -> Positionsgüte" haben, in der die Positionsgüte ein objektiver Faktor ist (Ergebnisgewinn / -verlust, berechnet anhand der obigen Simulationen) oder bekannte Übereinstimmungen, Tiefe des verfügbaren Baums, Anzahl der Bewegungen unter dem Baum, bei denen einer der 5 Faktoren besser wird. Sie können dann verschiedene Funktionsformen für f (p), Regression, svm ausprobieren.

user3053
quelle
Das macht keinen Sinn.
HelloWorld