جنگل تصادفی به کمک شبیه‌سازی ترمودینامیکی: تشخیص خطای قابل تفسیر برای اجزای محفظه احتراق موتورهای دیزل دریایی

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 درجه سانتی‌گراد.
F2: سوختگی پیستون (Ablation) از دست رفتن مواد و نارسایی آب‌بندی. افزایش دمای پیستون ($T_P$) + نشت گاز (Blow-by) خفیف (0.01 کیلوگرم بر ثانیه).
F3: سایش بوش سیلندر افزایش قطر داخلی سیلندر ناشی از سایش. افزایش قطر داخلی + نشت گاز شدید (0.03 کیلوگرم بر ثانیه).
F4: سایش رینگ‌ها نشت گاز. تظیم نرخ جریان جرمی نشت گاز (0.02 کیلوگرم بر ثانیه).
F5: چسبندگی رینگ‌ها افزایش اصطکاک و نارسایی آب‌بندی. تغییر قطر داخلی + افزایش دمای بوش + نشت گاز.

تحلیل تفسیرپذیری

یک نوآوری اصلی در این پژوهش، تغییر تمرکز از «خطا چیست؟» به «چرا این خطا تشخیص داده شد؟» است. ما این توانایی را از طریق تحلیل سایش رینگ پیستون (F4) نشان دادیم:

  • تفسیر محلی (نمودار آبشاری): نمودار آبشاری منطق پیش‌بینی خاص را تجزیه می‌کند. به عنوان مثال، مدل «سایش رینگ» را پیش‌بینی کرد زیرا شار حرارتی نشت گاز (P06) و نرخ جریان جرمی نشت گاز (P07) مقادیر خاصی را نشان دادند که احتمال پیش‌بینی این خطا را افزایش داد. این با قوانین فیزیکی سازگار است: سایش رینگ آب‌بندی را از بین می‌برد و منجر به نشت گاز (Blow-by) می‌شود.
  • تفسیر جهانی (نمودار زنبوری): تحلیل جهانی قوانین کلی آموخته شده توسط مدل را آشکار می‌کند. ما دریافتیم که مقدار پایین فشار اگزوز قبل از توربین (P11) شاخصی قوی برای سایش رینگ است. از نظر فیزیکی، این منطقی است: رینگ‌های فرسوده باعث نشت گاز از سیلندر می‌شوند و در نتیجه انرژی موجود برای چرخاندن توربین را کاهش می‌دهند.
SHAP Analysis,including Waterfall plot, beeswarm plot, interaction plot and dependence plot

شکل 11: تحلیل خطای سایش رینگ پیستون (F4) بر اساس مقادیر SHAP: (الف) نمودار آبشاری؛ (ب) نمودار زنبوری؛ (ج) نمودار تعاملی؛ (د) نمودار وابستگی.

مشاهده کد مصورسازی SHAP (پایتون)

اگر به جزئیات پیاده‌سازی نمودارهای بالا علاقه‌مند هستید، در اینجا کد نمونه برای تولید نمودارهای آبشاری، زنبوری، تعاملی و وابستگی آمده است.👇

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.