Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1



Podobné dokumenty
UNIVERZITA PALACKÉHO V OLOMOUCI KATEDRA INFORMATIKY. ALGORITMY REALIZUJÍCÍ v jednoduchých deskových hrách

Počítačové šachy. Otakar Trunda

2. Řešení úloh hraní her Hraní her (Teorie a algoritmy hraní her)

Hraní her. (Teorie a algoritmy hraní her) Řešení úloh hraní her. Václav Matoušek /

Algoritmy pro hraní tahových her

Anotace. Dynamické programování, diskrétní simulace.

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

Dokumentace programu piskvorek

DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

Alfa-beta algoritmus pro umělou inteligenci hry šachy

5 Rekurze a zásobník. Rekurzivní volání metody

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Uvažujeme jen hry s nulovým součtem, tj. zisk jednoho. Střídá se náš tah, kde maximalizujeme svůj zisk, s tahem

Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]

Hry a UI historie. von Neumann, 1944 algoritmy perfektní hry Zuse, Wiener, Shannon, přibližné vyhodnocování

Abstrakt. Následující text obsahuje detailní popis algoritmu Minimax, který se používá při realizaci rozhodování

Bakalářská práce Implementace algoritmu šachové hry

PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY ROČNÍKOVÝ PROJEKT KLOKAN. Informatika, II. ročník

Software je ve světě IT vše, co není Hardware. Do softwaru patří aplikace, program, proces, algoritmus, ale i data (text, obrázky), operační systém

Interpret jazyka IFJ2011

UNIVERZITA PARDUBICE

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

7. ODE a SIMULINK. Nejprve velmi jednoduchý příklad s numerických řešením. Řešme rovnici

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

KINAX WT 711 Programovatelný převodník úhlu otočení

Implementace A* algoritmu na konkrétní problém orientace v prostoru budov

Varianty Monte Carlo Tree Search

Úvod do teorie grafů

Pokročilé schopnosti OOP

Obsah herní sady: 40x dřevěný kámen hrací deska návod

Prohledávání do šířky a do hloubky. Jan Hnilica Počítačové modelování 15

VŘS PŘISTÁVÁNÍ RAKETY V GRAVITAČNÍM POLI ZEMĚ

Karty Prší. Anotace: Abstract: Gymnázium, Praha 6, Arabská 14 předmět Programování, vyučující Tomáš Obdržálek

Některé zákony rozdělení pravděpodobnosti. 1. Binomické rozdělení

Komprese dat. Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI. přednášky

Algoritmy a datové struktury

Umělá inteligence I. Roman Barták, KTIML.

2D standard pro jízdní doklady ČD, a.s.

Umělá inteligence pro hru Pentago Petr Kouba

2 HRA V EXPLICITNÍM TVARU

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

}w!"#$%&'()+,-./012345<ya


Katedra kybernetiky skupina Inteligentní Datové Analýzy (IDA) 9. dubna Filip Železný (ČVUT) Vytěžování dat 9.

Rekurzivní sledování paprsku

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Regulátor MaxVU. Stručný návod k použití

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE. Optimalizace trasy při revizích elektrospotřebičů

NEXIS 32 rel Generátor fází výstavby TDA mikro

Základy umělé inteligence

Genetické programování

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Projekt. Jan Outrata. listopad Jan Outrata (KI UP) Projekt - analýza a návrh listopad / 13

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Část 2

TENZOMETRICKÉ MĚŘIDLO

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Časová a prostorová složitost algoritmů

Stromy, haldy, prioritní fronty

IB111 Úvod do programování skrze Python

Jan Březina. Technical University of Liberec. 30. dubna 2013

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr


Klasifikace a predikce. Roman LUKÁŠ

Číslo a název šablony III/2 Inovace a zkvalitnění výuky prostřednictvím ICT H/01 Kuchař - Číšník. IKT Informační a komunikační technologie

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Rázové zkoušky únosnosti na cementobetonových krytech vozovek


Předmět: Algoritmizace praktické aplikace

prohled av an ı graf u Karel Hor ak, Petr Ryˇsav y 16. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Implementace slovníku bitovým vektorem

ALGORITMIZACE PROGRAMOVÁNÍ VT3/VT4

ENERGETICKÝ DISPEČINK. základní informace o službě

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

KMA/PDB. Karel Janečka. Tvorba materiálů byla podpořena z prostředků projektu FRVŠ č. F0584/2011/F1d

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Jan Březina. Technical University of Liberec. 21. dubna 2015

Umělá inteligence. UI (AI) - součást informatiky s průniky mimo obor Stručná historie UI. Letošní cena nadace Vize Joseph Weizenbaum

Hledání správné cesty

Grafové algoritmy. Programovací techniky

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.


Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

Kombinatorika, výpočty

PRÉCIS STRUKTUROVANÁ DATABÁZE JAKO ODPOVĚĎ NA NESTRUKTUROVANÝ DOTAZ. Dominik Fišer, Jiří Schejbal

Základní datové struktury III: Stromy, haldy

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

1. Metody měření parametrů trolejového vedení

Anotace. Středník II!! programování her.

Y36BEZ Bezpečnost přenosu a zpracování dat. Úvod. Róbert Lórencz. lorencz@fel.cvut.cz

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

IB109 Návrh a implementace paralelních systémů. Kolektivní komunikační primitava. RNDr. Jiří Barnat, Ph.D.

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

Informatika Algoritmy

Specifikace Záložního zdroje napájení. AEG Protect Blue 1000kVA

Břetislav Fajmon, UMAT FEKT, VUT Brno. Poznámka 1.1. A) první část hodiny (cca 50 minut): představení všech tří metod při řešení jednoho příkladu.

Martin Milata, Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

Transkript:

Projektový seminář 1

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.

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 P2 c5-b4 c5-d4 c5-d4 c5-b4 P3 P4 P5 P6 c3-a5 c3-e5 P7 P8

Příklad herního stromu P0 8 P1 8 P2 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 d2-c3 P0 d2-e3 1 a b c d e f g h P3 8 1 a b c d e f g h P4 8 1 a b c d e f g h P5 8 c5-b4 P1 c5-d4 c5-d4 P2 c5-b4 7 6 5 4 7 6 5 4 7 6 5 4 P3 P4 P5 P6 3 2 3 2 3 2 c3-a5 c3-e5 1 a b c d e f g h 1 a b c d e f g h 1 a b c d e f g h P7 P8 P6 8 P7 8 P8 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 a b c d e f g h a b c d e f g h a b c d e f g h

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

Ilustrace principu Minimaxu 95 d8-e7 d8-c7 8 95-12 e5-d6 e5-f6 e5-d6 e5-f6 98 95 99-12 e7-c5 e7-g5 c7-e5 c7-b6 c7-d6 7 6 5 4 3 98 95 99-15 -12 2 f6-e7 f6-g7 f6-e7 f6-g7 1 a b c d e f g h -15-10 -12-9

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.

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 function

Detailní pseudokód (ošetření výhry/prohry) function minimax(pozice, hloubka) if je_prohra(pozice) then return MAX if je_výhra(pozice) then return MAX if je_remíza(pozice) then return 0...

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 function

Detailní pseudokód (pozice blízké konci hry)... if ohod > MNOHO then ohod ohod 1 if ohod < MNOHO then ohod ohod + 1...

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 for return nejlepsi_tah end function

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 12 e5-d6 e5-f6 e5-d6 e5-f6 e7-c5 98 98 e7-g5 c7-e5 98-12 c7-b6 c7-d6-99 -99-99 15 12 f6-e7 f6-g7 f6-e7 f6-g7-15 -10-12 -9

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.

Ohodnocovací funkce Vstupem ohodnocovací funkce je ohodnocovaná pozice. Výstupem je celé číslo v intervalu MNOHO, MNOHO. 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.

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.

Příklad Převzato z Alpha-Beta-Suche (německy) Wikipedie, otevřená encyklopedie.

Pomocné funkce pro algoritmus Alfa-beta function dal(ohodnoceni) if ohodnoceni > MNOHO then return ohodnoceni + 1 if ohodnoceni < MNOHO then return ohodnoceni 1 return ohodnoceni end function function bliz(ohodnoceni) if ohodnoceni > MNOHO then return ohodnoceni 1 if ohodnoceni < MNOHO then return ohodnoceni + 1 return ohodnoceni end function

Funkce Alfa-beta (část 1) function alfabeta(pozice, hloubka, alfa, beta) if je_prohra(pozice) then return MAX if je_výhra(pozice) then return MAX if je_remíza(pozice) then return 0 if hloubka = 0 then return ohodnocovaci_funkce(pozice)

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 for return alfa end function

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 for return nejlepsi_tah end function

Příklad Převzato z Alpha-beta pruning (anglicky) Wikipedie, otevřená encyklopedie.

Příklad Převzato z knihy Šachy na PC.

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.