Не пытайтесь изменить сам минимаксный алгоритм для этого, вместо этого измените представление игры, чтобы приспособиться.Есть в основном два решения:
- Представляет последовательность ходов, сделанных одним игроком, как один ход.Это работает, когда игра проста, но не всегда.Я написал движок ИИ для игры, в которой генерация этого дерева (описанного в правилах игры как один «ход») является трудной для PSPACE (и имела очень большое n для реальных игр), означая, что она неосуществима в вычислительном отношении.С другой стороны, если моделирование этого способа легко для вашей конкретной игры, сделайте это таким образом
- Представьте последовательности ходов, сделанных одним игроком, как последовательности ходов, чередующихся ходов, где другой игрок делаетДелать что-нибудь.Таким образом, вы добавляете часть информации в состояние игры всякий раз, когда выполняется ваше условие, так что единственный ход, который может сделать другой игрок, не меняет состояние.Этот метод математически правильный, и когда я использовал его, он работал довольно хорошо на практике.Единственная сложность, которую следует иметь в виду, заключается в том, что если вы используете итеративное углубление , вы будете недооценивать деревья игр, в которых один игрок перемещается много раз подряд.Вам также может понадобиться быть осторожным при разработке эвристики хранения для использования с таблицей транспонирования и другими хэшами
Я не знаю ни одной литературы, которая бы освещала вашу конкретную проблему.Я чувствовал себя умным, когда пришел к решению 2, описанному выше, но подозреваю, что многие другие изобрели такой же трюк.
Я должен сказать, что правильно подобрать минимаксную семью на удивление сложно.При разработке ИИ для поиска игр на языках высокого уровня хитрость заключается в том, чтобы проверить свои алгоритмы поиска в более простых играх (уменьшенный размер доски, использовать крестики-нолики и т. Д.), Чтобы убедиться в их корректности.Если игра маленькая, вы можете:убедитесь, что его результаты имеют смысл, сыграв в игру вручную и б.протестируйте продвинутые алгоритмы, такие как negascout , убедившись, что они дают тот же ответ, что и наивный negamax.Также хорошей идеей является попытаться сохранить код с поведением, специфичным для игры (функции оценки, представления на доске, эвристики поиска и хранения и т. Д.), От кода, который выполняет поиск по дереву.