2016-12-19 15 views
1

Я кодирую алгоритм Minimax для воспроизведения Mancala в python. У меня нет проблем с кодом, но с алгоритмом.
В Mancala вы можете заработать бесплатный ход, и я не знаю, как создать узел для этого состояния игры. Для минимакса предполагается, что min делает ход после max и наоборот, но когда max получает свободный ход, max делает два последовательных движения.
Я не знаю, как это реализовать, потому что, когда max зарабатывает свободное движение, вам нужно снова выбирать между различными возможностями макс.Неполадка, приближающаяся к Манкале, свободно перемещается в Minimax Node

Не мог бы кто-нибудь мне помочь? Большое спасибо.

+2

Вы можете сделать различие между движениями и слоями. Перемещение может состоять из одного или нескольких слоев (за счет получения свободных слоев), поэтому каждый игрок делает всего один ход. Хотя, если вы можете получить несколько бесплатных слоев подряд, количество возможных ходов может стать довольно большим. – maraca

+1

@maraca Я думал, например, когда свободный ход был выигран макс, у него будет только один мин-сундук с одним и тем же игровым состоянием и без движения. Таким образом, max может оценить все возможные движения из этого минимального состояния, которое совпадает с тем, когда он выиграл свободный ход. Как вы думаете? – Lopan

+0

Это также возможно, но немного опасно. Вы можете в конечном итоге с незаконными ходами, если вы можете получить больше бесплатных слоев, чем maxdepth/2. Это может недооценить ходы с 2 или более слоями. Также вы оцениваете доску на разных глубинах, но это, вероятно, хорошо. – maraca

ответ

0

Наконец-то я сделал это так. Используя логическое значение, когда max игрок, например, получает свободный ход, вы создаете дочерний узел min с тем же игровым состоянием, что и раньше, и без увеличения значения глубины. Этот минимальный узел просто создает еще один макс-узел с тем же игровым состоянием, что и раньше, и без увеличения глубины. Это сработало для меня!