Search
V rámci týmové úlohy, která je obsahem posledních 2 cvičení RPH, je Vaším úkolem naprogramovat rozhodování pro agenta ztraceného v bludišti a generátor bludišť, které má vytvářet co nejzáludnější bludiště pro agenty. Odevzdání týmové úlohy není povinné, ale můžete za ni získat až 15 bodů, viz Hodnocení úlohy. Na úloze budete pracovat týmově, v každém týmu mohou být maximálně 2 studenti, kteří spolu na úloze mohou bezmezně spolupracovat, jejich práce bude hodnocena jako jeden celek.
Vaším úkolem je vytvořit dvě doplňující se komponenty:
Metrikou vašich řešení je normalizovaný počet kroků v bludišti. Čím menší počet kroků bude stačit vašemu agentovi v cizím bludišti, tím lépe pro vás, a čím větší počet kroků budou hledat cíl cizí agenti ve vašem bludišti, tím lépe pro vás.
Agent se pohybuje v bludišti, což je čtvercová mřížka. Pohyb v bludišti se řídí následujícími pravidly:
NORTH
SOUTH
EAST
WEST
START
OBSTACLE
GOLD
EMPTY
step_limit
vision
Cílem agenta je dostat se ze své počáteční pozice na známou pozici zlata a zpátky na start v co nejmenším normalizovaném počtu kroků. Tvůrce bludište se snaží vytvořit bludiště, ve kterém agent cestou ke zlatu a zpět udělá co nejvíce normalizovaných kroků.
Hodnocení bude rozděleno na 3 části, za které můžete získat v celkovém součtu 15 bodů:
Pro turnaje bude zvoleno několik velikostí bludiště (větší než 5×5, ne nutně čtvercová bludiště, a menší než 70×70). Pokud agent v bludišti nenajde zlato, bude to bráno tak, že v bludišti strávil maximální možný počet kroků. Pokud vaše bludiště bude infeasible (nebude v něm existovat cesta od startu ke zlatu), bude to bráno jako že v něm cizí agenti strávili hledáním zlata 0 kroků. Turnaj bude vyhodnocen offline po deadline úlohy.
Vaším úkolem je vytvořit v souboru agent.py třídu Agent s následující specifikací:
agent.py
Agent
__init__
maze_size
start_position
gold_position
select_action
observation
action
Observation
position
'NORTH', 'SOUTH', 'WEST', 'EAST
ACTIONS
maze_keeper.py
Pozorování předávané agentovi je instance třídy Observation. Instance třídy Observation má 2 členské proměnné:
(12,3)
{'NORTH': 6, 'SOUTH': 1, 'WEST': 0, 'EAST': 6}.
Pokud se agent pokusí posunout směrem do překážky nebo mimo bludiště, zůstane na místě. Simulace končí po přesunu agenta na start (Start) po tom, co předtím agent prošel přes políčko se zlatem (Gold). Agent si smí (a je to doporučno) držet historii stavů a z ní budovat znalost bludiště.
Vaším úkolem je vytvořit generátor bludiště ve funkci generate_maze v souboru maze_generator.py s následující specifikací:
generate_maze
maze_generator.py
layout
(M, N)
'EMPTY', 'OBSTACLE', 'GOLD', 'START
'GOLD
'START
'EMPTY
V úloze zatím nejsou nastaveny žádné časové limity na krok nebo generování bludiště. Avšak celkem je na ohodnocení vašeho řešení 15 minut, během kterých jste vyzvání k vygenerování 5 bludišť o rozměrech od 5×5 do 70×70, a váš agent musí projít ~40 bludišti o rozměrech stejného rozsahu.
Máte k dispozici zdrojové kódy simulátoru a kostry implementací agenta a generátoru bludiště: gitlab repo
Soubor obsahuje následující moduly:
simulation.py
visualization.py
Agent smí s bludištěm interagovat POUZE pomocí třídy MazeKeeper. Agent má zakázáno snažit se získat více informací o bludišti než je uvedeno ve specifikaci.
MazeKeeper
python3 simulation.py
VISUALIZATION_OBJECT_MAPPING
Do BRUTE nahrajte soubor maze_keeper.zip, který musí obsahovat soubor agent.py s třídou Agent a soubor maze_generator.py s funkcí generate_maze. (Samozřejmě, pokud ve svém řešení využíváte nějaké další vlastní moduly, musíte nahrát i je).
maze_keeper.zip