蒙特卡罗模拟Python

时间:2014-07-02 19:23:41

标签: python montecarlo

我正在使用蒙特卡罗模拟来模拟保存系统。 我的模拟中的设备具有一定的失败率。假设失败率是1/100000,这意味着每年有100个设备中有1个失败。如果设备发生故障,我需要支付更换费用。但我不知道如何在模拟中随机捕获设备故障。据我所知,我需要使用概率分布来模拟这种行为。但我不明白该怎么做。

随机包中的函数似乎提供了我没有的特定范围内的随机数。我也不知道这是什么类型的分布。

我希望这个问题对人们有意义。任何帮助将不胜感激。

更新:

我做了这个

    #/usr/bin/python
    import random 

    def main():
        count =0
        #fail rate is 1% of 100000, I need to do this probabilistically
        for _ in range(1,100000):
            x=random.random()
            if x <= 1.0/100000:
                count += 1

                print "x = "+str(x)+" fail device"
        print "device failed "+str(count)+"  times"

    if __name__ == '__main__':
        main()

我输出

        x = 0.000743343826396 fail device
        device failed 1  times
        [Finished in 0.0s]

感谢timgeb的帮助!但是,我想知道这种行为是否与考虑失败率为1/100000相同?

1 个答案:

答案 0 :(得分:2)

每个故障设备的数量(或任何时间单位)遵循泊松分布。如果n年的m单位为p,且每年的失败率为numpy.random.poisson,那么您可以使用import numpy as np n = 100000 m = 5 p = 1.0 / 100000 failed = np.random.poisson(n * m * p) 获取失败单位数的随机数:

np.random.poisson

函数{{1}}将随机确定失败单位的数量。多次运行最后一行,看看会发生什么。

AFAIK,纯python没有泊松分布,即使它可以用高斯随机数的某些数学计算。