Минимакс: оценка позиции
Не могу понять как работает минимакс. Есть позиция в игре реверси
Какая оценка позиции должна быть в этом случае?
Если мы походим зеленым шариком в клетку 48, то все возможные продолжения и окончания игры указаны тут:
Какая оценка должна быть для этого хода? Максимальная +12? Понятно, что соперник не будет идти где есть +12, поэтому идеальная игра такая: 48-56-32-10-8-1. У меня есть 2 словаря с выигрышными и проигрышными комбинациями и оценка для каждой комбинации. Как правильно просчитать такую комбинацию и сделать правильную оценку?
Ответы (1 шт):
С решением помог искуственный интеллект все позиции с рисунка в заголовке вопроса указаны в словаре 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