问题描述
我正在尝试模拟一个自发的概率问题:“假设有6户家庭住在一个公寓大楼的一个单元中。平均而言,一个家庭每周要洗两次衣服,每次洗2小时。找出任何两个家庭同时洗衣服。”
但是,我能够模拟一个家庭一周只洗一次衣服的情况(下面的R代码),并且希望能将代码扩展到每周两次洗衣服的场景,这将对您有所帮助。
我也试图找到一种理论上的解决方案,但与下面的仿真结果不符。任何帮助表示赞赏。谢谢!
dist.min <- function(x) {
ifelse(min(dist(x)) <= 2 * 3600 - 1,T,F)
}
set.seed(12345)
N <- 100000
mat <- matrix(sample(1:(24 * 60 * 60 * 7),N * 6,replace = T),ncol = 6)
is.same <- apply(mat,1,dist.min)
mean(is.same) # 0.30602
解决方法
嗨,如果我正确地理解了问题,我会采取这种方法。
这是二项式分布,其中n = 6个家庭数,一个家庭正在洗衣服的成功率p是4/168,即4小时除以工作周数。
那么至少两个家庭同时洗衣服的理论概率是
sum(dbinom(2:6,6,4/168))
大约占0.7%
根据模拟,我们创建一个矩阵,每个系列有6列,每行有1万行 模拟次数。然后让我们用1(洗衣服)和0(不)填充矩阵 概率对应于在任何时间点洗衣服的概率。
运行此代码,我得到2个或更多家庭同时洗衣服的概率为0.7%
mat<-replicate(6,sample(0:1,size = 10000,replace=T,prob = c(164/168,4/168)))
table(rowSums(mat))