Code for the paper Bi-level Convex Optimization of Eco-driving for Connected Fuel Cell Hybrid Electric Vehicles Through Signalized Intersections published in Energy.
This paper proposes a bi-level convex approach for eco-driving of a connected FCHEV proceeding through multiple signalized intersections. On the upper level, the non-linear traffic light constraints are transformed into time-varying linear state constraints and the cost function becomes quadratic after using the average speed. On the lower level, model convexification is carried out for the fuel cell system and battery. Then the upper-level speed planning and lower-level energy management are sequentially solved by the MOSEK solver and the Alternating Direction Method of Multipliers (ADMM) algorithm. The results show that the proposed bi-level convex approach greatly reduces the computational cost while maintaining high energy efficiency, with only 6.59% computational time and almost the same fuel economy compared to the bi-level Dynamic Programming (DP) method.
- Matlab
- CVX
Before running the code, add the folder Functions to the MATLAB search path by running set_path.m or
addpath('Functions');
-
Scenarios 5,8,6 in the code are Scenarios 1,2,3 in the paper, respectively.
Method | Folder |
---|---|
MOSEK | Eco_MOSEK |
Upper DP | Eco_DP |
ADMM | EMS_ADMM |
Lower DP | EMS_DP |
Full DP | EcoEMS_DP |
-
dpm.m is a dynamic programming Matlab function.
-
Code for the ADMM algorithm is based on admm-energy-management.
|-- AMOSEK-ADMM
|-- README.md
|-- set_path.m
|-- EcoEMS_DP
| |-- EcoEMS_DP_res_convex.mat
| |-- EcoEMS_DP_ux_convex.mat
| |-- EcoEMS_v_DP_convex.mat
| |-- FCV_EcoEMS_DP_advisor_main.m
| |-- FCV_EcoEMS_DP_advisor_model.m
| |-- get_results.m
| |-- FCV_EcoEMS_DP_advisor_results
| |-- Results_all.mat
| |-- Scenario5Eco.png
| |-- Scenario5EMS.png
| |-- Scenario6Eco.png
| |-- Scenario6EMS.png
| |-- Scenario8Eco.png
| |-- Scenario8EMS.png
|-- Eco_DP
| |-- ComputTime.mat
| |-- Eco_Scenario5_DP.png
| |-- Eco_Scenario6_DP.png
| |-- Eco_Scenario8_DP.png
| |-- Eco_v_DP.mat
| |-- FCV_Eco_DP_advisor_main.m
| |-- FCV_Eco_DP_advisor_model.m
|-- Eco_MOSEK
| |-- ComputTime.mat
| |-- Eco_Scenario1_MOSEK.png
| |-- Eco_Scenario5_MOSEK.png
| |-- Eco_Scenario6_MOSEK.png
| |-- Eco_Scenario8_MOSEK.png
| |-- Eco_v_MOSEK.mat
| |-- MOSEK_main.m
| |-- s_ref.mat
|-- EMS_ADMM
| |-- ADMM.m
| |-- ADMM_main.m
| |-- ADMM_main_soc_rho1_for_plot.m
| |-- Eco_DP_EMS_ADMM_res.mat
| |-- Eco_DP_EMS_ADMM_ux.mat
| |-- Eco_MOSEK_EMS_ADMM_res.mat
| |-- Eco_MOSEK_EMS_ADMM_ux.mat
| |-- Eco_Scenario5_DP_EMS_ADMM.png
| |-- Eco_Scenario5_MOSEK_EMS_ADMM.png
| |-- Eco_Scenario6_DP_EMS_ADMM.png
| |-- Eco_Scenario6_MOSEK_EMS_ADMM.png
| |-- Eco_Scenario8_DP_EMS_ADMM.png
| |-- Eco_Scenario8_MOSEK_EMS_ADMM.png
| |-- f_BacktrackingNewtonVector.m
| |-- SOC_f_rho1.mat
| |-- SOC_f_rho1_NEDC.png
|-- EMS_DP
| |-- Eco_DP_EMS_DP_res.mat
| |-- Eco_DP_EMS_DP_res_convex.mat
| |-- Eco_DP_EMS_DP_ux.mat
| |-- Eco_DP_EMS_DP_ux_convex.mat
| |-- Eco_MOSEK_EMS_DP_res.mat
| |-- Eco_MOSEK_EMS_DP_res_convex.mat
| |-- Eco_MOSEK_EMS_DP_ux.mat
| |-- Eco_MOSEK_EMS_DP_ux_convex.mat
| |-- Eco_Scenario5_DP_EMS_DP.png
| |-- Eco_Scenario5_DP_EMS_DP_convex.png
| |-- Eco_Scenario5_MOSEK_EMS_DP.png
| |-- Eco_Scenario5_MOSEK_EMS_DP_convex.png
| |-- Eco_Scenario6_DP_EMS_DP.png
| |-- Eco_Scenario6_DP_EMS_DP_convex.png
| |-- Eco_Scenario6_MOSEK_EMS_DP.png
| |-- Eco_Scenario6_MOSEK_EMS_DP_convex.png
| |-- Eco_Scenario8_DP_EMS_DP.png
| |-- Eco_Scenario8_DP_EMS_DP_convex.png
| |-- Eco_Scenario8_MOSEK_EMS_DP.png
| |-- Eco_Scenario8_MOSEK_EMS_DP_convex.png
| |-- FCV_EMS_DP_advisor_main.m
| |-- FCV_EMS_DP_advisor_model.m
|-- Functions
|-- dpm.m
|-- get_scenarios_by_index.m
|-- get_s_ref.m
|-- IDM.m
|-- NEDC.mat
|-- plot_scenario.m