蒙特卡罗模拟 Python
我正在使用蒙特卡洛模拟来模拟一个保养系统。在我的模拟中,有一些设备有一定的故障率。比如说,故障率是1/100000,这意味着每年大约有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 个回答
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
函数会随机决定故障设备的数量。你可以多次运行最后一行,看看会发生什么。
据我所知,纯 Python 并没有内置泊松分布的功能,虽然可以通过一些数学计算,比如从高斯随机数中推导出来。