我正在使用蒙特卡罗模拟来模拟保存系统。 我的模拟中的设备具有一定的失败率。假设失败率是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相同?
答案 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没有泊松分布,即使它可以用高斯随机数的某些数学计算。