tím, že Lauri Hartikka
podíváme se na některé základní pojmy, které nám pomohou vytvořit jednoduché šachy AI:
- pohyb-generace
- hodnocení činnosti správní rady
- minimax
- a alfa-beta prořezávání.
v každém kroku vylepšíme náš algoritmus jednou z těchto osvědčených technik šachového programování. Ukážu, jak každý ovlivňuje herní styl algoritmu.
konečný algoritmus AI si můžete prohlédnout zde na Githubu.
Krok 1: Přesun generování a vizualizace desky
použijeme šachy.knihovna js pro generování tahů, a šachovnice.js pro vizualizaci desky. Knihovna move generation v podstatě implementuje všechna pravidla šachu. Na základě toho můžeme spočítat všechny právní kroky pro daný stát.
Pomocí těchto knihoven nám pomůže zaměřit se pouze na nejzajímavější úkol: vytvořit algoritmus, který najde nejlepší tah.
začneme tím, že vytvoří funkci, která vrátí náhodný pohyb ze všech možných tahů:
Přestože tento algoritmus není velmi solidní šachový hráč, je to dobrý výchozí bod, jako můžeme skutečně hrát proti to:
Krok 2 : Hodnocení pozice
nyní se pokusíme pochopit, která strana je v určité pozici silnější. Nejjednodušší způsob, jak toho dosáhnout, je počítat relativní sílu figurky na šachovnici pomocí následující tabulky:
S hodnotící funkci, jsme schopni vytvořit algoritmus, který vybere pohyb, který dává nejvyšší hodnocení:
pouze hmatatelné zlepšení je, že náš algoritmus bude nyní zachytit kus, pokud to půjde.
Krok 3: Vyhledávací strom pomocí Minimax
Dále vytvoříme vyhledávací strom, ze kterého algoritmus můžete vybrat nejlepší tah. To se provádí pomocí algoritmu Minimax.
V tomto algoritmu rekurzivní strom všech možných tahů je prozkoumat dané hloubky, a pozice je hodnocena na konec „listů“ stromu.
poté vrátíme buď nejmenší nebo největší hodnotu dítěte do nadřazeného uzlu, v závislosti na tom, zda se pohybuje bílá nebo černá. (To znamená, že se snažíme minimalizovat nebo maximalizovat výsledek na každé úrovni.)
S minimax v místě, náš algoritmus začíná pochopit některé základní taktiky šachy:
účinnost minimax algoritmus je silně založena na hledání hloubky můžeme dosáhnout. To je něco, co v následujícím kroku vylepšíme.
Krok 4: Alfa-beta prořezávání
alfa-beta prořezávání je optimalizační metoda algoritmu minimax, která nám umožňuje ignorovat některé větve ve vyhledávacím stromu. To nám pomáhá vyhodnotit vyhledávací strom minimax mnohem hlouběji, při použití stejných zdrojů.
alfa-beta prořezávání je založen na situaci, kdy se můžeme zastavit vyhodnocení části vyhledávacího stromu, když jsme našli pohyb, který vede k horší situaci než dříve objeveného pohybu.
alfa-beta prořezávání neovlivňuje výsledek algoritmu minimax — pouze to zrychluje.
algoritmus alfa-beta je také efektivnější, pokud náhodou navštívíme nejprve ty cesty, které vedou k dobrým pohybům.
s alfa-beta získáme významnou podporu algoritmu minimax, jak je ukázáno v následujícím příkladu:
následujte tento odkaz a vyzkoušejte alfa-beta vylepšenou verzi šachové AI.
Krok 5: Vylepšená hodnotící funkce
počáteční hodnotící funkce je poměrně naivní, protože počítáme pouze materiál, který se nachází na desce. Abychom to zlepšili, přidáme k hodnocení faktor, který bere v úvahu polohu kusů. Například rytíř ve středu desky je lepší (protože má více možností a je tedy aktivnější) než rytíř na okraji desky.
použijeme mírně upravenou verzi tabulek piece-square, které jsou původně popsány v šachovém programování-wiki.
S následujícími zlepšení, začneme algoritmus, který hraje nějaké „slušné“ šachy, alespoň z hlediska příležitostný hráč:
Závěry
síla i jednoduchý šachový algoritmus je, že to nedělá hloupé chyby. To znamená, že stále postrádá strategické porozumění.
s metodami, které jsem zde představil, jsme byli schopni naprogramovat algoritmus hraní šachů, který dokáže hrát základní šachy. „AI-part“ (move-generation vyloučen) konečného algoritmu je jen 200 řádků kódu, což znamená, že základní pojmy jsou poměrně jednoduché implementovat. Můžete se podívat na finální verze je na GitHub.
Některé další vylepšení můžeme udělat, aby algoritmus by být například:
- pohyb-objednávání
- rychlejší pohyb generace
- a na konci hry zvláštní hodnocení.