游戏中的搜索算法与认知建模
1. 弱证明数搜索算法(WPNS)
1.1 证明数搜索(PNS)的瓶颈
证明数搜索(PNS)是一种强大的与或树搜索算法,可有效解决难题,但存在三个潜在瓶颈:
- 内存需求
- GHI 问题
- 有向无环图(DAGs)导致的重复计数问题
前两个问题已得到改进,而重复计数问题在使用深度优先变体的 PNS 时最为突出,例如在解决黑白棋残局时。
1.2 弱证明数搜索(WPNS)的提出
为解决上述问题,提出了弱证明数搜索(WPNS)算法。它是 PN 搜索和分支数搜索(BNS)协同的成果,利用了基于证明数的搜索算法的优势,避免了 DAGs 导致的重复计数问题。实验表明,在将棋和黑白棋领域,WPNS 比深度优先证明数搜索(df - pn)更强大。
1.3 深度优先弱证明数搜索(DF - WPN)算法伪代码
以下是深度优先弱证明数搜索(DF - WPN)算法的 C++ 伪代码:
1 void df−wpn( root ) {
2 root . thφ = ∞;
3 root . thδ = ∞;
4 multiID ( root ) ;
5 }
6
7 void multiID (n) {
8 // 1. look up transposition table
9 retrieve (n , φ , δ ) ;
10 if ( n . thφ ≤φ || n . thδ ≤δ ) {
11 return ;
12