python - 从特定的几何分布采样(并根据需要重新采样)以确保不重复
问题描述
我是一名可靠性工程师(绝对不是经验丰富的 Python 程序员),希望在 Python 中运行离散使用系统模拟,但在模拟故障模式首次出现的测试失败时遇到了一些麻烦。离散使用系统通常是根据需求来衡量其使用情况的系统,例如导弹系统。系统大部分时间处于待机状态,当需要时,我们“要求”系统。然后系统有两种可能的需求结果——成功(我们的导弹开火)或失败(我们的导弹没有开火)。
假设我们的系统具有由 f_rate 表示的故障模式发生率。
我现在想通过从与 FOT 表示的特定故障模式率相关的几何分布中随机抽取来模拟每种故障模式的“第一次测试发生”。
这是一个样本的样子:
import numpy as np
from scipy.stats import geom
# Example failure mode rates, f_rate
f_rate = [0.01243683, 0.12391001, 0.01397139, 0.00799507, 0.01395825,
0.00712858, 0.06471261, 0.07430849, 0.10902522, 0.17184146]
# Simulate FOT for each mode from a geometric distribution
FOT = np.empty(len(f_rate))
for i in range(len(f_rate)):
FOT[i] = geom.rvs(f_rate[i])
# Print first occurrence on test of failure mode
print(FOT)
结果示例:
[146. 6. 99. 132. 124. 127. 14. 6. 2. 10.]
离散使用系统通常是串行的:也就是说,任何子系统在其操作顺序中的故障都会导致系统故障。因此,在单一需求上物理上只能出现一种故障模式。从我的示例中,我们可以看到在需求 6 期间发生了两次故障,但实际上这是不可能的(第一个故障模式会导致系统故障,因此第二个需求 6 故障模式永远不会发生)。
如何在 FOT[1] 处保持前六次需求失败,同时从 f_rate[7] 中的失败率重新采样 FOT[7]?
我需要确保 FOT 中没有重复以确保模型代表现实,我只是不确定如何(1)识别 FOT 索引重复,然后(2)从正确的 f_rate 索引重新采样,但仅限于重复值. 我假设我需要先识别所有重复项的索引,然后从相应的相应索引中重新采样,然后再次检查重复项?
结果应代表:
[146. 6. 99. 132. 124. 127. 14. 31. 2. 10.]
任何帮助/建议?
解决方案
如果冲突的可能性足够低,您可以测试是否已经发生需求失败,在这种情况下询问新的:
# Simulate FOT for each mode from a geometric distribution
FOT = np.empty(len(f_rate))
for i in range(len(f_rate)):
while True:
val = geom.rvs(f_rate[i])
if val not in FOT[:i]:
FOT[i] = val
break
推荐阅读
- java - 设置 htmlunit webclient 浏览器版本不起作用
- php - Laravel Dusk 选择 CSS 变量
- django - 自定义 Django 的隐式 ManyToManyField 的“通过”表?
- python - 如何从函数中导出结果?(更新了更多代码)
- kotlin - 在 iOS/XCode 的内置 .frameworks 中包含 Kotlin/Native KDocs 文档
- asp.net-core - 在 cloudformation 模板中定义 lambda 函数
- r - 我如何计算每年平均玩的游戏数?
- java - Java method with Listiterator to return all elements in a list
- r - Match names with R for each element of dataframe
- java - Basics of classes and objects: Java