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

R语言概率谜题模拟:三类博弈玩家的最优选择

三类玩家博弈获胜概率R模拟方案

1 参数对应说明

首先明确三类玩家的核心参数(获胜目标统一为8欧元,破产线为0欧元):

  • 富裕玩家A:初始资金6欧元,单次掷骰获胜(赚1欧)概率为点数≥5,即p=2/6=1/3
  • 平庸玩家B:初始资金4欧元,单次掷骰获胜概率为点数≥4,即p=3/6=1/2
  • 幸运玩家C:初始资金2欧元,单次掷骰获胜概率为点数≥3,即p=4/6=2/3

2 代码逻辑说明

你现有的代码已经是标准的赌徒破产模型模拟逻辑:自定义的gamble函数接收初始资金a、目标金额n、单次获胜概率p三个参数,循环模拟掷骰过程直到资产到0或8,返回1代表破产,返回0代表获胜。多次重复模拟后取返回值的均值就是破产概率,获胜概率=1-破产概率。

为了避免重复代码,可以把模拟逻辑封装成批量计算的形式,调整后的代码如下:

# 单次博弈模拟:返回1=破产,0=获胜
gamble <- function(a, target, win_p) {
  stake <- a
  while (stake > 0 & stake < target) {
    stake <- stake + sample(c(-1,1), 1, prob = c(1-win_p, win_p))
  }
  return(ifelse(stake == 0, 1, 0))
}

# 批量计算三类玩家的破产/获胜概率
calc_prob <- function(a, win_p, trials = 100000, target = 8) {
  ruin_p <- mean(replicate(trials, gamble(a, target, win_p)))
  return(data.frame(
    初始资金 = a,
    单次胜率 = win_p,
    破产概率 = round(ruin_p, 4),
    获胜概率 = round(1 - ruin_p, 4)
  ))
}

# 分别计算三类玩家
player_A <- calc_prob(a = 6, win_p = 1/3)
player_B <- calc_prob(a = 4, win_p = 1/2)
player_C <- calc_prob(a = 2, win_p = 2/3)

# 输出结果
rbind(player_A, player_B, player_C, row.names = c("富裕玩家A", "平庸玩家B", "幸运玩家C"))

3 模拟结果与最优选择

10万次模拟的结果和理论计算值基本一致,大致如下:

  • 富裕玩家A:获胜概率约24.7%,破产概率约75.3%
  • 平庸玩家B:获胜概率约50%,破产概率约50%
  • 幸运玩家C:获胜概率约75.3%,破产概率约24.7%

直接对比可得,最优选择是成为幸运玩家C,获胜概率是三类中最高的。

内容的提问来源于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.10.03 00:27:04