Algoritmus Minimax
Transkript
Algoritmus Minimax Tomáš Kühr Projektový seminář 1 Tomáš Kühr Algoritmus Minimax Základní pojmy Tah = přemístění figury hráče na tahu odpovídající pravidlům dané hry. Při tahu může být manipulováno i s figurami soupeře, pokud to odpovídá pravidlům hry (např. odstranění přeskočené figury v dámě). Tah se může skládat z několika dílčích pohybů, pokud to odpovídá pravidlům hry (např. vícenásobný skok v dámě). Pozor, v některé literatuře “náš tah” označován jako půltah. Pozice = stav hry v určitém okamžiku. Pozice je vesměs jednoznačně určena rozmístěním figur na desce a určením hráče na tahu. Občas používáme i pojmy vyhrávající pozice, prohrávající pozice, remízová pozice, koncová pozice a počáteční pozice. Tomáš Kühr Algoritmus Minimax Herní strom Pro zobrazení “všech” možností, jak se může hra z dané pozice vyvíjet, používáme tzv. herní strom. Bohužel není v silách člověka ani počítače zobrazit či vzít do úvahy celý herní strom. Herní strom tedy běžně zobrazujeme pouze do určité předem dané hloubky (počet zkoumaných po sobě následujících tahů). Listy herního stromu nemusí být vždy ve stejné hloubce. Tato situace nastane, pokud v některé větvi nastal konec hry. P0 d2-c3 d2-e3 P1 c5-b4 P3 c3-a5 P7 P2 c5-d4 P4 c5-d4 P5 c5-b4 P6 c3-e5 P8 Tomáš Kühr Algoritmus Minimax Příklad herního stromu P0 P0 d2-c3 d2-e3 P3 c3-a5 P7 P3 P2 c5-d4 P4 c5-d4 P5 c5-b4 P6 7 6 6 5 5 5 4 4 4 3 3 3 2 2 1 1 b c d e f g P8 P4 1 b c d e f g h P5 8 7 7 6 6 6 5 5 5 4 4 4 3 3 2 2 b d e f g P7 8 d e f g h P8 8 7 6 6 6 5 5 5 4 4 4 3 3 2 2 d e f g h Algoritmus Minimax f g h a b c d e f g h a b c d e f g h 3 2 1 c e 8 7 b d 1 b c 7 a c 2 a h b 3 1 c a 8 7 1 Tomáš Kühr 2 a h 8 a P6 8 7 6 1 c3-e5 P2 8 7 a P1 c5-b4 P1 8 1 a b c d e f g h Princip algoritmu Minimax Algoritmus Minimax určuje nejlepší tah na základě prozkoumání herního stromu vycházejícího z aktuální pozice do předem dané hloubky. Minimax nejprve ohodnotí listové pozice pomocí heuristické ohodnocovací funkce. Ohodnocení pozic blíže ke kořeni herního stromu se pak určí jako maximum z ohodnocení jeho následovníků, pokud je v dané pozici na tahu aktuální hráč nebo jako minimum z ohodnocení následovníků, pokud je v dané pozici na tahu soupeř. U kořenové pozice nás pak nezajímá její ohodnocení, ale tah vedoucí k nejlépe ohodnocenému následovníkovi. Tomáš Kühr Algoritmus Minimax Ilustrace principu Minimaxu 95 d8-e7 d8-c7 8 95 e5-d6 7 -12 e5-f6 e5-d6 6 e5-f6 5 98 e7-c5 98 95 e7-g5 95 99 -12 c7-b6 c7-e5 99 4 c7-d6 -15 3 2 -12 f6-e7 f6-g7 f6-e7 f6-g7 -15 -10 -12 -9 1 a Tomáš Kühr Algoritmus Minimax b c d e f g h Implementace algoritmu Minimax Algoritmus je realizován rekurzivní funkcí, která “prochází” herní strom do určité hloubky. Vstupem funkce je herní pozice a hloubka, do které se má herní strom dále prozkoumávat. Výstupem funkce je vypočtené ohodnocení dané pozice. Rozhodování z pohledu obou hráčů je realizováno totožným kódem. Využíváme zde toho, že ohodnocení dané pozice z pohledu prvního a druhého hráče se liší pouze znaménkem. Dále je nutné si uvědomit, že platí min(a, b) = −max(−a, −b). Mezní podmínkou rekurze je dosažení požadované hloubky nebo koncové pozice. Tomáš Kühr Algoritmus Minimax Zjednodušený pseudokód function minimax(pozice, hloubka) if (pozice je koncová or hloubka = 0) then return heuristické ohodnocení pozice else ohod ← −∞ for all potomek pozice do ohod ← max(ohod, −minimax(potomek, hloubka − 1)) end for return ohod end if end function Tomáš Kühr Algoritmus Minimax Detailní pseudokód (ošetření výhry/prohry) function minimax(pozice, hloubka) if je_prohra(pozice) then return −MAX end if if je_výhra(pozice) then return MAX end if if je_remíza(pozice) then return 0 end if ... Tomáš Kühr Algoritmus Minimax Detailní pseudokód (hlavní část) ... if hloubka = 0 then return ohodnocovaci_funkce(pozice) else tahy ← generuj_tahy(pozice) ohod ← −MAX for all tah v kolekci tahy do potomek ← zahraj(pozice, tah) ohod ← max(ohod, −minimax(potomek, hloubka − 1)) end for ... return ohod end if end function Tomáš Kühr Algoritmus Minimax Detailní pseudokód (pozice blízké konci hry) ... if ohod > MNOHO then ohod ← ohod − 1 end if if ohod < −MNOHO then ohod ← ohod + 1 end if ... Tomáš Kühr Algoritmus Minimax Nalezení nejlepšího tahu function nej_tah(pozice, hloubka) tahy ← generuj_tahy(pozice) nejlepsi_ohodnoceni ← −MAX for all tah v kolekci tahy do potomek ← zahraj(pozice, tah) ohodnoceni ← −minimax(potomek, hloubka − 1) if ohodnoceni > nejlepsi_ohodnoceni then nejlepsi_ohodnoceni ← ohodnoceni nejlepsi_tah ← tah end if end for return nejlepsi_tah end function Tomáš Kühr Algoritmus Minimax Příklad Při ohodnocování následujícího herního stromu byl použit algoritmus Minimax s hloubkou výpočtu 4 a konstantami MAX = 99 a MNOHO = 90. Červeně jsou zvýrazněny uzly, které byly ohodnoceny heuristicky, a hrana, které odpovídá vypočtenému nejlepšímu tahu. d8-e7 d8-c7 -97 e5-d6 98 e7-c5 -99 12 e5-f6 e5-d6 98 e7-g5 e5-f6 98 -12 c7-b6 c7-e5 -99 -99 Tomáš Kühr c7-d6 15 12 f6-e7 f6-g7 f6-e7 f6-g7 -15 -10 -12 -9 Algoritmus Minimax Generátor tahů V algoritmu Minimax je potřeba pro danou herní situaci vytvořit kolekci všech legálních tahů, které se dají v této pozici zahrát. Tyto tahy jsou pak ve vzájemně jednoznačném vztahu s následovníky dané pozice v herním stromu. Při vytváření kolekce bývá dobré postupovat systematicky – procházet hrací desku, případně nějakou pomocnou kolekci figur a pro každou figuru vygenerovat všechny možné tahy. Algoritmus pro generování tahů je rozumné přizpůsobit pravidlům dané hry. Tomáš Kühr Algoritmus Minimax Ohodnocovací funkce Vstupem ohodnocovací funkce je ohodnocovaná pozice. Výstupem je celé číslo v intervalu h−MNOHO, MNOHOi. Ohodnocovací funkci je rozumné vytvořit z pohledu jednoho hráče, ohodnocení z pohledu druhého hráče pak získáme změnou znaménka. Zcela vyrovnaná pozice má tedy ohodnocení rovno nule. Co lze hodnotit? materiální složka (např. rozdíl v počtu figur hráčů) statická poziční složka (bonusy a postihy za umístění figur na některá pole) dynamická poziční složka (bloky figur, osamělé figury, . . . ) Ohodnocovací funkce by měla být rychlá a jednoduchá. Pomocí změn ohodnocení lze „donutit“ počítačového hráče k větší agresivitě, aktivitě, ochotě dělat výměny a podobně. Lze také vytvořit více ohod. funkcí pro různé fáze hry. Tomáš Kühr Algoritmus Minimax Princip Alfa-beta ořezávání V některých situacích nemusí Minimax zkoumat další herní pozice, protože je již zřejmé, že nebudou mít na volbu tahu vliv. Typy ořezávání: alfa ořezávání – byla nalezena příliš malá hodnota, tuto větev hráč na tahu nezvolí, beta ořezávání – nalezená hodnota je příliš velká, soupeř tuto větev nezvolí. V algoritmu použité hodnoty alfa tedy tvoří dolní mez, hodnoty beta pak horní mez při vyhledávání. Hodnoty alfa a beta se získají a upřesňují z ohodnocení dříve prozkoumaných pozic. Alfa-beta ořezávání je nejúčinnější, pokud se nejprve zkoumají nejsilnější tahy. Někdy se používá heuristika pro seřazení tahů před zkoumáním následovníků dané pozice. Tomáš Kühr Algoritmus Minimax Příklad Převzato z Alpha-Beta-Suche (německy) – Wikipedie, otevřená encyklopedie. Tomáš Kühr Algoritmus Minimax Pomocné funkce pro algoritmus Alfa-beta function dal(ohodnoceni) if ohodnoceni > MNOHO then return ohodnoceni + 1 end if if ohodnoceni < −MNOHO then return ohodnoceni − 1 end if return ohodnoceni end function Tomáš Kühr function bliz(ohodnoceni) if ohodnoceni > MNOHO then return ohodnoceni − 1 end if if ohodnoceni < −MNOHO then return ohodnoceni + 1 end if return ohodnoceni end function Algoritmus Minimax Funkce Alfa-beta (část 1) function alfabeta(pozice, hloubka, alfa, beta) if je_prohra(pozice) then return −MAX end if if je_výhra(pozice) then return MAX end if if je_remíza(pozice) then return 0 end if if hloubka = 0 then return ohodnocovaci_funkce(pozice) end if Tomáš Kühr Algoritmus Minimax Funkce Alfa-beta (část 2) tahy ← generuj_tahy(pozice) for all tah v kolekci tahy do pot ← zahraj(pozice, tah) ohod ← −alfabeta(pot, hloubka − 1, dal(−beta), dal(−alfa)) ohod ← bliz(ohod) if ohod > alfa then alfa ← ohod if ohod = beta then return beta end if end if end for return alfa end function Tomáš Kühr Algoritmus Minimax Zjištění nejlepšího tahu function nej_tah(pozice, hloubka) tahy ← generuj_tahy(pozice) alfa ← −MAX for all tah v kolekci tahy do pot ← zahraj(pozice, tah) ohod ← −alfabeta(pot, hloubka − 1, −MAX, dal(−alfa)) ohod ← bliz(ohod) if ohod > alfa then alfa ← ohod nejlepsi_tah ← tah end if end for return nejlepsi_tah end function Tomáš Kühr Algoritmus Minimax Příklad Převzato z Alpha-beta pruning (anglicky) – Wikipedie, otevřená encyklopedie. Tomáš Kühr Algoritmus Minimax Příklad Převzato z knihy Šachy na PC. Tomáš Kühr Algoritmus Minimax Literatura Dieter Steinwender, Frederic A. Friedel: Šachy na PC. Unis Publishing, Přerov, 1997. Minimax (algoritmus) – Wikipedie, otevřená encyklopedie [online], poslední revize 1. 9. 2010 (citováno 6. 9. 2010). Dostupné na adrese http://cs.wikipedia.org/wiki/Minimax_(algoritmus). Alpha-beta pruning (anglicky, německy, česky) – Wikipedie, otevřená encyklopedie [online], citováno 19. 10. 2010. Dostupné na adrese http://en.wikipedia.org/wiki/Alpha-beta_pruning. Jan Němec: Šachové myšlení. Linux Software [online], poslední revize 8. 3. 2006 (citováno 6. 9. 2010). Dostupné na adrese http://www.linuxsoft.cz/article.php?id_article=1109. Tomáš Kühr Algoritmus Minimax
Podobné dokumenty
Algoritmy realizující počítačového hráče v jednoduchých deskových
do požadované hloubky hernı́ho stromu. Ohodnocovánı́ na řádku 3 je vždy prováděno z pohledu hráče, který je v dané pozici na tahu. Následuje stěžejnı́ část algoritmu realizujı́cı́ ...
navazujících magisterských
Komise pro státní závěrečné zkoušky navazujících magisterských studijních
programů
Učitelství matematiky pro střední školy:
Předsedové:
Složení komisí pro státní závěrečné zkoušky bakalářských oborů
Komise pro státní závěrečné zkoušky bakalářských studijních programů
Matematika (dvouoborové studium):
Předsedové:
Inklusivní vzdělávání a praxe ve třídách druhého stupně základních
i kurikula. Rzné zprávy (viz studie Evropské agentury o
poskytování speciálního vzdlávání v Evrop, 1998, 2003 jako
píklady) potvrzují,
e inkluse se celkov dobe rozvíjí ve fázi
primárního vzd...
Zpráva o stavu mládeže_3.vydání
4.1.4 Zhodnocení
Financování z veřejných prostředků by zřejmě mohlo být vyšší, nicméně například sousední Přerov,
který se již zde objevil, jako srovnávací subjekt poskytnul v roce 2014 veřejnou fi...
NÁVRH č - MetLife
Toto pojištění nenabude platnosti, dokud nebude zaplaceno pojistné, a to ve výši stanovené v pojistné
smlouvě.
Článek 1 Vymezení pojmů
1) Pacient - znamená osobu, která byla na základě údajů v chor...
1 SDBR Zvláštní pojistné podmínky Pojištění pro případ
Článek 1 Vymezení pojmů
1) Kdekoli je v pojistné smlouvě použito slovo „pacient“
znamená osobu, která byla na základě údajů
v chorobopise přijata k pobytu v nemocnici nejméně na
jeden den (jeden ...
Konstrukce rámů Solid Edge
Možnost automatického umístění komponenty rámu se používá při přidání svislé
komponenty rámu (A), jejíž vrchol trajektorie je propojen s vrcholy trajektorie
existujícího 90° rohu rámu (B). Rám (...