Скачиваний:
108
Добавлен:
10.12.2013
Размер:
49.66 Кб
Скачать

Большинство поисковых задач можно сформулировать как задачи поиска в пространстве состояний пути от исходного состояния заданной задачи до целевого состояния путем повторения возможных преобразований (с помощью операторов). При этом для организации поиска в пространстве состояний удобно использовать дерево поиска (или его более общую форму — граф). К основным методам систематического просмотра пространства состояний относятся вертикальный и горизонтальный поиск. В алгоритме А<sup>*</sup> использованы априорные оценки стоимости пути до целевого состояния (разновидность эвристических знаний), что обеспечивает высокую эффективность поиска.

Описание этого алгоритма удобно рассмотреть на примере игры в восемь, которую использовал Нильсон. Эта игра—минивариант игры в пятнадцать на поле 3Х3 размещены восемь пронумерованных шашек, цель игры — от заданного начального состояния перейти к целевому состоянию так, как показано ниже. На поле один пустой квадрат: состояние, можно изменить, передвигая шашку сверху, снизу, справа или слева на пустой квадрат. Следовательно, в этой игре есть четыре оператора преобразования состояния, соответствующие одному из передвижений шашки на пустой квадрат. А раз так, то не нужно следить за перемещениями какой-либо конкретной шашки, поэтому изменим точку зрения, и будем перемещать пустой квадрат. Теперь просто определить следующие четыре оператора:

<li>1) перемещение пустого квадрата влево (при этом слева есть квадрат);<li>2) перемещение пустого квадрата вверх (при этом вверху есть квадрат);<li>3) перемещение пустого квадрата вправо (при этом справа есть квадрат);<li>4) перемещение пустого квадрата вниз (при этом внизу есть квадрат).

Используя эти операторы, будем осуществлять поиск в пространстве состояний, рассмотрим также следующую оценочную функцию как функцию, регламентирующую выбор эффективного направления поиска. Пусть f(n) —стоимость оптимального пути к цели от первой вершины (начального состояния) через n вершин дерева поиска. Разделим f(n) и представим ее следующим образом:

f (n) = g (n) + h (n),<br>где g (n) — стоимость оптимального пути от первой вершины до n-й вершины,<br>h (n) — стоимость оптимального пути от n-й вершины до цели.

Будем считать, что перемещение одной шашки в игре в восемь имеет стоимость 1, а до цели ведет оптимальный путь с минимальной стоимостью.

В процессе поиска в общем случае нельзя точно знать f(n), поэтому рассмотрим априорное значение f<sup>*</sup>(n). В момент прохождения n-й вершины g(n) известно, поэтому можно записать<br>f<sup>*</sup> (n) = g (n) + h<sup>*</sup> (n),<br>где h<sup>*</sup> (n)—априорное значение h (n). Если представить пространство поиска в игре в восемь в виде дерева, то g (n)—это глубина от первой вершины до n-й вершины. В качестве h<sup>*</sup> (n), например, выберем число шашек, находящихся не на своих местах. Определив таким образом оценочную функцию, выберем стратегию прохождения вершин (применения операторов), в которых значения функции минимальны.

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

Здесь важно, что h <sup>*</sup> (n) меньше или равен h(n), а именно если априорное значение стоимости от n-й вершины до цели (h<sup>*</sup> (n)) меньше или равно истинной стоимости оптимального пути к цели (h(n)), то это гарантирует, что обязательно будет найден оптимальный путь. Поиск с использованием функции f<sup>*</sup> (n) = g(n) + h<sup>*</sup> (n) называется алгоритмом А<sup>*</sup>

В этой игре в качестве h<sup>*</sup> (n) выбрано число шашек, находящихся не на своих местах, причем h <sup>*</sup>(n) меньше или равно h(n) (не достигнем цели, пока число перемещений меньше числа шашек, находящихся не на своих местах). Следовательно, рисунок также представляет поиск по алгоритму А<sup>*</sup>. Если же выбрать h<sup>*</sup> (n)=0, то мы имеем горизонтальный поиск, при котором прежде всего раскрываются близлежащие вершины (число таких вершин возрастает), оптимальный путь при этом в конце концов находится. Если h<sup>*</sup><sub>1</sub>(n) < h<sup>*</sup><sub>2</sub>(n) < h(n),To можно доказать, что число вершин, раскрытых при поиске с использованием функции f<sup>*</sup><sub>1</sub>(n) = g (n) + h<sup>*</sup><sub>2</sub>(n), всегда меньше, чем при поиске с использованием функции f<sup>*</sup><sub>1</sub>(n) = =g (n)+ h<sup>*</sup><sub>2</sub>(n). А именно, h(n) можно рассматривать как объем эвристических знаний, предсказывающих стоимость пути до цели, следовательно, объем эвристических знаний h<sub>2</sub>(n) больше, чем h<sub>1</sub>(n).

Соседние файлы в папке Add