我正在制作一个井字游戏的AI,只是为了好玩。我创建了一个后继函数,它返回一个以开始状态为键的字典,以及紧随其后的所有状态作为值。
据我所知,函数工作正常(虽然我仍然需要删除对称状态),但由于某种原因,每次运行函数时,后继状态的元组都处于不同的顺序。我得到了相同的价值观,但他们被炒了。
from itertools import *
def successors(state):
vars = [0]*state.count(0)
vars[0] = 'x'
vars[1] = 'o'
vars = list(set(permutations(vars)))
state = tuple([state[i:i+3] for i in range(0, len(state), 3)])
states = []
for var in vars:
new_board = []
for row in state:
new_row = []
for tile in row:
if tile != 0:
new_row.append(tile)
else:
new_row.append(var[0])
var = var[1:]
new_board.append(tuple(new_row))
states.append(tuple(new_board))
return {state:states}
board = (0,0,0,
0,0,0,
0,0,0)
print(successors(board))
某个地方是否有一个未被重置的变量?
答案 0 :(得分:3)
这可能是因为你这样做:
vars = list(set(permutations(vars)))
此处的顺序是任意的,由于散列随机化,可能会因一次运行而异。要禁用它,请将PYTHONHASHSEED
环境变量设置为常量值 - 例如0