дерева игры, что
• корень дерева T — позиция P;
• все позиции из T удовлетворяют цели-поддержке;
• все терминальные позиции из T удовлетворяют главной цели (что, однако, неверно ни для одной внутренней вершины);
• для каждой внутренней позиции игрока в дереве T указан только один ход, причем он удовлетворяет ограничениям на ходы игрока;
• из каждой внутренней позиции противника исходят все ходы противника (удовлетворяющие соответствующим ограничениям).
Каждый элементарный совет можно рассматривать как описание некоторой небольшой специальной игры, имеющей следующие правила. Участникам игры разрешено ходить в пределах ограничений, наложенных на их ходы; позиция, не удовлетворяющая цели-поддержке, считается выигрышем 'противника'. Нетерминальная позиция считается выигранной с точки зрения игрока, если данный элементарный совет в ней выполним. Таким образом, для того, чтобы выиграть в этой игре, игрок должен следовать стратегии, задаваемой форсированным деревом.
15.5.3. Правила и таблицы советов
В Языках Советов отдельные элементарные советы объединяются в полную схему представления знаний, имеющую следующую иерархическую структуру. Элементарный совет является частью 'если-то'- правила. Набор 'если-то'-правил образует
Мы рассмотрим здесь упрощенную версию Языка Советов, допускающую только одну таблицу советов. Будем называть эту версию Язык Советов 0 или, для краткости, AL0 (Advice Language 0). Ниже описывается структура языка AL0, синтаксически специально приспособленная для удобной реализации на Прологе.
Программа на AL0 называется
ИмяПравила: если Условие то СписокСоветов
Условие
— это логическое выражение, состоящее из имен предикатов, соединенных между собой логическими связками и
, или
, не
. СписокСоветов
— список имен элементарных советов. Приведем пример правила под названием 'правило_края' из окончания 'король и ладья против короля':
правило_края:
если король_противника_на_краю и короли_рядом
то [мат_2, потеснить, приблизиться,
сохранить_простр, отделить].
В этом правиле говорится: если в текущей позиции король противника находится на краю доски, а король игрока расположен близко к королю противника (точнее, расстояние между королями меньше четырех клеток), то попытаться выполнить в указанном порядке предпочтения следующие советы: 'мат_2', 'потеснить', 'приблизиться', 'сохранить_простр', 'отделить'. Элементарные советы расположены в порядке убывания их 'притязаний' на успех: сначала попытаться поставить мат в два хода, если не получится — 'потеснить' короля противника в угол и т.д. Обратите внимание на то, что при соответствующем определении операторов наше правило станет синтаксически корректным предложением Пролога.
Для представления элементарных советов в виде прологовских предложений предназначен еще один формат:
совет( ИмяСовета,
ГлавнаяЦель:
ЦельПоддержка:
ХодыИгрока:
ХодыПротивника).
Цели представляются как выражения, состоящие из имен предикатов и логических связок и
, или
, не
. Ограничения на ходы сторон — это тоже выражения, состоящие из имен предикатов и связок и
и затем
: связка и
имеет обычный логический смысл, а затем
задает порядок. Например, ограничение, имеющее вид
Огр1 затем Огр2
означает: сначала рассмотреть ходы, удовлетворяющие ограничению Oгp1
, а затем — ходы, удовлетворяющие Огр2
.
Например, элементарный совет, относящийся к мату в два хода в окончании 'король и ладья против короля', записанный в такой синтаксической форме, имеет вид:
совет( мат_2,
мат:
не потеря_ладьи:
(глубина = 0) и разреш затем
(глубина = 2) и ход_шах :
(глубина = 1) и разреш ).
Здесь главная цель — мат
, цель-поддержка не потеря_ладьи
. Ограничение на ходы игрока означает: на глубине 0 (т.е. в текущей позиции) попробовать любой разрешенный ход и затем на глубине 2 (следующий ход игрока) пробовать только ходы с шахом. Глубина измеряется в полуходах. Ограничение на ходы противника: любой разрешенный ход на глубине 1.
В процессе игры таблица советов используется многократно вплоть до окончания игры, при этом выполняется следующий основной цикл: построить форсированное дерево, затем играть в соответствии с этим деревом, пока не произойдет выход из него; построить другое форсированное дерево и т.д. Форсированное дерево строится каждый раз таким образом: берется текущая позиция Поз
и просматриваются одно за другим все правила таблицы советов; для каждого правила сопоставляется Поз
с предварительным условием этого правила и просмотр прекращается, когда будет обнаружено правило, для которого Поз
удовлетворяет предварительному условию. В этом случае надо рассмотреть список советов найденного правила: обработать элементарные советы один за другим, пока не будет построено форсированное дерево, представляющее собой детальную стратегию игры в этой позиции.
Следует обратить внимание на существенность того порядка, в котором перечисляются правила в таблице советов. Правило, которое реально используется, — это первое из тех правил, предварительные условия которых согласуются с текущей позицией. Для любой возможной позиции должно существовать по крайней мере одно такое правило. Из него берется список советов, и первый из выполнимых советов списка используется в игре.
Таким образом, таблица советов это программа в высшей степени непроцедурного характера. Интерпретатор языка AL0 принимает на входе некоторую позицию, а затем, 'исполняя' таблицу советов, строит форсированное дерево, определяющее стратегию игры в этой позиции.