====== 01 Úvod, Prohledávání ====== ===== Výsledky učení ===== Po tomto cvičení student * ví, kde si říct o pomoc, když se zasekne (na cvičení, [[https://cw.felk.cvut.cz/forum/forum-1944.html|na diskusním fóru]], na [[https://discordapp.com/channels/690919691404967977/754330370182480003|Discordu]], emailem učiteli); * rozumí způsobu, jakým bude v předmětu hodnocen; * rozumí pravidlům pro použití AI a pro předcházení plagiarismu; * rozezná diskrétní prohledávací problém, umí identifikovat stavy a akce, umí ohodnotit kandidátské řešení/plán; * rozumí pojmům //úplný// a //optimální//; * má nainstalovaný Python a prostředí ''kuimaze2''; * chápe zadání první povinné úlohy ''02-search''; * umí použít veřejné rozhraní prostředí ''kuimaze2.SearchProblem''; * umí odevzdat řešení úlohy do BRUTE. ===== Úvod ===== * [[https://cw.fel.cvut.cz/wiki/courses/b3b33kui/start#hodnoceni|Požadavky a hodnocení předmětu]] * [[https://cw.fel.cvut.cz/wiki/help/common/plagiaty_opisovani|Pravidla samostatné práce]] a [[courses:b3b33kui:ai|pravidla pro použití nástrojů AI]] * Počítačové laboratoře a užitečné služby * [[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 * [[courses:b3b33kui:cviceni:python_install:start|Instalace Pythonu]] ===== 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}} ===== 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() [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''. ===== 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. * Část bodů je za nalezení validní cesty do cíle, část za nalezení optimální cesty; za prozkoumání větší oblasti než je potřeba jsou naopak bodové srážky. Ale pozor: co stačilo v této úloze nemusí stačit v první povinné úloze! Tam jsou kritéria přísnější! ===== Povinná úloha 1: Hledání cesty v bludišti algoritmem A* ===== * V [[..:..:semestralni_ulohy:1_prohledavani_stavoveho_prostoru:start|povinné úloze 1]] je vaším úkolem naimplementovat algoritmus A*, který vám bude představen nejpozději na druhé přednášce. Pokud jste ale předchozí 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 jiného nemusí být pro všechny stavy 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 ===== Domácí úkol ===== * Rozchodit prostředí ''kuimaze2'' v Pythonu. * Dokončit úlohu ''01-easy_search''. * Začít pracovat na úloze ''02-search''.