Монте-Карло Симуляторы Python
Я использую симуляции Монте-Карло для симуляции системы сохранения. У меня есть устройства в моей симуляции с определенной частотой отказов. Допустим, частота отказов составляет 1/100000, что означает, что 1 из 100000 устройств выходит из строя каждый год. Если устройство выходит из строя, я плачу за замену. Но я не понимаю, как случайно отловить сбой устройства в симуляции. Как я понимаю, мне нужно использовать распределение вероятностей для имитации этого поведения. Но я не понимаю, как это сделать.
Функции в случайном пакете, кажется, предоставляют случайное число в определенном диапазоне, которого у меня нет. Также я не знаю, что это за дистрибутив.
Я надеюсь, что вопрос имеет смысл для людей. Любая помощь будет оценена.
Обновите это:
я сделал это
#/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 ответ
Количество неисправных устройств в год (или в любую другую единицу времени) следует распределению Пуассона. Если у вас есть 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
будет случайным образом определять количество неисправных единиц. Запустите последнюю строку несколько раз, чтобы увидеть, что происходит.
AFAIK, чистый питон не имеет распределения Пуассона, даже если его можно вычислить с помощью некоторой математики, скажем, из гауссовских случайных чисел.