Назад | Содержание| Вперёд 11. 2. Стратегия поиска вглубину Сущес...

Назад | Содержание| Вперёд

11. 2.    Стратегия поиска вглубину

Существует много различных подходов к проблемепоиска решающего пути для задач,сформулированных в терминах пространствасостояний. Основные две стратегии поиска - этопоиск в глубину и поиск в ширину. Внастоящем разделе мы реализуем первую из них.

Мы начнем разработку алгоритма и его вариантовсо следующей простой идеи:

Для того, чтобы найти решающий путь Решиз заданной вершины В в некоторуюцелевую вершину, необходимо:

если В - это целевая вершина, то положить Реш = [В], или

если для исходной вершины В существует вершина-преемник В1, такая, что можно провести путь Реш1 из В1 в целевую вершину, то положить Реш = [В | Peш1].

Рис. 11. 6.  Отношение вглубину(Путь, В, Решение).

Для облегчения программирования вершины всписках, представляющих пути, будутрасставляться в обратном порядке. Аргумент Путьнужен для того,

(1)        чтобы нерассматривать тех преемников вершины Верш,которые уже встречались раньше (обнаружениециклов);

(2)        чтобы облегчитьпостроение решающего пути Решение.Соответствующая программа поиска в глубинупоказана на рис. 11.7.

        решить( Верш,Решение) :-

               вглубину( [ ], Верш, Решение).

        вглубину( Путь,Верш, [Верш | Путь] ) :-

               цель( Верш).

        вглубину( Путь,Верш, Реш) :-

               после( Верш, Верш1),

               not принадлежит( Верш1, Путь),                                       % Цикл ?

               вглубину( [Верш | Путь], Верш1, Реш).

Рис. 11. 7.  Программапоиска в глубину без зацикливания.

Теперь наметим один вариант этой программы.Аргументы Путь и Вершпроцедуры вглубину можно объединить водин список [Верш | Путь]. Тогда, вместовершины-кандидата Верш, претендующей нато, что она находится на пути, ведущем к цели, мыбудем иметь путь-кандидат П = [Верш |Путь], который претендует на то, что егоможно продолжить вплоть до целевой вершины.Программирование соответствующего предиката

        вглубину( П,Решение)

оставим читателю в качестве упражнения.

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

        вглубину2( Верш,[Верш], _ ) :-

               цель( Верш).

        вглубину2( Верш,[Верш | Реш], МаксГлуб) :-

               МаксГлуб > 0,

               после( Верш, Верш1),

               Maкс1 is МаксГлуб - 1,

               вглубину2( Верш1, Реш, Maкс1).

Рис. 11. 8.  Программапоиска в глубину с ограничением по глубине.

Для того, чтобы предотвратить бесцельноеблуждание по бесконечным ветвям, мы можемдобавить

в базовую процедуру поиска вглубину еще одно усовершенствование, а именно,ввести

ограничение на глубину поиска

.Процедура поиска в глубину будет тогда иметьследующие аргументы:

        вглубину2( Верш,Решение, МаксГлуб)

Не разрешается вести поиск на глубине большей,чем МаксГлуб. Программная реализацияэтого ограничения сводится к уменьшению наединицу величины предела глубины при каждомрекурсивном обращений к вглубину2 и кпроверке, что этот предел не стал отрицательным.В результате получаем программу, показанную нарис. 11.8.

Упражнения

11. 1.    Напишите процедурупоиска в глубину (с обнаружением циклов)

        вглубину1(ПутьКандидат, Решение)

отыскивающую решающий путь Решениекак продолжение пути ПутьКандидат. Обапути представляйте списками вершин,расположенных в обратном порядке так, чтоцелевая вершина окажется в голове списка Решение.

Посмотреть ответ

11. 2.    Напишите процедурупоиска в глубину, сочетающую в себе обнаружениециклов с ограничением глубины, используя рис. 11.7и 11.8.

11. 3.    Проведите экспериментпо применению программы поиска в глубину кзадаче планирования в "мире кубиков" (рис.11.1).

11. 4.    Напишите процедуру

        отобр( Ситуация)

для отображения состояния задачи"перестановки кубиков". Пусть Ситуация- это список столбиков, а столбик, в свою очередь, -список кубиков. Цель

        отобр( [ [a], [e, d], [с, b] ])

должна отпечатать соответствующую ситуацию,например так:

               е         с

      a        d        b

      ================

Назад | Содержание| Вперёд









Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх