3.5 Expectimax算法

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 的核心思想
  1. 概率化对手模型:假设对手的动作服从某种概率分布(如均匀随机、基于经验的概率)。
  2. 期望值替代最小值:将 Minimax 中的 Min 层替换为 Chance 层,计算对手动作的期望收益。
  3. 目标:最大化自身动作的期望收益,而非最小化最坏情况。

三、 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 算法步骤
  1. 递归遍历树:从根节点出发,深度优先搜索。
  2. 叶子节点评估:返回终局收益值。
  3. 回溯计算
    • 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 的局限性
  1. 无法有效剪枝
    • 原因:Chance层的期望值需计算所有分支的加权和,任意分支的缺失会导致结果不准确。
    • 对比 Alpha-Beta 剪枝:Minimax 中可通过上下界剪枝,但 E x p e c t i m a x Expectimax Expectimax 无法直接应用。
  2. 计算复杂度更高
    • 时间复杂度为 ( O ( b d ) O(b^d) O(bd) ),与 Minimax 相同,但实际计算量更大(需处理概率加权)。
  3. 依赖概率模型的准确性
    • 若对手实际策略与假设概率分布不符,期望收益将偏离真实值。

七、优化方法
1. 概率剪枝(Probabilistic Pruning)
  • 思想:忽略低概率分支(如概率 < ε 的路径)。
  • 示例:若某动作概率 < 1%,可剪枝以减少计算量。
  • 风险:可能丢失关键路径,导致决策偏差。
2. 蒙特卡洛采样(Monte Carlo Sampling)
  • 步骤
    1. 从 Chance 层按概率分布采样若干动作。
    2. 仅计算采样路径的期望值。
  • 优点:大幅减少计算量。
  • 缺点:结果具有随机性,需多次采样取平均。
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 通过概率建模对手行为,更贴近实际博弈场景。
  • 关键挑战:计算复杂度高、剪枝困难、依赖概率模型准确性。
  • 实践建议
    • 在实时性要求高的场景中,结合蒙特卡洛采样或启发式估计。
    • 若对手策略已知,可针对性优化概率分布模型(如使用历史数据训练)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值