【人工智能】博弈搜索(极小极大值、α-β剪枝)

1. 极小极大值算法

  人工智能中 "博弈" 通常专指博弈论专家们称为有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏(如国际象棋)。术语中,这是指在确定的、完全可观察的环境中两个 Agent必须轮流行动,在游戏结束时效用值总是相等并且符号相反。例如下国际象棋,一个棋手贏了,则对手一定是输了。正是 Agent 之间效用函数的对立导致了环境是对抗的。

博弈的游戏通常被 AI 作为一个好的问题来进行研究主要是因为:

  • 玩家需要向人一样的智慧
  • 游戏可能非常复杂(如象棋、围棋)
  • 需要在一定的时间限制内做出决策
  • 游戏是容易被定义的而且可以重复
  • 游戏完全可观察并且有有限的环境
  • 可以直接将人与AI进行比较

以井字棋为例我们可以得到下面的博弈树:

  通过以上博弈树可以得知游戏的终止会有两种结果MAX得到+1,MIN就会是-1,MAX是-1,MIN就会是+1,也就是一名玩家最大化结果,另一名玩家的结果就会最小。

  假设两个玩家(MAX为计算机、MIN为其对手)都发挥最佳效果,那么在计算机移动后,对手将选择最小化(但对于对手来说是最有利的操作)的移动,由此可得计算机应在考虑其移动和对手的最佳移动的情况下选择最佳移动,如下图所示:

  如上图所示计算机在根节点有四种选择方式,每种选择之后其对手又有不同种选择方式,在其对手选择完成后就会进入终止状态产生结果,计算机 (MAX) 为确保自己所获利益最大,应当选择B、C、D、E中最大的值,因为对手 (MIN) 总会选择对自己最有利的决策,所以B值的由来是F、G中的最小值、C的由来是H、I、J的最小值,由此就可以得到了极小极大值的算法,极小代表的是在计算机 (MAX) 决策后其对手 (MIN) 总会选择对于计算机 (MAX) 来说获利最小的操作,极大值代表的是计算机 (MAX) 需要在所有的决策中(所有的极小值中),选择最大的值,通过以上分析可得运用递归的方法是比较容易实现以上操作的,具体伪代码如下:

cpp 复制代码
function MINIMAX_DECISION(state) returns an action
	inputs: state,current state in game
	return the a in Actions(state) maximizing MIN-VALUE(RESULT(a,state))

function MAX-VALUE(state) returns a utility value
	if TERMINAL-TEST(state) then return UTILITY(state)
	v = -∞
	for a,s in SUCCESSORS(state) do 
		v = MAX(v,MIN-VALUE(s))

function MIN-VALUE(state) returns a utility value
	if TERMINAL-TEST(state) then return UTILITY(state)
	v = ∞
	for a,s in SUCCESSORS(state) do 
		v = MIN(v,MAX-VALUE(s))

  从如上代码中可以得到 MAX-VALUE 函数与 MIN-VALUE 函数相互调用,通过深度优先搜索与逆向的归纳实现了极小极大值算法流程。

2. α-β剪枝

假设有如下博弈搜索树:

其正常的深搜顺序如下所示:

但根据极小极大值算法来看,我们发现有些搜索是没有必要进行的,请看以下分析:

  查看上图得知,MAX已完成了对第一个子节点的搜索,此时 MAX 在未搜索到其它节点的情况下的选择应该是大于等于3的 (目前所得到的极小极大值为3)。

  继续对第二个子节点进行搜索,但在第二个子节点的孩子节点搜到 2 时,我们就得知第二个子节点的值只会 ≤2 ,比第一个节点的值要小,因为我们要在所有子结点中选择最大值,因此在搜完第二个子节点的 2 节点之后,第二个子节点的孩子节点就没有搜索的必要了。

  但如果在搜索第三个节点时搜索到了值为 14 的节点,剩余的节点是还要继续搜索的,因为我们不知道第三个子节点的最小孩子节点是多少,所以需要继续搜索。

  以上过程只是展示了 MAX 在搜索中的剪枝过程,同理我们也可以得到 MIN在搜索时,也可以利用同样的优化方案,此时我们就可以得到 α-β 剪枝的伪代码:

cpp 复制代码
function ALPHA-BETA-SEARCH(state) returns an action
	v = MAX-VALUE(state,-∞,+∞)
	return the action in ACTIONS(state) with value v

function MAX-VALUE(state,α,β) returns a utility value
	if TERMINAL-TEST(state) then return UTILITY(state)
	v = -∞
	for each a in ACTIONS(state) do
		v = MAX(v,MIN-VALUE(RESULT(s,a),α,β))
		if v ≥ β then return v
		α = MAX(α,v)
	return v
	
function MIN-VALUE(state,α,β) returns a utility value
	if TERMINAL-TEST(state) then return UTILITY(state)
	v = +∞
	for each a in ACTIONS(state) do
		v = MIN(v,MAX-VALUE(RESULT(s,a),α,β))
		if v ≤ α then return v
		β = MIN(β,v)
	return v

  其中 α 表示到目前为止路径上发现的 MAX 的最佳 (即极大值) 选择,β表示到目前为止路径上发现的 MIN 的最佳 (即极小值) 选择。

相关推荐
三声三视12 小时前
75 条文章索引被一条 add 清成 1 条,退出码还是 0:tri-article 的 index.py 我读了 205 行
人工智能·ai·skill·tri-skills·tri-article
蓝速科技12 小时前
医院导诊 AI 数字人一体机场景适配与落地指南丨蓝速科技
运维·数据库·人工智能·科技·自然语言处理·技术分享
QYR-分析12 小时前
重轨受电弓行业深度报告:市场格局、技术迭代与发展前景
大数据·数据库·人工智能
火山引擎开发者社区12 小时前
# 开发者集结!共探 AI Agent 创新应用新可能
人工智能
牛油果子哥q12 小时前
生产级AI项目上线全流程:Docker容器化、服务编排、监控告警、日志收集、容灾降级、线上运维闭环
人工智能·ai
Pocker_Spades_A12 小时前
视频不用再一张张截图:ClipSketch AI 把关键画面转成漫画,还能顺手生成文案
人工智能·音视频
小小测试开发12 小时前
LLM 结构化输出测试:Schema 契约 + 故障注入,让工具调用的 JSON 不再靠重试赌运气
人工智能·json
阿里云大数据AI技术12 小时前
淘宝直播 AI 分身:基于阿里云 Milvus 的商品知识召回实践
人工智能
猎头南楼12 小时前
大模型后训练与 Agent 自迭代:两类工程能力的观察
人工智能·深度学习·机器学习
镜像视界(浙江)科技有限公司12 小时前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算