美文网首页嵌牛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;

    };

    相关文章

      网友评论

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

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