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
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.
źródło
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.
źródło