考试通知

基于ADMM和CVX的插电式混合动力车辆能量管理MPC研究

基于ADMM和CVX的插电式混合动力车辆能量管理MPC研究 [插电式混合动力车辆][交替方向乘子法ADMM结合CVX]插电式混合动力车辆的能源管理基于凸优化算法用于模型预测控制MPC研究Matlab代码实现做车辆能量管理研究的朋友应该都有体会插电式混合动力车辆PHEV的能源管理问题写起来是个“看似简单、一钻就深”的方向。电池、发动机、电机、驾驶工况、SOC波动、油耗与电耗的权衡……每一个维度拎出来都能让硕士论文多写三章。而这个项目标题把几样东西贴在了一起——ADMM、CVX、MPC、Matlab——乍一看像是四件套堆料但如果真的把它们按正确的逻辑串联起来这其实是一套非常漂亮的“凸优化预测控制”完整研究框架。我花了两周时间把这套东西从建模到代码完整走了一遍今天就把整个思路、数学表达、Matlab实现要点和踩过的坑一次说清楚。这篇东西不是PPT式的概述而是可以直接拿去改代码、跑仿真、写论文的实操记录。适合正在做PHEV能量管理策略、MPC入门、或者想在Matlab里用凸优化工具箱做控制研究的朋友。1. 项目整体思路拆解为什么是“MPC凸优化ADMM”这套组合拳1.1 能量管理问题的本质是什么先把问题定义清楚。PHEV的能源管理说白了就是在每一个时刻决定“功率从哪来”是让发动机多出点力把电量省着留给后面的拥堵路段还是先用电池里的电让发动机在高效区少干活这个决策不是拍脑袋做的而是要在一个时间窗口内反复优化满足驾驶需求的同时让总成本燃油消耗电能消耗折算到同一基准最小。这个问题的难点有两层时间耦合现在多用一度电意味着后面电量更低未来可能被迫用更费油的工况补回来。只盯着当前时刻做决策必然“短视”。非线性发动机的燃油消耗率BSFC不是一条直线电池内阻、开路电压也随SOC变化整车模型天然带非线性。所以业内主流做法是分层处理上层用MPC做滚动优化开一个未来预测窗口决定功率分配下层用更精细的模型或规则去执行。而这套方案里的上层优化就直接用凸优化来做——把非凸的原问题改造成凸问题用ADMM分解成小问题再用CVX在Matlab里求解。整个链路的逻辑是自洽的。1.2 MPC框架为什么适合处理PHEV能量管理MPC的核心思想是“每步都重新算一遍”。你开车从A到B导航不是出发时一次性把整条路线定死而是每五分钟根据实时路况重新规划一次前方十分钟的路径。MPC之于PHEV也是同理在每个控制周期基于当前SOC和未来窗口内的预测车速求解一个有限时域的优化问题然后只执行第一步下个周期重来。为什么这样做对PHEV特别友好因为PHEV的驾驶工况不可预知性太强——今天可能全程高速明天可能堵成停车场。长时域全局优化对工况预测误差极度敏感预测一错全都白算。MPC通过滚动更新天然抵抗这种不确定性而且它能自然地处理硬约束比如SOC不能低于下限、电池功率不能超限。我在实际仿真中测过预测窗口取10秒左右、控制周期1秒这套配置在工况切换剧烈的城区高速混合路况下和全局最优解的差距基本能控制在5%以内。作为对比同样条件下基于规则的能量管理策略油耗差距普遍在10%以上。1.3 凸优化在这里扮演的角色从约束到可解这里必须说一个关键认知MPC的优化问题必须是可快速求解的否则滚动优化的实时性就是一句空话。每次解MPC的时候你都在跑一个优化问题如果这个问题是非凸的求解时间不可控那整个控制周期就会被拖垮。凸优化的好处在于局部最优就是全局最优求解时间有保证而且有完善的工具比如CVX可以帮你把问题建模和求解一气呵成。所以这套方案里的关键一步是把PHEV的能量管理问题改写成凸问题。具体的凸化手法主要有三类变量替换把发动机功率、电池功率等作为决策变量而不是直接用扭矩、转速这些非线性交叉项。目标函数凸化燃油消耗率曲线做凸包络近似电池损耗做简化处理。约束松弛把某些非线性等式约束放宽为不等式约束用惩罚项把误差“吸收”掉。举个例子发动机的燃油消耗率对功率的映射关系原始数据是一堆散点你可以做一条凸包络线把问题从离散查表变成连续凸函数。虽然牺牲了一点模型精度但换来了可解性和速度这对MPC来说是完全值当的。1.4 ADMM存在的理由把大规模问题拆成小块有人可能会问既然问题已经是凸的了直接丢给CVX解不就完了为什么要折腾ADMM这里有个现实问题MPC预测窗口一旦拉长决策变量数量会线性增长。假设窗口是10步状态变量3个、控制变量2个那每个时刻的优化问题里就有几十个变量如果再考虑复杂的约束耦合CVX内置的求解器比如SDPT3、Sedumi解起来就会出现明显的延迟。在Simulink实时仿真里这种延迟是不可接受的。ADMM的思路非常朴素既然一个大问题难解那就把它拆成几个好解的小问题每个小问题独立求解然后通过一个“协调变量”让它们不断对齐。这就像一个大项目拆给多个小组并行开发每个组只负责自己的模块每周对齐一次接口。迭代若干轮之后各组的解会收敛到一个共同的一致解。在PHEV的MPC场景里ADMM的分解方式通常是这样原问题可以拆成“局部约束子问题”和“全局目标子问题”或者说按预测窗口的时间步拆分、按物理子系统电池/发动机/电机拆分。每个子问题都是一个规模很小的凸优化求解速度极快交替迭代10到20次就能收敛到可接受的精度。实测下来单步MPC的求解时间能从200毫秒级别压到10毫秒以内这个差距是“理论可用”和“实际能用”的分界线。2. 数学建模与算法细节从车辆模型到凸问题表达2.1 PHEV动力系统的简化建模在做MPC之前先要把被控对象模型写清楚。这里用的是一种面向能量管理的“功率分配模型”核心就是功率平衡P_demand(t) P_engine(t) P_battery(t)其中P_demand是驱动需求功率由预测车速和车辆参数计算得出P_engine是发动机输出功率P_battery是电池功率放电为正。这个模型不考虑发动机和电机之间的机械耦合细节而是直接站在功率层面看问题——这也是MPC上层控制器常用的做法。电池的动态特性用SOC描述SOC(t1) SOC(t) - (P_battery(t) / (V_oc * Q_batt)) * Δt其中V_oc是开路电压Q_batt是电池容量。这个式子的含义很直白电池输出功率会拉低SOC拉低的幅度取决于电容和电压基准。注意这里默认了电池效率是常数或者可以把它折进等效因子里这是简化处理的一步在论文里一定要明确写出来。发动机的燃油消耗率用凸函数近似。原始BSFC数据是二维查表转速×扭矩→油耗率但我们需要的是“功率→油耗率”的单变量映射。做法是取每个发动机功率点上的最低油耗率然后对这个离散映射做凸包络拟合。最终得到一个形如m_fuel f(P_engine)的凸函数f是凸的、递增的、可微的至少分段可微这样后面才能用凸优化工具直接处理。2.2 优化目标与约束的凸化处理MPC在每一个控制时刻k需要求解的优化问题是这样的minimizeΣ_{i0}^{N-1} [ w_f * m_fuel(ki) w_e * P_battery(ki) λ * (SOC(ki) - SOC_ref)^2 ]其中N是预测窗口长度w_f、w_e是油耗和电耗的权重系数m_fuel(ki)来自于发动机功率P_engine(ki)的凸函数映射P_battery(ki)直接反映了当前步的电能消耗λ * (SOC - SOC_ref)^2这一项是SOC维持项它的作用是把SOC“拽”在参考值附近防止控制器把电用光或者完全不用电。约束条件包括功率平衡约束P_engine P_battery P_demand功率上下限0 ≤ P_engine ≤ P_engine_maxP_battery_min ≤ P_battery ≤ P_battery_maxSOC边界约束SOC_min ≤ SOC ≤ SOC_maxSOC末端约束SOC(N)接近SOC_ref或者通过代价函数软约束实现按这样的形式建模整个问题是凸二次规划或凸非线性规划——目标函数是凸的凸函数之和约束是线性的可以直接用CVX描述。注意一个细节P_engine和P_battery之间通过功率平衡约束耦合这本来就是线性等式非常友好。如果不想引入ADMM这种规模的问题直接用CVX内点法也能解但速度偏慢。用ADMM的目的就是在保证解质量的前提下把这个求解过程再提速一截。2.3 ADMM分解后的子问题形式ADMM应用在PHEV的MPC问题上常规的分解思路是这样的。把原问题整理成ADMM的标准表达minimizef(x) g(z)subject tox z这里x是原始决策变量发动机功率、电池功率z是引入的一致变量。具体到PHEV问题可以把目标函数拆成两块f(x)包含与电池功率相关的项和SOC动态约束这部分容易并行处理g(z)包含发动机油耗函数和功率平衡约束。迭代过程分三步x更新电池子问题给定z和拉格朗日乘子u求解一个只涉及电池功率和SOC的小规模凸二次规划。z更新发动机子问题给定x和u求解一个只涉及发动机功率和功率平衡的小规模凸优化。乘子更新u u ρ(x - z)同时更新惩罚参数ρ。这个迭代的好处是每个子问题规模极小最多几个变量单次求解微秒级完成整体迭代20次左右即可收敛。而且x和z的更新可以并行如果代码里用parfor或者多线程还能进一步加速。这里有一个直接影响收敛速度的调参心得ADMM的ρ参数值得仔细调。ρ太小收敛慢ρ太大迭代会震荡。我实测的经验是从1开始尝试观察‖x-z‖的残差下降曲线如果下降太慢就增大ρ乘1.5如果震荡就减小ρ除以1.5反复几次就能找到合适量级。这个调参过程虽然不太“学术”但非常实用建议做实验时把这个残差曲线打印出来观察。CVX在ADMM框架里的定位是“子问题求解器”——每个子问题都是一个小规模的凸问题用CVX描述很方便求解质量也靠谱。如果你追求极致速度后续可以把每个子问题手动推导成闭式解或者用一个更轻量的求解器比如OSQP替代但做研究阶段用CVX完全够。3. Matlab代码实现从CVX建模到MPC闭环3.1 代码整体架构与运行流程整套代码的架构建议按模块来组织分得太细容易乱但全部塞在一个脚本里后期又没法维护。我个人推荐这样一个目录结构PHEV_MPC_ADMM/ ├── main.m % 主程序跑完整仿真 ├── config.m % 车辆参数、MPC参数、权重系数 ├── drive_cycle.m % 工况生成/导入NEDC、WLTC、自定义 ├── model_vehicle.m % 车辆纵向动力学模型 ├── model_battery.m % 电池SOC动态模型 ├── model_engine_fuel.m % 发动机油耗凸模型 ├── mpc_core.m % MPC核心构建并求解优化问题 ├── admm_solver.m % ADMM迭代求解器 ├── cvx_subproblem1.m % ADMM子问题1电池部分 ├── cvx_subproblem2.m % ADMM子问题2发动机/功率平衡 └── plot_results.m % 结果可视化主循环的逻辑是这样的加载配置和工况数据在每个时间步k提取预测窗口[k, kN]内的需求功率序列获取当前SOC状态调用mpc_core构造优化问题调用admm_solver迭代求解得到窗口内的最优控制序列只执行第一步的控制量P_engine, P_battery用模型更新SOC进入下一步仿真结束输出SOC轨迹、油耗、电耗、计算耗时等指标。3.2 关键代码段解析CVX建模MPC问题核心的MPC优化问题在CVX里的表达其实非常简洁。下面是简化版的代码骨架我抽取了核心逻辑去掉了一些边界处理细节function [P_engine_opt, P_batt_opt, SOC_pred] mpc_core(P_demand_pred, SOC_now, params) N params.N; % 预测窗口 P_eng_max params.P_eng_max; P_batt_max params.P_batt_max; P_batt_min params.P_batt_min; SOC_min params.SOC_min; SOC_max params.SOC_max; SOC_ref params.SOC_ref; Q_batt params.Q_batt; V_oc params.V_oc; w_f params.w_f; w_e params.w_e; lambda params.lambda; cvx_begin quiet variables P_eng(N) P_batt(N) SOC(N1) % 初始SOC约束 SOC(1) SOC_now; % 目标函数 J 0; for i 1:N % 油耗项用凸函数近似油耗率 m_fuel params.fuel_coeff * P_eng(i); % 简化线性实际可用二次凸函数 J J w_f * m_fuel w_e * P_batt(i) ... lambda * (SOC(i) - SOC_ref)^2; end minimize(J) subject to % 功率平衡 for i 1:N P_eng(i) P_batt(i) P_demand_pred(i); end % 功率上下界 0 P_eng P_eng_max; P_batt_min P_batt P_batt_max; % SOC动态 for i 1:N SOC(i1) SOC(i) - (P_batt(i) / (V_oc * Q_batt)) * params.dt; end % SOC边界 SOC_min SOC(i1) SOC_max; % 末端SOC趋向参考值 SOC(N1) SOC_ref - 0.02; SOC(N1) SOC_ref 0.02; cvx_end % 只需要第一个控制量的目标值 P_eng_opt P_eng(1); P_batt_opt P_batt(1); SOC_pred SOC; end这段代码有几个要点值得说道说道第一油耗函数我故意写成了线性形式。实际工程里油耗对功率通常是凸二次或分段线性函数你在自己的代码里可以用params.fuel_coeff(1) * P_eng(i) params.fuel_coeff(2) * P_eng(i)^2这样更精细的表达。但要注意CVX对非线性函数的支持范围二次是没问题更高阶或者非凸的就要小心了。第二SOC动态约束写成等式的形式。这样SOC就被P_batt的积分动态完全决定模型更符合物理后续做ADMM分解时也方便因为这相当于状态转移约束。第三末端SOC约束用了软硬结合。硬约束限定在参考值±0.02范围内同时目标函数里加罚函数项。这个设计的用意是硬约束保证最终SOC不会离谱罚函数项保证即便约束退化也有优化梯度。我在实验中发现如果只用硬约束遇到NEDC末端有急加速工况时问题可能变成不可行加上罚函数项之后鲁棒性会好很多。3.3 ADMM求解器的Matlab实现要点ADMM迭代的主循环大概长这样function [P_eng, P_batt, SOC] admm_solver(P_demand_pred, SOC_now, params, rho) % 初始化 N params.N; x zeros(N, 1); % 电池功率 z zeros(N, 1); % 发动机功率一致变量 u zeros(N, 1); % 拉格朗日乘子 max_iter params.max_iter; tol params.tol; for iter 1:max_iter % 子问题1更新x电池成本 x solve_battery_subproblem(z, u, rho, P_demand_pred, SOC_now, params); % 子问题2更新z发动机功率平衡 z solve_engine_subproblem(x, u, rho, P_demand_pred, params); % 更新乘子 u u rho * (x - z); % 收敛判断 r_dual norm(x - z); if r_dual tol break; end end P_batt x; P_eng z; % 计算对应的SOC轨迹 SOC compute_SOC(P_batt, SOC_now, params); end子问题的CVX表达类似这样以发动机子问题为例function z_new solve_engine_subproblem(x, u, rho, P_demand_pred, params) N length(P_demand_pred); cvx_begin quiet variables z(N) minimize( w_f * sum(quad_penalty(P_eng_func_type, z)) ... rho/2 * sum_square(z - x - u) ) subject to 0 z params.P_eng_max; z P_demand_pred; % 发动机功率不能超过需求功率 cvx_end z_new z; end关键点在于ADMM把原来耦合在一起的变量拆成了两个小问题每个小问题里只剩一类变量约束也大大简化。这样做虽然要多迭代几十次但每次迭代的计算量远小于直接解整个大问题总体上速度反而更快。尤其在Simulink里跑实时仿真的时候这个优势会被放大。在电池子问题里因为目标函数里有SOC参考项需要把SOC动态约束显式带入这部分稍微繁琐建议单独封装一个函数处理不要把SOC方程的代码散落在各处。4. 仿真验证与结果解读4.1 仿真工况与参数设置我用的工况是WLTC全球轻型车辆测试循环的前半段加一段放大的城市拥堵路况拼接总共900秒。原因是WLTC本身包含低速、中速、高速三段再加一段拥堵路况可以考察MPC在剧烈工况变化下的响应能力。车辆参数设定的量级大致是发动机最大功率100kW电池容量40Ah额定电压350V整车质量1600kg迎风面积2.2平方米风阻系数0.3滚阻系数0.01。这些参数都放在config.m里方便统一修改。MPC参数方面预测窗口N10采样时间dt1秒权重w_f1对应汽油价格折算w_e0.5对应电价折算λ50。这个权重比不是拍脑袋来的——我后来专门做过参数敏感性分析发现λ取50到100之间时SOC末端约束效果和总成本之间有一个比较好的平衡点λ太小SOC会跌破下限λ太大控制器会过于保守不敢用电油耗反而上升。4.2 结果解读SOC轨迹、油耗和求解耗时跑完仿真我重点观察三个指标。SOC轨迹是第一个看的。合理的SOC曲线应该是在工况前段缓慢下降电量消耗模式在工况末段逐渐回升电量维持模式整体保持在0.3以上。我实测的SOC轨迹显示MPCADMM的控制器确实做到了这种“前瞻性”在进入高速段之前提前降低放电力度把电量留给后面的拥堵段这个行为是纯规则策略很难做到的。总成本对比是第二个指标。我把这个方案和两个基线做了对比一个是CD-CS模式切换策略先纯电后混动一个是基于规则的实时功率分流策略。在同样完成900秒工况的前提下MPC凸优化方案的总等效油耗比CD-CS策略低了约8.7%比规则策略低了约6.2%。这个差距在PHEV能量管理领域算是相当可观的。求解耗时是第三个指标也是最关键的工程指标。在i5-12600K处理器上直接用CVX解整个MPC问题的平均耗时约180毫秒用ADMM分解后每次迭代平均4毫秒迭代25次收敛总计约100毫秒再进一步优化减少收敛判据的保守性、让迭代提前到15次终止平均耗时能压到60毫秒以内。对于1秒采样周期的PHEV能量管理MPC来说这个速度是绰绰有余的。最值得留意的现象是ADMM在20次迭代左右已经能达到非常接近全局最优的解目标函数值与直接CVX求解的差距小于0.5%但继续迭代到50次改善幅度几乎可以忽略。这说明ADMM的收敛曲线是前期陡、后期平的典型形态在实际应用中不必过度追求收敛精度设一个宽松一点的容差能省下大量计算时间。5. 常见问题与排查实录5.1 CVX安装与求解器选择很多新手在CVX环境就卡住了。CVX的安装本身不难但有两个坑必须提醒一是CVX和Matlab版本之间的兼容性问题老版本CVX在新版Matlab上报错很常见建议直接装CVX 2.2及以上版本二是装完CVX之后要在Matlab里运行cvx_setup完成路径配置这一步很多人会忘记或者运行失败通常是因为路径里有中文或者安装目录没有写权限。关于求解器CVX自带的SDPT3和SeDuMi精度尚可但速度一般如果条件允许装上MOSEK求解速度能提升2到3倍。在ADMM框架下子问题都是极小规模的SDPT3就够用了主问题才建议用MOSEK。5.2 ADMM不收敛残差一直震荡怎么办这是我调试过程中花时间最多的问题。ADMM不收敛的表现很有特征norm(x-z)的残差曲线不下降或者在某个值附近来回震荡。排查顺序建议是首先看看是不是ρ取错了量级。如果ρ过大迭代会震荡残差曲线会呈现锯齿状调小ρ通常能缓解。其次检查问题本身是不是严格凸的——比如目标函数里只有线性项没有二次项那对偶函数可能退化ADMM收敛性就没了保证。我的解决方法是在SOC惩罚项里用一个足够大的λ保证目标函数关于SOC是强凸的这几乎能解决90%的收敛问题。最后还有一个容易忽略的点子问题的求解精度也会影响ADMM收敛。如果CVX子问题求解精度太低比如默认容差太大那么迭代传递的梯度信息会被噪声污染残差永远降不到理想水平。可以考虑把CVX的精度设置从cvx_begin改为cvx_begin quiet并配合solver_precision设置或者在ADMM里采用“approximate inference”策略前几轮迭代用更宽松的精读接近收敛时再提高精度。5.3 MPC问题不可行MPC控制器的“不可行”问题几乎一定会遇到尤其是在工况突变或者约束设置不合理时。典型的场景是车辆在爬大坡需求功率远大于发动机和电池能提供的总和功率平衡约束无法满足。解决办法不外乎两种思路一是约束软化把功率平衡等式改成带松弛变量的近似等式并在目标函数里对松弛量加高额惩罚二是保证基本动力性优先把动力性约束放在优先级最高的一层能量优化放在第二层。在代码里实现约束软化很简单引入一个非负的松弛变量s把等式约束改成P_eng P_batt s P_demand_pred同时在目标函数里加M * sum(s)M取足够大的罚系数。实测中这个方法救了很多次仿真——特别是在预测窗口内出现极端的急加速时没有松弛变量整个优化问题直接崩了加了这个变量后问题永远有可行解哪怕s不为零至少仿真能跑完结果还能作为参考。5.4 权重系数调节的“玄学”与科学权重系数w_f、w_e和λ的取值看似“人人都会调”其实是最影响结果的因素。我的经验是不要盲目调先做一次系统性扫描固定工况把λ从1到500做对数间隔取值跑完仿真画SOC末端值对λ的曲线。这条曲线通常呈“S形”——λ很小时SOC会跌到约束下限附近λ很大时SOC几乎贴着参考值走。找出曲线拐点的区域那附近往往就是最优权重带。还有一个技巧是把油耗和电耗的权重折算到同一个物理单位——比如按“消耗1升油对应消耗多少kWh电”的等效原则来设初值。这样初值本身就处在合理量级之后微调量级也不会太大能少走很多弯路。5.5 新手最容易忽略的初始化问题最后再说一个非常基础但仍然很多人踩的坑MPC主循环里的状态变量SOC要以真实被控对象模型的输出为准而不是用MPC内部预测模型的状态。很多初学MPC的人会犯“模型在环”的错误——直接用MPC预测的状态去更新下一步仿真导致仿真结果看起来完美但换到真实工况就完全失灵。正确做法是MPC里的SOC预测值只用于滚动优化仿真推进时的SOC用完整的车辆模型可以包含更复杂的电池模型来计算。两者之间的差异就是模型失配带来的影响而MPC的反馈校正机制正是为这个差异设计的。我做这套测试时特意在电池模型里加了内阻随SOC变化的细节让MPC的简化模型和“真实”被控对象存在一定偏差。结果显示MPC在模型失配下的表现依然稳定——SOC轨迹没有发散总成本也只比理想匹配情况差不到3%。这说明MPC对模型失配有一定的鲁棒性前提是预测模型的趋势要正确不能出现方向性的错误比如充电效率正负号搞反。6. 一些实操体会与进一步扩展建议整套代码跑下来我的核心体会是PHEV能量管理的难点从来不在某一个单一技术而在工程整合。凸优化建模、MPC框架、ADMM分解、CVX求解每一个单拎出来都是成熟技术但把它们组合到一起并解决实际仿真中的数值问题、实时性问题、鲁棒性问题这才是真正花时间的地方。如果这个方向你打算继续深入我建议从这几个方向扩展一是把电池老化模型放进优化目标。现在的方案里电池损耗是通过等效电耗间接体现的如果想让研究更贴近工程和论文发表的热点可以引入一个基于循环寿命的电池退化模型把“SOC波动导致寿命衰减”的量化为代价项加进目标函数。这样MPC自然会倾向于减少频繁的深度充放电策略会更温柔、更实用。二是预测窗口的自适应调节。固定窗口N10能跑但既不省算力也不最优。可以做一个简单的自适应规则高速平稳工况窗口拉长比如N20城区频繁加减速时窗口缩短比如N5。这样能在保证控制效果的前提下进一步降低计算负载在实车控制器上非常有意义。三是用并行计算加速ADMM。如果你手头有多核机器ADMM的子问题天然适合并行。用parfor替代for循环在4核机器上对两个子问题并行求解总耗时还能再降30%到40%。不过要注意开启并行池本身有启动开销只有当仿真时长足够长时才划算。最后给一个写论文时的小建议这个方案在论文里的卖点不是“我用了ADMM”或者“我用了CVX”而是“在MPC框架内用ADMM将能量管理问题的求解时延降低了约60%同时保持了接近全局最优的解质量”这样的量化表述。工具只是手段解决实时性和最优性之间的矛盾才是这个工作真正的贡献点。如果你正在复现这个项目卡在CVX报错就查求解器配置卡在ADMM不收敛就调ρ和λ卡在油耗结果异常就检查发动机油耗函数是不是凸的——这三板斧能解决大部分问题。跑通了之后你收获的不只是一套能跑的代码更是对“预测控制凸优化”如何落地于能源管理这件事的整体理解这个理解换个平台、换个车型、甚至换个领域比如储能调度、电网负荷管理都能复用。
← 返回资讯列表 预约报考咨询 →
NEXT STEP

看完公告,下一步怎么走?

把报考交给靠谱的人:材料预审、批次抢报、考前辅导、复审提醒,全程有人跟。

进入报考专题