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

 ходы_противника( Совет, ХодыПр),

 bagof ( Ход .. Поз1, ход( ХодыПр, Поз, Ход, Поз1), ХПспис),

 выполн_все( Совет, ХПспис, КорнПоз, ФДеревья).

  % Совет выполним во всех преемниках Поз

выполн_все( _, [], _, []).

выполн_все( Совет, [Ход .. Поз | ХПспис], КорнПоз,

 [Ход .. ФД | ФДД] ) :-

 выполн( Совет, Поз, КорнПоз, ФД),

выполн_все( Совет, ХПспис, КорнПоз, ФДД).

% Интерпретация главной цели и цели-поддержки:

% цель - это И / ИЛИ / НЕ комбинация. имен предикатов

удовл( Цель1 и Цель2, Поз, КорнПоз) :- !,

 удовл( Цель1, Поз, КорнПоз),

 удовл( Цель2, Поз, КорнПоз).

удовл( Цель1 или Цель2, Поз, КорнПоз) :- !,

 ( удовл( Цель1, Поз, КорнПоз);

   удовл( Цель2, Поз, КорнПоз) ).

удовл( не Цель, Поз, КорнПоз) :- !,

 not удовл( Цель, Поз, КорнПоз ).

удовл( Пред, Поз, КорнПоз) :-

 ( Усл =.. [Пред, Поз];

  % Большинство предикатов не зависит от КорнПоз

   Усл =.. [Пред, Поз, КорнПоз] ),

 call( Усл).

% Интерпретация ограничений на ходы

ход( Ходы1 и Ходы2, Поз, Ход, Поз1) :- !,

 ход( Ходы1, Поз, Ход, Поз1),

 ход( Ходы2, Поз, Ход, Поз1).

ход( Ходы1 затем Ходы2, Поз, Ход, Поз1) :- !,

 ( ход( Ходы1, Поз, Ход, Поз1);

   ход( Ходы2, Поз, Ход, Поз1) ).

% Доступ к компонентам элементарного совета

главцель( ГлЦ : _, ГлЦ).

поддержка( ГлЦ : ЦП : _, ЦП).

ходы_игрока( ГлЦ : ЦП : ХодыИгрока : _, Ходы Игрока).

ходы_противника( ГлЦ : ЦП: ХодыИгр : ХодыПр :_,

 ХодыПр).

принадлежит( X, [X | Спис]).

принадлежит( X, [Y | Спис]) :-

 принадлежит( X, Спис).

Рис. 15.6. Миниатюрный интерпретатор языка AL0.

Форсированное дерево — это дерево ходов, представленное в программе следующей структурой:

Ход .. [ Ответ1 .. Фдер1, Ответ2 .. Фдер2, ... ]

Здесь ".." — инфиксный оператор; Ход — первый ход "игрока"; Ответ1, Ответ2, … — возможные ответы противника; Фдер1, Фдер2, … — форсированные поддеревья для каждого из этих ответов.

<p>15.6.2. Программа на языке советов для эндшпиля "король и ладья против короля"</p>

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

Повторять циклически, пока не будет поставлен мат (постоянно проверяя, что не возникла патовая позиция и что нет нападения на незащищенную ладью):

(1) Найти способ поставить королю противника мат в два хода.

(2) Если не удалось, то найти способ уменьшить ту область доски, в которой король противника "заперт" под воздействием ладьи.

(3) Если и это не удалось, то найти способ приблизить своего короля к королю противника.

(4) Если ни один из элементарных советов 1, 2, или 3 не выполним, то найти способ сохранить все имеющиеся к настоящему моменту "достижения" в смысле (2) и (3) (т.е. сделать выжидающий ход).

(5) Если ни одна из целей 1, 2, 3 или 4 не достижима, то найти способ получить позицию, в которой ладья занимает вертикальную или горизонтальную линию, отделяющую одного короля от другого.

Описанные выше принципы реализованы во всех деталях в таблице советов на языке AL0, показанной на рис. 15.7. Эта таблица может работать под управлением интерпретатора рис. 15.6. Рис. 15.8 иллюстрирует смысл некоторых из предикатов, использованных в таблице советов, а также показывает, как эта таблица работает.

В таблице используются следующие предикаты:

Предикаты целей

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных