====== Specifikace ====== Podrobná specifikace toho, co musí agent umět a jak musí vypadat, aby mohl být otestován automatickým evaluačním systémem. ===== Podpůrné kódy ===== Kódy najdete ve studentském repozitáři [[https://gitlab.fel.cvut.cz/kui-student-materials/kui-reversi|KUI Reversi]]: - Vytvořte si někde na svém disku pracovní adresář, např. ''kui-reversi''. - Kódy do něj můžete dostat dvěma způsoby: * Pomocí ''git''u: - Naklonujte si repozitář kui-reversi: cd kui-reversi git clone https://gitlab.fel.cvut.cz/kui-student-materials/kui-reversi.git . Nezapomeňte na ''.'' na konci předchozího příkladu: tečka říká ''git''u, aby obsah repozitáře naklonoval do aktuálního pracovního adresáře. * Pomocí ZIP archivu: - Stáhněte si kódy z repozitáře [[https://gitlab.fel.cvut.cz/kui-student-materials/kui-reversi|KUI Reversi]] jako ZIP soubor (nebo si přímo stáhněte [[https://gitlab.fel.cvut.cz/kui-student-materials/kui-reversi/-/archive/master/kui-reversi-master.zip|kui-reversi-master.zip]]). - Uvnitř staženého archivu najdete složku ''kui-reversi-master''. Extrahujte její obsah do složky ''kui-reversi''. (Ve složce ''kui-reversi'' byste neměli vidět podadresář ''kui-reversi-master''.) V podpůrných kódech najdete: * ''player.py'' - modul se šablonou pro vašeho hráče, a také * grafické (''reversi_creator.py'') a terminálové (''headless_reversi_creator.py'') prostředí umožňující hru spustit a zahrát. ===== Soubor k odevzdání ===== Odevzdávat budete ZIP archiv obsahující váš modul ''player.py'' a případně další vaše moduly, které modul ''player.py'' potřebuje. **Tyto soubory musí být v kořeni archívu, archív nesmí obsahovat žádné adresáře!** Váš ZIP archív (a jen tento soubor) nahrajete do [[https://cw.felk.cvut.cz/brute/|BRUTE]]. Se zdrojovými kódy vašeho hráče (a vašich pomocných modulů) můžete nahrát nějaké datové soubory, pokud nutně potřebujete. Ale velikost odevzdávaného ZIP archivu nesmí přesáhnout 1MB. ===== Třída MyPlayer a její metody ===== Balíček také obsahuje soubor ''player.py'' s třídou ''MyPlayer''. V ní upravte metodu ''select_move()'' tak, aby realizovala strategii vašeho hráče. Docstring popisující třídu MyPlayer je omezen na **80 znaků**, neboť se objeví v tabulce s výsledky. Zkuste v docstringu velice stručně popsat hlavní princip vašeho hráče. Vašeho hráče (v souboru 'player.py') implementujete ve formě třídy ''MyPlayer'' (soubor '/reversi/player.py' v archivu výše), která obsahuje tyto metody: ^ metoda ^ vstupní parametry ^ výstupní parametry ^vysvětlení ^ | ''%%__%%init%%__%%'' | ''my_color'', ''opponent_color'', ''board_size'' | //žádné// | Vytvoření hráče dané barvy s protihráčem druhé barvy. Velikost hrací plochy máte v konstruktoru pro případnou přípravu heuristických ohodnocení. | | ''get_all_valid_moves'' | ''board''| seznam souřadnic | Metoda vrátí seznam všech korektních tahů.| | ''select_move'' | ''board''| souřadnice | Metoda vrátí tuple souřadnic na hrací desce, kam váš hráč chce umístit hrací kámen. **Tuto metodu musíte dopsat.**| Samozřejmě není vhodné implementovat celou strategii jen v metodě ''select_move()''. Doporučujeme zamyslet se nejprve nad dekompozicí celého problému, ve třídě ''MyPlayer'' implementovat i další metody řešící nějaké podproblémy vaší strategie a tyto metody jen ze ''select_move()'' volat. ===== Další pravidla a omezení ===== * Můžete používat svoje data, které použije konstruktor hráče. Konstruktor hráče (volá se jen 1x, na začátku partie) má limit 60 sekund, takže má dost času si vše promyslet. * Nepoužívejte vícevláknové algoritmy, respektive, nepomůžete si tím. Virtuální stroj v AE má vyhrazeno vždy jen jedno jádro. * Odevzdejte hráče v řádném termínu. Možná na konci semestru spustíme ještě dodatečný turnaj, pokud bude potřeba, ale nespoléhejte na to. * Penalty za pozdní odevzdání se odpočítávají jen 1x.