人工智能第5章 对抗搜索

5.1博弈

对抗搜索:竞争环境中每个Agent的目标之间是有冲突的,也成为博弈。
博弈:有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏。
零和博弈:是指所有棋手的收益之和在每 个棋局实例中都相同
剪枝:在搜索树中忽略那些不影响最后决定的部分。
启发式评估函数:在不进行完全搜索的情况下估计某些状态的真实效用值。

博弈问题的形式化
S0: 初始状态,规范游戏开始的情况
Player(s):定义此时该谁行动
Actions(s):返回状态s下的合法动作集合
Result(s,a):转移模型,定义行动的结果
Terminal-Test(s): 终止测试 ,游戏的结束条件
Utility(s,p): 效用函数,定义游戏者p在终止状态s下的数值

5.2博弈中的优化决策

初始状态、ACTIONS函数和RESULT函数定义了游戏的博弈树——其中结点是状态,边是移动
最优解:到达目标状态的一系列行动
中止状态:一方取胜

极小极大值:可以理解为有两个人MAX和MIN,MAX喜欢移动到有极大值的地方,MIN喜欢移动到有极小值的地方,终端状态由效用函数进行评价。MAX指向有最高极小极大值的中止状态。假设对手的决策均为最优。

5.2.1极小极大算法

递归算法自上而下一直前进到树的叶子节点,递归回溯通过搜索树把极小极大值回传。
每一步都是最小化敌方的最大收益。
在这里插入图片描述
MiniMax算法评价
 本质上是一种深度优先策略
◼ 深度:树的最大深度为m
◼ 分支因子:每个结点可考虑的行棋选择有b种选择
 时间复杂度:O(b^m)
 空间复杂度
◼ 一次性生成所有后继:O(bm)
◼ 每次生成一个后继:O(m)
 对于真实游戏极小极大算法不实用,但可作为研究和设计其它算法的基础

5.2.2多人博弈时的最优决策

超过两个人的博弈利用MINIMAX算法,由于之前研究的两人博弈一方得分可以反应另一方得分,故仅用一个数值表示状态得分,对于多人游戏,应该使用向量值替换单一效用值。每个节点的回传至是该选手在节点的后继者效用值向量中选择的结果。多人博弈通常会涉及在游戏选手之间出现正式或非正式联盟的情况。联盟不断建立或者解散。非零和的两人博弈也可能发生合作。

5.3α-β剪枝

极大极小值搜索时间复杂度呈指数级增加,α-β剪枝可以将复杂度减半,很多情况下可以剪裁掉整个子树。在某节点的父节点有更好的选择,则不会探索到该节点。
α:到目前为止路径上MAX的最佳选择
β:到目前为止路径上MIN的最佳选择
在min结点,若当前搜索过的子结点的最小值v小于等于alpha,则剪去该min的其余子结点,返回v
在max结点,若当前搜索过的子结点的最大值v大于等于beta,则剪去该max的其余子结点,返回v

在这里插入图片描述
α-β剪枝的效率很大程度上依赖于检查后继的顺序,对于随机顺序而言可以降低复杂度,引入一些简单的排序函数可以更大程度降低复杂度。存储以前见过的棋局的哈希表称为换位表。

例子:
在这里插入图片描述
【Alpha-Beta剪枝算法(人工智能)-哔哩哔哩】 https://b23.tv/8iYeiNT

5.4不完美的实时决策

  • 决策的时间和空间资源有限
  • 状态空间巨大,有限时间内只能考虑很小的一部分
  • 实时决策允许的模拟时间很短

故需要尽早截断搜索、将启发式评估函数用于搜索。

启发式评估函数EVAL(可以评估中间状态)–替代效用函数Utility,
用截断测试(cutoff test)取代终止测试(Terminal Test)

5.4.1评估函数

①对终止状态的排序应该和真正的效用函数的排序结果一样
②评估函数的计算成本不能花费太长时间
③对于非终止状态,评估函数应该和取胜几率密切相关

5.4.2截断搜索

最简单的节点搜索:设置固定的搜索深度

地平线效应:当好棋出现在固定搜索深度之后时,无法探索到好棋

更好的方法:迭代加深,一层层展开,一层层搜索,因为“穷尽”而没有风险,不会漏掉展开深度内的最优解

5.4.3向前剪枝

向前剪枝:在某节点上无需进一步考虑而直接剪枝一些节点

  • 柱搜索:只考虑最好的n步行棋,但无法保证最好的行棋不被剪枝掉

课后习题

5.3

在这里插入图片描述

a. 复制博弈树并给出终止节点的值。(5分)
b. 在每个分支节点边上写出你对它的值的推理(10分)
c. 在每个问号下写出到达此分支的节点的名称(5分)
e. 用圆圈画出“?”节点中不再扩展的节点,并勾出那些完全不用考虑的节点(10分)
5.3

d. 解释如何通过考虑图中的最短路径得出节点的取值界限。记住到达叶节点的开销和求解的开销。(10分)
两点之间的最短路径之后所需时间的下界,在已知最短路径与当前开销的情况下,该分支效用函数的上界当前开销与最短路径之和的相反数。

(扩展)在本题中,由于追逐者存在必胜策略,因此搜索树的深度有限。当追逐者不存在必胜策略时,我们不能让算法无限度的向下搜索,因此需要定义一个搜索深度阈值,当深度超过这一阈值后,算法仍未找到终止节点,则应认为在该分支下,逃避者胜利,而这个搜索深度阈值的相反数即为效用函数的下界
图中共有6个不同节点,即至多存在36种不同的状态。当当前开销大于状态数即搜索深度达到37的时候,该路径上至少存在一种状态重复出现,也就是说在该路径下的两个重复状态之间存在一种保持两者始终不相遇的策略,因此可以认为在该分支下,逃避者获胜。因此,搜索深度的阈值应设为总的状态数,效用函数的下界为状态数的相反数

e. 你能根据树的信息证明谁将赢吗?(20分)
通过搜索树的返回值可知,存在一种策略,在至多4个单位时间内两者相遇,故追逐者P将取得胜利

5.8

5.8

博弈树
a. 画出完整的博弈树。如左图所示。(20分)

b. 解释怎么处理“?”值和为什么这么处理。(10分)
当后继状态中存在循环状态时,若存在可取胜的后继则选择可取胜后继,否则选择循环状态。即:
min(-1,?)=-1;min(1,?)=?;
max(-1,?)=?;max(1,?)=1;
在本例中,也可以将循环状态?按照0进行处理。

c. 解释标准的极大极小算法为什么在这棵博弈树中会失败,简要说明你将如何修正它。你修正后的算法对于所有包含循环的游戏都能给出最优决策吗?(10分)
标准的极小极大是深度优先的,并且会进入无限循环。可以通过比较当前状态和已知状态堆栈来解决这个问题;如果状态重复,则返回“?”值。 “?”值的传播过程如上。
这一方法并不是始终有效的,在本例中,效用函数仅与状态相关。当效用函数与路径相关时,这一方法将失去作用。

d. 这个4-方格游戏可以推广到n个方格,其中 n>2 。证明如果n是偶数A一定能赢,而n是奇数则A一定会输。(10分)

这道题有两种证明方法。一种是按奇偶性分别给出B的必胜策略和A的必胜策略。事实上,这个策略是很简单的,必胜的一方只要一直向前移动即可。证明的方法在于证明必胜的一方按照这一策略,前进的距离将恒大于必败的一方即可。

另一种证明方法是数学归纳法。注意到在游戏开始,先手走完之后,这个游戏的状态将转换为对手先手的n-1格游戏,由此来进行证明。需要强调的是,在证明过程中,需要对先手是否退回原位进行讨论,而不能简单的认为状态转换后的n-1格游戏与标准的n-1格游戏具有相同的搜索树。部分同学考虑第一轮结束后状态转移为n-2格游戏的思路也是可行的,不过同样需要注意A、B退回原位的可能性,不能直接得出n格游戏的胜负与n-1格游戏的胜负一致的结论。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值