Методы построения и анализа алгоритмов

advertisement
Методы построения и анализа
алгоритмов
Алгоритм минимакс
Щукин Георгий Анатольевич
Новосибирский Государственный Технический Университет
Кафедра параллельных вычислительных технологий
2014
Игры с полной информацией
Игра между двумя и более соперниками
Отсутствует элемент неопределенности
(случайности)
В любой момент все игроки имеют всю
информацию о состоянии игры
Примеры: шахматы, шашки, крестики-нолики и т.п.
Игры с нулевой суммой
Игра с нулевой суммой (антагонистическая игра) —
игра между двумя игроками, выигрыши которых
противоположны
Если X и Y — множества стратегий (полных планов
действий для всевозможных ситуаций) для первого
и второго игрока соответственно, то F: X*Y → R —
функция выигрыша (оценочная функция)
F(x,y) = r — выигрыш для первого игрока (и
соответственно проигрыш для второго) при
реализации стратегий x и y
Дерево ходов
Для каждого начального или промежуточного
состояния игры можно построить дерево всех
возможных вариантов развития игры и выбрать
оптимальную стратегию, ведущую к победе или
ничьей
Для большинства реальных игр полное дерево
всех ходов очень велико
Можно сократить время на построение и анализ
дерева, рассматривая только некоторые варианты
развития игры (стратегии игроков) и заглядывая на
ограниченное число ходов вперед
Минимакс
Пусть S — текущее состояние игры
Задача игрока, который должен ходить в данный
момент — выбрать наиболее выгодный для себя
ход (состояние игры Snext), максимизирующий
значение оценочной функции F(x,y), предполагая,
что другой игрок будет выбирать ходы,
минимизирующие значение F(x,y)
Можно построить дерево возможных ходов для
состояния S (на некоторое число ходов вперед) и
выбрать оптимальную стратегию по алгоритму
минимакс
Шаги алгоритма минимакс (naive)
Для текущего состояния игры S построить дерево
возможных ходов на k ходов вперед
Вычислить значения оценочной функции для
листьев дерева (эвристика)
Далее начиная с нижнего уровня дерева: если
текущий уровень содержит ходы ходящего игрока,
сделать оценку родительского узла равной
максимуму из оценок его потомков, если ходы
противника - минимуму
В качестве следующего хода выбрать ход с
максимальной оценкой
Альфа-бета отсечение
Позволяет сократить число рассматриваемых ходов
за счет отброса некоторых ветвей дерева ходов
Вводятся две дополнительные переменные: alpha и
beta. В начале работы алгоритма alpha = -∞, beta = +∞
При анализе ветвей некоторого узла: пусть v — оценка
очередной ветви; для уровня максимизации alpha =
max(alpha, v), минимизации — beta = min(beta, v)
Если alpha ≥ beta, то анализ остальных ветвей можно
не производить и вернуть текущую оценку в качестве
оценки узла
Альфа-бета отсечение: пример
В скобках: [alpha, beta]
Зачеркнутые ветви не
рассматриваются
Полезные ссылки
http://en.wikipedia.org/wiki/Minimax
http://en.wikipedia.org/wiki/Alpha-beta_pruning
http://www.neverstopbuilding.com/minimax
http://www.dokwork.ru/2012/11/tictactoe.html
http://habrahabr.ru/post/146088/
Download