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

1.4. Задание № 4: алгоритм поиска а* (3 балла)

Реализуйте алгоритм А* в функции aStarSearch in search.py. А* принимает эвристическую функцию в качестве аргумента. Эвристики принимают в качестве аргументов: состояние исследуемой задачи и описание самой задачи (справочную информацию). Примером тривиальной эвристики является функция nullHeuristic в search.py.

Вы можете протестировать вашу реализацию алгоритма А* на задаче поиска пути в лабиринте к заданной позиции, используя в качестве эвристической функции манхетонское расстояние (она уже реализована как функция manhattanHeuristic в файле searchAgents.py):

python pacman.py -l bigMaze -z .5 -p SearchAgent -a fn=astar,heuristic=manhattanHeuristic

Алгоритм А* должен найти оптимальное решения слегка быстрее чем поиск по критерию стоимости (UCS): приблизительно 549 vs. 620 раскрытых узлов для нашей реализации, но изменение порядка раскрытия узлов, имеющих одинаковую стоимость, может слегка изменить эти значения. Сравните работу различных поисковых стратегий на задаче openMaze.

2. Проходя через все углы

2.1. Задание № 5: постановка задачи (2 балла)

Однако, настоящая мощь алгоритма А* проявляется лишь в более сложных задачах поиска. Итак, давайте сформулируем новую задачу и разработаем для неё эвристическую функцию: необходимо найти кратчайший путь, проходящий через все углы лабиринта. Обратите внимание, что для некоторых лабиринтов, например tinyCorners кратчайший путь не всегда начинается с ближайшего угла. Подсказка: кратчайший путь для лабиринта tinyCorners состоит из 28 шагов.

Внимание: Выполнение данного задание основано на ответе к заданию № 2. Поэтому, перед тем как приступить к работе, убедитесь, что выполнили его.

Допишите класс CornersProblem в файле searchAgents.py, описывающий вышеизложенную задачу. Вам необходимо придумать способ хранения иформации, который позволит определить момент, когда все четыре угла окажутся пройденными.

После этого ваш поисковый агент должен решить следйующие задачи:

python pacman.py -l tinyCorners -p SearchAgent -a fn=bfs,prob=CornersProblem

python pacman.py -l mediumCorners -p SearchAgent -a fn=bfs,prob=CornersProblem

Для того чтобы получить максимальную оценку, вы должны определить способ представления состояний пространства поиска, который бы не содержал ирралевантной информации (например, местонахождение призраков и др.). В частности, не используйте GameState, ваш код будет медленным (а также ошибочным).

Подсказка: Необходимо использовать лишь исходное положение Пакмана и статус посещения углов.

Наша реализация breadthFirstSearch раскрывает чуть меньше 2000 узлов на задаче mediumCorners. Однако, эвристики (используемые с А*) могут значительно уменьшить это значение.

2.2. Задание № 6: проходя через все углы – а* и эвристика (3 балла)

Внимание: Убедитесь, что вы завершили задание №4, прежде чем приступать к заданию №6, поскольку задание №6 основывается на результатах работы над заданием №4.

Реализуйте нетривиальную, монотонную эвристику для задачи CornersProblem в функции cornersHeuristic.

python pacman.py -l mediumCorners -p AStarCornersAgent -z 0.5

Примечание: AStarCornersAgent – сокращение для опций -p SearchAgent -a fn=aStarSearch,prob=CornersProblem,heuristic=cornersHeuristic.

Допустимость и монотонность. Как вы уже знаете, эвристика – всего лишь функция, которая принимает состояние из пространства поиска и возвращает оценку стоимости для ближайшего целевого состояния. Чем более эффективна эвристика, тем более близка возвращаемая ею оценка к реальной стоимости оставшегося пути до целевого состояния. Чтобы эвристика считалась допустимой, ее значения не должны превышать значения реального кратчайшего пути до ближайшего целевого состояния и должны быть неотрицательными. Для того чтобы эвристика считалась монотонной, то должно выполняется условие: если стоимость действия (шага) составляет c, то выполнение данного действия (шага) может вызвать уменьшение значения функции эвристики не более чем на c.

Важно помнить, для того чтобы гарантировать корректность поиска на графе не достаточно лишь условия допустимости эвристики, необходимо выполнение более строго условия монотонности эвристики. Тем не менее, зачастую допустимая эвристика также является и монотонной, особенно если эвристическая функция получена путем ослабления условия задачи. Таким образом, зачастую проще всего начать с «мозгового штурма» допустимых эвристик. И когда у вас есть хорошо работающая допустимая эвристика вы можете проверить ее на монотонность. Единственный способ гарантировать монотонность эвристики – доказательство. Однако, немонотонность зачастую может быть обнаружена проверкой, что для каждого из раскрываемых узлов, все его узлы приемники имеют оценку f выше или равную оценки раскрываемого узла. Более того, если поиск по критерию стоимости и A* когда-либо найдут результирующие пути разной длины, то ваша эвристика немонотонна. Не все так просто как хотелось бы!

Нетривиальные эвристики. Тривиальные эвристики – эвристики, возвращающие 0 для любых входных значений (в этом случае A* сводится к поиску по критерию стоимости), а также эвристики, вычисляющие истинную стоимость завершения пути. Первый вариант (нулевая эвристика) не даст какого-либо прироста по времени поиска, в то время как второй вариант приведет к завершению программы автоматического оценивания по тайм-ауту. Обычно желательным является получение эвристики сокращающей общее время поиска, тем не менее, программа автоматического оценивания будет осуществлять лишь проверку числа раскрытых узлов (помимо проверки на разумное время исполнения).

Оценивание. Чтобы получить баллы за решение, ваша эвристическая функция должна быть нетривиальной неотрицательной монотонной эвристикой. Убедитесь что ваша эвристика возвращает 0 для всех целевых состояний и никогда не возвращает отрицательные значения. Ваша оценка будет завесить от того сколько узлов (состояний) было раскрыто вашей эвристикой:

Число раскрытых узлов

Оценка

более 2 000

0/3

не более 2 000

1/3

не более 1 600

2/3

не более 1 200

3/3

Помните: Если ваша эвристика немонотонна, то вы получите 0 баллов. Будьте внимательны!

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