You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

鱿鱼游戏第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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:54:03