Datasets
Standard Dataset
Fault Identification using Fault Injection with Domain Knowledge-Guided Reinforcement Learning
- Citation Author(s):
- Submitted by:
- Mehrdad Moradi
- Last updated:
- Mon, 07/08/2024 - 15:59
- DOI:
- 10.21227/c6kb-r494
- Data Format:
- License:
- Categories:
- Keywords:
Abstract
Safety assessment of Cyber-Physical Systems (CPS) requires a tremendous amount of effort as the complexity of cyber-physical systems is increasing. A well-known approach for the safety assessment of CPS is Fault Injection (FI). The goal of fault injection is to find a catastrophic fault that can fail the system by injecting faults into it. These catastrophic faults are less likely to happen, and finding it requires tremendous labor and cost. In this paper, we propose a Reinforcement Learning (RL)-based method to configure faults in the system under test automatically and find unknown faults. Reinforcement learning is a machine learning algorithm that learns by integrating dynamically with the environment. The proposed method provides a guideline to utilize high-level domain knowledge about the system under test for constructing the reinforcement learning agent and fault injection campaign. We mainly use the system (safety) specification to shape the reward function in the reinforcement learning agent. The reinforcement learning agent interacts with the system under test to find unknown faults. We test the proposed method on two use cases: adaptive cruise control and autonomous emergency braking in MATLAB/Simulink. We compare the proposed method with random-based fault injection. Our proposed method outperforms random-based FI in terms of severeness and number of found faults.
In this repository we have experimental results and code for our paper entitled:
"Fault Identification using Fault Injection with Domain Knowledge-Guided Reinforcement Learning"
How to setup?
You need to install some packages as bellow on python 3.8 or 3.7.9(for AEB) respectively:
FMPy version=0.3.5 or 0.3.2
numpy version=1.19.5 or 1.21.2
stable-baseline3 version=1.3.0 or 1.2.0
optuna version=2.10.0
GYM version=0.19.0 or 0.21.0
Matplotlib version=3.4.2 or 3.4.3
torch version=1.10.1 or 1.9.1
plotly version=5.5.0
We have 2 case studies of Adaptive Criuese Controller (ACC) and Autonomous Emergency Braking (AEB).
For each case study there a folder and we put code and resutls in corresponding folder.
Structure of folders are as follow:
Root
|__ACC
| |__acc_experiment.py : code for runing experiment-> you need to uncomment functions writen in the main section in order to run the experiment step by step
| |__ACC_RBFI.csv : result of Random-Based Fault Injection
| |__mpcACCsystem_fi_reward2.fmu : The generated FMU from the case study
| |__ACC_with_hpt : results of runing acc_experiment.py with tuned hyperparameters
| |__ACC_without_hpt : results of runing acc_experiment.py with default hyperparameters
| |__AdaptiveCruiseControlExample : the case study of Mathworks
|__AEB
| |__aeb_experiment.py : code for runing experiment-> you need to uncomment functions writen in the main section in order to run the experiment step by step
| |__AEB_RBFI.csv : result of Random-Based Fault Injection
| |__AEBTestBenchExample.fmu : The generated FMU from the case study
| |__AEB_with_hpt : results of runing acc_experiment.py with tuned hyperparameters
| |__AEB_without_hpt : results of runing acc_experiment.py with default hyperparameters
| |__AEBWithSensorFusionExample : the case study of Mathworks
Comments
Version 0