Pokročilá implementace deskové hry Dáma

Rozměr: px
Začít zobrazení ze stránky:

Download "Pokročilá implementace deskové hry Dáma"

Transkript

1 České vysoké učení technické v Praze Fakulta elektrotechnická Bakalářská práce Pokročilá implementace deskové hry Dáma Ladislav Vitásek Vedoucí práce: RNDr. Marko Genyk-Berezovskyj Studijní program: Elektrotechnika a informatika, strukturovaný bakalářský Obor: Informatika a výpočetní technika červen 2006

2 ii

3 Poděkování Rád bych poděkoval vedoucímu mé bakalářské práce RNDr. Marko Genyk- Berezovskému za podnětné rady, čas strávený konzultacemi a jeho trpělivost. Také bych chtěl poděkovat Pavlu Ulčovi a Zdeňku Adámkovi za pomoc při grafickém návrhu implementované aplikace. V neposlední řadě bych rád poděkoval všem svým přátelům a kamarádům, kteří neustále přicházeli s novými nápady na vylepšení. iii

4 iv

5 Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu 60 Zákona č.121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon). V Praze dne v

6 vi

7 Abstrakt Bakalářská práce teoreticky rozebírá a implementuje deskovou hru Dáma pomocí strategie prořezávání stromu za použití heuristiky pro ocenění herní pozice. Úvodní část popisuje historii a současnost hry Dáma spolu s historií vývoje algoritmů umělé inteligence pro řešení deskových her. Ve druhé části s názvem Hledání strategií jsou popsány teoretické základy herních stromů a základních algoritmů, které jsou dále použity při implementaci hry Dáma. Návrh a realizace je popsána ve stejnojmenné části, která se zabývá použitými technologiemi (jazyk Java, knihovny Java Swing) a popisem částí aplikace (umělá inteligence, základní objektový model, formát PDN Portable Draughts Notation). Čtvrtá část testuje úroveň umělé inteligence programu na základě zkušeností uživatelů ze hry programu a porovnávání algoritmů prohledávání herního stromu. V závěrečné části jsou shrnuty dosažené výsledky a navrhnutá další možná vylepšení. vii

8 viii

9 Abstract The Bachelor's thesis does a theoretical analysis and implementation of the draughts board game using a game-tree pruning strategy with a heuristic for evaluating the value of a position. The first part describes the history and present of the draughts game along with the development of artificial intelligence algorithms for solving board games. The second part describes the theoretical fundamentals for game trees and basic algorithms used for the implementation of the draughts game. The design and realization are described in the next part, which handles technologies used (the Java programming language, the Java Swing libraries) and describes all parts of the application (artificial intelligence used, the basic object model, the PDN format - Portable Draughts Notation). The fourth part handles evaluating the strength of the program's artificial intelligence based on players' interactions with the program and a comparison of game-tree search algorithms. The final part summarizes the achieved results and proposes further possibilities of improvement. ix

10 x

11 Obsah Seznam obrázků... xv Seznam tabulek...xvi Část I Úvod Hra Dáma Deskové hry a stručná historie umělé inteligence... 2 Část II Hledání strategií Herní stromy Základní algoritmy Minimaxová metoda Ohodnocovací funkce Použití Pseudokód algoritmu Počty strategií Složitost algoritmu Algoritmus Negamax Pseudokód algoritmu Alfa-Beta ořezávání Použití Pseudokód algoritmu Složitost algoritmu Techniky zlepšující Alfa-Beta ořezávání Třídění tahů Statické třídění Killer moves heuristika Historická heuristika Iterativní prohlubování Transpoziční tabulka xi

12 5.2. Hledání klidu Hledání minimálního okna...18 Část III Návrh a realizace Použité technologie Jazyk Java Java Swing Části aplikace Umělá inteligence Generátor tahů Ohodnocovací funkce Rozhodovací algoritmus Základní objektový model Formát PDN Datová struktura formátu PDN Příklady zápisu partie Analýza PDN pro čtení ze souboru Programová realizace PDN...44 Část IV Testování umělé inteligence Úroveň umělé inteligence Obtížnost hry Porovnání algoritmů prohledávání herního stromu Zkušenosti hráčů ze hry...49 Část V Závěr Zhodnocení Náměty pro budoucí práci...52 Literatura...53 A Seznam použitých zkratek...55 B Stručná pravidla Mezinárodní dámy...56 xii

13 C Instalační příručka C.1 Systémové požadavky C.2 Instalace prostředí Java C.3 Spuštění aplikace D Uživatelská příručka D.1 Obecné D.1.1 Hlavní obrazovka D.2 Funkce hlavního menu D.2.1 Menu Hra...60 D.2.2 Menu Tah...61 D.2.3 Menu Obtížnost D.2.4 Menu Herní deska D.2.5 Menu Nástroje D.2.6 Menu Zobrazit D.2.7 Menu Damaq D.3 Nástroje D.3.1 Nástroj Možné tahy D.3.2 Nástroj Hra D.3.3 Nástroj Editor...66 D.3.4 Nástroj Hodiny D.4 Herní deska a zadávání tahu D.5 Stavový řádek D.6 Uložení a načtení rozehrané partie D.6.1 Uložení partie do formátu PDN D.6.2 Uložení partie jako odkaz na Java applet D.6.3 Načtení partie ze souboru formátu PDN D.7 Uživatelská nastavení...71 D.7.1 Obecná nastavení D.7.2 Nastavení vzhledu D.7.3 Nastavení exportu do schránky D.7.4 Různá nastavení xiii

14 D.8 Ověření nové verze...74 E Obsah přiloženého CD...75 xiv

15 Seznam obrázků Obr. 1 Příklad herního stromu...4 Obr. 2 Minimaxový vyhledávací strom...6 Obr. 3 Minimaxový herní strom s aplikovanou metodou Alfa-Beta ořezávání...10 Obr. 4 Komponenty nutné k vytvoření umělé inteligence pro hru dvou hráčů...20 Obr. 5 Herní deska pro Mezinárodní dámu...21 Obr. 6 Příklad obsahu datové struktury tahu...22 Obr. 7 UML diagram s návrhem základních tříd a rozhraní...31 Obr. 8 Hlavní obrazovka aplikace...60 Obr. 9 Nástroj Možné tahy...64 Obr. 10 Nástroj Hra...65 Obr. 11 Nástroj Editor...66 Obr. 12 Nástroj Hodiny...67 Obr. 13 Zadávání tahu...68 Obr. 14 Stavový řádek...68 Obr. 15 Dialog uložení partie do PDN souboru...69 Obr. 16 Přehrávání partie v Java appletu...70 Obr. 17 Dialog načtených partií z PDN souboru...71 Obr. 18 Dialog uživatelských nastavení...72 Obr. 19 Adresářová struktura přiloženého CD...75 xv

16 Seznam tabulek Tab. 1 Reprezentace terminálních symbolů gramatiky ve formátu PDN Tab. 2 Výpočet množin FIRST a FOLLOW pro PDN gramatiku Tab. 3 Tabulka rozkladu pro PDN gramatiku Tab. 4 Počet prohledávaných pozic herního stromu s danou hloubkou a metodou.. 48 Tab. 5 Čas potřebný k prohledání herního stromu s danou hloubkou a metodou Tab. 6 Odehrané partie hráčů testujících aplikaci xvi

17 Hra Dáma Část I Úvod Úkolem bakalářské práce je vytvořit pokročilou implementaci deskové hry Dáma s umělou inteligencí pomocí strategie prořezávání stromu hry a vhodné heuristiky k ohodnocení pozice. Za cílovou skupinu uživatelů lze považovat jak naprosté začátečníky, hrající hru Dáma jen rekreačně, tak i pokročilé a zkušené hráče profesionály bývající účastníky turnajů, pro které aplikace obsahuje užitečné nástroje. Práce si neklade za cíl přímo konkurovat v množství funkcí a úrovni umělé inteligence aplikacím vyvíjeným několik let v týmu mnoha lidí, ale snaží se nabídnout moderně zpracovanou alternativu a výhody použití jazyka Java s technologií Java Swing. 1. Hra Dáma Není přesně známo, kdo hru Dáma vymyslel. Podle legend to byl egyptský bůh Thovt, který byl také označován za autora hieroglyfického písma. Předchůdce hry Dáma senet se hrál ve starověkém Egyptě už 3000 let př. n. l, což dokazují fresky v hrobce Merknera, dvořana faraona Tauta. Senet se hrál na desce 3 10 polí. Od současné Dámy se lišil hlavně tím, že počet tahů se určoval vrhacími dřívky. V Lýdii, za vlády krále Atise, se již hrálo na desce 8 8 šachových polí. Kameny byly dvou barev a posouvaly se pouze vpřed. Hra symbolizovala boj dvou armád a kámen, který se dostal na poslední řadu (do týla soupeře), se obrátil a s větší silou útočil z týla. Nepřátelský kámen se bral zprvu tak, že se musel obklíčit dvěma kameny. Později se bral přeskočením. Symbolizovalo to, že voják, který srazil nepřítele k zemi, ho překročil a pokračoval v boji. Dalším způsobem výhry bylo zablokování kamenů, což symbolizovalo jejich zajetí. Do Čech se Dáma dostala spolu s Habsburky v šestnáctém století ze Španělska a Německa. I samotný název hry Dáma je z německého der Damm hráz, přehrazení, což ukazuje na způsob, jak se v této hře vyhrává. V současné době existuje mnoho variant hry Dáma. Téměř se dá říci, že každý národ má vytvořenu svou variantu pravidel (je známa například Italská či Španělská dáma a mnohé další). Nejinak je tomu i v českých zemích. V obecném povědomí nejrozšířenější varianta Česká dáma se hraje na desce 8 8 polí. Pro svou implementaci jsem se však rozhodl zvolit poněkud netradičně variantu známou jako Mezinárodní dáma. Mezinárodní dáma se hraje na desce polí a pravděpodobně největším rozdílem oproti české variantě je možnost 1

18 Deskové hry a stručná historie umělé inteligence skákání obyčejných kamenů i zpět, což dělá tuto hru dle mého mínění mnohem zajímavější a výslednou aplikaci v naší zemi originální. Tato verze pravidel je oblíbená především v Holandsku nebo Rusku, ale i v jiných státech Evropy. Přestože mezinárodní varianta není v českých zemích mezi laiky tak hojně oblíbena, každý rok se pod záštitou České federace dámy [3] konají národní turnaje. Dámu vůbec nelze považovat za jistou nižší formu šachů. Ačkoli není tak složité se ji naučit, množství logického uvažování a notná dávka strategie potřebná k vítězství nad zkušeným protivníkem není o nic menší. 2. Deskové hry a stručná historie umělé inteligence Tato práce není zdaleka první, která se nějakým způsobem pokouší navrhnout a vytvořit virtuálního protihráče stroj pro hru Dáma či šachy (teorie a práce nad řešením umělé inteligence šachů a hry Dáma byly vždy spjaty). Mnohé ze skutečností uvedené v tomto textu jsou právě založeny na historických základech a metodách vymyšlených dávno před vznikem prvního osobního počítače. Jako prvního vědeckého badatele v této oblasti lze označit anglického matematika žijícího v devatenáctém století Charlese Babbage, který první navrhl jistou souslednost kroků algoritmus (podobný dnešním) kdy šachový stroj si měl klást otázky a z odpovědí vyvodit svoji reakci. První pravý šachový stroj však sestrojil až Španěl Leonardo Torres y Quevedo roku Zvolil si jednoduchou koncovku a jeho stroj složený z nejjednodušších magnetických relé si dokázal s touto koncovkou poradit, i když ne vždy optimálně. Hernímu teoretikovi a spoluzakladateli současných počítačových věd Johnu Von Neumannovi je připisováno autorství formulace tzv. Minimaxové metody (rok 1944), která de facto znamenala nalezení jistého vzorce pro umělou inteligenci deskových her, se kterým by se dal vždy (alespoň teoreticky) nalézt nejlepší tah. Minimaxové metodě je v této práci věnována samostatná kapitola (viz kap. 4.1). Nelze nezmínit významného matematika Alana Turinga, který navrhl dodnes používaný základní způsob ohodnocení materiálu pozic, dále pak prověřování tahů jak bílého, černého a některé další techniky hledání strategie. Roku 1951 Turing sestavil svůj program pouze na papíře, ale jeho přínos nebyl jistě malý. Podobně jako v Anglii Turing, tak v Americe se umělou inteligencí zabýval Claude Shannon. Shannon již využíval Minimaxovou metodu. Byl si vědom velkého množství 2

19 Deskové hry a stručná historie umělé inteligence kombinací, které se v šachu a podobných hrách vyskytují a jako první pak popsal tzv. strategii A [4], která spočívala v tom, že se zkoumala všechna možná pokračování až do pevně stanovené hloubky vyhledávání. Navrhl strategii B, která zahrnovala hledání klidové pozice a zkoumání jen smysluplných tahů. V souvislosti s hledáním tahů zavedl termín hrubá síla (brute force, viz kap ). Následovaly pokusy o návrhy nejlepších programů na specializovaných počítačích. Za všechny lze zmínit Maniac I, MacHack či pozdější Chess, Cray Blitz, Deep Thought I/II a další. K tomuto výčtu lze přidat i šachový program CP-1, na kterém pracovali pánové Newell, Shaw, Simon při univerzitě Carnegie-Mellon v Pittsburghu a kteří jako první roku 1958 uvedli do praxe použití úpravy Minimaxové metody Alfa-Beta ořezávání, které se poměrně významně vztahuje k této práci (viz kap. 4.3). Médii velmi oblíbený Deep Blue, který hrál v roce 1997 proti velmistru šachu Garry Kasparovovi a vyhrál, byl označen za první stroj definitivně porážející šachové velmistry. Ekvivalentní varianta podobného stroje pro dámu Chinook byla vytvořena o 3 roky dříve. Výzkum počítačového myšlení deskových her však neskončil. Vytvoření umělé inteligence k čínské hře Go je stále považováno za velice obtížné. Velmistři v Go odmítají hrát s počítači, protože jsou stroje příliš slabé. 3

20 Herní stromy Část II Hledání strategií Tato část se zabývá popisem možností řešení a technikami k tvorbě umělé inteligence ve hře dvou hráčů. 3. Herní stromy Herní stromy představují často používaný a jednoduchý způsob, jakým lze zobrazit pozice a tahy ve většině deskových her. Popis hry herním stromem (Obr. 1) pomáhá při představě řešení problémů spojených s umělou inteligencí. Reprezentace hry pomocí herního stromu však není jen vizuální pomůckou, ale tvoří i zvláštní matematickou disciplínu v oblasti teorie her (viz např. [5]). Obr. 1 Příklad herního stromu Formální reprezentace se vztahuje k deskovým hrám dvou hráčů. V teorii her je tento popis znám jako rozšířená forma (extensive form, viz [7]). Obecně platí, že herní strom je orientovaný graf, jehož uzly (vrcholy) představují pozice a orientované hrany jednotlivé tahy. Při tahové hře dvou hráčů je jeden tah složen z tahu obou hráčů, přičemž tah jenom jednoho z nich se označuje jako půltah. Uvedený strom na Obr. 1 má hloubku tří půltahů a tvoří jej čtyři úrovně pozic. Jednotlivé úrovně pak představují střídání hráčů při hře. Provedením konkrétního tahu hráče na určité pozici se lze dostat do stavu jiného (jiné pozice), od které začíná hrát protihráč. Jestliže by herní strom na obrázku vyobrazoval všechny možné pozice hry se všemi možnými tahy (takové, které se mohou od pozic podle pravidel odvíjet), pak se takový strom nazývá úplný. Kořen stromu (nejvyšší zobrazená úroveň) určuje výchozí pozici, od které hra pokračuje, a listy (uzly nemající žádného následovníka, resp. nejnižší zobrazená úroveň) reprezentují koncové pozice. 4

21 Základní algoritmy V případě úplného herního stromu koncové pozice označují buď výhru, prohru (resp. výhru protihráče) nebo remízu. S pomocí úplných herních stromů lze dokázat, že vždy právě jeden z hráčů má výherní strategii nebo jsou oba schopni dosáhnout remízy. Důkaz tohoto tvrzení je možné nalézt na [6]. Lze tedy najít určitou strategii, která povede k vítězství hráče ve hře. Základní způsob umožňující nalezení nejlepšího tahu pro danou pozici demonstruje Minimaxová metoda. 4. Základní algoritmy 4.1. Minimaxová metoda Princip Minimaxové metody (také zvané jako algoritmus Minimax nebo jen zkráceně Minimax ) reprezentuje relativně jednoduchý způsob při hledání optimálního tahu. Pro názornost je zde uveden jednoduchý příklad procházení a zkoumání herního stromu spolu s ohodnocením pozic. K ohodnocení pozic slouží ohodnocovací funkce, kterou je nutné si nejprve pro případ použití Minimaxovou metodou definovat Ohodnocovací funkce Pokud známe herní strom celý, je možné pomocí ohodnocovací funkce přiřadit pozici na herní desce odpovídající číselnou hodnotu. Pokud celý herní strom neznáme (většina případů), pak pomocí ohodnocovací funkce přiřazujeme pozici na herní desce odhadovanou heuristickou hodnotu. Čím je hodnota větší (větší než nula), tím výhodnější je pozice pro prvního hráče, který maximalizuje (žádá maximum), čím je hodnota menší (menší než nula), tím je pozice výhodnější pro druhého hráče, který minimalizuje (žádá minimum). Toto platí také obráceně, v případě, kdy se hráči vymění (tj. první minimalizuje, druhý maximalizuje). Hodnota nula znamená, že je pozice vyrovnaná (remíza). Podrobněji bude způsob oceňování v ohodnocovací funkci diskutován v implementačním popisu (viz kap ) Použití Strom na Obr. 2 zobrazuje situaci, kdy hráč, který hru začíná, má možnost provést tři legální (půl)tahy a jeho protivník z každé pozice také tři legální (půl)tahy (dále bude jednoduše označován půltah jako tah). Úkolem je propočítat právě dva tahy, tedy zkoumat 5

22 Základní algoritmy všechny možnosti tahů prvního hráče a všechny možné odvetné tahy druhého hráče (protihráče). Ohodnocení tahu je shodné s ohodnocením pozice, do které se lze provedením tahu dostat. V ukázkovém případě bylo zvoleno, že první hráč bude hráčem, který maximalizuje ohodnocení tahu (pro všechny možné varianty) a jeho protihráč naopak minimalizuje ohodnocení tahu (pro všechny možné varianty). Při procházení se neustále předpokládá, že protihráč provede svůj nejlepší tah. Tento předpoklad platí pro oba hráče. Od protihráče během hry přirozeně nelze čekat, že se bude snažit hrát jinak. Obr. 2 Minimaxový vyhledávací strom Čísla v uzlech udávají pořadí pozic, jakým způsobem je herní strom procházen. Procházení začíná od pozice (0). Provede se první možný tah prvního z hráčů (tah na obrázku označený jako a). Tímto se přejde do nové pozice (1), ve které je na tahu druhý hráč. Zahraje se první protihráčův tah a přejde se do koncové pozice (2). V této koncové pozici se zavolá ohodnocovací funkce, která ji přiřadí hodnotu. Pozici je přiřazena hodnota +6, maximalizující první hráč je v této pozici ve výhodě. Nyní dojde k návratu do pozice (1), tj. vrátí se první provedený tah protivníka. Provede se druhý z protihráčových tahů. Nová koncová pozice (3) se ohodnotí hodnotou +1 a opět se vrátí provedený tah. Z pozice (1) se provede poslední z protivníkových tahů. Pozici (4) je přiřazena hodnota +5. Procházení pokračuje návratem do pozice (1). Pozici (1) je po návratu z pozice (4) přiřazena hodnota +1, tj. ta nejméně výhodná hodnota pro prvního hráče (volí se minimum), která byla na pozicích (2), (3) a (4) nalezena (hodnota pozice (3)). Dojde k návratu do výchozí pozice (0). Podobně se provedou i další dva zbylé tahy prvního hráče (tahy označené jako b a c) z výchozí pozice. Pozice (5) získá hodnotu 2 a pozice (9) hodnotu 1. Procházení končí na výchozí pozici (0), které se přiřadí nejméně výhodná hodnota pro druhého hráče (volí se 6

23 Základní algoritmy maximum). Nejvyšší přiřazenou hodnotu má pozice (1) (hodnota +1), proto se tah a, který vede do této pozice, označí za nejlepší (nejvhodnější) a použije se pro hraní. Poněvadž dochází při procházení herního stromu ke střídavému zjišťování minima a maxima, vžil se název pro tuto metodu jako Minimaxová Pseudokód algoritmu Algoritmus Minimax zapsaný v pseudokódu vypadá takto: /* vstupním parametrem funkce je výchozí pozice, funkce vrátí její ohodnocení při hledání do hloubky dané druhým parametrem */ p : aktuální pozice na šachovnici h : hloubka prohledávání */ int Minimax(Pozice p, int h) { if (HracNaTahu() == KDO_MAX) /* na řadě je maximalizující hráč*/ return Maximalizuj(p, h); else /* na řadě je minimalizující hráč */ return Minimalizuj(p, h); } /* funkce vybírá maximum nad ohodnocenými pozicemi provedených tahů */ int Maximalizuj(Pozice p, int h) { int nejlepsi = -NEKONECNO; /* hodnota dosud nejlépe ohodnocené pozice */ if (h <= 0 KoncovaPozice(p)) /* pokud je to poslední nebo koncová pozice,*/ return OhodnotitPozici(p); /* tak ji ohodnoť */ tahy = GenerujTahy(p); /* generuj tahy pro aktuální pozici */ for i = 1 to size(tahy) do { /* cyklus pres všechny tahy */ ProvedTah(tah[i], p); /* zahraj tah */ } int hodnota = Minimalizuj(p, h - 1); /* propočtem do hloubky zjisti ohodnocení z hlediska soupeře */ ProvedTahZpet(tah[i], p); /* zahraj tah zpět */ if (hodnota > nejlepsi) /* pokud je vrácená hodnota lepší, než dosud nalezená, tak si ji ulož */ nejlepsi = hodnota; } return nejlepsi; /* funkce vybírá minimum nad ohodnocenými pozicemi provedených tahů */ int Minimalizuj(Pozice p, int h) { int nejlepsi = NEKONECNO; /* rozdílné oproti maximalizaci */ if (h <= 0 KoncovaPozice(p)) return OhodnotitPozici(p); tahy = GenerujTahy(p); for i = 1 to size(tahy) do { ProvedTah(tah[i], p); int hodnota = Maximalizuj(p, h - 1); ProvedTahZpet(tah[i], p); if (hodnota < nejlepsi) /* rozdílné oproti maximalizaci */ nejlepsi = hodnota; /* nalezené minimum se uloží */ } return nejlepsi; } 7

24 Základní algoritmy V uvedeném příkladu implementace Minimax algoritmu je použitý rekurzivní algoritmus, ve kterém je herní strom procházen variantou prohledáváním do hloubky (Depth- First Search) Počty strategií Algoritmus Minimax vypadá dokonale. S patřičně zadanou dostatečnou hodnotou hloubky pro prohledávání, by měl algoritmus najít vždy pozici s nejlepším ohodnocením a tedy i tah, který do této pozice vede. Řešení problému spočívá v extrémně velkém množství pozic, které by program pomocí tohoto algoritmu musel projít při použití hrubé síly, tedy procházení všech možných pozic. Vyhledávací strom, který byl použit při popisu Minimaxové metody na Obr. 2, byl s třinácti uzly spíše jen velmi zkrácenou ukázkou. V praxi je pro hru Dáma takový strom mnohonásobně větší. Pro představu: Podle [8] je pro Mezinárodní dámu možný počet všech pozic roven hodnotě přibližně 1, Reálně bude počet pozic pro herní stromy menší z důvodu omezení pravidel remízy (omezení počtu tahů na hru), přesto však toto číslo zůstává velmi vysoké. Z uvedeného čísla lze spočítat, že pro hru Dáma, při průměrném počtu dvaceti možných tahů na pozici, je přibližná hloubka úplného stromu jen 25, z časového hlediska je však doba potřebná k projití takového stromu astronomická. Jednoduchým výpočtem je možné zjistit, že při zpracování na počítači umožňujícím zpracovat milion pozic za sekundu, bude doba potřebná k prohledání a výpočtu celého minimaxového stromu trvat let Složitost algoritmu Časovou asymptotickou složitost algoritmu je možné snadno odhadnout z vlastností H procházení stromu na Ο ( W ), kde W je průměrná hodnota počtu všech možných tahů z každé pozice (uzlu) stromu a H je hloubka procházeného stromu Algoritmus Negamax Z pseudokódu Minimaxové metody (viz kap. 4.1) je vidět, že metody Minimalizuj a Maximalizuj si jsou velmi podobné. Jejich rozdíly závisí jen na úhlu pohledu hráče, který právě táhne. Uvedený pseudokód lze zjednodušit, pokud nejvyšší kladná hodnota při ohodnocování bude znamenat výhodu pozice pro minimalizujícího hráče. Ohodnocovací funkci je nutné upravit tak, že bude vždy vracet kladné hodnoty pro hráče, který je aktuálně 8

25 Základní algoritmy na tahu (bude ohodnocovat vždy z hlediska táhnoucího). Změny úhlu pohledu jednotlivých hráčů se projeví střídáním znaménka při volání další úrovně. Kvůli neustálému střídání znaménka ohodnocení, negování hodnoty, se vžil název pro tuto úpravu Minimaxu jako algoritmus Negamax. S algoritmem Negamax pak stále dochází k maximalizaci u obou hráčů Pseudokód algoritmu Zápis pseudokódu Minimaxové metody lze podle popsaného návodu upravit a zjednodušit takto: /* vstupním parametrem funkce je výchozí pozice, funkce vrátí její ohodnocení při hledání do hloubky dané druhým parametrem p : aktuální pozice na šachovnici h : prohledávaná hloubka */ int Negamax(Pozice p, int h) { int nejlepsi = -NEKONECNO; /* hodnota dosud nejlépe ohodnocené pozice */ if (h <= 0 KoncovaPozice(p)) /* pokud je to poslední nebo koncová pozice,*/ return OhodnotitPozici(p); tak ji ohodnoť */ tahy = GenerujTahy(p); /* generuj tahy pro aktuální pozici */ for i = 1 to size(tahy) do { /* cyklus pres všechny tahy */ ProvedTah(tah[i], p); /* zahraj tah */ } int hodnota = -Negamax(p, h - 1); /* propočtem do hloubky zjisti ohodnocení z hlediska soupeře */ ProvedTahZpet(tah[i], p); /* zahraj tah zpět */ if (hodnota > nejlepsi) /* pokud je vrácená hodnota lepší, než dosud nalezená, tak si ji ulož */ nejlepsi = hodnota; } return nejlepsi; Algoritmus Negamax není žádnou optimalizací algoritmu Minimax. Tyto algoritmy, resp. jejich popisy v pseudokódu, jsou identické. Jedná se pouze o technické zlepšení zápisu Minimaxové metody prohledávání. Výhody kratšího zápisu pomocí Negamax algoritmu bude využito i v další kapitole Alfa-Beta ořezávání Alfa-Beta ořezávání Jak již bylo předvedeno, procházení reálných herních stromů do hloubky při velkém větvení může trvat velmi dlouho (viz kap. 4.1). Otázkou tedy je, jakým způsobem by se dalo procházení stromu více zrychlit. Hloubku omezit nelze, protože prohledaná hloubka přímo určuje kvalitu myšlení, resp. rozhodnutí, který z aktuálních tahů lze považovat za dobrý (vedoucí k vítězství) i po provedení dalších tahů ve hře. Jedinou možností zmenšení počtu prohledávaných pozic je omezit větvení stromu a tím se vyhnout propočítávání pozic 9

26 Základní algoritmy odvozených na těchto větvích. Tomuto se obecně říká ořezávání (někdy též odsekávání). Je samozřejmé, že nelze zahazovat a odstraňovat větve (tahy) nahodile. Hrozilo by provedení špatných tahů, které by výsledek prohledávání znehodnotily. Základní myšlenkou Alfa-Beta ořezávání je nepočítat takovou pozici, která ve výsledku stejně neovlivní výběr nejlepšího tahu. Jinak řečeno, je-li nějaký tah špatný (horší než dosud zjištěný), nemá význam se jím dále zabývat při testování protivníkových odpovědí. Provedením takového tahu by se dalo již jen zjistit, že je tento tah ještě horší Použití Ukažme příklad aplikování výše zmíněné myšlenky Alfa-Beta algoritmu na stromu podobném jako u popisu Minimaxové metody (Obr. 3). Obr. 3 Minimaxový herní strom s aplikovanou metodou Alfa-Beta ořezávání Při procházení stromu se nejprve prozkoumávají koncové pozice (2), (3) a (4) a tím se pro první tah (tah a) na výchozí pozici zjistí hodnota +1. Dále se prozkoumává druhý tah (tah b) a pro koncovou pozici (6) se získá hodnota 2. Nalezená hodnota 2 dává jistotu, že ohodnocení na pozici (5) nebude již větší než zmíněná 2. Z toho ovšem vyplývá, že tah b bude při porovnání na výchozí pozici (0) vždy horší než tah a. O kolik horší bude tah b než tah a, není nutné vědět. Logicky lze vyvodit, že pozice (7) a (8) není potřeba uvažovat, lze tedy po prozkoumání pozice (6) testování dalších větví odvozené od pozice (5) okamžitě přerušit. Tahy vedoucí do pozice (7) a (8) jsou tímto odstraněny z prohledávání. Podobnou úvahu lze aplikovat i v případě třetího tahu (tah c) vedoucího z kořene. Hodnota +4 získaná na pozici (10) ještě neumožňuje možnost přerušení hledání (může stále existovat lépe ohodnocený tah než tah a, resp. třetí tah skončí s lepším výsledkem) a je proto nutné prozkoumat druhý tah vedený od pozice (9). Pozice (11) však vrací hodnotu 1 a je tak 10

27 Základní algoritmy zřejmé, že nejlepším tahem bude celkově zvolený tah a. V tuto chvíli je prohledávání dalších tahů od pozice (9) přerušeno a pozice (12) tak prozkoumána nebude. Provedené zkrácení, při kterém se neuvažují odvetné tahy protivníka, se nazývá alfa ořezávání. Stejně tak existuje i zkrácení tahů začínajícího hráče. Tento typ zkrácení se ovšem vyskytuje až od druhého půltahu a nazývá se beta ořezávání. Technika využívající oba způsoby ořezávání větví se pak nazývá Alfa-Beta ořezávání (Alfa-Beta metoda) Pseudokód algoritmu Z předchozího textu plyne, že Alfa-Beta metoda je jen úpravou původní Minimaxové metody. Níže uvedený pseudokód vychází z kratší formy zápisu, tak jak ji používá Negamax. Samozřejmě by bylo možné rozepsat pseudokód i jako delší variantu pomocí metod pro minimalizaci a maximalizaci. /* vstupním parametrem funkce je výchozí pozice, funkce vrátí její ohodnocení při hledání do hloubky dané druhým parametrem a omezeními dané hodnotami alfa a beta p : aktuální pozice na šachovnici h : prohledávaná hloubka alfa : dolní mez očekávané hodnoty beta : horní mez očekávané hodnoty */ int AlfaBeta(Pozice p, int h, int alfa, int beta) { if (h <= 0 KoncovaPozice(p)) /* pokud je to poslední nebo koncová pozice, */ return OhodnotitPozici(p); /* tak ji ohodnoť */ tahy = GenerujTahy(p); /* generuj tahy pro aktuální pozici */ for i = 1 to size(tahy) do { /* cyklus pres všechny tahy */ ProvedTah(p); /* zahraj tah */ /* propočtem do hloubky zjisti ohodnocení z hlediska soupeře */ int hodnota = -AlfaBeta(p, h 1, -beta, -alfa); ProvedTahZpet(tah[i], p); /* zahraj tah zpět */ if (hodnota >= beta) return beta; /* při tomto návratu dojde k úspoře */ if (hodnota > alfa) /* pokud je vrácená hodnota lepší, než dosud nalezená, tak si ji ulož */ alfa = hodnota; } return alfa; } Oproti zápisu Negamax, úprava kódu zápisu nepřináší příliš mnoho změn. Přesto, v parametru metody přibyly proměnné alfa a beta, které jsou využity při aplikaci metody ořezávání. Proměnná alfa určuje hodnotu dosud nejlepšího nalezeného tahu, beta pak stanovuje hodnotu nejhoršího případu soupeře. Volání nižší úrovně není tak jednoduché jako v případě Negamaxu. Při zahrání půltahu se změní hráč, který je na tahu. Je proto třeba výsledek volání podúrovně vynásobit -1 11

28 Základní algoritmy a současně musí dojít k prohození proměnných alfa i beta, které jsou taktéž vynásobeny -1. Hodnoty alfa a beta si tak vymění úlohy. Tímto je zajištěno, že se při rekurzivním volání změní perspektiva k vyjádření skutečnosti, že se každý hráč snaží porazit toho druhého. Hodnotu alfa lze také popsat jako dolní a betu jako horní mez intervalu, ve kterém se bude výsledná hodnota kořenové pozice vyskytovat. Tento interval se postupně při zpětném ohodnocováním pozic metodou upravuje a zmenšuje. Častěji se také pro interval (alfa, beta) používá výraz vyhledávací okno (search window). Všechny hodnoty mimo vyhledávací okno jsou během prohledávání označeny jako nezajímavé a pozice vně vyhledávacího okna jsou tímto ořezány (nejsou zkoumány). K zaručení, že dojde k nalezení správné hodnoty, je první volání Alfa-Beta metody iniciováno hodnotami (1) a (2). alfa = (1) beta = (2) Důležitou vlastností Alfa-Beta ořezávání je, že hodnota nejlepšího tahu (výsledek algoritmu), je vždy shodná s hodnotou, která by byla získána při prohledávání Minimaxovou metodou. Díky technice ořezávání větví však přesto dojde k značné úspoře času Složitost algoritmu V příkladu ukázky použití Alfa-Beta algoritmu (Obr. 3) je u třetího možného tahu počítače na pozici (9) patrné, že pokud by bylo pořadí zkoumaných pozic (10) a (11) přehozeno, došlo by k ořezávání a nemuselo by tak dojít ani k prohledávání pozice (10). Efektivita Alfa-Beta metody je silně dána pořadím prohledávaných pozic. V případě, kdy místo Minimaxové metody bude použita Alfa-Beta metoda a uspořádání procházených pozic bude ideální (tedy nejvýhodnější tah hráče, který je aktuálně na tahu, je zkoumán jako první), pak je možné za stejný čas hloubku prohledávání stromu zdvojnásobit (viz [9]). Pro ideální H případ je časová asymptotická složitost algoritmu Ο ( Z ), kde Z je rovno druhé odmocnině průměrné hodnoty počtu všech možných tahů z každé pozice (uzlu) stromu a H je hloubka prohledávaného stromu. V nejhorším případě (tahy pro aktuálně hrajícího hráče budou zkoumané od nejméně výhodného) se prohledávání Alfa-Beta metodou degraduje na hledání Minimaxovou metodou. Idea Alfa-Beta ořezávání je velmi jednoduchá, dá se říci téměř triviální. Je proto zajímavé, že k objevení této úpravy prohledávání herních stromů došlo až 14 let po von Neumannově zveřejnění Minimaxové metody (viz kap. 2). 12

29 Techniky zlepšující Alfa-Beta ořezávání 5. Techniky zlepšující Alfa-Beta ořezávání Během práce na programech založených na metodě Alfa-Beta ořezávání byla vyvinuta řada technik, z nichž některé ve výsledku vylepšují celkové chování (lepší forma prohledávání) a některé algoritmus zrychlují. Mezi hlavní skupiny technik patří: třídění tahů, hledání klidu, hledání minimálního okna. Uvedené techniky bývají dále jednotlivými autory modifikovány pro konkrétní hry a aplikace. Zmíněné techniky jsou detailně rozebrány např. v [1] popř. [9] Třídění tahů Účinnost Alfa-Beta ořezávání závisí na konkrétním pořadí procházených tahů. Pracuje efektivně, pokud jsou tahy procházeny od nejlepších k nejhorším. Mez alfa se pro tento případ posune tak vysoko, že výpočet končí prvním protivníkovým tahem. Je proto nutné snažit se dosáhnout tohoto pořadí. Uvedené posloupnosti není možno vždy přesně dosáhnout (využívá se heuristika), přesto lze získat zajímavé výsledky zejména v oblasti eliminace procházených pozic a tím zrychlit procházení stromu (procházet do větší hloubky za stejný čas) Statické třídění Intuitivní způsob řešení, který se nabízí, je setřídit tahy pro danou pozici již během generování tahů (generátor tahů bude detailněji diskutován v kap. 7.1), popř. tahy seřadit následně po generování tahů. Třídění probíhá tak, že se každý z tahů na dané úrovni provede a ohodnotí (tedy dojde k prohledání do jednoho půltahu). Následně se všechny tahy setřídí podle výhodnosti z pohledu hráče, který je na tahu. Ve hře Dáma se běžně stává, že hráč má na výběr několik braní různě pro něj výhodných (např. ztráta dámy, ztráta různého počtu kamenů). Tímto lze s určitou pravděpodobností nevýhodné tahy při prozkoumávání odsunout pro pozdější zpracování a zvýšit tak šanci na aplikaci metody ořezávání. Časové ztráty způsobené provedením tahu a následným tříděním bývají ve většině případů zanedbatelné. 13

30 Techniky zlepšující Alfa-Beta ořezávání Killer moves heuristika Myšlenka této heuristiky je jednoduchá. Vychází z toho, že pozice (resp. rozložení kamenů na hracích polích) si jsou velmi podobné. Způsobil-li nějaký tah ořezávání, je pravděpodobné, že na jiné pozici, která je na stejné úrovni stromu, způsobí toto ořezávání také. V programech bývá tento způsob realizován tak, že jsou během prohledávání uloženy (typicky) 2 tahy pro danou úroveň, které způsobují ořez (pod pojmem killer moves si lze představit množinu tahů, které jsou příčinou ořezávání větví). Při procházení se na dané hloubce ověří, zda některý z vygenerovaných tahů není z již uložených killer moves. V případě, že ano, jsou tyto tahy provedené mezi prvními (je větší pravděpodobnost, že opět způsobí ořezávání). Způsobil-li nějaký nový tah ořezávání a zároveň není ještě součástí seznamu tahů způsobujících ořezávání, tak se dotyčný tah jednoduše vymění za jeden ze dvou tahů uložených v seznamu Historická heuristika Historická heuristika, která byla prvně představena Jonathanem Schaefferem [2], zobecňuje základní myšlenku killer moves heuristiky. Stejně jako killer moves heuristika využívá k řazení tahů jejich předešlou efektivnost při ořezávání, neomezuje se však pouze na určitou hloubku, ale využívá získané informace pro třídění tahů v celém procházeném stromě Pseudokód algoritmu Funkci historické heuristiky v Alfa-Beta algoritmu ukazuje následující pseudokód: 14

31 Techniky zlepšující Alfa-Beta ořezávání /* vstupním parametrem funkce je výchozí pozice, funkce vrátí její ohodnocení při hledání do hloubky dané druhým parametrem a omezeními dané hodnotami alfa a beta p : aktuální pozice na šachovnici h : prohledávaná hloubka alfa : dolní mez očekávané hodnoty beta : horní mez očekávané hodnoty */ int AlfaBeta(Pozice p, int h, int alfa, int beta) { if (h <= 0 KoncovaPozice(p)) /* pokud je to poslední nebo koncová pozice, */ return OhodnotitPozici(p); /* tak ji ohodnoť */ tahy = GenerujTahy(p); /* generuj tahy pro aktuální pozici */ for i = 1 to size(tahy) do /* ohodnoť každý tah podle tabulky */ ohodnoceni[i] = TabHistorie[tah[i]]; /* historie */ Setrid(tahy, ohodnoceni); /* setřídit tahy podle ohodnocení */ for i = 1 to size(tahy) do { /* cyklus pres všechny tahy */ ProvedTah(p); /* zahraj tah */ /* propočtem do hloubky zjisti ohodnocení z hlediska soupeře */ int hodnota = -AlfaBeta(p, h 1, -beta, -alfa); ProvedTahZpet(tah[i], p); /* zahraj tah zpět */ if (hodnota >= beta) { /* úprava tabulky historie */ TabHistorie[tah[i]] = TabHistorie[tah[i]] + Vaha(h); return beta; /* při tomto návratu dojde k úspoře */ } if (hodnota > alfa) /* pokud je vrácená hodnota lepší, než dosud nalezená, tak si ji ulož */ alfa = hodnota; } return alfa; } Zvýrazněné řádky kódu označují přidané části k Alfa-Beta algoritmu. Jak je vidět, historická heuristika zvyšuje ohodnocení každému tahu, který způsobil ořezávání. Tabulka historie (v kódu označena jako TabHistorie) tak vyjadřuje míru úspěchu konkrétního tahu při ořezávání. Je nutné vysvětlit použití váhy při hodnocení tahu na různých hloubkách pro tabulku historie (funkce Vaha). Schaeffer ve své práci navrhuje zvolit takovou váhu, aby při třídění došlo k preferenci tahů, které jsou blízko kořene, před tahy, které jsou od kořene nejdále (nejhlubší pozice). Jako funkci pro váhu tahu je doporučováno použít prohledávaná hloubka. Navrhovaný vzorec je podložený empiricky. h 2, kde h je aktuálně Hodnoty pro tahy v tabulce historie se s výhodou uchovávají i do dalšího hledání (procházený strom má nový kořen). Přímé znovupoužití hodnot z tabulky by však mohlo způsobit, že by byly preferovány starší zjištěné tahy před tahy nově objevenými (provedené na větších hloubkách). Z tohoto důvodu se před novým hledáním hodnoty tabulky historie krátí konstantou (v [9] je doporučována hodnota 2). 15

32 Techniky zlepšující Alfa-Beta ořezávání Iterativní prohlubování Metoda iterativního prohlubování není přímo třídící heuristikou. Jedná se o úpravu Alfa-Beta metody. Místo provádění volání Alfa-Beta metody s pevnou hloubkou h, se provede volání postupně s hodnotou 1, 2, 3, h. Tato úprava způsobí zpomalení, které ale nebude výrazné. Důvodem je zapojení ostatních třídících heuristik, které při opětovném volání průchod již prozkoumanou úrovní urychlí. Využívá se skutečnosti, že výsledkem zkoumání do určité hloubky je tah obvykle stejný, jako v případě zkoumání do hloubky o půltah větší. Jednou z pohnutek pro použití iterativního prohlubování je možnost lepší kontroly času při hře, pokud existuje časové omezení na nalezení tahu. Dobu běhu Alfa-Beta metody s pevně zadanou hloubkou je velmi těžké odhadnout. Omezení časem lze implementovat pomocí prohlubování jednoduše tak, že pokud vyprší stanovený čas, aktuální prohledávání se přeruší a použije se výsledek z posledního zkoumání. K urychlení iterativního prohlubování napomáhá do značné míry i transpoziční tabulka Transpoziční tabulka Problematika transpoziční tabulky a její implementace je poměrně obsáhlá, proto zde budou uvedeny jen základní principy použití spolu s odkazy na literaturu. To, co se obvykle nazývá herní strom, ve skutečnosti stromem není. Jedná se o obecný orientovaný graf. Z kořene (výchozí pozice) lze leckdy nalézt takové dvě různé cesty, které povedou do stejného uzlu. Příkladem může být jednoduchá posloupnost tahů: první hráč táhne kamenem z pozice na herní desce A do pozice B, protihráč táhne z pozice C do pozice D. První hráč je opět na řadě a táhne zpět (objevila se například nová hrozba) z pozice B do C. Druhý hráč zareaguje podobně, přesune svůj kámen z D do C. Tímto opět vznikne stav, ze kterého se původně vycházelo. K omezení procházení a využití informací z již jednou ohodnocených pozic slouží transpoziční tabulka. Transpoziční tabulka si před ukončením průchodu pozicí (před návratem hodnoty ohodnocované pozice) uchová několik údajů: aktuální hloubku pozice, nejlepší tah pro pozici a ohodnocení na pozici s příznakem (viz dále). Význam ohodnocení a nejlepšího tahu pozice je zřejmý, jedná se o hodnotu propočtu pozice. Důvod pro uložení informace o hloubce pozice je ten, že v případě, kdy se jedná o výsledek prohledávání do menší hloubky než nově 16

33 Techniky zlepšující Alfa-Beta ořezávání počítané, nelze přímo vrátit uloženou hodnotu ohodnocení jako hodnotu pozice. Nutnost použití příznaku pro typ ohodnocení je komplikovanější a pochází z podstaty Alfa-Beta metody. Příznak definuje, zda uložená hodnota ohodnocení vznikla přímo ohodnocením dané pozice (skutečná hodnota), nebo při alfa či beta ořezávání a jedná se tedy o horní resp. dolní odhad tohoto ohodnocení (viz [10]). Při zkoumání každé nové pozice se nejprve ověří, zda již obsahuje o této pozici záznam v transpoziční tabulce. Pokud dojde k nalezení záznamu o pozici v tabulce, mohou nastat 2 způsoby využití: 1) Hloubka aktuální pozice je menší nebo rovna hloubce uložené při předchozím prohledávání pozice. Pro tento případ se použije hodnota ohodnocení uložené v tabulce. V případě, že příznak označuje jednu z mezí skutečné hodnoty, použije se ohodnocení k nastavení vyhledávacího okna, resp. zmenšení intervalu. Je-li příznak nastaven na skutečnou hodnotu, ohodnocení, resp. tah, který záznam v tabulce definuje, je výsledkem procházené pozice. 2) Hloubka aktuální pozice je větší než při posledním průchodu. Jak již bylo zmíněno výše, informaci o ohodnocení v tomto případě nelze použít. Načte se údaj o nejlepším tahu pro potřeby třídění tahů tah se provede jako první. Opět se využívá předpokladu, že tah dříve označený za nejlepší, bude nejlepší i při prohledávání do větší hloubky. Tato situace se často vyskytuje při iterativním prohlubování (viz kap ), kde dochází k opakovanému procházení pozic. Přirozeně, není-li v tabulce o zkoumané pozici žádný záznam, hledání pokračuje standardním způsobem použitého algoritmu. Základními operacemi nad transpoziční tabulkou jsou vložení pozice a vyhledání informace o pozici. Aby bylo možné dosáhnout co nejmenších časových ztrát při volání této funkčnosti, používá se k implementaci hash tabulka [@HASHTABLE], která provádí tyto operace s konstantní asymptotickou složitostí. Pro případ hry dvou hráčů se ke generování klíče pozice (hash funkce) využívá Zobristovy metody [12]. Konkrétní úpravy Alfa-Beta ořezávání a popis aplikace Zobristovy metody k využití transpoziční tabulky lze najít na [13], popř. [2]. 17

34 Techniky zlepšující Alfa-Beta ořezávání 5.2. Hledání klidu Algoritmus Minimax využívá jako vstupní parametr propočtu pevně stanovenou hloubku z důvodu časové náročnosti prohledávání (viz kap. 4.1). Je možné si představit situaci, kdy provedením posledního půltahu do stanovené hloubky hráč získá povýšením svého obyčejného kamene dámu. Takový stav ohodnocovací funkce ohodnotí velmi štědře vysokou hodnotou, protože kámen dámy obvykle znamená významnou převahu ve hře a pravděpodobně dojde ke zvolení tahu vedoucího k této pozici. Získání dámy však může být pouze pastí protihráče, poněvadž jeho prvním protitahem může dojít pomocí přeskoku k zisku jiných kamenů, který výhodu dámy převýší. Dochází zde ke skokové změně převahy jednotlivých hráčů. Ohrožení prvního hráče by bylo při prohledávání detekováno, pokud by došlo k prohledávání do větší hloubky, ta je však omezená. Jedná se o tzv. efekt horizontu. V případech, jako je výše uvedený, najde uplatnění technika hledání klidu (quiescence search). Technika hledání klidu spočívá v procházení tahů i za maximální nastavenou hloubku. Probírány jsou už ovšem jen takové tahy, které mohou způsobit na herní desce zvrat v převaze jednoho z hráčů. Prohledávání se snaží najít takový stav, kde nehrozí okamžitý obrat situace na herní desce pro jednoho z hráčů stav klidu. Techniku hledání klidu nelze použít ve všech hrách dvou hráčů. Ne vždy je totiž možné určit, které tahy, resp. pozice, by se měly použít k hlubšímu prohledávání (např. méně známá hra Amazons [14]). Ve hře Dáma je výběr tahů jednoduchý jedná se o přeskoky. Implementování techniky hledání klidu má poměrně výrazný pozitivní efekt na umělou inteligenci počítače, protože dojde k prozkoumávání pozic do větších hloubek, ale zároveň se neuplatní vážné časové ztráty způsobené hlubším prohledáváním, protože jsou zkoumány jen taktické pozice Hledání minimálního okna Algoritmy hledání minimálního okna představují další skupinu zlepšení a rozšíření Alfa-Beta algoritmu, které se snaží zrychlit procházení herního stromu. Podobně jako u technik třídění tahů je snahou dosáhnout minimálního nutného počtu procházených pozic pomocí ořezávání. Ořezávání však není způsobeno úsilím o ideální posloupnost tahů, ale zmenšováním vyhledávacího okna, resp. intervalu (alfa, beta), na minimum. Mezi nejznámější zástupce patří algoritmus Negascout [15] a MTD(f) [16]. 18

35 Část III Návrh a realizace Použité technologie Samotný program je poměrně rozsáhlý, proto jsou v této části popsány pouze základní komponenty a myšlenky návrhu. Hlavní popis návrhu je zaměřen na použité techniky tvorby umělé inteligence. Nemalá část textu se věnuje problematice formátu PDN a jeho využití. 6. Použité technologie 6.1. Jazyk Java Programovací objektově orientovaný jazyk Java vyvinutý firmou Sun [17] patří v současnosti mezi nejoblíbenější. Své uplatnění našel především v komerční sféře k programování serverových aplikací. Známé jsou ale i programy menšího rozsahu určené pro webové prohlížeče applety a programy pro mobilní telefony midlety. Poslední roky ovšem vzrůstá oblíbenost použití jazyka Java při vytváření desktopových aplikací. Důvody jsou především tyto: jednoduchost a robustnost jazyk Java nepoužívá obtížné konstrukce jiných jazyků (např. C++) a je snadné se ho naučit, multiplatformost snadná přenositelnost výsledného programu na libovolný operační systém, rychlost vývoje podpůrné knihovny jsou velmi rozsáhlé a významně šetří čas při vývoji. Mezi nevýhody lze zařadit pomalejší start aplikací a větší spotřebu paměti, což je dáno základem technologie jazyka Java použití virtuálního stroje a univerzálního bytekódu (viz [19]). Otázka absolutního výkonu rychlosti běhu aplikací je sporná. V současnosti jsou aplikace naprogramované v Javě ještě pomalejší než nativně kompilované aplikace, ale díky lepší správě používané paměti mohou v některých oblastech dosáhnout i vyššího výkonu (viz např. [18]). Je pravděpodobné, že s dalším vývojem budou tyto nevýhody odstraněny. 1.5). K implementaci byla využita poslední verze jazyka Java (5.0, dříve také značeno jako 19

36 Části aplikace 6.2. Java Swing Java Swing (známé též jako JFC Java Foundation Classes) je knihovna funkcí naprogramovaná v Javě určená k tvorbě uživatelského rozhraní. Tyto knihovny obsahují vše potřebné k tvorbě profesionálního uživatelského rozhraní komponenty pro práci s daty, dialogy, grafikou či obrázky. Za konkrétní zmínku stojí podpora tzv. systémových Look&Feels, což je sada funkcí, které velmi věrně emulují vzhled a chování grafického rozhraní operačního systému na kterém aplikace běží a tím zvyšují intuitivnost ovládání programu pro uživatele. Podstatnou výhodou oproti konkurenčním technologiím (např. SWT Standard Widget Toolkit [20]) je to, že knihovny jsou standardní součástí nejrozšířenější standardní distribuce J2SE (Java 2 Standard Edition, více viz [18]). Není proto nutné distribuovat knihovny Swing spolu s aplikací. 7. Části aplikace 7.1. Umělá inteligence K vytvoření umělé inteligence pro hru Dáma jsou nutné celkem tři komponenty: generátor tahů, ohodnocovací funkce, rozhodovací algoritmus. Použití komponent vyplývá z principu Minimaxové metody (viz kap. 4.1). Komponenty generátor tahů a ohodnocovací funkce jsou vždy závislé na konkrétní hře a pravidlech. Rozhodovací algoritmus, pracující na základě Minimaxové metody, tyto 2 části vždy využívá (Obr. 4). Obr. 4 Komponenty nutné k vytvoření umělé inteligence pro hru dvou hráčů 20

37 Části aplikace Nyní budou rozebrány jednotlivé komponenty podrobně Generátor tahů Generátor tahů má za úkol vytvoření seznamu všech legálních tahů na pozici pro hráče, který je na tahu. V generátoru tahů stráví počítač při hledání nejlepšího tahu pozice poměrně významné množství strojového času, proto je nutné, aby bylo generování a provádění tahů co možná nejrychlejší. Implementovat generátor tahů pro hru Dáma není obtížné, navrhnout implementaci tak, aby byla zároveň rychlá, již tak jednoduché není. Základním kamenem generátoru jsou použité datové struktury pro vnitřní reprezentaci herní deska (reprezentuje postavení kamenů) a tah hráče. Programovou implementaci generování tahů lze najít ve třídě MoveGenerator50 (více viz kap. 7.2) Datová struktura herní desky Herní deska podle pravidel Mezinárodní dámy má polí (Obr. 5). Obr. 5 Herní deska pro Mezinárodní dámu Jako datová struktura se nabízí k použití dvourozměrné statické pole prvků. Takto velké pole je však zbytečně velké, protože se (na rozdíl od šachů) hraje pouze na padesáti polích (na obrázku jsou číslována) a příliš mnoho prvků by tak zůstalo nevyužitých. K uložení stavu rozestavení kamenů tedy stačí padesát prvků a statické pole lze použít jednorozměrné. Často během hry a ke generování tahů je k informaci o rozestavění kamenů potřeba vědět, který hráč je aktuálně na tahu, proto je tento údaj uložen přímo v datové struktuře herní desky na indexu 0. Jednotlivé indexy prvků pole 1 až 50 odpovídají pozicím na herní 21

38 Části aplikace desce. Strana s hracími poli s nejmenšími indexy je přiřazena hráči černému, opačná strana je přiřazena hráči bílému (viz Obr. 5). Na herní desce se vyskytují celkem čtyři typy kamenů: bílý kámen, bílá dáma, černý kámen a černá dáma. Navíc může být pole prázdné. K rozlišení typu kamene v prvku statického pole slouží konstanty, které jsou součástí třídy Board50Consts. Bílým kamenům jsou přiřazeny kladné hodnoty a černým záporné. Tohoto nastavení se s výhodou využívá při testování přítomnosti hráčova (vlastního) kamene nebo kamene protihráče na poli herní desky (jednoduchý test na zápornost či kladnost hodnoty). Deklarace herní desky pro potřeby generátoru tahů vypadá následovně: byte board[] = new byte[board50consts.board_size]; Odborná literatura ([2]) popisuje i další možnost reprezentace herní desky zápis pozic desky na úrovni bitů. Tuto variantu jsem nezvolil. Použití by bylo nepřehledné Datová struktura tahu Struktura tahu pro hru Dáma není komplikovaná. Podobně jako pro pozici na herní desce se využije jednorozměrného pole. Pohyb kamene je vyjádřen posloupností zápisu čísel polí. Pro případ přeskoku se zaznamenávají i meziskokové pozice (potřebné pro provádění tahů). Obr. 6 Příklad obsahu datové struktury tahu Příklad na Obr. 6 demonstruje uložení přeskoku kamene. Kámen začíná na pozici 36, pokračuje skokem přes pozici 31 na 27 a dále přes pozici 32 na 38, kde tah končí. Nultý index pole popisuje délku tahu (počet zaznamenaných pozic). V tomto případě má hodnotu 3. Jednoduché tahy a jednoduché přeskoky obsahují pouze počáteční a koncovou pozici. Nultý index mají nastaven na hodnotu 2. 22

39 Části aplikace Generování tahů Generování tahů pro dané postavení na herní desce se provádí tak, že jsou procházeny postupně všechna hrací pole herní desky. Je-li nalezen kámen hráče, který je na tahu, hledají se pro něj legální tahy. Hledání je rozděleno podle typu kamene a typu tahu. Tahy se dělí na jednoduché (pouze posuny s kamenem) a přeskoky (dochází k braní protivníkových kamenů). Obyčejné kameny Nalézt jednoduché tahy obyčejného kamene je snadné. Pozice sousedních polí jsou uloženy v předem připraveném poli (MoveGenConsts.LINEAR_MOVE) a pouze se otestuje, zda pozice v testovaném směru není obsazena již jiným kamenem. Pokud je pozice prázdná, je nalezen tah. Hledání přeskoku obyčejných kamenů je komplikovanější. Postupně jsou procházeny všechny čtyři možné směry z výchozí pozice. Nejprve se ověří, že lze provést ve zkoumaném směru skok (sousední pozice obsahuje protivníkův kámen a pozice za ním je prázdná). Tím však prohledávání nekončí. Skok může podle pravidel pokračovat dále. Funkce rekurzivně zavolá sama sebe a hledání pokračuje stejným způsobem znovu od pozice meziskoku. K zabránění zacyklení se využívá jednoduchého triku přeskočené kameny se před rekurzivním zavoláním označí za vlastní. Rekurze končí a tah je nalezen, pokud již nelze pokračovat v přeskoku v žádném směru. Po návratu z rekurzivního volání se přeskočené pozici vrátí původní hodnota a testuje se případně další směr skoku. Pravidla stanovují, že jsou na dané pozici povoleny pouze nejdelší možné tahy. Tah přeskoku se přidá do seznamu nalezených, je-li jeho délka větší nebo rovna délce jiného tahu nalezeného před ním. Pokud je nově objevený tah nejdelší, je seznam nalezených tahů předem vyprázdněn. Aby se omezilo mazání a ukládání nad seznamem nalezených tahů, jsou předem zkoumány přeskoky dámy (je zde předpoklad, že délka přeskoku bude větší). Kameny dámy Řešení hledání tahů pro kameny dámy je stejné jako u obyčejných kamenů, s tím rozdílem, že je nutné testovat všechny pozice ve směru až k okraji desky. 23

40 Části aplikace Provádění tahů Součástí třídy, která implementuje generátor tahů (MoveGenerator50), je i provedení tahu nad pozicí, poněvadž se jedná o podobnou funkčnost, která používá stejné datové struktury. Provedení jednoduchého tahu je triviální. Hodnota kamene z první pozice se přesune na koncovou pozici a první pozice se označí jako prázdná. V případě obyčejných kamenů se vždy testuje, zda koncová pozice není na poslední řadě, kde dochází k povýšení obyčejného kamene na dámu. Pokud ano, dojde k povýšení. U přeskoků je přesun obdobný. Navíc je nutné odebrat přeskočené kameny. K nalezení pozic přeskočených kamenů se využívá předem vypočítané pole s konstantami sousedních pozic, podobně jako při generování tahů Ohodnocovací funkce Lze říci, že funkcionalita ohodnocovací funkce je centrálním mozkem umělé inteligence hry. Přímo určuje to, jakou úroveň bude mít počítač jako protivník proti lidskému hráči během hry. Různé implementace hry Dáma mohou mít podobný generátor tahů nebo mohou používat stejný algoritmus k procházení herních stromů. Vždy se ovšem budou lišit v ohodnocovací funkci. Popis ohodnocovací funkce je největším know-how autorů jednotlivých programů a získané skutečnosti při tvorbě ohodnocovací funkce si pečlivě chrání. Ohodnocovací funkce přiřazuje pozici hodnotu podle výhodnosti pro hráče, který je na tahu. Funkce je vždy volána v koncové pozici minimaxového herního stromu (viz kap. 4.1). Výsledek může mít vliv na další procházení stromem. Jaká by ohodnocovací funkce měla být? Především by měla být dostatečné rychlá a přesná. Přesnost odhadu udává, jak dobře předpoví případný vývoj provádění tahů z oceňované pozice zda se pro hráče jedná o cestu k vítězství nebo prohře. Výpočet ohodnocovací funkce musí být rychlý, protože je funkce často volána z procesu procházení stromu, a proto je výsledný kód počítání ohodnocení vždy kompromisem mezi rychlostí výpočtu hodnoty funkcí a prováděnou detailní analýzou odhadu pozice. V mé implementaci je hráč hrající za bílé zvolen jako maximalizující, tj. snaží se dosáhnout co největší kladné hodnoty při průchodu stromem. Přirozeně hráč hrající za černé 24

41 Části aplikace se snaží dosáhnout opaku. Tomu odpovídají i hodnoty vrácené implementovanou ohodnocovací funkcí. Hledání konkrétních hodnot pro ohodnocení je časově náročné, protože se při hledání vychází z empirického zkoumání chování počítače při hře. Poměrně špatně se posuzuje kvalita zahraného tahu z pohledu laika, který hru Dáma profesionálně nehraje. Toto byl bezesporu jistý handicap při sestavování ohodnocovací funkce. Je známo a popsáno několik způsobů, jak určit odhad hodnoty pozice (viz např. [2]). V mé implementaci byly použity dvě složky ohodnocení materiální a poziční. Celkové hodnocení tvoří suma obou složek Materiální ohodnocení Materiální ohodnocení je obecný termín pro hodnotu pozice z hlediska počtu konkrétních kamenů na pozici. Cílem hry Dáma je odstranit všechny protivníkovy kameny. Rozdíl v počtu kamenů obou hráčů udává, jak si na tom konkrétní hráč stojí. Např. bude-li na pozici 5 bílých a 10 černých kamenů, bude rozdíl počtu činit 5. Záporná hodnota značí výhodu pro černého. Každý kámen má však ve hře jinou strategickou hodnotu. Kámen dámy má jistě větší hodnotu než obyčejný kámen, proto se při součtu kamenů hledí také na jejich typ. K vyjádření této skutečnosti je nastavena hodnota bílého kamene na +2 a dámy na +9 (černému ekvivalentně 2 a 9). Kámen dámy se tak vyrovná více než čtyřem obyčejným kamenům. Při celkovém výpočtu materiálního ohodnocení bude na pozici s kameny dámy hodnota součtu výraznější (nabývat většího rozsahu hodnot) a tím pozice při průchodu stromem preferovanější (popř. spíše odmítaná, závisí na úhlu pohledu) Poziční ohodnocení Druhou složku, neméně významnou, tvoří poziční ohodnocení. Poziční ohodnocení se snaží preferovat takové pozice, na kterých se vyskytuje určité rozestavení kamenů. Kámen dámy má poměrně význačnou hodnotu během hry, proto se do celkového hodnocení započítává bonus, pokud má hráč obsazenu některou z pozic v zadní řadě (na své straně) vlastním kamenem (nerozlišuje se jakým). Tím má protihráč omezenou možnost povýšení svého obyčejného kamene na dámu. Další bonus získá, pokud jsou krajní pozice herní desky obsazeny hráčovým kamenem. Kameny na krajních pozicích jsou lépe ochráněny před braním. 25

42 Části aplikace Za každou ze zmíněných pozic získává výsledné ohodnocení navíc hodnotu +1 pro bílé, resp. 1 pro černé Realizace ohodnocovací funkce Aby nebylo nutné po každém provedeném tahu do koncové pozice (viz kap. 4.1), kde se provádí ohodnocení, procházet celou datovou strukturu herní desky a opětovně rozlišovat typy kamenů, je prováděno inkrementální počítání. Při každém provádění tahu, který je skokem, se upravuje celkový součet strategických hodnot kamenů obou hráčů podle odebíraných kamenů z herní desky. Popsaná implementace ohodnocovací funkce je součástí třídy Board (viz kap. 7.2) a vypadá následovně: public final int evaluation() { int sum = staticevaluation; //materiální ohodnocení int i = 1; do { //zadní řady if (isblack(board[i])) --sum; if (iswhite(board[45 + i])) ++sum; } while (++i < 6); i = 0; byte temp; do { //postranní pole temp = board[6 + i]; if (iswhite(temp)) ++sum; else if (temp!= Board50Consts.NOTHING) --sum; temp = board[15 + i]; if (iswhite(temp)) ++sum; else if (temp!= Board50Consts.NOTHING) --sum; i += 10; } while (i <= 20); } return sum; Rozhodovací algoritmus Ohodnocovací funkce byla přirovnána k mozku v umělé inteligenci hry Dáma. Podobně lze rozhodovací algoritmus (pracující na základě Minimaxové metody) přirovnat k rukám, které musí probrat mnoho tahů a určit ten nejvhodnější za přispění svého mozku. 26

43 Části aplikace K implementaci rozhodovacího algoritmu za účelem procházení herního stromu byla zvolena metoda Alfa-Beta ořezávání, jejíž princip byl detailně popsán a vysvětlen v kapitole 4.3. Finální implementace algoritmu je součástí třídy Thinking. Třída Thinking obsahuje veřejnou metodu findbestmove(), jejímž úkolem je vrátit co nejlepší tah pro aktuálně hrajícího hráče na dané pozici pro nastavenou úroveň hloubky prohledávání. Pro Alfa-Beta ořezávání byla použita delší varianta zápisu (viz kap ), která obsahuje samostatné privátní metody pro maximalizaci (bestmovewhite()) a minimalizaci (bestmoveblack()). Metoda findbestmove vždy podle aktuálního hráče na tahu jednu z těchto privátních metod volá. Použití delší varianty zápisu nemá na rychlost prohledávání žádný vliv, přesto oproti kratšímu zápisu má Alfa-Beta prořezávání v takové formě bezesporu nevýhodu v redundanci některých částí kódu (viz srovnání Negamax algoritmu a Minimaxové metody v kapitole 4.2). Zvolená delší varianta se přesto vyplatila, protože byla snazší na odladění. Metody bestmovewhite() a bestmoveblack() slouží k prohledávání pouze na úrovni kořene. Vybírají nejlepší tah podle ohodnocení získaného rekurzivním voláním metod pro prohledávání nižších úrovní stromu (whitesbranch() a blacksbranch()). Jedná se o rychlostní optimalizaci. Pro pozice nižší úrovně není potřeba sledovat jejich nejlepší tah, stačí pouze udržovat informace o ohodnocení pozice. Specializací metod dojde k ušetření další podmínky včetně několikerého čtení a zápisu do paměti. Obě metody jsou na nižších úrovních volány mnohokrát (řádově statisíce), proto taková optimalizace jistě své opodstatnění má. Metoda Alfa-Beta ořezávání je dobrým základem pro další vylepšování a zrychlování hledání nejlepšího tahu pro danou pozici. K dalšímu urychlení implementovaného Alfa-Beta ořezávání byly použity metody historické heuristiky a metody hledání klidu Historická heuristika V kapitole byla probrána základní myšlenka a návrh realizace historické heuristiky. Zbývá vysvětlit, jakým způsobem je v mé implementaci navržena struktura tabulky historie a prováděné operace nad ní. 27

44 Části aplikace Datová struktura tabulky historie Jak vkládání tahů způsobující ořezávání do tabulky, tak i řazení tahů, které se uskutečňuje před prováděním jednotlivých tahů v rozhodovacím algoritmu, by mělo být co možná nejrychlejší. Tomuto účelu je přizpůsobena i základní datová struktura, kterou historická heuristika používá. Jedná se o dvourozměrné pole mapující tah a váhu, která je tahu přiřazena. První index pole definuje počáteční pozici popisu tahu (posun kamene od ), druhý pak koncovou pozici tahu (posun kamene do ). Operace vyhledání nebo úprava (hodnoty) váhy tahu jsou při použití obou indexů triviální a rychlé. Nevýhodou tohoto řešení je, že samotné hodnoty počáteční a koncové pozice tahu neudávají celý průběh tahu a tedy ani nemohou definovat přesně celý tah. Může potenciálně nastat situace, kdy kratší tah bude začínat a končit na stejných pozicích jako delší tah s meziskoky (např a ) a tedy bude získávat kratší tah větší váhu neoprávněně (pokud bereme v úvahu, že kratší tah ořezávání nezpůsobil). Kdybychom tabulku tahů chtěli více zpřesnit a rozšířili bychom ji do další dimenze (další pole pro identifikaci tahu meziskok), mělo by to za následek významné zvětšení paměťové náročnosti celé tabulky a zároveň by došlo ke zpomalení operací nad tabulkou historie (viz dále). Podobně jako u případu s délkou tahu, implementovaná tabulka historie nerozlišuje, kterým kamenem se táhlo (např. existují dva tahy s pozicemi 31 27, ovšem každý se provádí jiným kamenem). V nejhorším případě nastane možnost, že se pořadí prováděných tahů přehodí, resp. dojde k posunu od ideálního pořadí tahů, které by způsobilo více ořezávání během procházení herního stromu v rozhodovacím algoritmu. Naštěstí je pravděpodobnost výskytu popsané situace velice malá, ať jde o případ s omezenou délkou popisu tahu nebo tahu se shodným popisem provedeného různými kameny. Obecně se stále jedná pouze o pomocnou heuristiku a jako taková není přesná nikdy. Nemůže nastat horší situace, než kdyby historická heuristika nebyla použita vůbec. Její výhoda, zrychlení procházení dané hloubky při omezení počtu prohledávaných pozic, ovšem převládá. Vzhledem k popsaným důvodům, se chyba překrytí tahů zanedbává. Operace nad tabulkou historie Pro potřeby rozhodovacího algoritmu je nadefinováno obecné rozhraní HistoryTable, které je následně implementováno variantou hry ve třídě HistoryTable50 a ve třídě GameStyle50 (viz kap. 7.2) je udržována její instance. 28

45 Části aplikace Třída HistoryTable50 implementuje čtyři metody, resp. operace nad tabulkou. newsearch() je volána pokaždé, když začíná nové hledání, nad novým kořenem v rozhodovacím algoritmu (metoda findbestmove() třídy Thinking). Provádí se krácení hodnot vah tahů konstantou (hodnotou 2, viz kap ). cleanup() dojde k vyprázdnění tabulky historie. Váhy jednotlivých tahů jsou nastaveny na 0. Využívá se při začátku nové partie. sortmoves() provede se třídění seznamu vygenerovaných tahů podle hodnoty váhy jednotlivého tahu. Třídí se vždy od největších hodnot k nejmenším. Výsledek je použit v rozhodovacím algoritmu při postupném provádění tahů. K třídění je interně použita metoda sort() z třídy java.util.collections, která využívá optimalizovaný algoritmus MergeSort. addcutoffmove() zvýší tahu, který způsobil ořezávání, váhu podle aktuální hloubky, v které se prohledávání v rozhodovacím algoritmu nachází. Využívá se doporučeného vzorce Hledání klidu h 2, kde h je aktuálně prohledávaná hloubka (viz kap ). Pro zlepšení kvality výběru tahů byla implementována technika hledání klidu (viz kap. 5.2). S použitím metody hledání klidu dochází, jak již bylo popsáno, k prohlubování taktických variant. Pro případ hry Dáma se jedná o pozice s přeskoky. Použití je jednoduché. Na pozici, pro které jsou vygenerovány pouze přeskoky, se neubírá hloubka, resp. dojde k prohledávání o další půltah. Další rekurzivní volání odvozené pozice v rozhodovacím algoritmu je tedy voláno se stejným parametrem hloubky Základní objektový model Snahou implementace bylo neomezit se na přesně definovaná pravidla jedné z variant hry Dáma, v tomto případě Mezinárodní dáma, ale ideálně umožnit přidání podpory i pro jiné varianty hry (viz kap. 2). Nezávislost použitého rozhodovacího algoritmu na generátoru tahů a ohodnocovací funkci (viz kap. 7.1) se pro to přímo vybízí. Konečné řešení návrhu objektového modelu v jazyce Java potenciálně umožňuje využít jeden rozhodovací algoritmus pro libovolné množství her Dáma hrajících podle různých, principiálně podobných, pravidel. Sada vytvořených rozhraní neslouží pouze pro 29

46 Části aplikace účely rozhodovacího algoritmu, ale jsou zároveň využívány v rámci celé aplikace např. vykreslování herní desky, práci s daty během ukládání či otevírání partie atp. Základním cílem při návrhu bylo oddělit generátor tahů a ohodnocovací funkci od jejich používání v aplikaci, neboť jsou tyto části závislé na konkrétních pravidlech varianty hry. Výhody zapouzdření jsou zřejmé. Každá z variant hry si může definovat datové struktury, konstanty a metody takové, které jsou pro ni optimální, přesto se vůči vnějším třídám jeví jako uniformní varianta Dámy. K tomuto účelu je naprogramována skupina rozhraní, které předepisují základní společné metody pro všechny varianty hry Dáma. Rozhraní pro popis varianty hry jsou součástí balíku net.damaq.gamestyle.interfaces. K zapouzdření základních datových struktur herní desky a tahu slouží rozhraní Board a Move. Definované rozhraní Board zahrnuje přístup k informacím o rozložení kamenů na herní desce. Součástí je i metoda ohodnocovací funkce (evaluation()), poněvadž se přímo váže k pozici, kterou Board představuje. Mezi další metody patří i generování a provádění tahů nad pozicí. Objekty odvozené od Board interně využívají vlastní generátor tahů, což je třída implementující rozhraní MoveGenerator. Podobně jako Board, Move umožňuje přístup k zapouzdřené datové struktuře tahu. Rozhraní GameStyle popisuje detaily týkající se varianty hry (informace nutné k uložení či načtení partie, test remízy apod.), obsahuje také metody, které vrací nové instance objektů implementujících rozhraní Board a Move dle specifických hodnot parametrů. Varianta Mezinárodní dámy využívá výše zmíněných rozhraní. Třídy implementující rozhraní jsou umístěny v balíku net.damaq.gamestyle.international. Názvy tříd jsou odvozeny od rozhraní, které implementují tedy Board50, Move50 atd. Hodnota 50 je jen čistě jmennou konvencí a symbolizuje počet hracích polí desky pro Mezinárodní dámu. V balíku jsou i další pomocné třídy, ke kterým nelze přistupovat mimo balík a slouží především k interním potřebám rozložení kódu (třídy Board50Consts, MoveGenConsts a další). Ke správě jednotlivých variant her byla naprogramována třída GameStyleFactory, která má za úkol vytvářet a udržovat optimálně instance tříd implementujících základní rozhraní GameStyle. 30

47 Části aplikace Obr. 7 UML diagram s návrhem základních tříd a rozhraní Na Obr. 7 lze s využitím UML diagramu pozorovat celkové vzájemné propojení a závislost mezi některými rozhraními a třídami, které je implementují. Z obrázku je patrné, že třídy GameStyle50 ani Board50 neimplementují svá rozhraní přímo, ale jsou potomky abstraktních tříd AbstractGameStyle a AbstractBoard. Abstraktní třídy 31

48 Části aplikace AbstractGameStyle a AbstractBoard implementují některé ze základních metod např. hashcode() či equals() ale i dalších, které mohou být společné pro potomky implementující rozhraní varianty hry. Použitý objektový model se velice osvědčil. Nejenže umožňuje v budoucnu přidat podporu i pro další varianty hry Dáma, ale výrazně zpřehlednil výsledný programový kód a tím urychlil vývoj celé aplikace Formát PDN Pro možnost ukládání a pozdějšího opětovného načtení rozehrané partie bylo třeba zvolit vhodný formát uložení dat. Nejvhodnější volbou se ukázal být univerzální textový formát k výměně a archivaci her mezi různými programy realizující hru Dáma formát PDN (Portable Draughts Notation). Tento datový formát navrhl Adrian Millett pro svůj program Sage PDN je odvozeno od známějšího PGN (Portable Game Notation) formátu pro šachové partie. PGN formát byl upraven pro možné použití hry Dáma s podporou různých pravidel této hry. PDN má několik výhod. Předně je to jistá rozšířenost tohoto formátu mezi ostatními pokročilými programy. Dále pak textový zápis umožňuje uživateli, aby si mohl sám snadno soubor přenášet, vytvářet, editovat či zobrazovat v textovém prohlížeči, když nemá možnost použít speciální, k tomu určenou, aplikaci. Struktura souboru PDN navíc dovoluje přenášet i více partií najednou. Nevýhodou se ukázal být velmi volně navržený popis tohoto formátu. Ačkoli je formát PGN definován relativně velmi formálně a přesně (viz [24]), specifikace, tak jak ji popsal Millett, definuje PDN jen ve velmi hrubých obrysech a není formální vůbec. Zejména nedefinuje, které sekce (viz dále) jsou povinné a které nikoliv, popř. jaké výchozí hodnoty mají být použity. PGN pro šachy definuje 7 základních povinných sekcí. Uvedené příklady v návrhu PDN však některé ani neobsahovaly. Toto vedlo k tomu, že různí autoři různých dámových programů si vyložili některé nepřesně definované části zápisu PDN dle svého uvážení nebo si přidávali své vlastní sekce a tím zhoršili možnou přenositelnost. Problém přenositelnosti a problematičnosti vytváření podpory PDN si již někteří lidé uvědomovali a tak byla navržena v roce 2003 oficiální formální specifikace formátu PDN verze 2.0 [22] (v současné době je dokument specifikace označen jako draft 0.1), která se snaží odstranit zmíněné nedostatky a přidává popis i některých nových vlastností. Bohužel tato specifikace se příliš neujala. Na Internetu prakticky nelze najít aplikaci, která by ji plně 32

49 Části aplikace přijala. Důvody mohly být rozličné. Některé z význačných aplikací přestaly být vyvíjeny před tímto návrhem (např. Dam 2.2) nebo se lze domnívat, že autoři již nejspíše nepovažovali za potřebné tento upravený nový zápis podporovat. Nedokonalostí tohoto popisu je taktéž nulová podpora jiných pravidel zápisů Dámy (bere v úvahu jen číselné zápisy tahů a pozic). Nepříjemné může být také vyžadování znakového kódování ISO (známý též jako Latin1), které by omezovalo například češtinu v dokumentu. Za další pokus o formální specifikaci lze považovat článek na Wikipedii [23], který se snaží doplnit původní Milletův popis podrobněji. Oproti PDN v2.0 nepřidává žádné nové sekce či značky označující sílu tahu. Tato verze je, dle mého zjištění, určitým průřezem mezi tím, co by formát měl obsahovat a zároveň se snaží o zpětnou kompatibilitu. Přesto však ani tento popis nelze považovat za dokonalý. Obsahuje i některé odlišnosti, při jejichž použití by formát nebyl čitelný ve starších, přesto velmi rozšířených a používaných programech. Právě z podstaty současného psaní článků na Wikipedii vyplývá, že kdokoli notaci může změnit a tak se pravděpodobně stalo, že popis obsahuje například i definici jednořádkového komentáře ;. Takovýto komentář není nikde jinde zmíněn (v žádných jiných výše zmíněných popisech) a prakticky všechny dosavadní existující programy by skončily při čtení souboru s chybovou hláškou. Z těchto důvodů jsem si musel uvedený popis na Wikipedii upravit. Cílem těchto drobných změn (zejména popis obsahu některých sekcí) bylo zavedení podpory pro konkurenční programy pro hru dáma Dragon, Turbo Dambase či Dam. Níže uvedený popis, který ve většině případů vychází ze zmíněného článku na Wikipedii a z části formální specifikace PDN v2.0, popisuje zvolenou variantu, která je potřebná pro sestavení gramatiky umožňující načtení a zpracování souboru Datová struktura formátu PDN Jak již bylo řečeno v předchozím odstavci, PDN je textový formát. Stavba formátu byla zvolena jako velice benevolentní z důvodu zachování zpětné kompatibility s jinými programy. Toto je například důvod pro bližší nespecifikování pevné volby kódovací stránky pro znaky. Za výchozí kódování se tak bere v úvahu lokální uživatelské nastavení operačního systému. V úvahu může přijít i programová implementace, která by mohla uživateli dovolit volbu kódové stránky načítaného souboru. Záznam partie se skládá ze 3 hlavních částí: 1) Hlavička obsahuje sekce popisující deklaraci nové partie a nesoucí základní informaci o startovní pozici, místu a datu konání hry. 33

50 Části aplikace 2) Provedené tahy seznam provedených tahů v rámci partie. 3) Ukončovací příznak oddělovač indikující konec zápisu partie a možnost pokračování zápisu partie další. Podrobnější popis struktury těchto jednotlivých částí následuje v dalších odstavcích Hlavička popis sekcí Definice sekce začíná znakem [, následuje název sekce, mezera a poté hodnota sekce, definovaná v uvozovkách. Definice je zakončena znakem ]. Sekce jsou vzájemně odděleny některým alespoň jedním z tzv. bílých znaků (znak konce řádky, mezera, tabulátor a některé další). Názvy sekcí nerozlišují malá a velká písmena a nezáleží na jejich pořadí. Má implementace vyžaduje akceptaci osmi základních sekcí. Pro použití je aplikace schopná akceptovat i jiné názvy a obsahy sekcí než níže uvedené. Základní sekce Event název mistrovství nebo turnaje, kde se partie odehrála Site místo konání události obsah sekce není přesně dán. Doporučený formát pro hodnotu této sekce je zápis Město, region/stát, ZEMĚ, kde ZEMĚ je 3znakový kód definovaný Mezinárodní olympijskou komisí IOC (International Olympic Committee), tedy například Los Angeles, CA, USA. Date datum započetí hry. Formát data by měl odpovídat tvaru RRRR.MM.DD. Doplnění otazníky?? je možné použít v případě neznámé hodnoty např. konkrétního dne konání. Neznámé datum hry pak bude vypadat jako????.??.??. Round číslo kola White popisuje hráče hrajícího za bílé. Doporučený formát je Příjmení, Jméno, popř. pouze s iniciály křestního jména Příjmení, J. Black popisuje hráče hrajícího za černé. Hodnota je definována stejně jako v předchozí sekci Gametype definuje hrací variantu (pravidla) dámy toto je nutné z důvodu např. různě velkých herních desek pro hru Dámu. Struktura obsahu sekce vypadá takto: [GameType "Type-number [,Start-color (W/B),Board-width, Board-height, Notation [,Invert-flag]]"] 34

51 Části aplikace Type-number číselná hodnota označující pravidla hry. Např. pro označení varianty Mezinárodní dáma platí hodnota 20. Konkrétní číslo pro daná pravidla lze najít v návrhu PDN [21]. Tato hodnota je v sekci GameType povinná Start-color určuje, která ze stran je při počáteční hře na tahu. Možné hodnoty jsou W (White bílá) nebo B (Black černá) Board-width šířka herní desky, resp. šachovnice (počet sloupců) na které se hraje hraje Board-height výška herní desky, resp. šachovnice (počet řádek) na které se Notation rozlišení notace zápisu polohy polí resp. tahů na herní desce. Hodnota se skládá ze 2 částí. Způsob zápisu: A alfanumerický zápis, N numerický zápis, S krátký šachový zápis SAN (Standard Algebraic Notation). hru: Hodnota pozice určující polohu čtverce A1 nebo 1 na herní desce pro stranu začínající 0 vlevo dole, 1 vpravo dole, 2 vlevo nahoře, 3 vpravo nahoře. Invert-flag vyjadřuje odstín barvy čtverců na kterých se hraje. Možné hodnoty jsou: 0 hraje se na tmavých polích, 1 hraje se na bílých polích. Například použití GameType pro Mezinárodní dámu může vypadat takto: 35

52 Části aplikace [GameType "20"] [GameType "20,W,10,10,N2,0"] {krátký způsob zápisu} {dlouhý způsob zápisu} Result sekce označuje výsledek partie. Možné hodnoty jsou: 1-0 vyhrávají bílé, 0-1 vyhrávají černé, 1/2-1/2 remíza, * hra nebyla ukončena. Další volitelné sekce FEN Tato sekce by se měla vyskytovat v hlavičce v případě, že hra nezačala z počátečního postavení kamenů pro daná pravidla dámy. Hodnota určuje rozestavení kamenů, od kterého se začíná. Struktura zápisu sekce FEN vypadá takto: [FEN "[Turn]:[Color1][[K][Square-number][,]...]:[Color2][[K][Squarenumber][,]... [.]] "] Turn určuje, která ze stran je aktuálně na tahu možné hodnoty jsou W (White bílá) nebo B (Black černá) Color1, Color2 nastavuje, pro kterou stranu jsou následně generovány popisy pozic kamenů. Možné hodnoty jsou W (White bílá) nebo B (Black černá). K nepovinná část před Square-Number je-li K uvedeno, tak to určuje, že na dané pozici se vyskytuje dáma, jinak se jedná o obyčejný kámen. Square-number stanovuje pozici, na které je umístěn kámen. V případě numerického zápisu definovaného v GameType je tato hodnota vymezena hodnotami <1, počet hracích polí>. Celkový počet hracích polí je dán pravidly, resp. herní deskou, na které se hraje. Definuje-li GameType alfanumerický zápis hodnoty pozic, tak pozice začínají na souřadnicích a1 (sloupec, řádek). Konkrétní vymezení rozsahu souřadnic je opět dáno pravidly hry. Případný popis této notace lze najít ve specifikaci PGN [24]. Příklady použití FEN: 36

53 Části aplikace [FEN "B:W18,24,27,28,K10,K15:B12,16,20,K22,K25,K29."] [FEN "B:W18,19,21,23,24,26,29,30,31,32:B1,2,3,4,6,7,9,10,11,12."] [FEN "W:Wa1,Kb3:Bc7,a6."] Je nutno upozornit na poslední znak v obsahu sekce FEN a tedy tečku, ukončující zápis pozic. Tento prakticky zbytečný znak se v zápisu objevuje i v původním návrhu PDN a mnohé programy tuto skutečnost přijaly za vlastní. Bez tohoto znaku odmítnou FEN zpracovat. Spolu s definicí této sekce bývá ve starších programech definována i sekce SetUp, která určovala hodnotou 1 či 0, zda se má sekce FEN použít (hodnota 1) či nikoliv (hodnota 0). Specifikace PDN v2.0 tuto sekci vcelku rozumně vypouští (nač definovat FEN, když nebude později použit) Provedené tahy Tato volitelná část zápisu partie definuje seznam dosud provedených tahů obou hráčů. Struktura zápisu tahu je následující: Zápis začíná číslem pořadí dvojice půltahů (tedy tahu). Číslování je prováděno inkrementačně od 1. Číslo je zakončeno tečkou. Následují 2 půltahy bílého a černého (v tomto pořadí) oddělené bílým znakem nebo komentářem. Přirozeně, pokud černý netáhl jako odpověď na bílého v posledním tahu, tak jeho půltah není na konci výpisu uveden. Speciálním stavem je, pokud hru začíná černý. V tomto případě je půltah bílého nahrazen znaky.... Popis půltahu má tuto formu: jednoduchý tah Start-field Separator End-Field, zkrácený nebo jednoduchý skok Start-field Separator End-field, složený skok Start-field [Separator Field] Separator Endfield. Start-field označuje počáteční a End-Field koncovou pozici tahu na herní desce. Pro jednoduché tahy je znak Separator - a pro skoky je to znak x. Field pro složené skoky určuje meziskoková pole. Jednotlivé části mohou být odděleny bílým znakem. Příklady půltahů: jednoduchý tah 3 17 popř. f1 c4, 37

54 Části aplikace zkrácený nebo jednoduchý skok 9x22 popř. f1xc4, složený skok 43x23x12 popř. h7xf5xd3. Konkrétní způsob zápisu pole na herní desce je dáno specifikací v sekci GameType Ukončovací příznak Tato sekvence znaků následuje bezprostředně za seznamem provedených tahů a slouží jako identifikátor konce zápisu partie. Hodnota tohoto oddělovače je stejná jako hodnota v sekci Result pro daný zápis partie. Není-li ukončovací příznak shodný s hodnotou sekce Result, parser označuje tento stav jako chybu Komentáře Komentář začíná znakem {. Následuje obsah komentáře. Komentář se bere jako neukončený dokud znakem obsahu není znak }. Komentáře mohou být umístěny kdekoliv mezi hlavními částmi partie, sekcemi nebo zápisem jednotlivých (půl)tahů. Není dovoleno vkládat komentář uprostřed (v těle) zápisu (půl)tahu Příklady zápisu partie Následující příklad PDN souboru názorně demonstruje celkové použití PDN. 38

55 Části aplikace [Event "Golden Prague"] [Site "Prague"] [Date " "] [Round "1"] [GameType "20"] {Mezinárodní dáma} [White "Hoogteijling, Peter"] [Black "Malis, Petr"] [Result "1-0"] x x x18 12x x x x x19 14x x x x x11 6x x x x x31{!} x13 8x x x x x x x x [Event "Mistrovství ČR-finále A"] [Site "Praha"] [Date " ??"] [Round "1"] [GameType "29"] {Česká dáma} [White "Sysel, J."] [Black "Bolban, M."] [Result "1-0"] 1. a3-d4 {zajímavý tah} d6-c5{zajímavá reakce}2. g3-f4 e7-d6 3. f2-g3 f6-g5 4. b2-c3 b6-a5 5. d4xb6 a7xc5 6. g3-h4 f8-e7 7. h4xf6 e7xg5 8. c3- d4 c7-b6 9. d4-e5 g7-f6 10. e5xc7 {a nyní útok} b8xd6 {protitah} 11. d2- c3 g5-h4 12. c1-b2 h8-g7 13. c3-b4 a5xc3 14. b2xd4 f6-g5 15. d4-e5 b6-a5 16. e5xc7 d8xb6 17. a1-b2 a5-b4 18. f4-e5 g5-f4 19. e3xg5 h6xf4 20. e1- f2 h4-g3 21. f2xh4 b4-c3 22. b2xd4 c5xe3 23. h4-g5 g7-h6 24. g5-f6 e3-d2 25. f6-e7 d2-e1 26. e7-d8 e1-a5 27. d8-g5 f4-g3 28. h2xf4 a5-c3 29. g5- d8 c3xh8 30. d8xa5 h8-d4 31. a5-e1 d4-f6 32. g1-h2 f6-d4 33. a3-b4 d4-f6 34. f4-g5 1-0 [Event "Test Demo"] [Site "Praha, CZE"] [White "Damaq 0.86"] [Black "Damaq 0.86"] [Round "1"] [Date " "] [GameType "20"] [SetUp "1"] [FEN "B:W30,31,32,33,35,k37,38,39:B1,2,3,4,5,6,7,8,9,10,11,12,k13,14,15,24."] [Result "*"] x x19 * 39

56 Části aplikace Další příklady coby historii mnoha zahraných partií při různých turnajích je možné nalézt na Internetu (například na [3]). Je však potřeba upozornit, že ne všechny záznamy je možné v naprogramované implementaci přečíst (otevírání souboru skončí s chybou) a to z důvodu porušení kompatibility popsaného formátu od autorů (resp. aplikací) zaznamenávajících partie Analýza PDN pro čtení ze souboru Analýza souboru PDN je založena na lexikálním a syntaktickém analyzátoru, vytvoření vnitřní reprezentace, kontrole její správnosti. Prvním krokem návrhu analyzátoru je identifikace lexikálních elementů v PDN a sestavení gramatiky odpovídající struktuře formátu Gramatika PDN Strukturu vstupního souboru lze popsat pomocí následující jednoduché bezkontextové gramatiky se startovním symbolem PDNDocument. 1) PDNDocument Game PDNDocument 2) PDNDocument ε 3) Game Sections Moves End 4) Sections left_bracket ident value right_bracket Comment NextSection 5) NextSection Sections 6) NextSection ε 7) Moves Move Moves 8) Moves ε 9) Move numberwithdot WhiteMove BlackMove 10) WhiteMove dots Comment 11) WhiteMove Position MovePart 12) BlackMove Position MovePart 13) BlackMove ε 14) MovePart dash Position Comment 15) MovePart jump Position Jumps Comment 40

57 Části aplikace 16) Jumps jump Position Jumps 17) Jumps ε 18) Position number 19) Position coords 20) Comment comment Comment 21) Comment ε 22) End draw 23) End white_wins 24) End black_wins 25) End undecided Gramatika bere v úvahu jak numerické zápisy tahů tak i zápis pomocí souřadnic, nebere však v úvahu zápis SAN (viz kap ). Možnost zápisu SAN nepodporuje a je omezením PDN gramatiky. Použití SAN notace zápisu je v dámových hrách prakticky nulové a je jen v podstatě doménou šachu. Podporu pro SAN lze brát jako významnou až pro případné nové programy (hry). Součástí PDN gramatiky také není podpora validace obsahu sekcí. Tato část úkolu je přenesena do sémantické analýzy Lexikální analýza Lexikální analyzátor čte prostřednictvím vstupního systému posloupnost znaků tvořící zdrojový program a transformuje ji na posloupnost lexikálních symbolů, které jsou terminálními symboly pro syntaktickou analýzu. Některé terminální symboly v gramatice mají odpovídající reprezentaci ve formátu PDN. Význam terminálních symbolů je uveden v následující tabulce (Tab. 1). 41

58 Části aplikace Terminální symbol Reprezentace ve formátu PDN left_bracket [ right_bracket ] ident identifikátor(název sekce) řetězec začínající písmenem value hodnota obsahu sekce comment hodnota komentáře dash - dots... numberwithdot číslo následováno tečkou coords souřadnice number číslo jump x white_wins 1-0 black_wins 0-1 draw 1/2-1/2 undecided * Tab. 1 Reprezentace terminálních symbolů gramatiky ve formátu PDN Lexikální analyzátor lze založit na konečném automatu. Návrh automatu zde uveden není. Jeho struktura je velmi jednoduchá a prakticky shodná pro jakoukoli bezkontextovou gramatiku resp. lexikální symboly Syntaktická analýza Pro sestrojení syntaktického analyzátoru je nejprve nutné zjistit, o jaký typ bezkontextové gramatiky se jedná. Proto ověříme, zda gramatika obsahuje konflikty FIRST- FIRST nebo FIRST-FOLLOW. 42

59 Části aplikace Pravidlo FIRST FOLLOW 1 PDNDocument Game left_bracket PDNDocument ε 2 PDNDocument ε ε 3 Game Sections Moves End left_bracket 4 Sections left_bracket ident value right_bracket Comment NextSection left_bracket 5 NextSection Sections left_bracket draw, white_wins, 6 NextSection ε ε black_wins, undecided, numberwithdot 7 Moves Move Moves numberwithdot draw, white_wins, 8 Moves ε ε black_wins, undecided 9 Move numberwithdot WhiteMove BlackMove numberwithdot 10 WhiteMove dots Comment dots 11 WhiteMove Position MovePart number, coords 12 BlackMove Position MovePart number, coords draw, white_wins, 13 BlackMove ε ε black_wins, undecided, numberwithdot 14 MovePart dash Position Comment dash 15 MovePart jump Position Jumps jump Comment 16 Jumps jump Position Jumps jump 17 Jumps ε ε 18 Position number number 19 Position coords coords 20 Comment comment Comment comment 21 Comment ε ε 22 End draw draw 23 End white_wins white_wins 24 End black_win black_win 25 End undecided undecided Tab. 2 Výpočet množin FIRST a FOLLOW pro PDN gramatiku comment, draw, white_wins, black_wins, undecided, number, coords, numberwithdot draw, white_wins, black_wins, undecided, left_bracket, number, coords, numberwithdot Z tabulky Tab. 2 je patrné, že gramatika neobsahuje žádné konflikty FIRST-FIRST ani FIRST-FOLLOW a jedná se tedy o jednoduchou LL(1) gramatiku. Analýzu je tedy možné provést metodou rekurzivního sestupu pomocí následující rozkladové tabulky (v tabulce Tab. 3 jsou uvedena čísla pravidel, podle kterých se provádí expanze). 43

60 Části aplikace draw white_wins black_wins undecided dots dash jump number coords left_bracket comment numberwd ε PDNDocument 1 2 Game 3 Sections 4 NextSection Moves Move 9 WhiteMove BlackMove MovePart Jumps Position Comment End Tab. 3 Tabulka rozkladu pro PDN gramatiku Na základě těchto informací již lze bez problému naprogramovat jak lexikální tak syntaktický analyzátor Programová realizace PDN Vlastní realizaci podpory čtení formátu PDN je věnován prakticky celý balík net.damaq.pdn aplikace. Obsah se skládá z několika logických součástí, které přibližně odpovídají jednotlivým krokům konverze textového souboru do objektové hierarchie. V průběhu implementace bylo počítáno i s možností dalšího samostatného využití kódu pro podporu formátu PDN. Z toho důvodu je kód napsán tak, aby bylo možné jej s minimem úprav převést na samostatnou knihovnu tříd (takovou knihovnu je pak možné volně distribuovat na Internetu a kdokoli ji může využít i v jiných programech k přidání podpory čtení formátu PDN) Lexikální analýza Prvním krokem převodu je lexikální analýza. Lexikální analyzátor je založen na konečném automatu, který již byl zmíněn v části o analýze problému (viz kap ). Tento analyzátor je implementován ve třídě PDNLexAn a vrací pro syntaktický analyzátor jeden z lexikálních symbolů definovaných výčtovým typem LexSymbol. 44

61 Části aplikace Pro optimální načítání dat ze souboru je použita třída java.util.scanner, která při vstupně výstupních operacích pracuje s vyrovnávací pamětí. Dále pro potřeby lexikálního analyzátoru je simulována metoda readcharacter() načítající (vracející) jeden znak ze vstupního proudu. V případě, že analyzátor zjistí lexikální chybu ve vstupním souboru, generuje výjimku LexException, která je zachycena a zpracována vyšší vrstvou aplikace. V případě výskytu chyby je možné získat doplňující informace o pozici v souboru, na které chyba nastala Syntaktická analýza Druhou vrstvou načítací části aplikace tvoří syntaktický analyzátor. Analyzátor pracuje na základě metody rekurzivního sestupu, k čemuž používá LL(1) gramatiku a rozkladovou tabulku uvedenou v kapitole zabývající se analýzou PDN (viz kap ). K reprezentaci jednotlivých partií slouží objekty třídy PDNGame. Třída PDNGame obsahuje všechny potřebné vlastnosti a metody pro plnohodnotnou reprezentaci partie v paměti počítače. Analogicky k formátu PDN využívá seznamu tříd PDNMove a všech potomků třídy PDNSection. Podobně jako lexikální analyzátor i analyzátor syntaktický generuje výjimku v případě, že dojde při zpracování vstupních dat k logické chybě, v tomto případě SyntException. Syntaktický analyzátor odhalí špatně strukturovaný vstupní soubor. Neumožní však odhalit chyby vzniklé z důvodu neplatného obsahu sekcí toto je součástí sémantické analýzy Sémantická analýza Sémantická analýza tvoří třetí vrstvu podpory načítání PDN a jejím úkolem je odhalit chyby v logice provedených tahů a obsahu sekcí (zejména sekcí FEN a Result, viz kap ). Poněvadž gramatika přímo nepodporuje validaci sekcí, je toto zajištěno testem pomocí relativně jednoduchého regulárního výrazu v každém objektu reprezentujícím povinně definovanou sekci. Příkladem může být regulární výraz pro hodnotu sekce GameType (popis struktury obsahu viz 7.3.1), která je reprezentována třídou PDNGameType: ^[0-9]?[0-9](,(B W),[0-9]?[0-9],[0-9]?[0-9],(A N S)( ),(0 1))?$ Veškeré chyby vzniklé selháním validace hodnot sekcí regulárním výrazem jsou interně signalizovány výjimkou InvalidStructureFormatException a informace o chybě je předána uživateli přes uživatelské rozhraní. 45

62 Části aplikace Další ověřovanou částí je podpora načtené partie z hlediska aktuální podpory různých variant v Dámě. Implementace třídy GameStyleFactory obsahuje metody (konkrétně getsupportedgamestyle()) pro ověření, zda je daná varianta partie akceptovatelná pro použití v aplikaci. Ačkoli je partie formálně korektně načtena, nepodporovanou variantu Dámy není možné v aplikaci otevřít. Kontrola existence podpory varianty a správnosti posloupnosti provedených tahů se provádí až po konkrétním zvolení partie uživatelem (v přehledu načtených partií ze souboru, viz ), aby tak toto nezpomalovalo celkové načítání všech partií ze souboru Uživatelské rozhraní načtené partie z PDN souboru Poslední vrstvou při načítání tvoří dialog, na kterém jsou zobrazeny načtené partie ze zvoleného PDN souboru pro uživatele (viz Obr. 17 přílohy). V dialogu si uživatel může zvolit libovolnou partii k přehrání. 46

63 Úroveň umělé inteligence Část IV Testování umělé inteligence 8. Úroveň umělé inteligence 8.1. Obtížnost hry Obtížnost hry je logicky odvozena od nastavení hloubky (resp. počtu půltahů) prohledávání v rozhodovacím algoritmu (viz kap ). Čím hlouběji dojde k prohledání a ohodnocení možných odvozených pozic z výchozí pozice, tím přesněji je počítač schopen naplánovat obranu nebo útok při hře s lidským protihráčem. Čas nutný k výběru tahu během hry závisí na dvou hlavních faktorech. Hloubce prohledávání a pozicích, které jsou prohledávány. Rozestavení a typ kamenů na pozici přímo určuje šířku prohledávaného stromu. V mé implementaci byly naprogramovány celkem čtyři možné úrovně obtížnosti, kde každá má přiřazenu jinou hloubku pro prohledávání: začátečník úroveň hloubky prohledávání 1, pokročilý úroveň hloubky prohledávání 5, mistr úroveň hloubky prohledávání 6, velmistr úroveň hloubky prohledávání 7. Nastavení hloubky prohledávání je odstupňováno podle odhadované obtížnosti. Hloubka prohledávání podle nastavení však nemusí být konečná z důvodu použití techniky hledání klidu (viz kap. 5.2). Technika hledání klidu potenciálně může zvýšit hloubku prohledávání a tím prodlouží i dobu samotného hledání nejvhodnějšího tahu počítače pro danou pozici Porovnání algoritmů prohledávání herního stromu Pro ověření správnosti implementace metod prohledávání herního stromu byly zvoleny dvě metody měření. Měření počtu prohledávaných pozic (Tab. 4) a měření času vykonávání testované metody (Tab. 5). Měření byla provedena pro dvě různá rozmístění kamenů na herní desce, pro základní rozestavení hry a náhodně zvolené rozestavení hry, a to z důvodu lepší analýzy a interpretace naměřených hodnot. Postupně proběhla měření pro 47

64 Úroveň umělé inteligence všechny metody na čtyřech úrovní obtížnosti hry (viz výše kap. 8.1). Technika hledání klidu nebyla použita z důvodu zachování konstantní hloubky prohledávání (viz kap. 5.2). Všechna měření byla prováděna na počítači s procesorem PIII Celeron 1Ghz, 512MB paměti a Java Runtime Environment verze 1.5. Naměřené hodnoty jsou uvedeny v následujících tabulkách a pro snadnější srovnání jsou pod sebou uvedené hodnoty pro obě rozestavení hry: Metoda prohledávání Hloubka prohledávání [počet pozic] Minimaxová metoda Alfa-Beta metoda Alfa-Beta metoda statické třídění Alfa-Beta metoda historická heuristika Tab. 4 Počet prohledávaných pozic herního stromu s danou hloubkou a metodou Z tabulky počtu prohledávaných pozic herního stromu je patrné, že závislost počtu prohledávaných pozic na hloubce prohledávaní je exponenciální. Výjimkou je hloubka prohledávání 1, kde se počty prohledávaných pozic neliší, protože se zde neuplatní výhody metod vylepšujících Minimaxovou metodu. Porovnáme-li počet pozic pro jednotlivé implementace procházení herních stromů, zjistíme, že pro kteroukoliv hloubku prohledávání počet prohledávaných pozic klesá. Předpoklad zmenšení počtu prohledávaných pozic je tedy ověřen. Metoda prohledávání Hloubka prohledávání [ms] Minimaxová metoda Alfa-Beta metoda Alfa-Beta metoda statické třídění Alfa-Beta metoda historická heuristika Tab. 5 Čas potřebný k prohledání herního stromu s danou hloubkou a metodou 48

65 Úroveň umělé inteligence Data v tabulce naměřených hodnot času potřebných k prohledávání herního stromu (Tab. 5) vykazují stejné závislosti jako je tomu u tabulky počtu prohledávaných pozic. Čas pro prohledání pozic roste s hloubkou prohledávání exponenciálně. Porovnáme-li hodnoty naměřených časů mezi jednotlivými metodami, zjistíme, že doba potřebná k prohledávání herního stromu klesá. Výjimkou jsou data času potřebného k prohledávání stromu naměřená pro metodu Alfa-Beta se statickým tříděním tahů, kde je z naměřených dat patrné, že je tato metoda pomalejší než původní metoda Alfa-Beta samotná. Je to dáno tím, že časová ztráta způsobená prováděním jednotlivých tahů s následným ohodnocením pozic před tříděním je větší než doba ušetřená při procházení menšího počtu pozic. Důvod časové ztráty u této metody může být dán neoptimálními paměťovými operacemi provádění tahu. Výsledkem analýzy naměřených dat je, že ze všech testovaných implementovaných metod, je pro prohledávání herního stromu nejvhodnější použití algoritmu Alfa-Beta společně s historickou heuristikou Zkušenosti hráčů ze hry K ověření obtížnosti hry a úrovně umělé inteligence bylo vyzváno několik hráčů (uživatelů) k otestování aplikace. Hráči byli vybráni na základě jejich zkušeností s hrou Dáma tak, aby skupina uživatelů obsahovala hráče s nejmenšími (žádnými) zkušenostmi až po hráče s velkými zkušenostmi (účastníka turnajů). Hráči dostali instrukci sehrát pět partií na obtížnosti dle svého uvážení. Následující tabulka (Tab. 6) shrnuje výsledky hry Dáma mezi hráčem a počítačem na různých stupních obtížnosti. Uživatel Úroveň Úroveň obtížnosti ve hře zkušeností Začátečník Pokročilý Mistr Velmistr Hráč 1 žádné 2/2 0/3 Hráč 2 malé 1/1 2/4 Hráč 3 malé 1/1 3/3 0/1 Hráč 4 velké 3/3 1/2 Hráč 5 účastník turnajů 1/1 4/4 Tab. 6 Odehrané partie hráčů testujících aplikaci V tabulce jsou uvedeny hodnoty počtu vyhraných partií ku počtu odehraných partií pro danou úroveň obtížnosti. Na základě sebraných dat byla provedena analýza. Z tabulky lze vyvodit tyto závěry: 49

66 Úroveň umělé inteligence nastavení nejnižší úrovně obtížnosti (začátečník) splnilo svůj účel úroveň není náročná ani pro hráče bez zkušeností, hra ho neodradí od dalšího hraní, se základními zkušenostmi (úroveň zkušeností malé) je možné partii vyhrát bez větších potíží na úroveň pokročilý, což by odpovídalo předpokladu, že hráč, jenž hru Dáma někdy hrál, je schopen na tuto úroveň umělou inteligenci počítače porazit, hráč s velkými zkušenostmi (úroveň zkušeností velké) poráží umělou inteligenci počítače na vyšší úrovně obtížnosti, což by odpovídalo amatérskému hráči s profesionální úrovní hry, při určité úrovni zkušeností (účastník turnajů) je možné umělou inteligenci počítače vždy bez problému porazit. 50

67 Zhodnocení Část V Závěr 9. Zhodnocení Cílem této bakalářské práce bylo vytvořit aplikaci s umělou inteligencí počítače pro hraní deskové hry Dáma, což se podařilo beze zbytku splnit. Algoritmus pro umělou inteligenci obsahuje jak funkční implementaci metody ořezávání herního stromu, tak i další heuristiky na ohodnocení pozice. Podstatná část práce byla věnována návrhu algoritmu pro procházení pozic a jejich ohodnocování. Jako první metoda procházení pozic herního stromu byla implementována Minimaxová metoda, která je základní a nejjednodušší metodou výběru nejvhodnějšího tahu počítače pro danou pozici. Aplikace byla po této implementační fázi testována a dle očekávání nebyla rychlost vyhodnocování tahů vzhledem k velkému množství procházených pozic dostatečná. Došlo proto k úpravě Minimaxové metody na metodu Alfa-Beta a výsledná varianta aplikace byla opět podrobena dalším testům. Díky principům Alfa-Beta metody došlo k omezení počtu prohledávaných pozic stromu a tím k celkovému zrychlení hledání nejvhodnějšího tahu. Dalšího zrychlení Alfa-Beta metody bylo dosaženo použitím heuristiky. Z dvojice statické třídění a historická heuristika byla zvolena historická heuristika, která se významně osvědčila. Pro výslednou variantu funkce hodnotící jednotlivé tahy byla použita heuristika materiálního a pozičního ohodnocování. Na základě testování bylo zjištěno, že umělou inteligenci na středních úrovní obtížnosti není snadné porazit, zejména pro méně zkušené hráče. Nejobtížnější úroveň hry poráží pouze velmi zkušený hráč. Nedílnou součástí aplikace je i podpora formátu PDN, jehož popisu se tato práce věnuje jako jedna z prvních. Formát PDN umožňuje jednoduchý záznam nebo načtení partie Dámy, popř. výměnu záznamu partie s ostatními aplikacemi hry Dáma podporující kompatibilní verzi formátu. Výsledná aplikace byla hodnocena uživateli, kteří ji shledali kvalitní nejen co do funkcí a volitelné obtížnosti hry, ale i díky volitelným vzhledům také po stránce vizuální. 51

68 Náměty pro budoucí práci 10. Náměty pro budoucí práci Oblast umělé inteligence má málokdy jednoznačná nejlepší řešení a je možné ji neustále sledovat a promítat výsledky výzkumů i do praktických aplikací. Souběžně s pokroky v teoretické oblasti stoupá i výkon počítačů, dochází k rozvoji mobilních zařízení a jejich vzájemnému propojení některou z komunikačních sítí. Pro budoucí vylepšení programu vytvořeného v rámci této bakalářské práce je možné navrhnout následující: využití dalších technik zrychlování Alfa-Beta ořezávání (např. transpoziční tabulky, iterativní prohlubování) a tedy zlepšení úrovně umělé inteligence počítače při hře, možnost hry po síti, podpora dalších variant pravidel hry Dáma (Česká dáma, Španělská dáma aj.), podpora integrované databáze pro archivaci zahraných partií, podpora výukového módu, který by sloužil k výuce hraní Dámy pro začátečníky, zlepšení celkového uživatelského komfortu přidáním různých volitelných nastavení uživatelského rozhraní. Lze uvažovat i o využití snadné přenositelnosti kódu jazyka Java a provést tak portaci aplikace na mobilní zařízení. 52

69 Literatura Literatura [1] D. Steinwender, F. Friedel: Šachy na PC Přel. Z. Petruželka. 1. vyd. Unis Publishing, Brno 1996 [2] J. Schaeffer: The History Heuristic and Alpha-Beta Search Enhancements in Practice. in: IEEE Transactions on Pattern Analysis and Machine Intelligence 11, 11, 1989 Internetové odkazy [3] Česká federace dámy [4] Programming a Computer for Playing Chess [5] Game theory [6] Game tree [7] Extensive form game [8] The number of possible positions in international draughts [9] Game Tree Searching and pruning [10] Programming topics The main transposition table [11] Hash table [12] Programming topics Zobrist keys 53

70 Literatura [13] Strategy Game Programming Advanced Techniques [14] The Game of the Amazons [15] Negascout [16] MTD(f) A Minimax Algorithm faster than NegaScout [17] Java Technology [18] Co možná (ne)víte o Javě [19] The Java Virtual Machine Specification [20] SWT: The Standard Widget Toolkit [21] Adrian Millet: Portable Draughts Notation [22] PDN 2.0 Specification [23] Portable Draughts Notation [24] Portable Game Notation 54

71 Seznam použitých zkratek A Seznam použitých zkratek FEN IOC J2SE JFC PDN PGN SAN SWT UML Forsyth-Edwards Notation International Olympic Committee Java 2 Standard Edition Java Foundation Classes Portable Draughts Notation Portable Game Notation Standard Algebraic Notation Standard Widget Toolkit Unified Modeling Language 55

72 Stručná pravidla Mezinárodní dámy B Stručná pravidla Mezinárodní dámy Pravidla dle České federace dámy [3] použitá pro implementovanou aplikaci: Hraje se na desce 10 10, na každé straně 20 kamenů ve 4 řadách na černých polích. Kameny se táhne po diagonálách, vždy jen o jedno pole dopředu. Skáče se dopředu i dozadu, hráč přenese svůj kámen na konečné pole skoku, naznačuje přitom průběh skákání a až poté odstraní přeskočené kameny z desky. Přes jeden kámen lze skákat jen jednou. Skákání je povinné. Přednost má ten skok, kterým se přeskakuje větší množství soupeřových kamenů. Dokončí-li kámen tah na poslední řadě (bílý na polích 1 5, černý na polích 46 50), mění se v dámu. Dáma se pohybuje po diagonálách dopředu i dozadu, může skákat přes libovolný kámen na diagonále a dokončit skok na kterémkoli poli za přeskočeným kamenem. Dáma nemá při skákání přednost. Partii vyhrává hráč, jehož soupeř nemá tah podle pravidel, tzn., že nemá již žádné kameny, nebo jsou jeho kameny zablokovány, nebo se vzdal. Partie skončí nerozhodně dohodou hráčů, nebo když se vyskytne 3x stejná pozice. 56

73 Instalační příručka C Instalační příručka C.1 Systémové požadavky Doporučená konfigurace: MS Windows 9x/2000/XP /Linux(core 2.4)/MacOS 9 nebo novější, Pentium 500MHz procesor nebo novější, 35 MB volné paměti RAM, 5 MB volného místa na disku, rozlišení obrazovky alespoň bodů, Java 2 platforma verze alespoň 1.5 nebo novější. Poznámka: Aplikace byla testována pouze na operačním systému MS Windows. Lze však očekávat, že na ostatních operačních systémech s podporou pro prostředí Java platformy poběží aplikace taktéž bez problémů. C.2 Instalace prostředí Java Pro běh aplikace je nutné mít nainstalováno prostředí ke spuštění aplikací napsaných v jazyku Java J2SE (Java 2 Standard Edition). Instalaci prostředí je možné vynechat, jestliže je v OS již přítomna verze alespoň 1.5 (nebo novější). V opačném případě je zapotřebí prostředí před spuštěním aplikace nainstalovat. Instalační soubor prostředí pro OS MS Windows se nachází na přiloženém CD v adresáři /install/java, pro jiné operační systémy je nutné instalační soubor získat na [17]. řídit. Instalace prostředí probíhá pomocí jednoduchého průvodce, jehož pokyny se stačí Na OS Linux je třeba zaregistrovat cestu k binárním souborům prostředí v souboru /etc/bashrc. 57

74 Instalační příručka C.3 Spuštění aplikace Spustitelná verze aplikace se nachází na přiloženém CD v adresáři exe/damaq-1.0.zip. Soubor s aplikací je třeba zkopírovat a rozbalit pomocí archivačního programu podporujícího ZIP kompresi do libovolného adresáře na pevném disku. K usnadnění spuštění aplikace byly vytvořeny pomocné dávky (aplikace), které se nacházejí v adresáři aplikace. Volba spouštěcí dávky se může lišit podle použitého operačního systému: MS Windows aplikaci lze spustit příkazem pro spuštění souboru damaq.exe, Unixové (Linux) systémy aplikaci lze spustit příkazem pro spuštění dávkového souboru./launch.sh. Pro jakýkoli podporovaný operační systém lze také využít příkazu java -jar damaq.jar. 58

75 Uživatelská příručka D Uživatelská příručka Příručka popisuje funkce dostupné v implementované aplikaci a jejich ovládání. D.1 Obecné Aplikace Damaq slouží k hraní deskové hry Dáma podle Mezinárodních pravidel. Pravidla hry lze nalézt v příloze B. Aplikace podporuje jak hru s počítačem, tak i hru dvou lidských hráčů. Hra obsahuje i zvuky, které lze případně vypnout v uživatelském nastavení (viz D.7). Prostředí aplikace podporuje více jazyků, obsahuje podporu pro jazyk český a anglický. Při prvním spuštění je detekováno jazykové nastavení uživatele v operačním systému a jazykové nastavení aplikace se automaticky nastaví. Není-li detekováno české jazykové nastavení uživatelského prostředí operačního systému, je automaticky při prvním spuštění zvolen jazyk anglický. Jazykové nastavení lze v aplikaci kdykoliv později změnit (viz D.7). D.1.1 Hlavní obrazovka Skladba hlavní obrazovky je následující (viz Obr. 8): Hlavní menu obsahuje hlavní funkce pro ovládání aplikace. Tlačítková lišta obsahuje tlačítka pro rychlé vyvolání funkcí hlavního menu. Herní deska popisuje aktuální rozestavení kamenů během partie. Nástroje jedná se volitelné nástroje, plovoucí okna, pro analýzu pozice a informace o partii. Stavový řádek obsahuje informační pole k zjištění aktuálního stavu partie. 59

76 Uživatelská příručka Hlavní menu Tlačítková lišta Nástroje Herní deska Stavový řádek D.2 Funkce hlavního menu Obr. 8 Hlavní obrazovka aplikace Hlavní menu je rozděleno do sedmi hlavních částí (menu). Některé z pokročilých funkcí menu jsou dále popsány v samostatných odstavcích. D.2.1 Menu Hra Menu obsahuje funkce pro práci s partií a funkci pro ukončení aplikace. Popis funkcí: Nová Spustí novou partii. Po spuštění nové partie jsou automaticky nastaveni hráči za bílé hraje hráč (člověk), za černé hraje počítač. Otevřít funkce vyvolá dialog pro otevření souboru ve formátu PDN a umožní tak načíst uloženou partii. Funkci Otevřít je věnován samostatný odstavec (viz D.6.3). Uložit jako funkce vyvolá dialog pro uložení partie do souboru ve formátu PDN nebo ve formě HTML stránky s odkazem na Java applet. 60

77 Uživatelská příručka Poslední soubory menu zobrazuje několik naposledy otevřených souborů. Poklepáním na jméno souboru dojde k otevření souboru, podobně jako po zvolení souboru pomocí funkce Otevřít. Počet takto zobrazených souborů lze nastavit v uživatelském nastavení (viz D.7). Konec vyvoláním této funkce dojde k ukončení aplikace. D.2.2 Menu Tah Menu obsahuje funkce sloužící k nastavení hráčů na tahu a ovládání historie zahraných tahů. Popis funkcí: Zpět funkce vyvolá navrácení do pozice o jeden tah zpět a vznikne tím předchozí pozice. Tahy, které byly provedeny zpět jsou v nástroji Hra (viz D.3.2) zašedlé. Upozornění: Je-li v pozici na tahu počítač, po dvou vteřinách začne táhnout. Pro vyvolání o dva tahy zpět je nutné funkci zavolat dvakrát. Opakovat provedený funkce vyvolá provedení tahu, který byl před tím brán zpět. Provede se první zašedlý tah z nástroje Hra. Počítač Počítač obě strany hry budou zastupovány počítačem, počítač bude hrát sám proti sobě. Hráč Počítač za stranu na tahu bude hrát hráč. Jeho protihráčem bude počítač. Hráč Hráč spustí hru dvou hráčů. Počítač na tahu počítač bude hrát za stranu, která je aktuálně na tahu. Hráč na tahu lidský hráč bude hrát za stranu, která je aktuálně na tahu. D.2.3 Menu Obtížnost V tomto menu si lze nastavit úroveň obtížnosti hraní proti počítači. Vyšší obtížnost zvyšuje dobu čekání na tah počítače. Nastavení obtížnosti se projeví až se započetím výpočtu nového tahu (až bude počítač opětovně na tahu). Popis funkcí: Začátečník velmi jednoduchá úroveň. Pokročilý středně obtížná úroveň. 61

78 Uživatelská příručka Mistr obtížná úroveň. Velmistr velmi obtížná úroveň. D.2.4 Menu Herní deska desce. Níže uvedené funkce se vztahují k aktuálnímu rozestavení kamenů a polím na herní Popis funkcí: Číslování zapne nebo vypne zobrazení čísel na hracích polích. Hodnoty jsou pro Mezinárodní dámu od 1 do 50. Hodnota 1 je uvedena v levém horním rohu herní desky (strana černého hráče). Otočená zapne nebo vypne zobrazení herní desky z pohledu protihráče (otočení o 180 ). Velikost tato funkce je určena zejména pro obrazovky s vyšším rozlišením. Umožňuje uživateli nastavit velikost herní desky v několika úrovních: malá odpovídá 75% normální velikosti, normální odpovídá 100% velikosti herní desky dle aktivního skinu (viz. D.7), velká odpovídá 125% normální velikosti, velmi velká odpovídá 150% normální velikosti. Schránka obsah herní desky lze číst a přenášet nebo měnit prostřednictvím schránky operačního systému. Možnosti jsou následující: vložit FEN ze schránky op. systému je získán notace zápisu FEN a dle ní je upraven obsah herní desky. Vložením dojde k přechodu aplikace do editorského módu (viz D.3.3), kopírovat jako FEN do schránky op. systému bude vložena notace zápisu obsahu pozice FEN, kopírovat jako text do schránky op. systému bude vložen zápis obsahu herní desky ve formě obyčejného textu (ASCII znaků). Jednotlivou interpretaci kamenů si lze zvolit v uživatelském nastavení (viz D.7), 62

79 Uživatelská příručka kopírovat jako obrázek do schránky op. systému bude vložen zápis obsahu herní desky ve formě rastrového černobílého obrázku (náhled), kopírovat jako DamPragueFont do schránky op. systému bude vložen zápis obsahu herní desky ve formě textu ve fontu DamPragueFont. Font DamPragueFont je distribuován spolu s aplikací (v adresáři Fonts aplikace) a je nutné si ho volitelně pro používání nainstalovat do fontů používaných op. systémem. D.2.5 Menu Nástroje Menu obsahuje obecné funkce k ovládání nástrojů sloužící k analýze pozice a získání informací o partii. Jednotlivé nástroje a jejich funkce jsou popsány v kapitole D.3. D.2.6 Menu Zobrazit Funkce menu umožňují uživateli přizpůsobit si vzhled hlavní obrazovky. Popis funkcí: Tlačítková lišta zapíná nebo vypíná zobrazení tlačítkové lišty Stavový řádek zapíná nebo vypíná zobrazení stavového řádku D.2.7 Menu Damaq Menu obsahuje obecné funkce vztahující se k aplikaci. Popis funkcí: Nápověda zobrazí nápovědu aplikace v HTML ve výchozím webovém prohlížeči operačního systému. Jazyk obsahuje seznam dostupných jazykových mutací pro aplikaci Damaq. Změna výběru jazyka je oznámena uživateli informačním dialogem. Pro aplikování nového jazykového nastavení je nutné aplikaci znovu spustit. Kontrola nové verze zobrazí dialog s informacemi o nastavení síťového připojení a který umožní ověření existence nové verze aplikace přes Internet (více viz D.8) O programu zobrazí dialog s detailními informacemi o verzi aplikace. 63

80 Uživatelská příručka D.3 Nástroje Nástroje jsou pomocná okna umístěna v rámci hlavního okna, která umožňují uživateli analýzu partie a sledování informací o partii hry. S otevřenými okny lze libovolně pohybovat a lze je kdykoliv opětovně zavřít. Každé okno se skládá z hlavní části a pomocné tlačítkové lišty (toolbar). Pomocí funkcí (tlačítek) na tlačítkové liště lze změnit zobrazená data v hlavní části, popř. nastavení nástroje či partie. D.3.1 Nástroj Možné tahy Nástroj lze vyvolat z menu Nástroje Možné tahy. Okno (Obr. 9) obsahuje seznam všech dostupných (legálních) tahů pro danou pozici a hráče, který je aktuálně na tahu. Je-li na tahu hráč (člověk), lze poklepáním v seznamu tahů provést vybraný tah. Obr. 9 Nástroj Možné tahy Zobrazení tahu lze dále upravit pomocí funkcí v tlačítkové liště: Dlouhé zobrazení tahů je-li funkce zapnuta, seznam zobrazuje tahy i s informací o přeskoku (např. 28x19x13, nikoliv krátká varianta 28x13), Zobrazit ekvivalentní tahy je-li funkce zapnuta, seznam zobrazuje tahy, které jsou ekvivalentní (tahy u kterých se mění jen pořadí přeskoku, např. 32x21x12x23x32 a 32x23x12x21x32). 64

81 Uživatelská příručka D.3.2 Nástroj Hra Nástroj lze vyvolat z menu Nástroje Hra. Okno (viz Obr. 10) obsahuje popis partie (kdo, kdy s kým hrál), seznam provedených tahů partie obou hráčů a tlačítka pro posouvání v historii obsahu pozic na herní desce. Popis partie (hry) lze libovolně měnit a upravovat. Obsah popisu partie je na zvážení uživatele. Popis partie Komentář tahu Historie provedených tahů Tlačítka k ovládání historie tahů Obr. 10 Nástroj Hra Historie provedených tahů obsahuje jednotlivé tahy obou hráčů. V historii tahů lze libovolně skákat pomocí levého tlačítka myši poklepáním na libovolný tah (pozici). Tahy provedené v historii zpět jsou zašedlé. Poslední pole v historii tahů vždy udává aktuální výsledek partie (0 1 výhra černých, 1 0 výhra bílých, * nedohráno, ½ ½ remíza). Ke každému tahu lze vložit komentář (poklepáním na editační pole vedle tahu). Tlačítka k ovládání historie tahů umožňují rychlý výběr pozice partie z historie tahů (skok na pozici první, předcházející, následující, poslední). Zobrazení panelů v okně lze dále upravit pomocí funkcí v tlačítkové liště: Zobrazit/skrýt popis hry je-li funkce zapnuta, je zobrazen popis partie, Dlouhé zobrazení tahů je-li funkce zapnuta, seznam zobrazuje tahy i s informací o přeskoku (např. 28x19x13, nikoliv krátká varianta 28x13), 65

82 Uživatelská příručka zobrazit/skrýt komentáře je-li funkce zapnuta, jsou zobrazeny komentáře tahů. D.3.3 Nástroj Editor Nástroj lze vyvolat z menu Nástroje Editor Editační mód. Aktivací tohoto nástroje (viz Obr. 11) přechází partie do tzv. editačního módu, ve kterém není možné zadávat tahy na herní desce, ale dochází k nastavování kamenů na hracích polích desky. Editační mód lze kdykoliv ukončit zavřením nástroje. Volba kamene pro editaci Obr. 11 Nástroj Editor Editovat pole na herní desce lze pomocí myši. Levým tlačítkem myši se nastavuje kámen (zvolený v okně nástroje). Pravým tlačítkem myši dochází k vymazání obsahu hracího pole na herní desce. Tlačítková lišta nástroje obsahuje následující funkce: Nastavit startovní pozici na hrací desce bude nastavena výchozí pozice podle pravidel hry, Odstranit všechny kameny odstranění všech hracích kamenů z herní desky, Bílý na tahu/černý na tahu nastaví stranu, která má být aktuálně na tahu, Obnovit pozici před editací nastaví původní rozmístění kamenů před vstupem do editačního módu. D.3.4 Nástroj Hodiny Nástroj lze vyvolat z menu Nástroje Editor Zobrazit. Okno (viz Obr. 12) zobrazuje uplynulý čas partie. Horní řada panelů zobrazuje celkový uplynulý čas přemyšlením pro bílého, resp. černého hráče. Dolní řada zobrazuje strávený čas na aktuální, resp. poslední tah (závisí podle toho, kdo je aktuálně na tahu). 66

83 Uživatelská příručka Celkový uplynulý čas bílého hráče Celkový uplynulý čas černého Uplynulý čas na aktuální tah bílého hráče Obr. 12 Nástroj Hodiny Uplynulý čas na poslední tah K ovládání hodin slouží pomocné funkce v tlačítkové liště: Spustit hodiny spustí čas pro hráče, který je na tahu, Zastavit hodiny zastaví počítání uplynulého času, Vynulovat hodiny nastaví uplynulé časy na 0, zároveň dojde k zastavení běhu hodin, Nastavit hodiny zobrazí dialog pro nastavení uplynulého času pro oba hráče. D.4 Herní deska a zadávání tahu Herní deska slouží k zobrazení aktuálního rozestavení kamenů ve hře. K herní desce se vážou další funkce, které jsou umístěny v hlavním menu (viz D.2.4). S herní deskou lze pohybovat táhnutím při stisku levého tlačítko myši na okraji desky. Editaci pozice lze provádět pomocí nástroje Editor (viz D.3.3). Zadávání tahu je velice jednoduché, ovládá se pomocí levého tlačítka myši. Začíná volbou vlastního kamene hráče, kterým lze podle pravidel pohybovat (táhnout). Zvolená pozice je vždy barevně označena čtvercem (viz Obr. 13). Při kliknutí na kámen, kterým nelze pohybovat, je uživatel upozorněn změnou kurzoru a zvukovým signálem. Na herní desce se po zvolení počáteční pozice ukazují možné varianty pokračování tahu, pozice lze vybírat kliknutím. Celkový tah je zadán postupným výběrem tahu až do koncové pozice. Pro přehlednost jsou pole meziskoku tahu od koncových polí tahu barevně rozlišeny. Zadávání tahu pro zvolený kámen lze kdykoliv přerušit kliknutím na původní kámen nebo libovolný jiný vlastní, kterým lze také táhnout. 67

84 Uživatelská příručka Koncová pozice tahu Označené meziskokové pole Zvolený kámen k táhnutí Obr. 13 Zadávání tahu Další možný způsob zadání tahu je pomocí nástroje Možné tahy (viz D.3.1). D.5 Stavový řádek Stavový řádek zobrazuje aktuální informace o stavu partie a nastavení kláves Num Lock a Caps Lock. Význam jednotlivých informačních polí stavového řádku nejlépe ilustruje následující obrázek: Strana na tahu Poměr kamenů na desce bílého a černého hráče Stav kláves Caps Lock a Num Lock Hráč na tahu Obr. 14 Stavový řádek Indikace zapnutých hodin Indikace probíhání hledání tahu počítače Hodnoty ve stavovém řádku jsou obnovovány automaticky. D.6 Uložení a načtení rozehrané partie Aplikace Damaq umožňuje uložit a načíst rozehranou partii ve formátu PDN. Dále je možné vyexportovat partii i jako HTML stránku s odkazem na Java applet. 68

85 Uživatelská příručka Formát PDN (Portable Draughts Notation) slouží k výměně uložených partií mezi různými aplikacemi hry Dáma. PDN soubory mohou obsahovat jednu nebo více zaznamenaných partií. Partie jsou zaznamenány v textové podobě. D.6.1 Uložení partie do formátu PDN K uložení partie v tomto formátu stačí vyvolat funkci hlavního menu Hra - Uložit jako, která zobrazí. dialog k výběru cesty a názvu souboru pro zápis. V dialogu je nutné vybrat typ souboru Portable Draughts Notation soubory (*.pdn). Po potvrzení a zavření dialogu je zobrazen dialog popisu vlastností PDN partie (Obr. 15). Obr. 15 Dialog uložení partie do PDN souboru V dialogu je možné popsat detailní informace o partii (událost, místo konání partie, jména obou hráčů, datum, kolo, výsledek partie). Zaškrtnutím Připojit na konec souboru lze určit, zda se má zaznamenávaná partie připojit na konec již existujícího souboru PDN. Pokud nebude volba zaškrtnuta, stávající soubor bude přepsán a bude obsahovat pouze aktuálně ukládanou partii. Možnost zaškrtnutí není povolena, pokud je vytvářen nový soubor. Uložení partie do souboru proběhne po stisku tlačítka Uložit. Tlačítkem Storno je možné celý proces ukládání zrušit. Úspěšné provedení akce uložení souboru je oznámeno informačním dialogem. 69

86 Uživatelská příručka D.6.2 Uložení partie jako odkaz na Java applet K uložení partie v tomto formátu stačí vyvolat funkci hlavního menu Hra - Uložit jako, která zobrazí dialog k výběru cesty a názvu souboru pro zápis. V dialogu je nutné vybrat typ souboru Damweb.nl applet (*.html,*.htm). Stiskem tlačítka Uložit dojde k vytvoření HTML souboru. Úspěšné provedení akce uložení souboru je oznámeno informačním dialogem. Uloženou HTML stránku lze otevřít v libovolném internetovém prohlížeči. Spuštěný applet v HTML stránce může vypadat podobně jako na Obr. 16. Obr. 16 Přehrávání partie v Java appletu D.6.3 Načtení partie ze souboru formátu PDN K načtení partie ze souboru je třeba zvolit funkci hlavního menu Hra Otevřít, dále je nutné vybrat soubor ve formátu PDN a stisknout tlačítko Otevřít. Následně je otevřen dialog načtených partií daného souboru PDN (Obr. 17). 70

87 Uživatelská příručka Obr. 17 Dialog načtených partií z PDN souboru Uživatel má v tabulce možnost vybrat si kteroukoli z načtených partií pro přehrání či vlastní analýzu strategie. K výběru partie kromě standardních informací o partii z PDN může pomoci i podpora třídění podle sloupců v tabulce nebo možnost náhledu na herní desku partie (jak ve stadiu startovní, tak i koncové pozice). Pro přehled jsou uvedeny tahy otevírající hru. Stiskem tlačítka Otevřít v dialogu je možné načíst celou partii a hrát od poslední pozice partie (popř. od jakékoliv pozice při skoku na libovolnou pozici historie partie pomocí nástroje Hra). D.7 Uživatelská nastavení K zvýšení uživatelského komfortu slouží volby v dialogu uživatelských nastavení. Ten lze otevřít funkcí z hlavního menu Damaq Nastavení. Dialog (viz Obr. 18) je rozdělen na čtyři záložky, mezi nimiž lze přepínat pomocí tlačítek na levé straně (Obecné, Vzhled, Export, Různé). Hlavní část obsahuje možné volby nastavení aplikace. 71

88 Uživatelská příručka Volby nastavení Tlačítka pro přepínání záložek Obr. 18 Dialog uživatelských nastavení Změnu volby nastavení lze aplikovat stiskem tlačítka Použít. Změny se projeví okamžitě (pokud to volba podporuje). Aplikovat změny lze také stiskem tlačítka OK s tím rozdílem, že po aplikaci změn dojde k zavření dialogu. Stiskem tlačítka Zavřít dojde k zavření dialogu a k zrušení neaplikovaných změn voleb nastavení. D.7.1 Obecná nastavení Záložka Obecné obsahuje tyto volby: Ukládat velikost a polohu oken pokud je volba vybrána, aplikace si ukládá vždy poslední pozici a velikost všech oken (hlavní okno, herní deska, nástroje). Při znovuotevření okna je poslední pozice s velikostí obnovena, Povolit pouze jednu instanci pokud je volba vybrána, nelze spustit více než jednu instanci aplikace. Při pokusu o spuštění další instance bude aktivována aktuálně běžící, Automaticky kontrolovat nové verze pokud je volba vybrána, dochází k ověřování nové verze aplikace vždy automaticky po spuštění na pozadí aplikace, Žádat o schválení nové hry pokud je volba vybrána, je po uživateli vyžadováno potvrzení pro spuštění nové hry (partie), Žádat o potvrzení při ukončení programu pokud je volba vybrána, je po uživateli vyžadováno potvrzení pro ukončení programu, 72

89 Uživatelská příručka Informovat při úspěšném uložení souboru pokud je volba vybrána, je uživatel informován dialogem o proběhnutém úspěšném uložení souboru na disk, Počet naposledy použitých souborů volba udává maximální počet zobrazených odkazů na posledně načítané soubory v menu Hra Poslední soubory (viz D.2.1). D.7.2 Nastavení vzhledu Záložka obecné obsahuje tyto volby: Look&Feel uživatel si může vybrat z dostupných globálních vzhledů aplikace. Po výběru a potvrzení je nutné aplikaci restartovat, Skin uživatel si může vybrat z několika dostupných vzhledů herní desky a pozadí okna, Zobrazit tlačítkové lišty pro nástroje pokud je volba vybrána, jsou zobrazeny tlačítkové lišty v oknech nástrojů, Okraj dle Look&Feel pokud je volba vybrána, jsou vykreslovány graficky i okraje oken podle aktuálně nastaveného Look&Feel (nikoliv okraje okna operačního systému). Pro aplikaci volby je vyžadován restart aplikace. D.7.3 Nastavení exportu do schránky Vstupní textová pole umožňují nastavit textovou reprezentaci kamenů a polí pro export pozice herní desky do schránky operačního systému (viz D.2.4). Tlačítkem Výchozí lze obnovit původní textovou reprezentaci kamenů a polí dle továrního nastavení. D.7.4 Různá nastavení Otevřít PDN obsahující pouze jednu hru okamžitě pokud je volba vybrána a otevíraný soubor PDN obsahuje záznam pouze jedné partie, tak je partie načítána ihned bez zobrazení dialogu načtených partií (viz D.6.3), Kódování pro PDN soubory volba kódovací stránky pro načítání a ukládání PDN souborů, Zvuky pokud je volba vybrána, aplikace přehrává při hře zvuky. 73

90 Uživatelská příručka D.8 Ověření nové verze Pokud má počítač, na kterém je program spuštěn, dostupné připojení na Internet, je možné snadno ověřit existenci nové verze programu. Volbou menu Damaq Kontrola nové verze dojde k zobrazení dialogu nastavení internetového připojení (Obr. 19). Obr. 19 Dialog nastavení připojení a kontrola nové verze V dialogu je možné případně nastavit detaily připojení adresu serveru proxy a port, popř. uživatelské jméno s heslem pro přihlášení. Poznámka: ukládání hesla není bezpečné, heslo je na disku uloženo v nezašifrované podobě. Stiskem tlačítka Ověřit dojde k připojení na Internet a ověření. O výsledku kontroly nové verze je uživatel informován prostřednictvím informačního dialogu. 74

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

Hry a UI historie. von Neumann, 1944 algoritmy perfektní hry Zuse, Wiener, Shannon, přibližné vyhodnocování Hry a UI historie Hry vs. Prohledávání stavového prostoru Hry a UI historie Babbage, 1846 počítač porovnává přínos různých herních tahů von Neumann, 1944 algoritmy perfektní hry Zuse, Wiener, Shannon,

Více

Algoritmy pro hraní tahových her

Algoritmy pro hraní tahových her Algoritmy pro hraní tahových her Klasické deskové hry pro dva hráče: Šachy Dáma Go Piškvorky Reversi Oba hráči mají úplnou znalost pozice (na rozdíl např. od Pokeru). 1 Základní princip Hraní tahových

Více

Dokumentace programu piskvorek

Dokumentace programu piskvorek Dokumentace programu piskvorek Zápočtového programu z Programování II PRM045 Ondřej Vostal 20. září 2011, Letní semestr, 2010/2011 1 Stručné zadání Napsat textovou hru piškvorky se soupeřem s umělou inteligencí.

Více

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

2. Řešení úloh hraní her Hraní her (Teorie a algoritmy hraní her) Hraní her (Teorie a algoritmy hraní her) 4. 3. 2015 2-1 Hraní her pro dva a více hráčů Počítač je při hraní jakékoli hry: silný v komplikovaných situacích s množstvím kombinací, má obrovskou znalost zahájení

Více

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

Hraní her. (Teorie a algoritmy hraní her) Řešení úloh hraní her. Václav Matoušek / Hraní her (Teorie a algoritmy hraní her) 8. 3. 2019 2-1 Hraní her pro dva a více hráčů Počítač je při hraní jakékoli hry: silný v komplikovaných situacích s množstvím kombinací, má obrovskou znalost zahájení

Více

Základy umělé inteligence

Základy umělé inteligence Základy umělé inteligence Hraní her (pro 2 hráče) Základy umělé inteligence - hraní her. Vlasta Radová, ZČU, katedra kybernetiky 1 Hraní her (pro dva hráče) Hraní her je přirozeně spjato s metodami prohledávání

Více

2. úkol MI-PAA. Jan Jůna (junajan) 3.11.2013

2. úkol MI-PAA. Jan Jůna (junajan) 3.11.2013 2. úkol MI-PAA Jan Jůna (junajan) 3.11.2013 Specifikaci úlohy Problém batohu je jedním z nejjednodušších NP-těžkých problémů. V literatuře najdeme množství jeho variant, které mají obecně různé nároky

Více

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

Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1 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í

Více

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem ČVUT FEL X36PAA - Problémy a algoritmy 3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem Jméno: Marek Handl Datum: 1. 1. 2009 Cvičení: Pondělí 9:00 Zadání Naprogramujte

Více

Základy umělé inteligence

Základy umělé inteligence Základy umělé inteligence Automatické řešení úloh Základy umělé inteligence - prohledávání. Vlasta Radová, ZČU, katedra kybernetiky 1 Formalizace úlohy UI chápe řešení úloh jako proces hledání řešení v

Více

UNIVERZITA PARDUBICE

UNIVERZITA PARDUBICE UNIVERZITA PARDUBICE Fakulta elektrotechniky a informatiky Programová realizace jednoduché strategické hry Květoslav Čáp Bakalářská práce 2010 Prohlášení autora Prohlašuji, že jsem tuto práci vypracoval

Více

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

Alfa-beta algoritmus pro umělou inteligenci hry šachy České vysoké učení technické v Praze Fakulta elektrotechnická Bakalářská práce Alfa-beta algoritmus pro umělou inteligenci hry šachy Josef Suchý Vedoucí práce: Ing. Adam Sporka Studijní program: Elektrotechnika

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Grafové úlohy Daniela Szturcová Tento

Více

Teorie her a ekonomické rozhodování. 4. Hry v rozvinutém tvaru

Teorie her a ekonomické rozhodování. 4. Hry v rozvinutém tvaru Teorie her a ekonomické rozhodování 4. Hry v rozvinutém tvaru 4.1 Hry v rozvinutém tvaru Hra v normálním tvaru hráči provedou jediné rozhodnutí a to všichni najednou v rozvinutém tvaru řada po sobě následujících

Více

Úvodem... 9 Kapitola 1 Karetních

Úvodem... 9 Kapitola 1 Karetních Úvodem... 9 Základní znalosti o programovacích jazycích...10 Jazyk C# a platforma.net...10 Visual C# 2010 Express...11 Instalace platformy.net 4.0 a Visual C# 2010 Express...11 Zdrojový kód aplikací...12

Více

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

Počítačové šachy. Otakar Trunda Počítačové šachy Otakar Trunda Hraní her obecně Hra je definovaná pomocí: Počáteční situace Funkce vracející množinu přípustných tahů v každé situaci Ohodnocení koncových stavů Našim cílem je najít strategii

Více

Dijkstrův algoritmus

Dijkstrův algoritmus Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované

Více

Varianty Monte Carlo Tree Search

Varianty Monte Carlo Tree Search Varianty Monte Carlo Tree Search tomas.kuca@matfyz.cz Herní algoritmy MFF UK Praha 2011 Témata O čem bude přednáška? Monte Carlo Tree Search od her podobných Go (bez Go) k vzdálenějším rozdíly a rozšíření

Více

Metoda Monte Carlo a její aplikace v problematice oceňování technologií. Manuál k programu

Metoda Monte Carlo a její aplikace v problematice oceňování technologií. Manuál k programu Metoda Monte Carlo a její aplikace v problematice oceňování technologií Manuál k programu This software was created under the state subsidy of the Czech Republic within the research and development project

Více

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

Anotace. Středník II!! 7. 5. 2010 programování her. Anotace Středník II!! 7. 5. 2010 programování her. Teorie her Kombinatorická hra je hrou dvou hráčů. Stav hry je určen pozicí nějakých předmětů. Všechny zúčastněné předměty jsou viditelné. Jde o tzv. hru

Více

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

Prohledávání do šířky a do hloubky. Jan Hnilica Počítačové modelování 15 Prohledávání do šířky a do hloubky Jan Hnilica Počítačové modelování 15 1 Prohledávací algoritmy Úkol postupně systematicky prohledat vymezený stavový prostor Stavový prostor (SP) možné stavy a varianty

Více

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky

Více

Geneticky vyvíjené strategie Egyptská hra SENET

Geneticky vyvíjené strategie Egyptská hra SENET Geneticky vyvíjené strategie Egyptská hra SENET Lukáš Rypáček, lukor@atrey.karlin.mff.cuni.cz Abstrakt V tomto dokumentu popíši jeden příklad použití genetických algoritmů pro počítačové hraní her. V tomto

Více

Zobrazte si svazy a uspořádané množiny! Jan Outrata

Zobrazte si svazy a uspořádané množiny! Jan Outrata LatVis Zobrazte si svazy a uspořádané množiny! Jan Outrata Motivace potřeba visualizovat matematické (algebraické) struktury rychle, přehledně a automaticky počítačovými prostředky ruční kreslení je zdlouhavé

Více

Operační výzkum. Teorie her. Hra v normálním tvaru. Optimální strategie. Maticové hry.

Operační výzkum. Teorie her. Hra v normálním tvaru. Optimální strategie. Maticové hry. Operační výzkum Hra v normálním tvaru. Optimální strategie. Maticové hry. Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

Ú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ů

Ú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ů Stavový prostor a jeho prohledávání SP = formalismus k obecnějšímu uchopení a vymezení problému, který spočívá v nalezení posloupnosti akcí vedoucích od počátečního stavu úlohy (zadání) k požadovanému

Více

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

Více

Prohledávání do šířky = algoritmus vlny

Prohledávání do šířky = algoritmus vlny Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé

Více

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

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 Stromy úvod 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 Neorientovaný strom Orientovaný strom Kořenový orientovaný

Více

Úvod do teorie grafů

Úvod do teorie grafů Úvod do teorie grafů Neorientovaný graf G = (V,E,I) V množina uzlů (vrcholů) - vertices E množina hran - edges I incidence incidence je zobrazení, buď: funkce: I: E V x V relace: I E V V incidence přiřadí

Více

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky

Více

1 Nejkratší cesta grafem

1 Nejkratší cesta grafem Bakalářské zkoušky (příklady otázek) podzim 2014 1 Nejkratší cesta grafem 1. Uvažujte graf s kladným ohodnocením hran (délka). Definujte formálně problém hledání nejkratší cesty mezi dvěma uzly tohoto

Více

Lekce 01 Úvod do algoritmizace

Lekce 01 Úvod do algoritmizace Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů Lekce 01 Úvod do algoritmizace Tento projekt CZ.1.07/1.3.12/04.0006 je spolufinancován Evropským sociálním

Více

Složitost her. Herní algoritmy. Otakar Trunda

Složitost her. Herní algoritmy. Otakar Trunda Složitost her Herní algoritmy Otakar Trunda Úvod měření složitosti Formální výpočetní model Turingův stroj Složitost algoritmu = závislost spotřebovaných prostředků na velikosti vstupu Časová složitost

Více

Binární vyhledávací stromy pokročilé partie

Binární vyhledávací stromy pokročilé partie Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald

Více

jednoduchá heuristika asymetrické okolí stavový prostor, kde nelze zabloudit připustit zhoršují cí tahy Pokročilé heuristiky

jednoduchá heuristika asymetrické okolí stavový prostor, kde nelze zabloudit připustit zhoršují cí tahy Pokročilé heuristiky Pokročilé heuristiky jednoduchá heuristika asymetrické stavový prostor, kde nelze zabloudit připustit zhoršují cí tahy pokročilá heuristika symetrické stavový prostor, který vyžaduje řízení 1 2 Paměť pouze

Více

Datové struktury 2: Rozptylovací tabulky

Datové struktury 2: Rozptylovací tabulky Datové struktury 2: Rozptylovací tabulky prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy

Více

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Algoritmus pro hledání nejkratší cesty orientovaným grafem 1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval

Více

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

UNIVERZITA PALACKÉHO V OLOMOUCI KATEDRA INFORMATIKY. ALGORITMY REALIZUJÍCÍ v jednoduchých deskových hrách UNIVERZITA PALACKÉHO V OLOMOUCI KATEDRA INFORMATIKY Tomáš Kühr ALGORITMY REALIZUJÍCÍ POČÍTAČOVÉHO HRÁČE v jednoduchých deskových hrách Říjen 0 Abstrakt Následující text obsahuje detailní popis algoritmu

Více

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý Uživatelský manuál Aplikace GraphViewer Vytvořil: Viktor Dlouhý Obsah 1. Obecně... 3 2. Co aplikace umí... 3 3. Struktura aplikace... 4 4. Mobilní verze aplikace... 5 5. Vytvoření projektu... 6 6. Části

Více

Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Náplň v.0.03 16.02.2014 - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Spojení dvou samostatně setříděných polí void Spoj(double apole1[], int adelka1, double

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

7. Rozdělení pravděpodobnosti ve statistice

7. Rozdělení pravděpodobnosti ve statistice 7. Rozdělení pravděpodobnosti ve statistice Statistika nuda je, má však cenné údaje, neklesejte na mysli, ona nám to vyčíslí Jednou z úloh statistiky je odhad (výpočet) hodnot statistického znaku x i,

Více

11. Tabu prohledávání

11. Tabu prohledávání Jan Schmidt 2011 Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze Zimní semestr 2011/12 MI-PAA EVROPSKÝ SOCIÁLNÍ FOND PRAHA & EU: INVESTUJENE DO VAŠÍ BUDOUCNOSTI

Více

Dynamické datové struktury III.

Dynamické datové struktury III. Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované

Více

POČÍTAČE A PROGRAMOVÁNÍ

POČÍTAČE A PROGRAMOVÁNÍ POČÍTAČE A PROGRAMOVÁNÍ Moderní metody vývoje softwaru, Demontrační příklad piškvorky Miroslav Vavroušek PPI 09 V1.0 Opakovaní z minulé přednášky Vícerozměrná statická a dynamická pole Pole polí Datový

Více

Osadníci z Katanu. a Monte Carlo Tree Search. David Pěgřímek. http://davpe.net MFF UK (2013) 1 / 24

Osadníci z Katanu. a Monte Carlo Tree Search. David Pěgřímek. http://davpe.net MFF UK (2013) 1 / 24 .. Osadníci z Katanu a Monte Carlo Tree Search David Pěgřímek http://davpe.net MFF UK (2013) 1 / 24 Osadníci z Katanu autor hry Klaus Teuber (1995 Německo) strategická desková hra pro 3 až 4 hráče hra

Více

Martin Milata, <256615@mail.muni.cz> 27.11.2007. Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

Martin Milata, <256615@mail.muni.cz> 27.11.2007. Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od IB000 Lámání čokolády Martin Milata, 27.11.2007 1 Čokoláda s alespoň jedním sudým rozměrem Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už

Více

Teorie her a ekonomické rozhodování. 2. Maticové hry

Teorie her a ekonomické rozhodování. 2. Maticové hry Teorie her a ekonomické rozhodování 2. Maticové hry 2.1 Maticová hra Teorie her = ekonomická vědní disciplína, která se zabývá studiem konfliktních situací pomocí matematických modelů Hra v normálním tvaru

Více

ČVUT FEL X36PAA - Problémy a algoritmy. 4. úloha - Experimentální hodnocení algoritmů pro řešení problému batohu

ČVUT FEL X36PAA - Problémy a algoritmy. 4. úloha - Experimentální hodnocení algoritmů pro řešení problému batohu ČVUT FEL X36PAA - Problémy a algoritmy 4. úloha - Experimentální hodnocení algoritmů pro řešení problému batohu Jméno: Marek Handl Datum: 3. 2. 29 Cvičení: Pondělí 9: Zadání Prozkoumejte citlivost metod

Více

ANTAGONISTICKE HRY 172

ANTAGONISTICKE HRY 172 5 ANTAGONISTICKÉ HRY 172 Antagonistický konflikt je rozhodovací situace, v níž vystupují dva inteligentní rozhodovatelé, kteří se po volbě svých rozhodnutí rozdělí o pevnou částku, jejíž výše nezávisí

Více

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

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]

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] Hanojská věž zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3] který tah je lepší? (co je lepší tah?) P. Berka, 2012 1/21 Stavový prostor 1. množina stavů S = {s} 2. množina přechodů

Více

ALGORITMY A DATOVÉ STRUKTURY

ALGORITMY A DATOVÉ STRUKTURY Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 1 Časová složitost algoritmů Základním cílem tohoto tematického celku je vysvětlení potřebných pojmů a definic nutných k popisu

Více

Dobývání znalostí. Doc. RNDr. Iveta Mrázová, CSc. Katedra teoretické informatiky Matematicko-fyzikální fakulta Univerzity Karlovy v Praze

Dobývání znalostí. Doc. RNDr. Iveta Mrázová, CSc. Katedra teoretické informatiky Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Dobývání znalostí Doc. RNDr. Iveta Mrázová, CSc. Katedra teoretické informatiky Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Dobývání znalostí Pravděpodobnost a učení Doc. RNDr. Iveta Mrázová,

Více

OSTRAVSKÁ UNIVERZITA V OSTRAVĚ PŘÍRODOVĚDECKÁ FAKULTA

OSTRAVSKÁ UNIVERZITA V OSTRAVĚ PŘÍRODOVĚDECKÁ FAKULTA OSTRAVSKÁ UNIVERZITA V OSTRAVĚ PŘÍRODOVĚDECKÁ FAKULTA BAKALÁŘSKÁ PRÁCE 2002 SEDLÁK MARIAN - 1 - OSTRAVSKÁ UNIVERZITA PŘÍRODOVĚDECKÁ FAKULTA KATEDRA INFORMATIKY A POČÍTAČŮ Vizualizace principů výpočtu konečného

Více

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Seznamy a stromy Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Klíčové pojmy: Seznam, spojový seznam, lineární seznam, strom, list, uzel. Úvod

Více

VYUŽITÍ PRAVDĚPODOBNOSTNÍ METODY MONTE CARLO V SOUDNÍM INŽENÝRSTVÍ

VYUŽITÍ PRAVDĚPODOBNOSTNÍ METODY MONTE CARLO V SOUDNÍM INŽENÝRSTVÍ VYUŽITÍ PRAVDĚPODOBNOSTNÍ METODY MONTE CARLO V SOUDNÍM INŽENÝRSTVÍ Michal Kořenář 1 Abstrakt Rozvoj výpočetní techniky v poslední době umožnil také rozvoj výpočetních metod, které nejsou založeny na bázi

Více

Princip funkce počítače

Princip funkce počítače Princip funkce počítače Princip funkce počítače prvotní úlohou počítačů bylo zrychlit provádění matematických výpočtů první počítače kopírovaly obvyklý postup manuálního provádění výpočtů pokyny pro zpracování

Více

12 Metody snižování barevného prostoru

12 Metody snižování barevného prostoru 12 Metody snižování barevného prostoru Studijní cíl Tento blok je věnován základním metodám pro snižování barevného rozsahu pro rastrové obrázky. Postupně zde jsou vysvětleny důvody k použití těchto algoritmů

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Algoritmizace řazení Bubble Sort

Algoritmizace řazení Bubble Sort Algoritmizace řazení Bubble Sort Cílem této kapitoly je seznámit studenta s třídícím algoritmem Bubble Sort, popíšeme zde tuto metodu a porovnáme s jinými algoritmy. Klíčové pojmy: Třídění, Bubble Sort,

Více

REGRESNÍ ANALÝZA V PROSTŘEDÍ MATLAB

REGRESNÍ ANALÝZA V PROSTŘEDÍ MATLAB 62 REGRESNÍ ANALÝZA V PROSTŘEDÍ MATLAB BEZOUŠKA VLADISLAV Abstrakt: Text se zabývá jednoduchým řešením metody nejmenších čtverců v prostředí Matlab pro obecné víceparametrové aproximační funkce. Celý postup

Více

Stromy, haldy, prioritní fronty

Stromy, haldy, prioritní fronty Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík

Více

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

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu

Více

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest Obsah prezentace Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest 1 Základní pojmy Vrchol grafu: {množina V} Je to styčná vazba v grafu, nazývá se též uzlem, prvkem

Více

Úvod do teorie her

Úvod do teorie her Úvod do teorie her. Formy her a rovnovážné řešení Tomáš Kroupa http://staff.utia.cas.cz/kroupa/ 208 ÚTIA AV ČR Program. Definujeme 2 základní formy pro studium různých her: rozvinutou, strategickou. 2.

Více

5 Orientované grafy, Toky v sítích

5 Orientované grafy, Toky v sítích Petr Hliněný, FI MU Brno, 205 / 9 FI: IB000: Toky v sítích 5 Orientované grafy, Toky v sítích Nyní se budeme zabývat typem sít ových úloh, ve kterých není podstatná délka hran a spojení, nýbž jejich propustnost

Více

ČVUT FEL X36PAA - Problémy a algoritmy. 5. úloha - Seznámení se se zvolenou pokročilou iterativní metodou na problému batohu

ČVUT FEL X36PAA - Problémy a algoritmy. 5. úloha - Seznámení se se zvolenou pokročilou iterativní metodou na problému batohu ČVUT FEL X36PAA - Problémy a algoritmy 5. úloha - Seznámení se se zvolenou pokročilou iterativní metodou na problému batohu Jméno: Marek Handl Datum: 4. 2. 2009 Cvičení: Pondělí 9:00 Zadání Zvolte si heuristiku,

Více

Hry a UI historie. agent musí brát v úvahu akce jiných agentů jak ovlivní jeho. vliv ostatních agentů prvek náhody. Hry: Obsah:

Hry a UI historie. agent musí brát v úvahu akce jiných agentů jak ovlivní jeho. vliv ostatních agentů prvek náhody. Hry: Obsah: Obsah: Hry a základní herní strategie Aleš Horák E-mail: hales@fi.muni.cz http://nlp.fi.muni.cz/uui/ Hry s nepřesnými znalostmi Hry a UI historie Úvod do umělé inteligence 7/1 1 / 5 Hry a UI historie Babbage,

Více

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová Základy informatiky Teorie grafů Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová Obsah přednášky Barvení mapy Teorie grafů Definice Uzly a hrany Typy grafů Cesty, cykly, souvislost grafů Barvení mapy

Více

Algoritmy pro práci s neúplnou informací

Algoritmy pro práci s neúplnou informací Michal Krkavec 23. listopadu 2011 Obsah Náhoda Expectimax Neúplné informace Monte Carlo Tree Search Perfect Information Monte Carlo Realtime plánování Plánování v RTS Monte Carlo Plánování Expectimax Expectimax

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Vyhledávání, vkládání, odstraňování Vyhledání hodnoty v nesetříděném poli Vyhledání hodnoty v setříděném poli Odstranění hodnoty z pole Vkládání hodnoty do pole Verze pro akademický

Více

ŠVP Gymnázium Ostrava-Zábřeh. 4.8.16. Úvod do programování

ŠVP Gymnázium Ostrava-Zábřeh. 4.8.16. Úvod do programování 4.8.16. Úvod do programování Vyučovací předmět Úvod do programování je na naší škole nabízen v rámci volitelných předmětů v sextě, septimě nebo v oktávě jako jednoletý dvouhodinový kurz. V případě hlubšího

Více

PARAMETRICKÁ STUDIE VÝPOČTU KOMBINACE JEDNOKOMPONENTNÍCH ÚČINKŮ ZATÍŽENÍ

PARAMETRICKÁ STUDIE VÝPOČTU KOMBINACE JEDNOKOMPONENTNÍCH ÚČINKŮ ZATÍŽENÍ PARAMETRICKÁ STUDIE VÝPOČTU KOMBINACE JEDNOKOMPONENTNÍCH ÚČINKŮ ZATÍŽENÍ Ing. David KUDLÁČEK, Katedra stavební mechaniky, Fakulta stavební, VŠB TUO, Ludvíka Podéště 1875, 708 33 Ostrava Poruba, tel.: 59

Více

Algoritmy I, složitost

Algoritmy I, složitost A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??

Více

Elegantní algoritmus pro konstrukci sufixových polí

Elegantní algoritmus pro konstrukci sufixových polí Elegantní algoritmus pro konstrukci sufixových polí 22.10.2014 Zadání Obsah Zadání... 3 Definice... 3 Analýza problému... 4 Jednotlivé algoritmy... 4 Algoritmus SA1... 4 Algoritmus SA2... 5 Algoritmus

Více

Využití tabulkového procesoru MS Excel

Využití tabulkového procesoru MS Excel Semestrální práce Licenční studium Galileo srpen, 2015 Využití tabulkového procesoru MS Excel Ing Marek Bilko Třinecké železárny, a.s. Stránka 1 z 10 OBSAH 1. ÚVOD... 2 2. DATOVÝ SOUBOR... 2 3. APLIKACE...

Více

3. ANTAGONISTICKÉ HRY

3. ANTAGONISTICKÉ HRY 3. ANTAGONISTICKÉ HRY ANTAGONISTICKÝ KONFLIKT Antagonistický konflikt je rozhodovací situace, v níž vystupují dva inteligentní rozhodovatelé, kteří se po volbě svých rozhodnutí rozdělí o pevnou částku,

Více

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze PROHLEDÁVÁNÍ GRAFŮ Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 4 Evropský sociální fond Praha & EU: Investujeme do

Více

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu. Algoritmus Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu. Klíčové pojmy: Algoritmus, vlastnosti algoritmu, tvorba algoritmu, vývojový diagram, strukturogram Algoritmus

Více

Teorie her a ekonomické rozhodování 5. Opakované hry

Teorie her a ekonomické rozhodování 5. Opakované hry Teorie her a ekonomické rozhodování 5. Opakované hry (chybějící či chybná indexace ve skriptech) 5.1 Opakovaná hra Hra až dosud hráči hráli hru jen jednou v reálu se konflikty neustále opakují (firmy nabízí

Více

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................

Více

Zpětnovazební učení Michaela Walterová Jednoocí slepým,

Zpětnovazební učení Michaela Walterová Jednoocí slepým, Zpětnovazební učení Michaela Walterová Jednoocí slepým, 17. 4. 2019 V minulých dílech jste viděli Tři paradigmata strojového učení: 1) Učení s učitelem (supervised learning) Trénovací data: vstup a požadovaný

Více

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. 13 Rozhraní, výjimky Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. Doba nutná k nastudování 2 2,5 hodiny

Více

Obsah: Hry Prohledávání stavového prostoru. Algoritmus Minimax. Nedeterministické hry Hry s nepřesnými znalostmi

Obsah: Hry Prohledávání stavového prostoru. Algoritmus Minimax. Nedeterministické hry Hry s nepřesnými znalostmi Hry a základní herní strategie Aleš Horák E-mail: hales@fi.muni.cz http://nlp.fi.muni.cz/uui/ Obsah: Hry vs. Prohledávání stavového prostoru Algoritmus Minimax Algoritmus Alfa-Beta prořezávání Nedeterministické

Více

VISUAL BASIC. Přehled témat

VISUAL BASIC. Přehled témat VISUAL BASIC Přehled témat 1 ÚVOD DO PROGRAMOVÁNÍ Co je to program? Kuchařský předpis, scénář k filmu,... Program posloupnost instrukcí Běh programu: postupné plnění instrukcí zpracovávání vstupních dat

Více

Algoritmizace. 1. Úvod. Algoritmus

Algoritmizace. 1. Úvod. Algoritmus 1. Úvod Algoritmizace V dnešní době již počítače pronikly snad do všech oblastí lidské činnosti, využívají se k řešení nejrůznějších úkolů. Postup, který je v počítači prováděn nějakým programem se nazývá

Více

! Kyberne(ka!a!umělá!inteligence! 8.!Hraní!dvouhráčových!her,!adversariální! prohledávání!stavového!prostoru!!!!

! Kyberne(ka!a!umělá!inteligence! 8.!Hraní!dvouhráčových!her,!adversariální! prohledávání!stavového!prostoru!!!! ! Kyberne(ka!a!umělá!inteligence! 8.!Hraní!dvouhráčových!her,!adversariální! prohledávání!stavového!prostoru!!!! Ing.%Michal%Pěchouček,%Ph.D.% Katedra%kyberne;ky% ČVUT%v%Praze,%FEL% Evropský!sociální!fond!

Více

Obsah: Hry vs. Prohledávání stavového prostoru Algoritmus Minimax. Nedeterministické hry Hry s nepřesnými znalostmi

Obsah: Hry vs. Prohledávání stavového prostoru Algoritmus Minimax. Nedeterministické hry Hry s nepřesnými znalostmi Hry a základní herní strategie Aleš Horák E-mail: hales@fi.muni.cz http://nlp.fi.muni.cz/uui/ Obsah: Hry vs. Prohledávání stavového prostoru Algoritmus Minimax Algoritmus Alfa-Beta prořezávání Nedeterministické

Více

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody 4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina Cyklické odkazy a iterativní výpočty

Více

Kontingenční tabulky v MS Excel 2010

Kontingenční tabulky v MS Excel 2010 Kontingenční tabulky v MS Excel 2010 Autor: RNDr. Milan Myšák e-mail: milan.mysak@konero.cz Obsah 1 Vytvoření KT... 3 1.1 Data pro KT... 3 1.2 Tvorba KT... 3 2 Tvorba KT z dalších zdrojů dat... 5 2.1 Data

Více

Copyright 2013 Martin Kaňka;

Copyright 2013 Martin Kaňka; Copyright 2013 Martin Kaňka; http://dalest.kenynet.cz Popis aplikace Hlavním cílem aplikace Cubix je výpočet a procvičení výpočtu objemu a povrchu těles složených z kostek. Existují tři obtížnosti úkolů

Více

Neuronové časové řady (ANN-TS)

Neuronové časové řady (ANN-TS) Neuronové časové řady (ANN-TS) Menu: QCExpert Prediktivní metody Neuronové časové řady Tento modul (Artificial Neural Network Time Series ANN-TS) využívá modelovacího potenciálu neuronové sítě k predikci

Více

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat

Více

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

PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY ROČNÍKOVÝ PROJEKT KLOKAN. Informatika, II. ročník PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY ROČNÍKOVÝ PROJEKT KLOKAN Květen 2010 Libor Valouch Informatika, II. ročník 1 Abstrakt Dokumentace ročníkového projektu Klokan. Jedná se o

Více

TÉMATICKÝ OKRUH Softwarové inženýrství

TÉMATICKÝ OKRUH Softwarové inženýrství TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího

Více