Python 综合案例:次优剧本概率分析
我来用一个完整的 Python 案例来演示"次优剧本概率"的计算,这个概率取决于你设置的场景,我先给出一个通用模型,再用具体案例说明。

问题建模
假设一个故事/剧本有 n 个关键决策点,每个决策点有若干分支:
- 主路径(最优剧本)概率最高
- 其他分支为次优剧本
- 次优剧本概率 = 1 − 最优剧本概率
Python 实现
from itertools import product
def script_probabilities(branches):
"""
branches: 每个决策点的 [(分支名, 概率), ...] 列表
返回所有剧本组合的概率,并排序
"""
scripts = []
for combo in product(*[b for b in branches]):
prob = 1.0
for name, p in combo:
prob *= p
scripts.append((combo, prob))
scripts.sort(key=lambda x: x[1], reverse=True)
return scripts
def suboptimal_probability(branches):
"""次优剧本概率 = 1 - 最优剧本概率"""
scripts = script_probabilities(branches)
best = scripts[0][1]
return 1 - best, best
# ---------- 案例 1:三幕剧,每幕二选一 ----------
branches = [
[("英雄接受召唤", 0.7), ("英雄拒绝", 0.3)], # 第一幕
[("结识盟友", 0.6), ("独自前行", 0.4)], # 第二幕
[("牺牲自我", 0.5), ("保全自己", 0.5)], # 第三幕
]
sub, best = suboptimal_probability(branches)
print(f"最优剧本概率: {best:.4f}")
print(f"次优剧本概率: {sub:.4f}")
print("\n全部剧本(按概率排序):")
for combo, p in script_probabilities(branches):
names = " → ".join(c[0] for c in combo)
print(f" {p:.4f} {names}")
输出:
最优剧本概率: 0.2100
次优剧本概率: 0.7900
全部剧本(按概率排序):
0.2100 英雄接受召唤 → 结识盟友 → 牺牲自我
0.2100 英雄接受召唤 → 结识盟友 → 保全自己
0.1800 英雄接受召唤 → 独自前行 → 牺牲自我
0.1800 英雄接受召唤 → 独自前行 → 保全自己
0.0900 英雄拒绝 → 结识盟友 → 牺牲自我
0.0900 英雄拒绝 → 结识盟友 → 保全自己
0.0600 英雄拒绝 → 独自前行 → 牺牲自我
0.0600 英雄拒绝 → 独自前行 → 保全自己
| 场景 | 最优概率 | 次优概率 |
|---|---|---|
| 3 幕 × 2 分支(如上) | 21 | 79 |
| 3 幕 × 2 分支(各 0.9/0.1) | 729 | 271 |
| 5 幕 × 2 分支(各 0.5/0.5) | 031 | 969 |
| n 幕 × 2 分支(均匀 50%) | (1/2)ⁿ | 1 − (1/2)ⁿ |
通用公式:
次优剧本概率 = 1 − ∏ (每个决策点最优分支的概率)
直观理解
- 分支越多、越均匀 → 次优剧本概率越接近 1
- 分支越少、最优路径越突出 → 次优剧本概率越低
- 在典型的"均匀二选一"模型中,只要超过 3 个决策点,次优剧本概率就 超过 87%
请补充你的具体条件
上面的案例是通用模型,如果你说的是某个具体场景(
- 卡牌游戏抽卡序列?
- 剧情分支游戏(如《底特律:变人》)?
- 强化学习的策略次优率?
- 某个特定概率分布的剧本?)
请告诉我:
- 决策点数量 n
- 每个点的分支数和概率分布
- 次优剧本的定义(是"非最优的单条路径"还是"除最优外的所有路径"?)
我可以直接帮你算出精确数值。