Gibi @Henry , gerçekten çözüm bir Monte Carlo olduğunu hissetmiyorum. Elbette, dağıtımdan örnek alırsınız, ancak veri oluşturma sürecini taklit etmekle ilgisi yoktur. Birini teorik çözümün doğru olduğuna ikna etmek için Monte Carlo kullanmak istiyorsanız, veri oluşturma sürecini taklit eden bir çözüm kullanmanız gerekir. Aşağıdaki gibi bir şey olduğunu hayal ediyorum:
boxes <- list(
c(0, 0),
c(0, 1),
c(1, 1)
)
count_successes = 0
count_valid_samples = 0
for (i in 1:5000) {
sampled_box <- unlist(sample(boxes, 1)) # sample box
sampled_balls <- sample(sampled_box) # shuffle balls in the box
if (sampled_balls[1] == 1) { # if first ball is golden
if (sampled_balls[2] == 1) { # if second ball is golden
count_successes = count_successes + 1
}
count_valid_samples = count_valid_samples + 1
}
}
count_successes / count_valid_samples
veya "vectorized" kodunu kullanarak:
mean(replicate(5000, { # repeat 5000 times, next calculate empirical probability
x <- boxes[[sample(3, 1)]] # pick a box
if (x[sample(2, 1)] == 1) # pick a ball, check if it is golden
return(sum(x) == 2) # check if you have two golden balls in the box
else
return(NA) # ignore if sampled ball is silver
}), na.rm = TRUE) # not count if silver
İlk topun zaten çizilmiş ve altın olduğu gerçeğini koşullandırdığınıza dikkat edin, bu nedenle yukarıdaki kod sadece iki kutu kullanabilir boxes <- list(c(0, 1), c(1, 1))
ve onlardan örnek alabilir x <- boxes[[sample(2, 1)]]
, bu nedenle kod 1/3 yapmaz çünkü daha hızlı olurdu indirim yaptığımız boş koşular. Ancak sorun basit olduğundan ve kod hızlı çalıştığından, sonucun doğru olduğundan emin olmak için tüm veri oluşturma sürecini açıkça "taklit edebiliriz". Bunun yanında, her iki durumda da aynı sonuçları vereceği için bu adıma gerek yoktur.
x <- boxes[[sample(3, 1)]]
3 kutudan bir kutu aldığınız anlamına mı geliyor? Eğer öyleyse, zaten bir altın top aldığını bildiğimiz için neden gerekli?