代码改变世界

并行博弈树搜索算法-第2篇 博弈过程的抽象:MinMax方法

2012-02-26 21:24  myjava2  阅读(763)  评论(0编辑  收藏  举报

2.1   Min-Max方法

假设在博弈过程中,对抗者1总是选择使得博弈值最小的移动,那么作为对手的对抗者2则总会选择是的博弈值最大的移动,对抗者1称为min,对抗者2称为max.由于博弈双方是交替移动的,所以博弈树的结点及其父结点分属于两个对抗者中的一个,他们的种类(type)分属max和min.博弈树上的每个结点对应于一个深度(depth),叶结点的深度为0.因此,在任意的结点node,对博弈双方均最优的博弈值为[3]:


由此,很自然地得出Min-Max算法,用来求出满足一些条件的二人零和博弈问题的博弈值:

 上述伪代码中,结点node各自的有种类(max或者min结点),分支(branch).Evaluate()函数就是叶结点的估值函数.Traverse()函数用于产生node的第i个分支(node.branch[i]).

Min-Max方法对博弈树进行深度优先搜索.相对于广度优先搜索,深度优先搜索需要非常少的存储空间,而且存储空间的需求不随树的大小而指数增长.

通过Min-Max方法可以找到对于博弈双方都是最优的博弈值,称这个博弈值为最小最大值(minimax value).

2.2   Min-Max方法的Nega-Max简化形式

Min-Max方法可以通过消除max结点和min结点的区别来进行简化[4].简单地将递归函数MiniMax()返回值取负再返回,就可以将所有的min结点都转化为max结点.注意此时还要改变评价函数Evaluate()为EvaluateNegaMax(),使得叶结点根据结点的种类(max或者min)来返回估值.

在经过这样的简化之后,除了叶结点每个结点的策略将不再区分种类(max或者min).对每个结点的搜索都尝试让结点值(value)最大.

本文章欢迎转载,请保留原始博客链接http://blog.csdn.net/fsdev/article

--------------------

 [3]    Stuart Russell and Prter Norvig (1995). Artificial Intelligence, AModern Approach. Prentice-Hall, Egnlewood Cliffs, 1995.

 [4]    Knuth, D.E. and Moore, R.W. (1975). An Analysis of Alpha-Beta Pruning.Artificial Intelligence, 6:293–326.