Bot na piškvorky

PA026 Projekt z umělé inteligence (jaro 2018)
Tomáš Šíma simatomas@mail.muni.cz

Úvod

Cílem tohoto projektu bylo vytvořit umělou inteligenci pro hraní piškvorek.
Nejvíce používaným způsobem v existujících řešeních byly různé verze proheldávání prostoru budoucích tahů a jejich chytré ořezávání.

Implementace

Umělá inteligence je založená na algoritmu Negamax, což je varianta klasického alfa-beta pruningu pro hry s nulovým součtem.

Alfa beta pruning je klasický algoritmus, který prohledává strom možných budoucích tahů a výsledky hodnotí na základě nějaké heuristiky. Alfa beta pruning neprohledává větve, které nemohou vézt k nalezení posloupnosti tahů, které by proti optimálně (vzhledem k heuristice) hrajícímu protivníkovi vedli k lepšímu výsledku dané heuristiky. Negamax využívá toho, že pokud při hře s nulovým součtem hráč A vítězí o X bodů, pak hráč B prohrává o X bodů. Tato znalost umožňuje redukovat množství výpočtů heuristiky.

Použitá heuristika je ta, že algoritmus pro každého hráče spočítá množství řad o 2,3,4,5 kamenech, které na ploše jsou (svisle, horizontálně i diagonálně). Řady také rozlišuje dle toho, jestli mají volno na krajích (Jdou dál prodlužovat) a nebo uprostřed (Jdou zničit jedním tahem). Tyto řady mají různá bodová ohodnocení. Heuristika sečte všechna ohodnocení všech řad pro oba hráče, hráč s vyšší sumou ohodnocení vyhrává o rozdíl oproti sumě ohodnocení druhého hráče. Algoritmus často zároveň blokuje druhého hráče( blokované řady mají menší ohodnocení) a prodlužuje svou řadu( delší řada = vyšši ohodnocení), také připravuje více příležitostí k útoku najednou(víc vzniklých dvojic/trojic jedním tahem = vyšši ohodnocení).

Instalace/použití

Zip archiv s projektem lze stáhnout z https://github.com/asketak/gomoku-ai/archive/master.zip Proti AI se dá hrát dvěma způsoby. Buď ve webovém rozhraní, které je součástí projektu nebo pomocí interface který poskytuje Piskvork turnajový manažer

Hraní skrz webové rozhraní

Zip soubor s projektem stáhneme a rozbalíme. Webové rozhraní spustíme příkazem python ./flask/webserver.py. Spustí se webový server, který na adrese 127.0.0.1:5000 umožňuje hrát proti AI.

Hraní skrz Piskvork manager

Pomocí Piskvork turnajového manažeru je možné hrát jak proti AI, tak nechat AI hrát proti ostatním AI na stránkách http://gomocup.org/ Piskvork manažer nahrává EXE programy, které s manažerem komunikují skrz STDIN/STDOUT pomocí textového protokolu. Spustitelný EXE soubor se dá vytvořit tak, že ve složce piskvork spustíme příkaz
pyinstaller negamax_piskvork.py main.py pipe.py --name pbrain-AI.exe --onefile
Ceska k vygenerovanému souboru je pak piskvork\dist\pbrain-AI.exe Tento pak lze nahrát do piskvork manažeru.

Testování

AI bylo otestováno jak proti lidem, tak proti dalším umělým inteligencím.

AI vyhrálo 10 her z 13 proti lidem. Nezdá se, že by dělalo nějaké zjevné chyby. V nějakou chvíli ho prostě hráč přehraje a dostane se k sekvenci, kdy je AI každým tahem donuceno blokovat, až dokud hráč eventuálně nezíská dvě volné trojice. Pokud člověk udělá proti AI zjevnou chybu, tak ji AI využije a zpravidla hned vyhraje.

Vzali jsme poslední 25 z 47 programů ze soutěže gomocup 2018 (http://gomocup.org/download-gomoku-ai/ ) a nechali je hrát proti naší AI. Proti každému protihráči jsme odehráli dvě hry, v každé hře začínal jiný hráč.

Naše AI porazilo 8 protihráčů, prohrálo proti 7 a remizovalo proti jednomu. Čtyři programy z gomocupu nešly spustit.
Výsledky jsou v tabulce níže.



Pořadí v gomocupProtihráčVýhra:ProhraDeskaPočet tahů
(jednoho hráče)/hru
Poznámky
23zetor20170 : 215X1524---
24Eulring0 : 215X1524---
25PecuchetX : X15X15XXX-Nefunguje-
26judeX : X15X15XXX-Nefunguje-
27Sparkle0 : 215X1524---
28djall180 : 215X1524---
29QMENTAT60 : 215X1524---
30Puskvorec2 : 015X1515---
31Noesis0 : 220X2025---
32imro151 : 115X1538---
33licht14X : X20X20XXX- Nefunguje-
34fast-gomoku141 : 115X1556---
35pisq71 : 115X1532---
36LightBlue2 : 015X1523---
37StahlfaustX : X15X15XXX-Nefunguje-
38PureRocky1 : 120X2017---
39Benjamin0 : 020X20187Vyplnili celou desku
remíza
40brain-Crusher20102 : 015X1523---
41valkyrie1 : 120X2017---
42fiverow2 : 020X2030---
43prolog2 : 015X1520---
44mushroom2 : 015X155---
45Whatateam2 : 015X1513---
46alphagomoku0 : 220X2018---
47GammaKu1 : 115X1524---
Total20 : 20701/23 = 30.5