יער אקראי בסיוע סימולציה תרמודינמית: אבחון תקלות מוסבר לרכיבי תא הבעירה במנועי דיזל ימיים

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), התעשייה מתמודדת עם שני צווארי בקבוק ארוכי טווח:

  • מחסור בנתונים: מנועי דיזל ימיים (במיוחד מנועים ראשיים של ספינות אוקיינוס) הם לב הספינה. תקלה חמורה בים עלולה להוביל לאובדן כוח הנעה, עלייה על שרטון או אפילו אסון ימי. לכן, מקדמי הבטיחות בתכנון שלהם גבוהים במיוחד, וההסתברות לתקלות חמורות נמוכה מעצם טבעה. בנוסף, התעשייה הימית מיישמת מערכות תחזוקה מונעת קפדניות (כגון שיפוץ מתוזמן לפי שעות עבודה). הרוב המכריע של החלקים המתכלים מוחלפים בכפייה לפני שהם באמת כושלים ומייצרים נתוני תקלה. זה מוביל לשפע של נתוני בריאות ונתוני בלאי מוקדם, אך למחסור קיצוני בנתונים אמיתיים על כשל מלא או תקלות חמורות.
  • בעיית "הקופסה השחורה": מכיוון שמודלים של למידה עמוקה חסרים בדרך כלל שקיפות, קשה למהנדסים לסמוך עליהם אם אינם יכולים להסביר את הסיבות הפיזיקליות לתקלה. בתעשיית הספנות, המפוקחת בקפדנות על ידי חברות סיווג, חוסר שקיפות זה הוא קריטי. אם בינה מלאכותית מאבחנת בטעות (או מפספסת) תפיסת בוכנה (scuffing) או שבר בגל הארכובה, והמערכת לא יכולה לעקוב אם השגיאה נובעת מהטיית נתונים, פגם באלגוריתם או סחיפת חיישן, חוסר עקיבות זה אינו מתקבל על הדעת בחקירות תאונות ימיות.

כדי להתמודד עם אתגרים אלו, הצענו את שיטת 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) הציגו ערכים ספציפיים, ובכך העלו את הסתברות החיזוי לתקלה זו. זה עולה בקנה אחד עם החוקים הפיזיקליים: שחיקת טבעות הורסת את האיטום, ומובילה לדליפת גז (Blow-by).
  • הסבר גלובלי (גרף נחיל דבורים): הניתוח הגלובלי חושף את החוקים הכלליים שנלמדו על ידי המודל. מצאנו כי ערך נמוך של לחץ פליטה לפני הטורבינה (P11) הוא אינדיקטור חזק לשחיקת טבעות. מבחינה פיזיקלית, זה עקבי: טבעות שחוקות גורמות לדליפת גז מהצילינדר, ובכך מפחיתות את האנרגיה הזמינה להנעת הטורבינה.
SHAP Analysis,including Waterfall plot, beeswarm plot, interaction plot and dependence plot

איור 11: ניתוח תקלת שחיקת טבעות (F4) מבוסס ערכי SHAP: (א) גרף מפל; (ב) גרף נחיל דבורים; (ג) גרף אינטראקציה; (ד) גרף תלות.

הצג קוד ויזואליזציה של 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