Spaces:
No application file
No application file
import numpy as np | |
import matplotlib.pyplot as plt | |
import math | |
import gradio as gr | |
# Function to calculate binomial coefficient | |
def binom(n, k): | |
return math.factorial(n) // (math.factorial(k) * math.factorial(n - k)) | |
# Function to calculate total reliability with redundancy | |
def total_reliability_with_redundancy(N, X, MTBF, t): | |
R = np.exp(-t / MTBF) # Reliability of a single component at time t | |
R_total = 0 | |
for k in range(X + 1): # Summing up to account for up to X failures | |
R_total += binom(N + X, k) * (R ** (N + X - k)) * ((1 - R) ** k) | |
return R_total * 100 # Convert to percentage | |
# Function to generate the plot | |
def plot_reliability(N, X, MTBF, time_hours): | |
t = np.linspace(0, 20000, 500) # Time range (0 to 20,000 hours) | |
R_total = [total_reliability_with_redundancy(N, X, MTBF, ti) for ti in t] | |
# Calculate reliability at the selected time in percentage | |
R_at_time = total_reliability_with_redundancy(N, X, MTBF, time_hours) | |
# Create the plot | |
plt.figure(figsize=(10, 6)) | |
plt.plot(t, R_total, label=f'Total reliability (N={N}, X={X}, MTBF={MTBF} hours)') | |
# Draw vertical line at the selected time point | |
plt.axvline(x=time_hours, color='red', linestyle='--', label=f'Time = {time_hours} hours') | |
# Draw horizontal line at the corresponding reliability | |
plt.axhline(y=R_at_time, color='blue', linestyle='--', label=f'Reliability = {R_at_time:.2f}%') | |
# Plot the intersection point (green) | |
plt.scatter(time_hours, R_at_time, color='green', s=100, zorder=5, label='Intersection Point') | |
# Set labels and title | |
plt.xlabel('Time (hours)') | |
plt.ylabel('Reliability (%)') | |
plt.title('Total System Reliability with Redundancy') | |
plt.ylim(0, 100) | |
plt.grid(True) | |
plt.legend() | |
# Save the plot to a file and return it | |
plt.savefig("reliability_plot.png") | |
plt.close() | |
return "reliability_plot.png" | |
# Define Gradio interface | |
def gradio_interface(N, X, MTBF, time_hours): | |
return plot_reliability(N, X, MTBF, time_hours) | |
# Create the Gradio interface | |
gradio_app = gr.Interface( | |
fn=gradio_interface, | |
inputs=[ | |
gr.Slider(1, 10, value=3, label="N (components)"), | |
gr.Slider(0, 5, value=1, label="X (redundancy)"), | |
gr.Slider(1000, 50000, step=1000, value=10000, label="MTBF (hours)"), | |
gr.Slider(0, 20000, step=100, value=5000, label="Hours") | |
], | |
outputs=gr.Image(label="Reliability Plot"), | |
title="System Reliability with Redundancy", | |
description="Adjust the sliders to change the parameters of the system and view the corresponding reliability curve." | |
) | |
# Launch the app | |
gradio_app.launch() | |