美文网首页嵌牛IT观察
博弈树搜索算法

博弈树搜索算法

作者: f81f045af009 | 来源:发表于2017-11-09 15:56 被阅读0次

姓名:李嘉蔚 学号16020520034

【嵌牛导读】:通过讨论人工智能中用于计算机博奕的一 般技术如极大极小搜索、Alpha—Beta剪枝、小窗口 搜索,对五子棋博奕的内在规律进行了分析研究,给 出解决五子棋博奕的2种优化算法,这2种优化算 法大大提高了搜索效率,相比之下引入置换表后的 化算法的搜索效率更高。

【嵌牛鼻子】:极大极小搜索;Alpha—Beta剪枝;小窗口 搜索 。

【嵌牛提问】:什么是博弈树搜索算法?为什么要研究搜索?

【嵌牛正文】:搜索是人工智能中的一个基本问题,是推理不可分割的一部分,它直接关系到智能系统的性能与效率,尼尔逊把它称为人工智能研究中4个核心问题之一。根据问题的实际情况不断寻找可利用的知识,从而构造一条代价较小的推理路径,使问题得到

解决的过程称之为搜索。搜索分为盲目搜索和启发

式搜索H_J。盲目搜索是在预先控制策略中进行搜

索,在搜索过程中获得的中间信息不用来改进控制

策略。启发式搜索是在搜索过程中引入了与问题有

关的启发式信息,以指导搜索的方向,加速问题的求

解过程并找到最优解。

博弈事件千差万别,但在具体的博弈事件背后

都有着共同的特性:二人零和、全信息、非偶然。博

弈树是一棵“与或”树,此“与或”树是始终站在某一

方的立场上得出的,与或节点交替出现,在博弈事件

中,每一个格局可供选择的行动方案都有很多种,因

收稿日期:2007—05—27 ‘‘

基金项口:成阳师范学院科研基金项目(06XSYK272)

作者简介:李红(1976,一),女(汉),陕西咸阳,硕士研究生

主要研究图像处理与人工智能。

此会生成一个十分庞大的博弈树。

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&&棋手)

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)

beta=best;

}

return beta;

}

}

1.3小窗口搜索算法

小窗口搜索是一种为了缩小搜索范围而实现的

算法,它是将a—B剪枝看作是一种对求解的范围不

断缩小的过程。在一定范围内,如果能够精确对搜

索进行估值,那么搜索的效率将会大大提高,在极限

情况下,如果估计完全准确,那么剪枝的效率将和原

来的树的总节点数相同。小窗口搜索是将估计的结

果增加一个范围,来提高搜索效率。

窗口越小则可能减去的枝会越多,那么当窗口

为0会怎么样呢?极小窗口搜索是根据搜索第1个

节点作为估计值的,即在最好的情况下第1个节点

就是最优解,它也就是树的最优解。

小窗121搜索算法中存在的一个问题是如果估计

值落在区域之外,那就不能得到最优解,引人一个标

志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<alpha)

valudepth);

if(value>beta)

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

Return value;

}

2算法优e=N—lsearch(alpha,一1 000。

depth);

if(value>beta)

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

Return value;

}

2算法优化

博弈事件在整个阶段是不相同的,在初期可以

采取的行动也很多,随着阶段的发展,双方可采取的

行动越来越少,到最后几步可以推算出一些规律,通

过多次叠代,从而得到最优解,这种技术称为基于

Alpha—beta的叠代方法。最常见到的方法是将//,一

1层搜索出的走步作为/7,层搜索的开始走步,邻近

两层间的走步有一定的相似性。

2.1 基于Alpha—beta的叠代方法与小窗口搜索

算法

改进搜索算法的目标在于将不必搜索的(冗余)

分枝从搜索的过程中尽量剔除,以达到尽量搜索少

的分枝来降低运算量。Alpha—beta剪枝相对于极

大极小算法已经有了很大程度的改善,减少大量的

冗余节点,但是节点排列顺序没有考虑,在最坏的情

况下可以退化为极大极小算法;小窗口搜索缩小了

范围,提高收敛的效率;通过置换表记录已经分析过

的节点;使用基于Alpha—beta的叠代方法可以利用

不同层次的分析结果。但是单独使用哪一种方法都

有其不利的方面。基于对博弈搜索算法特点的研

究,以及对五子棋博奕知识和规则的细致分析,提出

一种优化的算法,即多种算法结合的方法。

多种算法结合,采用的是基于Alpha—beta的叠

代方法与小窗口算法结合,选择这2种方法的原因

是,叠代算法的作用是将/'t一1次走步的点在搜索

前移动到博弈树的前端,而小窗口搜索算法是基于

第1个节点是最优节点的思想,所以这2种方法的

结合,不但缩小了叠代时间,分析的节点数目也有所

减少,并且大大提高了搜索效率。

2.2 引入置换表的基于Alpha—beta的叠代方法与

小窗口搜索算法

在博弈树搜索时,可能存在这样的情况,就是不

同的分枝上可能存在相同的节点,那么能否将搜索

过的节点不再被重复搜索,即需要把搜索过的节点

记录下来,在以后的搜索过程中,可以查看记录表中

的结果,如果有记录那就直接用记录的结果,这种方

法称之为置换表法,可以采用哈希表作为存储数据

的数据结构。

置换表的引入避免了对重复节点的搜索,但仍

存在多个问题:首先,是否每次搜索都需要清空哈希

表;第二,层次如何处理;第三,哈希函数如何选择。

在对这些问题深入研究时,发现采用哈希表作为存

储数据的数据结构时,不需要每次搜索时都清空哈

’希表;在定义哈希表时,需要存储搜索深度,因为同

一个局面可能在搜索树中的不同层上出现;Zobrist

哈希技术是一种在博弈程序中广泛被使用的随机哈

希方法,它有着良好的速度及良好的散列度。

本算法在五子棋程序上验证,因为棋盘是15×

15,故可将棋盘状态用一个15×15的二维数组表

示。

数据表示为:

BYTE WUZIQI[Xing:}[Lie]=

{

{一1,一l,一I,一1,一1,一1,一l,一1,一1,一

1,一1,一1,一1,一1,一1},{一1,一1,一1,一1,~l,

一1,一1,一1,一1,一1,一l,一1,一1,一1,一1},

{一1,一1,一1,一1,一1,一1,一1,一1,一1,一

1,一1,一1,一1,一1,一1}i{一1,一l,一1,一1,一1,

一1,一1,一1,一1,一1,一1,一1,一1,一1,一1},

{一1,一1,一1,一1,一1,一l,一1,一1,一1,一

l,一1,一1,一1,一l,一1},{一1,一1,一1,一1,一1,

一1,一1,一1,一1,一1,一1,一1,一1,一1,一1},

{一1,一1,一1,一1,一1,一1,一1,一1,一1,一

1,一1,一I,一1,一1,一1},{一I,一1,一1,一1,一1,

一1,一1,一1,一1,一1,一1,一1,一l,一1,一1},

{一1,一l,一1,一1,一1,一1,一1,一1,一1,一

1,一l,一1,一1,一1,一1},{一1,一1,一1,一1,一1,

一1,一1,一1,一1,一1,一1,一1,一1,一1,一l f,

{一1,一1,一1,一1,一1,一l,一1,一1,一1,一

1,一1,一1,一1,一1,一1},{一1,一1,一1,一1,一1,

一1,一1,一1,一1,一1,一l,一1,一1,一1,一1},

{一1,一1,一l,一1,一1,一1,一1,一1,一1,一

l,一1,一1,一1,一l,一1},{一1,一1,一l,一l,一1,

一1,一1,一1,一1,一1,一1,一1,一I,一1,一1},

}

五子棋的位置表示为:

typedef Struct STONEPOSITION

{

BYTE X;

BYTE Y;

};

相关文章

  • 博弈树搜索算法

    姓名:李嘉蔚 学号16020520034 【嵌牛导读】:通过讨论人工智能中用于计算机博奕的一般技术如极大极小搜索、...

  • 匈牙利算法

    算法思想 算法流程 算法步骤 算法实现 python 算法应用

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 机器学习算法

    机器学习的算法分监督算法和无监督 算法。监督算法包括回归算法,神经网络,SVM;无监督算法包括聚类算法,降维算法。...

  • 字符串匹配

    BF 算法和 RK 算法BM 算法和 KMP 算法

  • 垃圾回收算法有几种类型? 他们对应的优缺点又是什么?

    常见的垃圾回收算法有: 标记-清除算法、复制算法、标记-整理算法、分代收集算法 标记-清除算法 标记—清除算法包括...

  • 头条-手撕代码

    [toc] 图算法 以及最短路径算法 树算法 手写LRU 排序算法 链表算法

  • 关于一些算法

    我们平常说的算法按照使用方向加密算法,排序算法,搜索算法,优化算法,音视频处理算法,图片处理算法 1.加密解密算法...

  • 给我巨大影响的技术书籍

    算法《算法概论》《算法设计与分析基础》 Anany Levitin《算法引论》Udi Manber《算法导论》《什...

  • 缓存相关

    cache淘汰算法:LIRS 算法 缓存那些事 Redis缓存淘汰算法,LRU算法,LRU算法讲解

网友评论

    本文标题:博弈树搜索算法

    本文链接:https://www.haomeiwen.com/subject/tofmmxtx.html