重複局面不論是在真人對弈,還是象棋AI中,都要儘量避免。
確認局面重複非常簡單,遍歷zobrist 隊列就可以了。但後續處理比較麻煩,要不同情況具體分析。
一. 在AI中
在搜索算法中,發現局面重複,首先判斷重複的性質:
(1) 爲了進攻而導致重複(具體又可爲了捉將和捉子)
(2) 遭受攻擊,爲了逃避而觸發重複。
(3) 無意義的廢棋。
僅情況(2)被允許,其它情況予以剪裁。
二. 在對弈中
結合象棋規則,首先判斷最近局面是否存在反覆(存在長將或長捉的跡像)。如果局面反覆,判斷最後一步性質(使用第一部分中的算法),如果不屬於(2),禁止着法。
三. 解將還將
AI搜索算法中一般都會採用將軍延伸。僅依靠前面兩部分的方法,解將還將會無休止地進行下去。解決辦法是在將軍延伸前做一個局面是否存在反覆的判斷(第二部分中的方法),如果存在,則不做延伸。
總結:
算法要在判斷的準確性和運算速度上找到平衡。因爲完善的判斷是較爲複雜的,爲了提升速度,不得不犧牲一點準確度。