我试图将tic-tac-toe的问题形式化为有限的地平线决策问题。我想要计算有多少不同的终端板(终端板是满的或有赢家的板)。明显的上限是9!,但我正在寻找确切的值。我找到了这个数字,但我真正关心的是获得它的方法。
欢迎任何帮助
谢谢
答案 0 :(得分:0)
Tic-tac-toe只有9个位置,很容易创造所有可能的比赛位置。这是一个简单的python代码,可以创建所有可能的移动,并以两个集合中的方式存储获胜者和没有获胜者的状态。
游戏状态是一个长度为9的字符串,其中space为空字段,0为第一个玩家,1为第二个玩家。
finished_states = set()
full_table_states = set()
def is_finished(state, player):
player = str(player)
return any( (player == state[i*3+0] == state[i*3+1] == state[i*3+2]) for i in xrange(3) ) or \
any((player == state[i] == state[3+i] == state[6+i]) for i in xrange(3)) or \
(player == state[0] == state[4] == state[8]) or \
(player == state[2] == state[4] == state[6])
def play(state, player):
for i, s in enumerate(state):
if s == ' ':
new_state = state[:i] + str(player) + state[i+1:]
if is_finished(new_state, player):
finished_states.add(new_state)
elif ' ' not in new_state:
full_table_states.add(new_state)
else:
play(new_state, 1-player)
play(' '*9, 0)
print len(finished_states), len(full_table_states)
输出是:
942 16