【急】AlphaBeta算法该怎么理解?

来源:百度知道 编辑:UC知道 时间:2024/06/30 12:57:12
int AlphaBeta(int depth, int alpha, int beta)
{
if(depth == 0 || IsGameOver()) return Evaluate(); //如果层数为0或者已达最终状态则返回本步棋的估值
for(each possible move)
{
MakeMove();

int val = -AlphaBeta(depth - 1, -beta, -alpha);
UnMakeMove();

if(val >= beta)
{
return val;
//注意,这里需要返回val,因为上一层应该知道具体搜索到的值,以配合各种Alpha-Beta算法的变种
}
if(val > alpha)
{
alpha = val;
...
//当然 这里还需要记录这步最佳的走法
}

}
return alpha;//返回最好的值
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/solidussnake/archive/2008/02/20/2108161.aspx
我不要思想,那个很好理解,但我想不清楚这个递归!!! 谁能让我搞懂,要多少分给多少分。 跪谢!

如果你觉得理解了思路但看不递归, 应该是说里面的负值极大部分。

负值极大值搜索是极小极大值搜索的一个改进。它的返回值代表当前方是否占优,搜索中如果要使用子结点的返回值则需要加上负号,因为子结点的返回值表示子结点对对方是否占优。相比较极大极小值搜索,它并没有带来结果上的改变和效率上的优化,然而它使代码更短,更方便维护。

其实这个就是负值极大和ab一起用的 过程中每层把alpha beta的值也颠倒过来并加负号 这个和ab的搜索思路无关 只是一个简化代码的技巧
如果您还是不懂 您可以写一个不带负值极大的ab搜索 那样一般是分两个函数写 一个最大 一个最小

嗯...我的毕业设计也是借用了这个算法的

计算机博弈~~~~~~要理解AlphaBeta算法~~最好先了解极大极小值算法~~~~自己画画示意图~~~~之后转化成负极大值理解~~~最后加上剪枝~~~~花点时间,应该不难~~~