如何解决在 R 中模拟骰子游戏;似乎不是随机的
我正在尝试使用以下标准模拟骰子游戏: (1) 您最多可以掷 6 次; (2) 在游戏过程中的任何时候,在观察到掷骰结果后,您可以停止游戏,并赢得掷骰子上显示的美元金额。例如,您的掷骰子是 5、1、3、4,而您 决定停止游戏,那么你赢了 4 美元;你的掷骰子是 5、1、3、4、3、2,没有决定停止游戏,那么你赢了 2 美元。
我现在的功能是
stop_on_6 <- function() {
nrolls <- 0
# set.seed(0)
n <- 1
# generate 1 random integer from uniform distribution on [1,6] with
# equal probability.
while (n <= 6){
roll <- sample(1:6,size = 1,replace = TRUE,prob = rep(1/6,6))
if (roll == 6) {print('A 6 was rolled')
return (roll)}
n <- n + 1
}
sprintf("You've rolled ",n," times.")
}
我的目标函数将计算您在 n
次游戏中的预期赢利,假设您只有在获得 6 点数时才停止游戏。
目前,当我调用该函数时,会打印“A 6 was roll”或“你已经掷了 7 次”。我不确定如何使函数滚动到 6 次,但如果 roll == 6
则停止。
解决方法
stop_on_6 <- function(episode) {
reward <- c()
for(i in 1:episode) {
n <- 1
while (n <= 6){
roll <- sample(1:6,size = 1,replace = TRUE,prob = rep(1/6,6))
reward[i] <- roll
n <- ifelse(roll == 6,7,n+1)
}
}
return(paste0("You played ",episode," episode.Your expected reward is ",mean(reward)))
}
stop_on_6(1000)
给予,
"You played 1000 episode.Your expected reward is 4.944"
,
答案的第一部分,你有两个答案,因为: 掷骰子 6 次时,1-6 经常发生。 2- 当 n == 7 时,while 循环将停止,因此您将始终有 7 次。
要解决第二种情况,您可以打印 n-1 或将 n 初始化为 0,而 n
stop_on_6 <- function() {
n <- 1
memory = 0
while (n <= 6 & memory != 6){
roll <- sample(1:6,6))
if (roll == 6){
print('A 6 was rolled')
}
memory = roll
n <- n + 1
}
sprintf("You played %d times and won %d",n-1,memory)
}
stop_on_6()
,
这个问题只是 nerd-sniped 我,所以这里有一个循环,可以为您提供每次滚动的最佳策略。如果您在第二轮或以后的轮次中得到 5 分,或者在第 5 轮中得到 4 分,您应该退出,因为留在那里可能会更糟。
dice <- 1:6
breakeven = 0 # no value of rolls after the sixth one
for(i in 6:2) {
next_roll_EV <- breakeven
values_over_future_EV = dice[dice > next_roll_EV] # stop if you get one of these
settle_chance = length(values_over_future_EV)/6
settle_EV = mean(values_over_future_EV)
keep_going_chance = 1 - settle_chance
breakeven = settle_chance*settle_EV + keep_going_chance*next_roll_EV
stop_rolls = dice[dice > breakeven]
print(paste0("roll ",i," has EV of ",breakeven,",so stop in the prior roll if you have any of ",paste(stop_rolls,collapse = ",")))
}
[1] "roll 6 has EV of 3.5,so stop in the prior roll if you have any of 4,5,6"
[1] "roll 5 has EV of 4.25,so stop in the prior roll if you have any of 5,6"
[1] "roll 4 has EV of 4.66666666666667,6"
[1] "roll 3 has EV of 4.94444444444444,6"
[1] "roll 2 has EV of 5.12962962962963,so stop in the prior roll if you have any of 6"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。