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

на главную - закладки

Жанры

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

Братко Иван

Шрифт:

 f( с) = g( c) + h( c) = 6 + 4 = 10

 f( e) = g( e) + h( e) = 2 + 7 = 9

Поскольку f( e) < f( c), Процесс 2 переходит к f, a Процесс 1 ждет. Однако

 f( f) = 7 + 4 = 11

 f( c) = 10

 f( c) < f( f)

Поэтому Процесс 2 останавливается, а Процессу 1 дается разрешение продолжать движение, но только до d, так как f( d) = 12 > 11.

Происходит активация Процесса 2, после чего он, уже не прерываясь, доходит до цели t.

Мы реализуем этот механизм программно при помощи усовершенствования программы поиска в ширину (рис. 11.13). Множество путей-кандидатов представим деревом. Дерево будет изображаться в программе в виде терма, имеющего одну из двух форм:

(1) 

л( В, F/G)
 — дерево, состоящее из одной вершины (листа);
В
 — вершина пространства состояний,
G
 — 
g( B)
 (стоимость уже найденного пути из стартовой вершины в
В
); 
F - f( В)
 = 
G + h( В)
.

(2) 

д( В, F/G, Пд)
 — дерево с непустыми поддеревьями;
В
 — корень дерева,
Пд
 — список поддеревьев;
G
 — 
g( B)
F
 — уточненное значение
f( В)
, т.е. значение f для наиболее перспективного преемника вершины
В
; список
Пд
упорядочен в порядке возрастания f– оценок поддеревьев.

Уточнение значения f необходимо для того, чтобы дать программе возможность распознавать наиболее перспективное поддерево (т.е. поддерево, содержащее наиболее перспективную концевую вершину) на любом уровне дерева поиска. Эта модификация f– оценок на самом деле приводит к обобщению, расширяющему область определения функции f. Теперь функция f определена не только на вершинах, но и на деревьях. Для одновершинных деревьев (листов) n остается первоначальное определение

 f( n) = g( n) + h( n)

Для дерева T с корнем n, имеющем преемников m1m2, …, получаем

 

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

Так же, как и в случае поиска в ширину (рис. 11.13), ключевую роль играет процедура

расширить
, имеющая
на этот раз шесть аргументов:

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

Эта процедура расширяет текущее (под)дерево, пока f– оценка остается равной либо меньшей, чем

Предел
.

% Поиск с предпочтением

эврпоиск( Старт, Решение) :-

 макс_f( Fмакс). % Fмакс > любой f-оценки

расширить( [], л( Старт, 0/0), Fмакс, _, да, Решение).

расширить( П, л( В, _ ), _, _, да, [В | П] ) :-

 цель( В).

расширить( П, л( В, F/G), Предел, Дер1, ЕстьРеш, Реш) :-

 F <= Предел,

 ( bagof( B1/C, ( после( В, В1, С), not принадлежит( В1, П)),

Преемники), !,

 преемспис( G, Преемники, ДД),

 опт_f( ДД, F1),

 расширить( П, д( В, F1/G, ДД), Предел, Дер1,

ЕстьРеш, Реш);

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

расширить( П, д( В, F/G, [Д | ДД]), Предел, Дер1,

 ЕстьРеш, Реш) :-

 F <= Предел,

 опт_f( ДД, OF), мин( Предел, OF, Предел1),

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

 продолжить( П, д( В, F/G, [Д1, ДД]), Предел, Дер1,

 ЕстьРеш1, ЕстьРеш, Реш).

расширить( _, д( _, _, []), _, _, никогда, _ ) :- !.

% Тупиковое дерево - нет решений

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

 f( Дер, F), F > Предел. % Рост остановлен

продолжить( _, _, _, _, да, да, Реш).

продолжить( П, д( В, F/G, [Д1, ДД]), Предел, Дер1,

 ЕстьРеш1, ЕстьРеш, Реш) :-

 ( ЕстьРеш1 = нет, встав( Д1, ДД, НДД);

ЕстьРеш1 = никогда, НДД = ДД),

 опт_f( НДД, F1),

 расширить( П, д( В, F1/G, НДД), Предел, Дер1,

ЕстьРеш, Реш).

преемспис( _, [], []).

преемспис( G0, [В/С | ВВ], ДД) :-

 G is G0 + С,

 h( В, H), % Эвристика h(B)

 F is G + H,

 преемспис( G0, ВВ, ДД1),

 встав( л( В, F/G), ДД1, ДД).

% Вставление дерева Д в список деревьев ДД с сохранением

% упорядоченности по f-оценкам

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

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

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

На Ларэде

Кронос Александр
3. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На Ларэде

Охота на попаданку. Бракованная жена

Герр Ольга
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Охота на попаданку. Бракованная жена

Кай из рода красных драконов

Бэд Кристиан
1. Красная кость
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кай из рода красных драконов

Хозяйка Проклятой Пустоши. Книга 2

Белецкая Наталья
2. Хозяйка Проклятой Пустоши
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка Проклятой Пустоши. Книга 2

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Потусторонний. Книга 2

Погуляй Юрий Александрович
2. Господин Артемьев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Потусторонний. Книга 2

Чапаев и пустота

Пелевин Виктор Олегович
Проза:
современная проза
8.39
рейтинг книги
Чапаев и пустота

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

Лютая

Шёпот Светлана Богдановна
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Лютая

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4

Ученик

Губарев Алексей
1. Тай Фун
Фантастика:
фэнтези
5.00
рейтинг книги
Ученик

Начальник милиции. Книга 5

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