przyjrzyjmy się kilku podstawowym pojęciom, które pomogą nam stworzyć prostą si w szachach:
generowanie ruchu
ocena planszy
Minimax
i przycinanie alfa beta.
na każdym kroku udoskonalamy nasz algorytm jedną z tych sprawdzonych technik programowania szachowego. Zademonstruję, jak każdy z nich wpływa na styl gry algorytmu.
możesz zobaczyć ostateczny algorytm AI tutaj na Githubie.
Krok 1: generowanie ruchu i wizualizacja planszy
użyjemy szachów.biblioteka js do generowania ruchu i szachownicy.js do wizualizacji planszy. Biblioteka move generation zasadniczo implementuje wszystkie zasady gry w szachy. Na tej podstawie możemy obliczyć wszystkie ruchy prawne dla danego stanu planszy.
Korzystanie z tych bibliotek pomoże nam skupić się tylko na najciekawszym zadaniu: stworzeniu algorytmu, który znajdzie najlepszy ruch.
zaczniemy od stworzenia funkcji, która po prostu zwraca losowy ruch ze wszystkich możliwych ruchów:
chociaż ten algorytm nie jest zbyt solidnym szachistą, jest dobrym punktem wyjścia, ponieważ możemy grać przeciwko niemu:
Krok 2 : Ocena pozycji
teraz spróbujmy zrozumieć, która strona jest silniejsza w określonej pozycji. Najprostszym sposobem, aby to osiągnąć, jest policzenie względnej siły elementów na planszy za pomocą poniższej tabeli:
dzięki funkcji oceny jesteśmy w stanie stworzyć algorytm, który wybierze ruch, który da najwyższą ocenę:
jedynym namacalnym ulepszeniem jest to, że nasz algorytm będzie teraz przechwytywał kawałek, jeśli będzie mógł.
Krok 3: drzewo wyszukiwania za pomocą Minimax
następnie utworzymy drzewo wyszukiwania, z którego algorytm może wybrać najlepszy ruch. Odbywa się to za pomocą algorytmu Minimax.
w tym algorytmie rekurencyjne drzewo wszystkich możliwych ruchów jest badane na określoną głębokość, a pozycja jest oceniana na końcowych „liściach” drzewa.
następnie zwracamy najmniejszą lub największą wartość potomka do węzła nadrzędnego, w zależności od tego, czy ma się poruszać biała czy czarna. (To znaczy, staramy się albo zminimalizować lub zmaksymalizować wynik na każdym poziomie.)
dzięki Minimax nasz algorytm zaczyna rozumieć podstawowe taktyki szachów: