2. Minmax
• Shakissa paras kaikista siirtovaihtoehdoista ei
ole välttämättä voittava kombinaatio tai
todennäköisin siirtopolku
• On oletettavaa, että pelissä on vastapuoli joka
omalla siirtovuorollaan pyrkii tekemään
parhaansa ja siten estämään vastustajan
parhaat siirrot
• Minmax on algoritmi jolla löydetään
optimaalisin siirto
3. Minmax ja pelipuu
• Shakkiengine arvioi siirtoa evaluointifunktion avulla joka mittaa pelitilanteen
hyvyyttä
• Mutta evaluointifunktio antaa hyvyyden vain yhdelle pelitilanteelle, eika näe, mikä
tilanne voi olla kahden siirron jälkeen.
• Esimerkki: evaluointifunktio pitää vastustajan Daamia ehdottomasti hyvänä saaliina eikä tiedä,
että vastapelaaja voi oman Daamin uhrauksella tehdä seuraavalla siirrolla shakkimatin. Tätä
kutsutaan ns. Horisontaaliseksi seuraukseksi.
• Ratkaisuna on pelipuu joka luodaan siten, etta aloitustilanne asetetaan
juurisolmuksi ja lapsisolmuiksi laitetaan kaikki ne pelitilanteet, joihin päästään
pelaajan tehtyä yhden sallitun siirron. Lapsisolmuille laitetaan edelleen
lapsisolmuiksi vastapelaajan kaikki sallitut siirrot. Lapsisolmujen lisäämistä
jatketaan rekursiivisesti, kunnes kaikissa haaroissa tullaan lopputiloihin. Talllöin
pelipuu sisältää kaikki mahdolliset siirrot.
• Pelipuu on siis rakenne jolla kuvataan siirtovaihtoehtoja
• Minmax-algoritmi käy rekursiivisestä läpi tiettyyn syvyyteen asti kaikki
siirtovaihtoehdot ja valitsee parhaan siirtovuorossa olevalle
• Pelitilanteen hyvyys arvioidaan jokaisessa pelitilanteessa kokonaisluvulla.
– valkoisilla nappuloilla positiiviset luvut
– mustilla negatiiviset
– Tasapelitilanteessa minmax palauttaa arvon 0
• Valkoisen siirrot ovat ns. Max-siirtoja ja mustan siirrot min-siirtoja. Tästä nimi
Minmax.
4. Alpha-beta karsinta
• Minmaxin hakua voidaan nopeuttaa karsimalla
pelipuusta kokonaisia haaroja
• Alpha-beta toimii kuten Minmax mutta karsii haarat
jotka eivät voi vaikuttaa lopulliseen arvoon
• Deep blue käyttii Alpha-beta karsintaa pelatessaan
kuuluisat pelit Kasparovia vastaan
• Deep bluen kehitystiimi laski, että Alpha-betaa
käyttäessä ns. Puun haarautumiskerroin oli 6 kun
pelkällä Minmaxilla se oli 35.
• Nyrkkisääntö on, että Alpha-betalla engine voi laskea
kaksi kertaa syvemmälle kuin Minmax samalla
kustannuksella
5. Minmaxin workflow
• Minmax laskee maxille optimaalisen strategian.
Shakkiengine toteuttaa tämän seuraavasti:
1. generoidaan koko pelipuun lopputiloihin asti
2. lasketaan jokaiselle lopputilalle BoardScoren
3. lasketaan lopputilojen boardscoren avulla kerrosta
ylempänä olevien solmujen arvo
4. jatketaan samaan tapaan ylöspäin
5. Lopulta ollaan puun juuressa (huipulla) ja MAX
valitsee siirron joka johtaa korkeimpaan arvoon eli
BoardScoreen
6. 0 1 2 3 4 5 6 7
Minmax
R 63
1. shakkiengine generoi
pelipuun tietylle
siirtosyvyydelle asti (ply).
Tässä esimerkissä puun
MAX
syvyys on vain yksi siirto
(2 plytä eli puolisiirtoa)
MIN
2. Evaluointifunktio laskee
lopputiloille BoardScoret.
Puussa lopputiloja ovat
alimmat nodet
• Kuvassa on esitetty ruudulla
a1 eli shakkilaudan indeksissä 56
olevan ratsun yksinkertaistettu
pelipuu yhden siirron
siirtosyvyydelle. Eli puun kaksi
solmukohtaa kuvaavat valkoisen
kahta siirtovaihtoehtoa ja
lopputilojen arvot mustan siirron
tuottamia arvoja (Boardscore)
7. 0 1 2 3 4 5 6 7
Minmax
R 63
3. Lasketaan lopputilojen
avulla kerrosta ylempänä
MAX oleville nodeille arvo.
• Kuvan oikeassa reunassa olevat
MAX ja MIN kuvaa siirtovuoroa.
MIN
• Minmax algoritmi olettaa, että
MAX tekee kaikkensa
maksimoidakseen hyödyn ja MIN
vastaavasti tekee parhaansa sen
minimoimiseksi.
• MIN-siirtovuoro siis valitsee
lopputilojen arvoista pienimmän
ja MAX suurimman.
MAX • MIN eli vastustaja valitsee
lopputiloista 30 ja 6 pienimmän eli
arvon 6. MAX tässä vaiheessa
valitsee ylimmälle tasolle arvon 6.
MIN
8. 0 1 2 3 4 5 6 7
Minmax
R 63
3. Lasketaan edelleen
lopputilojen avulla
kerrosta ylempänä
oleville solmuille arvo.
MAX
• Edellisestä tilasta on siirrytty
seuraavaan solmuun. Tavallisesti
MIN valitsisi pienimmän arvon
lopputiloista -18 ja -22.
MIN • Kuvassa käytetään kuitenkin
hyväksi ns. Alpha-beta karsinta-
algoritmia (AB Pruning).
• Alpha-beta karsinnalla voidaan
jättää kokonaan huomioitta haara
jonka lopputilan arvo on -22
vaikka kaikkein suurimmalla
todennäköisyydellä MIN eli
vastustaja valitsisi juuri tämän
vaihtoehdon.
• Karsinta voidaan tehdä, koska
seuraavalla tasolla valitaan
kaikkien tämän tason solmujen
Alpha-beta algoritmi: MAX arvo ja tällä solmulla on jo
Jos α >= β niin hylkää haara. nyt tarjota arvo -18. Ts. Karsinnalla
Kuvassa α = 6 ja β=-18 tiedetään, että MIN valinnalla ei
voida saada solmulle arvoa joka
olisi suurempi kuin ylimmällä
tasolla oleva arvo 6.
9. 0 1 2 3 4 5 6 7
Minmax
R 63
4. Lasketaan edelleen
lopputilojen avulla
kerrosta ylempänä
oleville solmuille arvo.
MAX
5. Lopulta ollaan puun
huipulla ja tehdään
siirtovalinta ruutuun jolle
MIN on Minmax ja Alpha-beta
karsinnalla laskettu paras
arvo.
10. Daamin uhraus
• Palataan vielä alun esimerkkiin
missä kerrottiin että
evaluaatiofunktio ei voi tietää
ilman pelipuuta ja Minmax-
tyyppistä algoritmia vastustajan
Daamin uhrauksen olevan ansa
joka johtaa mattiin.
• Vasemmalla Minmax toteutus
MAX
samassa tilanteessa. Pelipuu on
generoitu ja lopputiloille on
laskettu arvot.
• Vasemmanpuoleisen solmun
MIN lopputilan arvo 100 kuvastaa
Daamin syöntiä ja arvo -999 on
shakkimatti
• oikealla puolella on toinen solmu
joku kuvaa jotain muuta
siirtovaihtoehtoa.
• Suoritetaan Minmax
• MIN valitsi arvot -999 ja 2 joista
MAX on 2 ja siirtovalinta on selvä.
Daamin uhrausta ei vastaanoteta
ja vältytään shakkimatilta.
11. Peliteho
• Kun shakkiengineen on toteutettu Minmax kohtuullisella
evaluointifunktio ja katkaisufunktiolla niin tavallisella PC:llä
voidaan tutkia n. 1000 000 solmua sekunnissa.
• Turnausshakissa on keskimäärin aikaa n. 3 minuuttia per
siirto joten voidaan tutkia n. 200 miljoonaa tilaa per siirto.
• Minmaxin haarautumiskerroin on 35 ja 35^5 on 50 000 000
joten nähdään n. 5 puolisiirtoa eteenpäin ja
shakkiohjelmamme on aloittelijan tasolla.
• Alpha-beta karsinnalla päästään samassa turnauksessa n.
10 puolisiirron syvyydelle ja ohjelma olisi jo taitava
shakinpelaaja.
• Kehittyneemmillä tekniikoilla voidaan koti-PC:llä päästä 14
puolisiirtoon saakka.