- •Лабораторная работа №2 Неинформированный и информированный поиск (исследование пространства состояний).
- •Введение
- •1. Достижение фиксированной точки
- •1.1. Задание № 1: поиск в глубину (2 балла)
- •1.2. Задание № 2: поиск в ширину (2 балла)
- •1.3. Задание № 3: поиск по критерию стоимости (2 балла)
- •1.4. Задание № 4: алгоритм поиска а* (3 балла)
- •2. Проходя через все углы
- •2.1. Задание № 5: постановка задачи (2 балла)
- •2.2. Задание № 6: проходя через все углы – а* и эвристика (3 балла)
- •3. Поедая все гранулы
- •3.1. Задание № 7: поедая все гранулы – а* и эвристика (4 балла)
- •3.2. Задание № 8: субоптимальный поиск (2 балла)
- •4. Мини конкурс (до 2 дополнительных баллов)
- •5. Глоссарий
- •6. Требования к отчету
1. Достижение фиксированной точки
В файле searchAgents.py вы найдёте практически полностью реализованный класс поискового агента SearchAgent, который планирует путь через мир Пакмана и исполняет его шаг за шагом.
Сначала проверьте, что класс SearchAgent работает корректно, выполните команду
python pacman.py -l tinyMaze -p SearchAgent -a fn=tinyMazeSearch
Команда выше говорит классу SearchAgent использовать tinyMazeSearch как алгоритм поиска, который уже реализован в search.py. Пакман успешно прошел лабиринт.
Теперь настало время написать полноценный обобщенный алгоритм поиска, который поможет Пакману распланировать маршрут. Псевдокод алгоритмов поиска, которые вам необходимо будет написать, вы можете найти в слайдах лекции.
Помните, что алгоритмы поиска должны возвращать последовательность действий, которая приведет Пакмана из начального состояния в целевое. Все эти действия должны быть допустимыми (корректные направления движения, а не движения через стены).
Подсказка: Алгоритмы DFS, BFS, UCS, and A* отличаются лишь способом управления периферией. Так что сконцентрируйтесь на написании корректного алгоритма поиска в глубину, и тогда выполнение остальных заданий не составит труда.
Подсказка: при написании алгоритмов используйте классы из util.py.
1.1. Задание № 1: поиск в глубину (2 балла)
Первое задание заключается в реализации алгоритма поиска в глубину (depth-first search, DFS). Найдите в файле search.py функцию depthFirstSearch и замените текст "*** YOUR CODE HERE ***" на свой код. Ваш алгоритм не должен повторно рассматривать уже посещенные узлы.
Ваш алгоритм должен легко найти решения для следующих задач:
python pacman.py -l tinyMaze -p SearchAgent
python pacman.py -l mediumMaze -p SearchAgent
python pacman.py -l bigMaze -z .5 -p SearchAgent
На игровом поле будет показано какие состояния были изучены и в каком порядке: чем ярче красный цвет, тем раньше это состояние было открыто. Порядок исследования состояний тот, который вы ожидали? Пакман проходит через все раскрытые состояния?
1.2. Задание № 2: поиск в ширину (2 балла)
Реализуйте алгоритм поиска в ширину (breadth-first search, BFS). Функция breadthFirstSearch в файле search.py. И снова помните, что нельзя посещать посещенные ранее узлы. Протестируйте код в той же манере, что и поиск в глубину:
python pacman.py -l mediumMaze -p SearchAgent -a fn=bfs
python pacman.py -l bigMaze -p SearchAgent -a fn=bfs -z .5
Подсказка: Если Пакман двигается слишком медленно, попробуйте настройку --frameTime 0.
Пакман нашёл самый короткий путь? Если нет, то проверьте вашу реализацию алгоритма.
1.3. Задание № 3: поиск по критерию стоимости (2 балла)
В то время как поиск в ширину ищет путь с минимальное количество действий, в некоторых случаях мы можем хотеть найти путь «лучший» в некотором другом смысле. Рассмотрите задачи mediumDottedMaze and mediumScaryMaze.
Изменяя функцию стоимости, мы можем направлять Пакмана по разным путям. Например, мы можем увеличить стоимость шагов в опасхных областях, охваченных призраками, или наоборот уменьшить стоимость для районов богатых пищью. И рацианальный Пакман должен изменять своё поведение соответствующим образом.
Реализуйте алгоритм поиска по критерию стоимости (Uniform Cost Search, UCS) в функции uniformCostSearch файла search.py. Мы рекомендуем ознакомиться с файлом util.py, некоторые из реализованных в нём структур данных могут быть полезны при выполнении данного задания. После реализации алгоритма вы должны успешно выполнить следующие три примера:
python pacman.py -l mediumMaze -p SearchAgent -a fn=ucs
python pacman.py -l mediumDottedMaze -p StayEastSearchAgent
python pacman.py -l mediumScaryMaze -p StayWestSearchAgent
Все вышеперечисленные поисковые агенты используют UCS алгоритм, который отличается лишь функцией стоимости, которую они используют (агенты и функции стоимости уже реализованы).
Примечание: Вы должны получить очень низкую и очень высокую стоимоть пути для StayEastSearchAgent and StayWestSearchAgent соответственно, т.к. они используют экспоненциальные функции стоимости (см. searchAgents.py).
