Szachy komputerowe. Ogólna idea silnika szachowego. Tomasz Młocek
Początki. Historia. Pierwsze mechanizmy rozgrywające końcówki szachowe, k. XIX w. Przełomowa praca Claude’a Shannona, Programing a Computer for Playing a Chess z 1950 r. Nowe spojrzenie na problem na podstawie teorii gier. Wykorzystanie algorytmu MINMAX. Propozycja 2 schematów, które są aktualne do dziś. Najprawdopodniej 1956 pierwsza implementacja programu na komputerze MANIAC I. Programy w tym czasie raczej tylko przestrzegają reguły gry. 1974 pierwsza edycja Szachowych Mistrzostw Świata Komputerów Lata 80te najlepsze programy (Chess) osiągają ranking ~2000 ELO Garry Kasparov ( 2850 ELO ) 1997 komputer Deep Blue pokonał po raz pierwszy mistrza świata Garriego Kasparova.
Szachy. Model matematyczny. Szachy – standardowy problem sztucznej inteligencji Szachy – gra skończona, o pełnej informacji, sumie zerowej Wartość MiniMaxowa. Twierdzenie o MinMaxie. Drzewo gry. Zbyt duża złożoność. Konieczność skrócenia drzewa. Pojęcie funkcji oceniającej.
Funkcja oceniająca. Funkcja oceniąjąca zwraca przybliżoną wartość minimaxową dla danego liścia – ostatniej pozycji w rekurencji. Przyjęty przez Shannona schemat funkcji oceniającej : f(P) = ∑i=0..N (wi*Ai(P)) wi – waga własności i, Ai – funkcja zwracająca 0 bądź 1 i oceniająca czy pozycja P ma własność Ai, Przykładowo – W0 własność materialna. W0 = 2000(K-K’) + 9(Q-Q’)+5(R-R’)+3(B-B’ + N-N’)+(P-P’) jako argumenty ilość kolejnych figur na planszy O wiele trudniejsze w oszacowaniu są własności pozycyjne, zależą od wielu czynników – stan gry, oddziaływanie z innymi wł. Przykładowa waga własności oceny pozycji pionków : W1 = -0.5(D-D’+S-S’+I-I’) Odpowiednio ilość zdublowanych, opoźnionych i izolowanych pionków. Istnieje wiele innych własności dla których wagi określa się często empirycznie na podstawie rozegranych wcześniej pojedynków.
Schemat A wg Shanonna Mając do dyspozycji funkcję oceniającą oraz generator ruchów można łatwo stworzyć dosyć szybki program grający w szachy. SHANNON_A(Pozycja P, N – głębokość przeszukiwania) { If(N==0) OR Koncowa(P) return F(P) Else List = NULL For all(P’ – nastepnik P) List.addToList(SHANNON(P’,N-1)) If(ruch gracza A) Return List.max() Return List.min() } Analizując drzewo przeszukiwania tego algorytmu można dojść do wniosku że w niektórych momentach można nie analizować kolejnej gałęzi, oszczędzając przy tym sporo czasu.
Algorytm Alfa-Beta. Schemat B. Schemat B, różni się od A tylko wyborem w głównej pętli ‘sensownych ruchów’ Wykorzystuje to algorytm AB, który zaniechuje sprawdzania danego wariantu jeśli wcześniej znaleźliśmy lepszy. Ważna jest kolejność generowania ruchów – od potencjalnie najlepszych do najgorszych. Inne metody usprawniające selekcję ruchów do wykonania to min. Iteracyjne pogłębianie.
Inne usprawnienia. Funkcja oceniająca a horyzont zdarzeń Baza otwarć. Zawiera wiele scenariuszy otwarć. Baza końcówek. Istnieje baza do 6 figur, zajmuj około 1TB. dostępne w sieci p2p.