【发布时间】:2021-10-02 19:29:41
【问题描述】:
100个人在看戏。演出结束时,所有人都到衣帽间去拿他们的外套。衣帽间工作的人完全随机地把人们的外套还给他们。他们的参与者选对了外套就走。选错了的人把外套还给他,男的又随机还给了外套。当剧院的所有顾客都拿回了他们正确的外套时,这个过程就结束了。
我想在 R 中模拟这个鞅过程,以便找到这个过程结束的预期时间。 但我不知道如何。有什么帮助吗? 比如:
# 100 customers
x = seq(1,100,by=1);x
# random sample from x
y = sample(x,100,replace=FALSE)
x==y
# for the next iteration exclude those how are TRUE and run it again until everyone is TRUE
预期时间是需要多少次迭代。
或者类似的东西:
n = 100
X = seq(1,100,by=1)
martingale = rep(NA,n)
iterations = 0
accept = 0
while (X != n) {
iterations = iterations + 1
y = sample(1:100,100,replace=FALSE)
if (X = y){
accept = accept + 1
X = X+1
martingale [X] = y
}
}
accept
iterations
【问题讨论】:
-
对这个问题最清晰但不一定最有效的解决方案是运行一个
while循环来模拟这个过程;每次通过循环,对当前客户和当前外套进行采样,并使用if语句相应地更新客户和外套列表(如果不匹配则保持不变,否则从客户列表/向量中删除客户和外套列表/向量中的外套) -
好的,您刚刚添加的解决方案看起来很合理。它有效吗?如果不是,它有什么作用?
-
@BenBolker 不,它当然不起作用。我把它当作伪代码。但你的描述看起来更好。但我仍然不知道该怎么做。
-
@BenBolker 您是说会有两个向量:a)客户和 b)外套。每次我必须从两个向量中排除匹配项。当两个向量都将结束时,该过程将结束是空的。对吧?我在想有一个向量并删除每个迭代匹配。但我不知道我是否正确。
-
是的,我认为你可以用一个向量来做到这一点。您将从留下的向量中独立地抽取两个样本
i和j;如果i == j然后remaining <- remaining[-i]。
标签: r random simulation