Программирование на языке Пролог для искусственного интеллекта
Шрифт:
Рис. 15.6. Миниатюрный интерпретатор языка AL0.
Форсированное дерево — это дерево ходов, представленное в программе следующей структурой:
Здесь "
15.6.2. Программа на языке советов для эндшпиля "король и ладья против короля"
Общий принцип достижения выигрыша королем и ладьей против единственной фигуры противника, короля, состоит в том, чтобы заставить короля отступить к краю доски или, при необходимости, загнать его в угол, а затем поставить мат в несколько ходов. В детальном изложении эта стратегия выглядит так:
Повторять циклически, пока не будет поставлен мат (постоянно проверяя, что не возникла патовая позиция и что нет нападения на незащищенную ладью):
(1) Найти способ поставить королю противника мат в два хода.
(2) Если не удалось, то найти способ уменьшить ту область доски, в которой король противника "заперт" под воздействием ладьи.
(3) Если и это не удалось, то найти способ приблизить своего короля к королю противника.
(4) Если ни один из элементарных советов 1, 2, или 3 не выполним, то найти способ сохранить все имеющиеся к настоящему
(5) Если ни одна из целей 1, 2, 3 или 4 не достижима, то найти способ получить позицию, в которой ладья занимает вертикальную или горизонтальную линию, отделяющую одного короля от другого.
Описанные выше принципы реализованы во всех деталях в таблице советов на языке AL0, показанной на рис. 15.7. Эта таблица может работать под управлением интерпретатора рис. 15.6. Рис. 15.8 иллюстрирует смысл некоторых из предикатов, использованных в таблице советов, а также показывает, как эта таблица работает.
В таблице используются следующие предикаты:
Предикаты целей
мат | мат королю противника |
пат | пат королю противника |
потеря_ладьи | король противника может взять ладью |
ладья_под_боем | король противника может напасть на ладью прежде, чем наш король сможет ее защитить |
уменьш_простр | уменьшилось "жизненное пространство" короля противника, ограничиваемое ладьей |
раздел | ладья занимает вертикальную или горизонтальную линию, разделяющую королей |
ближе_к_клетке | наш король приблизился к "критической клетке" (см. рис. 15.9), т.е. манхеттеновское расстояние до нее уменьшилось |
l_конфиг | "L-конфигурация" (рис. 15.9) |
простр_больше_2 | "жизненное пространство" короля противника занимает больше двух клеток |
Предикаты, ограничивающие ходы
глубина = N | ход на глубине N дерева поиска |
разреш | любой разрешенный ход |
ход_шах | ход, объявляющий шах |
ход_ладьей | ход ладьей |
нет_хода | ни один ход не подходит |
сначала_диаг | ход королем, преимущественно по диагонали |