人工智能 | alpha-beta剪枝算法

教材

极小极大搜索算法
在这里插入图片描述
alpha-beta剪枝算法
在这里插入图片描述
在这里插入图片描述
课后习题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


PPT

提高博弈程序效率
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(PS:极大极小值算大应该是深度优先算法)

alpha-beta剪枝算法
在这里插入图片描述


博客

极大极小算法例题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

极大极小算法伪代码

int MaxMin(position,int d)
{
	int bestvalue,value;
	if(game over)   //检查游戏是否结束 
		return evaluation(p);// 游戏结束,返回估值 
	if(depth<=0)    //检查是否是叶子节点 
		return evaluation(p);//叶子节点,返回估值 
	if(max)         //极大值点 
		bestvalue=-INFINTY;
	else            //极小值点 
		bestvalue=INFINTY;
	for(each possibly move m)
	{
		MakeMove(m);    //走棋 
		value=MaxMin(p,d-1);
		UnMakeMove(m);  //恢复当前局面 
		if(max)
			bestvalue=max(value,bestvalue);//取最大值 
		else
			bestvalue=min(value,bestvalue);//取最小值 
	}
	return bestvalue;
}
//  end of MaxMin algorithm

alpha-beta剪枝算法例题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

alpha-beta算法伪代码

//伪代码,Alpha剪枝和Beta剪枝+MaxMin搜索
int AlphaBeta(nPlay,nAlpha,nBeta)
{
	if(game over)
		return Eveluation;   //胜负已分,返回估值
	if(nPly==0)
		return  Eveluation;  //叶子节点返回估值
	if(Is Min Node)          //判断 节点类型 
	{        // 极小值节点
		for(each possible move m)
		{
			make move m;      //生成新节点
			score=AlphaBeta(nPly-1,nAlpha,nBeta)//递归搜索子节点
			unmake move m;//撤销搜索过的节点
			if(score<nBeta)
			{
				nBeta=score;//取极小值
				if(nAlpha>=nBeta)
					return nAlpha;//alpha剪枝,抛弃后继节点 
			 } 
		}
		return nBeta;//返回最小值 
	}
	else
	{//取极大值的节点 
		for(each possible move m)
		{
			make move m;      //生成新节点
			score=AlphaBeta(nPly-1,nAlpha,nBeta)//递归搜索子节点
			unmake move m;//撤销搜索过的节点
			if(score>nAlpha)
			{
				nAlpha=score;//取极小值
				if(nAlpha>=nBeta)
					return nBeta;//nBeta剪枝,抛弃后继节点 
			 } 
		}
		return nAlpha;//返回最小值 
	} 
} 
//end of AlphaBeta pseudocode

猜你喜欢

转载自blog.csdn.net/cat_xing/article/details/86498774