负极大值搜索

编者最近在学校五子棋AI博弈算法,好不容找到一本书籍资源来学习,但其中内容是作者在2003年缺少中文算法书籍的情况下编写的,因此有一些语义错误或语义不详的地方,对编者阅读造成很大影响。比如这个负极大值搜索的推导则是一笔带过,让编者百思不得其解。现在将花了三小时得出的推导过程,在这里整理一下,如果有错误请读者指正。
首先,负极大值搜索是极大极小值搜索的变种,对运行效率上没有什么影响,但代码更简洁,很多博弈算法作者都是用负极大值来演示,因此还是有必要学习的。
其实这个算法本质上是一种负负得正的关系。先看下极大极小值搜索的伪代码:

1。 p 为棋盘
2。 d 为规定的搜素最大深度,比如d层红方,d-1层为黑方,d-2层为红方...依此类推,可采用mod2来判断当前是哪一方
4。评估棋盘的函数evaluation,当然需要看是哪一方,若红方为机器,黑方为人,那么机器(红方)做为极大(INF),人作为极小(-INF),让机器选择最合适的一步。
int MiniMax(chessmap p , int d)
{
    int bestvalue , value ;
    if( Game Over )// 如果游戏结束
        return evaluation(p);
    if(depth <= 0) // 如果已经到了搜索树叶子结点
        return evaluation(p);
    if( d % 2  == RED) //轮到红方
        bestvalue = - INF; 
    else
        bestvalue = INF ;
     for(each possible move m)
    {
        MakeMove(m) ; //产生第i个局面(子节点),p会相应变化
        value = MiniMax(p,d-1);//递归
        UnMakeMove(m) ; // 恢复p
        if(d % 2 == RED)
            bestvalue = max(value ,bestvalue);//取最大
        else
            bestvalue = min(v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值