E x p e c t i m a x Expectimax Expectimax 算法详解
一、Minimax 的局限性
Minimax 算法的核心假设是对手始终采取最优策略(即最坏情况假设)。然而,在现实场景中,对手可能并非完全理性或采用随机策略。例如:
- 非理性对手:新手玩家可能做出非最优决策。
- 随机策略:对手可能以一定概率选择不同动作(如石头剪刀布中随机出拳)。
此时,Minimax 的保守策略(假设对手最优)会导致实际收益低于预期。为此, E x p e c t i m a x Expectimax Expectimax 被提出以解决这一问题。
二、 E x p e c t i m a x Expectimax Expectimax 的核心思想
- 概率化对手模型:假设对手的动作服从某种概率分布(如均匀随机、基于经验的概率)。
- 期望值替代最小值:将 Minimax 中的 Min 层替换为 Chance 层,计算对手动作的期望收益。
- 目标:最大化自身动作的期望收益,而非最小化最坏情况。
三、 E x p e c t i m a x Expectimax Expectimax 树的结构
graph TD
A[Max层(我方决策)]
A -->|动作1| B[Chance层(对手概率动作)]
B -->|动作A(概率p₁)| C[叶子节点<br>收益u₁]
B -->|动作B(概率p₂)| D[叶子节点<br>收益u₂]
A -->|动作2| E[Chance层(对手概率动作)]
E -->|动作C(概率p₃)| F[叶子节点<br>收益u₃]
E -->|动作D(概率p₄)| G[叶子节点<br>收益u₄]
- Max层:我方选择最大化期望收益的动作。
- Chance层:根据对手动作的概率分布,计算子节点的期望收益。
四、 E x p e c t i m a x Expectimax Expectimax 算法步骤
- 递归遍历树:从根节点出发,深度优先搜索。
- 叶子节点评估:返回终局收益值。
- 回溯计算:
- Max层:选择子节点中的最大期望值。
- Chance层:计算子节点的加权平均期望值(权重为动作概率)。
伪代码
def expectimax(state, is_max_player):
if is_terminal(state):
return evaluate(state)
if is_max_player:
best_value = -∞
for action in get_actions(state):
new_state = apply_action(state, action)
value = expectimax(new_state, False) # 进入Chance层
best_value = max(best_value, value)
return best_value
else:
expected_value = 0
for action in get_actions(state):
new_state = apply_action(state, action)
prob = get_probability(action) # 获取对手动作概率
value = expectimax(new_state, True) # 进入Max层
expected_value += prob * value
return expected_value
五、示例分析(非确定性井字棋)
假设对手(O玩家)有 70% 概率选择最优动作,30% 概率随机选择非最优动作:
graph TD
A[Max层(X玩家)]
A -->|动作1(中心落子)| B[Chance层(O玩家)]
B -->|动作A(最优,概率0.7)| C[叶子节点<br>收益+1]
B -->|动作B(随机,概率0.3)| D[叶子节点<br>收益0]
A -->|动作2(角落落子)| E[Chance层(O玩家)]
E -->|动作C(最优,概率0.7)| F[叶子节点<br>收益-1]
E -->|动作D(随机,概率0.3)| G[叶子节点<br>收益+1]
- 动作1的期望收益:( 0.7 × 1 + 0.3 × 0 = 0.7 0.7 \times 1 + 0.3 \times 0 = 0.7 0.7×1+0.3×0=0.7 )
- 动作2的期望收益:( 0.7 × ( − 1 ) + 0.3 × 1 = − 0.4 0.7 \times (-1) + 0.3 \times 1 = -0.4 0.7×(−1)+0.3×1=−0.4 )
- 决策结果:选择动作1(期望收益 0.7 > − 0.4 0.7 > -0.4 0.7>−0.4)。
六、 E x p e c t i m a x Expectimax Expectimax 的局限性
- 无法有效剪枝:
- 原因:Chance层的期望值需计算所有分支的加权和,任意分支的缺失会导致结果不准确。
- 对比 Alpha-Beta 剪枝:Minimax 中可通过上下界剪枝,但 E x p e c t i m a x Expectimax Expectimax 无法直接应用。
- 计算复杂度更高:
- 时间复杂度为 ( O ( b d ) O(b^d) O(bd) ),与 Minimax 相同,但实际计算量更大(需处理概率加权)。
- 依赖概率模型的准确性:
- 若对手实际策略与假设概率分布不符,期望收益将偏离真实值。
七、优化方法
1. 概率剪枝(Probabilistic Pruning)
- 思想:忽略低概率分支(如概率 < ε 的路径)。
- 示例:若某动作概率 < 1%,可剪枝以减少计算量。
- 风险:可能丢失关键路径,导致决策偏差。
2. 蒙特卡洛采样(Monte Carlo Sampling)
- 步骤:
- 从 Chance 层按概率分布采样若干动作。
- 仅计算采样路径的期望值。
- 优点:大幅减少计算量。
- 缺点:结果具有随机性,需多次采样取平均。
3. 启发式期望估计
- 设计目标:快速估算 Chance 层的期望值,避免完全展开子树。
- 示例:使用神经网络预测对手动作的概率分布。
八、 E x p e c t i m a x Expectimax Expectimax 的应用场景
场景 | 说明 |
---|---|
非确定性游戏 | 如扑克(对手手牌隐藏)、双陆棋(骰子随机性)。 |
对手模型不完美 | 对手可能采用混合策略或存在决策漏洞。 |
强化学习环境 | 在部分可观测马尔可夫决策过程(POMDP)中建模不确定性。 |
九、与 Minimax 的对比
特性 | Minimax | E x p e c t i m a x Expectimax Expectimax |
---|---|---|
对手假设 | 对手完全理性(最优策略) | 对手按概率分布选择动作 |
节点类型 | Max层 + Min层 | Max层 + Chance层 |
剪枝可行性 | 支持 Alpha-Beta 剪枝 | 无法直接剪枝 |
计算复杂度 | ( O ( b d ) O(b^d) O(bd) ) | ( O ( b d ) O(b^d) O(bd) )(实际更高) |
适用场景 | 完全信息、确定型对手 | 非确定性、随机或概率化对手 |
十、总结
- 核心价值: E x p e c t i m a x Expectimax Expectimax 通过概率建模对手行为,更贴近实际博弈场景。
- 关键挑战:计算复杂度高、剪枝困难、依赖概率模型准确性。
- 实践建议:
- 在实时性要求高的场景中,结合蒙特卡洛采样或启发式估计。
- 若对手策略已知,可针对性优化概率分布模型(如使用历史数据训练)。