重复局面

重复局面不论是在真人对弈,还是象棋AI中,都要尽量避免。

确认局面重复非常简单,遍历zobrist 队列就可以了。但后续处理比较麻烦,要不同情况具体分析。

一.  在AI中

在搜索算法中,发现局面重复,首先判断重复的性质:

(1) 为了进攻而导致重复(具体又可为了捉将和捉子)

(2) 遭受攻击,为了逃避而触发重复。

(3) 无意义的废棋。

仅情况(2)被允许,其它情况予以剪裁。

二. 在对弈中

结合象棋规则,首先判断最近局面是否存在反复(存在长将或长捉的迹像)。如果局面反复,判断最后一步性质(使用第一部分中的算法),如果不属于(2),禁止着法。

三. 解将还将

AI搜索算法中一般都会采用将军延伸。仅依靠前面两部分的方法,解将还将会无休止地进行下去。解决办法是在将军延伸前做一个局面是否存在反复的判断(第二部分中的方法),如果存在,则不做延伸。

总结:

算法要在判断的准确性和运算速度上找到平衡。因为完善的判断是较为复杂的,为了提升速度,不得不牺牲一点准确度。

 

你可能感兴趣的:(中国象棋)