从特定的几何分布中采样(并在必要时重新采样)以确保不重复

Sampling (and resampling as necessary) from a specific geometric distribution to ensure no repetition

我是一名可靠性工程师(绝对不是经验丰富的 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.]

有 help/suggestion 吗?

如果碰撞的概率足够低,你可以只测试是否已经发生需求失败,在这种情况下再问一个:

# 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