人工智能基础——对抗搜索

博弈树

就是游戏的状态空间。拿井字棋举例,很直观就能看懂。
稍微解释一下,首先树的叶子节点代表游戏的某个结局,1代表获胜,0代表平局,-1代表失败。(对于一号玩家而言)对于更复杂的游戏会有不同的评价方式,比如说围棋一盘结束后可以用黑白棋子占据位置的差值作为评价分数。
MAX和MIN代表两个玩家,某层为MAX代表此轮由他操作。之所以选择这两个名字,是因为MAX玩家总希望评价分数最高,MIN玩家则相反。也就是说如果确定每个结点的分数,他们的决策是一定的。
请添加图片描述

MIN-MAX算法

从整颗树倒推,上一层如果是MAX玩家,一定会希望取得最好的分数,用子结点中最大的数字更新上一层就行,MIN玩家也是同样,递归以下就出来了(其实是一种dp的思想)
但是对于状态空间非常大的游戏来说,想遍历整棵树是不可能的,所以我们需要更好的搜索策略。

α \alpha α- β \beta β剪枝

搜索过程中维护能得到的分数范围, α \alpha α代表最小值, β \beta β代表最大值。max层总会更新 α \alpha α,代表自己能至少选到多大的数字,对某个max节点来说 β \beta β永远为正无穷,因为还有可能在下一棵子树搜到更大的,但是之前搜索到的 β \beta β也会被参考,当你找到一个 α \alpha α比之前的 β \beta β还大时,说明你的上层min一定会选择另一条路而不是你,再搜索也就没有意义了。也就是说max节点的搜索有意义反而是当他不够大的时候
对于min也是同理。

行棋排序

就是希望选择更优秀的节点遍历顺序,使得 α \alpha α- β \beta β剪枝速度更快。比如说围棋,优先选择吃子、包围之类的操作,使得搜索速度更快。

不完美实时决策

上面所有的算法都是完备的,但是搜索空间太大,实际操作起来基本不可行。需要一些启发式的算法。

向前剪枝

利用先验进行剪枝,比如规定几步“好棋”,进行搜索。但是很可能会避开最优解,于是存在有概率性的选择剪枝对象。

搜索查表

就是认为构造几种特定情况(残局),把棋局变成这种状态后面再根据表走。就是人为提前处理出几种很难走的情况。

随机博弈

存在概率性的博弈游戏,可以通过计算期望来进行搜索。评价函数构建方法很多,比如说自己和自己反复下棋,然后一方赢了就给经过的棋谱+1分,类似这样反复模拟的蒙特卡洛仿真。

部分可观察博弈

比如看不到对面手牌的游戏,很玄学。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值