Я новый ученик ИИ. Мое задание требует от меня написания программы на Python, которая оптимально играет в игру Ним (используя алгоритм NegaMax
).
Если вы не знакомы с игрой, вот краткое описание:
Nim - простая игра для двух игроков. Начнем с кучи из n спичек,
где n ≥ 3
.
Два игрока, Макс и Мин, по очереди убирают k матчей из колоды, где k = 1, k = 2, or k = 3
. Игрок, который берет последний матч, проигрывает.
Это то, что я уже написал:
def NegaMax(state, turn, bestmove):
max = -100000000000
if state == 1:
if turn == 0:
return (-1,bestmove)
else:
return (1,bestmove)
for move in range(1, 4):
if state-move > 0:
m = NegaMax(state-move, 1-turn, bestmove)
m1 = -m[0]
if m1 > max:
max = m1
bestmove = move
return (max,bestmove)
def play_nim(state):
turn = 0
bestmove = 0
while state != 1:
[evaluation,move] = NegaMax(state, turn, bestmove)
print(str(state) + ": " + ("MAX" if not turn else "MIN") + " takes " + str(move))
state -= move
turn = 1 - turn
print("1: " + ("MAX" if not turn else "MIN") + " loses")
Независимо от того, какое число state
я вставил, и Мин, и Макс всегда принимают 1 матч в каждом раунде.
Я думаю, что проблема в том, что оценка неверна, но я не вижу, где я ошибся. Любая помощь будет оценена! Спасибо!