Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программы классификации 49 9 Программа классифи...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
944.13 Кб
Скачать

1.3. Бэктрекинг

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

Рассмотрим простую программу на Прологе в виде предикатов без аргументов:

p :– q, s.

p :– r, t.

Эту программу можно прочитать следующим образом. При выполнении процедуры p выполняются процедуры q и s. Если они завершаются успешно, то и процедура p считается успешно завершенной. Если это не так, то выполняются процедуры r и t. В этом случае процедура успешно завершается, если r и t завершены успешно. В противном случае процедура p терпит неудачу. Этот процесс возврата к поиску других решений называется бэктрекингом (backtracking).

Такой алгоритм работы можно представить в виде И-ИЛИ-дерева. В прологе применяется стратегия поиска в глубину, т.е. обход дерева сверху вниз слева направо. Если при обходе вершины ИЛИ какой-либо потомок разрешается успешно, то обработка остальных дочерних вершин приостанавливается, и считается, что вершина ИЛИ разрешается успешно. Если какой-либо из потомков И–вершины терпит неудачу, то обработка остальных ее потомков полностью прекращается и данная вершина терпит неудачу.

Приостановка обработки ИЛИ-вершины означает, что впоследствии возможно повторное обращение к этой вершине для поиска других решений (бэктрекинг).

Основными механизмами поиска решения задачи в Прологе является сопоставление и унификация, что позволяет решать широкий класс задач наиболее простым способом: путем перебора всех возможных состояний. Сначала находится предикат, который сопоставляется с целью, а затем выполняется унификация аргументов предиката. Унификация – это процесс подстановок переменных с целью приведения в соответствие двух выражений исчисления предикатов. Таким образом, унификация аналогична передаче параметров процедуры в алгоритмическом языке и в некотором смысле соответствует присваиванию.

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

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