Tutorial: Monte Carlo Simulation of Vehicle Component Failure

Ziel

In dieser Übung erstellen Studierende eine Monte-Carlo-Simulation zur Modellierung der Ausfallzeit von Fahrzeugkomponenten. Dabei werden Wahrscheinlichkeitskonzepte wie bedingte Wahrscheinlichkeit, Additions- und Multiplikationsregeln, statistische Unabhängigkeit sowie Visualisierung durch ein Histogramm vertieft.

Szenario und Anwendungsfall

Szenario

Ein Auto besteht aus kritischen Komponenten: Motor, Sensoren und Steuereinheit. Fällt der Motor oder die Steuereinheit aus, stoppt das Fahrzeug. Der Besitzer möchte die erwartete Betriebsdauer bis zum Ausfall abschätzen, um Wartungsintervalle zu planen.

Anwendungsfall

Die Studierenden simulieren das Ausfallverhalten eines Fahrzeugs mit drei Komponenten:
- Motor: Ausfallzeit folgt einer Poissonverteilung mit Mittelwert 5000 Stunden.
- Sensor: Ausfallzeit folgt einer Normalverteilung mit \(\mu = 6000\) Stunden, \(\sigma = 100\) Stunden.
- Steuereinheit: Ausfallzeit folgt einer Gleichverteilung zwischen 4000 und 8000 Stunden.
- Bedingung: Fällt der Sensor vor dem Motor aus, verkürzt sich die Motor-Ausfallzeit um 1000 Stunden.
- Stopp: Das Fahrzeug stoppt, wenn Motor oder Steuereinheit ausfällt.

Aufgaben

Simulation
  1. Simuliere Ausfallzeiten für jede Komponente des Fahrzeugs.
  2. Bestimme die Zeit bis zum Ausfall des Fahrzeugs.
  3. Wiederhole dies für 10.000 Durchläufe.
  4. Stelle die Zeit bis zum Ausfall in einem Histogramm dar (Figure 1).
Analyse

Für die weitere Anaylse nehmen wir an, dass wir den Zufallsprozess der Ausfälle nicht kennen. Wir können jedoch die Ausfallereignisse aufzeichnen und analysieren. Wir interessieren uns nur für Ausfälle, die zu einem Stopp des Fahrzeugs vor 5000 Betriebs-Stunden führen.

  1. Berechne für jede Komponente die Wahrscheinlichkeit, dass sie ausgefallen ist, gegeben das Fahrzeug fällt vor 5000 Stunden aus.
  2. Gibt es eine Korrelation zwischen allen Zeiten bis zum Ausfall aller Komponenten und des Fahrzeugs? Berechne die Korrelationskoeffizienten und visualisiere die Korrelation in einer Scatterplot-Matrix.
  3. Wie hoch ist die Bedingte Wahrscheinlichkeit, dass die Steuereinheit den ausgefallen ist, wenn das Fahrzeug vor 4000 Stunden ausgefallen ist.
  4. Wähle eine Verteilung für die Ausfallzeit des Fahrzeugs fitte diese. Vergleiche die Verteilung mit dem Histogramm und gibt die Parameter der Verteilung an.
  5. Nutze die gefittete Verteilung, um die Wahrscheinlichkeit zu berechnen, dass das Fahrzeug vor 4000 Stunden ausfällt.

Simulation

Zuerst erstellen wir einen leeren DataFrame, um die Struktur der simulierten Ausfallzeiten zu zeigen:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)
n_trials = 10000

# Leerer DataFrame für Ausfallzeiten
columns = ['motor', 'sensor', 'control', 'vehicle_failure']
df = pd.DataFrame(index=range(n_trials), columns=columns)
print("Leerer DataFrame (Auszug):")
print(df.head())
Leerer DataFrame (Auszug):
  motor sensor control vehicle_failure
0   NaN    NaN     NaN             NaN
1   NaN    NaN     NaN             NaN
2   NaN    NaN     NaN             NaN
3   NaN    NaN     NaN             NaN
4   NaN    NaN     NaN             NaN

Nun simulieren wir die Ausfallzeiten und berechnen die Zeit bis zum Fahrzeugausfall:

for trial in range(n_trials):
    # Ausfallzeiten für das Fahrzeug
    motor_time = np.random.poisson(5000)
    sensor_time = np.random.normal(6000, 100)
    control_time = np.random.uniform(4000, 8000)

    # Bedingung: Sensor-Ausfall verkürzt Motorzeit
    if sensor_time < motor_time:
        motor_time -= 1000
        if motor_time < sensor_time:
            motor_time = sensor_time


    # Ausfallzeit des Fahrzeugs (Motor oder Steuereinheit)
    vehicle_failure = min(motor_time, control_time)

    # Daten in DataFrame speichern
    df.loc[trial, 'motor'] = motor_time
    df.loc[trial, 'sensor'] = sensor_time
    df.loc[trial, 'control'] = control_time
    df.loc[trial, 'vehicle_failure'] = vehicle_failure

print("DataFrame mit simulierten Ausfallzeiten (Auszug):")
print(df.head())

plt.hist(df['vehicle_failure'], bins=50, density=True, color='skyblue', alpha=0.7)
plt.xlabel('Ausfallzeit des Fahrzeugs (Stunden)')
plt.ylabel('Dichte')
plt.title('Verteilung der Ausfallzeiten (Fahrzeug)')
plt.show()
DataFrame mit simulierten Ausfallzeiten (Auszug):
  motor       sensor      control vehicle_failure
0  4974  6064.768854  4624.074562     4624.074562
1  4919  6152.302986  7464.704583            4919
2  5020  5953.052561  4727.299869     4727.299869
3  4928  6054.256004  6099.025727            4928
4  4986  5898.716888  5168.578594            4986
Figure 1: Histogramm der Ausfallzeiten des Fahrzeugs (10.000 Durchläufe).

Musterlösung