====== 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 [[https://cmp.felk.cvut.cz/ulohy/|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'' (2x2 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 [[http://docs.python.org/library/functions.html#tuple|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í ===== * zapisovat cokoli na disk, musí si tedy udržovat vše v paměti * snažit se navázat spojení s jiným počítačem, jiným procesem a pod. * být nepatřičně zvídavý, např. prohlížet obsah disku * snažit se nepoctivě ovlivňovat soupeřovo rozhodování * ... 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 ===== * hráč nebude hrát během turnaje sám proti sobě * každá možná dvojice bude hrát proti sobě právě jednou * payoff matice budou vždy symetrické - nezáleží zda jste hráč A či B * může se stát, že vzájemná kooperace bude výrazně výhodnější než racionální strategie * může se stát, že dilema nebude, ale nic super záludného to nebude ===== 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 {{courses:a4b99rph:cviceni:files:pd_codes.zip|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.