Рассуждения о графах и играх
В целом обычно игру на одного из теории игр можно приравнять к решению задачи теории оптимального управления. Обычно с такой игрой на одного есть два связанных с ней графа. Первый граф — орграф состояний игры. Его ноды — это состояния игры (например, для кубика Рубика одно состояние — это текущая раскраска сторон на кубике). Направленные рёбра этого орграфа — это просто состояния, из которых можно перейти из этого состояния (для кубика Рубика это то, как мы можем его повернуть на каждом шаге). Тогда среди нод будет целевая нода, которая говорит о том, что мы выиграли (для кубика Рубика — это когда каждая сторона окрашена своим цветом), и начальная нода (для кубика Рубика это текущее состояние кубика, которое у нас есть).
Второй граф — это дерево ходов. В разных состояниях игры у меня есть набор возможных действий. Я могу выбрать сначала одно действие, затем второе, третье и т. д. В таком случае я приду в конце концов к листу дерева, который обозначает выигрыш или проигрыш, либо просто зациклюсь и ни к чему никогда не приду, а значит, не выиграю (для кубика Рубика это как если бы я сначала повернул одну его сторону, потом повернул её обратно и так продолжал делать бесконечно, оставаясь на месте).
Если анализировать первый граф (орграф), то задача поиска наибыстрейшего выигрыша в игре сводится к задаче нахождения минимального пути на этом орграфе от начальной ноды A до выигрышной ноды Y. Этот минимальный путь способен находить алгоритм BFS, причём он это делает за O(V+E) (количество вершин + количество рёбер).
Также мы понимаем, что можем найти компоненты сильной связности на этом орграфе, и если компонента — сток и в ней нет выигрышной ноды Y, то все другие ноды этой компоненты тоже не выигрышные.
С точки зрения динамического программирования ускорить поиск BFS можно, если мы знаем, что у ноды Y (поиск от обратного), как и у следующих перед ней нод, количество рёбер, входящих в неё, не особо велико; тогда часть нод можно явно отсечь.
Очевидно, что алгоритм BFS на орграфе — это в каком-то смысле перебор вариантов, и проблемы начинаются, когда рёбер и нод становится слишком много (как в кубике Рубика или пятнашках). BFS найдёт путь и выигрыш для них, но будет делать это очень долго. Нужен способ отсечения ненужных путей (выходных рёбер) из ноды состояний игры. И тогда возникает действительно важный вопрос: а есть ли какая-то надструктура, которая порождает этот орграф игры, и можно ли этот орграф как-то сжать или получить через конечные правила?
Важная особенность орграфа игры в том, что из него в принципе не всегда можно установить наличие выигрышной стратегии даже через BFS. Для примера можно привести такую игру. Пусть есть лягушка, которая прыгает по числовой прямой на +2 и −2 шага от нулевой ноды. Выигрыш — если лягушка попадёт на ноду 13. Если мы построим орграф игры и попытаемся через BFS найти, можно ли попасть на ноду 13, то мы уйдём в бесконечный поиск выигрышной ноды 13. Причём мы даже не сможем сказать, что в ноду 13 невозможно попасть в принципе, хотя бы потому, что в неё можно попасть из нод 11 и 15 и т. д. Важно, что эта задача решается элементарно через описание правил игры и использование на этих правилах квантора всеобщности, логики предикатов и двух видов доказательств по индукции. То есть мы можем доказать конечным доказательством, что лягушка никогда не попадёт в ноду 13, а значит, выигрыш невозможен. Соответственно, можем ли мы утверждать, что математическая теория и логика предикатов важнее в игре на одного в целом, чем собственно анализ орграфа игры?