Vězňovo dilema - strategie

Vězňovo dilema je hra pro dva hráče. Je založena na příběhu dvou vězňů: dva kamarádi spolu páchali zločiny tak dlouho, až je jednou chytili. Neměli ale dost důkazů a ačkoliv je podezřívali z mnoha věcí, dokázat jim mohli jen tu poslední. Posadili je tedy každého do jedné místnosti a nabídli jim nižší trest za to, že svého kamaráda zradí.

Každý vězeň tedy má dvě možnosti, buď spolupracovat s tím druhým (cooperate), nebo ho zradit (defect). Pokud oba spolupracují, nic moc jim nedokážou a dají jim menší trest. Pokud jeden spolupracuje a druhý ho zradí, tak zrádce odejde bez trestu a spolupracující dostane dlouhý trest. Konečně, pokud se zradí oba navzájem, dostanou oba trest, který je sice větší, než kdyby spolupracovali, ale menší než ten, co by dostal spolupracující, kdyby spolupracoval jen jeden z nich.

Nahradíme-li délku trestu body (tj. kratší trest = více bodů) a vězně hráči, můžeme se na hru podívat z pohledu teorie her. Dostáváme hru s následující matici odměn:

  C D
C 3 0
D 5 1

V matici jsou na řádcích moje volby a ve sloupcích volby protihráče. Čísla určují počet bodů, které dostanu v každé situaci (druhý hráč má matici stejnou).

Když se na matici podíváme, tak můžeme určit, jak budou hráči hrát. Racionální hráč bude nejspíš uvažovat nějak takto:

Stejným způsobem bude uvažovat i protihráč, a oba navzájem se tedy zradí a dostanou jeden bod. Pokud se vězňovo dilema hraje jen jednou, nemohou racionální hráči dosáhnout jiného výsledku (pokud se předtím nedomluví a nevěří si).

Iterované vězňovo dilema

Mnohem zajímavější situace ale nastane, když se vězňovo dilema hraje opakovaně mezi dvěma hráči, kteří (oba) mají za úkol maximalizovat svůj bodový zisk. V takové situaci totiž existuje možnost oplatit zradu v předchozím kole a existuje tedy i možnost, aby oba hráči spolupracovali.

Pro iterované vězňovo dilema a pro vznik spolupracujících strategií je ale důležité, aby hráči nevěděli, kolikrát se bude vězňovo dilema opakovat (jinak se vyplatí v posledním kole zradit, díky tomu se ale vyplatí zradit i v předposledním kole, atd.).

Strategie pro iterované vězňovo dilema

Pro iterované vězňovo dilema existuje několik jednoduchých strategií:

Samozřejmě lze vymyslet ještě spoustu dalších strategií. Pro inspiraci se můžete podívat do Axelrodova článku o turnaji, který provedl v 80. letech.

Soutěž na cvičeních

V dnešních zdrojových kódech najdete jednoduchý prográmek, který spouští turnaj strategií, které najde v adresáři strategies. Očekává, že strategie je Pythonovský soubor, ve kterém je funkce create_strategy(). Tato funkce vrací samotnou strategii, jako objekt s metodami reset, last_move, author_name, a strategy_name. Jméno souboru a strategie si vyberte sami, nějaké unikátní. Ve třídě potom implementujte metody strategy_name a author_name, které vrací jméno strategie respektive jméno autora (vaše).

Dále musíte implementovat metodu reset, která se volá vždy po skončení hry proti jiné strategii (předtím, než začnete hrát s jinou strategií). Nejdůležitější metodou je play, která vrací váš další tah. Vracejte konstanty C nebo D. Skrz metodu last_move se dozvíte po každém tahu, jak hrál váš soupeř.

V __main__ bloku v souboru tournament.py je nastaven adresář, ve kterém se hledají strategie.

Úkol

Dnešní úkol je jednoduchý - napište a pošlete strategii pro vězňovo dilema. Pokud pošlete nějakou strategii už do turnaje během cvičení a nechcete ji měnit, nemusíte posílat nic dalšího.

Termín:

pondělí 28. 2. 2022

Body: