Spaces:
No application file
No application file
File size: 2,677 Bytes
8669933 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
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()
|