Search
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. Hráč může importovat standardní python moduly (Python Standard Library, napr. random)
player.py
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:
MyPlayer
__init__
payoff_matrix
number_of_iterations
move
record_last_moves
(my_last_move, opponent_last_move)
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.
COOPERATE
DEFECT
Zisk hráče A v případě že hraje COOPERATE a hráč B DEFECT je tedy
payoff_matrix[0][1][0]
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.
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()
os
sys
importlib
inspect
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 mít co největší. 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é.
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í.
Součástí turnajů bude i souboj vašeho hráče proti sobě. Nebude to ovšem explicitně vědět, musí na to příjí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.
Matice, která bude použita pro první turnaj:
tedy v Pythonu:
payoff_matrix = ( ((4,4),(1,6)) , ((6,1),(2,2)) )
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á:
Jiný typ matice vedoucí na alternující strategii:
Doporučujeme pro testování vašich algoritmů vzít v úvahu rozličné typy payoff matic.
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.