鱿鱼游戏第7集玻璃桥二项分布概率问题R模拟故障求助
《鱿鱼游戏》玻璃桥概率模拟问题
昨晚我观看了电视剧《鱿鱼游戏》的第7集,该集中的玻璃桥游戏涉及*二项分布(binomial distribution)*相关原理。
该游戏规则为:共16名玩家,玻璃桥共有18组玻璃,每组包含一块普通玻璃和一块强化安全玻璃,踩中普通玻璃会直接碎裂淘汰,后续玩家可从前面玩家探明的最后安全位置继续前进,最终有3名玩家成功通过玻璃桥。
我尝试将该问题转化为等效概率模型:假设我口袋里有16欧元,玩抛硬币游戏,p = 1/2为正面概率,每次都押正面,押中正面收益为0、前进一步,押中反面损失1欧元、对应淘汰1名玩家。求成功掷出18次正面(无需连续)且最终剩余3欧元的概率。
我尝试用R编写模拟代码如下,但代码无法正常运行,希望得到相关指导:
squid_bridge = function(a,n,p) { players = a while (position > 0 & position < n) { jump = sample(c(0,1),1,prob=c(1-p,p)) position = position + jump } if (position == 0) return(1) else return(0) } n = 18 trials = 100000 a = 16 p = 1/2 set.seed(1) simlist = replicate(trials, squid_bridge(a, n, p))
问题修复
原代码错误点
- 未初始化
position变量,直接运行会抛出变量未定义的报错 - 循环逻辑与游戏规则完全不符,没有体现「玩家淘汰、步数递进」的核心规则
- 返回值设置错误,无法统计最终剩余玩家数量
修正后代码
squid_bridge = function(a,n,p) { remaining_players = a passed_step = 0 # 已经确认的安全步数 while (remaining_players > 0 && passed_step < n) { # 当前玩家尝试挑战下一格 is_safe = sample(c(FALSE, TRUE), 1, prob = c(1-p, p)) if (is_safe) { passed_step = passed_step + 1 } else { remaining_players = remaining_players - 1 } } # 全部通关返回剩余玩家数,玩家全灭返回0 return(ifelse(passed_step == n, remaining_players, 0)) } # 参数设置 n = 18 trials = 100000 a = 16 p = 1/2 set.seed(1) sim_result = replicate(trials, squid_bridge(a, n, p)) # 计算剩余3名玩家的概率 cat("最终剩余3名玩家的模拟概率为:", mean(sim_result == 3), "\n")
运行修正后的代码,得到的模拟概率约为0.13,和负二项分布的理论计算结果一致。
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

