Table of Contents

Hráč

Podrobná specifikace toho, co musí hráč umět a jak musí vypadat, aby mohl hrát turnaj s ostatními.

Soubor k odevzdání

Veškerý potřebný kód, který hráč potřebuje ke hraní musí být v souboru player.py. Tento soubor (a jen tento soubor) nahrajete do BRUTE. Hráč může importovat některé standardní moduly Pythonu (Python Standard Library), např. random nebo typing.

Třída MyPlayer a její metody

Uvědomme si, že hráči spolu nekomunikují přímo, ale přes prostředníka, který bude hráče volat a archivovat jejich výsledky. Hráče (v souboru player.py) implementujete ve formě třídy MyPlayer, která bude poskytovat tyto metody:

metoda vstupní parametry výstupní parametry vysvětlení Časový limit v turnaji
__init__ payoff_matrix (2×2 seznam dvojic), number_of_iterations (integer) žádné Vytvoření instance hráče. Hráč vždy dostane payoff_matrix, ale počet tahů ve hře (number_of_iterations) dostat může a nebo nemusí. Metoda si musí poradit s tím, že bude volaná s 1 parametrem a nebo se 2 parametry (tj. nesmí ohlásit chybu, pokud je volaná jen s 1 parametrem). Hráč si vstupní parametry typicky poznamená a může je použít pro zvolení strategie. Detaily ohledně formátu a užití payoff_matrix najdete v souborech ke stažení (viz dole). 60 s
select_move žádné False nebo True Vygenerování tahu. False znamená spolupracovat (COOPERATE), True znamená podvést (DEFECT). 1 s
record_last_moves (my_last_move, opponent_last_move) (False nebo True) žádné Hráč přijme oba poslední tahy, svůj i soupeřův. Oba tahy typu boolean, buď False (=COOPERATE) a nebo True (=DEFECT) a hráč si tahy může přidat do své paměti. Přijímat svoje tahy se může zdát zbytečné, ale poslouží v případě varianty hry se šumem v komunikaci. 1 s

Popisný řetězec

Třída - hráč se bude identifikovat popisem ve formě doc-stringu. Maximální délka je 80 znaků. Popis by měl co nejlépe, ale stručně, vysvětlovat, jak hráč hraje. Příklad:

class MyPlayer:
    '''Hrac hraje, co ho napadne, vetsinou C'''  # <--- Tento docstring změňte tak, aby popisoval základní princip vašeho hráče
    def __init__ #dale pak pokracuje standardni kod

Payoff_matrix

Dvourozměrné pole dvojic. První řádek a sloupec, index 0, odpovídají COOPERATE, druhý řádek a sloupec pak volbě DEFECT.

Zisk hráče A v případě že hraje COOPERATE a hráč B DEFECT je tedy

payoff_matrix[0][1][0]
Poslední index odpovídá hráči, A=0, B=1. Symbolicky lze také rovnou psát:
payoff_matrix[COOPERATE][DEFECT][0]

V našich hrách a turnajích budeme uvažovat pouze “symetrickou” payoff matici. Hráč tedy nemusí vědět, zda je hráč A či B, mají rovné příležitosti i rizika. Příklad matice naleznete níže.

Hráč nesmí

Zkrátka má pouze hrát.

Z tohoto důvodu je v BRUTE zakázán import mnoha standartních modulů, nejvýznamější z nich jsou os, sys, importlib a inspect. Stejně tak je zakázáno používat standardní funkci open().

Turnaj(e)

Na konci budou hrát hráči několik turnajů. V každém turnaji je cílem maximalizovat svůj celkový zisk, tedy součet všech dílčích zisků v jednotlivých kolech mít co největší.

Jednu část hodnocení bude tvořit souboj vašeho hráče proti sobě samému. Hráč to ovšem nebude explicitně vědět, musí na to přijít sám. Bodový zisk se započítá oběma stranám - v případě souboje se sebou samým si tedy váš hráč přijde na součet zisku hráče A i B. Druhou částí hodnocení budou turnaje typu každý proti každému.

Turnajů bude několik. U základní varianty bude matice zisků známa dopředu. U další varianty turnaje se hráč dozví matice zisků až před začátkem hry. Informace o počtu iterací předána být může i nemusí (alespoň u jednoho turnaje předána bude). Hráč bude muset rozhodnout sám jakou strategii hrát. Hráč může svoji strategii během hry měnit jakkoli chce.

Jeden z turnajů bude zatížen šumem v komunikaci. S nějakou malou pravděpodobností se může váš či soupeřův tah obrátit. Hra se šumem dobře modeluje některé reálné situace, detailnější diskuse viz např. http://www-personal.umich.edu/~axe/research/PD_with_Noise.pdf Doufáme, že šumová varianta hry podnítí kreativitu a přinese nová zajímavá řešení.

Odpovědi na dotazy

Matice pro první turnaj a testování

Matice, která bude použita pro první turnaj:

C D
C 4,4 1,6
D 6,1 2,2

tedy v Pythonu:

payoff_matrix = ( ((4,4),(1,6)) , ((6,1),(2,2)) )

Ukázky různých typů matic

Kromě klasických matic pro vězňovo dilema (jako je např. matice pro první turnaj a testování) mohou být použity i jiné typově odlišné matice (nejen v našich turnajích).

Matice, kde není dilema a dominantní strategie (D) je tedy jasná:

C D
C 2,2 4,6
D 6,4 10,10

Jiný typ matice vedoucí na alternující strategii:

C D
C 5,5 1,70
D 70,1 2,2

Doporučujeme pro testování vašich algoritmů vzít v úvahu rozličné typy payoff matic.

Soubory ke stažení

Pokud už máte implementovaného hráče, můžete si stáhnout a prohlédnout kódy pro velmi jednoduché otestování: game.py, který implementuje hru, a test_game.py, který umí postavit dva hráče proti sobě a nechá je zahrát hru. Pročtěte si tyto kódy, a komentáře v nich a zkuste je spustit se svým hráčem (test_game.py postaví proti sobě vaše dva identické hráče). Soubory si samozřejmě můžete libovolně upravit a dělat s nimi experimenty.