基于R语言模拟估算集齐两枚骰子所有和值的预期投掷次数
用R语言模拟集齐骰子所有和的预期投掷次数
核心思路
要估算预期投掷次数,需要模拟多轮“投掷骰子直到集齐2-12所有和”的过程:
- 每一轮单独模拟,记录该轮需要的投掷次数
- 对所有轮次的次数取平均值,就是预期次数
你的原代码是批量生成大量单次投掷,但没有追踪“集齐所有和”的完整过程,所以需要调整为逐轮模拟的逻辑。
实现代码
1. 定义单次模拟函数
这个函数会模拟一轮从开始投掷到集齐所有和的过程,返回该轮的投掷次数:
simulate_one_run <- function() { collected_sums <- integer(0) # 存储已出现的和 toss_count <- 0 # 记录投掷次数 # 循环直到集齐2-12的所有11个和 while (length(unique(collected_sums)) < 11) { # 投掷两枚骰子并计算和 current_sum <- sample(1:6, 1) + sample(1:6, 1) collected_sums <- c(collected_sums, current_sum) toss_count <- toss_count + 1 } return(toss_count) }
2. 重复模拟并计算预期值
通过replicate重复运行单次模拟函数,得到大量轮次的结果后取平均值:
# 模拟10000次(次数越多,结果越接近真实预期值) n_simulations <- 10000 all_toss_counts <- replicate(n_simulations, simulate_one_run()) # 计算预期投掷次数 expected_value <- mean(all_toss_counts) cat("估算的预期投掷次数:", round(expected_value, 2), "\n") # 可选:查看次数的分布情况 hist(all_toss_counts, main = "集齐所有和的投掷次数分布", xlab = "单次轮次的投掷次数", col = "lightblue")
结果说明
- 模拟次数越多,平均值越接近理论预期值(理论值大约在61次左右,模拟结果会围绕这个值波动)
- 你可以调整
n_simulations的大小,比如增加到20000次,结果会更稳定
内容的提问来源于stack exchange,提问作者Renee Ofadu
相关产品推荐
相关产品推荐

