====== 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:kuimaze:00_instalace|Stáhněte a nainstalujte si prostředí KUIMaze]] * Vytvořte prostředí bludiště, tedy instanci třídy ''kuimaze.InfEasyMaze'' s mapou danou obrázkem ''maps/easy_intro/easy_intro_1.bmp'': >>> import kuimaze >>> MAP = 'maps/easy_intro/easy_intro_1.bmp' >>> env = kuimaze.InfEasyMaze(map_image=MAP) * Zobrazte si mapu bludiště metodou ''render()'': >>> env.render() Měli byste vidět následující obrázek: {{ :courses:b3b33kui:cviceni:program_po_tydnech:easy_intro_1.png?200 |}} **Okno s obrázkem si zatím nechte otevřené, nezavírejte ho!** * Zkuste odhadnout, co dělá metoda ''reset()''. Porovnejte výsledek následujícího volání s obrázkem bludiště: >>> env.reset() ((1, 0, 0.0), (4, 2, 0.0)) * Zkuste odhadnout, co dělá metoda ''expand()'': >>> env.expand((1,0)) [[(2, 0), 1.0], [(0, 0), 1.0]] * Zkuste znovu zavolat ''env.render()''. Změnil se nějak obrázek? * Prozkoumejte ''easy_example.py'' a pokuste se pochopit, co se v něm děje. * Zkuste zkonstruovat cestu ze startu do cíle ručně a upravte metodu ''Agent.find_path()'' tak, aby natvrdo vracela tuto vaši cestu. * Zkuste tohoto svého Agenta odevzdat do BRUTE do úlohy 01-easy-search, viz níže. ===== Prohledávácí rozcvička - nepovinná úloha 01-easy_search ===== Ačkoli mnozí jste již netrpěliví skočit na implementaci algoritmu A*, zkuste napřed hledání cesty v jednoduchém bludišti. 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 na jednodušším problému. Základní komunikační rozhraní je stejné, tedy import kuimaze MAP = 'maps/easy_intro/easy_intro_1.bmp' env = kuimaze.InfEasyMaze(map_image=MAP) observation = env.reset() # returns start_pos, goal_pos position = observation[0][0:2] # start position positions_with_costs = env.expand(position) # list of lists [pos,cost], i.e. [[pos1, cost1],[pos2,cost2],...] Odevzdávat budete také modul ''agent.py'', přesně podle [[courses:b3b33kui:semestralni_ulohy:1_prohledavani_stavoveho_prostoru:specifikace|specifikace]]. Vyzkoušejte různé strategie prohledávání. Pokud napíšete dostatečně obecně, stejný kód bude fungovat i pro případ algoritmu A*. Odevzdávat budete do [[https://cw.felk.cvut.cz/upload/|Upload systému]]. Rozmyslete si trochu nad papírem datové struktury, které budete potřebovat. ===== programování hledání ===== * Python [[https://docs.python.org/3/library/queue.html|queue]] nebo [[https://docs.python.org/3.6/library/heapq.html|heapq]] vám mohou pomoci při ukládání uzlů prohledávacího stromu. ===== různé ===== * [[http://tristanpenman.com/demos/n-puzzle/|visualizace]] různých prohledávacích algoritmů demonstrována na problému n-1 puzzle