问题描述
我已经编写了 2 个月的国际象棋引擎,但遇到了这个我无法解决的错误。基本上,当我禁用我的换位表时,引擎可以正常运行,而 Minimax 搜索每次都会选择最佳选项之一。话虽如此,当我再次启用它们时,它会导致选择与最佳动作不同的动作,这是不应该发生的(因为它们的目的是以效率为导向)。
if maximizing_player:
max_eval = -1*10**5
for state in possible_states:
node+= 1
eval = hawkins.minimax(self,state,depth-1,alpha,beta,False,castling_chance,last_move,quiet)
if eval[0] > max_eval:
max_eval = eval[0]
chosen = state
alpha = max(alpha,eval[0])
if beta <= alpha:
cut += 1
break
transposition_table[mx] = (max_eval,chosen)
return (max_eval,chosen)
else:
min_eval = 1*10**5
for state in possible_states:
node += 1
eval = hawkins.minimax(self,True,quiet)
if eval[0] < min_eval:
min_eval = eval[0]
chosen = state
beta = min(beta,eval[0])
if beta <= alpha:
cut += 1
break
transposition_table[mx] = (min_eval,chosen)
return (min_eval,chosen)
这是一个简单的极小极大搜索实现。当深度达到零时,我有一个单独的调用来返回一个静态评估。话虽如此,在我看来,我正在将可能的最佳移动及其得分记录到一个以“mx”(包含我的游戏状态的字符串)作为键的换位表中。在嵌入的代码片段上方一点点,我写了以下内容:
if mx in transposition_table.keys():
return transposition_table[mx]
因此,当我们再次找到我们的“mx”时,它不会花费资源来尝试尽可能最好的移动。你能帮我找出我的实现有什么问题吗?
在此先非常感谢您!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)