围棋在人工智能中的应用博弈树

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

围棋在人工智能中的应用——博弈树搜索

搜索是人工智能中的一个基本问题,是推理不可分割的一部分,它直接关系到智能系统的性能与效率,尼尔逊把它称为人工智能研究中4个核心问题之一。根据问题的实际情况不断寻找可利用的知识,从而构造一条代价较小的推理路径,使问题得到解决的过程称之为搜索。搜索分为盲目搜索和启发式搜索H_J。盲目搜索是在预先控制策略中进行搜索,在搜索过程中获得的中间信息不用来改进控制策略。启发式搜索是在搜索过程中引入了与问题有关的启发式信息,以指导搜索的方向,加速问题的求解过程并找到最优解。

1博弈树搜索算法

博弈事件千差万别,但在具体的博弈事件背后都有着共同的特性:二人零和、全信息、非偶然。博弈树是一棵“与或”树,此“与或”树是始终站在某一方的立场上得出的,与或节点交替出现,在博弈事件中,每一个格局可供选择的行动方案都有很多种,因此会生成一个十分庞大的博弈树。

博弈树搜索可以脱离具体的博弈事件,完全在算法的级别上进行研究。博弈树只是实现求解的一部分,在搜索过程中还要注意其它问题,如行为的产生、搜索的方法及搜索的顺序。

估值函数对于一个具体的博弈事件来说是机器求解是否准确的关键,博弈树搜索效率的高低,最后作为行动优劣的取舍都是根据估值函数的结果确定的。在博弈事件中·,估值函数很难确定,它要根据具体情况的不断变化来确定,所以在整个过程中它是需要反复被验证的,权值需要反复修改,最终确定一个最佳值。

1.1极大极小搜索算法

假设有2个博弈者甲和乙(甲为计算机,乙为棋手),在这个博弈事件中我们要为甲找到最佳的走步。现假设甲方先下,乙方后下,深度为奇数的节点为甲方下了一子之后的局面(即乙方选择下法的局面),称之为极小节点;深度为偶数的节点为乙方下一子之后的局面(即甲方选择下法的局面),称为极大节点;博弈树的顶节点深度为0。

一个最佳走步可以由一个极大极小化过程产生,甲方要从搜索树中选择拥有最大值的节点,因此。一个标有“甲”的节点的估计值可以由它的标有“乙”的子节点的最大值确定。另一方面,乙方从叶节点中选择时,由于估计值越小对它越有利,因此必然选取估计值最小的节点(即最负的估计值),因此,标有“乙”的节点估计值可由它的标有“甲”的子节点的最小值确定。综上所述,可由博弈树的叶节点出发向上一层层倒推,得到上一层的估计值,从而得出根节点的估计值,这样就可以确定从根节点出发的最佳走步,称之为极大极小算法,其伪代码如下:

double ji da ji xiao(int depth)

{

int i;

double best,n;

if(比赛结束)

return evaluation();

if(depth==0)

return evaluation();/*叶节点*/

if(甲方)

best=一1 000:

else

best=1 000;/*初始化当前最优值,假设1

000为一个不可能达到的值*/

for(i=1;i<=w;i++)

{

n=ji_da—ji—xiao(depth一1);

if(n>best&&甲方)

best=n;

if(n

best=n;

}

return best;

}

1.2 a—p剪枝算法

使用极大极小搜索进行搜索时,随着搜索深度的增加,所花费的时间也大大增加,这是因为搜索过程中存在着大量的数据冗余,a—B剪枝算法解决的主要是数据冗余问题。a(alpha)和p(beta)剪枝的惟一区别在于分析的两层中极大极小值的先后顺序,a是用来取极大值时情况,p是在取极小值时的情况,其伪码如下:

double Alpha—Beta(double alpha,double beta,

int depth);

{

int i;

double fl,best;

if(比赛结束)

return evaluation();

if(depth==0)

retum evaluation();/*叶结点*/

if(极大节点)

{

for(i=1;i<=W;i++)

{

n=Alpha—Beta(alpha,beta,depth一

1);

if(best>alpha)

alpha=best;

}

return alpha;

}

else/*极小节点*/

{

for(i=l;i<=w;i++)

{

n=Alpha—Beta(alpha,beta,depth一1);

if(best

beta=best;

}

return beta;

}

}

1.3小窗口搜索算法

小窗口搜索是一种为了缩小搜索范围而实现的算法,它是将a—B剪枝看作是一种对求解的范围不断缩小的过程。在一定范围内,如果能够精确对搜索进行估值,那么搜索的效率将会大大提高,在极限情况下,如果估计完全准确,那么剪枝的效率将和原来的树的总节点数相同。小窗口搜索是将估计的结果增加一个范围,来提高搜索效率。

窗口越小则可能减去的枝会越多,那么当窗口为0会怎么样呢?极小窗口搜索是根据搜索第1个节点作为估计值的,即在最好的情况下第1个节点就是最优解,它也就是树的最优解。小窗口搜索算法中存在的一个问题是如果估计值落在区域之外,那就不能得到最优解,引人一个标志value,它能够记录失败的原因。

double search(double alpha,double beta,-int depth

);

{

int i;

double n,best;

if(比赛结束)

retum evaluation();

if(depth==0)

retum evaluation();/*叶结点*/

i=N一1search(alpha,beta,depth一1);/*n

一1层的最佳值*/

alpha=x—window;

beta=x+window:

value=N—Isearch(alpha,beta,depth);/*

确定左右边界再搜索*/

if(value

value=N—lsearch(alpha,一1 000,

depth);

if(value>beta)

value=N一1search(beta,1 000,depth);

Return value;

}

08级计算机系

2班7号

王圆源

相关文档
最新文档