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
相关产品推荐
相关产品推荐

