Чтение онлайн

на главную

Жанры

Программирование на языке Пролог для искусственного интеллекта

Братко Иван

Шрифт:

Существует несколько случаев, как показано на рис. 13.11. Различные формы представления поискового дерева возникают как комбинации следующих возможных вариантов, относящихся к размеру дерева и к его "решающему статусу".

• Размер:

 (1) дерево состоит из одной вершины (листа) или

 (2) оно имеет корень и (непустые) поддеревья.

• Решающий статус:

 (1) обнаружено, что дерево соответствует решению задачи (т.е. является решающим деревом) или

 (2) оно все еще решающее дерево-кандидат.

Рис. 13.11. Представление

дерева поиска.

Основной функтор, используемый для представления дерева, указывает, какая из комбинаций этих воз-можностей имеется в виду. Это может быть одна из следующих комбинаций:

лист решлист дер решдер

Далее, в представление дерева входят все или некоторые из следующих объектов:

• корневая вершина дерева,

• F– оценка дерева,

• стоимость С дуги И/ИЛИ-графа, ведущей в корень дерева,

• список поддеревьев,

• отношение (И или ИЛИ) между поддеревьями.

Список поддеревьев всегда упорядочен по возрастанию F– оценок. Поддеревья, являющиеся решающими деревьями, помещаются в конец списка.

Обратимся теперь к программе рис. 13.12. Отношение самого высокого уровня — это

и_или( Верш, РешДер)

где

Верш
 — стартовая вершина. Программа строит решающее дерево (если таковое существует), рассчитывая на то, что оно окажется оптимальным решением. Будет ли это решение в действительности самым дешевым, зависит от той функции h, которую использует алгоритм. Существует теорема, в которой говорится о том, как оптимальность решения зависит от h. Эта теорема аналогична теореме о допустимости алгоритма поиска с предпочтением в пространстве состояний (гл. 12). Обозначим через С( В) стоимость оптимального решающего дерева для вершины В. Если для каждой вершины В И/ИЛИ-графа эвристическая оценка h(B)C(B), то гарантируется, что процедура 
и_или
 найдет оптимальное решение. Если же h не удовлетворяет этому условию, то найденное решение может оказаться субоптимальным. Существует тривиальная эвристическая функция, удовлетворяющая условию оптимальности, а именно h = 0 для всех вершин. Ее недостатком является отсутствие эвристической силы.

Основную роль в программе рис. 13.12 играет отношение

расширить( Дер, Предел, Дер1, ЕстьРеш)

Дер
и
Предел
 — его "входные" аргументы, а
Дер1
и
ЕстьРеш
 — "выходные". Аргументы имеют следующий смысл:

Дер
 — дерево поиска, подлежащее расширению.

Предел
 — предельное значение F– оценки, при котором еще разрешено наращивать дерево
Дер
.

ЕстьРеш
 — индикатор, значения которого указывают на то, какой из следующих трех случаев имеет место:

(1) 

ЕстьРеш = да
:
Дер
можно "нарастить" (с учетом ограничения
Предел
) таким образом, чтобы образовалось решающее дерево
Дер1
.

(2) 

ЕстьРеш = нет
: дерево
Дер
можно расширить до состояния
Дер1
, для которого F– оценка превосходит
Предел
, но прежде чем F– оценка превзошла
Предел
, решающее дерево не было обнаружено.

(3) 

ЕстьРеш = никогда
:
Дер
не содержит решения.

В зависимости от случая

Дер1
 — это либо решающее дерево, либо
Дер
, расширенное до момента перехода через
Предел
; если
ЕстьРеш = никогда
, то переменная
Дер1
неинициализирована.

Процедура

расширспис( Деревья, Предел,
Деревья1, ЕстьРеш)

аналогична процедуре

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

Деревья = или:[Д1, Д2, ...]
или

Деревья = и : [Д1, Д2, ...]

Процедура

расширспис
выбирает из списка
Деревья
наиболее перспективное дерево (исходя из F– оценок). Так как деревья в списке упорядочены, таким деревом является первый элемент списка. Наиболее перспективное дерево подвергается расширению с новым ограничением
Предел1
. Значение
Предел1
зависит от
Предел
, а также от других деревьев списка. Если
Деревья
 — это ИЛИ-список, то
Предел1
устанавливается как наименьшая из двух величин:
Предел
и F– оценка следующего по "качеству" дерева из списка
Деревья
. Если
Деревья
 — это И-дерево, то
Предел1
устанавливается равным
Предел
минус сумма F– оценок всех остальных деревьев из списка. Значение переменной
Деревья1
зависит от случая, задаваемого индикатором
ЕстьРеш
. Если
ЕстьРеш = нет
, то
Деревья1
 — это то же самое, что и список
Деревья
, причем наиболее перспективное дерево расширено с учетом ограничения
Предел1
. Если
ЕстьРеш = да
, то
Деревья1
 — это решение для всего списка
Деревья
(найденное без выхода за границы значения
Предел
). Если
ЕстьРеш = никогда
, то переменная
Деревья1
неинициализирована.

Процедура

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

/* ПРОГРАММА И/ИЛИ-ПОИСКА С ПРЕДПОЧТЕНИЕМ

Эта программа порождает только одно решение. Гарантируется, что это решение самое дешевое при условии, что используемая эвристическая функция является нижней гранью реальной стоимости решающих деревьев.

Дерево поиска имеет одну из следующих форм:

дер( Верш, F, С, Поддеревья) дерево-кандидат

лист( Верш, F, C) лист дерева поиска

решдер( Верш, F, Поддеревья) решающее дерево

решлист( Верш, F) лист решающего дерева

С - стоимость дуги, ведущей в Верш

F = С + H, где H - эвристическая оценка оптимального решающего дерева с корнем Верш

Список Поддеревья упорядочен таким образом, что

(1) решающие поддеревья находятся в конце списка;

(2) остальные поддеревья расположены в порядке возрастания F-оценок

*/

:- op( 500, xfx, :).

:- op( 600, xfx, --->).

и_или( Верш, РешДер) :-

 расширить( лист( Верш, 0, 0), 9999, РешДер, да).

% Предполагается, что 9999 > любой F-оценки

% Процедура расширить( Дер, Предел, НовДер, ЕстьРеш)

Поделиться:
Популярные книги

Дворянская кровь

Седой Василий
1. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Дворянская кровь

Газлайтер. Том 16

Володин Григорий Григорьевич
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 16

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Стрелок

Астахов Евгений Евгеньевич
5. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Стрелок

Шатун. Лесной гамбит

Трофимов Ерофей
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Шатун. Лесной гамбит

Проклятый Лекарь V

Скабер Артемий
5. Каратель
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Проклятый Лекарь V

На границе империй. Том 3

INDIGO
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 3

Новый Рал

Северный Лис
1. Рал!
Фантастика:
фэнтези
попаданцы
5.70
рейтинг книги
Новый Рал

Его наследник

Безрукова Елена
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Его наследник

Венецианский купец

Распопов Дмитрий Викторович
1. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
7.31
рейтинг книги
Венецианский купец

Мастер темных Арканов

Карелин Сергей Витальевич
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных Арканов

Всплеск в тишине

Распопов Дмитрий Викторович
5. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Всплеск в тишине

Начальник милиции

Дамиров Рафаэль
1. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2