Напишите программу для какой-нибудь простой
игры (такой, как
Назад | Содержание | Вперёд
Назад | Содержание | Вперёд
15. 2. Минимаксный принцип
Для игр, представляющих интерес, полный
просмотр игрового дерева невозможен, поэтому
были разработаны другие методы,
предусматривающие просмотр только части дерева
игры. Среди этих методов существует страндартный
метод поиска, используемый в игровых (особенно в
шахматных) программах и основанный на
Обратите внимание на то, что мы здесь делаем определенное различие между "деревом игры" и "деревом поиска". Дерево поиска - это только часть дерева игры (его верхняя часть), т. е. та его часть, которая была явным образом порождена в процессе поиска. Таким образом, терминальные поисковые позиции совсем не обязательно должны совпадать с терминальными позициями самой игры.
Очень многое зависит от оценочной функции,
которая для большинства игр, представляющих
интерес, является приближенной эвристической
оценкой шансов на выигрыш одного из участников
игры. Чем выше оценка, тем больше у него шансов
выиграть и чем ниже оценка, тем больше шансов на
выигрыш у его противника. Поскольку один из
участников игры всегда стремится к высоким
оценкам, а другой - к низким, мы дадим им имена
МАКС и МИН соответственно. МАКС всегда выбирает
ход с максимальной оценкой; в противоположность
ему МИН всегда выбирает ход с минимальной
оценкой. Пользуясь этим принципом (
. Лучший ответ МИН'а на этот ход -
, и т.д. Эту последовательность ходов называют также
. Основной вариант показывает, какова "минимаксно-оптимальная" игра для обоих участников. Обратите внимание на то, что оценки всех позиций, входящих в основной вариант, совпадают.
Рис. 15. 2. Статические (нижний уровень) и минимаксные рабочие
оценки вершин дерева поиска. Выделенные ходы
образуют
Мы различаем два вида оценок: оценки вершин нижнего уровня
и оценки внутренних вершин
(рабочие оценки). Первые из них называются также
"статическими"
, так как они вычисляются при помощи "статической" оценочной функции, в противоположность рабочим оценкам, получаемым "динамически" при распространении статических оценок вверх по дереву.
Правила распространения оценок можно
сформулировать следующим образом. Будем
обозначать статическую оценку позиции
если
если
если
% Минимаксная процедура: минимакс( Поз, ЛучшПоз, Оц)
% Поз - позиция, Оц - ее минимаксная оценка;
% лучший ход из Поз ведет в позицию ЛучшПоз
минимакс( Поз, ЛучшПоз, Оц) :-
ходы( Поз, СписПоз), !,
% СписПоз - список разрешенных ходов
лучш( СписПоз, ЛучшПоз, Оц);
стат_оц( Поз, Оц). % Поз не имеет преемников
лучш( [Поз], Поз, Оц) :-
минимакс( Поз, _, Оц), !.
лучш( [Поз1 | СписПоз], ЛучшПоз, ЛучшОц) :-
минимакс( Поз1, _, Оц1),
лучш( СписПоз, Поз2, Оц2),
выбор( Поз1, Оц1, Поз2, Оц2, ЛучшПоз, ЛучшОц).