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

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

Жанры

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

Братко Иван

Шрифт:

ладья_под_боем( ЧейХод..Б..Л..Ч.._ ) :-

 расст( Б, Л, P1),

 расст( Ч, Л, Р2),

 ( ЧейХод = б, !, P1 > Р2 + 1;

ЧейХод = ч, !, P1 > Р2 ).

ближе_к_клетке( Поз, КорнПоз) :-

 расст_до_клетки( Поз, P1),

 расст_до_клетки( КорнПоз, Р2),

 P1 < Р2.

расст_до_клетки(
Поз, Мрасст) :-

% Манхеттеновское расстояние

 бк( Поз, БК), % между БК и критической клеткой

 кк( Поз, КК), % Критическая клетка

 манх_расст( БК, КК, Мрасст).

раздел( _..Бх : Бу..Лх : Лу.. Чх : Чу.._ ) :-

 упоряд( Бх, Лх, Чх), !;

 упоряд( Бу, Лу, Чу).

l_конфиг( _..Б..Л..Ч.._ ) :- % L - конфигурация

 манх_расст( Б, Ч, 2),

 манх_расст( Л, Ч, 3).

не дальше_от_ладьи( _..Б..Л.._, _..Б1..Л1.._ ) :-

 расст( Б, Л, P),

 расст( Б1, Л1, P1),

 P =< P1.

простр_больше_2( Поз) :-

 простр( Поз, Пр),

 Пр > 2.

наш_король_на_краю( _..X : Y.._ ) :-

% Белый король на краю

 ( X = 1, !; X = 8, !; Y = 1, !; Y = 8).

король_противника_на_краю( _..Б..Л..X : Y.._ ) :-

% Черный король на краю

 ( X = 1, !; X = 8, !; Y = 1, !; Y = 8).

короли_рядом( Поз) :- % Расстояние между королями < 4

 бк( Поз, БК), чк( Поз, ЧК),

 расст( БК, ЧК, P),

 P < 4.

потеря_ладьи( _..Б..Л..Л.._ )- % Ладья взята

потеря_ладьи( ч..Б..Л..Ч.._ ) :-

 сосед( Ч, Л), % Черный король напал на ладью

 not сосед( Б, Л). % Белый король не защищает ладью

расст( X : Y, X1 : Y1, P) :- % Расстояние до короля

 абс_разн( X, X1, Рх),

 абс_разн( Y, Y1, Ру),

 макс( Рх, Ру, P).

абс_разн( А, В, С) :-

 А > В, !, С is A - В;

 С is В - А.

макс( А, В, М) :-

 А >=
В, !, М = А;

 М = В.

манх_расст( X : Y, X1 : Y1, P) :- % Манхеттеновское расстояние

 абс_разн( X, X1, Рх),

 абс_разн( Y, Y1, Ру),

 P is Рх + Ру.

простр( Поз, Пр) :-

% Область, в которой "заперт" черный король

 бл( Поз, Лх : Лу),

 чк( Поз, Чх : Чу),

 ( Чх < Лх, СторонаХ is Лх - 1;

Чх > Лх, СторонаХ is 8 - Лх ),

 ( Чу < Лу, СторонаY is Лу - 1;

Чу > Лу, СторонаY is 8 - Лу ),

 Пр is СторонаХ * СторонаY, !;

 Пр = 64. % Ладья и черный король на одной линии

кк( _..Б..Лх : Лу.. Чх : Чу.._, Кх : Ку) :-

% Критическая клетка

 ( Чх < Лх, !, Кх is Лх - 1; Кх is Лх + 1),

 ( Чу < Лу, !, Ку is Лу - 1; Ку is Лу + 1).

% Процедуры для отображения позиций

отобр( Поз) :-

 nl,

 коорд( Y), nl,

 коорд( X),

 печ_фиг( X : Y, Поз),

 fail.

отобр( Поз) :-

 чей_ход( Поз, ЧХ), глуб( Поз, Г),

 nl, write( 'ЧейХод='), write( ЧХ),

 write( 'Глубина='), write( Г), nl.

печ_фиг( Клетка, Поз):-

 бк( Поз, Клетка), !, write( 'Б');

 бл( Поз, Клетка), !, write( 'Л');

 чк( Поз, Клетка), !, write( 'Ч');

 write( '.').

показать_ход( Ход) :-

 nl, write( Ход), nl.

Рис. 15.10. Библиотека предикатов для окончания "король и ладья против короля".

Проект

Рассмотрите какой-нибудь другой простой эндшпиль, например "король и пешка против короля", и напишите для него программу на языке AL0 (вместе с определениями соответствующих предикатов).

Резюме

• Игры двух лиц поддаются формальному представлению в виде И/ИЛИ-графов. Поэтому процедуры поиска в И/ИЛИ-графах применимы для поиска в игровых деревьях.

• Простой алгоритм поиска в глубину в игровых деревьях легко программируется, но для игр, представляющих интерес, он не эффективен. Более реалистичный подход — минимаксный принцип в сочетании с оценочной функцией и поиском, ограниченным по глубине.

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

Черный дембель. Часть 2

Федин Андрей Анатольевич
2. Черный дембель
Фантастика:
попаданцы
альтернативная история
4.25
рейтинг книги
Черный дембель. Часть 2

Кодекс Крови. Книга ХIV

Борзых М.
14. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХIV

Магия чистых душ 3

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Магия чистых душ 3

Жестокая свадьба

Тоцка Тала
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Жестокая свадьба

Усадьба леди Анны

Ром Полина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Усадьба леди Анны

Измена. Возвращение любви!

Леманн Анастасия
3. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Возвращение любви!

Два лика Ирэн

Ром Полина
Любовные романы:
любовно-фантастические романы
6.08
рейтинг книги
Два лика Ирэн

Опасная любовь командора

Муратова Ульяна
1. Проклятые луной
Фантастика:
фэнтези
5.00
рейтинг книги
Опасная любовь командора

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

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

Мымра!

Фад Диана
1. Мымрики
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Мымра!

Таня Гроттер и магический контрабас

Емец Дмитрий Александрович
1. Таня Гроттер
Фантастика:
фэнтези
8.52
рейтинг книги
Таня Гроттер и магический контрабас

Имперский Курьер

Бо Вова
1. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Имперский Курьер

Страж. Тетралогия

Пехов Алексей Юрьевич
Страж
Фантастика:
фэнтези
9.11
рейтинг книги
Страж. Тетралогия

Сердце дракона. Танец с врагом

Серганова Татьяна
2. Танец с врагом
Любовные романы:
любовно-фантастические романы
5.25
рейтинг книги
Сердце дракона. Танец с врагом