抛硬币游戏多轮后资金≤0的概率计算验证及疑问
抛硬币游戏中每轮资金为负的概率计算疑问
我遇到一个抛硬币游戏场景:初始资金为5美元,每轮赢1美元或输1美元的概率均为0.5。我想计算在20轮游戏中,每一轮结束时资金为0美元或更少的概率。
我尝试通过手动枚举每一轮的所有可能游戏结果来统计概率,实现逻辑如下:
初始化代码
library(dplyr) library(purrr) library(ggplot2) initial_amount <- 5 outcomes <- c(-1, 1) df <- data.frame(turn_number = integer(), score = numeric())
统计每轮结果与资金
for (i in 1:20) { combinations <- expand.grid(rep(list(outcomes), i)) calculate_score <- function(row) { initial_amount + sum(row) } scores <- apply(combinations, 1, calculate_score) df_turn <- data.frame(turn_number = rep(i, length(scores)), score = scores) df <- rbind(df, df_turn) }
分析资金为负的占比
df_summary <- df %>% group_by(turn_number) %>% summarise(positive_score_percent = sum(score > 0) / n() * 100, negative_score_percent = sum(score <= 0) / n() * 100)
绘制结果图
ggplot(df_summary, aes(x = turn_number, y = positive_score_percent)) + geom_point() + geom_line() + labs(title = "Percentage of Positive Scores Over Turns", x = "Turn Number", y = "Percentage of Positive Scores") + scale_x_continuous(breaks = unique(df_summary$turn_number)) + theme_bw()

我的疑问:
- 这个实现是否正确?
- 图表开头趋势符合逻辑——前5轮不可能出现负资金,但我认为后期正资金的概率应持续下降,实际却并非如此,这是为什么?
回答
1. 实现的正确性
你的代码逻辑是正确的:通过expand.grid枚举每一轮所有可能的胜负组合,计算每一种组合的最终资金,再统计正负资金的占比。这种穷举法在轮数较少(比如20轮,总组合数2^20≈100万,R可以处理)的情况下是可行的,结果的统计也是准确的。
2. 正资金概率不持续下降的原因
你觉得后期正资金概率应该持续下降,是忽略了对称随机游走的回归特性:
- 对于每步胜负概率相等的对称随机游走,从初始资金5美元出发,每一步的期望资金始终是5美元。当轮数增加,资金的分布会越来越分散,但期望始终保持在初始值附近。
- 随着轮数增多,资金跌到0以下的可能性确实会增加,但同时资金涨到更高正数的可能性也会同步增加,两者的占比变化并非单向下降,而是会逐渐向50%靠拢(当轮数趋向无穷大时,根据大数定律,正资金的概率会趋近于0.5)。
- 比如第6轮第一次出现资金≤0的可能,但后续轮数中,胜负组合的多样性会让正负资金的占比呈现波动式的收敛,而非持续下降。
内容的提问来源于stack exchange,提问作者Uk rain troll
相关产品推荐
相关产品推荐

