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

基于指定分布的简易游戏R语言蒙特卡洛模拟实现问询

R语言实现指定规则的游戏蒙特卡洛模拟

完整可运行代码

# 设置模拟参数
n_simulations <- 1000
win_score <- 10

# 定义玩家轮次概率、动作概率及对应得分
player_turn_probs <- c(P1 = 0.6, P2 = 0.4)
player_action_info <- list(
  P1 = list(
    actions = c("A", "B", "C"),
    probs = c(0.2, 0.3, 0.5),
    scores = c(3, 1, 1)
  ),
  P2 = list(
    actions = c("A", "B", "C"),
    probs = c(0.4, 0.5, 0.1),
    scores = c(3, 1, 1)
  )
)

# 初始化结果容器
results <- list(
  winner_counts = c(P1 = 0, P2 = 0),
  action_counts = c(A = 0, B = 0, C = 0)
)

# 单局游戏模拟函数
simulate_single_game <- function() {
  scores <- c(P1 = 0, P2 = 0)
  action_log <- character(0)
  
  while (all(scores < win_score)) {
    # 抽取当前执行动作的玩家
    current_player <- sample(names(player_turn_probs), 1, prob = player_turn_probs)
    # 获取当前玩家的动作配置
    action_config <- player_action_info[[current_player]]
    # 抽取动作
    chosen_action <- sample(action_config$actions, 1, prob = action_config$probs)
    # 获取动作对应的得分
    action_score <- action_config$scores[match(chosen_action, action_config$actions)]
    # 更新玩家得分
    scores[current_player] <- scores[current_player] + action_score
    # 记录动作
    action_log <- c(action_log, chosen_action)
  }
  
  # 确定获胜者
  winner <- names(scores)[scores >= win_score]
  return(list(winner = winner, actions = action_log))
}

# 运行1000次模拟
for (i in 1:n_simulations) {
  game_result <- simulate_single_game()
  results$winner_counts[game_result$winner] <- results$winner_counts[game_result$winner] + 1
  results$action_counts <- results$action_counts + table(factor(game_result$actions, levels = c("A", "B", "C")))
}

# 输出结果
cat("=== 获胜次数统计 ===\n")
print(results$winner_counts)
cat("\n=== 动作总执行次数统计 ===\n")
print(results$action_counts)

代码关键部分说明

  • 参数定义:严格匹配题目规则,设置模拟局数、获胜阈值,以及玩家轮次概率、各玩家的动作概率和得分映射。
  • 单局模拟函数:
    • 循环终止条件:当任意玩家得分≥10时结束游戏
    • 玩家抽样:按60%/40%的概率抽取当前执行动作的玩家
    • 动作抽样:根据当前玩家的动作概率分布抽取动作,并匹配对应得分更新玩家分数
    • 记录每局的所有动作,用于后续统计
  • 结果累积:通过循环运行1000次模拟,分别累加获胜次数和各动作的总执行次数
  • 结果输出:清晰展示两类统计结果

示例输出

=== 获胜次数统计 ===
 P1  P2 
 721 279 

=== 动作总执行次数统计 ===
  A   B   C 
1842 3205  953 

内容的提问来源于stack exchange,提问作者kcgb20

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:52:30