===== Środowisko i sterowanie ===== ==== 1. SI w środowisku ==== - {{ lab_steer_srodowisko.pdf |Agent inteligentny w środowisku}} - Hunt the Wumpus! \\ {{wumpus_world.jpg?direct&300|}} - Definicje: * Sukces: zebrać złoto i przeżyć * Wiedza o środowisku a priori: * są jamy (możemy wpaść; czuć wiatr) * jest wumpus (może nas zjeść; ma zapach) * Możliwe akcje: * Poruszanie się * Strzelanie * Podnoszenie złota * Czynione obserwacje: * Pole jest puste, czujemy zapach / wiatr - Zagraj chwilę w [[https://thiagodnf.github.io/wumpus-world-simulator/|Wumpus World Simulator]] * 8x złoto, 8x wumpus \\ Strzałki - obracanie i poruszanie się \\ Enter - zbierz złoto \\ Spacja - strzał w sąsiednie pole * Mój rekord do pobicia: 12 450 pkt ;-) * **Jak chcielibyśmy, żeby zachowywał się inteligentny bot w Wumpus World?** * **Racjonalność?** \\ {{wumpus_world_issue1.jpg?direct&0x350|}} {{wumpus_world_issue2.jpg?direct&0x350|}} - {{ lab_steer_decyzje_swiat.pdf |Decyzje projektowe}} ==== 2. Sterowanie ==== - Podstawa: [[http://www.red3d.com/cwr/steer/gdc99/|Craig W. Reynolds "Steering Behaviors For Autonomous Characters" (1999)]] \\ Śledzenie, Ucieczka, Przybycie, Wyrównywanie, Pościg, Unikanie, Wędrowanie, Omijanie przeszkód, Podążanie ścieżką, Algorytm stada - Opis i symulacje w języku Processing: [[https://natureofcode.com/book/chapter-6-autonomous-agents/|Chapter 6 w "Nature of Code"]] * Jest to baza do całej dalszej części laboratorium - warto mieć otwarte "w tle" - Będziemy pracować w języku [[https://processing.org/|Processing]] (konkretnie w wersji JavaScript = [[https://p5js.org/|p5js]]) * Nie wymaga żadnych edytorów, wszystkie zadania możemy robić w przeglądarce * Edytor online: **[[https://editor.p5js.org/]]** * Dokumentacja p5js: **[[https://p5js.org/reference/]]** * "Nature of Code" w p5.js: [[https://github.com/nature-of-code/noc-examples-p5.js|noc-examples-p5.js]] - Śledzenie i Ucieczka: - Przypomnij sobie algorytm śledzenia (pewnie był już na wykładzie?) przeglądając sekcję [[https://natureofcode.com/book/chapter-6-autonomous-agents/#chapter06_section3|6.3 The Steering Force]] w "Nature of Code" \\ {{steer1.jpg?direct&0x120|}} \\ {{steer2.jpg?direct&0x120|}} \\ {{steer3.jpg?direct&0x120|}} \\ {{steer4.jpg?direct&0x120|}} \\ {{steer5.jpg?direct&0x120|}} - Obejrzyj symulację śledzenia w [[https://natureofcode.com/book/chapter-6-autonomous-agents/#chapter06_example1|Example 6.1: Seeking a target]] - Otwórz kod w p5js (dla powyższego Example 6.1): [[https://github.com/nature-of-code/noc-examples-p5.js/tree/master/chp06_agents/NOC_6_01_Seek|noc-examples-p5.js/NOC_6_01_Seek]] * ''index.html'' służy do osadzenia ramki z symulacją (i załadowania odpowiednich plików ''js'') * ''sketch.js'' to podstawowy plik symulacji: funkcja ''setup()'' wywoływana jest jednorazowo na starcie, funkcja ''draw()'' służy do każdorazowej aktualizacji stanu symulacji i przerysowania ekranu * ''vehicle.js'' to klasa opisująca pojedynczego boida (w kolejnych zadaniach będzie ich więcej); najważniejsze funkcje to te wywoływane w ''sketch.js'', czyli: v.seek(mouse); //wyszukuje target (wektor desired) i ustala jaką "poprawkę" trzeba zrobić v.update(); //wylicza aktualne położenie zgodnie z aktualnymi parametrami v.display(); //rysuje boid w nowym położeniu - Otwórz edytor online: https://editor.p5js.org/ * Możesz założyć konto (nie jest to konieczne do zajęć) - umożliwia ono zapisywanie swoich projektów * Do nowego projektu wklej zawartość wszystkich trzech plików z przykładu * Uruchom symulację - Poeksperymentuj z parametrami w ''vehicle.js'', sprawdź jak wpływają na śledzenie: this.maxspeed = 8; this.maxforce = 0.2; - W jaki sposób ze śledzenia zrobić ucieczkę? * Chcemy zmierzać w kierunku przeciwnym do target (w tym przypadku kursora myszy) = wektor ''desired'' musi mieć zmieniony zwrot * Wystarczy więc zmienić wyliczanie wektora ''desired'': desired = p5.Vector.sub(target, this.position); //szukanie desired = p5.Vector.sub(this.position, target); //ucieczka * W razie potrzeby można zajrzeć do dokumentacji funkcji ''[[https://p5js.org/reference/#/p5.Vector/sub|p5.Vector.sub()]]'' - **__Zadania do samodzielnej realizacji:__** - [1.5 EXP] Ucieczka przed kursorem (modyfikacja [[https://github.com/nature-of-code/noc-examples-p5.js/tree/master/chp06_agents/NOC_6_01_Seek|NOC_6_01_Seek]], jak wyżej), ale należy pozostawać wewnątrz granic (zob. [[https://natureofcode.com/book/chapter-6-autonomous-agents/#chapter06_example3|Example 6.3: "Stay within walls" steering behavior]], [[https://github.com/nature-of-code/noc-examples-p5.js/tree/master/chp06_agents/NOC_6_03_StayWithinWalls|NOC_6_03_StayWithinWalls]]) - [1.5 EXP] Wędrowanie zgodnie z pomysłem Reynoldsa ([[https://natureofcode.com/book/chapter-6-autonomous-agents/#chapter06_section5|Sekcja 6.5 w Nature of Code]] może być przydatna) - [2 EXP] Podążanie za zmieniającą się ścieżką ([[https://natureofcode.com/book/chapter-6-autonomous-agents/#chapter06_exercise11|Zadanie 6.11 w Nature of Code]]) - uruchom, przeanalizuj i zmodyfikuj [[https://natureofcode.com/book/chapter-6-autonomous-agents/#chapter06_example6|Example 6.6: Path following]] ([[https://github.com/nature-of-code/noc-examples-p5.js/tree/master/chp06_agents/NOC_6_06_PathFollowing|NOC_6_06_PathFollowing]]) - [2 EXP] Grupowe zbliżanie i unikanie ze zmieniającymi się wagami - co się wtedy dzieje ([[https://natureofcode.com/book/chapter-6-autonomous-agents/#chapter06_exercise14|Zadanie 6.14 w Nature of Code]])? Uruchom, przeanalizuj i zmodyfikuj [[https://natureofcode.com/book/chapter-6-autonomous-agents/#chapter06_example8|Example 6.8: Combining steering behaviors: Seek and separate]] ([[https://github.com/nature-of-code/noc-examples-p5.js/tree/master/chp06_agents/NOC_6_08_SeparationAndSeek|NOC_6_08_SeparationAndSeek]]) - [2 EXP] Stado, w którym każdy obiekt ma ograniczone pole widzenia ([[https://natureofcode.com/book/chapter-6-autonomous-agents/#chapter06_exercise15|Zadanie 6.15 w Nature of Code]]) - uruchom, przeanalizuj i zmodyfikuj [[https://natureofcode.com/book/chapter-6-autonomous-agents/#chapter06_example9|Example 6.9: Flocking]] ([[https://github.com/nature-of-code/noc-examples-p5.js/tree/master/chp06_agents/NOC_6_09_Flocking|NOC_6_09_Flocking]])