6.8.3. Язык для разработки планов
Элементы языка
Для записи ходов мы пользуемся удобными общепринятыми обозначениями типа
Аналогично, полезно иметь специальный язык для программы, работающей с деревом планов, для того чтобы выражать направленность действий или «суперходы» в планах.
Типичным действием является требование модификации поля, для кодирования которого в этом языке используются следующие обозначения: поле в произвольный момент может быть пустым V, занятым своей фигурой А или фигурой противника Е. В двух последних случаях указывается занимающая его фигура. Обозначения действий в планах приведены в следующих примерах:
(см. скан)
План двойного нападения на ферзя черных в позиции
(рис. 6.17) будет выглядеть следующим образом:
(см. скан)
Развитие планов
После составления планов программа переходит к их более детальному изучению. Каждое действие плана уточняется указанием ходов, которые его могут реализовать, т. е. из одного исходного плана возникает множество производных. Отыскиваются обходные пути для действий, прямое выполнение которых невозможно. Если, например, программе нужно удалить фигуру, то:
• если она своя, достаточно этой фигурой сделать ход (как в позиции
рис. 6.16):
т. е. белые ходят конем на поле
или
или
или
или
или h6
• если фигура принадлежит противнику, нужно выполнить одно из следующих действий:
— взять ее;
— напасть на нее;
— подставить этой фигуре свою фигуру для взятия.
В позиции
(рис. 6.16) ни один из приведенных выше ходов коня не удовлетворяет условию, накладываемому звездочкой
(сохранить инициативу), поэтому программа должна предпринять другое действие:
удаление короля равносильно сохранению инициативы.
Мы убедились в том, что конь не может ни взять, ни атаковать, ни быть взятым.
Остается ход ладьей, находящейся на поле
после чего
приводится к виду:
(см. скан)
Для реализации первой из этих задач в данной позиции не существует ни одного хода, поэтому связанный с ней промежуточный план отвергается. Для выполнения второй задачи существует единственный ход
(который пригоден и для третьей задачи, так как возможен последующий ход
Далее продолжается развитие этого плана:
добились перемещения короля.
2. К объявляет
и
Для выполнения любых действий программа ставит перед собой ряд промежуточных целей.
Приведем еще один пример. Чтобы не допустить взятия (такая задача часто ставится в локальных планах), необходимо:
• убрать фигуру из-под боя;
• поставить на пути другую фигуру (свою или противника). В позиции
(рис. 6.17) один из планов связан с ходом
но последует немедленный ответ
Возможность устранения этой опасности состоит в следующем:
Этой фигурой, в частности, может оказаться пешка противника
которая сможет выполнить эту роль, если ей подставить для взятия другую фигуру. Таким образом,
можно записать по-другому:
. В реальной позиции только одна фигура может пойти на поле
Это ладья
для которой единственной причиной такого хода будет выполнение рассматриваемого плана.
Последний ход найден программой, которая вынуждена непрерывно составлять планы и для противника, в данном случае с помощью того же приема — постановки фигуры на промежуточную позицию. Но в этом варианте простое взятие
приводит к выигрышу черных. Поэтому программа продолжает составление планов, в которых предусматривается удаление ладьи с поля
угрожающей
Очевидно, что самым простым решением является
На это программа немедленно находит ответ, привлекая механизм промежуточных целей: ход
с помощью которого черные выигрывают ферзя белых.
В процессе анализа программой отвергается большое число планов, что может в действительности привести к следующим последствиям:
• решающий ход для осуществления плана стал невозможен (например, из-за потери фигуры);
• материальный баланс очень неблагоприятен (или хуже того, который предполагался) даже в случае успешной реализации текущего плана;
• план логически невозможен из-за наличия противоречий (например, требуется одновременное выполнение условий
• невозможно устранить возникшее препятствие (например, из-за отсутствия подходящего хода);
• план отвергнут из-за слишком большой доли оптимизма при его составлении: даже если все идет лучшим образом, окончательный материальный итог неблагоприятен.
Несмотря на непрерывно происходящий процесс изменения и завершения планов, программа должна помнить основную идею первоначального замысла. Это может быть сделано с помощью специального действия, которое предусматривает в определенные моменты времени проверку условий. Например, если первоначальный замысел заключался в освобождении какого-либо поля, необходимо проверять, что данное поле действительно свободно в нужный момент времени и оно не оказалось случайно вновь занятым в результате ходов, найденных при разработке плана.