wprowadzenie różnicy czasowej w szachach


10

Opracowuję program szachowy, który wykorzystuje algorytm przycinania alfa-beta i funkcję oceny, która ocenia pozycje za pomocą następujących cech, a mianowicie materiału, bezpieczeństwa królewskiego, mobilności, struktury pionków i pułapek itp. Moja funkcja oceny to pochodzące z

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

gdzie to waga przypisana do każdej cechy. W tym momencie chcę wyregulować wagi mojej funkcji oceny za pomocą różnicy czasowej, w której agent gra przeciwko sobie i w trakcie zbiera dane szkoleniowe ze swojego środowiska (co jest formą uczenia się przez wzmocnienie). Przeczytałem kilka książek i artykułów, aby dowiedzieć się, jak zaimplementować to w Javie, ale wydają się one raczej teoretyczne niż praktyczne. Potrzebuję szczegółowego wyjaśnienia i pseudo kodów, jak automatycznie dostroić wagi mojej funkcji oceny na podstawie poprzednich gier.w

Odpowiedzi:


4

Polecam wszystkim zainteresowanym tematem zajrzeć do artykułu, który łączy TDL i głębokie uczenie się.

Z grubsza będziesz musiał zmusić silnik do grania w gry przeciwko sobie. Zapisz ocenę mini-max dla każdej pozycji. Pod koniec gry otrzymasz nagrodę w wysokości {0,1, -1} za szachy. Następnie musisz dostosować parametry za pomocą:

wprowadź opis zdjęcia tutaj

To równanie mówi nam, że powinniśmy dostosować wagi według różnic czasowych, ważonych tym, jak daleko należy to zrobić. Jeśli masz doskonałą ocenę, różnica czasowa zawsze będzie wynosić zero, więc nie będziesz musiał dokonywać żadnych korekt.

Następnie musisz użyć nowych parametrów, aby zagrać w nową grę. Powtarzane do momentu, gdy tyle gier będzie Cię stać lub gdy podejrzewasz, że są zbieżne.

Kilka uwag:

  1. Cytowany przeze mnie artykuł stosuje współczynnik rabatu. Odbywa się to w przypadku algorytmu wstecznej proporcji dla sieci neuronowej. Nie potrzebujesz tego.
  2. Musisz eksperymentować z optymalną szybkością uczenia się (alfa w równaniu). Zbyt duże spowoduje, że nauka będzie niestabilna, a zbyt mało zajmie więcej czasu. Widziałem ludzi używających 0.70. W cytowanym przeze mnie papierze wykorzystano 1.0.

Cześć, podoba mi się twoja odpowiedź, ale czy mógłbyś naprawić link do gazety?
padura

@padura Naprawiono. Proszę przeczytać. To była dobra lektura dla nauki o danych.
HelloWorld,

(+1) Świetna odpowiedź. Bardzo mi się podobał papier :)
Dawny33

To świetny artykuł, szkoda, że ​​nie wiedziałem o tym, kiedy pracowałem nad własnym silnikiem szachowym;) Zastanawiam się, czy możemy to poprawić, łącząc się z tą techniką: bjmc.lu.lv/fileadmin/user_upload/lu_portal/ projekti / bjmc /…
padura

2

Pierwsza uwaga, powinieneś obejrzeć „Wargames”, aby dowiedzieć się, w co się pakujesz.

To, czego chcesz, to f (p), aby f (p) był jak najbliżej siły pozycji.

Bardzo prostym rozwiązaniem wykorzystującym algo genetyczne byłoby skonfigurowanie 10000 graczy o różnych wagach i sprawdzenie, które wygrywają. Następnie zachowaj wagę 1000 najlepszych zwycięzców, skopiuj je 10 razy, zmień je nieznacznie, aby zbadać przestrzeń wagi i ponownie uruchom symulację. To standardowy GA, biorąc pod uwagę funkcjonalną formę, jakie są dla niego najlepsze współczynniki.

Innym rozwiązaniem jest wyodrębnienie pozycji, aby uzyskać tabelę „(materiał, bezpieczeństwo królestwa, ruchliwość, struktura pionka, pułapki) -> dobroć pozycji”, gdzie dobroć pozycji jest pewnym obiektywnym czynnikiem (wygrana / przegrana obliczona przy użyciu powyższych symulacji lub znane dopasowania, głębokość dostępnego drzewa, liczba ruchów pod drzewem, w których poprawia się jeden z 5 czynników. Następnie możesz wypróbować różne formy funkcjonalne dla swojego f (p), regresji, svm.


To nie ma sensu.
HelloWorld,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.