Transposition Tables Bug,实现产生不同的结果

问题描述

我已经编写了 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 (将#修改为@)