混合动力汽车动态规划算法理论油耗计算与视频教学,使用matlab编写快速计算程序,整个工程结构模块化,可以快速改为串联,并联,混联等。 控制量可以快速扩展为档位,转矩,转速等。 状态量一般为SOC,目标函数可设置为油耗,电耗,以及换挡频次等加权。 程序清晰易调,输出结果定量统计和图表详尽。 DP为混合动力汽车燃油经济性提供了一种极限油耗的方法,利用DP能够得到特定构型在特定工况条件下的极限油耗,为基于规则的控制策略制定和不同规则的制定提供了理论参考和对比指标。 可提供技术指导支持。 DP动态规划初始化文件利用结构体定义各个部件参数,例如发动机,发电机,电机,变速箱,工况,减速器,电池等部件。 能够方便的修改不同部件参数,进行定制开发。 DP动态规划结果后处理程序,绘制多个控制量,状态量等分析图。 另外还绘制发动机工作点,发动机工作时间MAP等。 不同工作模式的电机工作点。 出图丰富,可直接用于论文出版。 录制串联动态规划算法理论讲解与代码分析教学视频,方便快速学习与程序理解。 可提供串联,并联(包括P2和P4),混联等构型动态规划程序。

一、程序整体概述

本程序基于MATLAB开发,聚焦混合动力汽车(HEV)EVT(电子无级变速)构型的理论油耗计算,采用动态规划(DP)算法实现全局能量优化分配。程序工程结构模块化程度高,支持快速适配串联、并联、混联等多种动力构型,核心通过对发动机、电机、发电机、电池等关键部件的协同控制,在满足车辆行驶工况需求的前提下,求解最低油耗运行策略。

混合动力汽车动态规划算法理论油耗计算与视频教学,使用matlab编写快速计算程序,整个工程结构模块化,可以快速改为串联,并联,混联等。 控制量可以快速扩展为档位,转矩,转速等。 状态量一般为SOC,目标函数可设置为油耗,电耗,以及换挡频次等加权。 程序清晰易调,输出结果定量统计和图表详尽。 DP为混合动力汽车燃油经济性提供了一种极限油耗的方法,利用DP能够得到特定构型在特定工况条件下的极限油耗,为基于规则的控制策略制定和不同规则的制定提供了理论参考和对比指标。 可提供技术指导支持。 DP动态规划初始化文件利用结构体定义各个部件参数,例如发动机,发电机,电机,变速箱,工况,减速器,电池等部件。 能够方便的修改不同部件参数,进行定制开发。 DP动态规划结果后处理程序,绘制多个控制量,状态量等分析图。 另外还绘制发动机工作点,发动机工作时间MAP等。 不同工作模式的电机工作点。 出图丰富,可直接用于论文出版。 录制串联动态规划算法理论讲解与代码分析教学视频,方便快速学习与程序理解。 可提供串联,并联(包括P2和P4),混联等构型动态规划程序。

程序共包含138个代码文件,按功能可划分为初始化模块动力系统模型模块动态规划核心模块后处理分析模块辅助工具模块,整体遵循“参数初始化→动态规划寻优→结果分析输出”的运行逻辑,适用于混合动力汽车动力系统设计验证、控制策略优化及油耗性能评估场景。

二、核心文件与模块功能详解

(一)初始化模块:参数配置与工况预处理

1. 核心文件:`DPParaInit.m`

作为程序入口,负责加载工况数据、初始化全局参数并计算传动系需求,是后续所有计算的基础。

  • 数据加载:加载工况文件cycYMXEVT.mat(包含车速、加速度、档位等工况数据)、发动机MAP数据engineDATA420_real.mat、电机参数文件motorMG1.mat/motorMG2.mat
  • 参数初始化:定义7大类全局参数(变量均声明为global,供其他文件调用),具体如下表:
参数类别 关键参数及取值 功能说明
车辆参数 质量=49000kg、风阻系数=0.56、迎风面积=10.27m² 计算行驶阻力(滚动阻力、空气阻力等)
发动机参数 最高转速=[800-1900]rpm、最高扭矩=[1496-2104]Nm、燃油密度=0.8333kg/L 约束发动机运行边界,计算燃油消耗
变速箱参数 4档变速比=[9.28,4.46,2.08,1]、传动效率=0.97 实现动力传递与转速/扭矩换算
电机/发电机参数 电机最高转速=2500rpm、最大扭矩=2000Nm、再生制动功率限制=150kW 约束电机运行范围,实现能量回收
电池参数 初始SOC=0.7、容量=50Ah、电压=384V、内阻=0.08Ω 计算电池充放电电流与SOC变化
工况参数 车速=cycv(m/s)、加速度=cyca(m/s²)、档位=cyc_gear 提供车辆行驶需求输入
动力学参数 车轮半径=0.546m、滚动阻力系数=0.008 计算车轮需求扭矩与转速
  • 关键计算:调用VehicleModel.m计算车轮需求功率(whPow)、扭矩(whTt)、转速(whRotaSpd),并进一步换算为传动系需求扭矩(DemTtShaft)与转速(DemSpdShaft),为动力系统控制提供目标值。
2. 依赖文件:`VehicleModel.m`

实现车辆纵向动力学计算,是工况需求向部件需求转换的核心工具。

  • 阻力计算:基于动力学方程,分别计算滚动阻力(Fr)、坡度阻力(Fi)、空气阻力(Fa)、加速阻力(Fj),总阻力Ft=Fr+Fi+Fa+Fj
  • 车轮需求计算:根据总阻力与车轮参数,计算车轮需求扭矩(whTt=Ft×车轮半径)、转速(whRotaSpd=车速/(车轮半径)×30/π)、功率(whPow=whTt×whRotaSpd/9549);
  • 结果输出:将车轮需求传递至DPParaInit.m,用于后续传动系需求换算。

(二)动力系统模型模块:EVT构型能量流控制

核心文件:`hevEVT.m`

定义EVT构型的动力分配逻辑与部件控制规则,是动态规划算法的“模型核心”,输入为当前状态(SOC)与控制量(发动机扭矩/转速),输出为下一时刻状态(SOC)、成本(油耗)与可行性判断(I)。

  • 工况分类处理:根据当前车速与需求功率,区分三类工况并执行不同控制逻辑:
    | 工况类型 | 触发条件 | 控制逻辑 |
    |----------|----------|----------|
    | 驻车工况 | 车速=0 | 发动机、电机、发电机均停止工作,油耗=0,SOC不变 |
    | 制动工况 | 车轮需求功率<0且车速≥3km/h | 发动机停机,电机切换为发电机回收能量,SOC升高 |
    | 驱动工况 | 车轮需求功率≥0 | 协同发动机、电机、发电机分配扭矩,满足传动系需求 |
  • 部件约束判断
  • 发动机:基于外特性曲线(engPara.maxSpd/maxTrq),判断当前扭矩/转速是否超出边界,超出则标记为不可行(ine=1);
  • 电机/发电机:通过插值(interp1)获取当前转速下的最大扭矩(Tmmax/Tgmax),判断实际扭矩是否超出范围,超出则标记为不可行(inm=1/ing=1);
  • 电池:基于充放电电流(Ib)与SOC范围(0.5-0.9),判断电池是否过充/过放,超出则标记为不可行(inb=1)。
  • 状态更新:基于电池充放电电流计算下一时刻SOC:
  • 电池电流计算:Ib=emotor×(v-sqrt(v²-4×r×Pb))/(2×r)v为电池开路电压,r为内阻,Pb为电池功率);
  • SOC更新:X{1}=-Ib/(电池容量×3600)+当前SOC(负号表示放电时SOC降低)。
  • 成本计算:以发动机燃油消耗为优化目标,C{1}=mdotfuel(燃油质量流量,单位g/s),基于发动机油耗MAP(engPara.xi/yi/zi)通过插值获取。

(三)动态规划核心模块:全局最优寻优

核心文件:`dpm.m`及系列衍生文件(`dpm_backward.m`/`dpm_forward.m`等)

实现动态规划的反向寻优与正向仿真,是“算法核心”,支持三种边界处理方法(none/Line/LevelSet),默认采用Line方法提升计算效率。

1. 关键概念定义
  • 状态量:仅SOC(电池荷电状态),离散范围0.5-0.9,默认离散为80个点;
  • 控制量:发动机扭矩(0-2100Nm,离散为50个点)、发动机转速(0-1900rpm,离散为50个点);
  • 成本函数:累计油耗(C{1}的积分),目标为最小化总油耗;
  • 边界条件:初始SOC=0.7,最终SOC约束在0.7-0.71(确保仿真前后电池能量平衡)。
2. 核心流程
  • 反向寻优(dpm_backward.m:从最终时刻(prb.N)倒推至初始时刻(1):
    1. 网格生成:对当前时刻的状态量(SOC)与控制量(发动机扭矩/转速)生成离散网格;
    2. 模型调用:调用hevEVT.m,计算每个网格点的下一时刻状态(SOC)、成本(油耗)与可行性;
    3. 最优成本计算:对每个状态,选择最小成本对应的控制量,更新“成本-控制”映射表(dyn.Jo/dyn.Uo);
    4. 边界处理:对超出部件约束的状态,标记为不可行(成本= options.MyInf,默认1000)。
  • 正向仿真(dpm_forward.m:从初始时刻(1)顺推至最终时刻(prb.N):
    1. 初始状态:设置初始SOC=0.7;
    2. 控制量查询:基于反向寻优生成的dyn.Uo,查询当前状态对应的最优控制量(发动机扭矩/转速);
    3. 状态更新:调用hevEVT.m,计算下一时刻SOC;
    4. 结果记录:记录全程的SOC、油耗、部件运行参数(发动机转速/扭矩、电机功率等)。
3. 辅助文件功能
  • dpm_interpn.m:实现多维度插值,用于成本映射与边界判断;
  • dpmboundaryline_lower.m/upper.m:处理Line边界方法,优化寻优范围,提升计算效率;
  • dpmmodelinv.m:实现模型逆解,用于边界线计算。

(四)动态规划主程序模块:参数配置与算法启动

核心文件:`hev_main.m`

作为动态规划算法的“入口开关”,负责配置DP参数、调用核心函数并输出初步结果。

  • 网格配置:定义状态量与控制量的离散化参数(grd.Nx/grd.Nu);
  • 问题定义:设置时间步长(prb.Ts=1s)、总步数(prb.N=8809×1/prb.Ts+1)、扰动变量(prb.W=工况车速/加速度/档位);
  • 选项配置:调用dpm()生成默认选项,设置不可行成本(options.MyInf=1000)、边界方法(options.BoundaryMethod='Line');
  • 算法调用[res, dyn] = dpm(@hev, par, grd, prb, options),启动反向寻优与正向仿真;
  • 初步结果输出:计算百公里油耗(fuel100km=sum(res.C{1})/工况里程×100/燃油密度),并保存仿真结果(save)。

(五)后处理分析模块:结果统计与可视化

1. 核心文件:`PostProcessing.m`

对动态规划仿真结果进行多维度分析,输出关键性能指标与可视化图表,是结果解读的核心工具。

  • 油耗统计
  • 总燃油消耗量(fuelTotalVolume=trapz(时间, 油耗率/3600));
  • 百公里油耗(fuel100kmConsum=fuelTotalVolume/工况里程×100);
  • 发动机平均油耗率(beAvgAbsolute=总燃油质量/总有效功率)。
  • 效率分析
  • 车辆系统效率(vehEffCyc=总驱动能量/总消耗能量);
  • 传动系效率(transEffCyc=总驱动能量/(发动机输出能量+电池能量变化+回收能量));
  • 电机效率:分别计算放电效率(motorAvgDischrgEff)、充电效率(motorAvgChrgEff)、再生制动效率(motorAvgRGBEff)。
  • 能量统计
  • 总驱动能量(energyDriveReq=trapz(时间, 驱动功率×1000)/1000);
  • 再生制动回收能量(regEnergy);
  • 发动机工作时间(engONTime=发动机扭矩>0的时刻数)与平均功率(engAvgPow=总有效功率/工作时间)。
  • 可视化输出
  • 关键图表:SOC变化曲线、发动机/电机工作点分布(叠加外特性曲线)、档位变化曲线、转速/扭矩时序曲线;
  • 结果导出:将统计指标与图表保存至Excel文件(SimResults_*.xls),便于后续分析。
2. 辅助文件:`WorkPercentStat.m`

实现部件工作点分布统计,量化部件运行状态占比:

  • 发动机工作点统计:将转速-扭矩平面划分为网格,统计每个网格的工作时间占比与油耗占比,生成3D柱状图;
  • 负载率统计:计算发动机负载率(engLoad=实际扭矩/最大扭矩×100%),统计不同负载率-转速区间的工作时间占比;
  • 结果输出:生成工作点分布统计图(hf1/hf2/hf3),用于评估部件运行合理性(如是否避开低效区)。

(六)发动机优化工具模块:效率曲线计算与绘制

1. `EngMaxCharact.m`:发动机外特性曲线提取
  • 功能:基于发动机MAP数据,提取不同转速下的最大扭矩,生成外特性曲线;
  • 核心逻辑:对转速数据按100rpm取整,计算转速差值,找到转速跳变点,提取对应扭矩作为该转速下的最大扭矩;
  • 输出:外特性转速(fcMaxSpd)与扭矩(fcMaxTrq),用于hevEVT.m中的发动机边界判断。
2. `EngOptCur.m`:发动机最优油耗曲线计算
  • 功能:在等功率条件下,找到最小油耗对应的转速-扭矩组合,生成最优运行曲线;
  • 核心逻辑
    1. 生成等功率序列(pow),覆盖发动机功率范围;
    2. 对每个功率,生成转速序列,计算对应扭矩(trqXi=功率×1000/(转速×π/30));
    3. 基于外特性曲线剔除超出边界的扭矩,通过插值(griddata)获取各点油耗,找到最小油耗点;
  • 输出:最优转速-扭矩-功率-油耗映射表(finalMap),为控制策略优化提供参考。
3. `EngEquFuelCurPlt.m`:发动机油耗曲线绘制
  • 功能:生成发动机转速-扭矩-油耗三维MAP图,直观展示发动机效率分布;
  • 核心逻辑:通过meshgrid生成转速-扭矩网格,采用三次插值(cubic)填充油耗数据,生成等高线图(contour),并叠加外特性曲线;
  • 输出:发动机油耗MAP图(hf),用于可视化发动机高效区范围。

三、程序运行流程与注意事项

(一)运行流程

  1. 环境准备
    - 安装MATLAB(推荐R2018b及以上版本);
    - 确保工况文件(cycYMXEVT.mat)、发动机/电机参数文件(engineDATA420_real.mat/motorMG1.mat等)与代码文件在同一目录。
  1. 参数初始化
    - 运行DPParaInit.m,完成全局参数配置与工况预处理;
    - 若出现高版本插值报错(interp1函数),删除代码中'linear*''extrap'参数(如v=interp1(soc_list,Voc,inp.x{1}))。
  1. 动态规划计算
    - 运行hev_main.m,启动反向寻优与正向仿真;
    - 程序自动输出百公里油耗(fuel100km),并保存仿真结果(res-时间.mat)。
  1. 结果分析
    - 运行PostProcessing.m,输入仿真结果(res)与全局参数,生成统计报告与可视化图表;
    - 运行WorkPercentStat.m,查看发动机/电机工作点分布,评估部件运行效率。

(二)注意事项

  1. 参数一致性:确保DPParaInit.m中的部件参数(如发动机最大扭矩、电池容量)与实际车型匹配,否则会导致仿真结果偏差;
  2. 网格离散化:状态量/控制量的离散点数需平衡精度与效率(默认80/50点),点数过多会导致计算时间大幅增加,过少会降低优化精度;
  3. 边界条件调整:若hev_main.m中出现“无可行解”报错(Q=Inf),可适当放宽SOC边界(如grd.XN{1}.lo=0.6/hi=0.8)或扩大控制量范围;
  4. 数据路径:所有依赖文件(如cycYMXEVT.mat)需与代码文件在同一目录,或在代码中指定完整路径(如load('F:\data\cycYMXEVT.mat'))。

四、程序核心价值与扩展方向

(一)核心价值

  1. 全局优化:动态规划算法可实现全工况下的油耗全局最优,避免局部最优解(如传统规则控制的低效问题);
  2. 模块化设计:构型变动仅需修改对应的模型文件(如串联构型修改hevSeries.m),无需改动DP核心逻辑,适配性强;
  3. 结果全面:不仅输出百公里油耗,还提供部件效率、能量流分布、工作点占比等多维度指标,支撑深度分析。

(二)扩展方向

  1. 构型扩展:基于现有框架,新增串联(hevSeries.m)、并联(hevParallel.m)模型,实现多构型对比;
  2. 工况扩展:支持自定义工况(如NEDC、WLTC),只需替换cycYMXEVT.mat中的车速、加速度数据;
  3. 控制策略优化:将EngOptCur.m生成的最优曲线融入规则控制,实现“DP优化+规则落地”的闭环;
  4. 硬件在环(HIL)集成:将hevEVT.m封装为S-Function,导入Simulink,实现HIL测试,验证算法实时性。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐