Минимакс: оценка позиции

Не могу понять как работает минимакс. Есть позиция в игре реверси

введите сюда описание изображения

Какая оценка позиции должна быть в этом случае? Если мы походим зеленым шариком в клетку 48, то все возможные продолжения и окончания игры указаны тут: введите сюда описание изображения

Какая оценка должна быть для этого хода? Максимальная +12? Понятно, что соперник не будет идти где есть +12, поэтому идеальная игра такая: 48-56-32-10-8-1. У меня есть 2 словаря с выигрышными и проигрышными комбинациями и оценка для каждой комбинации. Как правильно просчитать такую комбинацию и сделать правильную оценку?


Ответы (1 шт):

Автор решения: Elite Runner

С решением помог искуственный интеллект все позиции с рисунка в заголовке вопроса указаны в словаре X. В ключе ходы и в значениях оценка финишной позиции

x={
(48, 56, 10, 1, 32, 'пропуск', 8): 6,
(48, 56, 8, 10, 32, 'пропуск', 1): 4,
(48, 32, 56, 10, 8, 1): 2,
(48, 32, 10, 1, 56, 'пропуск', 8): 8,
(48, 32, 8, 10, 56, 'пропуск', 1): 4,
(48, 32, 1, 10, 8, 56): 0,
(48, 10, 56, 'пропуск', 32, 'пропуск', 8, 1): 8,
(48, 10, 56, 'пропуск', 8, 1, 32): 12,
(48, 10, 56, 'пропуск', 1, 32, 8): 4,
(48, 10, 56, 'пропуск', 1, 8, 32): 4,
(48, 10, 8, 1, 56, 'пропуск', 32): 12,
(48, 10, 8, 1, 32, 56): 2,
(48, 56, 32, 10, 8, 1): -6,
(48, 56, 32, 10, 1, 8): -12,
(48, 56, 10, 32, 8, 1): -18,
(48, 56, 10, 1, 8, 32): -12,
(48, 56, 8, 32, 10, 1): -18,
(48, 56, 8, 32, 1, 10): -22,
(48, 56, 8, 10, 1, 32): -16,
(48, 56, 1, 32, 10, 8): -30,
(48, 56, 1, 10, 8, 32): -20,
(48, 56, 1, 8, 32, 10): -6,
(48, 56, 1, 8, 10, 32): -22,
(48, 32, 56, 10, 1, 8): -6,
(48, 32, 10, 56, 8, 1): -18,
(48, 32, 10, 1, 8, 56): -2,
(48, 32, 8, 56, 10, 1): -8,
(48, 32, 8, 56, 1, 10): -10,
(48, 32, 8, 10, 1, 56): -6,
(48, 32, 1, 56, 10, 8): -20,
(48, 32, 1, 10, 56, 8): -8,
(48, 32, 1, 8, 56, 10): -8,
(48, 32, 1, 8, 10, 56): -10,
(48, 10, 56, 'пропуск', 32, 'пропуск', 1, 8): -2,
(48, 10, 32, 56, 8, 1): -12,
(48, 10, 32, 56, 1, 8): -18,
(48, 10, 8, 56, 32, 1): -4,
(48, 10, 8, 32, 56, 1): -4,
(48, 10, 1, 56, 'пропуск', 32, 'пропуск', 8): -28,
(48, 10, 1, 56, 'пропуск', 8, 32): -6,
(48, 10, 1, 32, 56, 8): -14,
(48, 10, 1, 32, 8, 56): -10,
(48, 10, 1, 8, 56, 32): -10,
(48, 10, 1, 8, 32, 56): -6,

}

def minimax_evaluation(d):
    def _minimax(node, is_max=True):
        if isinstance(node, int):
            return node
        values = [_minimax(child, not is_max) for child in node.values()]
    # print(values)
        return max(values) if is_max else min(values)    
    return _minimax(d)

дерево=dict()


for moves, value in x.items():
    узлы = дерево
    for move in moves[:-1]:
        if move not in узлы:
            узлы[move] = {}
        узлы = узлы[move]
    узлы[moves[-1]] = value

result = minimax_evaluation(дерево)
print(result)  # ОТВЕТ ОЦЕНКА ХОДА 48 оценка -6
→ Ссылка