2.1.2.
Эвристический поиск
Поскольку
слепой поиск возможен только в небольшом пространстве вариантов, напрашивается
совершенно естественный вывод, что необходим некоторый способ направленного
поиска. Если такой способ использует при поиске пути на графе в пространстве
состояний некоторых знаний, специфических для конкретной предметной области,
его принято называть эвристическим поиском. Лучше всего рассматривать
эвристику в качестве некоторого правила влияния, которое, хотя и не гарантирует
успеха (как детерминированный алгоритм или процедура принятия решения), в большинстве
случаев оказывается весьма полезным.
Простая форма
эвристического поиска — это восхождение на гору. В процессе поиска в
программе использует некоторая оценочная функция, с помощью которой можно
грубо оценить, насколько "хорошим" (или "плохим") является
текущее состояние. Затем можно применить ту же функцию для выбора очередного
шага, переводящего систему в следующее состояние.
Например,
простая оценочная функция для программы игры в шахматы может включать очевидную
оценку материала (количества и качества имеющихся на доске фигур) — своего и
соперника. Затем программа перебирает возможные операторы перехода в новое состояние
(возможные ходы фигур) и, сравнивая результаты вариантов, отыскивает такой,
который характеризуется максимальным значением оценочной функции. Другими словами,
ищется такой ход, который дает наибольший материальный выигрыш.
Основной алгоритм,
реализующий идею восхождения на гору, можно сформулировать следующим образом.
(1) Находясь
в данной точке пространства состояний, применить правила порождения нового множества
возможных решений, например множества ходов фигур, допустимых в данной позиции.
(2) Если одно
из новых состояний является решением проблемы, прекратить процесс. В противном
случае перейти в то состояние, которое характеризуется наивысшим значением оценочной
функции. Вернуться к шагу (1).
Но применение
этого подхода наталкивается на хорошо известные трудности. Главная из них —
как сформулировать оценочную функцию, которая адекватно бы отражала "качество"
текущего состояния. Продолжая наш пример с игрой в шахматы, заметим, что иметь
много фигур, больше чем у соперника, отнюдь не значит иметь лучшую позицию,
т.е. быть ближе к успеху. Такая простая оценочная функция не учитывает многих
особенностей этой игры (а в более широком контексте — особенностей данной предметной
области).
Более того,
даже если оценочная функция и позволяет адекватно оценить текущую ситуацию,
сущестЬуют разнообразные ситуации игры, которые сами по себе могут быть источником
затруднений. Например, в данном состоянии нет очевидного очередного хода, т.е.
оказывается, что все возможные ходы одинаково хороши (или плохи). Это не что
иное, как выход на "плато" в нашем восхождении, когда ни один из возможных
путей не влечет за собой подъем. Другой возможный источник затруднений — наличие
локальных максимумов, из которых возможен только спуск, т.е. "ухудшение"
состояния. Например, я могу взять вашего ферзя и после этого проиграть партию.
Лучшими свойствами
обладает другая форма эвристического поиска, которая получила наименование сначала
наилучший (best-first search). Так же, как и в варианте восхождения на
гору, в нашем распоряжении имеется оценочная функция, с помощью которой
можно сравнивать состояния в пространстве состояний. Основное же отличие нового
метода от ранее рассмотренного состоит в том, что сравниваются не только те
состояния, в которые возможен переход из текущего, но и все, до которых
"можно достать".
Такой алгоритм,
естественно, требует значительно больших вычислительных ресурсов, но идея состоит
в том, чтобы принимать во внимание не только ближайшие состояния, т.е. локальную
обстановку, а "окинуть взглядом" как можно больший участок пространства
состояний и быть готовым, в случае необходимости, вернуться туда, где мы уже
были, и пойти другим путем, если ближайшие претенденты не сулят существенного
прогресса в достижении цели (см. описание алгоритма А во врезке 2.2). Вот эта
возможность отказаться от части пройденного пути во имя глобальной цели и позволяет
найти более эффективный путь. Необходимость хранить ранее сделанные оценки состояний
и постоянно их обновлять, конечно, требует значительных вычислительных ресурсов.
2.2.
Алгоритм А
Существует
хорошо известный алгоритм поиска, который относится к группе первый лучший,
получивший наименование А (произносится "А со звездочкой"). Основная
идея алгоритма состоит в использовании для каждого узла п на графе пространства
состояний оценочной функции вида
f(n)
= g(п) + h(n).
Здесь
g(п) соответствует расстоянию на графе от узла п до начального
состояния, a h(n) —оценка расстояния от п до узла, представляющего
конечное (целевое) состояние. Чем меньше значение оценочной функции f(n),
тем "лучше", т.е. узел п лежит на более коротком пути от
исходного состояния к целевому. Идея алгоритма состоит в том, чтобы с помощью
f(n) отыскать кратчайший путь на графе от исходного состояния к целевому.
Отсюда
следует, что если h(n) — нижняя оценка действительного расстояния
до целевого состояния, т.е. если h(n) никогда не дает завышенной оценки
расстояния, то алгоритм А всегда отыщет оптимальный путь до цели при помощи
оценочной функции f(n). Алгоритм, обладающий таким свойством, называется
разрешимым (более подробное обсуждение этого вопроса читатель найдет в специальной
литературе, в частности в работах Нмпьсона [Nilsson, 1980, Chapter 2] и
Перла [Pearl, 1984, Chapter 2]).
Обозначения:
s
— узел начального состояния;
g—
узел целевого состояния;
OPEN
— список, который содержит,выбранные, но необработанные узлы;
CLOSED
— список, который содержит обработанные узлы.
Алгоритм
(1)
OPEN:={s}.
(2)
Если ОРЕМ:={}, то прекратить выполнение. Пути к целевому состоянию на графе
не существует.
(3)
Удалить из списка OPEN узел п, для которого f(n)<f(m) для любого узла
т, уже присутствующего в списке OPEN, и перенести его в список CLOSED.
(4)
Сформировать список очередных узлов, в который возможен переход из узла n и
удалить из него все узлы, образующие петли; с каждым из оставшихся связать указатель
на узел п.
(5)
Если в сформированном списке очередных узлов присутствует д, то завершить
выполнение. Сформировать результат — путь, порожденный прослеживанием указателей
от узла д до узла s.
(6)
В противном случае для каждого очередного узла n', включенного в список, выполнить
следующую последовательность операций.
Если
old<new, прекратить обработку нового узла.
Если
new<old, заменить новым узлом прежний в списке, причем, если прежний
узел
был
в списке CLOSED, перенести его в список OPEN.
Конец
алгоритма
Применение
этого алгоритма рассмотрено в упр. 8.
Вычислительная
мощность современных компьютеров все-таки недостаточна для того, чтобы использовать
алгоритмы поиска решений даже с помощью направленного поиска с применением оценочной
функции, не говоря уже о методике слепого перебора возможных состояний. Пространство
состояний, в котором нужно вести поиск, при решении таких задач, как распознавание
речи, выбор конфигурации компьютерной системы или планирование последовательности
операций, настолько велико, что его невозможно проанализировать такими обобщенными
методами за обозримый отрезок времени, если только не призвать на помощь знания,
касающиеся конкретной предметной области. Можно показать, что многие из этих
проблем изоморфны абстрактным задачам, которые заведомо относятся к классу "необозримых"
в том смысле, что их сложность, а соответственно и потребность в вычислительных
ресурсах, экспоненциально возрастает при линейном увеличении размерности задачи.
Как будет
показано далее, развитие экспертных систем пошло по пути привлечения опыта экспертов,
как касающегося деталей поведения конкретных объектов в конкретной ситуации,
так и стратегии логического вывода в определенной предметной области, что и
позволяет преодолеть трудности, связанные со сложностью формализованного поиска
в пространстве состояний.
Достаточно
подробно результаты первых исследований в области программирования игр и машинного
доказательства теорем описаны в сборнике статей под редакцией Фей-генбаума и
Фельдмана [Feigenbaum and Feldman, 1963]. Я склонен к тому, чтобы считать
"классическим" в истории искусственного интеллекта период, который
начался с публикации в 1950 году статьи Шеннона об игре в шахматы [Shannon,
1950] и закончился выходом сборника Фейгенбаума и Фельдмана. Наиболее существенные
результаты, полученные в этот период, можно сформулировать следующим образом:
Очень редко удается свести использование знаний к формулировке адекватной оценочной функции и таким образом помочь программе оценить свое поведение в текущей ситуации и найти правильный путь к решению. Но в большинстве случаев требуется нечто большее, что-то вроде глобальной стратегии решения проблем или явного использования знаний об объектах, их свойствах и связанных с ними действиях в конкретной предметной области, или комбинации того и другого.