从特定的几何分布中取样(必要时重新取样),以确保不重复。

问题描述 投票:0回答:1

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

有什么帮助建议吗?

python distribution sampling
1个回答
0
投票

如果碰撞的概率足够低,你可以直接测试是否已经发生了需求故障,在这种情况下,问一个新的。

# 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
© www.soinside.com 2019 - 2024. All rights reserved.