Алгоритм минимакса

У меня есть простой вопрос относительно алгоритма минимакса: например, для игры в крестики-нолики, как определить функцию полезности для каждого игрока? Это не происходит автоматически, не так ли? Я должен жестко кодировать значения в игре, он не может узнать их сам, не так ли?

4 ответов


нет, Минимакс не учится. Это более умная версия поиска дерева грубой силы.


обычно вы реализуете функцию утилиты напрямую. В этом случае алгоритм не будет учиться играть в игру, он будет использовать информацию, которую вы явно жестко закодировали в реализации.

однако, можно было бы использовать генетического программирования (GP) или какой-либо эквивалентный метод для автоматического получения функции полезности. В этом случае вам не придется кодировать какую-либо явную стратегию. Вместо этого эволюция откроет его собственный способ играть в игру хорошо.

вы можете либо объединить свой код минимакса и код GP в единую (возможно, очень медленную) адаптивную программу, либо сначала запустить GP, найти хорошую функцию утилиты, а затем добавить эту функцию в свой код минимакса так же, как и любую функцию с ручным кодом.


крестики-нолики достаточно малы, чтобы запустить игру до конца и назначить 1 для победы, 0 для ничьей и -1 для поражения.

в противном случае вы должны предоставить функцию, которая определяет стоимость позиции эвристически. В шахматах, например, большим фактором является ценность материала, но также и то, кто контролирует центр или как легко фигуры могут двигаться.

Что касается обучения, вы можете добавить весовые коэффициенты к различным аспектам позиции и попытаться оптимизировать их многократно игра.


Как определить функцию полезности для каждой игры?

Внимательно ;-) Это статьи показывает, как слегка ошибочная функция оценки (например. который либо не идет "достаточно глубоко", заглядывая вперед в дерево возможных ПЛИС, либо тот, который не может захватить относительную прочность некоторых позиций платы), приводит к общему слабому алгоритму (который чаще теряет).

он не может узнать их на себя, не это?

нет, это не так. Однако есть способы заставить компьютер узнать относительную силу позиций платы. Например, заглянув в Дональд Митчи и его программа угрозы вы увидите, как стохастический процесс может быть использован для изучения платы без каких-либо априори знание, но правила игры. Самое смешное, что, хотя это может быть реализовано в компьютерах, несколько сотен цветных шариков и спичечных коробков все это требуется, благодаря относительно небольшим размерам игрового пространства, а также благодаря различным симметриям.

после изучения такого классного способа обучения компьютера, Как играть, мы не можем быть так заинтересованы в возвращении к MinMax применительно к крестики-нолики. Ведь MinMax-относительно простой способ обрезки дерева решений, который вряд ли нужен с небольшим игровым пространством tic-tac-toe. Но, если мы должны ; -) [вернуться к MinMax]...

мы можно заглянуть в" спичечный коробок", связанный со следующей игрой (т. е. не углубляясь вообще), и использовать процент шариков, связанных с каждым квадратом, в качестве дополнительного фактора. Затем мы можем оценить традиционное дерево, но только, скажем, 2 или 3 хода глубоко (неглубокая глубина взгляда вперед, которая обычно заканчивается обычно в потерях или ничьих) и оценить каждый следующий ход на основе простого -1 (потеря), 0 (ничья/неизвестно), +1 (выигрыш) рейтинг. К тому времени, комбинируя процент бисера и простой рейтинг (скажем, сложение, конечно, не умножение), мы можем эффективно использовать MinMax таким образом, который больше похож на то, как он используется в случаях, когда невозможно оценить игровое дерево до его конца.

Итог: В случае крестики-нолики, MinMax только становится более интересным (например, помогая нам исследовать эффективность конкретной функции полезности), когда мы удаляем детерминированный характер игры, связанный с легкой оценкой полной дерево. Другой способ сделать игру [математически] интересной-играть с противником, который делает ошибки...