Algoritmus Minimax

Transkript

Algoritmus Minimax
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

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ı́ ...

Více

navazujících magisterských

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é:

Více

Složení komisí pro státní závěrečné zkoušky bakalářských oborů

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é:

Více

Inklusivní vzdělávání a praxe ve třídách druhého stupně základních

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...

Více

Computer Chess

Computer Chess Počítačové šachy

Více

Zpráva o stavu mládeže_3.vydání

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...

Více

NÁVRH č - MetLife

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...

Více

1 SDBR Zvláštní pojistné podmínky Pojištění pro případ

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 ...

Více

Konstrukce rámů Solid Edge

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 (...

Více