Nghiên cứu tối ưu hóa thiết kế độ lớn và tham số điều khiển nguồn năng lượng hệ động lực xe hybrid

177 196 0
Nghiên cứu tối ưu hóa thiết kế độ lớn và tham số điều khiển nguồn năng lượng hệ động lực xe hybrid

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NHA TRANG VŨ THĂNG LONG NGHIÊN CỨU TỐI ƯU HÓA THIẾT KẾ ĐỘ LỚN VÀ THAM SỐ ĐIỀU KHIỂN NGUỒN NĂNG LƯỢNG HỆ ĐỘNG LỰC XE HYBRID LUẬN ÁN TIẾN SĨ KỸ THUẬT Khánh Hòa, 2016 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NHA TRANG VŨ THĂNG LONG NGHIÊN CỨU TỐI ƯU HÓA THIẾT KẾ ĐỘ LỚN VÀ THAM SỐ ĐIỀU KHIỂN NGUỒN NĂNG LƯỢNG HỆ ĐỘNG LỰC XE HYBRID Ngành đào tạo: Mã số: Kỹ thuật khí động lực 62520116 LUẬN ÁN TIẾN SĨ KỸ THUẬT NGƯỜI HƯỚNG DẪN KHOA HỌC : PGS TS Nguyễn Văn Nhận Khánh Hòa, 2016 i MỤC LỤC Trang MỤC LỤC .i DANH MỤC CÁC CHỮ VIẾT TẮT .iv DANH MỤC CÁC KÝ HIỆU vi DANH MỤC CÁC BẢNG .ix DANH MỤC CÁC HÌNH .xi LỜI CAM ĐOAN xiii LỜI CẢM ƠN xiv MỞ ĐẦU Chương : TỔNG QUAN VỀ Ô TÔ HYBRID VÀ NGHIÊN CỨU TỐI ƯU HÓA HỆ THỐNG ĐỘNG LỰC CỦA Ô TÔ HYBRID 1.1 Tổng quan ô tô hybrid 1.1.1 Đặc điểm cấu tạo ô tô hybrid 1.1.2 So sánh ôtô hybrid với ô tô truyền thống 14 1.1.3 So sánh kiểu ôtô hybrid .16 1.1.4 Sơ lược lịch sử phát triển ô tô hybrid .17 1.2 Tổng quan nghiên cứu tối ưu hóa hệ động lực hybrid .19 1.2.1 Nghiên cứu nước ô tô hybrid 19 1.2.2 Nghiên cứu nước tối ưu hóa hệ động lực ô tô hybrid .22 1.3 Những vấn đề cần nghiên cứu tối ưu hóa hệ động lực hybrid .30 1.4 Kết luận chương 32 Chương : TỐI ƯU HÓA THIẾT KẾ ĐỘ LỚN VÀ THAM SỐ ĐIỀU KHIỂN NGUỒN NĂNG LƯỢNG HỆ ĐỘNG LỰC Ô TÔ HYBRID BẰNG GIẢI THUẬT ĐÀN ONG 2.1 Mô hình tối ưu hóa độ lớn nguồn lượng tham số ii điều khiển hệ động lực ô tô hybrid 34 2.1.1 Sơ đồ mô hình tổng quát 34 2.1.2 Hàm mục tiêu .35 2.1.3 Điều kiện ràng buộc 38 2.1.4 Chu trình vận hành .41 2.1.5 Mô hình hóa thành tố hệ động lực ô tô hybrid 42 2.1.6 Chiến lược điều khiển nguồn lượng 52 2.1.7 Bộ tối ưu .54 2.2 Giải thuật đàn ong 55 2.2.1 Giải thuật đàn ong sở .55 2.2.2 Giải thuật đàn ong dựa pheromone .58 2.2.3 Ưu điểm giải thuật đàn ong 61 2.3 Phương pháp tối ưu hóa hệ động lực ô tô hybrid giải thuật đàn ong 62 2.3.1 Phương pháp tối ưu hóa hệ động lực ô tô hybrid kiểu song song 62 2.3.2 Phương pháp tối ưu hóa hệ động lực ô tô hybrid kiểu hỗn hợp .71 2.4 Kết luận chương 74 Chương : THỰC NGHIỆM MÔ PHỎNG TỐI ƯU HÓA ĐỘ LỚN VÀ THAM SỐ ĐIỀU KHIỂN NGUỒN NĂNG LƯỢNG HỆ ĐỘNG LỰC Ô TÔ HYBRID 3.1 Mục tiêu thực nghiệm mô 76 3.2 Công cụ thực nghiệm mô 76 3.2.1 Phần mềm mô ADVISOR 76 3.2.2 Môđun giải thuật đàn ong 77 3.2.3 Bộ liệu ô tô Honda Insight 2000 79 3.2.4 Bộ liệu ô tô Toyota Prius 1998 80 3.2.5.Chu trình vận hành 82 iii 3.3 Nội dung phương pháp thực nghiệm mô 83 3.3.1 Danh mục thực nghiệm mô 83 3.3.2 Thực nghiệm mô Honda Insight 2000 .84 3.3.3 Thực nghiệm mô Toyota Prius 1998 85 3.4 Xác định liệu ban đầu 87 3.4.1 Điều kiện ràng buộc 87 3.4.2 Hệ số cản lăn 87 3.4.3 Các tham số BBA PBA 88 3.4.4 Tổng công suất hệ động lực 88 3.4.5 Dải công suất ICE EM 89 3.4.6 Dải dung lượng AQ 91 3.4.7 Dải công suất máy phát điện Toyota Prius 1998 91 3.4.8 Các hệ số tỷ lệ áp dụng cho Honda Insight 2000 92 3.4.9 Các hệ số tỷ lệ áp dụng cho Toyota Prius 1998 93 3.5 Kết thực nghiệm mô 95 3.5.1 Kết thực nghiệm mô với Honda Insight 2000 95 3.5.2 Kết thực nghiệm mô với Toyota Prius 1998 105 3.6 Kết luận chương 113 Chương : KẾT LUẬN VÀ KHUYẾN NGHỊ 4.1 Kết luận .114 4.1.1 Những đóng góp luận án 114 4.1.1 Kết luận rút từ kết thực nghiệm mô 114 4.2 Khuyến nghị 118 DANH MỤC CÔNG TRÌNH NGHIÊN CỨU CỦA TÁC GIẢ 119 TÀI LIỆU THAM KHẢO 121 PHỤ LỤC 127 iv DANH MỤC CÁC CHỮ VIẾT TẮT ADVISOR Phần mềm mô ô tô (ADvanced VehIcle SimulatOR) AQ Ắcqui BA Giải thuật đàn ong BBA Giải thuật đàn ong sở CECDC Chu trình vận hành áp dụng cho ô tô Việt Nam CEMDC Chu trình vận hành áp dụng cho xe máy Việt Nam EA Giải thuật tiến hóa (Evolution Algorithm) EG Máy phát điện EM Động điện EPA Tổ chức bảo vệ môi trường Hoa Kỳ (Environmental Protection Agency) FTP Chu trình vận hành UDDS cải tiến áp dụng cho ôtô có chế độ làm việc nhẹ vận hành điều kiện thành phố (Federal Test Procedure) EPA xây dựng GA HEV HWFET Giải thuật di truyền (Genetic Algorithm) Ô tô hybrid Chu trình vận hành mô trình vận hành đường cao tốc (Highway Fuel Economy Driving Schedule) EPA xây dựng ICE Động đốt MG Môtơ-Máy phát điện liên hợp NCS Nghiên cứu sinh NYCC Chu trình vận hành đặc trưng cho điều kiện giao thông New York (New York City Cycle) EPA xây dựng PBA P-HEV Giải thuật đàn ong dựa pheromone Ô tô hybrid kiểu song song v PNGV Partnership for a New Generation of Vehicles PSD Bộ chia công suất (Power Split Device) PSO Giải thuật đám đông phần tử (Particle Swarm Optimization) SAA Giải thuật mô trình ủ kim loại (Simulated Annealing Algorithm) S-HEV Ô tô hybrid kiểu nối tiếp SP-HEV Ô tô hybrid kiểu hỗn hợp THS UDDS Hệ thống động lực xe Toyota Prius (Toyota Hybrid System) Chu trình vận hành áp dụng cho ô tô có chế độ làm việc nhẹ vận hành điều kiện thành phố (Urban Dynamometer Driving Schedule) EPA xây dựng vi DANH MỤC CÁC KÝ HIỆU TT Ký hiệu Đại lượng Acar Tiết diện ngang chắn gió ô tô Caero Hệ số cản khí động học Cm.ice Vận tốc trung bình piston Croll Hệ số cản lăn dv/dt Gia tốc xe Faero Lực cản khí động học FC Suất tiêu thụ nhiên liệu ICE Fgrad Lực cản dốc Finer Lực quán tính 10 Froll Lực cản lăn 11 Ftrac Lực kéo 12 gice Suất tiêu thụ nhiên liệu có ích động 13 HF Hệ số hybrid 14 HC, CO, NO Hàm lượng chất độc hại khí thải động đốt bị khống chế tiêu chuẩn khí thải 15 mcar Khối lượng xe 16 Mice Momen quay động đốt 17 n 18 Naero Công suất cản khí dộng học 19 Nem Công suất động điện 20 Ngrad Công suất cản dốc 21 nice Tốc độ quay động đốt 22 Nice Công suất có ích động đốt 23 Niner Công suất quán tính tiêu hao quán tính 24 Nroll Công suất tiêu hao cho lực cản lăn 25 Ntrac Công suất kéo Tốc độ quay vii 26 pice Áp suất có ích trung bình động đốt 27 Qfuel Nhiệt trị nhiên liệu 28 SOC Trạng thái lượng ắcqui (State Of Charge) 29 S Độ dốc mặt đường 30 V Vận tốc xe 31 Vice 32  33 em Tốc độ góc động điện 34 ice Tốc độ góc động đốt 35 ice Hiệu suất có ích động đốt 36 em Hiệu suất động điện 37 ρair Khối lượng riêng không khí 38 fc_trq_scale Dung tích công tác động đốt Tốc độ góc Hệ số tỉ lệ mô men ICE so với ICE 39 mc_trq_scale Hệ số tỉ lệ mô men EM so với EM 40 ess_cap_scale Hệ số tỉ lệ dung lượng ắc qui so với AQ 41 cs_dl_assist_trq_threshold Ngưỡng mô men dẫn động yêu cầu mà EM không hỗ trợ công suất để cùng ICE dẫn động xe 42 cs_mc_assist_min_frac Mô men nhỏ EM cung cấp để cùng ICE dẫn động xe mô men dẫn động viii vượt ngưỡng (phần trăm mô men dẫn động lớn EM) 43 cs_mc_assist_slope Phần trăm độ dốc mô men yêu cầu EM cung cấp để cùng ICE dẫn động xe mô men dẫn động vượt ngưỡng (phần trăm mô men dẫn động lớn EM) 44 cs_mc_assist_max_frac Mô men lớn EM cung cấp để cùng ICE dẫn động xe mô men dẫn động vượt ngưỡng (phần trăm mô men lớn EM) 45 cs_dl_regen_trq_threshold Ngưỡng mô men tái sinh mà EM bắt đầu đóng vai trò EG để tái sinh lượng phanh tốc độ thấp 46 cs_mc_regen_min_frac Mô men nhỏ EM tái sinh mô men phanh vượt ngưỡng (phần trăm mô men tái sinh lớn EM) 47 cs_mc_regen_slope Phần trăm độ dốc mô men dẫn động âm EM tái sinh mô men dẫn động vượt ngưỡng (phần trăm mô men tái sinh lớn EM) 48 cs_mc_regen_max_frac Mô men lớn EM tái sinh mô men phanh vượt ngưỡng (phần trăm mô men tái sinh lớn EM) 49 cs_decel_regen_threshold Tốc độ nhỏ mà tốc độ EM không tái sinh lượng phanh 50 cs_lo_soc Giới hạn trạng thái lượng AQ 51 cs_hi_soc Giới hạn trạng thái lượng AQ 147 re=FC/4.9892+3.5*max(0,120-maxSpeed)/120+3.5*max(0,11gra)/11+3.5*max(0,time-20.4)/20.4; result=re; disp(' '); disp(['FC (liter/100km) is: ', num2str(FC)]); disp(['HC (g/km) is: ', num2str(HC)]); disp(['CO (g/km) is: ', num2str(CO)]); disp(['NOx (g/km) is: ', num2str(NOx)]); disp(['PM (g/km) is: ', num2str(PM)]); if a1~=-1 disp(['The time to accelerate from (0 - 97)km/h is (Standard =137km/h ): ', num2str(maxSpeed)]); if c==0 disp('ADVISOR CAN NOT calculate the grade: '); else disp(['The max grade is: ', num2str(gra)]); end disp(['The value of fitness function is: ', num2str(result)]); disp(' '); clear gr; clear re; end else result=-1; end end end 148 4.1.2 GIẢI THUẬT PBA % PHẦN MỀM TỐI ƯU HÓA CHO XE HONDA INSIGHT 2000 SỬ DỤNG GIẢI THUẬT PBA % TÁC GIẢ : VŨ THĂNG LONG – KHOA CƠ KHÍ – ĐẠI HỌC NHA TRANG % SẢN PHẨM CỦA LUẬN ÁN TIẾN SỸ : “NGHIÊN CỨU TỐI ƯU HÓA THIẾT KẾ ĐỘ LỚN VÀ THAM SỐ ĐIỀU KHIỂN NGUỒN NĂNG LƯỢNG HỆ ĐỘNG LỰC XE HYBRID” function main_opt global Par_Q global i1_min global i2_min global i3_min global i4_min global i5_min global i6_min global i7_min global i8_min global i9_min global i10_min global i11_min global i12_min global i13_min global i14_min % % % % % % % % % % % % % % Giới Giới Giới Giới Giới Giới Giới Giới Giới Giới Giới Giới Giới Giới hạn hạn hạn hạn hạn hạn hạn hạn hạn hạn hạn hạn hạn hạn dưới dưới dưới dưới dưới dưới dưới của của của của của của của 'fc_trq_scale' 'mc_trq_scale' 'ess_cap_scale' 'cs_dl_assist_trq_threshold' 'cs_mc_assist_min_frac' 'cs_mc_assist_slope' 'cs_mc_assist_max_frac' 'cs_dl_regen_trq_threshold' 'cs_mc_regen_min_frac' 'cs_mc_regen_slope' 'cs_mc_regen_max_frac' 'cs_decel_regen_threshold' 'cs_lo_soc' 'cs_hi_soc' hạn hạn hạn hạn hạn hạn hạn hạn hạn hạn hạn hạn hạn hạn trên trên trên trên trên trên trên của của của của của của của 'fc_trq_scale' 'mc_trq_scale' 'ess_cap_scale' 'cs_dl_assist_trq_threshold' 'cs_mc_assist_min_frac' 'cs_mc_assist_slope' 'cs_mc_assist_max_frac' 'cs_dl_regen_trq_threshold' 'cs_mc_regen_min_frac' 'cs_mc_regen_slope' 'cs_mc_regen_max_frac' 'cs_decel_regen_threshold' 'cs_lo_soc' 'cs_hi_soc' global global global global global global global global global global global global global global i1_max i2_max i3_max i4_max i5_max i6_max i7_max i8_max i9_max i10_max i11_max i12_max i13_max i14_max % % % % % % % % % % % % % % Giới Giới Giới Giới Giới Giới Giới Giới Giới Giới Giới Giới Giới Giới global global global global global global global global global global global global FC HC CO Nox accel1 accel2 accel3 dist maxAcc maxSpeed gra time; % % % % Tiêu thụ nhiên liệu Hàm lượng HC Hàm lượng CO Hàm lượng NOx % Gia tốc cực đại % Khả leo dốc % Thời gian tăng tốc clc; close all; clear all; % Xóa hình, xóa trị số biến input.init.saved_veh_file='INSIGHT_defaults_in'; [a,b]=adv_no_gui('initialize',input); i1_min=0.271; % Giá trị nhỏ 'fc_trq_scale' i1_max=0.49; % Giá trị lớn 'fc_trq_scale' i2_min=0.271; % Giá trị nhỏ i2_max=1.355; % Giá trị lớn i3_min=0.97; % Giá trị nhỏ i3_max=4.84; % Giá trị lớn 'mc_trq_scale' 'mc_trq_scale' 'ess_cap_scale' 'ess_cap_scale' 149 i4_min=0; % Giá trị nhỏ 'cs_dl_assist_trq_threshold' i4_max=60; % Giá trị lớn 'cs_dl_assist_trq_threshold' (N.m) i5_min=0; % Giá trị nhỏ 'cs_mc_assist_min_frac' i5_max=0.2; % Giá trị lớn 'cs_mc_assist_min_frac' i6_min=0; % Giá trị nhỏ i6_max=1; % Giá trị lớn 'cs_mc_assist_slope' 'cs_mc_assist_slope' i7_min=0.21; % Giá trị nhỏ 'cs_mc_assist_max_frac' i7_max=1;% Giá trị lớn 'cs_mc_assist_max_frac' i8_min=-40; % Giá trị nhỏ 'cs_dl_regen_trq_threshold', i8_max=0;% Giá trị lớn 'cs_dl_regen_trq_threshold', i9_min=0; % Giá trị nhỏ 'cs_mc_regen_min_frac' i9_max=0.2;% Giá trị lớn 'cs_mc_regen_min_frac' i10_min=0; % Giá trị nhỏ 'cs_mc_regen_slope' i10_max=1;% Giá trị lớn 'cs_mc_regen_slope' i11_min=0.21; % Giá trị nhỏ 'cs_mc_regen_max_frac' i11_max=1;% Giá trị lớn 'cs_mc_regen_max_frac' i12_min=0; % Giá trị nhỏ i12_max=30;% Giá trị lớn i13_min=0.15; %Giá trị nhỏ i13_max=0.57;% Giá trị lớn 'cs_decel_regen_threshold' 'cs_decel_regen_threshold' 'cs_lo_soc' 'cs_lo_soc' i14_min=0.58; % Giá trị nhỏ 'cs_hi_soc' i14_max=0.95;% Giá trị lớn 'cs_hi_soc' n= 22; % Số lượng ong trinh sát ban đầu itr= 30; % Số vòng lặp e=7; % Số vị trí tìm kiếm chọn m=5; % Số ong trung bình tìm kiếm vùng chọn rho = 0.01; % Tốc độ suy giảm pheromone alfa=0.5; % Mũ beta=1; % Mũ ngh1=(i1_max-i1_min)/40; % Bán kính tìm kiếm cục ngh2=(i2_max-i2_min)/40; ngh3=(i3_max-i3_min)/40; ngh4=(i4_max-i4_min)/40; ngh5=(i5_max-i5_min)/40; ngh6=(i6_max-i6_min)/40; ngh7=(i7_max-i7_min)/40; ngh8=(i8_max-i8_min)/40; ngh9=(i9_max-i9_min)/40; ngh10=(i10_max-i10_min)/40; ngh11=(i11_max-i11_min)/40; ngh12=(i12_max-i12_min)/40; ngh13=(i13_max-i13_min)/40; ngh14=(i14_max-i14_min)/40; load count; % Biến count nhớ số lần lặp disp(count) if count==0 % Kiểm tra xem có phải lần đầu chạy chương trình không ? disp(' '); disp('This is THE FIRST time to run the optimization program'); disp(' '); ph = ones(100,e) % Khởi tạo pheromone cho vùng 150 fitscore = zeros(100,e) selpatch=zeros(100,e); for i=1:e selpatch(1,i)=m; end selpatch(1,i)=m element=0; % Đếm số ong tìm kiếm U=X_random(n,i1_max,i2_max,i3_max,i4_max,i5_max,i6_max,i7_max,i8_max,i9_max,i10_m ax,i11_max,i12_max,i13_max,i14_max,i1_min,i2_min,i3_min,i4_min,i5_min,i6_min,i7_m in,i8_min,i9_min,i10_min,i11_min,i12_min,i13_min,i14_min) for i=1:n Par_Q(i,1)=U(i,1); Par_Q(i,2)=U(i,2); Par_Q(i,3)=U(i,3); Par_Q(i,4)=U(i,4); Par_Q(i,5)=U(i,5); Par_Q(i,6)=U(i,6); Par_Q(i,7)=U(i,7); Par_Q(i,8)=U(i,8); Par_Q(i,9)=U(i,9); Par_Q(i,10)=U(i,10); Par_Q(i,11)=U(i,11); Par_Q(i,12)=U(i,12); Par_Q(i,13)=U(i,13); Par_Q(i,14)=U(i,14); temp=fn(U(i,1),U(i,2),U(i,3),U(i,4),U(i,5),U(i,6),U(i,7),U(i,8),U(i,9),U(i,10),U( i,11),U(i,12),U(i,13),U(i,14)); while temp==-1 U(i,:)=X_random(1,i1_max,i2_max,i3_max,i4_max,i5_max,i6_max,i7_max,i8_max,i9_max, i10_max,i11_max,i12_max,i13_max,i14_max,i1_min,i2_min,i3_min,i4_min,i5_min,i6_min ,i7_min,i8_min,i9_min,i10_min,i11_min,i12_min,i13_min,i14_min) Par_Q(i,1)=U(i,1); Par_Q(i,2)=U(i,2); Par_Q(i,3)=U(i,3); Par_Q(i,4)=U(i,4); Par_Q(i,5)=U(i,5); Par_Q(i,6)=U(i,6); Par_Q(i,7)=U(i,7); Par_Q(i,8)=U(i,8); Par_Q(i,9)=U(i,9); Par_Q(i,10)=U(i,10); Par_Q(i,11)=U(i,11); Par_Q(i,12)=U(i,12); Par_Q(i,13)=U(i,13); Par_Q(i,14)=U(i,14); temp=fn(U(i,1),U(i,2),U(i,3),U(i,4),U(i,5),U(i,6),U(i,7),U(i,8),U(i,9),U(i,10),U( i,11),U(i,12),U(i,13),U(i,14)); end Par_Q(i,15)=temp; Par_Q(i,16)=FC; Par_Q(i,17)=HC; Par_Q(i,18)=CO; Par_Q(i,19)=NOx; Par_Q(i,20)=PM; Par_Q(i,21)=accel1; Par_Q(i,22)=accel2; Par_Q(i,23)=accel3; Par_Q(i,24)=dist; Par_Q(i,25)=maxAcc; Par_Q(i,26)=maxSpeed; 151 Par_Q(i,27)=gra; Par_Q(i,28)=time; element=element+1; all_bees(element,:)=[element,U(i,1),U(i,2),U(i,3),U(i,4),U(i,5),U(i,6),U(i,7),U(i ,8),U(i,9),U(i,10),U(i,11),U(i,12),U(i,13),U(i,14),temp,FC,HC,CO,NOx,PM,accel1,ac cel2,accel3,dist,maxAcc,maxSpeed,gra,time]; disp(' '); disp(sprintf('The number of evaluated fitness functions: %02.0f',element)); disp(' '); end Par_Q=sortrows(Par_Q,15) all_inter_val(1,:)=[0,Par_Q(1,:)]; first=Par_Q; last=first; save all_bees all_bees; save first first; save element element; save all_inter_val all_inter_val; save ph ph; save fitscore fitscore; save selpatch selpatch; U clear U; clear i; h=0; else % Thực lần đầu chạy chương trình disp(' '); disp('This is NOT the first time to run the optimization program'); disp(' '); load all_bees; load last; Par_Q=last load all_inter_val load ph load fitscore load selpatch load element end Par_Q1=Par_Q(:,15)' for k=count+1:count+itr % Bắt đầu vòng lặp disp(' '); disp(sprintf('Interation Number: %02.0f',k)); disp(' '); if k> for h=1:e fitscore(k,h)=(Par_Q1(1,h) - Par_Q1(1,e+1)) / (sum(Par_Q1(1,1:e) - Par_Q1(1,e+1))); % Fitness score selpatch(k,h)=round(((ph(k1,h))^alfa*((fitscore(k,h))^beta))/(sum((ph(k1,1:e).^alfa.*(fitscore(k,h).^beta))))*m*e); % Tính số ong tìm kiếm if selpatch(k,h) > ph(k,h) = ph(k-1,h)* rho + (fitscore(k,h)*selpatch(k,h)); % Cập nhật pheromone else ph(k,h) = ph(k-1,h)* rho; end end end for j=1:e % Số lượng vùng tìm kiếm chọn for i=1:selpatch(k,j) % Số lượng ong tìm kiếm vùng chọn % Tìm kiếm lân cận vùng chọn 152 U=bee_dance(ngh1,ngh2,ngh3,ngh4,ngh5,ngh6,ngh7,ngh8,ngh9,ngh10,ngh11,ngh12,ngh13, ngh14,Par_Q(j,1),Par_Q(j,2),Par_Q(j,3),Par_Q(j,4),Par_Q(j,5),Par_Q(j,6),Par_Q(j,7 ),Par_Q(j,8),Par_Q(j,9),Par_Q(j,10),Par_Q(j,11),Par_Q(j,12),Par_Q(j,13),Par_Q(j,1 4),i1_min,i2_min,i3_min,i4_min,i5_min,i6_min,i7_min,i8_min,i9_min,i10_min,i11_min ,i12_min,i13_min,i14_min,i1_max,i2_max,i3_max,i4_max,i5_max,i6_max,i7_max,i8_max, i9_max,i10_max,i11_max,i12_max,i13_max,i14_max); temp=fn(U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10),U(11),U(12),U(13),U(14 )); while temp==-1 U=bee_dance(ngh1,ngh2,ngh3,ngh4,ngh5,ngh6,ngh7,ngh8,ngh9,ngh10,ngh11,ngh12,ngh13, ngh14,Par_Q(j,1),Par_Q(j,2),Par_Q(j,3),Par_Q(j,4),Par_Q(j,5),Par_Q(j,6),Par_Q(j,7 ),Par_Q(j,8),Par_Q(j,9),Par_Q(j,10),Par_Q(j,11),Par_Q(j,12),Par_Q(j,13),Par_Q(j,1 4),i1_min,i2_min,i3_min,i4_min,i5_min,i6_min,i7_min,i8_min,i9_min,i10_min,i11_min ,i12_min,i13_min,i14_min,i1_max,i2_max,i3_max,i4_max,i5_max,i6_max,i7_max,i8_max, i9_max,i10_max,i11_max,i12_max,i13_max,i14_max); temp=fn(U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10),U(11),U(12),U(13),U(14 )); end if temp< Par_Q(j,15) Par_Q(j,:)=[U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10),U(11),U(12),U(13), U(14),temp,FC,HC,CO,NOx,PM,accel1,accel2,accel3,dist,maxAcc,maxSpeed,gra,time]; end element=element+1; all_bees(element,:)=[element,U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10),U (11),U(12),U(13),U(14),temp,FC,HC,CO,NOx,PM,accel1,accel2,accel3,dist,maxAcc,maxS peed,gra,time]; disp(' '); disp(sprintf('The number of evaluated fitness functions: %02.0f',element)); disp(' '); end end % for i=e+1:n U=X_random(1,i1_max,i2_max,i3_max,i4_max,i5_max,i6_max,i7_max,i8_max,i9_max,i10_m ax,i11_max,i12_max,i13_max,i14_max,i1_min,i2_min,i3_min,i4_min,i5_min,i6_min,i7_m in,i8_min,i9_min,i10_min,i11_min,i12_min,i13_min,i14_min); temp=fn(U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10),U(11),U(12),U(13),U(14 )); while temp==-1 U=X_random(1,i1_max, i2_max,i3_max, i4_max, i5_max, i6_max,i7_max, i8_max,i9_max,i10_max,i11_max, i12_max,i13_max,i14_max, i1_min, i2_min,i3_min, i4_min,i5_min,i6_min,i7_min,i8_min,i9_min,i10_min,i11_min,i12_min,i13_min,i14_min ); temp=fn(U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10),U(11),U(12),U(13),U(14 )); end Par_Q(i,:)=[U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10),U(11),U(12),U(13), U(14),temp,FC,HC,CO,NOx,PM,accel1,accel2,accel3,dist,maxAcc,maxSpeed,gra]; element=element+1; all_bees(element,:)=[element,U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10),U (11),U(12),U(13),U(14),temp,FC,HC,CO,NOx,PM,accel1,accel2,accel3,dist,maxAcc,maxS peed,gra,time]; disp(' '); 153 disp(sprintf('The number of evaluated fitness functions: %02.0f',element)); disp(' '); end Par_Q=sortrows(Par_Q,15) Par_Q1=Par_Q(:,15)' all_inter_val(k+1,:)=[k,Par_Q(1,:)]; % Giá trị ong tốt vòng lặp k' xlswrite('R_all_inter_val',all_inter_val) % Xuất sang excel xlswrite('R_all_bees',all_bees) % Xuất sang excel end count=count+itr; first=last last=Par_Q; xlswrite('R_last',last) a=['fc_trq_scale','mc_trq_scale','ess_cap_scale','cs_dl_assist_trq_threshold','cs _mc_assist_min_frac','cs_mc_assist_slope','cs_mc_assist_max_frac','cs_dl_regen_tr q_threshold','cs_mc_regen_min_frac','cs_mc_regen_slope','cs_mc_regen_max_frac','c s_decel_regen_threshold','cs_lo_soc','cs_hi_soc','FC']; disp(' '); disp(a); last a=['order ','fc_trq_scale','mc_trq_scale','ess_cap_scale','cs_dl_assist_trq_threshold','cs_ mc_assist_min_frac','cs_mc_assist_slope','cs_mc_assist_max_frac','cs_dl_regen_trq _threshold','cs_mc_regen_min_frac','cs_mc_regen_slope','cs_mc_regen_max_frac','cs _decel_regen_threshold','cs_lo_soc','cs_hi_soc','FC']; disp(' '); disp(a); all_inter_val save count count; % Lưu biến vào nhớ để lần chạy sau save last last; save all_inter_val all_inter_val; save ph ph; save fitscore fitscore; save selpatch selpatch; save element element; save all_bees all_bees; plot(all_inter_val(:,1),all_inter_val(:,16)); % Vẽ đồ thị hội tụ grid on; % Các hàm “bee_dance”; “X_random”; “fn” tương tự BBA nên không trình bày end 4.2 TỐI ƯU CHO Ô TÔ TOYOTA PRIUS 1998 % PHẦN MỀM TỐI ƯU HÓA CHO XE TOYOTA PRIUS 1998 SỬ DỤNG GIẢI THUẬT PBA % TÁC GIẢ : VŨ THĂNG LONG – KHOA CƠ KHÍ – ĐẠI HỌC NHA TRANG % SẢN PHẨM CỦA LUẬN ÁN TIẾN SỸ : “NGHIÊN CỨU TỐI ƯU HÓA THIẾT KẾ ĐỘ LỚN VÀ THAM SỐ ĐIỀU KHIỂN NGUỒN NĂNG LƯỢNG HỆ ĐỘNG LỰC XE HYBRID” function main_opt global Par_Q global i1_min % Giới hạn 'fc_trq_scale' global i2_min % Giới hạn 'mc_trq_scale' global i3_min % Giới hạn 'ess_cap_scale' global i4_min % Giới hạn 'gc_trq_scale' global i5_min % Giới hạn 'cs_electric_launch_spd' global i6_min % Giới hạn 'cs_min_pwr' global i7_min % Giới hạn 'cs_eng_on_soc' global i8_min % Giới hạn 'cs_eng_min_spd' global i9_min % Giới hạn 'cs_lo_soc' 154 global global global global global global global global global global global global global global global global global global global global global global global global global global global global global i10_min % Giới hạn 'cs_hi_soc' i1_max % Giới hạn 'fc_trq_scale' i2_max % Giới hạn 'mc_trq_scale' i3_max % Giới hạn 'ess_cap_scale' i4_max % Giới hạn 'gc_trq_scale' i5_max % Giới hạn 'cs_electric_launch_spd' i6_max % Giới hạn 'cs_min_pwr' i7_max % Giới hạn 'cs_eng_on_soc' i8_max % Giới hạn 'cs_eng_min_spd' i9_max % Giới hạn 'cs_lo_soc' i10_max % Giới hạn 'cs_hi_soc' FC % Tiêu thụ nhiên liệu HC % Hàm lượng ô nhiễm CO NOx accel1 % Tính động lực học accel2 accel3 dist maxAcc maxSpeed gra % Khả leo dốc gra % Thời gian tăng tốc fc_mass1 % Khối lượng phận hệ động lực mc_mass1 ess_mass1 gc_mass1 ex_mass1 total_vehicle_mass clc; close all; clear all; input.init.saved_veh_file='PRIUS_JPN_defaults_in'; [a,b]=adv_no_gui('initialize',input); i1_min=0.388; %Giá trị nhỏ của'fc_trq_scale' i1_max=0.699; %Giá trị lớn của'fc_trq_scale' i2_min=0.107; %Giá trị nhỏ của'mc_trq_scale' i2_max=0.535; %Giá trị lớn của'mc_trq_scale' i3_min=0.59; %Giá trị nhỏ của'ess_cap_scale' i3_max=2.95; %Giá trị lớn của'ess_cap_scale' i4_min=0.221; %Giá trị nhỏ của'gc_trq_scale' i4_max=1.106; %Giá trị lớn của'gc_trq_scale' i5_min=5; %Giá trị nhỏ của'cs_electric_launch_spd' i5_max=20;% Giá trị lớn của'cs_electric_launch_spd' i6_min=4000; %Giá trị nhỏ của'cs_min_pwr' i6_max=8000; % Giá trị lớn của'cs_min_pwr' i7_min=0.41; %Giá trị nhỏ của'cs_eng_on_soc' i7_max=0.60;% Giá trị lớn của'cs_eng_on_soc' i8_min=100; %Giá trị nhỏ của'cs_eng_min_spd' i8_max=150; %Giá trị lớn của'cs_eng_min_spd' i9_min=0.15; %Giá trị nhỏ của'cs_lo_soc' i9_max=0.40;% Giá trị lớn của'cs_lo_soc' i10_min=0.61; %Giá trị nhỏ của'cs_hi_soc' i10_max=0.95;% Giá trị lớn của'cs_hi_soc' 155 n= 22; % Số lượng ong trinh sát itr=50; % Số vòng lặp e=7; % Số lượng vùng chọn m=5; % Số ong trung bình tìm kiếm vùng chọn rho = 0.01; % Tốc độ suy giảm Pheromone alfa=0.5; % Mũ beta=1; % Mũ ngh1=(i1_max-i1_min)/40; % Bán kính vùng tìm kiếm cục ngh2=(i2_max-i2_min)/40; ngh3=(i3_max-i3_min)/40; ngh4=(i4_max-i4_min)/40; ngh5=(i5_max-i5_min)/40; ngh6=(i6_max-i6_min)/40; ngh7=(i7_max-i7_min)/40; ngh8=(i8_max-i8_min)/40; ngh9=(i9_max-i9_min)/40; ngh10=(i10_max-i10_min)/40; load count; disp(count) if count==0 % Kiểm tra xem có phải lần đầu chạy chương trình hay không disp(' '); disp('This is THE FIRST time to run the optimization program'); disp(' '); ph = ones(120,e) % Khởi tạo pheromone fitscore = zeros(120,e) % Khởi tạo fitscore selpatch=zeros(120,e); % Khởi tạo selpatch for i=1:e selpatch(1,i)=m; end selpatch(1,i)=m element=0;% Khởi tạo số ong bắt đầu U=X_random(n,i1_max, i2_max,i3_max, i4_max, i5_max, i6_max,i7_max, i8_max,i9_max,i10_max, i1_min, i2_min,i3_min, i4_min, i5_min,i6_min, i7_min,i8_min,i9_min,i10_min) for i=1:n Par_Q(i,1)=U(i,1); Par_Q(i,2)=U(i,2); Par_Q(i,3)=U(i,3); Par_Q(i,4)=U(i,4); Par_Q(i,5)=U(i,5); Par_Q(i,6)=U(i,6); Par_Q(i,7)=U(i,7); Par_Q(i,8)=U(i,8); Par_Q(i,9)=U(i,9); Par_Q(i,10)=U(i,10); temp=fn(U(i,1),U(i,2),U(i,3),U(i,4),U(i,5),U(i,6),U(i,7),U(i,8),U(i,9),U(i,10)); while temp==-1 % Nếu không tính fn U(i,:)=X_random(1,i1_max,i2_max,i3_max,i4_max,i5_max,i6_max,i7_max,i8_max,i9_max, i10_max,i1_min,i2_min,i3_min,i4_min,i5_min,i6_min,i7_min,i8_min,i9_min,i10_min) Par_Q(i,1)=U(i,1); Par_Q(i,2)=U(i,2); Par_Q(i,3)=U(i,3); Par_Q(i,4)=U(i,4); Par_Q(i,5)=U(i,5); Par_Q(i,6)=U(i,6); Par_Q(i,7)=U(i,7); Par_Q(i,8)=U(i,8); Par_Q(i,9)=U(i,9); Par_Q(i,10)=U(i,10); temp=fn(U(i,1),U(i,2),U(i,3),U(i,4),U(i,5),U(i,6),U(i,7),U(i,8),U(i,9),U(i,10)); end 156 Par_Q(i,11)=temp; Par_Q(i,12)=FC; Par_Q(i,13)=HC; Par_Q(i,14)=CO; Par_Q(i,15)=NOx; Par_Q(i,16)=PM; Par_Q(i,17)=accel1; Par_Q(i,18)=accel2; Par_Q(i,19)=accel3; Par_Q(i,20)=dist; Par_Q(i,21)=maxAcc; Par_Q(i,22)=maxSpeed; Par_Q(i,23)=gra; Par_Q(i,24)=time; element=element+1; all_bees(element,:)=[element,U(i,1),U(i,2),U(i,3),U(i,4),U(i,5),U(i,6),U(i,7),U(i ,8),U(i,9),U(i,10),temp,FC,HC,CO,NOx,PM,accel1,accel2,accel3,dist,maxAcc,maxSpeed ,gra,time]; disp(' '); disp(sprintf('The number of evaluated fitness functions: %02.0f',element)); disp(' '); end Par_Q=sortrows(Par_Q,11) all_inter_val(1,:)=[0,Par_Q(1,:)]; first=Par_Q; last=first; save all_bees all_bees; % Lưu vào nhớ save first first; save element element; save all_inter_val all_inter_val; save ph ph; save fitscore fitscore; save selpatch selpatch; U clear U; clear i; h=0; else %% Đây lần đầu chạy chương trình hay không disp(' '); disp('This is NOT the first time to run the optimization program'); disp(' '); load all_bees; % Load liệu từ nhớ load last; Par_Q=last load all_inter_val load ph load fitscore load selpatch load element; end Par_Q1=Par_Q(:,11)' for k=count+1:count+itr % Bắt đầu vòng lặp disp(' '); disp(sprintf('Interation Number: %02.0f',k)); disp(' '); if k> for h=1:e fitscore(k,h)=(Par_Q1(1,h) - Par_Q1(1,e+1)) / (sum(Par_Q1(1,1:e) - Par_Q1(1,e+1))); % Tính Fitness score selpatch(k,h)=round(((ph(k1,h))^alfa*((fitscore(k,h))^beta))/(sum((ph(k1,1:e).^alfa.*(fitscore(k,h).^beta))))*m*e); % Tính số ong tìm kiếm cục 157 if selpatch(k,h) > ph(k,h) = ph(k-1,h)* rho + (fitscore(k,h)*selpatch(k,h)); % Cập nhật Pheromone else ph(k,h) = ph(k-1,h)* rho; end end end for j=1:e % Số lượng vùng chọn for i=1:selpatch(k,j) % Số lượng ong tìm kiếm vùng chọn U=bee_dance(ngh1,ngh2,ngh3,ngh4,ngh5,ngh6,ngh7,ngh8,ngh9,ngh10, Par_Q(j,1), Par_Q(j,2),Par_Q(j,3),Par_Q(j,4),Par_Q(j,5), Par_Q(j,6),Par_Q(j,7),Par_Q(j,8),Par_Q(j,9),Par_Q(j,10),i1_min,i2_min,i3_min,i4_m in,i5_min,i6_min,i7_min,i8_min,i9_min,i10_min,i1_max,i2_max,i3_max,i4_max,i5_max, i6_max,i7_max,i8_max,i9_max,i10_max); temp=fn(U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10)); while temp==-1 U=bee_dance(ngh1,ngh2,ngh3,ngh4,ngh5,ngh6,ngh7,ngh8,ngh9,ngh10, Par_Q(j,1), Par_Q(j,2),Par_Q(j,3),Par_Q(j,4),Par_Q(j,5), Par_Q(j,6),Par_Q(j,7),Par_Q(j,8),Par_Q(j,9),Par_Q(j,10),i1_min,i2_min,i3_min,i4_m in,i5_min,i6_min,i7_min,i8_min,i9_min,i10_min,i1_max,i2_max,i3_max,i4_max,i5_max, i6_max,i7_max,i8_max,i9_max,i10_max); temp=fn(U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10)); end if temp< Par_Q(j,11) Par_Q(j,:)=[U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10),temp,FC,HC,CO,NOx, PM,accel1,accel2,accel3,dist,maxAcc,maxSpeed,gra,time]; end element=element+1; all_bees(element,:)=[element,U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10),t emp,FC,HC,CO,NOx,PM,accel1,accel2,accel3,dist,maxAcc,maxSpeed,gra,time]; disp(' '); disp(sprintf('The number of evaluated fitness functions: %02.0f',element)); disp(' '); end end % for i=e+1:n U=X_random(1,i1_max, i2_max,i3_max, i4_max, i5_max, i6_max,i7_max, i8_max,i9_max,i10_max, i1_min, i2_min,i3_min, i4_min, i5_min,i6_min, i7_min,i8_min,i9_min,i10_min); temp=fn(U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10)); while temp==-1 U=X_random(1,i1_max, i2_max,i3_max, i4_max, i5_max, i6_max,i7_max, i8_max,i9_max,i10_max, i1_min, i2_min,i3_min, i4_min, i5_min,i6_min, i7_min,i8_min,i9_min,i10_min); temp=fn(U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10)); end Par_Q(i,:)=[U(1), U(2),U(3),U(4),U(5), U(6),U(7),U(8),U(9),U(10),temp,FC,HC,CO,NOx,PM,accel1,accel2,accel3,dist,maxAcc,m axSpeed,gra,time]; element=element+1; all_bees(element,:)=[element,U(1),U(2),U(3),U(4),U(5),U(6),U(7),U(8),U(9),U(10),t emp,FC,HC,CO,NOx,PM,accel1,accel2,accel3,dist,maxAcc,maxSpeed,gra,time]; disp(' '); disp(sprintf('The number of evaluated fitness functions: %02.0f',element)); disp(' '); 158 end Par_Q=sortrows(Par_Q,11) Par_Q1=Par_Q(:,11)' all_inter_val(k+1,:)=[k,Par_Q(1,:)]; xlswrite('R_all_inter_val',all_inter_val) xlswrite('R_all_bees',all_bees) end % Kết thúc vòng lặp count=count+itr; first=last last=Par_Q; xlswrite('R_last',last) a=['fc_trq_scale' 'mc_trq_scale' 'ess_module_num' 'gc_trq_scale' 'cs_electric_launch_spd' 'cs_min_pwr' 'cs_eng_on_soc' 'cs_eng_min_spd' 'cs_lo_soc' 'cs_hi_soc']; disp(' '); disp(a); last a=['order ' 'fc_trq_scale' 'mc_trq_scale' 'ess_module_num' 'gc_trq_scale' 'cs_electric_launch_spd' 'cs_min_pwr' 'cs_eng_on_soc' 'cs_eng_min_spd' 'cs_lo_soc' 'cs_hi_soc' 'FC']; disp(' '); disp(a); all_inter_val save count count; save last last; save all_inter_val all_inter_val; save ph ph; save fitscore fitscore; save selpatch selpatch; save element element; save all_bees all_bees; plot(all_inter_val(:,1),all_inter_val(:,12)); grid on; function U=bee_dance(ngh1,ngh2,ngh3,ngh4,ngh5,ngh6,ngh7,ngh8,ngh9,ngh10,x1,x2,x3,x4,x5,x6, x7,x8,x9,x10,x1_min,x2_min,x3_min,x4_min,x5_min,x6_min,x7_min,x8_min,x9_min,x10_m in,x1_max,x2_max,x3_max,x4_max,x5_max,x6_max,x7_max,x8_max,x9_max,x10_max) U(:,1)=(x1-ngh1)+(2*ngh1.*rand(size(x1,1),1)); U(:,2)=(x2-ngh2)+(2*ngh2.*rand(size(x2,1),1)); U(:,3)=(x3-ngh3)+(2*ngh3.*rand(size(x3,1),1)); U(:,4)=(x4-ngh4)+(2*ngh4.*rand(size(x4,1),1)); U(:,5)=(x5-ngh5)+(2*ngh5.*rand(size(x5,1),1)); U(:,6)=(x6-ngh6)+(2*ngh6.*rand(size(x6,1),1)); U(:,7)=(x7-ngh7)+(2*ngh7.*rand(size(x7,1),1)); U(:,8)=(x8-ngh8)+(2*ngh8.*rand(size(x8,1),1)); U(:,9)=(x9-ngh9)+(2*ngh9.*rand(size(x9,1),1)); U(:,10)=(x10-ngh10)+(2*ngh10.*rand(size(x10,1),1)); if U(:,1)x1_max U(:,1)=x1_max; end if U(:,2)x2_max U(:,2)=x2_max; end if U(:,3)x3_max U(:,3)=x3_max; 159 end if U(:,4)x4_max U(:,4)=x4_max; end if U(:,5)x5_max U(:,5)=x5_max; end if U(:,6)x6_max U(:,6)=x6_max; end if U(:,7)x7_max U(:,7)=x7_max; end if U(:,8)x8_max U(:,8)=x8_max; end if U(:,9)x9_max U(:,9)=x9_max; end if U(:,10)x10_max U(:,10)=x10_max; end end function X=X_random(n, i1_max, i2_max,i3_max, i4_max, i5_max, i6_max,i7_max, i8_max,i9_max,i10_max, i1_min, i2_min,i3_min, i4_min, i5_min,i6_min, i7_min,i8_min,i9_min,i10_min) X=[i1_min+((rand(n,1)).*(i1_max-i1_min)), i2_min+((rand(n,1)).*(i2_maxi2_min)),i3_min+((rand(n,1)).*(i3_max-i3_min)),i4_min+((rand(n,1)).*(i4_maxi4_min)),i5_min+((rand(n,1)).*(i5_max-i5_min)), i6_min+((rand(n,1)).*(i6_maxi6_min)),i7_min+((rand(n,1)).*(i7_max-i7_min)),i8_min+((rand(n,1)).*(i8_maxi8_min)),i9_min+((rand(n,1)).*(i9_max-i9_min)),i10_min+((rand(n,1)).*(i10_maxi10_min))]; end function result=fn(i1_val,i2_val,i3_val,i4_val,i5_val,i6_val,i7_val,i8_val,i9_val,i10_val) input.modify.param={'fc_trq_scale','ess_cap_scale'}; input.modify.value={i1_val,i3_val}; [a,b]=adv_no_gui('modify',input); 160 % Tính khối lượng phận fc_mass1=round(evalin('base','fc_mass_scale_fun(fc_mass_scale_coef,fc_spd_scale,f c_trq_scale,fc_base_mass,fc_acc_mass,fc_fuel_mass)')); mc_mass1=round(i2_val*56.75); ess_mass1=evalin('base','round(ess_mass_scale_fun(ess_mass_scale_coef,ess_ module_num,ess_cap_scale,ess_module_mass))'); gc_mass1=round(i4_val*32.7); ex_mass1=round(evalin('base','ex_mass_scale_fun(ex_mass_scale_coef,fc_pwr_ scale,ex_mass)')); total_vehicle_mass=round(fc_mass1+mc_mass1+ess_mass1+gc_mass1+918+ex_mass1 +136); input.modify.param={'fc_trq_scale','mc_trq_scale','ess_cap_scale','gc_trq_ scale','cs_electric_launch_spd','cs_min_pwr','cs_eng_on_soc','cs_eng_min_spd','cs _lo_soc','cs_hi_soc','veh_mass','wh_1st_rrc'}; input.modify.value={i1_val,i2_val,i3_val,i4_val,i5_val,i6_val,i7_val,i8_va l,i9_val,i10_val,total_vehicle_mass,0.015}; [a,b]=adv_no_gui('modify',input); input.cycle.param={'test.name'} ; input.cycle.value={'CYC_CECDC'}; [a,b]=adv_no_gui('drive_cycle',input); % (1) if a==0 FC=(100*3.78541178)/(b.cycle.mpgge*1.609344); % liter/100km HC=b.cycle.hc_gpm/1.609344; %g/km CO=b.cycle.co_gpm/1.609344; %g/km NOx=b.cycle.nox_gpm/1.609344; %g/km PM=b.cycle.pm_gpm/1.609344; %g/km fail=0; else result=-1; fail=-1; end input.accel.param={'spds','dist_in_time', ' time _in_ dist ','max_rate_bool','max_speed_bool'}; input.accel.value={[0 60; 40 60;0 85],5,0.2/1.609344,1,1}; [a,b]=adv_no_gui('accel_test',input); if a==0 if fail==0 % Nếu lỗi xuất accel1=b.accel.times(1); accel2=b.accel.times(2); accel3=b.accel.times(3); if accel1==-1 % Nếu không tính accel1 accel1=15; % Nhằm tăng fitness function a1=-1; else a1=0; end if accel2==-1 accel2=8; a2=-1; else a2=0; end if accel3==-1 accel3=26; a3=-1; else a3=0; end dist=b.accel.dist*0.3048; % Quãng đường 5s dist=b.accel.time; % Thời gian tăng tốc maxAcc=b.accel.max_rate*0.3048; % Gia tốc cực đại 161 maxSpeed=b.accel.max_speed*1.60934; % Tốc độ cực đại input.grade.param={'speed','duration','add_mass '}; input.grade.value={12.427,1200,0}; [a,b]=adv_no_gui('grade_test',input); gr=b.grade.grade; c=length(gr); if c==0 gra=0; else gra=gr end re=0.85*FC/6.8829+0.05*HC/1.0039+0.05*CO/1.1315+0.05*NOx/0.21099+3.5*max(0,120maxSpeed)/120+3.5*max(0,11-gra)/11+3.5*max(0,time-20.5)/20.5; % Giá trị hàm mục tiêu result=re; disp(' '); disp(['FC (liter/100km) is: ', num2str(FC)]); disp(['HC (g/km) is: ', num2str(HC)]); disp(['CO (g/km) is: ', num2str(CO)]); disp(['NOx (g/km) is: ', num2str(NOx)]); disp(['PM (g/km) is: ', num2str(PM)]); if a1~=-1 disp(['The time to accelerate from (0 - 97)km/h is (Standard =100km/h ): ', num2str(maxSpeed)]); if c==0 disp('ADVISOR CAN NOT calculate the grade: '); else disp(['The max grade is (Standard >=12%): ', num2str(gra)]); end disp(['The value of fitness function is: ', num2str(result)]); disp(' '); clear gr; clear re; end else result=-1; end end end

Ngày đăng: 28/10/2016, 10:17

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan