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