3名弓箭手正在射击目标,概率为p1,p2,p3。通过蒙特卡罗模拟,我应该找到以下事件概率的近似值:
这是我接近的第一个这类问题。我可以使用概率公式轻松解决它,但我不知道如何使用模拟来解决问题。
答案 0 :(得分:0)
我会做这样的事情:
double stat = 0;
此处,public class Archer {
private Random random = new Random();
public final double chance;
public Archer(double chance) {
this.chance = chance;
}
public boolean shoot() {
return random.nextDouble() < chance;
}
}
// ...
public boolean sample_problem2() {
for (Archer archer : archers) {
if (archer.shoot()) return true;
}
return false;
}
public double estimate_sample2(long count) {
long positive = 0;
for (long i = 0; i < count; i++) {
if (sample_problem2()) positive++;
}
return (double)positive / (double)count;
}
对象archer
方法将以其各自的概率返回true或false。 shoot
将模拟您需要的活动。后一种方法将采用sample_problem2
个样本,并估计模拟事件的概率。
如果您有一些示例代码,我们可以帮助您开发出更适合您现有代码的解决方案。