Podrobná specifikace toho, co musí hráč umět a jak musí vypadat, aby mohl hrát turnaj s ostatními.
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.
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. |
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
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.
Zkrátka má pouze hrát.
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é.
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.
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.