Random Forest Ondersteund door Thermodynamische Simulatie: Verklaarbare Foutdiagnose voor Verbrandingskamercomponenten van Scheepsdieselmotoren

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

Samenvatting

Traditionele methoden voor intelligente foutdiagnose van scheepsdieselmotoren lijden vaak aan een gebrekkig generalisatievermogen door een tekort aan trainingsvoorbeelden van fouten, en aan een lage verklaarbaarheid omdat ze a priori kennis over faalmechanismen onvoldoende integreren. Om deze problemen aan te pakken, stelt dit artikel een Thermodynamische Simulatie-Ondersteunde Random Forest (TSRF) methode voor.

Deze methode onthult de evolutiekarakteristieken van fouten door middel van thermodynamische simulatie en integreert deze als a priori kennis in het ontwerp van het intelligente foutdiagnosemodel. Eerst werden vijf thermodynamische foutmodellen ontwikkeld door de basisparameters van het systeem fijn te regelen om de significante kenmerken van verschillende storingen te simuleren. Vervolgens werden, op basis van numerieke simulatieresultaten, potentiële thermodynamische indicatoren geïdentificeerd die de degradatie van verbrandingskamercomponenten karakteriseren.

Feature-selectie werd uitgevoerd door het berekenen van SHapley Additive exPlanations (SHAP) waarden, waarbij alleen variabelen met een significante correlatie met de foutstatus werden behouden. Ten slotte werd de gezondheidsstatus van de verbrandingskamer geëvalueerd met behulp van de geselecteerde parameters. Experimentele resultaten tonen aan dat de voorgestelde TSRF-methode uitstekende classificatieprestaties levert, met een gemiddelde nauwkeurigheid van 99,07% op de foutdataset.

Trefwoorden:
Scheepsdieselmotor Foutdiagnose Verklaarbare AI SHAP-waarden

Onderzoeksmotivatie

Op het gebied van maritieme techniek en Prognostics & Health Management (PHM) wordt de industrie geconfronteerd met twee langdurige knelpunten:

  • Dataschaarste: Scheepsdieselmotoren (met name de hoofdmotoren van zeeschepen) zijn het hart van het schip. Een ernstige storing op zee kan leiden tot verlies van voortstuwing, stranding of zelfs maritieme rampen. Daarom zijn hun veiligheidsfactoren bij het ontwerp extreem hoog en is de kans op ernstige storingen inherent erg laag. Bovendien hanteert de scheepvaartindustrie strikte preventieve onderhoudssystemen (zoals geplande revisies op basis van bedrijfsuren). De overgrote meerderheid van slijtageonderdelen wordt gedwongen vervangen voordat ze daadwerkelijk falen en foutdata genereren. Dit leidt tot een overvloed aan gezondheidsdata en data over vroege slijtage, maar een extreem gebrek aan echte data over volledig falen of ernstige defecten.
  • Het "Black Box"-probleem: Aangezien deep learning-modellen doorgaans een gebrek aan transparantie hebben, is het voor ingenieurs moeilijk om ze te vertrouwen als ze de fysieke oorzaken van een fout niet kunnen verklaren. In de scheepvaartindustrie, die strikt gereguleerd wordt door classificatiebureaus, is deze ondoorzichtigheid kritiek. Als AI ten onrechte een zuigervreter (piston scuffing) of krukasbreuk diagnosticeert (of mist), en het systeem niet kan achterhalen of de fout voortkomt uit databias, een algoritmedefect of sensordrift, is deze onherleidbaarheid onacceptabel bij onderzoeken naar maritieme ongevallen.

Om deze uitdagingen aan te gaan, hebben we de TSRF-methode voorgesteld. Door fysica-gebaseerde mechanistische modellen te combineren met geavanceerde verklaringstechnieken en gebruik te maken van high-fidelity simulatiemodellen om het probleem van dataschaarste op te lossen, garanderen we dat diagnosebeslissingen in overeenstemming zijn met fundamentele thermodynamische principes.


Methodologie

De workflow van deze studie omvat de volgende vier hoofdfasen (zoals weergegeven in de afbeelding):

  1. Thermodynamische modellering: In plaats van uitsluitend te vertrouwen op fysieke testbanken, hebben we een high-fidelity eendimensionaal thermodynamisch model van een zescilinder scheepsdieselmotor gebouwd. Het model werd rigoureus gekalibreerd op basis van echte operationele data, waarbij de simulatiefout onder de 5% werd gehouden.
  2. Foutinjectie: Op basis van het gekalibreerde model simuleerden we vijf specifieke fouten in de verbrandingskamer (zoals cilinderkopscheuren, zuigerablatie, enz.) door fysieke parameters fijn te regelen, waardoor een dataset werd gegenereerd die verschillende gradaties van echte motorfouten dekt.
  3. Op SHAP gebaseerde feature-selectie: We gebruikten SHAP-waarden om kwantitatief sleutelkenmerken te identificeren en selecteerden 14 kritieke parameters die de diagnosebeslissing domineren.
  4. Classificatiediagnose: Met behulp van deze fysiek verrijkte dataset trainden we een Random Forest (RF) classificator en bereikten we een zeer nauwkeurige foutdiagnose.
Structure of TSRF method combining Thermodynamic Simulation and Random Forest for Explainable AI

Afb. 1: Architectuur van de TSRF-methode.


Details Thermodynamische Modellering

Om een hoge getrouwheid te garanderen, hebben we een eendimensionaal dieselmotorsimulatiemodel gebouwd. Dit mechanistische model vindt een balans tussen fysieke nauwkeurigheid en de rekenkundige efficiëntie die nodig is voor datasetgeneratie.

Modeltopologie

Het motorsysteem is gediscretiseerd als een netwerk van vloeistofleidingen en functionele componenten:

  • Kernkrachtbron: Lijnconfiguratie, zes cilinders, tweetakt.
  • Luchtsysteem: Inlaat-/uitlaatspruitstukken (PL1, PL2) zijn verbonden via een complex leidingnetwerk.
  • Drukvullingssysteem: Turbolader (TC1) gekoppeld aan intercooler (CO1).

Kalibratie en Validatie

Voordat de foutinjectie werd uitgevoerd, werd het basismodel rigoureus gekalibreerd op basis van gemeten data.

  • Databron: Echte operationele scheepsdata verkregen via de Data Acquisition Module (DCM).
  • Validatie: Afwijkingen van sleutelparameters (zoals vermogen, uitlaattemperatuur) werden strikt binnen een foutmarge van ±5% gehouden.
1-D thermodynamic simulation model

Afb. 2: Schema van het eendimensionale thermodynamische model van de dieselmotor.

Model Validation Results

Afb. 5: Data Acquisition Module (DCM).

Foutinjectiemechanisme

Aangezien eendimensionale modellen 3D-structurele defecten niet direct kunnen weergeven, hebben we een fenomenologische mappingmethode toegepast om fysieke degradatiemechanismen te vertalen naar equivalente verschuivingen in thermodynamische parameters.

Fouttype Fysisch mechanisme Modelleringsimplementatie
F1: Cilinderkopscheur Belemmerde warmtegeleiding. Verhogen van de oppervlaktetemperatuur van de cilinderkop ($T_H$) tot 346°C.
F2: Zuigerablatie Materiaalverlies en afdichtingsfalen. Verhogen van zuigertemperatuur ($T_P$) + lichte blow-by (0,01 kg/s).
F3: Voering (Liner) Slijtage Vergroting van de boringdiameter door slijtage. Vergroting van boring + ernstige blow-by (0,03 kg/s).
F4: Zuigerveer Slijtage Gaslekkage. Aanpassen van massastroom blow-by (0,02 kg/s).
F5: Zuigerveer Kleven Toegenomen wrijving en afdichtingsfalen. Verandering in boringdiameter + verhoging van voeringtemperatuur + blow-by.

Verkalaringsanalyse

Een kerninnovatie van deze studie ligt in het verschuiven van de focus van "Wat is de fout?" naar "Waarom is deze fout gediagnosticeerd?". We demonstreerden dit vermogen door de analyse van zuigerveerslijtage (F4):

  • Lokale Verklaring (Watervalplot): De watervalplot ontleedt de specifieke voorspellingslogica. Het model voorspelde bijvoorbeeld "zuigerveerslijtage" omdat de blow-by warmtestroom (P06) en blow-by massastroom (P07) specifieke waarden vertoonden, wat de voorspellingskans van deze fout verhoogde. Dit is consistent met natuurkundige wetten: zuigerveerslijtage vernietigt de afdichting, wat leidt tot gaslekkage (blow-by).
  • Globale Verklaring (Beeswarmplot): De globale analyse onthult de algemene wetten die door het model zijn geleerd. We ontdekten dat een lage uitlaatdruk vóór de turbine (P11) een sterke indicator is voor zuigerveerslijtage. Fysisch gezien is dit consistent: versleten ringen leiden tot gaslekkage uit de cilinder, waardoor de beschikbare energie om de turbine aan te drijven afneemt.
SHAP Analysis,including Waterfall plot, beeswarm plot, interaction plot and dependence plot

Afb. 11: Foutanalyse van zuigerveerslijtage (F4) op basis van SHAP-waarden: (a) Watervalplot; (b) Beeswarmplot; (c) Interactieplot; (d) Afhankelijkheidsplot.

Bekijk SHAP-visualisatiecode (Python)

Als u geïnteresseerd bent in de implementatiedetails van de bovenstaande grafieken, is hier voorbeeldcode voor het genereren van waterval-, beeswarm-, interactie- en afhankelijkheidsplots.👇

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()

Onderzoekshoogtepunten

Wij geloven dat dit werk de volgende belangrijke bijdragen aan het veld heeft geleverd:

  • Opzetten van geparametriseerde modellen voor vijf typische fouten van verbrandingskamercomponenten van scheepsdieselmotoren.
  • Valideren van de effectiviteit van de SHAP-methode door vergelijking met meerdere feature-selectiemethoden.
  • Bieden van een nieuw perspectief voor verklaarbare foutdiagnose door data-gedreven methoden te combineren met thermodynamische mechanistische modellen.

Citatie

Als u dit werk nuttig vindt voor uw onderzoek, overweeg dan om het volgende artikel te lezen 😊

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},
}

Standaardformaat

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.