我正在try 编写R函数来模拟圣彼得堡悖论.在这个悖论中,我们抛出一枚公平的硬币,直到第一次出现 tail .每一轮,我们得到2^N美元.

为此,我编写了一个R函数:

    simulate_games <- function(n = 1000, max_turns = 10) {
    results <- data.frame(game_number = integer(), number_of_turns = integer(), final_reward = 

    numeric())
  
    for (i in 1:n) {
    turns <- 0
    reward <- 0
    
    while (turns < max_turns && runif(1) > 0.5) {
      turns <- turns + 1
      reward <- 2^(turns )
    }
    
    results <- rbind(results, data.frame(game_number = i, number_of_turns = turns, final_reward = reward))
    }
  
  return(results)
}
results <- simulate_games()

我感兴趣的最终结果是:

c(mean(results$number_of_turns), mean(results$final_reward))

现在,我正在try 加快对大量"n"的模拟:

library(doParallel)
library(foreach)

simulate_games_parallel <- function(n = 1000000, max_turns = 10) {
    cl <- makeCluster(detectCores() - 1) 
    registerDoParallel(cl)
    
    results <- foreach(i = 1:n, .combine = rbind, .packages = "doParallel") %dopar% {
        turns <- 0
        reward <- 0
        
        while (turns < max_turns && runif(1) > 0.5) {
            turns <- turns + 1
            reward <- 2^(turns)
        }
        
        data.frame(game_number = i, number_of_turns = turns, final_reward = reward)
    }
    
    stopCluster(cl)
    return(results)
}

results <- simulate_games_parallel()

我做得对吗?有没有更有效的方法来做到这一点?

推荐答案

我认为这个过程,比方说,turns的数字跟在geometric distribution之后,你可以用rgeom来模拟

simulate_games <- function(n = 1000, max_turns = 10) {
    turns <- pmin(rgeom(n, 0.5), max_turns)
    rewards <- ifelse(turns == 0, 0, 2^turns)
    data.frame(
        game_number = seq.int(n),
        number_of_turns = turns,
        final_reward = rewards
    )
}

R相关问答推荐

如何在ggplot 2 geom_segment图表中将UTC转换为EET?

按块将载体转换为矩阵-reshape

将带有范围的字符串转换为R中的数字载体

将一个载体的值相加,直到达到另一个载体的值

使用lapply的重新定位功能

根据列表中项目的名称多次合并数据框和列表

我想在R中总结一个巨大的数据框架,使我只需要唯一的lat、lon、Date(Year)和Maxium Value""""""""

R函数,用于生成伪随机二进制序列,其中同一数字在一行中不出现超过两次

提取一个列表中单个列的重复观察结果R

在R函数中使用加号

如何将网站图像添加到带有极坐标的面包裹条形图?

汇总数据帧中的复制列,保持行的唯一性

我需要使用ggplot2制作堆叠条形图

当由base::限定时,`[.factor`引发NextMethod错误

如何使用ggplot2根据绘图中生成的斜率对小平面进行排序?

位置_道奇在geom_point图中不躲避

有没有办法更改ggplot2中第二个y轴的比例限制?

将每晚的平均值与每晚的值进行比较,统计是否有效?

Package emMeans:如果emmip模型中包含的变量较少,emMeans模型中的其他变量设置为什么?

如何在类应用函数中访问函数本身