模拟弓箭手击中目标蒙特卡罗方法

时间:2015-12-12 00:58:15

标签: java probability montecarlo

3名弓箭手正在射击目标,概率为p1,p2,p3。通过蒙特卡罗模拟,我应该找到以下事件概率的近似值:

  • 随机选择的弓箭手击中目标//已经解决
  • 如果所有三个人用一颗子弹击中目标就会被击中。 //不知道如何处理

这是我接近的第一个这类问题。我可以使用概率公式轻松解决它,但我不知道如何使用模拟来解决问题。

1 个答案:

答案 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个样本,并估计模拟事件的概率。

如果您有一些示例代码,我们可以帮助您开发出更适合您现有代码的解决方案。