除了基于Alpha-Beta算法的博弈树并行搜索算法外,还有其他的博弈树搜索算法.现简要介绍如下.
7.1 SSS*算法及其并行化
Alpha-Beta算法是一种基于Min-Max方法的固定深度(fixed-depth)搜索算法.说它是固定深度的搜索算法,是因为对每个结点,它依序从左到右搜索其所有子结点.与Alpha-Beta算法相同的是,SSS*算法[19](或者其对称算法DUAL*)也基于Min-Max方法,但与前者不同的是,它使用最佳优先(best-first)策略.即,SSS*算法不以结点在博弈树中所处的位置为标准,而按照它们前途有望的(promising)程度,由高至低搜素结点.
为了实现最佳优先策略,算法维护一个OPEN队列(OPEN list).OPEN队列的每项对应着一个结点,用<n, s,h>的形式组织.其中n代表博弈树中的一个结点,s是一个状态标识,可能的取值是LIVE或SOLVED,h被称为merit,是一个实数值.一个使用状态空间搜索(State Space Search)概念描述的SSS*算法如下[20]:
1. 将<n = root, s = LIVE, h = +∞>插入OPEN队列中.
2. 将OPEN队列中h最大的p = <n,s, h>取出.由于OPEN队列是h的非降序列,所以p为队列的第一项.
3. 如果n = root且s = SOLVED 那么p就是目标状态,此时h就是博弈树的最大最小值,否则继续.
4. 通过执行状态空间操作Г,扩充p状态,将所有的输出状态Г(p)按序插入OPEN队列中.如果可能,清除OPEN队列中的多于状态.
5. 跳转到2.
操作Г的情况 |
输入状态<n, s, h>满足条件 |
操作Г产生的新的状态 |
不操作 |
s = SOLVED n = ROOT |
达到最终状态,算法退出,博弈值为h |
1 |
s = SOLVED n ≠ ROOT type(n) = MIN |
将<m = parent(n), s, h>插入OPEN队列中,清除OPEN队列中满足m是k的祖先的<k, s, h> |
2 |
s = SOLVED n ≠ ROOT type(n) = MAX next(n) = NIL |
将<next(n), LIVE, h>插入OPEN队列中 |
3 |
s = SOLVED n ≠ ROOT type(n) = MAX next(n) = NIL |
将<parent(n), LIVE, h>插入OPEN队列中 |
4 |
s = LIVE |