Las Losowy Wspomagany Symulacją Termodynamiczną: Wyjaśnialna Diagnostyka Uszkodzeń Elementów Komory Spalania Okrętowych Silników Diesla

Congcong Luo a , Minghang Zhao a,* , Xuyun Fu a , Shisheng Zhong a , Song Fu b , Kai Zhang c , Xiaoxia Yu d
a Department of Mechanical Engineering, Harbin Institute of Technology, Weihai, Weihai 264209, China
b School of Mechatronics Engineering, Harbin Institute of Technology, Harbin 150001, China
c School of Mechanical Engineering, Southwest Jiaotong University, Chengdu 610031, China
d School of Mechanical Engineering, Chongqing University of Technology, Chongqing 400054, China

Streszczenie

Tradycyjne metody inteligentnej diagnostyki uszkodzeń okrętowych silników Diesla często cierpią na słabą zdolność generalizacji z powodu braku próbek treningowych uszkodzeń oraz niską wyjaśnialność, ponieważ nie integrują w wystarczającym stopniu wiedzy a priori o mechanizmach awarii. Aby rozwiązać te problemy, w niniejszym artykule zaproponowano metodę Lasu Losowego Wspomaganego Symulacją Termodynamiczną (TSRF) .

Metoda ta ujawnia charakterystyki ewolucji uszkodzeń poprzez symulację termodynamiczną i integruje je jako wiedzę a priori w projekcie inteligentnego modelu diagnostyki uszkodzeń. Najpierw opracowano pięć termodynamicznych modeli uszkodzeń, precyzyjnie dostrajając podstawowe parametry systemu w celu symulacji istotnych cech różnych awarii. Następnie, na podstawie wyników symulacji numerycznej, zidentyfikowano potencjalne wskaźniki termodynamiczne charakteryzujące degradację elementów komory spalania.

Selekcję cech przeprowadzono poprzez obliczenie wartości SHapley Additive exPlanations (SHAP), zachowując tylko zmienne wykazujące istotną korelację ze stanem uszkodzenia. Ostatecznie oceniono stan techniczny komory spalania przy użyciu wybranych parametrów. Wyniki eksperymentalne pokazują, że proponowana metoda TSRF wykazuje doskonałą skuteczność klasyfikacji, osiągając średnią dokładność 99,07% na zbiorze danych uszkodzeń.

Słowa kluczowe:
Okrętowy silnik Diesla Diagnostyka uszkodzeń Wyjaśnialna AI Wartości SHAP

Motywacja badawcza

W dziedzinie inżynierii morskiej oraz Prognostyki i Zarządzania Stanem Zdrowia (PHM), przemysł stoi przed dwoma długoterminowymi wąskimi gardłami:

  • Niedobór danych: Okrętowe silniki Diesla (szczególnie silniki główne statków oceanicznych) są sercem statku. Poważna awaria na morzu może prowadzić do utraty napędu, wejścia na mieliznę lub nawet katastrofy morskiej. Dlatego ich współczynniki bezpieczeństwa w projektowaniu są niezwykle wysokie, a prawdopodobieństwo poważnych awarii jest z natury bardzo niskie. Ponadto przemysł żeglugowy wdraża rygorystyczne systemy konserwacji zapobiegawczej (takie jak planowe remonty oparte na godzinach pracy). Zdecydowana większość części zużywających się jest przymusowo wymieniana, zanim faktycznie ulegną awarii i wygenerują dane o uszkodzeniu. Prowadzi to do obfitości danych o stanie prawidłowym i wczesnym zużyciu, ale do skrajnego braku rzeczywistych danych o całkowitej awarii lub poważnych usterkach.
  • Problem "Czarnej Skrzynki": Ponieważ modele głębokiego uczenia zazwyczaj nie są transparentne, inżynierom trudno jest im zaufać, jeśli nie potrafią wyjaśnić fizycznych przyczyn awarii. W przemyśle żeglugowym, ściśle regulowanym przez towarzystwa klasyfikacyjne, ten brak przejrzystości jest krytyczny. Jeśli AI błędnie zdiagnozuje (lub pominie) zatarcie tłoka lub pęknięcie wału korbowego, a system nie może prześledzić, czy błąd wynika z obciążenia danych, wady algorytmu czy dryfu czujnika, ta brak identyfikowalności jest nie do przyjęcia w dochodzeniach w sprawach wypadków morskich.

Aby sprostać tym wyzwaniom, zaproponowaliśmy metodę TSRF. Łącząc oparte na fizyce modele mechanistyczne z zaawansowanymi technikami wyjaśnialności i wykorzystując modele symulacyjne o wysokiej wierności do rozwiązania problemu niedoboru danych, zapewniamy, że decyzje diagnostyczne są zgodne z podstawowymi zasadami termodynamiki.


Metodologia

Przepływ pracy w tym badaniu obejmuje następujące cztery główne etapy (jak pokazano na rysunku):

  1. Modelowanie termodynamiczne: Zamiast polegać wyłącznie na fizycznych stanowiskach badawczych, zbudowaliśmy jednowymiarowy model termodynamiczny o wysokiej wierności sześciocylindrowego okrętowego silnika Diesla. Model został rygorystycznie skalibrowany na podstawie rzeczywistych danych operacyjnych, utrzymując błąd symulacji poniżej 5%.
  2. Wstrzykiwanie uszkodzeń: Na podstawie skalibrowanego modelu zasymulowaliśmy pięć specyficznych uszkodzeń komory spalania (takich jak pęknięcia głowicy cylindra, ablacja tłoka itp.), precyzyjnie dostrajając parametry fizyczne, generując w ten sposób zbiór danych obejmujący różne stopnie rzeczywistych uszkodzeń silnika.
  3. Selekcja cech oparta na SHAP: Wykorzystaliśmy wartości SHAP do ilościowej identyfikacji kluczowych cech, wybierając 14 krytycznych parametrów dominujących w decyzji diagnostycznej.
  4. Diagnostyka klasyfikacyjna: Korzystając z tego fizycznie wzbogaconego zbioru danych, wytrenowaliśmy klasyfikator Lasu Losowego (RF) i osiągnęliśmy wysoką precyzję diagnostyki uszkodzeń.
Structure of TSRF method combining Thermodynamic Simulation and Random Forest for Explainable AI

Rys. 1: Architektura metody TSRF.


Szczegóły modelowania termodynamicznego

Aby zapewnić wysoką wierność, zbudowaliśmy jednowymiarowy model symulacyjny silnika Diesla. Ten model mechanistyczny zachowuje równowagę między dokładnością fizyczną a wydajnością obliczeniową wymaganą do generowania zbioru danych.

Topologia modelu

System silnika jest zdyskretyzowany jako sieć rurociągów płynów i komponentów funkcjonalnych:

  • Główna jednostka napędowa: Konfiguracja rzędowa, sześć cylindrów, dwusuw.
  • Układ powietrzny: Kolektory dolotowe/wylotowe (PL1, PL2) są połączone złożoną siecią rur.
  • Układ doładowania: Turbosprężarka (TC1) sprzężona z chłodnicą międzystopniową (CO1).

Kalibracja i walidacja

Przed przystąpieniem do wstrzykiwania uszkodzeń, model bazowy został rygorystycznie skalibrowany na podstawie danych pomiarowych.

  • Źródło danych: Rzeczywiste dane operacyjne statku uzyskane za pośrednictwem Modułu Akwizycji Danych (DCM).
  • Walidacja: Odchylenia kluczowych parametrów (takich jak moc, temperatura spalin) były ściśle kontrolowane w zakresie błędu ±5% .
1-D thermodynamic simulation model

Rys. 2: Schemat jednowymiarowego modelu termodynamicznego silnika Diesla.

Model Validation Results

Rys. 5: Moduł Akwizycji Danych (DCM).

Mechanizm wstrzykiwania uszkodzeń

Ponieważ modele jednowymiarowe nie mogą bezpośrednio reprezentować trójwymiarowych wad strukturalnych, przyjęliśmy metodę mapowania fenomenologicznego w celu przetłumaczenia mechanizmów degradacji fizycznej na równoważne przesunięcia parametrów termodynamicznych.

Typ uszkodzenia Mechanizm fizyczny Implementacja modelowania
F1: Pęknięcie głowicy cylindra Utrudnione przewodzenie ciepła. Podniesienie temperatury powierzchni głowicy cylindra ($T_H$) do 346°C.
F2: Ablacja tłoka Utrata materiału i awaria uszczelnienia. Podniesienie temperatury tłoka ($T_P$) + niewielkie przedmuchy (blow-by) (0,01 kg/s).
F3: Zużycie tulei Powiększenie średnicy cylindra z powodu zużycia. Zwiększenie średnicy + silne przedmuchy (0,03 kg/s).
F4: Zużycie pierścieni Wyciek gazu. Regulacja masowego natężenia przepływu przedmuchów (0,02 kg/s).
F5: Zapieczenie pierścieni Zwiększone tarcie i awaria uszczelnienia. Zmiana średnicy cylindra + wzrost temperatury tulei + przedmuchy.

Analiza wyjaśnialności

Główna innowacja tego badania polega na przesunięciu uwagi z "Co to za usterka?" na "Dlaczego zdiagnozowano tę usterkę?". Zademonstrowaliśmy tę zdolność poprzez analizę zużycia pierścieni tłokowych (F4):

  • Wyjaśnienie lokalne (Wykres kaskadowy): Wykres kaskadowy rozkłada na czynniki pierwsze konkretną logikę predykcji. Na przykład model przewidział "zużycie pierścieni", ponieważ strumień ciepła przedmuchów (P06) i masowe natężenie przepływu przedmuchów (P07) wykazały określone wartości, zwiększając w ten sposób prawdopodobieństwo predykcji tej usterki. Jest to zgodne z prawami fizyki: zużycie pierścieni niszczy uszczelnienie, prowadząc do wycieku gazu (przedmuchów).
  • Wyjaśnienie globalne (Wykres roju): Analiza globalna ujawnia ogólne prawa, których nauczył się model. Odkryliśmy, że niska wartość ciśnienia spalin przed turbiną (P11) jest silnym wskaźnikiem zużycia pierścieni. Z fizycznego punktu widzenia jest to spójne: zużyte pierścienie powodują wyciek gazu z cylindra, zmniejszając w ten sposób energię dostępną do napędzania turbiny.
SHAP Analysis,including Waterfall plot, beeswarm plot, interaction plot and dependence plot

Rys. 11: Analiza usterki zużycia pierścieni tłokowych (F4) na podstawie wartości SHAP: (a) Wykres kaskadowy; (b) Wykres roju; (c) Wykres interakcji; (d) Wykres zależności.

Zobacz kod wizualizacji SHAP (Python)

Jeśli interesują Cię szczegóły implementacji powyższych wykresów, oto przykładowy kod do generowania wykresów kaskadowych, roju, interakcji i zależności.👇

import shap
import matplotlib.pyplot as plt
import numpy as np

# --- 0. Setup & Global Settings ---
plt.rcParams['font.family'] = 'Arial'
plt.rcParams['font.size'] = '24'
plt.rcParams['axes.unicode_minus'] = False

# Assumption: 'best_model' is your trained XGBoost/RF model
# Assumption: 'X_train' and 'X_test' are pandas DataFrames

# 1. Calculate SHAP values as Numpy Arrays (for Beeswarm, Dependence, Interaction)
explainer_tree = shap.TreeExplainer(best_model)
shap_values_numpy = explainer_tree.shap_values(X_train) 

# 2. Calculate SHAP values as Explanation Object (Specifically for Waterfall)
explainer_obj = shap.Explainer(best_model, X_test)
shap_values_obj = explainer_obj(X_test)


##################################################################
#                                                                #
#                      (a) Waterfall Plot                        #
#          Visualizes contribution for a single sample           #
#                                                                #
##################################################################

class_idx = 4  # Target class
sample_idx = 3 # Specific sample to explain

plt.figure()
shap.plots.waterfall(
    shap_values_obj[sample_idx, :, class_idx], 
    max_display=9, 
    show=False
)

# Customizing style
ax = plt.gca()
ax.set_xlabel(ax.get_xlabel(), fontsize=36)
ax.set_ylabel(ax.get_ylabel(), fontsize=36)
ax.spines['bottom'].set_linewidth(3)
plt.show()


##################################################################
#                                                                #
#                      (b) Beeswarm Plot                         #
#              Global summary of feature importance              #
#                                                                #
##################################################################

class_idx = 5
plt.figure(figsize=(10, 8))

shap.summary_plot(
    shap_values_numpy[..., class_idx], 
    X_train, 
    feature_names=X_train.columns, 
    plot_type="dot", 
    show=False, 
    cmap='Greys' # or 'plasma'
)

# Customize Color Bar
cbar = plt.gcf().axes[-1] 
cbar.set_ylabel('Parameter Value', fontsize=24)
cbar.tick_params(labelsize=20)
plt.show()


##################################################################
#                                                                #
#                     (c) Interaction Plot                       #
#          Visualizes interaction effects between features       #
#                                                                #
##################################################################

# Note: Calculation can be expensive
shap_interaction_values = explainer_tree.shap_interaction_values(X_test)
class_idx = 4

plt.figure()
shap.summary_plot(
    shap_interaction_values[..., class_idx], 
    X_test, 
    show=False, 
    max_display=6, 
    cmap='Greys' 
)

# Clean up subplots
axes = plt.gcf().axes
for ax in axes:
    ax.spines['bottom'].set_linewidth(2)
    ax.tick_params(axis="x", labelsize=18, width=2)
    ax.set_title(ax.get_title(), fontsize=14) 

plt.subplots_adjust(wspace=0.3, hspace=0.4)    
plt.show()


##################################################################
#                                                                #
#                     (d) Dependence Plot                        #
#           Feature relationship colored by interaction          #
#                                                                #
##################################################################

Feature_X = 'P06'  # Main feature
Feature_Y = 'P07'  # Interaction feature
class_idx = 4

shap.dependence_plot(
    Feature_X, 
    shap_values_numpy[..., class_idx], 
    X_train, 
    interaction_index=Feature_Y, 
    dot_size=100, 
    show=False
)

# Customize Axes
ax = plt.gca()
ax.tick_params(axis='both', which='major', labelsize=36, width=2)
ax.set_ylabel(f'SHAP value ({Feature_X})', fontsize=36)
ax.spines['bottom'].set_linewidth(3)
ax.spines['left'].set_linewidth(3)
plt.show()


##################################################################
#                                                                #
#            (e) Advanced Composite Plot (Beeswarm + Bar)        #
#      Combines Beeswarm (Bottom Axis) & Importance (Top Axis)   #
#                                                                #
##################################################################

class_idx = 5
fig, ax1 = plt.subplots(figsize=(10, 8))

# 1. Main Beeswarm Plot (on ax1)
shap.summary_plot(
    shap_values_numpy[..., class_idx], 
    X_train, 
    feature_names=X_train.columns, 
    plot_type="dot", 
    show=False, 
    color_bar=True, 
    cmap='Greys' # or 'plasma'
)

# Customize Color Bar
cbar = plt.gcf().axes[-1] 
cbar.set_ylabel('Parameter Value', fontsize=24)
cbar.tick_params(labelsize=20)

# Adjust layout to make room for the top axis
plt.gca().set_position([0.2, 0.2, 0.65, 0.65]) 

# 2. Feature Importance Bar Plot (on Top Axis ax2)
# Create a twin axis sharing the y-axis
ax2 = ax1.twiny() 

shap.summary_plot(
    shap_values_numpy[..., class_idx], 
    X_train, 
    plot_type="bar", 
    show=False
)

# Align position with the main plot
plt.gca().set_position([0.2, 0.2, 0.65, 0.65]) 

# Style the bars (Transparent & Light Color)
bars = ax2.patches
for bar in bars:
    bar.set_color('#CCE5FB') # Light blue background bars
    bar.set_alpha(0.4)       # Transparency

# Customize Axes Labels
ax1.set_xlabel(f'Shapley Value Contribution (F{class_idx})', fontsize=24, labelpad=5)
ax1.set_ylabel('Parameters', fontsize=24)
ax2.set_xlabel('Mean Shapley Value (Parameter Importance)', fontsize=24, labelpad=10)

# Move ax2 (Bar plot axis) to the top
ax2.xaxis.set_label_position('top') 
ax2.xaxis.tick_top()

# Ensure ax1 (dots) is drawn ON TOP OF ax2 (bars)
ax1.set_zorder(ax1.get_zorder() + 1) 
ax1.patch.set_visible(False) # Make ax1 background transparent

plt.show()

Najważniejsze punkty badań

Uważamy, że ta praca wniosła następujący kluczowy wkład w tę dziedzinę:

  • Ustanowienie sparametryzowanych modeli dla pięciu typowych uszkodzeń elementów komory spalania okrętowych silników Diesla.
  • Walidacja skuteczności metody SHAP poprzez porównanie z wieloma metodami selekcji cech.
  • Zapewnienie nowej perspektywy dla wyjaśnialnej diagnostyki uszkodzeń poprzez połączenie metod opartych na danych z termodynamicznymi modelami mechanicznymi.

Cytowanie

Jeśli uznasz tę pracę za przydatną w swoich badaniach, rozważ przeczytanie poniższego artykułu 😊

BibTeX

@article{luo2025thermodynamic,
  title     = {Thermodynamic simulation-assisted random forest: Towards explainable fault diagnosis of combustion chamber components of marine diesel engines},
  author    = {Luo, Congcong and Zhao, Minghang and Fu, Xuyun and Zhong, Shisheng and Fu, Song and Zhang, Kai and Yu, Xiaoxia},
  journal   = {Measurement},
  volume    = {251},
  pages     = {117252},
  year      = {2025},
  publisher = {Elsevier},
  doi       = {10.1016/j.measurement.2025.117252},
}

Format standardowy

C. Luo, M. Zhao, X. Fu, S. Zhong, S. Fu, K. Zhang, X. Yu. Thermodynamic simulation-assisted random forest: Towards explainable fault diagnosis of combustion chamber components of marine diesel engines[J]. Measurement, 2025, 251: 117252.