三连游戏优化--α-β裁剪

本文介绍了一种在博弈树搜索中使用的优化技术——α-β剪枝算法。该算法通过减少不必要的节点评估来提高搜索效率。文中给出了具体的实现代码,并解释了如何通过传递尝试性的极大值(α)和极小值(β)来决定何时停止进一步搜索。
摘要由CSDN通过智能技术生成

findCompMove操作希望得到返回值中的极大值,而findHumanMove操作返回极小值。将findCompMove操作得到的尝试性的极大值(α)传给findHumanMove,如果findHumanMove尝试性的极小值(β)小于这个极大值,则立马返回,无需尝试后面的情况。此为α裁剪,对称情况即为β裁剪。尝试性的意思是指目前已经得到的极大值或者极小值。α-β裁剪能显著的改进搜索的范围。

代码如下,与不进行α-β裁剪相比只添加几行代码。
主例程调用时alpha=COMP_LOSS,beta=COMP_WIN。

int TicTacToe::findCompMove(int & bestMove,int alpha,int beta)
{
    int i,responseValue;
    int dc;                 //do not care
    int value;

    if(fullBoard())
        value=DRAW;

    else
    {
        if(immediateWin(bestMove, COMP))
            return COMP_WIN;
        else
        {
            value=alpha;bestMove=1;

            for(i=1;i<=9&&value<beta;++i)//尝试性极小值beta,如果尝试性极大值大于这个值,立马返回
            {
                if(isEmpty(i))
                {
                    place(i, COMP);
                    responseValue=findHumanMove(dc,value,beta);
                    unplace(i);
                    if(responseValue>value)
                    {
                        value=responseValue;
                        bestMove=i;
                    }
                }
            }
        }
    }
    return value;

}
int TicTacToe::findHumanMove(int & bestMove,int alpha,int beta)
{
    int i,responseValue;
    int dc;
    int value;

    if(fullBoard())
        value=DRAW;

    else
    {
        if(immediateWin(bestMove, HUMAN))
            return COMP_LOSS;
        else
        {
            value=beta;bestMove=1;

            for(i=1;i<=9&&value>alpha;++i)  //尝试性极大值alpha,如果尝试性极小值低于这个值,立马返回
            {
                if(isEmpty(i))
                {
                    place(i, HUMAN);
                    responseValue=findCompMove(dc,alpha,value);
                    unplace(i);
                    if(responseValue<value)
                    {
                        value=responseValue;
                        bestMove=i;
                    }
                }
            }
        }
    }
    return value;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值