Umělá inteligence

Stavový prostor ve hrách, herní strategie

 Cíle

  • Dokázat sestavit prohledávací strom pro multiagentní hry
  • Aplikovat v něm algoritmus Minimax a alfa-beta ořezávání
  • Seznámit se s příklady a metodami heuristického ohodnocení uzlů

 Klíčová slova

Hra s nulovým součtem, hra s nenulovým součtem, algoritmus Minimax, alfa-beta ořezávání, heuristické ohodnocení uzlů

Shrnutí kapitoly

Teorie her je rozsáhlou oblastí matematiky s řadou hlubokých výsledků. Zahrnuje složité hry s mnoha paralelně konajícími hráči, s komplikovanými vzájemnými vazbami zisků/ztrát a s řadou neznámých faktorů. Omezíme se pro začátek na jednoduché hry s dvěma hráči, kteří se střídají. Rovněž začneme se zjednodušujícím předpokladem, že stav hry je v každém okamžiku znám všem hráčům (jako šachy, na rozdíl od většiny karetních her). Konečně půjde o hry s nulovým součtem, tedy výhra jednoho znamená porážku druhého. Hráč označíme jako MAX a MIN, koncové stavy ohodnotíme např. +1 (výhra MAX), -1 (výhra MIN), 0 (remíza). 

Algoritmus Minimax:

Jde v podstatě o prohledávání stavového prostoru do hloubky s omezením hloubky. Klíčový je způsob ohodnocení jednotlivých uzlů. Listy stromu jsou ohodnoceny, jak bylo popsáno výše. Každý vnitřní uzel je ohodnocen následovně:  

  • Pokud je na tahu MAX, bere se maximum z hodnoty všech přímých potomků.
  • Pokud je na tahu MIN, bere se minimum  z hodnoty všech přímých potomků.

Východiskem je úvaha, že protihráč vybere pro něj nejlepší možný tah. I když to neudělá, popsaný postup nalezne vyhrávající strategii, pokud existuje.

Alfa-beta ořezávání

Slabinou algoritmu Minimax je fakt, že stavový prostor je obrovský, s rychlým větvením možných tahů, takže je algoritmus pomalý. Jak se dá zefektivnit? Princip minimaxu umožňuje některé větve prohledávacího stromu ignorovat, jakmile se ukáže, že nemůžou ovlivnit ohodnocení aktuálního uzlu.


Obr. 1. Příklad alfa-beta ořezávání. Zdroj: Wikimedia Commons, Jez9999 at the English language Wikipedia.


Na obr. 1 je příklad stromu prohledávání stavového prostoru. Po prohledání levého a prostředního podstromu víme, že hodnota kořene bude nejméně 6. Nyní prohledáváme pravý podstrom a narazíme v poduzlu na hodnotu 5. Jelikož poduzel má úroveň MIN, víme, že další prohledávání pravého šedého podstromu tuto hodnotu jedině sníží, ale určitě nezvýší. Tím pádem neovlivní hodnotu 6 v kořeni úrovně MAX. Proto pravý šedý podstrom odřízneme.

Heuristické ohodnocování uzlů

I s využitím alfa-beta ořezávání se dá většinou stavový prostor v rozumném čase prohledat jen do malé hloubky a ne až k listům, jak to vyžaduje algoritmus Minimax. Co teď? Je nutno prohledávání zastavit na určité hloubce a ohodnotit nejhlubší dosažené uzly nějakou heuristikou. Existuje řada možností, například:

  • odhad podílu vyhrávajících a prohrávajících stavů v podstromu daného uzlu;
  • "materiální" ohodnocení, např. hodnotou figur v šachách anebo jednotlivých karet (a jejich kombinací) v ruce

Vesměs ale je taková heuristika závislá na konkrétní hře a její kvalita je zásadní pro herní algoritmus. Častá strategie je vybrat slibné nebo naopak nejisté vrcholy, které mohou nejspíše ovlivnit výsledek, a ty pak prohledat do větší hloubky.

Ověření znalostí

  1. Předpokládejte, že máte k dispozici orákulum, které v každé herní pozici předpoví tah protihráče. Definujte hru jako problém prohledávání stavového prostoru jedním agentem a popište vítěznou strategii.
  2. Uvažujte následující hru: jsou paralelně rozehrány dvě sady hlavolamu Lišák (8-puzzle). Hráči se střídají. Hráč na tahu hodí mincí, která určí, na kterém hlavolamu má táhnout. Vyhrává hráč, který jako první sestaví některý hlavolam.
    (a) Jak velký je stavový prostor? Vyčíslete přesně počet stavů.
    (b) Popište algoritmus pro určení optimálního tahu.
  3. Popište stavový prostor a ohodnocení cílových stavů v dámě.  Najděte co nejlepší heuristickou ohodnocující funkci pro necílové pozice.
  4. Popište stavový prostor v piškvorkách na plánu rozměru 19x19. Zformulujte pomocí série IF-THEN-ELSE heuristickou ohodnocující funkci pro necílové pozice, která bere v potaz nejméně 8 různých standardních situací. Můžete využít nápovědu níže.
  5. Popište stavový prostor a ohodnocení cílových stavů v pokeru Texas hold'em. Najděte co nejlepší heuristickou ohodnocující funkci pro necílové stavy.
  6. Implementujte na počítači algoritmy pro hry z úloh 3 a 4.
  7. Jak se změní algoritmy Minimax a alfa-beta ořezávání, pokud nejde o hru s nulovým součtem, každý hráč má vlastní hodnotící funkci koncových stavů, a oba hráči je vzájemně znají? Je v obecném případě vůbec možné použít alfa-beta ořezávání na některý uzel? Co když se účelová funkce obou hráčů liší v všech uzlech nejvýše o konstantu k, což mění hru na (téměř) kooperativní?
  1. V takové situaci se každá dvojice tahů (můj a soupeřův) redukuje na jeden "dvojitý" tah, protože soupeřova reakce je známá. Tím se hloubka prohledávacího stromu  redukuje na polovinu.-Jde nám o nalezení kteréhokoli vítězného řešení (cílového stavu), nezajímá nás  délka cesty k němu. Proto se vítězná strategie shoduje s použitím některého z algoritmů  lokálního prohledávání, viz též kapitola 4.1 v knize Russel & Norvig. Prohledávání můžeme urychlit použitím heuristické hodnotící funkce pro jednotlivé stavy, tak jak byly popsány na slajdech Illinois na příkladu šachů.
  2. (a) Hlavolam má v základní verzi 181 440 stavů (9!/2). Počet kombinací možných stavů obou hlavolamů bude tedy 181 4402 = 32 920 473 600. Hod mincí určuje, které přechody mezi stavy (tahy) jsou aktuálně dostupné.  Alternativně by bylo možno chápat hod mincí jako součást stavu, tím by se jejich počet zdvojnásobil. (b) Podle principu minimaxu je nutno se vyhýbat stavům, v nichž může soupeř jedním tahem vyhrát (dokončit jeden z hlavolamů). Proto je nutno oba dva udržovat nejméně 2 tahy před dokončením a čekat na chybu soupeře. Pokud tuto strategii použijí oba hráči, hra nikdy neskončí.
  3. Předpokládejme českou variantu dámy s 8 kameny na každé straně. Stavový prostor obsahuje teoreticky všechna možná rozložení 16 a méně kamenů (některé mohou být vzaty během hry)  na černých polích, plus možné kombinace s dámami. Některé stavy však jsou nedostupné hrou podle pravidel. Ohodnocení cílových stavů vychází z pravidel: všechny stavy, kdy soupeř je na tahu a nemůže žádný udělat (a já mám nejméně jeden kámen) jsou pro mě vítězné. Remíza nastává pokud "je teoreticky nemožné vzít soupeři při jeho optimální hře žádnou další figuru", například pokud každému z hráčů zbývá jen jedna dáma.  Najít co nejlepší heuristickou ohodnocující funkci je otázka tvořivého myšlení, jistě tu bude hrát roli materiál (počet mých kamenů oproti soupeři), ale ještě více možnost udělat si dámu...
  4. Hodnota herní pozice záleží na tom, jaké jsou v ní posloupností X a O délky 3-5, spolu s případnými volnými políčky na okrajích nebo uvnitř posloupnosti. Každou posloupnost ve kterémkoli ze 4 možných směrů popište sekvencí znaků, například _XXX_, _X_XX_, _XXXX_, OXXXX_, __XX_, _OOO_ a podobně, ve všech 4 směrech. Pak uvažujte následovně, třeba v roli hráče X, který je na tahu:
    • přítomnost jakých posloupností znamená, že mohu vyhrát v jednom tahu?
    • přítomnost jakých posloupností znamená, že prohraji v dalším soupeřově tahu, bez ohledu na to, jak potáhnu?
    • přítomnost jakých posloupností znamená, že mohu vyhrát ve dvou tazích, bez ohledu na to, co udělá soupeř?
    • přítomnost jakých posloupností znamená, že prohraji ve dvou soupeřových tazích, bez ohledu na to, jak potáhnu?
    • Přítomnost jakých posloupností mne udrží v útoku, tzn. soupeř musí dělat vynucené tahy?
    • Přítomnost jakých posloupností mne nutí se bránit a dělat vynucené tahy?
    Navrhněte hodnoty pozic podle této logiky, popište ohodnocující funkci jako sekvenci IF-THEN-ELSE, ve smyslu
    IF jsou přítomny jisté posloupnosti THEN hodnota pozice = a
    ELSE IF jsou přítomny jiné posloupnosti THEN hodnota pozice = b
    ELSE atd.
  5. Tuto úlohu ponecháváme laskavému čtenáři, který by v případě nalezení nejlepší heuristické funkce mohl navíc velmi zbohatnout.
  6. Pro implementaci bych volil nejspíše Python, případně Javu nebo C#.
  7. Odpověď je znázorněna na slajdu č. 13 v prezentaci Illinois, kde hráči mají navzájem nezávislé hodnotící funkce. Algoritmus Je podobný původnímu Minimaxu, ale nyní je to spíše MaxMax - v každém tahu předpokládáme, že soupeř bude volit tah, který maximalizuje jeho zisk. To však neumožňuje použít α-β ořezávání, které je založeno na předpokladu nulového součtu, tedy že soupeř volí tahy minimalizující můj zisk. Pokud soupeř má možnost tahu snižujícího můj zisk pod hodnotu α, pak v dalších větvích téhož podstromu jistě nezvolí tah, který by mi umožnil zisk vyšší než α, protože tím by snížil vlastní zisk, a mohu tyto větve odřezat. To však v tomto případě neplatí - můj a soupeřův zisk jsou nezávislé, nejde o hru s nulovým součtem.
Úloha: piškvorky
Vyřešte příklad 4 ze sekce Ověření znalostí. Připomínám, že výsledkem by měla být funkce/algoritmus určující hodnotu pozice pro hráče X, v závislosti na tom, jaké posloupnosti X a O pozice obsahuje. Max 8 bodů.
Literatura a zdroje

Základní:

  • MAŘÍK, V. a kol. Umělá inteligence, díl I, kap. 2.4.
  • RUSSELL, S.J., NORVIG, P. Artificial Intelligence: A Modern Approach, kap. 5.1 - 5.4.

Užitečné odkazy: