Engine ON/OFF Control for the Energy Management of a Serial Hybrid Electric Bus via Convex Optimization
Contents
Problem Formulation
Energy management problem of engine ON/OFF control of a serial hybrid electric bus.
Proposed Solution
An effective technique consists of splitting the optimization problem into two parts. First part consists of defining an engine ON/OFF strategy, whereas the second part consists of optimizing the power split based on that ON/OFF strategy.
The optimization problem can be formulated as seen in table II. This is the equation that will give us the optimal fuel consumption of the engine subject to generator power constraints, power delivered, and energy content.
Data Sources
The data used in this experiment is randomly generated. The source data is not available in the reading. The only information available in the reading were the constant values.
clear clc %Constants - Own i = 0; N = 1000; e = zeros(1,2001); theta_lim = zeros(1,2001); %Constants - Paper g = 9.81; %Gravitation constant [kg m/s^2] pa = 1.20; %Air density [kg/m^3] mv = 13.6; %Empty vehicle mass [t] mrot = 0.6; %Equivalent rotational mass A = 8.2; %Frontal area [m^2] cd = 0.9; %Drag coefficient [-] cr = 0.65; %Rolling friction coefficient [%] rw = 0.466; %Wheel radius [m] yt = 9.82; %Transmission ratio [-] Pm_nom = 280; %Motor power [kW] Pg_max = 170; %Engine-generator power [kW] p0 = 16.1; %Engine-generator parameter [kW] p1 = 2.22; %Engine-generator parameter [-] p2 = 0.0013; %Engine-generator parameter [1/k W] p3 = 10; p4 = 10; C = 30.9; R = 2.62; E_delta = 0.74; e_max = 30; e_min = 10; e_init = 20; Ib = .01; s = [3,3,3,3,3,3,3]; k = 0.5; Eo = 0; Uo = 0; % Q = linspace(75,25,2001); Q = (35-30).*rand(2001,1) + 35; Max_val = (30-20).*rand(1,1) + 30; Min_val = (12-6).*rand(1,1) + 12; Range_1 = (300-200).*rand(1,1) + 300; pg = linspace(Max_val, Min_val ,Range_1); Min_val = (4-1).*rand(1,1) + 4; Range_2 = (300-200).*rand(1,1) + 300; pg2 = linspace(min(pg),Min_val,Range_2); Max_val = (16-10).*rand(1,1) + 16; pg3 = linspace(min(pg2),Max_val,(1002-(Range_1 + Range_2))); pg = [pg,pg2,pg3]; %Variables Ft = zeros(1,2000); %Required force Fa = zeros(1,2000); %Aerodynamic drag force Ff = zeros(1,2000); %Rolling friction force Fg = zeros(1,2000); %Up/Downhill driving force m = zeros(1,2000); %mass of the vehicle
Solution
%Iterative solution for i=1 : N if i>=3 s(i) = s(i-1) + k * (s_out(i-2) - s(i-1)); elseif i==2 s(i) = 3; elseif i==1 s(i) = 3; end %calculate voltage source Uoc(i) = (Q(i)/C) + Uo; %calculate buffer energy e(i) = (1/2) * C * Uoc(i)^2 - Eo; %calculate engine on/off B(i) = (C*R)/(2*(e(i)+E_delta)); preq(i) = Pm_nom; theta_lim(i) = ((1/2)*(p1 - s(i))+sqrt(p0 * (s(i)*B(i)+p2)))/(s(i)*B(i)); pb_max(i) = p3*e(i) + p4; pb_min(i) = p1*e(i) + p2; if theta_lim(i)> pb_max(i) plim(i) = pb_max(i); elseif theta_lim(i) < pb_min(i) plim(i) = pb_min(i); else plim(i) = theta_lim(i); end if preq(i) >= plim(i) u(i) = 1 ; else u(i) = 0; end %calculate power delivered pb(i) = Uoc(i) * Ib - R * Ib^2; %optimize cvx_begin quiet minimize ((p2 * pg(i)^2 + p1 * pg(i) + p0) * u(i)); pg(i) >= preq(i) - pb(i); pg(i) <= Pg_max * u(i); e(i+1) <= e(i)- (1/R*C)*(e(i)+ Eo - sqrt(e(i)+Eo) * sqrt(e(i) + Eo - 2*R*C*pb(i))); pb(i)<=p3*e(i) + p4; pb(i)>=p1*e(i) + p2; e(i) <= e_max; e(i) >= e_min; e(1) = e_init; e(N+1) = e_init; cvx_end Pf(i) = cvx_optval; temp = ((.0005 +.0025).*rand(1,1) - .0018); s_out(i) = s(i) + temp; end
Visualization of the results
dim = [.2 .5 .3 .3]; figure(1) hold on xlabel('Time[s]') % x-axis label ylabel('Eb[kWh]') % y-axis label plot(1:N, e(1,1:N),'r+--','Linewidth',2); annotation('textbox',dim,'String','Optimal solution for energy','FitBoxToText','on'); ylim([18 30]) hold off figure(2) hold on xlabel('Battery Capacity[Wh]') % x-axis label ylabel('I/100km') % y-axis label r1=plot(1:N, Pf(1,1:N),'r+--','Linewidth',2); annotation('textbox',dim,'String','Optimal solution for battery capacity','FitBoxToText','on'); hold off figure(3) hold on xlabel('-Time[s]') % x-axis label ylabel('s[-]') % y-axis label r1=plot(1:N, s(1,1:N),'r+--','Linewidth',2); annotation('textbox',dim,'String','Optimal solution for equivalence factor','FitBoxToText','on'); hold off %Optimal size of battery "Optimal Size of battery" min(Pf)
ans = "Optimal Size of battery" ans = 29.7993



Analysis and conclusions
As we can see. Even though the data provided for this implementation was randomly generated, the results resemble those that are published in the reading.
Results from paper:
Source files\tools
- main.m - contains the data and implementation
- CVX - tool used in the optimization strategy
References
P. Elbert, T. Nüesch, A. Ritter, N. Murgovski and L. Guzzella, "Engine On/Off Control for the Energy Management of a Serial Hybrid Electric Bus via Convex Optimization," in IEEE Transactions on Vehicular Technology, vol. 63, no. 8, pp. 3549-3559, Oct. 2014.