Mulligan

=Definice problému= Magic the Gathering je hra, kde proti sobě stojí dva hráči, každý s vlastním balíčkem karet. Balíčky obsahují zdroje a kouzla, která tyto zdroje vyžadují. Hra probíhá v jednotlivých kolech (hráči se střídají). Na začátku kola si každý hráč lízne jednu kartu, může vyložit až jeden zdroj a může všechny své vyložené zdroje využít pro vyložení kouzel. Počet zdrojů nutných pro vyložení jednotlivých kouzel (cena) se liší a je přímo úměrný síle kouzla. Cílem hry je přečíslit soupeře počtem a silou kouzel. Hráči začínají se sedmi náhodnými kartami z balíčku. Ideální scénář je pro hráče takový, kdy zahraje v prvních pěti kolech hry pět zdrojů a kouzla s cenou 1,2,3,4 a 5 zdrojů. Naopak, situace kdy hráč nezahraje žádné kouzlo během prvních čtyř kol hry, znamená v podstatě jistou prohru. Ze sedmi karet, které si hráč lízne na začátku hry, je hráč schopen poměrně dobře předpovídat vývoj několika prvních kol hry. Je vidět, že úvodní ruka složená například ze samých zdrojů, nebo samých kouzel, je nepoužitelná a vedla by k prohře. Proto má každý hráč na začátku hry možnost využít takzvaný Mulligan. Hráč zamíchá znovu svůj balíček a vezme si nové úvodní karty, ale vezme si o jednu méně. Snížení počtu karet na úvodní ruce samozřejmě snižuje šanci na výhru a hráči se velmi často dostávají do situací, kdy je jejich úvodní ruka sporná a nevědí, zda mají tohoto pravidla využít. Za pomoci simulačních nástrojů je možné odhadnout správné řečení situace =Metoda= Jako metodu simulace jsem zvolil vytvoření nástroje, který na základě vstupních dat - celého balíčku hráče a jeho úvodní ruky, simuluje vývoj prvních několika kol hry a tento vývoj porovnává a vývojem hry po použití Mulliganu. Alternativou by mohlo být například vytvoření databáze již odehraných her, kde by u každé hry byla uložena informace o úvodní ruce, o použití mulliganu a výsledek hry a aktuální spornou ruku hráče porovnávat s touto databází. Pro vytvoření takové databáze bohužel neexistují žádné zdroje. Vzhledem k specifičnosti a složitosti úlohy pro tuto metodu není vhodný žádný z nástrojů představený v rámci výuky předmětu 4IT495, vhodnější je využít některý z univerzálních programovacích jazyků. Pro snadnou práci s daty a uživatelským rozhraním jsem zvolil nástroj MS Excel a jazyk Visual Basic.

=Model=

Vstupní data
Balíček hráče

Základními vstupními daty modelu je aktuální balíček hráče. Model je určen pro hru Magic the Gathering v módu "Limited". To znamená, že je určen pro balíčky, které si hráči staví těsně před hrou z množiny náhodných, předem neznámých karet. Tyto balíčky se vyznačují obvyklým počtem karet 40-41, obvyklým počtem zdrojů 16-18 a obvykle obsahují dva různé druhy zdrojů. Tyto balíčky se také vyznačují jednotnou výherní strategií - přečíslit soupeře počtem a silou kouzel, případná synergie karet ve hře nebo na ruce je spíše náhoda, než záměr.

Jako vstup jsou použity následující parametry:

Počet karet, které nemá smysl použít v prvních pěti kolech hry - sem spadají karty jejich cena je více než pět zdrojů a také karty, jejichž efekt má smysl pouze po pátém kole hry.

Počet zdrojů jednotlivých druhů - Je možné vložit zdroje všech druhů, které hra Magic the Gathering obsahuje, ale balíčky typicky obsahují dva různé druhy zdrojů a pro více než tři různé druhy zdrojů již nebude dávat výsledek simulace smysl. Pro "Limited" balíčky typicky platí, že každý zdroj je jednoho druhu.

Ceny jednotlivých karet - U jednotlivých karet je potřeba znát pouze informaci, kolik zdrojů konkrétních druhů a kolik libovolných zdrojů vyžadují, jejich síla je dána součtem těchto zdrojů.

Příklad vstupních dat:



Nemá smysl simulovat vývoj hry u balíčků bez karet, bez zdrojů a podobně, simulátor bude nejlépe fungovat pro typické balíčky. Vstupem jsou vždy celočíselné hodnoty.

Úvodní ruka

Dalším nezbytným vstupem je obsah úvodní ruky, pro kterou chceme zjišťovat vhodnost použití mulliganu. Vkládají se tytéž parametry jako u balíčku, tedy počet nepoužitelných karet, počet zdrojů každého typu a konkrétní karty (tentokrát ve formě identifikátoru, který model kartám v balíčku přidělí). Karet na úvodní ruce musí být vždy 7 a nesmí mezi nimi být karty, které nejsou v balíčku.

Příklad úvodní ruky:



Dalším vstupním parametrem je informace o tom, zda hráč při hře hraje první, nebo ne. Hráč, který začíná, si v prvním kole hry nelíže kartu. Posledním parametrem je počet simulací. Vzhledem k složitosti výpočtu doporučuji hodnoty v rozsahu 100 - 1000.

Průběh simulace
Po spuštění simulace simulátor načte vstupní data, vygeneruje náhodné pořadí balíčku a s nastavenou úvodní rukou zahraje prvních pět kol hry. Poté vygeneruje nové pořadí balíčku, tentokrát i s kartami z úvodní ruky, lízne 6 karet a s těmito kartami zahraje prvních pět kol hry. Po každém kole hry simulátor uloží výsledky tohoto kola. Toto celé zopakuje tolikrát, kolik bylo zvoleno simulací, pokaždé s nově zamíchaným balíčkem. Průběh každého kola je následující:

1. Líznutí karty - odebrání náhodné karty z balíčku a přidání do ruky. Pokud se jedná o první kolo a hráč začíná, tento krok je vynechán.

2. Zahrání zdroje - pokud má hráč na ruce zdroj tak ho přemístí z ruky do hry, kde zůstává natrvalo. Pokud má na ruce zdroje různých druhů, nejprve zkontroluje, zda by zahrání nějakého zdroje nezabránilo v zahrání nejsilnějšího možného kouzla. Pokud ano, tak zahraje takový zdroj, aby mohl následně zahrát nejsilnější kouzlo. Pokud ne, hraje zdroje tak aby měl rovnoměrný počet různých druhů.

3. Zahrání kouzel - simulátor prochází kouzla na ruce od nejsilnějšího po nejslabší a pokud narazí na takové, které může zahrát, tak ho odstraní z ruky, zaznamená použití zdrojů a pokud má ještě nějaké volné zdroje, postup opakuje, dokud nedojdou zdroje nebo neprojde všechna kouzla.

Po dokončení všech simulací uloží simulátor výsledky do excelu, ze kterého byl spuštěn.

=Interpretace výsledků= Simulátor ukládá pro každé zahrané kolo informaci o tom, kolik zdrojů bylo v tomto kole použito a kolik kouzel bylo v kole zahráno. Jako výsledek vrací součet těchto hodnot ze všech provedených simulací. Z těchto hodnot je následně vypočítána efektivita využití zdrojů a efektivita zahraných, vždy zvlášť pro původní ruku a pro náhodných 6 karet a zvlášť pro každé kolo.

Příklad výsledků



Efektivita využitých zdrojů je podíl počtu zdrojů využitých ve všech simulacích a teoretického maximálního využití zdrojů.

Efektivita zahraných kouzel je podíl počtu simulací, kde bylo v daném kole zahráno nějaké kouzlo, a počtu všech simulací, s tím, že efektivita je u každé simulace snížena o 20 procent, pokud bylo v této simulaci zahráno více než jedno kouzlo. Platí totiž, že pokud byl v nějakém kole využit konkrétní počet zdrojů, je vždy lepší, pokud byl využit k zahrání jednoho kouzla. Zároveň platí, že pokud je výsledek efektivity zdrojů nějakého kola například 50 procent, je lepší, když v tomto kole stabilně každou hru hraji jedno kouzlo s využitím poloviny zdrojů, než když v polovině her zahraji kouzlo s využitím všech zdrojů a v druhé polovině her nezahraji nic.

Dále je vypočítána celková efektivita každého kola jako vážený průměr efektivity zdrojů a kouzel s tím, že efektivita zdrojů má čtyřnásobnou váhu.

Následně je vypočítána celková efektivita hry jako vážený průměr všech kol. Obecně se dá říci, že nižší efektivita v pozdějších kolech hry má na výsledek hry větší dopad. Tento efekt je ale zásadně ovlivněn tím, zda hráč začíná, nebo ne. Platí, že hráč, který začíná, získá ve hře výhodu, pokud zahraje kouzlo v prvním kole. Pro hráče, který hraje jako druhý toto neplatí. Dále, pokud hráč, který začíná, vynechá hraní kouzla ve druhém nebo třetím kole, má to pro něj menší následky než pro hráče, který hraje jako druhý. Váhy jednotlivých kol (v pořadí 1-5) jsem stanovil na 2, 3, 3, 5, 7, pro hráče, který začíná a 1, 4, 4, 5, 6, pro hráče, který hraje jako druhý.

Nakonec je stanoveno doporučení, zda úvodní ruku nechat nebo vyměnit. Vzhledem k tomu, že hráč má po výměně karet o jednu kartu méně, což se projeví i v pozdějších kolech hry, je stanoven efekt chybějící karty, který snižuje efektivitu vyměněné ruky, na 10 procent, pokud hráč začíná, a 8 procent, pokud hraje jako druhý. Je doporučeno úvodní ruku nechat, pokud její celková efektivita je větší než celkové efektivita náhodných šesti karet, ponížená o efekt chybějící karty.

=Závěr= Simulátor nemyslí za hranici jednoho kola, mohou tedy nastat situace, které by hráč v reálné hře vyřešil lépe, nicméně simulátor je dle mého názoru velice přesný a každé jeho nepatrné zdokonalení by neúměrně zvyšovalo potřebný výpočetní čas. Začínající hráč se určitě může řídit daným doporučením, pro pokročilejšího hráče budou naopak užitečné surové výstupní hodnoty, ke kterým bude moci přidat vlastní zkušenost, případně znalost soupeřova balíčku a sám rozhodnout, zda si může dovolit úvodní ruku nechat.

=Simulátor= Vytvořeno v MS Office Excel 2010, kompatibilita s jinými (typicky nižšími) verzemi není zaručena.

[[Media:Xhola00_Simulace.zip]]