首页 > 解决方案 > 在 Perudo 中估计概率

问题描述

我是编码和使用 R 的新手。我正在做一个项目来模拟游戏 Liar's Dice,也称为 Perudo,并且对创建模拟有一些疑问。

基本上,该游戏由两个或更多玩家在一个杯子中掷五个骰子,将其翻转,然后对他们认为桌上有多少特定方进行出价。您可以查看自己的骰子,但不能查看其他人的骰子。要出价,轮到您说“两个 5”,这意味着至少有两个骰子落在 5 上。每次出价都会增加边数或数量。所以如果你说“两个 5”,那么轮到我说“两个 6”或“三个 3”。

当您认为最后的出价不正确时,轮到您说“骗子”,然后每个人都亮出他们的骰子。如果你错了,你会失去一个骰子,但如果你是对的,最后出价者会失去一个骰子。这种情况一直持续到只剩下一个有骰子的玩家。

首先,我决定创建一个名为 cup() 的函数,它可以掷出一个由五个六面骰子组成的杯子。

cup <- function(sides = 6, dice = 5){
  sample(1:sides, size = dice, replace = TRUE)
}

接下来,在一些帮助下,我创建了一个名为 cups() 的新函数,它为三个玩家滚动三个杯子。

cups <- function(players = 3, sides = 6, dice = 5){
  out <- cup(sides, dice)
  for(i in 2:players){
    out <- rbind(out, cup(sides, dice))
  }
  rownames(out) <- 1:players
  rownames(out) <- c("P1", "P2", "P3")
  return(out)
}

我接下来要完成的是创建一个可能的骰子结果概率表。换句话说,游戏中有 15 个骰子(每个玩家 5 个)至少有两个一方的概率是多少?然后在这种情况下,有 3、4、5 等的概率一直到 15。

我的问题是我将如何在 R 中执行此操作?在获得 R 中的概率后,我应该往哪个方向发展?

标签: rprobabilitydice

解决方案


这是一个经验过程,用于确定在掷出 5 个骰子时所有相同、4 个相同、3 个相同、2 个相同、不同的百分比结果:

library(gtools) # package with permutations function
allcombos <- permutations(6, 5, repeats.allowed = TRUE) # all 6 choose 5 with replacment combos
alluniques <- apply(allcombos, 1, unique) # uniques for each combo
alllengths <- sapply(alluniques, length) # lengths for each combo imputes num repeats
alllengths2 <- as.factor(alllengths) # convert to factor to count unique
allsum <- summary(alllengths2) # sum by num uniques
allsum
1    2    3    4    5  # 1=all same, 2=4 same, 3=3 same, 4=2 same, 5=all different
6  450 3000 3600  720 
totsum <- sum(allsum)
allfrac <- allsum / totsum
allpercent <- allfrac * 100
allpercent
1           2           3           4           5 
0.07716049  5.78703704 38.58024691 46.29629630  9.25925926 # percentage breakout

毫无疑问,一个分析解决方案,但我不知道它是什么。您可以使用标准概率计算来估计多个参与者之间的特定结果。例如 P(至少 1 个 4-same | 3 个玩家)或运行一些模拟。


推荐阅读