Monte Carlo 标准差方程

Monte Carlo Standard Deviation Equation

我正在对一些 Risks 执行 Monte Carlo 操作,系统工作正常,但标准差完全不对。我模拟这个值的时候,系统是100%准确的。

我所拥有的风险的输入变量是最佳情况成本值、最坏情况成本值、最可能成本值、风险发生概率和估计值(均值*概率)。

我当前的实现是这样的(在 Java/Apex 中):

    public static Double calculateStandardDeviation(Decimal max, Decimal min, Decimal mostLikely, Decimal eV, Decimal prob){ 
        Double sum = 0,
        probability = prob;
        //uses standard SD calculation 
        sum += (min - eV) * (min - eV);
        sum += (max - eV) * (max - eV);
        sum += (mostLikely - eV) * (mostLikely - eV);
        //if the probability is not 100%, apply it to the calculation
        if(prob != 0){
            sum *= prob;
        }
        return Math.sqrt(sum);
    }

进一步的例子:

如果我有以下值的风险:(最大值 = 300,最小值 = 100,最可能 = 200,eV = 150,概率 = 75%)。如果我 运行 这个风险通过我的系统,标准差是 26.2。我知道正确的值是 94(尽管这需要 /2 才能正常运行)。我如何获得这个值?

如能提供更准确方程式的任何帮助,我们将不胜感激! :)

给定 minmaxmode 的三角分布,均值由下式给出:

mean = (min + max + mode) / 3

方差由 [source]:

给出
var = (min^2 + max^2 + mode^2 - min*max - min*mode - max*mode) / 18

因此标准偏差由 [source]:

给出
stdev = sqrt(var)
      = sqrt( (min^2 + max^2 + mode^2 - min*max - min*mode - max*mode) / 18 )