除了基于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 first(n) = NIL |
将<n, SOLVED, min(h, f(n))>插在所有merit值次小的项的 |

本文介绍了两种非Alpha-Beta算法的博弈树并行搜索方法:SSS*算法及其并行化,以及ER算法及其并行化。SSS*算法采用最佳优先策略,通过OPEN队列实现,但存在复杂性高、空间占用大等问题。ER算法将结点分为E结点和R结点,通过并行搜索长孙结点提高效率,但可能错过深剪枝。并行化策略如并行驳斥和多个E子结点提高并行度。
最低0.47元/天 解锁文章
1873

被折叠的 条评论
为什么被折叠?



