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 upload systému.

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í
__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).
move žádné False nebo True Vygenerování tahu. False znamená spolupracovat (COOPERATE), True znamená podvést (DEFECT).
record_opponents_move opponent_move (False nebo True) žádné Hráč přijme opponent_move (tah protihráče). Ten je opět buď False (=COOPERATE) a nebo True (=DEFECT) a hráč si tah může přidat do své paměti.

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 pokud možno vysvětlovat jak hráč hraje. Příklad:

class MyPlayer:
    '''Hrac hraje co ho napadne, vetsinou C'''
    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.

Hráč nesmí

Zkrátka má pouze hrát.

Turnaj(e)

Na konci budou hrát hráči systémem každý s každým. Cílem je maximalizovat svůj celkový zisk za celý turnaj, tedy součet všech dílčích zisků v jednotlivých kolech a soubojích. Turnajů může být více. U základní varianty bude známa matice zisků/ztrát dopředu, budete mít tedy možnost nastavit vaše hráče. U pokročilé varianty bude matice zisků/ztrát předána hráči 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 měnit svoji strategii během hry, pokud tak uzná za vhodné.

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)] ]

Pro vaše vlastní testování můžete, a také to doporučujeme, použít i jiné matice.

Soubory ke stažení

Pokud už máte implementovaného hráče, můžete si stáhnout a prohlédnout pd_codes.zip. Tento ZIP archiv obsahuje dva soubory: '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.