Итак, я играл с деревьями minmax, чтобы создать простого компьютерного игрока в настольную игру для двух человек.Я понимаю основы алгоритма, но есть случай, который ускользает от моего пронизанного индейкой мозга ... что происходит, когда МИН может выиграть в два этапа?
Пример, предположим, что тип connect4 / tic-tac-toeигра, где только один из двух игроков может владеть квадратом.Как заставить MAX занимать квадрат исключительно для того, чтобы не дать MIN получить квадрат?
Давайте попробуем упростить пример (показанный в изящном ASCII-стиле), где варианты - Left и Right.Предположим, что дерево слишком большое, чтобы пройти весь путь до конечных состояний, поэтому промежуточные значения рассчитываются на основе эвристической функции (помеченной * ниже).-INF - это состояние терминала, в котором выигрывает MIN.
MAX (a)
/ \
A B
/ \
MIN (b) MIN (c)
/ \ / \
A B A B
/ | | \
-INF *5 *22 *20
MIN собирается выбрать действие A в состоянии (b) для оценки -INF
MIN собирается выбрать действие B в состоянии (c) для оценки + 20
MAX собирается выбрать действие B в состоянии (a) для оценки + 20
Конечно, проблема в том, что если MAX выбирает Bтогда MIN выполнит действие A (так как этот квадрат все еще доступен) и, таким образом, MIN победит.Мне нужно, чтобы MAX реализовал значение действия выбора A в состоянии (a), чтобы не дать MIN получить -INF при следующем шаге.
Я бы поместил в код кучу тестов, чтобы проверить, если MINможет победить, но мне кажется, что алгоритм должен позаботиться об этом.Я думаю, что мне не хватает части в определении значения в отношении MAX, которое вызывает это.
(отредактировано для уточнения)