################################################################### # # # This program estimates the Barlow-Proschan importance measure # # for components in a system with given minimal path sets using # # Monte Carlo simulations. # # # ################################################################### from math import * from random import * import matplotlib.pyplot as plt import numpy as np # Number of simulations num_sims = 100000 # Weibull-parameters for the components alpha = [2.0, 2.5, 3.0, 1.0, 1.5] beta = [50.0, 60.0, 70.0, 40.0, 50.0] # Number of components and minimal paths num_comps = 5 num_paths = 4 # Minimal path sets paths = [{1,4}, {1,3,5}, {2,3,4}, {2,5}] # Calculate the system lifetime given the component lifetimes def sys_lifetime(tt): sys_life = 0.0 for j in range(num_paths): path_life = np.inf for i in paths[j]: if tt[i-1] < path_life: path_life = tt[i-1] if path_life > sys_life: sys_life = path_life return sys_life # The simulated lifetimes of the components t = np.zeros(num_comps) # The number of times the components are critical when failing c = np.zeros(num_comps) for k in range(num_sims): for i in range(num_comps): t[i] = weibullvariate(beta[i], alpha[i]) s = sys_lifetime(t) for i in range(num_comps): if t[i] == s: c[i] += 1 bp_imp = np.zeros(num_comps) for i in range(num_comps): bp_imp[i] = c[i] / num_sims comp = np.linspace(1, num_comps, num_comps) fig = plt.figure(figsize = (7, 4)) plt.bar(comp, bp_imp, color ='gray', width = 0.4) plt.xlabel("Components") plt.ylabel("Importance") plt.title("Barlow-Proschan importance") plt.show()