Випадковий ліс за підтримки термодинамічного моделювання: Пояснювана діагностика несправностей компонентів камери згоряння суднових дизелів

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

Анотація

Традиційні методи інтелектуальної діагностики несправностей суднових дизельних двигунів часто страждають від слабкої узагальнюючої здатності через брак навчальних вибірок з несправностями, а також від низької пояснюваності через недостатню інтеграцію апріорних знань про механізми відмов. Для вирішення цих проблем у даній статті пропонується метод Випадкового лісу за підтримки термодинамічного моделювання (TSRF) .

Цей метод виявляє характеристики розвитку несправностей за допомогою термодинамічного моделювання та інтегрує їх як апріорні знання в структуру моделі інтелектуальної діагностики. Спочатку було розроблено п'ять термодинамічних моделей несправностей шляхом точного налаштування базових параметрів системи для імітації значущих ознак різних відмов. Потім, на основі результатів чисельного моделювання, було визначено потенційні термодинамічні індикатори, що характеризують деградацію компонентів камери згоряння.

Відбір ознак проводився шляхом розрахунку значень SHapley Additive exPlanations (SHAP), при цьому зберігалися лише ті змінні, які мають значущу кореляцію зі станом несправності. Нарешті, оцінка стану здоров'я камери згоряння проводилася з використанням відібраних параметрів. Експериментальні результати показують, що запропонований метод TSRF демонструє відмінну класифікаційну ефективність, досягаючи середньої точності 99,07% на наборі даних з несправностями.

Ключові слова:
Судновий дизельний двигун Діагностика несправностей Пояснюваний ШІ Значення SHAP

Мотивація дослідження

У галузі морської інженерії та управління прогнозуванням і станом (PHM) галузь стикається з двома давніми проблемами:

  • Дефіцит даних: Суднові дизельні двигуни (особливо головні двигуни океанських суден) є серцем судна. Серйозна поломка в морі може призвести до втрати ходу, посадки на мілину або навіть морської катастрофи. Тому при проектуванні в них закладаються надзвичайно високі коефіцієнти запасу міцності, і ймовірність серйозних відмов сама по собі дуже низька. Крім того, у судноплавній галузі діють суворі системи профілактичного обслуговування (наприклад, плановий ремонт за годинами напрацювання). Переважна більшість деталей, що зношуються, примусово замінюються до того, як вони дійсно вийдуть з ладу і згенерують дані про відмову. Це призводить до наявності великого обсягу даних про нормальну роботу та ранній знос, але до крайньої нестачі реальних даних про повні відмови або серйозні несправності.
  • Проблема «Чорної скриньки»: Оскільки моделі глибокого навчання зазвичай непрозорі, інженерам важко довіряти їм, якщо неможливо пояснити фізичні причини несправності. У судноплавній галузі, яка суворо регулюється класифікаційними товариствами, ця непрозорість є критичною. Якщо ШІ помилково діагностує (або пропустить) задири поршня або поломку колінчастого вала, і система не зможе відстежити, чи є помилка наслідком зміщення даних, дефекту алгоритму або дрейфу датчика, така неможливість відстеження є неприйнятною при розслідуванні морських аварій.

Для вирішення цих завдань ми запропонували метод TSRF. Поєднуючи фізично обґрунтовані механістичні моделі з передовими методами пояснюваності та використовуючи високоточні імітаційні моделі для вирішення проблеми нестачі даних, ми гарантуємо, що діагностичні рішення відповідають фундаментальним принципам термодинаміки.


Методологія

Робочий процес цього дослідження включає наступні чотири основні етапи (див. рисунок):

  1. Термодинамічне моделювання: Замість того, щоб покладатися виключно на фізичні випробувальні стенди, ми побудували високоточну одновимірну термодинамічну модель шестициліндрового суднового дизельного двигуна. Модель була суворо відкалібрована на основі реальних експлуатаційних даних, з похибкою моделювання менше 5%.
  2. Введення несправностей: На основі відкаліброваної моделі ми змоделювали п'ять специфічних несправностей камери згоряння (таких як тріщини в головці циліндра, абляція поршня тощо) шляхом точного налаштування фізичних параметрів, створивши набір даних, що охоплює різні ступені реальних несправностей двигуна.
  3. Відбір ознак на основі SHAP: Ми використовували значення SHAP для кількісної ідентифікації ключових ознак, відібравши 14 критичних параметрів, що визначають діагностичне рішення.
  4. Класифікаційна діагностика: Використовуючи цей фізично збагачений набір даних, ми навчили класифікатор випадкового лісу (RF) і досягли високоточної діагностики несправностей.
Structure of TSRF method combining Thermodynamic Simulation and Random Forest for Explainable AI

Рис. 1: Архітектура методу TSRF.


Деталі термодинамічного моделювання

Для забезпечення високої точності ми побудували одновимірну імітаційну модель дизельного двигуна. Ця механістична модель забезпечує баланс між фізичною точністю та обчислювальною ефективністю, необхідною для генерації наборів даних.

Топологія моделі

Система двигуна дискретизована як мережа рідинних трубопроводів і функціональних компонентів:

  • Основний силовий агрегат: Шестициліндрова, двотактна рядна конфігурація.
  • Повітряна система: Впускний/випускний колектори (PL1, PL2) з'єднані складною мережею трубопроводів.
  • Система наддуву: Турбокомпресор (TC1), з'єднаний з інтеркулером (CO1).

Калібрування та валідація

Перед введенням несправностей базова модель була суворо відкалібрована на основі виміряних даних.

  • Джерело даних: Реальні експлуатаційні дані судна, отримані через модуль збору даних (DCM).
  • Валідація: Відхилення ключових параметрів (таких як потужність, температура вихлопних газів) суворо контролювалися в межах похибки ±5% .
1-D thermodynamic simulation model

Рис. 2: Схема одновимірної термодинамічної моделі дизельного двигуна.

Model Validation Results

Рис. 5: Модуль збору даних (DCM).

Механізм введення несправностей

Оскільки одновимірні моделі не можуть безпосередньо відображати тривимірні структурні дефекти, ми застосували метод феноменологічного відображення для перекладу механізмів фізичної деградації в еквівалентні зсуви термодинамічних параметрів.

Тип несправності Фізичний механізм Реалізація моделювання
F1: Тріщина ГБЦ Порушення теплопровідності. Підвищення температури поверхні головки блоку циліндрів ($T_H$) до 346°C.
F2: Абляція поршня Втрата матеріалу та порушення герметичності. Підвищення температури поршня ($T_P$) + незначний прорив газів (blow-by) (0.01 кг/с).
F3: Знос втулки (Liner) Збільшення діаметра циліндра через знос. Збільшення діаметра + сильний прорив газів (0.03 кг/с).
F4: Знос кілець Витік газу. Регулювання масової витрати прориву газів (0.02 кг/с).
F5: Залягання кілець Збільшення тертя та порушення герметичності. Зміна діаметра циліндра + підвищення температури втулки + прорив газів.

Аналіз пояснюваності

Ключова інновація цього дослідження полягає у зміщенні фокусу з питання «Яка це несправність?» на «Чому діагностовано цю несправність?». Ми продемонстрували цю можливість на прикладі аналізу зносу поршневих кілець (F4):

  • Локальне пояснення (Каскадна діаграма): Каскадна діаграма розкриває конкретну логіку прогнозування. Наприклад, модель передбачила «знос поршневих кілець», оскільки тепловий потік прориву газів (P06) і масова витрата прориву газів (P07) мали певні значення, що підвищило ймовірність прогнозування цієї несправності. Це узгоджується з фізичними законами: знос кілець порушує герметичність, призводячи до витоку газу (прориву газів).
  • Глобальне пояснення (Діаграма рою бджіл): Глобальний аналіз виявляє загальні закономірності, засвоєні моделлю. Ми виявили, що низьке значення тиску вихлопних газів перед турбіною (P11) є сильним індикатором зносу поршневих кілець. З фізичної точки зору це логічно: зношені кільця призводять до витоку газу з циліндра, тим самим зменшуючи енергію, доступну для приводу турбіни.
SHAP Analysis,including Waterfall plot, beeswarm plot, interaction plot and dependence plot

Рис. 11: Аналіз несправності зносу поршневих кілець (F4) на основі значень SHAP: (a) Каскадна діаграма; (b) Діаграма рою бджіл; (c) Діаграма взаємодії; (d) Діаграма залежності.

Переглянути код візуалізації SHAP (Python)

Якщо вас цікавлять деталі реалізації наведених вище графіків, ось приклад коду для створення каскадної діаграми, діаграми рою бджіл, діаграми взаємодії та діаграми залежності.👇

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

Основні моменти дослідження

Ми вважаємо, що ця робота зробила наступний ключовий внесок у цю галузь:

  • Створено параметризовані моделі для п'яти типових несправностей компонентів камери згоряння суднових дизельних двигунів.
  • Підтверджено ефективність методу SHAP шляхом порівняння з кількома методами відбору ознак.
  • Запропоновано новий погляд на пояснювану діагностику несправностей шляхом об'єднання методів, заснованих на даних, з термодинамічними механістичними моделями.

Цитування

Якщо ви вважаєте цю роботу корисною для вашого дослідження, будь ласка, ознайомтесь з наступною статтею 😊

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

Стандартний формат

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.

Дивитися на ScienceDirect