====== 01 Úvod, Prohledávání ====== * [[https://cyber.felk.cvut.cz/study/computer-labs/|počítačové laboratoře]] na [[http://cyber.felk.cvut.cz|K133]] a bezpečnost práce * https://www.cesnet.cz/sluzby/owncloud/ * https://gitlab.fel.cvut.cz * **prohledávání**: vysvětlení * zadání první samostatné úlohy ===== Kvíz I - bonusový ===== /* * startovní kvíz, na n-puzzle * bodovaný, bonusových 0.5bodu * řešení odevzdat do BRUTE do úlohy **lab01quiz**, do půlnoci dne, kdy běží dané cvičení * formát: textový soubor, fotka řešení na papíře, pdf - co Vám nejlépe vyhovuje a dokážeme to přečíst */ /*==== Kvíz ====*/ > {{page>courses:b3b33kui:internal:quizzes#Plánování letových hladin}} ===== Prohledávání I ===== * vysvětlení /*, on-line výuka*/ * budeme diskutovat, jak hledat, když nevím jak je cíl daleko * co znamená, že algoritmus prohledávání je //úplný, optimální//. /* * prezentace {{ :courses:b3b33kui:cviceni:program_po_tydnech:searchi_example_cz.pdf |SearchI_example_cz.pdf}}*/ /* ==== Kvíz ==== */ > {{page>courses:b3b33kui:internal:quizzes#Zapomnětlivý cestovatel}} ===== Zadání úlohy: hledání cesty v bludišti ===== V prostředí [[courses:b3b33kui:semestralni_ulohy:1_prohledavani_stavoveho_prostoru:start|Prohledávání stavového prostoru]] naprogramujte nalezení nejlevnější cesty. Nezapomeňte, že cena přechodu mezi pozicemi nemusí být nutně všude stejná. ===== Seznámení s prostředím KUIMaze ===== * [[courses:b3b33kui:semestralni_ulohy:kuimaze:00_install|Stáhněte a zprovozněte si prostředí KUIMaze]] * Projděte si sekci [[..:..:semestralni_ulohy:1_prohledavani_stavoveho_prostoru:start#jak_na_to|Jak na to]] v popisu úlohy [[..:..:semestralni_ulohy:1_prohledavani_stavoveho_prostoru:start|1. Prohledávání stavového prostoru]] * Vytvořte si prostředí ''SearchProblem'', tj. instanci třídy ''kuimaze2.SearchProblem'', s mapou danou obrázkem v souboru ''maps/easy_intro/easy_intro_1.png'': >>> from kuimaze2 import SearchProblem, State >>> from kuimaze2.map_image import map_from_image >>> map_path = 'maps/easy_intro/easy_intro_1.png' >>> env = SearchProblem(map_from_image(map_path), graphics=True) * Vykreslete si prostředí metodou ''render()'': >>> env.render() Měli byste vidět obrázek podobný následujícímu: {{ :courses:b3b33kui:cviceni:program_po_tydnech:easy_intro_1.png?200 |}} **Nechte okno s obrázkem otevřené, nezavírejte ho!** * Zkuste použít různé metody, které prostředí nabízí: >>> start = env.get_start() >>> start State(r=0, c=1) >>> env.get_goals() # Notice the different return type, this returns a Set {State(r=2, c=4)} >>> actions = env.get_actions(start) >>> actions [, , , ] >>> new_state, trans_cost = env.get_transition_result(start, actions[1]) >>> new_state State(r=0, c=2) * Zkuste zavolat ''env.render()'' znovu. Změnilo se zobrazení nějak? * Zkuste přidat do volání metody ''render()'' další parametry: >>> texts = {State(0,0): "S", State(0,1): "1"} >>> env.render(texts = texts, current_state=State(0,0), next_states=[State(1,0)]) * Prozkoumejte ''example_search.py'' a zkuste pochopit, co se tam děje. * Zkuste manuálně zkonstruovat cestu ze startu do cíle a vrátit ji z metody ''Agent.find_path()''. * Zkuste si takového agenta odevzdat do [[https://cw.felk.cvut.cz/brute/|BRUTE]] do úlohy ''01-easy_search''. ===== Prohledávácí rozcvička - nepovinná úloha 01-easy_search ===== Ačkoli jste mnozí již netrpěliví se rovnou vrhnout na implementaci algoritmu A*, zkuste napřed jednodušší algoritmy (BFS, UCS) a jednoduchá bludiště. Je to menší problém, bude se vám snáz krokovat a debugovat, ověříte si správné zacházení s prostředím. Rozmyslete si trochu nad papírem datové struktury, které budete potřebovat. Zkuste implementovat různé strategie/algoritmy. Pokud je implementujete dostatečně obecným způsobem, většina vašeho kódu půjde použít i pro algoritmus A* (což je první povinná úloha). Zkuste svůj algoritmus v modulu ''agent.py'' odevzdat do [[https://cw.felk.cvut.cz/brute/|BRUTE]] a prozkoumejte, jakou zpětnou vazbu vám hodnoticí skript poskytl. ===== 1. povinná úloha: Hledání cesty v bludišty algoritmem A* ===== V [[..:..:semestralni_ulohy:1_prohledavani_stavoveho_prostoru:start|první povinné úloze]] je vaším úkolem naimplementovat algoritmus A*, který vám bude představen nejpozději na druhé přednášce. Pokud jste ale "Prohledávací rozcvičku" zvládli rychle a nedělá vám potíže programovat v Pythonu, můžete začít pracovat na první povinné úloze. Nezapomeňte, že cena za přechod z jednoho stavu do druhého nemusí být stále stejná. ===== různé ===== * [[http://tristanpenman.com/demos/n-puzzle/|visualizace]] různých prohledávacích algoritmů demonstrována na problému n-1 puzzle