Skip to main content

Lubisz grać w szachy? Podobał ci się chess.com lub lichess? W takim razie pokochasz KoksSzachy! <3

Project description

KoksSzachy

chess.com pls don't sue us, it's for fun

Linux OSX Windows 10 Python PyPI

Instalacja i update

Do zainstalowania KoksSzachów wymagany jest pobrany Python 3.7 lub nowszy oraz pip odpowiadjący wersji Pythona, czyli pythonowy package manager.

Unix

$ pip3 install koksszachy --upgrade

Windows

$ pip install koksszachy --upgrade

Jak zagrać?

$ koksszachy -p

# lub

$ koksszachy --play

Jak to działa?

Silnik KoksSzachów działa na bardzo prostej zasadzie:

  • Pobranie pozycji chessboard.js za pomocą wpisywania w url FEN stringów.

  • Rekreacja pozycji w bibliotece python-chess, która umożliwia stworzenie listy możliwych ruchów i wiele innych, które przydadzą się w algorytmie Minimax.

  • Ewaluacja materiału. Działa ona na podstawie zliczania wartości wszystkich bierek na planszy. Wartości te są przedstawione w słowniku values.

  • Ewaluacja pozycji odtworzonej przez wspomnianą wcześniej bibliotekę przy pomocy FEN stringa. Jest ona robiona na podstawie słownika positions.

    • Jak to działa? To bardzo proste - w słowniku dla każdej figury istnieje odpowiadający jej dwuwymiarowy array z liczbami całkowitymi. Array odpowiada prawdziwym rozmiarom szachownicy czyli 8x8. Weźmy dla przykładu array poświęcony gońcowi. Specjalnie zaznaczona została notacja szachowa dla ułatwienia wizualizacji.

      {chess.BISHOP: [
        -50, -40, -30, -30, -30, -30, -40, -50, # 8
        -40, -20, 0, 0, 0, 0, -20, -40,         # 7
        -30, 0, 10, 15, 15, 10, 0, -30,         # 6
        -30, 5, 15, 20, 20, 15, 5, -30,         # 5
        -30, 0, 15, 20, 20, 15, 0, -30,         # 4
        -30, 5, 10, 15, 15, 10, 5, -30,         # 3
        -40, -20, 0, 5, 5, 0, -20, -40,         # 2
        -50, -40, -30, -30, -30, -30, -40, -50, # 1
      #  a    b    c    d    e    f    g    h
      ]}
      

      Łatwo zauważyć, że każdy z narożników szachownicy ma bardzo niskie wartości. To dlatego, że goniec stając na nich traci możliwość poruszania się po dwóch przekątnych tylko do jednej.
      Zagłębiając się w wartości tej czy innych figur można dostrzec wiele innych wariantów.

      Arraye są przedstawione z perspektywy pierwszej osoby.

  • Gdy białe - gracz, wykonają ruch, czarne - czyli komputer analizują pozycje i materiał zapisując obecną wartość ogólną. Po tym procesie uruchamiany jest algorytm Minimax, który analizuje przyszłe i możliwe posunięcia przeciwnika po wykonanym ruchu. W ten sposób algorytm ocenia, który ruch jest dla niego najlepszy. To na ile posunięć do przodu liczy jest kontrolowane przez zmienną depth+1.

  • Obliczone ruchy są zapisywane w odpowiedniej kolejności.

  • Komputer wybiera pierwszy ruch z listy i go wykonuje.

  • Wszystko działa dopóki są możliwe ruchy. Nie działa to na podstawie pętli.

Minimax

Ty, jako gracz, grasz białymi figurami. Minimax jest wywoływany przez gracza maksymalizującego wynik, w tym przypadku są to czarne figury, czyli komputer. Scenariusz, w którym grasz maksymalizujący wygrywa ma przypisaną warość nieskończoną. Idąc tym schematem przegrana dla gracza maksymalizującego ma wartość ujemnej nieskończoności.

Minimax w KoksSzachach jest zooptymlizowany poprzez alpha-beta pruning oraz iterative deepening.

Ciekawe artykuły i źródła na temat tych algorytmów:

Różnice depth w iterative deepeningu

Przeprowadziłem prosty test polegający na mierzeniu różnic czasowych i eksploracyjnych pomiędzy wartościami depth. Najniższą możliwą wartością depth jest 1. Zakładając, że mierzymy wszystkie wartości dla klasycznego i każdemu znango ruchu e4, wartość zmiennej nodes_explored, czyli jednym słowem możliwe rozwinięcia dla danej sytuacji, wynosi 20 rozwinięć. I jeśli rzeczywiście popatrzymy na szachownicę, ta wartość się jak najbardziej zgadza.

Jeśli porównamy wartości depth od 1-8 to zobaczymy prawdziwe różnice.

Chciałem tutaj dać piękny wykres matplotliba, ale nie udało mi się.

Depth Nodes Czas(s)
1 20 0.004
2 102 0.014
3 1233 0.086
4 22884 1.563
5 197047 13.232
6 768488 51.222
7 12713930 886.259
8 78510963 5392.2

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

KoksSzachy-0.8.25.tar.gz (220.7 kB view hashes)

Uploaded Source

Built Distribution

KoksSzachy-0.8.25-py3-none-any.whl (228.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page