赌徒破产问题——乖乖签到还是掷骰子?
前些时日,常用的一个 GPT-4 API 中转网站 burn.hair 在每日签到任务下多了一个游戏,规则是每次支付 3 美元,获得一次掷骰子的机会。骰子是一个六面骰子,点数为 1 到 6,得到几点就赢得相应的美元。

看到这个时,我脑海里同时跳出来两个想法。
一个想法是:掷一次净赢利期望是 0.5 刀,稳赚不赔的生意,这不白嫖嘛,不玩白不玩。

另一个想法是:怎么感觉有点像赌徒破产问题。这是一个经典的概率问题,描述了一个赌徒在赌场中玩赌博逃不掉的魔咒。赌徒每次下注 1 美元,赢了就赢 1 美元,输了就输 1 美元。假设每场胜率都是 50%,那么赌徒最终破产的概率是多少?
答案是 100%。因为赌徒的资金是有限的,一旦资金归零就彻底出局。当然这里隐藏的假设是庄家有无限资金,理论上不可能,但实际上庄家跟赌徒的资金对比非常悬殊,因此即使在胜率 50% 的情况下,只要玩得足够久,赌徒最终难逃破产的命运。

考虑到只有不到 10 刀的余额,理性告诉我不要沉迷于赢利的泡沫中,因此也就没有继续思考这个问题,乖乖的选择了每日签到。
然而这几日又想到了这个问题,本着学习的态度,我决定精确求解一下,看看概率是多少。假设骰子是公平的,我的初始资金 是 15 刀,那么考察三个问题:
- 假如我每天都玩一次游戏,在 100 天内因为余额不足而出局的概率 (l=loss)是多少?
- 100 天后的余额的期望 是多少?
- 该不该玩这个游戏?
出局概率
直接计算这个概率也是可以的,但多年不接触概率论,计算能力已经逐年减退,只能借助于代码测试一下。
import random
import numpy as np
def simulate_game(days_limit=100, initial_balance=15):
gambler = initial_balance
house = 10000
days = 0
bankrupt = False
while days < days_limit:
days += 1
if gambler < 3:
bankrupt = True
break
gambler -= 3
house += 3
dice_roll = random.randint(1, 6)
if house < dice_roll:
gambler += house
house = 0
break
else:
gambler += dice_roll
house -= dice_roll
return gambler, bankrupt
def run_experiments(num_experiments=10000, days_limit=100, initial_balance=15):
results = []
bankruptcies = 0
for _ in range(num_experiments):
final_balance, is_bankrupt = simulate_game(days_limit, initial_balance)
results.append(final_balance)
if is_bankrupt:
bankruptcies += 1
return results, bankruptcies
num_experiments = 100000
days_limit = 100
initial_balance = 15
results, bankruptcies = run_experiments(num_experiments, days_limit, initial_balance)
# Calculate statistics
average = np.mean(results)
median = np.median(results)
percentile_25 = np.percentile(results, 25)
percentile_75 = np.percentile(results, 75)
bankruptcy_rate = bankruptcies / num_experiments
print(f"After {num_experiments} independent experiments, each lasting up to {days_limit} days")
print(f"Initial balance: {initial_balance} dollars")
print(f"Expected final balance (average) for A: {average:.2f} dollars")
print(f"Median final balance for A: {median:.2f} dollars")
print(f"50% of cases fall between {percentile_25:.2f} and {percentile_75:.2f} dollars")
print(f"Minimum value: {min(results):.2f} dollars")
print(f"Maximum value: {max(results):.2f} dollars")
print(f"Probability of bankruptcy: {bankruptcy_rate:.6%}")
设初始资金为 15 刀,每次支付 3 刀,那么出局的条件是余额小于 3 刀。为了减少计算量,我们只模拟 100 天的情况。为了减少误差,我们模拟 10000 次求均值。
最终计算得到的结果,在 100 天内出局的概率为:0.89%,也即是不到 1% 的概率。这个概率是非常小的,因此可以认为在 100 天内基本不会出局。
出局概率与初始资金的关系

100 天内出局概率与初始资金的关系如上图所示,初始资金越多,出局概率越低,这很符合直觉。 特别地,如果初始有 10 刀,那么出局概率是 5.2%,而如果初始有 20 刀,那么出局概率就骤降到 0.14%。 所以,资本的力量确实是巨大的。
余额期望
每天连续玩游戏,直到出局或者 100 天结束,那么最终的余额的期望是多少?
答案是 64.77 (65)刀。这个结果很直观,由公式 也可得到。
该不该玩这个游戏?
这个问题得视情况而定,有两个条件比较关键,一是商家短时间不跑路,二是骰子是公平的,如果这两条都满足,那么这个游戏还是可以玩一下的。
而我,已经开始玩了,毕竟白嫖的吸力太大了。
后记
连输三天后,商家关闭了游戏,目前只能签到了 😂。三天分别输了 1 刀、3 刀、1 刀,损失额度 5 刀。

再后记
网页签到彻底关停了,而且价格对比其他中转商贵太多(比如 deepbrick.ais ),我已经切换到其他中转商了。