人工智能之最大最小值算法+剪枝优化(算法 + C++实现)

本文深入探讨了人工智能中最大最小值算法的应用,并结合C++详细介绍了其实现过程。同时,为了提高效率,文章还讨论了剪枝策略及其在算法优化中的关键作用。
摘要由CSDN通过智能技术生成
1、最小最大值方法简述
        现在我们来看看博弈树节点标注的另一种方法:最小最大值方法。整个博弈树尽管大的出奇,然而在只有一部分有用的情况下,利用最小最大值方法是有其优点的,很容易推广使用。
        比方说,竞赛的结果是以钱为赌注的。为方便起见,设赌金为一块钱。如果棋手赢的,他就获得一块钱;如果他输了,这输一块钱。在和局的情况下,他不输也不赢。 
        我们把棋手赢的钱称之为收益。如果棋手赢了,其收益为1;如果输了,收益为-1;和局时为0。 
        现在我们来定义一个节点的值。对于w节点其收益为1;l为-1;d为0。
        我们用不着一定要先把节点标上w、d或l,然后再去注明它们的值,而是可以直接计算出它们的值。 
        前面我们已经知道,对于每一个叶节点,比赛的结果或者是赢、或者是输、或者是和局。因此我们先把比赛能赢的那些叶节点标上1,把和局的节点标上0,把输的节点标上-1。
        如同我们前面说过的那样。从叶节点开始,其余节点按照其子节点的值来计算出它的值,一直到把根结点的值算出来。
        这种计算后面所包含的想法是:棋手总是选择能得到最大收益的棋步;而对手总是选择通往最小收益的棋步。更确切地说,我们按下面的规则来计算每个节点的值: 
        轮到棋手走时,节点的值是其子节点之中的最大值。 
        轮到对手走时,节点的值为其子节点中的最小值。
        到现在为止,最大最小值方法已经给我们提供了一个简明而有效的手段来标注博弈树的节点。然而,这种方法不是采用任意的标号,如前面所说的w、l或d来标注节点,而是用数字来标注。这样做使得我们能够很容易的推广这个方法,不用把节点的值局限于1、0或-1。
        深度优先的最小最大值评价方法 
        现在我们回头来看看棋手对当前的棋局是如何考虑的,以及应如何决定下一步的走法。假设有了一种方法,它对任何棋局都可以给出所有的合法棋步,同时还能给出采用这些合法棋步中任何一步以后所形成的新的棋局。另外我们假设已经有了上面所谈到判断终局的方法。我们希望能决定棋手应走的棋步。 
我们从当前的棋局开始,将其扩展,然后再扩展它的子棋局,如此类推。这样我们就得到了一个部分博弈树。但是,每一个结点在展开之前,我们都要先检测这个节点是否为终局。如果是终局那么就不展开这个节点;如果不是那么就展开它。
        上述的扩展一直进行下去,直到所有的节点都不能再展开为止。最后我们得到了这样一个博弈树,它的根结点对应于当前的棋局而其叶节点对应于我们认为的终局。 
应用最小最大值方法,我们对该博弈树的每一个结点都标注上一个值。如前所述,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值