Secret Hitler je sociálně dedukční stolní hra pro 5 - 10 hráčů. Hráčům jsou náhodně přiděleny role liberálů, fašistů a Hitlera. Fašisté znají role všech hráčů ve hře, liberálové a Hitler znají jen svou roli. Hraje se na kola -- volební období -- během kterých je zvolena vláda a prosazen fašistický nebo liberální zákon. Cílem fašistů je prosadit 6 fašistických zákonů nebo za daných podmínek dosadit Hitlera za kancléře vlády. Cílem liberálů je prosadit 5 liberálních zákonů nebo zabít Hitlera. Dynamika hry je založena na důvěře liberálů vůči ostatním hráčům. Liberálové se snaží zjistit, kdo se chová jako fašista nebo Hitler. Jejich početní převaha jim umožňuje takové hráče nepustit k moci a díky tomu častěji volit liberální zákony. Kompletní pravidla hry se lze nalézt na https://www.secrethitler.com/, zbytek tohoto textu je dále nevysvětluje.
Z pohledu teorie her se dá Secret Hitler považovat za dynamickou hru s nekompletní informací. Hráči znají svůj typ (liberál, fašista, Hitler) a jejich cíl hry, ale neznají typy, a tím pádem cíle, ostatních hráčů, jen jejich pravděpodobnostní distribuci.
Secret Hitler je sociálně dedukční stolní hra pro 5 - 10 hráčů. Hráčům jsou náhodně přiděleny role liberálů, fašistů a
Hitlera. Fašisté znají role všech hráčů ve hře, liberálové a Hitler znají jen svou roli. Hraje se na kola -- volební
období -- během kterých je zvolena vláda a prosazen fašistický nebo liberální zákon. Cílem fašistů je prosadit 6
fašistických zákonů nebo za daných podmínek dosadit Hitlera za kancléře vlády. Cílem liberálů je prosadit 5 liberálních
zákonů nebo zabít Hitlera. Dynamika hry je založena na důvěře liberálů vůči ostatním hráčům. Liberálové se snaží
zjistit, kdo se chová jako fašista nebo Hitler. Jejich početní převaha jim umožňuje takové hráče nepustit k moci a díky
tomu častěji volit liberální zákony. Kompletní pravidla hry se lze nalézt na https://www.secrethitler.com/, zbytek
tohoto textu je dále nevysvětluje.
Z pohledu teorie her se dá Secret Hitler považovat za dynamickou hru s nekompletní informací. Hráči znají svůj typ
(liberál, fašista, Hitler) a jejich cíl hry, ale neznají typy, a tím pádem cíle, ostatních hráčů, jen jejich
pravděpodobnostní distribuci.
== Problém
Naším cílem bylo podívat se na hru jak z pohledu hráčů, tak z pohledu vývojářů: prozkoumat herní rovnováhu, zanalyzovat strategie, které známe z vlastní zkušenosti, a zjistit, jak změna některých parametrů hry ovlivní její výsledek.
Naším cílem bylo podívat se na hru jak z pohledu hráčů, tak z pohledu vývojářů: prozkoumat herní rovnováhu, zanalyzovat
strategie, které známe z vlastní zkušenosti, a zjistit, jak změna některých parametrů hry ovlivní její výsledek.
== Model
Abstrakci hry jsme implementovali v jazyce C# jako terminálovou aplikaci s řadou příkazů umožňujících spustit některou z předdefinovaných analýz s konkrétními strategiemi a parametry, nebo nechat proběhnout pouze jednu hru s podrobným výstupem za účely lazení. Její zdrojový kód je přístupný z https://gitlab.fi.muni.cz/xstepan1/secret-hitler.
Abstrakci hry jsme implementovali v jazyce C# jako terminálovou aplikaci s řadou příkazů umožňujících spustit některou
z předdefinovaných analýz s konkrétními strategiemi a parametry, nebo nechat proběhnout pouze jednu hru s podrobným
výstupem za účely lazení. Její zdrojový kód je přístupný z https://gitlab.fi.muni.cz/xstepan1/secret-hitler.
Pro jednoduchost uvažuje náš model pouze variantu pro 7 - 8 hráčů a limituje sociální interakce na komentáře ohledně
zákonů, které prezident a kancléř viděli během svého kola, a komentář ohledně stranické příslušnost v případě speciální
prezidentské pravomoci Investigate Loyalty.
Rozhraní hry a strategií (interface IStrategy) prošla během vývoje několika iteracemi. Jejich finální podoba se chová
takto:
* Na začátku hry je zavolána na každé strategii metoda SetUp, jež strategii sdělí, kterou roli zastává, a v případě, že
je fašistická, kdo jsou její kumpáni.
Pro jednoduchost uvažuje náš model pouze variantu pro 7 - 8 hráčů a limituje sociální interakce na komentáře ohledně zákonů, které prezident a kancléř viděli během svého kola, a komentář ohledně stranické příslušnost v případě speciální prezidentské pravomoci Investigate Loyalty.
* V průběhu jednoho kola jsou na strategiích volány relevantní metody dle potřeby: Vote během volební fáze,
DiscardAsPresident a DiscardAsChancellor během legislativní fáze, a metoda pro každou z prezidentských pravomocí.
Rozhraní hry a strategií (interface IStrategy) prošla během vývoje několika iteracemi. Jejich finální podoba se chová takto:
Na začátku hry je zavolána na každé strategii metoda SetUp, jež strategii sdělí, kterou roli zastává, a v případě, že je fašistická, kdo jsou její kumpáni.
V průběhu jednoho kola jsou na strategiích volány relevantní metody dle potřeby: Vote během volební fáze, DiscardAsPresident a DiscardAsChancellor během legislativní fáze, a metoda pro každou z prezidentských pravomocí.
Teprve jakmile skončí volební období, jsou všechny strategie informovány o jeho průběhu metodou OnRound: kdo hlasoval pro a proti, jaký zákon byl zvolen, jak to vláda komentovala, případně kdo byl zabit či jinak postižen speciální pravomocí prezidenta.
* Teprve jakmile skončí volební období, jsou všechny strategie informovány o jeho průběhu metodou OnRound: kdo hlasoval
pro a proti, jaký zákon byl zvolen, jak to vláda komentovala, případně kdo byl zabit či jinak postižen speciální
pravomocí prezidenta.
Kromě volby strategií umožňuje náš model odehrát hru způsobem, kdy volební období neprobíhají atomicky, ale po jednotlivých fázích (pro využití viz CFR níže). Lze změnit taky některá pravidla hry, konkrétně distribuci zákonů ve hře a délku Election Trackeru.
Kromě volby strategií umožňuje náš model odehrát hru způsobem, kdy volební období neprobíhají atomicky, ale po
jednotlivých fázích (pro využití viz CFR níže). Lze změnit taky některá pravidla hry, konkrétně distribuci zákonů ve hře
a délku Election Trackeru.
== Strategie
* Random -- Hraje dle pravidel, ale rozhoduje se náhodně a nekomentuje své chování.
* Simple -- Jako fašista nic nepředstírá a jde si za svým cílem: volit fašistické zákony a učinit Hitlera führerem. Jako liberál se snaží prosazovat liberální zákony a hlasovat pro spoluhráče, kteří volí liberální zákony, na základě interních vah. Jako Hitler se chová podobně jako liberál, ale kladně hodnotí hráče, jenž volí fašistické zákony.
* CounterSimple -- Strategie jež stojí proti Simple liberálovi -- implementována pouze pro roli fašisty a Hitlera. V první polovině hry se snaží chovat liberálně, aby si získala důvěru. Jakmile lze vyhrát dosazením Hitlera za kancléře, snaží se využít nabyté důvěry k tomu, aby byl zvolen.
* Paranoid -- Má, podobně jako Simple strategie, interní váhy, podle kterým ostatním hráčům důvěřuje, ale navíc penalizuje absenci a neshody v komentářích. Výše ztracené důvěry závisí na aktuální důvěře ve hráče a stádium hry. Takto je do hry vnesena pozitivní zpětná vazba. Fašisté se chovají podobně jako strategie CounterSimple.
* CFR -- Učí se hraním proti sobě samé (Monte Carlo Counterfactual Regret Minimization). Prvotní verze potřebovala pro každý pár (stav, akce) ukládat nasčítaný regret, stavový prostor hry byl však příliš velký (jedno kolo může mít okolo 100000 různých stavů, takových kol je ve hře 10-20). Snížili jsme proto objem informací, které si strategie o kole uchovává. Dívá se jen na současné kolo a nebere v ohled důvěru v ostatní hráče. Bohužel, toto rozhodnutí výrazně snížilo úspěšnost strategie.
Random::
Hraje dle pravidel, ale rozhoduje se náhodně a nekomentuje své chování.
Simple::
Jako fašista nic nepředstírá a jde si za svým cílem: volit fašistické zákony a učinit Hitlera führerem.
Jako liberál se snaží prosazovat liberální zákony a hlasovat pro spoluhráče, kteří volí liberální zákony, na základě
interních vah. Jako Hitler se chová podobně jako liberál, ale kladně hodnotí hráče, jenž volí fašistické zákony.
CounterSimple::
Strategie jež stojí proti Simple liberálovi -- implementována pouze pro roli fašisty a Hitlera.
V první polovině hry se snaží chovat liberálně, aby si získala důvěru. Jakmile lze vyhrát dosazením Hitlera za
kancléře, snaží se využít nabyté důvěry k tomu, aby byl zvolen.
Paranoid::
Má, podobně jako Simple strategie, interní váhy, podle kterým ostatním hráčům důvěřuje, ale navíc penalizuje absenci a
neshody v komentářích. Výše ztracené důvěry závisí na aktuální důvěře ve hráče a stádium hry. Takto je do hry vnesena
pozitivní zpětná vazba. Fašisté se chovají podobně jako strategie CounterSimple.
CFR::
Učí se hraním proti sobě samé (Monte Carlo Counterfactual Regret Minimization). Prvotní verze potřebovala pro každý pár
(stav, akce) ukládat nasčítaný regret, stavový prostor hry byl však příliš velký (jedno kolo může mít okolo 100000
různých stavů, takových kol je ve hře 10-20). Snížili jsme proto objem informací, které si strategie o kole uchovává.
Dívá se jen na současné kolo a nebere v ohled důvěru v ostatní hráče. Bohužel, toto rozhodnutí výrazně snížilo úspěšnost
strategie.
== Analýzy
=== Vliv distribuce zákonů
Rozdělení zákonů ve hře -- dle pravidel 11 fašistických a 6 liberálních -- je klíčovým prvkem hry. Pomáhá kompenzovat fakt, že liberálové jsou proti fašistům v převaze, vysokou pravděpodostí toho, že kdokoliv si může vytáhnout “3 červený”.
Rozdělení zákonů ve hře -- dle pravidel 11 fašistických a 6 liberálních -- je klíčovým prvkem hry. Pomáhá kompenzovat
fakt, že liberálové jsou proti fašistům v převaze, vysokou pravděpodostí toho, že kdokoliv si může vytáhnout
"3 červený".
=== Porovnání úspěšnosti strategií
Cílem této analýzy bylo srovnat naše strategie proti sobě a najít rovnovážný profil strategií (pouze z našeho seznamu strategií).
Navzájem proti sobě hrály všechny strategie - jeden tým (fašisti, liberálové, Hitler) byl vždy složen jen z jedné a té samé strategie. Dohromady jsme prozkoumali 180 různých profilů strategií (5 x 6 x 6). Každý profil proti sobě hrál 1000000 her s 10 opakováními (10 procesorových vláken, cca 40 minut času). Vypočítali jsme průměr počtu výher a proher a směrodatnou odchylku . Pokud předpokládáme normální rozdělení, můžeme vzít 2jako 95 % interval spolehlivosti podle pravidla 68-95-99.7.
Maximální směrodatná odchylka procenta výher je 0.001959. 95 % interval spolehlivosti je tedy méně než půl procenta, a proto se v následujících grafech neobjevují vymezení chyby (jsou moc malé na to, aby šla vidět).
Cílem této analýzy bylo srovnat naše strategie proti sobě a najít rovnovážný profil strategií
(pouze z našeho seznamu strategií).
Navzájem proti sobě hrály všechny strategie - jeden tým (fašisti, liberálové, Hitler) byl vždy složen jen z jedné a té
samé strategie. Dohromady jsme prozkoumali 180 různých profilů strategií (5 x 6 x 6). Každý profil proti sobě hrál
1000000 her s 10 opakováními (10 procesorových vláken, cca 40 minut času). Vypočítali jsme průměr počtu výher a proher
a směrodatnou odchylku . Pokud předpokládáme normální rozdělení, můžeme vzít 2jako 95 % interval spolehlivosti podle
pravidla 68-95-99.7.
Maximální směrodatná odchylka procenta výher je 0.001959. 95 % interval spolehlivosti je tedy méně než půl procenta,
a proto se v následujících grafech neobjevují vymezení chyby (jsou moc malé na to, aby šla vidět).
Na ose x vidíme různé fašistické strategie, na ose y jejich průměrný poměr výher. Jako nejúspěšnější strategie se jeví paranoid_fascist a simple_fascist. Oproti tomu je ale countersimple_fascist jediná strategie, která se dostala na úroveň 50 % výher proti všem liberálním protihráčům.
Na ose x vidíme různé fašistické strategie, na ose y jejich průměrný poměr výher. Jako nejúspěšnější strategie se jeví
paranoid_fascist a simple_fascist. Oproti tomu je ale countersimple_fascist jediná strategie, která se dostala na úroveň
50 % výher proti všem liberálním protihráčům.
U liberálních strategií jde jasně vidět, že simple_liberal má vysoký poměr výher oproti všem fašistickým strategiím.
Pokud si dáme všechny profily strategií do tabulky, můžeme zjistit, jaké strategie mají pro hráče smysl. Konkrétně můžeme najít pomocí minimax pravidla najít profil, který přináší oběma týmům nejmenší šanci drtivě prohrát oproti libovolné strategii. Pro naše strategie je to profil (countersimple_fascist, simple_liberal) s výherními poměry (0.4954, 0.5046).
Přirozená selekce
Předchozí výsledek nám napověděl, jak na tom jsou naše implementované strategie v turnaji proti sobě. Ovšem jen za předpokladu, že všechny strategie jsou reprezentovány v populaci stejně. Následující analýza počítá s tím, že strategie, které častěji vítězí se budou hrát častěji. Naopak prohrávající strategie se budou hrát méně a méně, až postupně v populaci vymřou.
Na začátku simulace mají všechny role stejnou pravděpodobnost na to, aby se objevily v další hře (1 / počet strategií). Po každé hře výherní tým získá v populaci novou kopii a naopak zástupci prohrávající strategie zemřou. Provedli jsme 250000 her s 20 opakováními, abychom získali představu o rozptylu počtu strategií v populaci. Strategie přežívaly jen tak dlouho, dokud v populaci existovaly strategie, nad kterými často vyhrávaly.
Pokud si dáme všechny profily strategií do tabulky, můžeme zjistit, jaké strategie mají pro hráče smysl. Konkrétně
můžeme najít pomocí minimax pravidla najít profil, který přináší oběma týmům nejmenší šanci drtivě prohrát oproti
libovolné strategii. Pro naše strategie je to profil (countersimple_fascist, simple_liberal) s výherními poměry
(0.4954, 0.5046).
=== Přirozená selekce
Předchozí výsledek nám napověděl, jak na tom jsou naše implementované strategie v turnaji proti sobě. Ovšem jen za
předpokladu, že všechny strategie jsou reprezentovány v populaci stejně. Následující analýza počítá s tím, že strategie,
které častěji vítězí se budou hrát častěji. Naopak prohrávající strategie se budou hrát méně a méně, až postupně v
populaci vymřou.
Na začátku simulace mají všechny role stejnou pravděpodobnost na to, aby se objevily v další hře (1 / počet strategií).
Po každé hře výherní tým získá v populaci novou kopii a naopak zástupci prohrávající strategie zemřou. Provedli jsme
250000 her s 20 opakováními, abychom získali představu o rozptylu počtu strategií v populaci. Strategie přežívaly jen
tak dlouho, dokud v populaci existovaly strategie, nad kterými často vyhrávaly.
U liberální populace není graf příliš zajímavý. Vidíme, že simple_liberal je silná strategie, která často vítězí a proto se dostává rychle do monopolu. Po 100000 krocích již v liberální populaci jiná strategie není.
Zajímavější situace je u strategií fašistů a Hitlera. Strategie simple a paranoid dokáží lépe využít slabších liberálních hráčů a okolo kroku 50000 je vedoucí strategií simple_fascist a simple_hitler. Poté, co se sníží počet paranoidních liberálů na méně než 5 % se dynamika strategií výrazně mění. Jediná fašistická strategie, která dokáže obstát proti simple_liberal je countersimple_fascist, a proto její počet v populaci roste od kroku 50000 výrazněji nahoru. Po 250000 krocích je u fašistů také téměř monopolem, u Hitlera není situace tak drtivá, ale countersimple_hitler je i zde jediná strategie, jejíž populace roste nahoru.
Analýza ukázala, že některé strategie jsou lepší na využívání jiných. Pokud v populaci postupně vymizí parazitovaná strategie, má její parazit problémy a může postupně také vymřít. To se stalo u simple i paranoid strategií.
U liberální populace není graf příliš zajímavý. Vidíme, že simple_liberal je silná strategie, která často vítězí a proto
se dostává rychle do monopolu. Po 100000 krocích již v liberální populaci jiná strategie není.
Zajímavější situace je u strategií fašistů a Hitlera. Strategie simple a paranoid dokáží lépe využít slabších liberálních
hráčů a okolo kroku 50000 je vedoucí strategií simple_fascist a simple_hitler. Poté, co se sníží počet paranoidních
liberálů na méně než 5 % se dynamika strategií výrazně mění. Jediná fašistická strategie, která dokáže obstát proti
simple_liberal je countersimple_fascist, a proto její počet v populaci roste od kroku 50000 výrazněji nahoru. Po
250000 krocích je u fašistů také téměř monopolem, u Hitlera není situace tak drtivá, ale countersimple_hitler je i
zde jediná strategie, jejíž populace roste nahoru.
Analýza ukázala, že některé strategie jsou lepší na využívání jiných. Pokud v populaci postupně vymizí parazitovaná
strategie, má její parazit problémy a může postupně také vymřít. To se stalo u simple i paranoid strategií.
== Závěr, možná rozšíření
TODO závěr
Je spousta způsobů, jak náš model a analýzy rozšířit. Další možnosti vývoje a analýz jsou například tyto:
Zdokonalit abstrakci hry. Přidat podporu pro hru 5-10 hráčů a rozšířit možnosti komunikace mezi nimi.
Přidat možnost hry člověka proti vybraným strategiím.
Napsat / natrénovat strategii pomocí metod posilovaného učení a porovnat s ostatními strategiemi, které jsme vytvořili.
Propojit strategii CFR s heuristikou snižující efektivní počet stavů hry, aby se dala natrénovat bez ztrát důležitých informací dějících se ve hře.
Zkoumat vliv ostatních parametrů a pravidel hry na dynamiku hry.
Analyzovat přirozenou selekci strategií s jinými počátečními distribucemi. V populaci, kde se vyskytují častěji paranoidní liberálové bude nejúspěšnější fašistická strategie pravděpodobně jiná, než tam, kde liberálové hráčům více věří.
* Zdokonalit abstrakci hry. Přidat podporu pro hru 5-10 hráčů a rozšířit možnosti komunikace mezi nimi.
* Přidat možnost hry člověka proti vybraným strategiím.
* Napsat / natrénovat strategii pomocí metod posilovaného učení a porovnat s ostatními strategiemi, které jsme vytvořili.
* Propojit strategii CFR s heuristikou snižující efektivní počet stavů hry, aby se dala natrénovat bez ztrát
důležitých informací dějících se ve hře.
* Zkoumat vliv ostatních parametrů a pravidel hry na dynamiku hry.
* Analyzovat přirozenou selekci strategií s jinými počátečními distribucemi. V populaci, kde se vyskytují častěji
paranoidní liberálové bude nejúspěšnější fašistická strategie pravděpodobně jiná, než tam, kde liberálové hráčům více
věří.
== Zdroje / Inspirace
Hledání na Githubu nám lehce ukáže, že nejsme první, kdo Secret Hitlera v nějakém programovacím jazyce napsal. My jsme ale potřebovali mít jednoduchý způsob, jak měnit pravidla hry a srovnávat různé strategie, které jsme sami vymýšleli. Proto jsme si navrhli vlastní implementaci, která jednoduše umožňuje spouštět simulace vysokého počtu her (řádově miliónů) v krátkém čase. Žádnou dostupnou implementací jsme se tedy neinspirovali.
Většinu strategií jsme napsali podle vlastního uvážení a našich zkušeností s hrou. Částečně jsme se inspirovali i neoficiálním návodem na hru.
Algoritmus pro obecnou minimalizaci CFR jsme převzali z GitHub repozitáře counterfactual-regret-minimization. Přepsali jsme jej z C++ do C# a přidali podporu pro Secret Hitlera.
Analýzy populací jednotlivých strategií v čase jsou inspirovány webovou výuokovou hrou o teorii her The Evolution of Trust - ta se zaměřuje specificky na Dilema vězně.
Hledání na Githubu nám lehce ukáže, že nejsme první, kdo Secret Hitlera v nějakém programovacím jazyce napsal. My
jsme ale potřebovali mít jednoduchý způsob, jak měnit pravidla hry a srovnávat různé strategie, které jsme sami
vymýšleli. Proto jsme si navrhli vlastní implementaci, která jednoduše umožňuje spouštět simulace vysokého počtu her
(řádově miliónů) v krátkém čase. Žádnou dostupnou implementací jsme se tedy neinspirovali.
Většinu strategií jsme napsali podle vlastního uvážení a našich zkušeností s hrou. Částečně jsme se inspirovali i
neoficiálním návodem na hru.
Algoritmus pro obecnou minimalizaci CFR jsme převzali z GitHub repozitáře counterfactual-regret-minimization. Přepsali
jsme jej z C++ do C# a přidali podporu pro Secret Hitlera.
Analýzy populací jednotlivých strategií v čase jsou inspirovány webovou výuokovou hrou o teorii her The Evolution of
Trust - ta se zaměřuje specificky na Dilema vězně.
Algoritmus byl implementován na základě paperu An Introduction to Counterfactual Regret Minimization.