Вход/Регистрация
Prolog
вернуться

Неизвестно

Шрифт:

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

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

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

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

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

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

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

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

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

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

*/

:- ор( 500, xfx, :).

:- ор( 600, xfx, --->).

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

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

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

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

% расширяет Дер в пределах ограничения Предел

% и порождает НовДер с "решающим статусом" ЕстьРеш.

% Случай 1: выход за ограничение

расширить( Дер, Предел, Дер, нет) :-

f( Дер, F), F > Предел, !. % Выход за ограничение

% В остальных случаях F <= Предел

% Случай 2: встретилась целевая вершина

расширить( лист( Верш, F, С), _, решлист( Верш, F), да) : -

цель( Верш), !.

% Случай 3: порождение преемников листа

расширить( лист( Верш, F,C), Предел, НовДер, ЕстьРеш) :-

расшлист( Верш, С, Дер1), !,

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

ЕстьРеш = никогда, !. % Нет преемников, тупик

% Случай 4: расширить дерево

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

Предел, НовДер, ЕстьРеш) :-

Предел1 is Предел - С,

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

продолжить( ЕстьРеш1, Верш, С, НовПоддер, Предел,

НовДер, ЕстьРеш).

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

% расширяет деревья из заданного списка с учетом

% ограничения Предел и выдает новый список Деревья1

% с "решающим статусом" ЕстьРеш.

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

выбор( Деревья, Дер, ОстДер, Предел, Предел1),

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

собрать( ОстДер, НовДер, ЕстьРеш1, Деревья1, ЕстьРеш).

% "продолжить" решает, что делать после расширения

% списка деревьев

продолжить( да, Верш, С, Поддеревья, _,

решдер( Верш, F, Поддеревья), да): -

оценка( Поддеревья, Н), F is С + H, !.

продолжить( никогда, _, _, _, _, _, никогда) :- !.

продолжить( нет, Верш, С, Поддеревья, Предел,

НовДер, ЕстьРеш) :-

  • Читать дальше
  • 1
  • ...
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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