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

6ec30db9

Иллюстрирует смысл некоторых из



Рисунок 15.8 иллюстрирует смысл некоторых из предикатов, использованных в таблице советов, а также показывает, как эта таблица работает.

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

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

мат                                мат королю противника

    пат                                 пат королю противника

    потеря_ладьи              король противника может взять ладью

    ладья_под_боем          король противника может напасть на ладью прежде, чем наш
                                            король сможет ее защитить

    уменьш_простр


          уменьшилось "жизненное пространство" короля противника,
                                            ограничиваемое ладьей

    раздел                           ладья занимает вертикальную или горизонтальную линию,
                                            разделяющую королей

    ближе_к_клетке         наш король приблизился к "критической клетке" (см. Рисунок 15.9),
                                            т.е. манхеттеновское расстояние до нее уменьшилось

    l_конфиг                      "L-конфигурация" (Рисунок 15.9)

    простр_больше_2       "жизненное пространство" короля противника занимает
                                          больше двух клеток

Предикаты, ограничивающие ходы

    глубина = N                  ход на глубине N дерева поиска
    разреш                           любой разрешенный ход
    ход_шах                         ход, объявляющий шах
    ход_ладьей                   ход ладьей
    нет_хода                       ни один ход не подходит
    сначала_диаг               ход королем, преимущественно по диагонали

line();

% Окончание "король и ладья против короля" на языке AL0

% Правила

        правило_края:
                     если король_противника_на_краю и короли_рядом
                     то [мат_2, потеснить, приблизиться,
                             сохранить_простр, отделить_2, отделить_3].

        иначе_правило
                     если любая_поз
                     то [ потеснить, приблизиться, сохранить_простр,
                             отделить_2, отделить_3].

% Элементарные советы

        совет( мат_2,
                     мат :
                     не потеря_ладьи и король_противника_на_краю:
                     (глубина = 0) и разреш
                     затем (глубина = 2) и ход_шах :
                     (глубина = 1) и разреш ).

        совет( потеснить,
                     уменьш_простр и не ладья_под_боем и
                     раздел и не пат :
                     не потеря_ладьи :
                     (глубина = 0) и ход_ладьей :
                     нет_хода ).

        совет( приблизиться,
                     ближе _к_клетке и не ладья_под_боем и
                     (раздел или l_конфиг) и
                     (простр_больше_2 или не наш_король_на_краю):
                     не потеря_ладьи :
                     (глубина = 0) и сначала_диаг :
                     нет_хода ).

        совет( сохранить_простр,
                     ход_противиика и не ладья_под_боем и раздел
                     и не_дальше_от_ладьи и
                     (простр_больше_2 или не наш_король_на_краю):
                     не потеря_ладьи :
                     (глубина = 0) и сначала_диаг :
                     нет_хода ).

        совет( отделить_2,
                     ход_противника и раздел и не ладья_под_боем:
                     не потеря_ладьи :
                     (глубина < 3) и разреш :
                     (глубина < 2) и разреш ).

        совет( отделить_3,
                     ход_противника и раздел и не ладья_под_боем:
                     не потеря_ладьи :
                     (глубина < 5) и разреш :
                     (глубина < 4) и разреш ).

line();



Содержание раздела