能量管理中動(dòng)態(tài)規(guī)劃的全局優(yōu)化原理與工程落地)
燃料電池混合動(dòng)力系統(tǒng)的能量管理說(shuō)到底就是一個(gè)“錢怎么花”的問(wèn)題燃料電池和動(dòng)力電池兩個(gè)動(dòng)力源擺在面前每一秒該由誰(shuí)出力、出力多少才能既把氫耗壓到最低又讓燃料電池別被頻繁變載折磨到提前退休。動(dòng)態(tài)規(guī)劃Dynamic ProgrammingDP這個(gè)名字聽起來(lái)很高深但它在能量管理里干的事情其實(shí)很樸素——把整段路程拆成一連串小決策從終點(diǎn)倒推著找到一條全局最優(yōu)的功率分配路徑。這篇文章我打算把動(dòng)態(tài)規(guī)劃從原理到落地整個(gè)走一遍包括系統(tǒng)建模、狀態(tài)參數(shù)怎么定、逆向遞推怎么實(shí)現(xiàn)以及我在實(shí)測(cè)中踩過(guò)的那些坑。不管你是剛接觸這個(gè)方向的研究生還是正在做策略方案選型的工程師只要想搞清楚“DP到底怎么用到燃料電池混動(dòng)上”這篇文章應(yīng)該能給你一個(gè)完整的參考。我最早接觸這個(gè)方向的時(shí)候最大的困惑是規(guī)則策略明明也能跑為什么非要費(fèi)勁去做動(dòng)態(tài)規(guī)劃后來(lái)真正把DP結(jié)果和規(guī)則策略放在一起對(duì)比才發(fā)現(xiàn)差距不是一星半點(diǎn)。規(guī)則策略是“看當(dāng)下”根據(jù)當(dāng)前功率需求、SOC狀態(tài)查表或判斷決定功率分配動(dòng)態(tài)規(guī)劃是“看全局”它知道前方哪段路要爬坡、哪段路能回收能量所以能提前把電池充滿、在該發(fā)力的時(shí)候果斷發(fā)力。這種先知先覺(jué)的能力就是DP作為全局最優(yōu)基準(zhǔn)的價(jià)值所在。1. 為什么能量管理是燃料電池混動(dòng)的“命門”1.1 雙動(dòng)力源耦合從來(lái)不是“112”燃料電池混合動(dòng)力系統(tǒng)不像純電動(dòng)車只有一個(gè)能量源它是由燃料電池系統(tǒng)、動(dòng)力電池或超級(jí)電容、DC/DC變換器、驅(qū)動(dòng)電機(jī)共同構(gòu)成的復(fù)雜耦合體。燃料電池負(fù)責(zé)持續(xù)供電動(dòng)力電池負(fù)責(zé)削峰填谷聽起來(lái)分工明確但實(shí)際運(yùn)行中問(wèn)題非常棘手燃料電池的輸出特性偏“硬”它不適合快速加減載。電堆內(nèi)部的溫度、濕度、氣體壓力都跟隨負(fù)載變化頻繁波動(dòng)會(huì)導(dǎo)致膜電極機(jī)械應(yīng)力累積、催化劑降解加速甚至引發(fā)局部缺氣嚴(yán)重影響壽命。實(shí)測(cè)數(shù)據(jù)表明燃料電池輸出功率變化率如果長(zhǎng)期超過(guò)額定功率的10%/s電堆壽命會(huì)明顯縮短。動(dòng)力電池的SOC必須維持在一個(gè)合理窗口。SOC過(guò)高再生制動(dòng)沒(méi)地方吸收能量SOC過(guò)低加速時(shí)燃料電池要單獨(dú)扛大功率氫耗飆升。這個(gè)窗口的維持本身就是能量管理策略的重要KPI。整車層面還要考慮電機(jī)效率MAP、DC/DC效率、附件功耗空壓機(jī)、冷卻水泵、風(fēng)扇等。燃料電池的輔助系統(tǒng)功耗很大尤其是在大電流工況下空壓機(jī)能耗占比不容忽視。建模時(shí)如果忽略附件功耗最后算出來(lái)的最優(yōu)策略在實(shí)車上往往“水土不服”。雙動(dòng)力源的耦合意味著任何一個(gè)時(shí)刻的功率分配決策都會(huì)影響后續(xù)時(shí)刻的系統(tǒng)狀態(tài)。這就是一個(gè)典型的時(shí)序決策問(wèn)題而且是一個(gè)多階段決策過(guò)程。你沒(méi)法用一組簡(jiǎn)單的靜態(tài)閾值來(lái)覆蓋所有工況因?yàn)槌鞘泄r、高速工況、山區(qū)工況的最佳策略完全不同。這也正是需要?jiǎng)討B(tài)規(guī)劃這類全局優(yōu)化方法介入的根本原因。1.2 規(guī)則策略的局限與DP的價(jià)值定位規(guī)則策略Rule-based是目前工程中最常用的方案因?yàn)樗?jiǎn)單、好標(biāo)定、計(jì)算量小。典型的規(guī)則邏輯是低功率需求時(shí)燃料電池單獨(dú)供電高功率需求時(shí)燃料電池和電池共同出力制動(dòng)時(shí)燃料電池降載、電池回收能量。這種策略在特定工況下可以調(diào)到很好的效果但它的致命弱點(diǎn)是“局部最優(yōu)而全局次優(yōu)”——它只知道當(dāng)前狀態(tài)的要求不知道未來(lái)需求的變化。舉個(gè)例子一段典型工況中包含一個(gè)長(zhǎng)爬坡和一個(gè)長(zhǎng)下坡。規(guī)則策略在爬坡前發(fā)現(xiàn)SOC偏上限可能就不怎么用電池但DP會(huì)告訴你爬坡前應(yīng)該把電池充到足夠高的SOC因?yàn)橄缕码A段有大量的再生制動(dòng)能量可以回收現(xiàn)在多用的電下坡時(shí)能免費(fèi)補(bǔ)回來(lái)。這個(gè)“現(xiàn)在多耗一點(diǎn)、以后省一大截”的賬只有全局算法會(huì)算規(guī)則策略算不出來(lái)。動(dòng)態(tài)規(guī)劃在這個(gè)領(lǐng)域里的定位很明確它不是用來(lái)直接上車的至少目前不是而是用來(lái)做離線基準(zhǔn)和標(biāo)定工具。通過(guò)DP得到全局最優(yōu)的功率分配軌跡和SOC軌跡可以拿到幾個(gè)關(guān)鍵東西評(píng)價(jià)其他策略好壞的“標(biāo)尺”。任何實(shí)時(shí)策略做出來(lái)都拿它和DP結(jié)果對(duì)比看性能差距還有多大。提取控制規(guī)律。把DP的功率分配結(jié)果按“需求功率-SOC”離散化可以反過(guò)來(lái)提煉規(guī)則優(yōu)化規(guī)則庫(kù)的設(shè)計(jì)。為等效消耗最小策略ECMS、模型預(yù)測(cè)控制MPC等實(shí)時(shí)算法提供參考基準(zhǔn)或參數(shù)標(biāo)定。ECMS里的等效因子很多時(shí)候就是從DP結(jié)果反推出來(lái)的。我一直覺(jué)得做能量管理策略如果沒(méi)先用DP跑一遍基準(zhǔn)后面的實(shí)時(shí)策略優(yōu)化就是“閉著眼睛找路”。DP算出來(lái)的最優(yōu)解是后續(xù)一切工作的錨點(diǎn)。2. 動(dòng)態(tài)規(guī)劃原理從一個(gè)“最優(yōu)子結(jié)構(gòu)”問(wèn)題說(shuō)起2.1 用最短路徑理解DP的三要素很多人被動(dòng)態(tài)規(guī)劃的數(shù)學(xué)推導(dǎo)勸退但它的核心思想其實(shí)特別生活化。想象你要從A點(diǎn)走到B點(diǎn)中間必須經(jīng)過(guò)若干路口每一段路都有不同的通行時(shí)間。如果你已經(jīng)知道從每個(gè)路口到B點(diǎn)的最短時(shí)間那么站在A點(diǎn)做決策就非常簡(jiǎn)單選那個(gè)“本段耗時(shí)加上后續(xù)最短耗時(shí)”總和最小的方向走。這就是貝爾曼最優(yōu)性原理——最優(yōu)策略的子策略也是最優(yōu)的局部最優(yōu)能拼出全局最優(yōu)。把這種思想翻譯到能量管理問(wèn)題上狀態(tài)就是動(dòng)力電池的SOC決策就是當(dāng)前時(shí)刻的燃料電池輸出功率或者電池輸出功率因?yàn)閮烧咧偷扔谛枨蠊β蚀鷥r(jià)就是這一時(shí)刻的氫耗量加上壽命懲罰項(xiàng)目標(biāo)就是讓整個(gè)工況的累計(jì)代價(jià)最小。動(dòng)態(tài)規(guī)劃的三要素在這里都對(duì)應(yīng)上了階段把工況按時(shí)間步長(zhǎng)比如1秒劃分成N個(gè)階段每個(gè)階段就是一個(gè)決策點(diǎn)。狀態(tài)每個(gè)階段下電池的SOC值。由于SOC是連續(xù)變量需要離散成網(wǎng)格點(diǎn)。決策與轉(zhuǎn)移從階段k的某個(gè)SOC狀態(tài)出發(fā)選擇一個(gè)燃料電池功率得到階段的氫耗代價(jià)并根據(jù)電池功率計(jì)算下一階段的新SOC。這個(gè)結(jié)構(gòu)非常清晰但它有個(gè)前提必須知道未來(lái)所有階段的工況信息。這也是為什么DP是離線算法——它站在“上帝視角”做規(guī)劃沒(méi)有任何因果性約束。2.2 狀態(tài)轉(zhuǎn)移方程與Bellman方程有了階段、狀態(tài)、決策之后我們要建立數(shù)學(xué)關(guān)系。電池SOC的動(dòng)態(tài)方程是整個(gè)DP求解的核心它把所有階段串在一起SOC(k1) SOC(k) - P_bat(k)·η_bat(P_bat)·Δt / Q_bat其中P_bat是電池輸出功率放電為正充電為負(fù)η_bat是電池充放電效率充放電效率不對(duì)稱而且要按功率方向處理Q_bat是電池總?cè)萘繐Q算成能量單位比如kWhΔt是時(shí)間步長(zhǎng)。這個(gè)方程的含義很直接電池當(dāng)前時(shí)刻消耗了多少電SOC就下降多少充了多少電SOC就上升多少。Bellman方程在此基礎(chǔ)上定義了最優(yōu)代價(jià)函數(shù)J(k, SOC_k)J(k, SOC_k) min_{P_fc} { L(k, SOC_k, P_fc) J(k1, SOC_{k1}) }其中L是階段代價(jià)包含這一秒的氫耗量、燃料電池功率變化懲罰、以及SOC偏離參考值的懲罰。這個(gè)方程的意思是從當(dāng)前狀態(tài)到終點(diǎn)的最優(yōu)代價(jià)等于“本階段代價(jià)”加上“下階段到終點(diǎn)的最優(yōu)代價(jià)”之和的最小值。整個(gè)DP求解的過(guò)程本質(zhì)上就是沿著時(shí)間軸從終點(diǎn)倒著往回逐階段計(jì)算出每個(gè)SOC離散點(diǎn)上的最優(yōu)代價(jià)函數(shù)。值得一提的是階段代價(jià)函數(shù)L的設(shè)計(jì)對(duì)結(jié)果影響極大。如果只考慮氫耗DP會(huì)傾向于頻繁使用電池——因?yàn)殡姵氐碾娫谙缕聲r(shí)能免費(fèi)充回來(lái)代價(jià)為零但電池循環(huán)壽命、燃料電池啟停次數(shù)都不在代價(jià)里最后算出來(lái)的策略可能讓燃料電池頻繁啟停、讓電池深度充放實(shí)車沒(méi)法用。所以實(shí)際應(yīng)用中要在代價(jià)函數(shù)里加懲罰項(xiàng)用“氫耗壽命損耗”的多目標(biāo)形式來(lái)約束。3. 系統(tǒng)建模與狀態(tài)參數(shù)選擇3.1 整車縱向動(dòng)力學(xué)模型做DP之前先要把車輛層面的需求功率計(jì)算模型搭好。需求功率是能量管理策略的“輸入源”它由工況決定跟策略本身無(wú)關(guān)。整車需求功率按下式計(jì)算P_req (m·g·f·cosθ 0.5·ρ·Cd·A·v2 m·g·sinθ m·δ·a)·v / η_drive公式看起來(lái)長(zhǎng)但每一項(xiàng)都有明確的物理意義滾動(dòng)阻力、空氣阻力、坡道阻力、加速阻力乘上車速再除以傳動(dòng)效率就得到車輪端到動(dòng)力源端的功率需求。這個(gè)模型是整條鏈路的起點(diǎn)精度直接影響后續(xù)DP結(jié)果的可用性。我在實(shí)際建模時(shí)特別注意兩個(gè)細(xì)節(jié)。第一路況信息中的坡度θ要用真實(shí)道路數(shù)據(jù)而不是隨意假設(shè)。坡道阻力在山區(qū)工況下能占到總阻力的30%以上忽略坡道等于讓DP“閉著眼睛”規(guī)劃。第二驅(qū)動(dòng)電機(jī)的效率要用效率MAP圖插值而不是固定一個(gè)常數(shù)。電機(jī)在低負(fù)載區(qū)間效率很低DP如果不知道這一點(diǎn)可能會(huì)讓電池輸出很小的功率維持電機(jī)在低效區(qū)運(yùn)行浪費(fèi)能量真實(shí)的最優(yōu)策略會(huì)選擇更合理的功率點(diǎn)讓電機(jī)盡量工作在高效區(qū)。3.2 燃料電池與動(dòng)力電池模型燃料電池模型的核心輸出是氫氣消耗速率。工程上常用的是基于極化曲線的效率模型給定燃料電池輸出功率P_fc查電堆效率η_fc(P_fc)然后計(jì)算氫耗量m_H2 P_fc·Δt / (η_fc·LHV_H2)LHV_H2是氫氣低熱值約120 MJ/kg。需要注意的是燃料電池效率曲線不是單調(diào)的它在低功率區(qū)和中高功率區(qū)有差異一般在額定功率的20%-40%附近效率最高。DP正是因?yàn)椤翱赐噶恕边@條效率曲線才會(huì)傾向于讓燃料電池穩(wěn)定在該高效區(qū)間運(yùn)行避免在低效區(qū)頻繁波動(dòng)。動(dòng)力電池模型則采用等效電路模型關(guān)鍵在于電池開路電壓U_oc和歐姆內(nèi)阻R_int以及極化內(nèi)阻隨SOC變化的特性。電池輸出功率和電流的關(guān)系為P_bat U_oc·I - I2·R_int求解這個(gè)一元二次方程可以得到電流進(jìn)而計(jì)算SOC變化。做DP時(shí)如果電池模型太粗糙比如把效率設(shè)成常數(shù)算出來(lái)的最優(yōu)策略會(huì)明顯偏向過(guò)度使用電池——因?yàn)殡姵匦时桓吖懒薉P在全局優(yōu)化中會(huì)“發(fā)現(xiàn)”占便宜的機(jī)會(huì)。電池模型至少要區(qū)分充電效率和放電效率并考慮內(nèi)阻隨SOC和電流的變化才能讓DP做一個(gè)“誠(chéng)實(shí)”的優(yōu)化。3.3 SOC邊界條件與狀態(tài)網(wǎng)格劃分SOC的邊界條件直接影響DP的可行域。一般要設(shè)置三個(gè)約束SOC_min ≤ SOC(k) ≤ SOC_max。這個(gè)窗口通常取[0.3, 0.8]或[0.4, 0.7]具體看電池特性和系統(tǒng)設(shè)計(jì)目標(biāo)。窗口越窄DP的可行解空間越小但工程上約束越強(qiáng)、越接近實(shí)車限制。SOC(0) SOC_initSOC(N) SOC_end。初始SOC由車輛上電時(shí)的實(shí)際狀態(tài)決定終端SOC一般要求等于初始SOC或接近這是為了保證公平對(duì)比——不能拿出“起點(diǎn)滿電、終點(diǎn)虧空”的結(jié)果來(lái)宣稱省氫那是透支電池來(lái)作弊。另外還要約束燃料電池功率變化率|P_fc(k1) - P_fc(k)| ≤ ΔP_max。這一步很關(guān)鍵如果不加DP可能給出燃料電池功率每秒跳變幾十千瓦的“最優(yōu)解”實(shí)車上根本執(zhí)行不了。狀態(tài)網(wǎng)格的劃分是精度和計(jì)算量的權(quán)衡。SOC范圍0.4到0.8步長(zhǎng)取0.01就是41個(gè)離散點(diǎn)步長(zhǎng)取0.005就是81個(gè)點(diǎn)。離散點(diǎn)越多精度越高但計(jì)算量成倍增長(zhǎng)。時(shí)間步長(zhǎng)通常取1秒因?yàn)闃?biāo)準(zhǔn)工況如NEDC、WLTC、CLTC的步長(zhǎng)就是1秒。如果研究快速求解方法可以用0.5秒的變步長(zhǎng)策略但普通場(chǎng)景下1秒已經(jīng)足夠。4. 動(dòng)態(tài)規(guī)劃求解流程與實(shí)操細(xì)節(jié)4.1 逆向遞推從終點(diǎn)往回找全局最優(yōu)DP求解分兩步走先逆向遞推再正向回代。逆向遞推是整個(gè)算法的“主計(jì)算”它從最后一個(gè)階段開始向前逐階段計(jì)算每個(gè)SOC狀態(tài)對(duì)應(yīng)的最優(yōu)代價(jià)函數(shù)和最優(yōu)決策。具體過(guò)程是這樣的在最后一個(gè)階段kN不需要做任何決策車輛已經(jīng)到終點(diǎn)直接定義終端代價(jià)函數(shù)J(N, SOC_N)。如果要求SOC_N SOC_init則只有該點(diǎn)代價(jià)為0其余SOC狀態(tài)代價(jià)為無(wú)窮大。從kN-1開始倒著往前對(duì)每個(gè)階段的每個(gè)SOC離散點(diǎn)枚舉所有允許的決策即燃料電池功率計(jì)算本階段代價(jià)和轉(zhuǎn)移后的下一階段SOC再查下一階段預(yù)存的最優(yōu)代價(jià)函數(shù)值取加和最小者作為當(dāng)前狀態(tài)的最優(yōu)代價(jià)并記錄對(duì)應(yīng)的最優(yōu)決策。這個(gè)計(jì)算過(guò)程我用Python實(shí)現(xiàn)過(guò)核心邏輯并不復(fù)雜但實(shí)際工程實(shí)現(xiàn)時(shí)有個(gè)關(guān)鍵細(xì)節(jié)下一階段的SOC不一定落在網(wǎng)格點(diǎn)上需要一個(gè)插值函數(shù)。最常用的是線性插值簡(jiǎn)單且性價(jià)比高。我對(duì)動(dòng)態(tài)規(guī)劃求解做了一個(gè)精簡(jiǎn)的偽代碼版本給大家作為參考# 逆向遞推核心邏輯偽代碼 for k in range(N-1, -1, -1): for soc_idx, soc_k in enumerate(soc_grid): min_cost float(inf) best_pfc None for pfc in fc_power_grid: # 計(jì)算階段代價(jià)氫耗 懲罰項(xiàng) stage_cost hydrogen_cost(pfc) penalty(k, soc_k, pfc) # 計(jì)算電池功率與下一時(shí)刻SOC p_bat p_req[k] - pfc soc_next update_soc(soc_k, p_bat, dt) # 插值得到下一階段最優(yōu)代價(jià) future_cost interpolate(J_table[k1], soc_next) total_cost stage_cost future_cost if total_cost min_cost: min_cost total_cost best_pfc pfc J_table[k][soc_idx] min_cost U_table[k][soc_idx] best_pfc這里有兩個(gè)容易踩的坑。第一P_fc的可行域要依據(jù)需求功率P_req動(dòng)態(tài)調(diào)整不能把所有功率都列出來(lái)。比如需求功率是20kW電池又處于SOC上限附近那么燃料電池功率至少要能滿足基礎(chǔ)需求不能讓電池強(qiáng)制放電超出邊界。實(shí)際實(shí)現(xiàn)中要為每個(gè)階段預(yù)先計(jì)算P_fc的上下限再在該區(qū)間內(nèi)枚舉能省掉大量無(wú)效計(jì)算。第二未來(lái)代價(jià)插值最好做“越界鉗制”——如果soc_next超出SOC窗口范圍直接賦無(wú)窮大讓這個(gè)決策被淘汰而不是用邊界值硬插值否則會(huì)產(chǎn)出違反約束的“偽最優(yōu)解”。4.2 正向回代把最優(yōu)策略還原成控制序列逆向遞推完成后J_table和U_table里已經(jīng)存好了每個(gè)狀態(tài)的最優(yōu)決策但還沒(méi)形成一條具體的軌跡。正向回代就是給定初始SOC從k0開始順著時(shí)間軸查表逐步生成每個(gè)時(shí)刻的最優(yōu)燃料電池功率和SOC軌跡。正向回代的過(guò)程同樣存在插值問(wèn)題實(shí)際SOC軌跡幾乎不會(huì)恰好落在網(wǎng)格點(diǎn)上所以U_table查表時(shí)也要做插值?;蛘呖梢該Q個(gè)思路在逆向遞推時(shí)存儲(chǔ)的是每個(gè)網(wǎng)格點(diǎn)的最優(yōu)決策表正向仿真實(shí)時(shí)根據(jù)當(dāng)前SOC連續(xù)值對(duì)最近的兩個(gè)網(wǎng)格點(diǎn)的決策做加權(quán)得到實(shí)際的功率指令。這樣處理后的軌跡是連續(xù)的不會(huì)出現(xiàn)功率跳變。正向回代完成后我一般會(huì)做一次“自檢審計(jì)”把生成的P_fc軌跡、SOC軌跡、電池功率軌跡全部畫出波形人工核對(duì)是否有越界、是否有功率突變、是否滿足終端SOC約束。這一步雖然不涉及多少代碼但重要性不亞于算法本身——數(shù)據(jù)不會(huì)自動(dòng)告訴你它錯(cuò)了只有圖像上的違和感會(huì)提醒你哪里出了問(wèn)題。4.3 為什么SDP隨機(jī)動(dòng)態(tài)規(guī)劃也是從這里延伸的談DP的時(shí)候不得不提一句SDP隨機(jī)動(dòng)態(tài)規(guī)劃。傳統(tǒng)DP的前提是工況完全已知但真實(shí)駕駛中工況不可能完全預(yù)知所以學(xué)界提出了隨機(jī)動(dòng)態(tài)規(guī)劃把駕駛需求建模成馬爾可夫鏈用轉(zhuǎn)移概率描述功率需求變化的統(tǒng)計(jì)規(guī)律再做全局期望最優(yōu)求解。SDP的求解框架和DP完全一樣區(qū)別在于階段代價(jià)要按轉(zhuǎn)移概率加權(quán)求期望而不是用確定的未來(lái)工況。我自己的經(jīng)驗(yàn)是如果你能先把確定性DP徹底跑通理解逆向遞推和正向回代這兩個(gè)過(guò)程那么SDP、MPC這些進(jìn)階方法的上手成本都會(huì)大幅降低。DP是整個(gè)優(yōu)化控制家族的地基值得花時(shí)間把基礎(chǔ)功打牢。5. 策略對(duì)比與典型結(jié)果分析5.1 DP與規(guī)則策略的氫耗對(duì)比我拿一個(gè)典型的燃料電池混動(dòng)系統(tǒng)做過(guò)對(duì)比測(cè)試工況選的是WLTC和一段包含長(zhǎng)坡道的山區(qū)工況。系統(tǒng)參數(shù)大約是整車質(zhì)量1800kg燃料電池額定功率60kW電池容量20Ah約0.5kWh可用能量初始SOC 0.6終端SOC約束也是0.6。規(guī)則策略是我自己標(biāo)定的一版核心邏輯是“燃料電池跟隨需求功率、SOC低時(shí)強(qiáng)制充電”這在工程里很有代表性。WLTC工況的結(jié)果如下歸一化到規(guī)則策略的氫耗100%策略氫耗歸一化SOC終值燃料電池功率變化率超限次數(shù)規(guī)則策略100%0.5812DP離線最優(yōu)87%左右0.600DP在WLTC工況下比規(guī)則策略省了大約13%的氫這個(gè)數(shù)字在以百分比計(jì)算的優(yōu)化空間里已經(jīng)相當(dāng)可觀。更關(guān)鍵的是DP軌跡的燃料電池功率變化非常平緩——大部分時(shí)間工作在高效區(qū)功率變化率被嚴(yán)格限制在約束范圍內(nèi)這對(duì)燃料電池壽命非常友好。規(guī)則策略雖然也在控制SOC但它的控制邏輯是“事后響應(yīng)”SOC低了就強(qiáng)制充電而充電功率往往是階梯式跳躍的導(dǎo)致燃料電池功率頻繁大幅波動(dòng)。5.2 為什么DP能省氫三個(gè)典型策略特征把DP的功率分配軌跡調(diào)出來(lái)看會(huì)發(fā)現(xiàn)三個(gè)非常有規(guī)律的特征這些特征其實(shí)就是DP“聰明”的具體體現(xiàn)預(yù)充電行為。在長(zhǎng)爬坡開始之前需求功率會(huì)逐漸上升到很高的水平DP會(huì)提前幾十秒加大燃料電池輸出功率把電池SOC充到接近上限。爬坡時(shí)電池和燃料電池共同出力避免燃料電池單獨(dú)扛峰值功率。這里的邏輯是提前充電的氫耗比爬坡中強(qiáng)制提高燃料電池功率的氫耗更低。因?yàn)槿剂想姵卦诓糠重?fù)載區(qū)效率更高提前用高效區(qū)的能量?jī)?chǔ)備比在低效區(qū)硬扛大功率劃算得多。下坡策略差異。下坡段再生制動(dòng)功率很充足DP的典型做法是盡量讓燃料電池停機(jī)或降到最低運(yùn)行功率讓電池充分吸收再生能量。規(guī)則策略往往不敢讓燃料電池停機(jī)怕SOC被充爆結(jié)果就是下坡時(shí)燃料電池空轉(zhuǎn)浪費(fèi)能量電池卻因?yàn)镾OC限額無(wú)法充分回收。穩(wěn)態(tài)巡航時(shí)的功率平移。WLTC中有一段60-80km/h的巡航需求功率大約在10kW左右這個(gè)功率點(diǎn)剛好處于燃料電池的效率低谷。DP會(huì)選擇讓燃料電池輸出15-20kW的高效功率將多余的電量充入電池SOC緩慢上升等電池到上限后再切換成純電池驅(qū)動(dòng)一小段。這種“小鋸齒”式的功率平移策略規(guī)則策略很難實(shí)現(xiàn)因?yàn)樗呐袛噙壿嬏?jiǎn)單了看不出這種微觀層面的占便宜機(jī)會(huì)。這些特征值得每一個(gè)做實(shí)時(shí)策略的人都研究一遍因?yàn)樗鼈兙褪菍?shí)時(shí)策略應(yīng)該努力逼近的行為模式。5.3 需要清醒認(rèn)識(shí)的局限D(zhuǎn)P的世界是“離線天堂”DP的結(jié)果再好也不能直接當(dāng)作實(shí)時(shí)策略上車。它的根本局限在于對(duì)未來(lái)工況的完全已知假設(shè)這在真實(shí)世界里是不成立的。真實(shí)駕駛中你永遠(yuǎn)不知道下一個(gè)路口會(huì)不會(huì)堵車、會(huì)不會(huì)多等一個(gè)紅綠燈。所以DP的真正價(jià)值是離線基準(zhǔn)而不是在線控制算法。從工程角度看DP的意義更接近一種“標(biāo)定手段”——把DP算出的最優(yōu)結(jié)果作為技術(shù)天花板再去設(shè)計(jì)實(shí)時(shí)策略逼近這個(gè)天花板。如果某條實(shí)時(shí)策略能把性能差距控制在5%以內(nèi)并且保證燃料電池壽命指標(biāo)不惡化那你就可以說(shuō)這條實(shí)時(shí)策略設(shè)計(jì)得很成功了。我自己衡量策略好壞時(shí)也習(xí)慣性先問(wèn)一句距離DP差了幾個(gè)百分點(diǎn)這個(gè)數(shù)字比任何主觀評(píng)價(jià)都硬。6. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄6.1 DP跑不通、結(jié)果異常先查這幾個(gè)地方做DP的時(shí)候我把各種奇怪的錯(cuò)誤都踩過(guò)一遍。下面是幾個(gè)最常見(jiàn)的問(wèn)題和對(duì)應(yīng)的排查思路直接整理成速查表癥狀可能原因排查方法與解決建議逆向遞推結(jié)果全為無(wú)窮大SOC網(wǎng)格范圍設(shè)置過(guò)窄轉(zhuǎn)移后SOC總是越界或者終端SOC約束設(shè)置成唯一狀態(tài)前端SOC無(wú)法到達(dá)放寬SOC范圍檢查初始SOC到終端SOC的可行性加一步前向可達(dá)域分析最優(yōu)軌跡SOC劇烈震蕩電池內(nèi)阻模型出現(xiàn)負(fù)值或不連續(xù)時(shí)間步長(zhǎng)過(guò)大導(dǎo)致轉(zhuǎn)移方程失真插值函數(shù)在網(wǎng)格邊界處理不當(dāng)檢查電池模型數(shù)據(jù)表是否有毛刺時(shí)間步長(zhǎng)減半對(duì)比結(jié)果檢查插值函數(shù)是否越界鉗制燃料電池功率頻繁跳變代價(jià)函數(shù)中缺少功率變化率懲罰項(xiàng)P_fc枚舉網(wǎng)格粒度太粗在階段代價(jià)中增加功率變化率懲罰項(xiàng)細(xì)化P_fc枚舉網(wǎng)格終端SOC約束無(wú)法滿足初始SOC離終端SOC太遠(yuǎn)或者工況總能量需求與電池容量不匹配調(diào)整初始SOC設(shè)置或者放寬終端SOC約束比如允許±0.05偏差DP氫耗反而比規(guī)則策略高模型里某個(gè)效率數(shù)據(jù)出錯(cuò)比如燃料電池效率曲線單調(diào)遞增導(dǎo)致DP拼命用高功率區(qū)間終端SOC約束設(shè)置不當(dāng)導(dǎo)致DP必須大量強(qiáng)制充電畫效率曲線檢查合理性對(duì)比中間階段的SOC軌跡看是否存在異常強(qiáng)迫充電行為第5條特別有意思我遇到過(guò)不止一次。很多人覺(jué)得DP是全局最優(yōu)怎么可能比規(guī)則策略還費(fèi)油結(jié)果一查原來(lái)是燃料電池效率MAP表里數(shù)據(jù)填反了DP“聰明”地發(fā)現(xiàn)了這個(gè)bug把所有功率都導(dǎo)到高負(fù)載點(diǎn)氫耗自然爆表。這類問(wèn)題提醒我們DP是最優(yōu)解器不是傻子你的模型出錯(cuò)它會(huì)在結(jié)果里忠實(shí)地把你的錯(cuò)誤放大暴露出來(lái)。6.2 計(jì)算時(shí)間和內(nèi)存爆炸怎么辦SOC網(wǎng)格劃分得太細(xì)加上長(zhǎng)工況比如一整圈車試驗(yàn)工況幾千秒的數(shù)據(jù)DP的計(jì)算量會(huì)非??植?。一個(gè)SOC范圍0.4-0.8、步長(zhǎng)0.005的網(wǎng)格就是81個(gè)點(diǎn)P_fc枚舉20個(gè)點(diǎn)每個(gè)時(shí)間步就要做1600次以上的代價(jià)計(jì)算1000秒的工況總共要算160萬(wàn)次以上。如果用兩層循環(huán)加插值函數(shù)Python跑起來(lái)可能要幾分鐘到幾十分鐘內(nèi)存里還要存兩個(gè)大表一不小心就把機(jī)器拖垮。針對(duì)這個(gè)問(wèn)題我的實(shí)用經(jīng)驗(yàn)是按需取舍。首先時(shí)間步長(zhǎng)1秒是標(biāo)準(zhǔn)配置不要輕易減半否則計(jì)算量翻倍收益卻有限其次SOC網(wǎng)格步長(zhǎng)從0.01開始看結(jié)果對(duì)步長(zhǎng)的敏感度如果SOC軌跡在步長(zhǎng)0.01和0.005下的差異小于1%就說(shuō)明0.01已經(jīng)夠用再次P_fc枚舉時(shí)可以采用“需求功率約束下的局部枚舉”而不是全局枚舉能省大量無(wú)效計(jì)算。最后如果實(shí)在嫌慢可以遷移到C或者做向量化計(jì)算把兩層循環(huán)改成矩陣運(yùn)算速度提升超過(guò)10倍都很正常。6.3 模型復(fù)雜度與可復(fù)現(xiàn)性之間的平衡還有一個(gè)經(jīng)常被忽視的坑模型越復(fù)雜DP算起來(lái)越漂亮但可復(fù)現(xiàn)性越差。比如電池模型加了很多溫度修正項(xiàng)、燃料電池模型考慮了氣體擴(kuò)散動(dòng)態(tài)這些在離線DP中都能精確描述但拿到實(shí)車控制器上根本沒(méi)法用——控制器里不可能每秒都跑一個(gè)兩階熱模型。我現(xiàn)在的做法是DP階段用一套“中等保真度”的模型保證計(jì)算結(jié)果在趨勢(shì)和量級(jí)上足夠可信驗(yàn)證階段再用更精細(xì)的模型做仿真確認(rèn)結(jié)果沒(méi)有因?yàn)槟P秃?jiǎn)化而失真。這個(gè)“中等保真度”邊界需要自己拿捏但有幾個(gè)硬性要求電池模型必須能區(qū)分充放電效率燃料電池效率曲線必須有非單調(diào)的特性附件功耗必須以一定形式計(jì)入。滿足這三點(diǎn)DP的產(chǎn)出就已經(jīng)有足夠的工程參考價(jià)值了。7. 從離線DP走向?qū)崟r(shí)策略幾條實(shí)用路徑7.1 用DP反推等效因子喂給ECMSECMS等效消耗最小策略是最接近DP思想的實(shí)時(shí)算法。它的核心做法是把電池電量折算成虛擬氫耗以“實(shí)際氫耗等效氫耗”的最小化作為實(shí)時(shí)目標(biāo)函數(shù)。關(guān)鍵問(wèn)題是怎么定等效因子λ而這恰恰可以用DP來(lái)標(biāo)定。具體做法是在典型工況上跑一次離線DP記錄每個(gè)時(shí)刻的電池功率和SOC變化反推等效因子λ(k) ?J/?SOC也就是代價(jià)函數(shù)對(duì)SOC的偏導(dǎo)數(shù)再把λ在典型工況上的均值或分區(qū)間值提取出來(lái)作為ECMS的固定等效因子或查表依據(jù)。這樣做出來(lái)的ECMS在相似工況下能逼近DP性能的95%左右而且完全實(shí)時(shí)可用。這個(gè)“DP標(biāo)定ECMS”的組合拳是我個(gè)人覺(jué)得工程落地性價(jià)比最高的方案。7.2 用DP生成MPC的參考軌跡MPC模型預(yù)測(cè)控制的框架是“滾動(dòng)優(yōu)化”——在每個(gè)控制周期內(nèi)預(yù)測(cè)未來(lái)一段時(shí)間比如10秒的功率需求求解這一段的最優(yōu)控制。MPC的性能上限受限于預(yù)測(cè)精度和優(yōu)化水平而DP可以在離線階段生成多種典型工況下的最優(yōu)SOC軌跡作為MPC的“參考軌道”。MPC控制器的優(yōu)化目標(biāo)可以寫成“跟蹤DP參考SOC軌跡”的形式代價(jià)函數(shù)為SOC偏差加權(quán)加上燃料電池功率變化懲罰。這樣MPC的優(yōu)化任務(wù)就簡(jiǎn)化了——不用從頭算全局最優(yōu)只要在有限時(shí)域內(nèi)逼近參考軌跡即可。這種做法在工程上非常實(shí)用既發(fā)揮了MPC處理約束和模型的能力又借助DP把全局最優(yōu)性帶進(jìn)了實(shí)時(shí)控制框架。7.3 從DP結(jié)果提煉規(guī)則反哺規(guī)則庫(kù)設(shè)計(jì)前面說(shuō)規(guī)則策略是基于經(jīng)驗(yàn)的啟發(fā)式方法但它的規(guī)則庫(kù)其實(shí)可以從DP結(jié)果中“挖”出來(lái)。把DP在不同工況下的最優(yōu)功率分配結(jié)果畫成二維散點(diǎn)圖橫軸為需求功率縱軸為SOC顏色為燃料電池功率你會(huì)發(fā)現(xiàn)數(shù)據(jù)點(diǎn)有明顯的聚類特征——需求功率低時(shí)燃料電池功率偏小或停機(jī)需求功率高時(shí)按SOC分區(qū)域決策。把這些聚類邊界提取出來(lái)就能設(shè)計(jì)出比純經(jīng)驗(yàn)規(guī)則更精準(zhǔn)的規(guī)則表。我在一個(gè)項(xiàng)目中用這個(gè)辦法重構(gòu)過(guò)規(guī)則策略先跑WLTC、CLTC、HWFET三個(gè)工況的DP提取規(guī)則邊界手工整理成一張模糊規(guī)則表仿真結(jié)果顯示氫耗與純DP的差距從原來(lái)的13%縮小到了6%。這個(gè)結(jié)果的含金量在于規(guī)則策略的計(jì)算量幾乎沒(méi)有增加性能卻明顯改善實(shí)車部署毫無(wú)壓力。對(duì)工程實(shí)踐來(lái)說(shuō)這種“用離線DP優(yōu)化在線規(guī)則”的路線往往比強(qiáng)行上馬復(fù)雜算法更劃算。8. 寫在最后的一點(diǎn)實(shí)在話做能量管理策略這些年我最深的體會(huì)是動(dòng)態(tài)規(guī)劃不是萬(wàn)能鑰匙但它是一面很好的鏡子。它把系統(tǒng)里每一個(gè)模型誤差都映照得清清楚楚也把每一個(gè)實(shí)時(shí)策略的不足暴露得明明白白。如果你正準(zhǔn)備入這個(gè)方向我的建議是不要急著上手SDP、MPC這些進(jìn)階算法先把經(jīng)典DP摸透——親手實(shí)現(xiàn)一遍逆向遞推和正向回代畫出SOC軌跡調(diào)幾次代價(jià)函數(shù)權(quán)重踩一遍上面那些坑你就能對(duì)能量管理問(wèn)題的本質(zhì)有非常扎實(shí)的理解。另外還有一個(gè)小經(jīng)驗(yàn)給代價(jià)函數(shù)調(diào)權(quán)重的時(shí)候別只看氫耗數(shù)字。氫耗降了1%但SOC軌跡變得非常激進(jìn)說(shuō)明權(quán)重設(shè)置有問(wèn)題你是在拿電池壽命換數(shù)字。好的策略應(yīng)該是氫耗、壽命、動(dòng)力性三者之間的平衡而DP正是幫你理解這個(gè)平衡邊界的最好工具。調(diào)出這個(gè)平衡感之后后續(xù)做任何實(shí)時(shí)策略你都會(huì)比其他人多一層“全局視角”的判斷力。