【发布时间】:2014-09-09 20:50:32
【问题描述】:
我制作井字游戏 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))
是否存在未重置的变量?
【问题讨论】:
-
每次运行函数?还是每次运行程序?我打赌是后者——我猜你正在运行 python2.7 并启用了哈希随机化。
-
@mgilson:为什么是 2.7? 3.4 has SipHash enabled by default.
-
@user2357112 -- 出于某种原因,我认为它在 python2.7 和 3.3(分别)默认情况下开始启用。如果我注意到 OP 使用
print作为函数,我就不会那么具体了:-/ -
3.3 has randomization enabled by default too, though not as good。 (我不确定该更改何时生效。我花了一些时间来查找它。)据我所知,没有 2.x 版本默认启用它。
-
A
set是无序的,所以当你说list(set(permutations(vars)))时,你基本上把所有关于有序的假设都抛到了窗外。
标签: python dictionary set