量化面试绿皮书:48. 骰子游戏 III

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。

48. 骰子游戏 III

你可以掷一个6面骰子最多3次。
在第一次或第二次掷骰后,如果得到点数x,你可以选择拿走x美元或者继续掷骰。
但一旦选择继续,当前点数立即作废。
若进行到第三次掷骰,无论结果如何都将获得对应金额并结束游戏。

Q: 这个游戏的期望价值是多少?最优策略是什么?

A: 在这个掷骰子游戏中,玩家最多可以掷一个公平的6面骰子三次。决策点出现在第一次和第二次掷骰后:如果得到点数 xxx,玩家可以选择拿走 xxx 美元或继续掷骰(但继续后当前点数作废)。如果进行到第三次掷骰,无论结果如何,玩家都必须拿走对应金额。目标是最大化期望收益。

通过动态规划(从后向前推演),可以计算出游戏的期望价值和最优策略。骰子每个面(1 到 6)出现的概率均为 16\frac{1}{6}61

最优策略

最优策略基于每个决策点的期望价值比较:

  • 第一次掷骰后
    • 如果点数为 5 或 6,则拿走金额(因为这些点数高于继续掷骰的期望价值)。
    • 如果点数为 1、2、3 或 4,则继续掷骰(因为这些点数低于继续掷骰的期望价值)。
  • 第二次掷骰后
    • 如果点数为 4、5 或 6,则拿走金额(因为这些点数高于第三次掷骰的期望价值)。
    • 如果点数为 1、2 或 3,则继续掷骰(因为这些点数低于第三次掷骰的期望价值)。
  • 第三次掷骰后:无论点数为多少,都必须拿走金额。

期望价值计算

游戏的期望价值(以美元计)为 143≈4.6667\frac{14}{3} \approx 4.66673144.6667。以下是详细推导:

  1. 第三次掷骰的期望价值(EV3EV_3EV3)

    • 第三次掷骰无选择,必须接受点数。
    • 期望价值:EV3=1+2+3+4+5+66=216=3.5EV_3 = \frac{1 + 2 + 3 + 4 + 5 + 6}{6} = \frac{21}{6} = 3.5EV3=61+2+3+4+5+6=621=3.5.
  2. 第二次掷骰后的期望价值(考虑最优决策)

    • 在第二次掷骰后,玩家根据点数 xxx 决定:

      • 如果 x≤3x \leq 3x3,继续掷骰,获得 EV3=3.5EV_3 = 3.5EV3=3.5
      • 如果 x≥4x \geq 4x4,拿走 xxx(因为 4>3.54 > 3.54>3.5)。
    • 因此,第二次掷骰的期望价值 EV2EV_2EV2 为:

      EV2=16[max⁡(1,3.5)+max⁡(2,3.5)+max⁡(3,3.5)+max⁡(4,3.5)+max⁡(5,3.5)+max⁡(6,3.5)] EV_2 = \frac{1}{6} \left[ \max(1, 3.5) + \max(2, 3.5) + \max(3, 3.5) + \max(4, 3.5) + \max(5, 3.5) + \max(6, 3.5) \right] EV2=61[max(1,3.5)+max(2,3.5)+max(3,3.5)+max(4,3.5)+max(5,3.5)+max(6,3.5)]

      代入计算:

      • max⁡(1,3.5)=3.5\max(1, 3.5) = 3.5max(1,3.5)=3.5(继续)
      • max⁡(2,3.5)=3.5\max(2, 3.5) = 3.5max(2,3.5)=3.5(继续)
      • max⁡(3,3.5)=3.5\max(3, 3.5) = 3.5max(3,3.5)=3.5(继续)
      • max⁡(4,3.5)=4\max(4, 3.5) = 4max(4,3.5)=4(拿走)
      • max⁡(5,3.5)=5\max(5, 3.5) = 5max(5,3.5)=5(拿走)
      • max⁡(6,3.5)=6\max(6, 3.5) = 6max(6,3.5)=6(拿走)

      EV2=16(3.5+3.5+3.5+4+5+6)=16(10.5+15)=25.56=4.25 EV_2 = \frac{1}{6} (3.5 + 3.5 + 3.5 + 4 + 5 + 6) = \frac{1}{6} (10.5 + 15) = \frac{25.5}{6} = 4.25 EV2=61(3.5+3.5+3.5+4+5+6)=61(10.5+15)=625.5=4.25

      或分数形式:EV2=174=4.25EV_2 = \frac{17}{4} = 4.25EV2=417=4.25.

  3. 第一次掷骰后的期望价值(考虑最优决策)

    • 在第一次掷骰后,玩家根据点数 yyy 决定:

      • 如果 y≤4y \leq 4y4,继续掷骰,获得 EV2=4.25EV_2 = 4.25EV2=4.25(因为 4<4.254 < 4.254<4.25)。
      • 如果 y≥5y \geq 5y5,拿走 yyy(因为 5>4.255 > 4.255>4.25)。
    • 因此,第一次掷骰的期望价值 EV1EV_1EV1(即游戏的总期望价值)为:

      EV1=16[max⁡(1,4.25)+max⁡(2,4.25)+max⁡(3,4.25)+max⁡(4,4.25)+max⁡(5,4.25)+max⁡(6,4.25)] EV_1 = \frac{1}{6} \left[ \max(1, 4.25) + \max(2, 4.25) + \max(3, 4.25) + \max(4, 4.25) + \max(5, 4.25) + \max(6, 4.25) \right] EV1=61[max(1,4.25)+max(2,4.25)+max(3,4.25)+max(4,4.25)+max(5,4.25)+max(6,4.25)]

      代入计算:

      • max⁡(1,4.25)=4.25\max(1, 4.25) = 4.25max(1,4.25)=4.25(继续)
      • max⁡(2,4.25)=4.25\max(2, 4.25) = 4.25max(2,4.25)=4.25(继续)
      • max⁡(3,4.25)=4.25\max(3, 4.25) = 4.25max(3,4.25)=4.25(继续)
      • max⁡(4,4.25)=4.25\max(4, 4.25) = 4.25max(4,4.25)=4.25(继续)
      • max⁡(5,4.25)=5\max(5, 4.25) = 5max(5,4.25)=5(拿走)
      • max⁡(6,4.25)=6\max(6, 4.25) = 6max(6,4.25)=6(拿走)

      EV1=16(4.25+4.25+4.25+4.25+5+6)=16(17+11)=286=143≈4.6667 EV_1 = \frac{1}{6} (4.25 + 4.25 + 4.25 + 4.25 + 5 + 6) = \frac{1}{6} (17 + 11) = \frac{28}{6} = \frac{14}{3} \approx 4.6667 EV1=61(4.25+4.25+4.25+4.25+5+6)=61(17+11)=628=3144.6667

结论

  • 游戏的期望价值143\frac{14}{3}314 美元(约 4.6667 美元)。
  • 最优策略
    • 第一次掷骰后:点数为 5 或 6 时停止并拿走金额;点数为 1、2、3 或 4 时继续掷骰。
    • 第二次掷骰后:点数为 4、5 或 6 时停止并拿走金额;点数为 1、2 或 3 时继续掷骰。
    • 第三次掷骰后:必须拿走金额。

此策略最大化期望收益,相比单次掷骰的期望价值 3.5 美元,通过选择权提升了收益。

Python 实现

以下是通过Python实现的解决方案:

from typing import Tuple


def calculate_dice_game_expectation() -> Tuple[float, str]:
    """计算掷骰子游戏的期望价值和最优策略。

    游戏规则:
    - 最多掷骰3次(6面骰)
    - 第1/2次掷后可选:拿走当前金额或继续(继续则当前金额作废)
    - 第3次必须拿走最终金额

    Returns:
        Tuple[float, str]:
            - 期望价值(float)
            - 最优策略描述(str)
    """
    # 第三次掷骰的期望值(无选择权)
    ev_third = sum(range(1, 7)) / 6.0

    # 计算第二次掷骰的期望值(考虑最优决策)
    second_roll_values = []
    for point in range(1, 7):
        # 比较当前点数与第三次期望值,选择较大者
        # 点数≥4时停止,<4时继续
        second_roll_values.append(max(point, ev_third))
    ev_second = sum(second_roll_values) / 6.0

    # 计算第一次掷骰的期望值(考虑最优决策)
    first_roll_values = []
    for point in range(1, 7):
        # 比较当前点数与第二次期望值,选择较大者
        # 点数≥5时停止,<5时继续
        first_roll_values.append(max(point, ev_second))
    ev_first = sum(first_roll_values) / 6.0

    # 构建最优策略描述
    strategy = (
        "最优策略:\n"
        "1. 第一次掷骰后:若点数为5或6则停止;1-4则继续\n"
        "2. 第二次掷骰后:若点数为4、5或6则停止;1-3则继续\n"
        "3. 第三次掷骰后:必须接受最终点数"
    )

    return round(ev_first, 4), strategy


# 计算并输出结果
expectation, strategy = calculate_dice_game_expectation()
print(f"游戏期望价值:{expectation:.4f}美元")
print(strategy)

代码说明

  1. 动态规划实现

    • 第三次掷骰:直接计算期望值 (1+2+3+4+5+6)/6 = 3.5
    • 第二次掷骰:对每个点数取max(点数, 第三次期望值)
    • 第一次掷骰:对每个点数取max(点数, 第二次期望值)
  2. 最优策略决策

    • 第一次决策阈值:5(比较4.25)
    • 第二次决策阈值:4(比较3.5)
    • 决策逻辑通过max()函数实现

输出:

游戏期望价值:4.6667美元
最优策略:
1. 第一次掷骰后:若点数为5或6则停止;1-4则继续
2. 第二次掷骰后:若点数为4、5或6则停止;1-3则继续
3. 第三次掷骰后:必须接受最终点数

计算验证

  • 第三次期望:3.5000
  • 第二次期望:(3.5×3 + 4+5+6)/6 = 25.5/6 = 4.2500
  • 第一次期望:(4.25×4 + 5+6)/6 = 28/6 ≈ 4.6667

这道面试题的本质是考察候选人将金融决策问题转化为动态优化模型的能力在随机过程中计算选择权价值的思维,这类能力直接对应量化金融中的衍生品定价、算法交易执行、以及风险管理系统的核心挑战。

🔑 核心知识点

  1. 动态规划(Dynamic Programming)

    • 通过逆向归纳(Backward Induction)解决多阶段决策问题
    • 核心思想:从最终状态向前递归计算期望值(本题从第三次掷骰反推至第一次)
  2. 随机过程与期望值计算

    • 离散随机变量(骰子点数)的概率分布建模
    • 条件期望值的递推关系:
      EVn=16∑max⁡(当前值,EVn+1)EV_{n} = \frac{1}{6} \sum \max(\text{当前值}, EV_{n+1})EVn=61max(当前值,EVn+1)
  3. 最优停止理论(Optimal Stopping)

    • 在不确定性下决策何时"停止"(拿钱)或"继续"(掷骰)
    • 阈值判定:比较即时收益与继续游戏的期望价值
  4. 美式期权定价思维

    • 每次"继续"相当于持有选择权(类比美式期权可提前行权)
    • 决策阈值类似期权行权的最优边界条件

📊 面试评估维度

考察维度具体表现要求本题对应点
数学建模能力将实际问题转化为概率模型将掷骰规则抽象为三阶段动态规划问题
量化直觉理解随机过程中的选择权价值识别"继续掷骰"本质是购买未来更高收益的期权
数值计算精度准确计算条件期望与递归边界递推计算 EV₃→EV₂→EV₁ 并验证阈值逻辑(如 4.25>4?)
策略泛化能力从解耦策略推广到同类金融问题最优停止阈值可直接类比美式期权行权、算法交易执行时机决策
代码实现严谨性将数学模型转化为健壮代码需正确处理边界条件(如第三次强制终止)、避免浮点误差(分数计算更精确)

🧩 典型回答框架

  1. 定义状态函数

    • Vn(当前点数)V_n(\text{当前点数})Vn(当前点数) 为第 nnn 次掷骰后的价值函数
    • 终态条件:V3(x)=xV_3(x) = xV3(x)=x(第三次必须接受点数)
  2. 逆向递归求解

    # 伪代码逻辑
    EV3 = 3.5  # 第三次期望
    EV2 = mean([max(x, EV3) for x in 1..6])  # 第二次决策
    EV1 = mean([max(x, EV2) for x in 1..6])  # 第一次决策
    
  3. 阈值决策规则

    • kkk 次停止条件:当 x>EVk+1x > EV_{k+1}x>EVk+1 时立即获利
    • 推导:
      • 第二次阈值:x>3.5x > 3.5x>3.5 → 取 x≥4x \geq 4x4
      • 第一次阈值:x>4.25x > 4.25x>4.25 → 取 x≥5x \geq 5x5
  4. 输出经济解释

    • 期望价值 143≈4.6667\frac{14}{3} \approx 4.66673144.6667 美元
    • 相比单次掷骰(3.5美元),选择权增值 33.3%

💡 核心洞察

本题的骰子游戏本质是美式期权的离散化教学模型

  • 每次"继续掷骰"相当于支付机会成本(放弃当前收益)来保留未来更高收益的期权
  • 决策阈值(4/5)与美式期权行权边界高度相似:
    • 金融场景:当标的资产价格 S>K∗S > K^*S>K 时立即行权
    • 本题场景:当当前点数 x>EVfuturex > EV_{\text{future}}x>EVfuture 时停止游戏
  • 量化金融映射
    • 衍生品定价:Bermudan 期权递归定价(有限次行权机会)
    • 算法交易:在 VWAP/TWAP 策略中优化订单执行时机
    • 风险管理:在止损决策中平衡即时损失与未来波动风险

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

船长Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值