Rừng ngẫu nhiên hỗ trợ bởi mô phỏng nhiệt động lực học: Chẩn đoán lỗi có thể giải thích được cho các bộ phận buồng đốt động cơ diesel hàng hải

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

Tóm tắt

Các phương pháp chẩn đoán lỗi thông minh truyền thống cho động cơ diesel hàng hải thường có khả năng khái quát hóa kém do thiếu mẫu huấn luyện về lỗi, và khả năng giải thích thấp do chưa tích hợp đầy đủ kiến thức tiên nghiệm về cơ chế hư hỏng. Để giải quyết các vấn đề trên, bài báo này đề xuất phương pháp Rừng ngẫu nhiên hỗ trợ bởi mô phỏng nhiệt động lực học (TSRF) .

Phương pháp này làm sáng tỏ các đặc điểm diễn biến lỗi thông qua mô phỏng nhiệt động lực học và tích hợp chúng làm kiến thức tiên nghiệm trong thiết kế mô hình chẩn đoán lỗi thông minh. Đầu tiên, năm mô hình lỗi nhiệt động lực học đã được phát triển bằng cách tinh chỉnh các thông số cơ bản của hệ thống để mô phỏng các đặc điểm quan trọng của các sự cố khác nhau. Sau đó, dựa trên kết quả mô phỏng số, các chỉ số nhiệt động lực học tiềm năng đặc trưng cho sự suy giảm của các bộ phận buồng đốt đã được xác định.

Việc lựa chọn đặc trưng được thực hiện bằng cách tính toán các giá trị SHapley Additive exPlanations (SHAP), chỉ giữ lại các biến có mối tương quan đáng kể với trạng thái lỗi. Cuối cùng, trạng thái sức khỏe của buồng đốt được đánh giá bằng cách sử dụng các thông số đã chọn. Kết quả thực nghiệm cho thấy phương pháp TSRF được đề xuất thể hiện hiệu suất phân loại xuất sắc, với độ chính xác trung bình đạt 99,07% trên bộ dữ liệu lỗi.

Từ khóa:
Động cơ diesel hàng hải Chẩn đoán lỗi AI có thể giải thích Giá trị SHAP

Động lực nghiên cứu

Trong lĩnh vực kỹ thuật hàng hải và Quản lý tiên lượng & sức khỏe (PHM), ngành công nghiệp đang phải đối mặt với hai nút thắt lâu dài:

  • Khan hiếm dữ liệu: Động cơ diesel hàng hải (đặc biệt là động cơ chính của tàu viễn dương) là trái tim của con tàu. Một sự cố nghiêm trọng trên biển có thể dẫn đến mất động lực, mắc cạn hoặc thậm chí là thảm họa. Do đó, hệ số an toàn trong thiết kế của chúng cực kỳ cao và xác suất xảy ra lỗi nghiêm trọng về bản chất là rất thấp. Ngoài ra, ngành hàng hải thực hiện các hệ thống bảo trì phòng ngừa nghiêm ngặt (như đại tu định kỳ dựa trên giờ hoạt động). Phần lớn các bộ phận hao mòn bị thay thế bắt buộc trước khi chúng thực sự hỏng hóc và tạo ra dữ liệu lỗi. Điều này dẫn đến sự phong phú của dữ liệu sức khỏe và dữ liệu mài mòn sớm, nhưng lại cực kỳ thiếu dữ liệu thực tế về các hư hỏng hoàn toàn hoặc sự cố nghiêm trọng.
  • Vấn đề "Hộp đen": Do các mô hình học sâu thường thiếu tính minh bạch, các kỹ sư rất khó tin tưởng vào chúng nếu không thể giải thích nguyên nhân vật lý của sự cố. Trong ngành vận tải biển, nơi được quản lý chặt chẽ bởi các tổ chức đăng kiểm, sự thiếu minh bạch này là rất quan trọng. Nếu AI chẩn đoán sai (hoặc bỏ sót) hiện tượng bó kẹt piston hoặc gãy trục khuỷu, và hệ thống không thể truy xuất xem lỗi bắt nguồn từ sai lệch dữ liệu, khiếm khuyết thuật toán hay trôi cảm biến, thì sự không thể truy xuất này là không thể chấp nhận được trong các cuộc điều tra tai nạn hàng hải.

Để giải quyết những thách thức này, chúng tôi đã đề xuất phương pháp TSRF. Bằng cách kết hợp các mô hình cơ chế dựa trên vật lý với các kỹ thuật giải thích tiên tiến và sử dụng các mô hình mô phỏng độ trung thực cao để giải quyết vấn đề khan hiếm dữ liệu, chúng tôi đảm bảo rằng các quyết định chẩn đoán tuân thủ các nguyên lý nhiệt động lực học cơ bản.


Phương pháp luận

Quy trình làm việc của nghiên cứu này bao gồm bốn giai đoạn chính sau đây (như hình minh họa):

  1. Mô hình hóa nhiệt động lực học: Thay vì chỉ dựa vào các bệ thử vật lý, chúng tôi đã xây dựng một mô hình nhiệt động lực học một chiều độ trung thực cao của động cơ diesel hàng hải sáu xi-lanh. Mô hình này được hiệu chỉnh nghiêm ngặt dựa trên dữ liệu vận hành thực tế, với sai số mô phỏng được kiểm soát dưới 5%.
  2. Tiêm lỗi (Fault Injection): Dựa trên mô hình đã hiệu chỉnh, chúng tôi đã mô phỏng năm lỗi cụ thể của buồng đốt (như nứt nắp quy lát, ăn mòn piston, v.v.) bằng cách tinh chỉnh các thông số vật lý, từ đó tạo ra một bộ dữ liệu bao gồm các mức độ lỗi thực tế khác nhau của động cơ.
  3. Lựa chọn đặc trưng dựa trên SHAP: Chúng tôi sử dụng các giá trị SHAP để xác định định lượng các đặc trưng chính, chọn ra 14 thông số quan trọng chi phối quyết định chẩn đoán.
  4. Chẩn đoán phân loại: Sử dụng bộ dữ liệu được tăng cường về mặt vật lý này, chúng tôi đã huấn luyện một bộ phân loại Rừng ngẫu nhiên (RF) và đạt được chẩn đoán lỗi với độ chính xác cao.
Structure of TSRF method combining Thermodynamic Simulation and Random Forest for Explainable AI

Hình 1: Kiến trúc phương pháp TSRF.


Chi tiết mô hình hóa nhiệt động lực học

Để đảm bảo độ trung thực cao, chúng tôi đã xây dựng mô hình mô phỏng động cơ diesel một chiều. Mô hình cơ chế này cân bằng giữa độ chính xác vật lý và hiệu quả tính toán cần thiết cho việc tạo bộ dữ liệu.

Cấu trúc mô hình

Hệ thống động cơ được rời rạc hóa thành mạng lưới các đường ống lưu chất và các thành phần chức năng:

  • Đơn vị động lực cốt lõi: Cấu hình sáu xi-lanh, hai kỳ thẳng hàng.
  • Hệ thống đường khí: Ống góp nạp/xả (PL1, PL2) được kết nối thông qua mạng lưới đường ống phức tạp.
  • Hệ thống tăng áp: Tuabin tăng áp (TC1) kết hợp với bộ làm mát khí nạp (CO1).

Hiệu chỉnh và xác nhận

Trước khi thực hiện tiêm lỗi, mô hình cơ sở đã được hiệu chỉnh nghiêm ngặt dựa trên dữ liệu đo đạc.

  • Nguồn dữ liệu: Dữ liệu vận hành tàu thực tế thu được thông qua Mô đun Thu thập Dữ liệu (DCM).
  • Xác nhận: Sai lệch của các thông số chính (như công suất, nhiệt độ khí xả) được kiểm soát nghiêm ngặt trong phạm vi sai số ±5% .
1-D thermodynamic simulation model

Hình 2: Sơ đồ mô hình nhiệt động lực học một chiều của động cơ diesel.

Model Validation Results

Hình 5: Mô đun Thu thập Dữ liệu (DCM).

Cơ chế tiêm lỗi

Do các mô hình một chiều không thể biểu diễn trực tiếp các khiếm khuyết cấu trúc 3D, chúng tôi đã áp dụng phương pháp ánh xạ hiện tượng để chuyển đổi các cơ chế suy giảm vật lý thành các dịch chuyển thông số nhiệt động lực học tương đương.

Loại lỗi Cơ chế vật lý Triển khai mô hình hóa
F1: Nứt nắp quy lát Cản trở dẫn nhiệt. Tăng nhiệt độ bề mặt nắp quy lát ($T_H$) lên 346°C.
F2: Ăn mòn piston Mất vật liệu và hỏng làm kín. Tăng nhiệt độ piston ($T_P$) + lọt khí nhẹ (blow-by) (0.01 kg/s).
F3: Mòn áo xi-lanh Tăng đường kính lòng xy-lanh do mài mòn. Tăng đường kính lòng + lọt khí nghiêm trọng (0.03 kg/s).
F4: Mòn xéc-măng Rò rỉ khí. Điều chỉnh lưu lượng khối lượng lọt khí (0.02 kg/s).
F5: Bó kẹt xéc-măng Tăng ma sát và hỏng làm kín. Thay đổi đường kính lòng + tăng nhiệt độ áo xi-lanh + lọt khí.

Phân tích khả năng giải thích

Một sự đổi mới cốt lõi của nghiên cứu này nằm ở việc chuyển trọng tâm từ "Lỗi là gì?" sang "Tại sao lại chẩn đoán là lỗi đó?". Chúng tôi đã chứng minh khả năng này thông qua phân tích lỗi mòn xéc-măng piston (F4):

  • Giải thích cục bộ (Biểu đồ thác nước): Biểu đồ thác nước phân tích logic dự đoán cụ thể. Ví dụ, mô hình dự đoán "mòn xéc-măng" bởi vì dòng nhiệt lọt khí (P06) và lưu lượng khối lượng lọt khí (P07) thể hiện các giá trị cụ thể, từ đó làm tăng xác suất dự đoán lỗi này. Điều này phù hợp với các định luật vật lý: xéc-măng bị mòn phá hủy độ kín, dẫn đến rò rỉ khí (lọt khí).
  • Giải thích toàn cục (Biểu đồ bầy ong): Phân tích toàn cục tiết lộ các quy luật chung mà mô hình đã học được. Chúng tôi phát hiện ra rằng áp suất khí xả trước tuabin (P11) thấp là một chỉ báo mạnh mẽ cho sự mòn xéc-măng. Về mặt vật lý, điều này là nhất quán: xéc-măng bị mòn dẫn đến rò rỉ khí từ xi-lanh, do đó làm giảm năng lượng sẵn có để dẫn động tuabin.
SHAP Analysis,including Waterfall plot, beeswarm plot, interaction plot and dependence plot

Hình 11: Phân tích lỗi mòn xéc-măng (F4) dựa trên giá trị SHAP: (a) Biểu đồ thác nước; (b) Biểu đồ bầy ong; (c) Biểu đồ tương tác; (d) Biểu đồ phụ thuộc.

Xem mã trực quan hóa SHAP (Python)

Nếu bạn quan tâm đến chi tiết triển khai của các biểu đồ trên, đây là mã ví dụ để tạo biểu đồ thác nước, bầy ong, tương tác và phụ thuộc.👇

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

Điểm nổi bật của nghiên cứu

Chúng tôi tin rằng công trình này đã đóng góp những điểm chính sau cho lĩnh vực này:

  • Thiết lập các mô hình tham số hóa cho năm lỗi điển hình của các bộ phận buồng đốt động cơ diesel hàng hải.
  • Xác nhận tính hiệu quả của phương pháp SHAP thông qua so sánh với nhiều phương pháp lựa chọn đặc trưng khác.
  • Cung cấp một góc nhìn mới cho chẩn đoán lỗi có thể giải thích được bằng cách kết hợp các phương pháp dựa trên dữ liệu với các mô hình cơ chế nhiệt động lực học.

Trích dẫn

Nếu bạn thấy công trình này hữu ích cho nghiên cứu của mình, vui lòng đọc bài báo sau 😊

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

Định dạng chuẩn

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.

Xem trên ScienceDirect