Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SearchLab Python.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
53.91 Кб
Скачать

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).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]