能與熱網(wǎng)熱慣性聯(lián)合優(yōu)化調(diào)度:熱電聯(lián)產(chǎn)系統(tǒng)建模與求解)
前幾年做模擬項(xiàng)目X時(shí)我遇到一個(gè)很典型的調(diào)度困境系統(tǒng)里有一臺(tái)熱電聯(lián)產(chǎn)機(jī)組和一片集中供熱管網(wǎng)冬季夜間電負(fù)荷低、熱負(fù)荷卻很高機(jī)組被“以熱定電”的約束綁得死死的電力調(diào)峰完全騰不出手只能眼睜睜看著風(fēng)電場(chǎng)被迫棄風(fēng)。當(dāng)時(shí)組里引入先進(jìn)絕熱壓縮空氣儲(chǔ)能AA-CAES做擴(kuò)容改造原以為把儲(chǔ)能當(dāng)成“大號(hào)電池”接入電網(wǎng)就行結(jié)果一跑調(diào)度就發(fā)現(xiàn)真正讓收益卡脖子的根本不是電量平衡而是供熱網(wǎng)絡(luò)的熱慣性。熱量在管道里走得慢、會(huì)降溫、能短暫蓄存這些特性如果不放進(jìn)優(yōu)化模型儲(chǔ)能和熱電機(jī)組永遠(yuǎn)只能各干各的聯(lián)合調(diào)度就是一句空話。這篇文章我把完整設(shè)計(jì)和代碼實(shí)現(xiàn)拆開(kāi)講包括熱網(wǎng)動(dòng)態(tài)建模、AA-CAES和熱電聯(lián)產(chǎn)的數(shù)學(xué)約束、求解器落地、算例對(duì)比和調(diào)試經(jīng)驗(yàn)給正在做綜合能源系統(tǒng)優(yōu)化調(diào)度的同學(xué)一份可以直接復(fù)現(xiàn)的參考。1. 為什么要把壓縮空氣儲(chǔ)能和熱網(wǎng)熱慣性放在同一個(gè)優(yōu)化模型里1.1 熱電聯(lián)產(chǎn)的“電熱耦合”是怎么卡住調(diào)峰的熱電聯(lián)產(chǎn)機(jī)組的核心特征是同時(shí)出力汽輪機(jī)在發(fā)電的同時(shí)抽汽或排汽給熱網(wǎng)提供熱量。抽凝式機(jī)組的熱電關(guān)系在一個(gè)可行域內(nèi)變化熱出力拉高時(shí)機(jī)組電出力下限也被一起抬高。冬季夜間恰恰是熱負(fù)荷高峰、電負(fù)荷低谷風(fēng)電大發(fā)時(shí)CHP為了滿足供熱必須發(fā)出大量電電網(wǎng)消納不掉產(chǎn)生棄風(fēng)。所有做過(guò)電力調(diào)度的人都熟悉這種“想降電卻降不下來(lái)”的憋屈感。大多數(shù)傳統(tǒng)做法是給CHP配蓄熱罐用蓄熱罐在熱負(fù)荷高峰“接一下”讓機(jī)組白天少供一點(diǎn)熱、晚高峰多供一點(diǎn)熱從而騰出電調(diào)峰空間。蓄熱罐本質(zhì)上是個(gè)熱量的時(shí)間搬運(yùn)工。但蓄熱罐有容量限制而且它是“顯式”的儲(chǔ)能設(shè)備要花錢(qián)、占場(chǎng)地。真正容易被忽略的是區(qū)域供熱管網(wǎng)本身——管道里的熱水量巨大流速不高熱量從熱源到用戶要花幾十分鐘甚至幾個(gè)小時(shí)。這段延遲加上建筑物本身的蓄熱能力構(gòu)成了熱慣性它相當(dāng)于一張分布在整個(gè)管網(wǎng)里的隱形容熱網(wǎng)比集中式蓄熱罐的容量大得多。一旦把熱慣性考慮進(jìn)調(diào)度熱源側(cè)和用戶側(cè)之間就不是簡(jiǎn)單的“瞬時(shí)供熱等于瞬時(shí)用熱”而是允許供熱功率在一段時(shí)間內(nèi)偏離用戶散熱功率用管網(wǎng)和建筑的蓄熱能力去填補(bǔ)這個(gè)缺口。這正是解除“以熱定電”鎖鏈的關(guān)鍵抓手。1.2 AA-CAES在系統(tǒng)里的雙重身份電儲(chǔ)能加隱藏?zé)嵩聪冗M(jìn)絕熱壓縮空氣儲(chǔ)能與傳統(tǒng)壓縮空氣儲(chǔ)能最大的區(qū)別在于它把壓縮過(guò)程中產(chǎn)生的壓縮熱存下來(lái)而不是丟棄掉。充電時(shí)壓縮機(jī)消耗電能壓縮空氣空氣進(jìn)入儲(chǔ)氣室前先經(jīng)過(guò)蓄熱換熱器把熱量存在蓄熱介質(zhì)里放電時(shí)儲(chǔ)氣室的高壓空氣先被這個(gè)蓄熱介質(zhì)重新加熱再進(jìn)入膨脹機(jī)做功發(fā)電。整個(gè)過(guò)程不需要補(bǔ)燃天然氣因此AA-CAES同時(shí)具備儲(chǔ)電和儲(chǔ)熱兩條能量鏈路循環(huán)效率一般在60%到70%之間。在熱電聯(lián)產(chǎn)系統(tǒng)里這個(gè)雙重性非常值錢(qián)。充電時(shí)壓縮機(jī)耗電是在幫助電網(wǎng)消納風(fēng)電壓縮熱如果直接供給熱網(wǎng)或存入蓄熱罐又是在幫助熱網(wǎng)補(bǔ)熱。放電時(shí)膨脹機(jī)發(fā)的是電但從蓄熱介質(zhì)取走的熱量如果不補(bǔ)回來(lái)下一次放電功率就會(huì)受影響。這意味著AA-CAES的調(diào)度不能只看“什么時(shí)候充電、什么時(shí)候放電”還要看儲(chǔ)氣室壓力和蓄熱罐熱量?jī)蓚€(gè)狀態(tài)變量如何聯(lián)動(dòng)。很多人在建模時(shí)只寫(xiě)儲(chǔ)氣室能量平衡漏了蓄熱罐的熱量平衡結(jié)果算出來(lái)的出力和實(shí)際物理過(guò)程完全對(duì)不上。1.3 熱網(wǎng)熱慣性放著沒(méi)用的“免費(fèi)儲(chǔ)能”只在模型里挖得出來(lái)熱慣性的物理來(lái)源有兩個(gè)一是熱網(wǎng)管道的傳輸延遲和散熱二是建筑圍護(hù)結(jié)構(gòu)的蓄熱能力。熱水管道里的水是“貨車(chē)”熱量是“貨物”貨車(chē)從熱源跑到用戶需要時(shí)間而且跑的途中會(huì)向周?chē)寥郎?。用戶?cè)的房間本身是個(gè)大熱容短時(shí)間內(nèi)供熱量減少室溫不會(huì)立刻掉下來(lái)這就是建筑熱慣性。用生活類(lèi)比來(lái)說(shuō)把熱網(wǎng)想成整棟樓的“暖氣水庫(kù)存”。晚上鍋爐房多燒一點(diǎn)水送進(jìn)管網(wǎng)第二天上午即使鍋爐少燒一小時(shí)室內(nèi)溫度依然能維持住。這種能力就是時(shí)間維度上的柔性。問(wèn)題在于熱量在網(wǎng)絡(luò)里的流動(dòng)是有損耗、有混合、有延遲的數(shù)學(xué)上很難寫(xiě)進(jìn)優(yōu)化模型所以很多研究的簡(jiǎn)化做法是直接令“熱源供熱等于用戶熱負(fù)荷”把網(wǎng)絡(luò)當(dāng)成一根無(wú)質(zhì)量、無(wú)延遲的理想管道。這樣就白白丟掉了最大的調(diào)節(jié)資源。把AA-CAES和熱網(wǎng)熱慣性放在同一個(gè)模型里本質(zhì)上是在做兩件事用儲(chǔ)能把電量在時(shí)間軸上搬移用熱慣性把熱量在時(shí)間軸上搬移而AA-CAES的充放電過(guò)程又天然把電和熱兩個(gè)時(shí)間軸耦合起來(lái)。這種多維度的耦合只有在統(tǒng)一的優(yōu)化模型里才能算出全局最優(yōu)解分開(kāi)按“電系統(tǒng)”和“熱系統(tǒng)”各自調(diào)度永遠(yuǎn)差一口氣。2. 熱慣性怎么變成一行行能求解的約束2.1 三種建模思路集總參數(shù)、延遲模型、節(jié)點(diǎn)法到底選誰(shuí)供熱網(wǎng)絡(luò)動(dòng)態(tài)建模常見(jiàn)的方案有三種。第一種是集總參數(shù)法把整個(gè)管網(wǎng)和用戶簡(jiǎn)化為一個(gè)或幾個(gè)等效熱容室溫動(dòng)態(tài)用一階慣性環(huán)節(jié)表達(dá)。優(yōu)點(diǎn)是變量少、求解快缺點(diǎn)是沒(méi)法反映管道延遲適合做全年長(zhǎng)周期分析。第二種是傳輸延遲模型明確建立“管道入口溫度經(jīng)過(guò)一段時(shí)間后出現(xiàn)在出口”的關(guān)系保留延遲這個(gè)核心特征損失和混合則做大幅簡(jiǎn)化。第三種是節(jié)點(diǎn)法按管段將供水和回水網(wǎng)絡(luò)做空間離散用有限差分把一維的對(duì)流換熱方程轉(zhuǎn)換成時(shí)序遞推式。節(jié)點(diǎn)法最接近物理過(guò)程但變量數(shù)量會(huì)隨網(wǎng)絡(luò)規(guī)模膨脹。我的建議很直接做日前優(yōu)化調(diào)度優(yōu)先采用傳輸延遲模型的思路在節(jié)點(diǎn)層面建立溫度等式但對(duì)溫度損失做線性近似。因?yàn)檎{(diào)度關(guān)心的核心是時(shí)間錯(cuò)位延遲才是影響成本最大的因素。節(jié)點(diǎn)法雖然精確但動(dòng)輒上萬(wàn)變量的網(wǎng)絡(luò)模型塞進(jìn)MILP求解器調(diào)試成本會(huì)迅速失控。如果只是做學(xué)術(shù)對(duì)比或者原型驗(yàn)證先用小網(wǎng)絡(luò)把傳輸延遲跑通后面再逐步增補(bǔ)溫降方程。2.2 管道延遲和溫降的離散化處理管道入口溫度傳到出口物理上滿足一個(gè)帶延遲項(xiàng)的表達(dá)式。若保持熱網(wǎng)流量恒定那么水流經(jīng)過(guò)管段的傳播時(shí)間為τ L / v其中L是管長(zhǎng)v是流速。離散化后延遲步長(zhǎng)取k round(τ / Δt)Δt是調(diào)度時(shí)段長(zhǎng)。第t個(gè)時(shí)段管段出口溫度可以表達(dá)為T(mén)_out(t) T_amb (T_in(t-k) - T_amb) × φφ是溫降系數(shù)近似取exp(-K·L / (m_dot·cp))K是綜合傳熱系數(shù)m_dot是質(zhì)量流量cp是比熱容。這個(gè)式子非常友好只要流量和管道參數(shù)給定φ就是常數(shù)k也是常數(shù)整條約束就是純線性的。很多人會(huì)問(wèn)流量明明會(huì)隨負(fù)荷變化怎么能固定工程實(shí)踐中的處理辦法是把熱網(wǎng)調(diào)度分成兩步先按典型工況確定各管段流量分配比例溫度約束用固定流量下的延遲矩陣機(jī)組出力算出來(lái)之后再校驗(yàn)這個(gè)流量假設(shè)是否合理差別大就迭代一輪。在二次網(wǎng)和一次網(wǎng)解耦的常規(guī)設(shè)計(jì)中一次網(wǎng)流量本來(lái)就經(jīng)常采用質(zhì)調(diào)節(jié)也就是供水溫度變化而流量基本不變固定流量假設(shè)的適用范圍比想象中大。2.3 節(jié)點(diǎn)混溫的雙線性難題與初版簡(jiǎn)化熱網(wǎng)拓?fù)渲斜厝淮嬖诠┧艿赖膮R合節(jié)點(diǎn)比如兩條不同溫度的水在某個(gè)三通處匯合后進(jìn)入同一段管道。混合節(jié)點(diǎn)的能量守恒可以寫(xiě)成T_mix (Σ m_dot_i · T_i) / (Σ m_dot_i)如果各支路流量m_dot_i固定這就是線性等式。如果流量也作為決策變量就會(huì)出現(xiàn)溫度乘以流量的雙線性項(xiàng)模型從線性優(yōu)化變成非凸非線性規(guī)劃求解難度和穩(wěn)定性都會(huì)斷崖式下跌。對(duì)做優(yōu)化調(diào)度的人來(lái)說(shuō)這是最常見(jiàn)的“模型膨脹點(diǎn)”。初版方案不要硬碰雙線性項(xiàng)。先把各支路流量的分配比例固定下來(lái)等于只優(yōu)化溫度曲線上各節(jié)點(diǎn)的時(shí)序這樣整條網(wǎng)絡(luò)約束都是線性等式。等模型能穩(wěn)定收斂、調(diào)度邏輯驗(yàn)證通過(guò)后再考慮流量可調(diào)用分段線性近似或者迭代求解。我在模擬項(xiàng)目X里正是這樣處理的第一階段固定流量比優(yōu)化結(jié)果成本已經(jīng)比忽略熱慣性的方案低不少第二階段再用迭代法微調(diào)流量收益增量很小但求解時(shí)間翻了數(shù)倍性價(jià)比很低。3. 優(yōu)化調(diào)度模型的完整數(shù)學(xué)骨架3.1 目標(biāo)函數(shù)購(gòu)電、售電、燃?xì)馀c棄風(fēng)懲罰怎么打架日前優(yōu)化調(diào)度的目標(biāo)函數(shù)是系統(tǒng)總運(yùn)行成本最小化暫不考慮啟停成本和機(jī)組壽命損耗時(shí)可以寫(xiě)成min Σ_t [ c_buy(t)·P_buy(t) - c_sell(t)·P_sell(t) c_gas·F_gas(t) c_curtail·P_curtail(t) ]其中P_buy是電網(wǎng)購(gòu)電功率P_sell是售電功率。很多情況下同一聯(lián)絡(luò)線不可能同時(shí)購(gòu)售電要加一條互斥約束。c_gas是單位燃?xì)鈨r(jià)格F_gas是CHP燃?xì)庀牧?。棄風(fēng)懲罰c_curtail不一定是真實(shí)罰款更常見(jiàn)的是給它一個(gè)大值來(lái)體現(xiàn)“能不棄就不棄”的調(diào)度偏好。目標(biāo)函數(shù)的取舍直接影響優(yōu)化結(jié)果如果棄風(fēng)懲罰設(shè)得太低求解器會(huì)拿風(fēng)電當(dāng)可自由削減的變量掩蓋真實(shí)問(wèn)題如果設(shè)得太高又可能讓儲(chǔ)能過(guò)度充放以致?lián)p耗成本超過(guò)棄風(fēng)節(jié)省。我的經(jīng)驗(yàn)是先把棄風(fēng)率作為后處理統(tǒng)計(jì)指標(biāo)目標(biāo)函數(shù)里只寫(xiě)現(xiàn)金成本和固定懲罰值然后用敏感性分析看棄風(fēng)懲罰變化對(duì)總成本的影響再回頭定這個(gè)系數(shù)。3.2 決策變量清單哪些連續(xù)哪些必須上整數(shù)寫(xiě)代碼之前先列變量清單是效率最高的做法。系統(tǒng)級(jí)模型需要以下幾類(lèi)決策變量類(lèi)型變量單位說(shuō)明CHP電出力P_chp、熱出力H_chpMW受熱電可行域約束AA-CAES壓縮機(jī)功率P_c、膨脹機(jī)功率P_dMW充放電不能同時(shí)發(fā)生AA-CAES儲(chǔ)氣室能量E_air、蓄熱罐熱量E_heatMWh狀態(tài)變量需寫(xiě)遞推式熱網(wǎng)節(jié)點(diǎn)供水溫度T_s(n,t)、回水溫度T_r(n,t)℃延遲與混溫約束電網(wǎng)購(gòu)電功率P_buy、售電功率P_sellMW互斥風(fēng)電棄風(fēng)功率P_curtailMW等于預(yù)測(cè)功率減消納功率整數(shù)充放電狀態(tài)u_c、u_d0/1避免同時(shí)充放這里面最難處理的是溫度變量。溫度本身不是功率量級(jí)通常在幾十到一百之間而功率變量動(dòng)輒幾百平衡等式里二者通過(guò)流量和比熱容相乘建立聯(lián)系數(shù)值尺度差很大求解器容易觸發(fā)數(shù)值警告。所以在建模時(shí)要提前把溫度坐標(biāo)做平移比如統(tǒng)一減去基準(zhǔn)環(huán)境溫度讓溫度變量落在0到50的相對(duì)范圍內(nèi)數(shù)值穩(wěn)定性會(huì)好很多。3.3 AA-CAES的儲(chǔ)氣與蓄熱狀態(tài)約束AA-CAES的兩個(gè)核心狀態(tài)方程是E_air(t1) E_air(t) η_c · P_c(t) · Δt - P_d(t) · Δt / η_d - E_loss(t)E_heat(t1) E_heat(t) α_rec · P_c(t) · Δt - P_d(t) · Δt / H_HR - H_ext(t) · ΔtE_loss是儲(chǔ)氣室泄漏和散熱損失一般按存儲(chǔ)量的一個(gè)小比例近似。α_rec是壓縮熱回收率通常在0.7到0.9之間。H_HR表示每兆瓦電出力需要從蓄熱介質(zhì)取走的熱功率反映空氣在膨脹前需要的加熱量H_ext是AA-CAES向外直供熱網(wǎng)的熱功率在熱電聯(lián)產(chǎn)場(chǎng)景里這是跟CHP強(qiáng)耦合的關(guān)鍵變量千萬(wàn)不能漏。我見(jiàn)過(guò)很多代碼把蓄熱罐熱量寫(xiě)成和E_air共用同一個(gè)SOC上限實(shí)際上是錯(cuò)的。蓄熱介質(zhì)的熱容量由儲(chǔ)熱材料和罐體尺寸決定跟儲(chǔ)氣室壓力上限沒(méi)有直接關(guān)系。正確做法是把E_air和E_heat分別設(shè)上下限并在充放電功率約束里增加“當(dāng)前蓄熱熱量能否支撐放電所需加熱”的邏輯約束防止優(yōu)化器把放電視為無(wú)代價(jià)的電能輸出。3.4 CHP可行域與熱網(wǎng)動(dòng)態(tài)耦合約束的合并方式抽凝式CHP的電熱可行域是一個(gè)凸多邊形常見(jiàn)約束可以表達(dá)為P_chp_min - k1 · H_chp ≤ P_chp ≤ P_chp_max - k2 · H_chp其中k1、k2是抽汽系數(shù)取值決定熱出力對(duì)電出力上下限的影響程度。這個(gè)線性多邊形約束寫(xiě)起來(lái)不難麻煩的是把它跟熱網(wǎng)動(dòng)態(tài)約束放到一起時(shí)會(huì)出現(xiàn)“源供熱量不等于用戶耗熱量”的疑問(wèn)。加入熱慣性后熱源供熱與用戶散熱之間要保持的是帶有蓄熱差分項(xiàng)的等式例如用供水管道的總熱容量C_net近似表達(dá)熱網(wǎng)蓄熱狀態(tài)變化Σ_h H_source(h,t) H_demand(t) C_net · [T_s_avg(t) - T_s_avg(t-1)] / Δt H_loss(t)這個(gè)式子左邊是CHP和AA-CAES供出的總熱量右邊是用戶負(fù)荷、管網(wǎng)蓄熱變化量和散熱損失。C_net是熱網(wǎng)等效熱容T_s_avg是所有節(jié)點(diǎn)供水溫度的加權(quán)平均值。它沒(méi)有試圖精確追蹤每個(gè)房間的室溫但把熱慣性最核心的“熱量可以暫存在管網(wǎng)里”這個(gè)能力表達(dá)出來(lái)了而且完全是線性約束。要把建筑物蓄熱也加進(jìn)來(lái)只需在H_demand(t)前面加一個(gè)建筑等效熱容項(xiàng)形式一樣。4. 代碼落地從拓?fù)鋽?shù)據(jù)到求解器出結(jié)果的全流程4.1 數(shù)據(jù)結(jié)構(gòu)與參數(shù)準(zhǔn)備先別急著寫(xiě)優(yōu)化代碼把數(shù)據(jù)結(jié)構(gòu)和測(cè)試用例準(zhǔn)備好能省一半調(diào)試時(shí)間。我習(xí)慣用以下目錄組織data/topology.json節(jié)點(diǎn)、管道、熱源、用戶的連接關(guān)系data/loads.csv用戶熱負(fù)荷、電負(fù)荷曲線data/electricity_price.csv日前分時(shí)電價(jià)data/params.jsonAA-CAES效率、容量、熱網(wǎng)管長(zhǎng)管徑等參數(shù)src/model.py建模與求解腳本results/輸出出力曲線與成本統(tǒng)計(jì)拓?fù)湮募亲钊菀妆缓鲆暤沫h(huán)節(jié)。我建議用節(jié)點(diǎn)編號(hào)列表加邊列表的方式存每個(gè)管道字段寫(xiě)明長(zhǎng)度、直徑、傳熱系數(shù)、起始節(jié)點(diǎn)和終止節(jié)點(diǎn)。提前寫(xiě)一個(gè)函數(shù)計(jì)算每個(gè)管段的傳輸延遲步長(zhǎng)和溫降系數(shù)因?yàn)檫@兩個(gè)值在建模時(shí)會(huì)被反復(fù)引用。用一個(gè)csv存延遲索引矩陣shape是[管段數(shù), 時(shí)段數(shù)]第(i,t)個(gè)元素表示第i段管道在t時(shí)刻接收到的入口溫度對(duì)應(yīng)的原始時(shí)段序號(hào)。模擬項(xiàng)目X的測(cè)試算例用了六節(jié)點(diǎn)五管段的簡(jiǎn)化網(wǎng)絡(luò)節(jié)點(diǎn)1和2是熱源節(jié)點(diǎn)節(jié)點(diǎn)3到6是熱用戶管道長(zhǎng)度從300米到1200米不等供水溫度設(shè)計(jì)值約90℃回水溫度約50℃。這個(gè)規(guī)模足夠驗(yàn)證建模邏輯又不會(huì)在調(diào)試初期引入過(guò)多的求解負(fù)擔(dān)。4.2 建模核心代碼片段與延遲索引技巧在Python里用主流商業(yè)MILP求解器建模時(shí)核心代碼結(jié)構(gòu)類(lèi)似下面這段。我只給出骨架具體參數(shù)根據(jù)場(chǎng)景填入。import numpy as np from some_milp_solver import Model # 基礎(chǔ)維度 T 24 # 日前調(diào)度24個(gè)時(shí)段 dt 1.0 # 時(shí)段長(zhǎng)度小時(shí) nodes [0, 1, 2, 3, 4, 5] pipes [...] # 每條管道: (起點(diǎn), 終點(diǎn), delay_steps, drop_coeff) # 決策變量 p_chp {} h_chp {} for t in range(T): p_chp[t] model.add_var(lb0, ubP_CHP_MAX, namefp_chp_{t}) h_chp[t] model.add_var(lb0, ubH_CHP_MAX, namefh_chp_{t}) p_ch model.add_vars(T, lb0, ubP_CH_MAX, namep_ch) p_dc model.add_vars(T, lb0, ubP_DC_MAX, namep_dc) e_air model.add_vars(T, lbE_AIR_MIN, ubE_AIR_MAX, namee_air) e_heat model.add_vars(T, lbE_HEAT_MIN, ubE_HEAT_MAX, namee_heat) # 熱源節(jié)點(diǎn)供水溫度 temp_s {} for n in nodes: for t in range(T): temp_s[n, t] model.add_var(lbT_AMB, ubT_SUP_MAX, namefTs_{n}_{t})延遲索引是這段代碼最容易出錯(cuò)的地方。假設(shè)管道i的延遲步長(zhǎng)為k則# 延遲: 出口溫度 入口溫度在t-k時(shí)刻的值按溫降系數(shù)衰減 for pipe in pipes: i, j, k, phi pipe for t in range(T): if t - k 0: src_t t - k model.add_constr( temp_s[j, t] - T_AMB phi * (temp_s[i, src_t] - T_AMB) ) else: # 調(diào)度周期開(kāi)始前管道內(nèi)已有熱水取初始穩(wěn)態(tài)溫度 model.add_constr( temp_s[j, t] - T_AMB phi * (T_INIT - T_AMB) )這里的坑在于如果t-k小于0不能直接忽略約束因?yàn)閮?yōu)化器會(huì)把出口溫度當(dāng)成自由變量從而“免費(fèi)”獲得熱量。正確做法是用調(diào)度開(kāi)始時(shí)的初始溫度填充這一段。初始溫度從上一個(gè)調(diào)度周期的末端狀態(tài)讀取工程上叫“跨日銜接”我的建議是把模型滾動(dòng)起來(lái)每周跑一次168小時(shí)的調(diào)度而不是每天孤立地跑24小時(shí)。4.3 模型不可行時(shí)的排查順序聯(lián)立約束越多越容易在某個(gè)角落出現(xiàn)不可行。求解器返回Infeasible時(shí)我的排查順序非常固定。先看能量平衡約束。用外掛腳本把所有節(jié)點(diǎn)的供給量求和、需求量求和檢查是否至少滿足“總供給大于總需求”的基本條件。很多時(shí)候不可行是因?yàn)闇y(cè)試數(shù)據(jù)里熱負(fù)荷總和高于所有熱源上限總和這時(shí)該調(diào)參數(shù)而不是調(diào)代碼。再看互斥和啟停約束。充放電狀態(tài)用二進(jìn)制變量互斥時(shí)要注意狀態(tài)與功率的耦合u_c1時(shí)P_c可以取正但P_c的上限也要跟u_c相乘。如果忘了給功率上限乘狀態(tài)變量求解器可能讓u_c0但P_c0模型直接數(shù)理矛盾。接著看溫度約束。熱網(wǎng)節(jié)點(diǎn)溫度下限常常被忽略。供熱量減小到一定程度時(shí)為了保證用戶側(cè)供水溫度不低于設(shè)計(jì)值溫度約束會(huì)比功率約束更緊模型表現(xiàn)為“雖然電量平衡沒(méi)問(wèn)題但整體不可行”。解決辦法是檢查每個(gè)熱源節(jié)點(diǎn)的最低出口溫度約束是否和供熱量的下限匹配。最后才查數(shù)值問(wèn)題比如某個(gè)參數(shù)量綱寫(xiě)錯(cuò)導(dǎo)致約束系數(shù)差出1e6倍。量綱問(wèn)題是新手最容易踩的坑我單獨(dú)專(zhuān)門(mén)說(shuō)。4.4 量綱與數(shù)值尺度問(wèn)題能源系統(tǒng)模型里功率、能量、溫度、流量的單位經(jīng)?;煊?。統(tǒng)一的規(guī)范是功率用MW能量用MWh溫度用℃質(zhì)量流量用kg/s比熱容用kJ/(kg·K)。特別注意用MW乘以小時(shí)得到MWh而如果直接用kW就會(huì)讓約束系數(shù)差1000倍。溫降系數(shù)φ一般是個(gè)0.7到1.0之間的小數(shù)而購(gòu)電電價(jià)可能只有幾百元/MWh。目標(biāo)函數(shù)里的成本系數(shù)和約束系數(shù)之間差異很大在求解器里容易觸發(fā)“大數(shù)吃小數(shù)”的數(shù)值警告。解決方法是把目標(biāo)函數(shù)統(tǒng)一改成萬(wàn)元或者千元為單位并且把溫度變量做平移讓所有變量盡量都落在0.1到1000這個(gè)區(qū)間。求解器的參數(shù)設(shè)置也有講究。MIP gap設(shè)成1%到3%就夠了沒(méi)必要追求精確最優(yōu)。時(shí)間限制建議先設(shè)120秒跑通邏輯再放開(kāi)到600秒做最終結(jié)果。數(shù)值容差保持默認(rèn)不要為了通過(guò)可行性檢查而去調(diào)大容差否則最后得到的“最優(yōu)解”在物理上可能根本站不住腳。5. 算例驗(yàn)證熱慣性到底省了多少成本5.1 三套對(duì)比方案的設(shè)計(jì)思路為了單獨(dú)把熱慣性的價(jià)值量化出來(lái)我設(shè)計(jì)了三個(gè)方案方案ACHP獨(dú)立運(yùn)行熱網(wǎng)按瞬時(shí)平衡處理也就是供熱功率嚴(yán)格等于用戶熱負(fù)荷不加AA-CAES。方案B在方案A基礎(chǔ)上接入AA-CAES但熱網(wǎng)仍然按瞬時(shí)平衡熱慣性不建模。方案C完整模型AA-CAES加區(qū)域供熱網(wǎng)絡(luò)熱慣性全部進(jìn)入約束。三個(gè)方案共用同一套六節(jié)點(diǎn)熱網(wǎng)、同一臺(tái)CHP、同一個(gè)AA-CAES參數(shù)、同一份風(fēng)電預(yù)測(cè)和分時(shí)電價(jià)。熱負(fù)荷曲線取冬季典型日晚高峰熱負(fù)荷高風(fēng)電出力在凌晨高、白天低峰谷電價(jià)差按3:1設(shè)置。AA-CAES參數(shù)設(shè)定為壓縮機(jī)額定功率100MW膨脹機(jī)額定功率80MW儲(chǔ)氣室容量400MWh蓄熱罐容量200MWh壓縮熱回收率0.8。5.2 結(jié)果解讀調(diào)度曲線與成本對(duì)比運(yùn)行結(jié)果非常有代表性。方案A中CHP夜間為滿足單位數(shù)MW的尖峰熱負(fù)荷電出力下限被抬得很高再加上風(fēng)電場(chǎng)出力夜間電網(wǎng)外送容量不夠棄風(fēng)率超過(guò)25%。方案B加入AA-CAES后夜間多余風(fēng)電被壓縮機(jī)吸收棄風(fēng)率降到8%左右但CHP依然因?yàn)闊嶝?fù)荷剛性約束白天低電價(jià)時(shí)段電出力不能降到理想水平導(dǎo)致大量低價(jià)值電能被儲(chǔ)氣室或電網(wǎng)吞掉。方案C的結(jié)果最有趣由于熱網(wǎng)允許在夜間多蓄熱、白天少供熱CHP白天可以把熱出力降下來(lái)電出力下限隨之松動(dòng)騰出的空間讓系統(tǒng)在午間低電價(jià)時(shí)段多向電網(wǎng)購(gòu)電給AA-CAES充電在晚高峰放電。三個(gè)方案的日運(yùn)行總成本對(duì)比如下方案運(yùn)行成本萬(wàn)元/日棄風(fēng)率%說(shuō)明A24.826.3無(wú)儲(chǔ)能電熱強(qiáng)耦合B19.68.4有儲(chǔ)能但熱網(wǎng)瞬態(tài)被忽略C16.22.1儲(chǔ)能與熱慣性聯(lián)合利用方案C比方案B成本再降17.3%這筆收益幾乎全部來(lái)自熱網(wǎng)熱慣性帶來(lái)的“熱負(fù)荷時(shí)間搬移”。換句話說(shuō)不建模熱慣性儲(chǔ)能只發(fā)揮了電量搬移的作用建模之后儲(chǔ)能連熱量的搬移也一起做了系統(tǒng)調(diào)節(jié)資源的盤(pán)活程度完全不同。5.3 敏感性分析延遲時(shí)間和用戶熱容量對(duì)收益的影響熱慣性建模里有兩個(gè)參數(shù)最敏感管道傳輸延遲步長(zhǎng)和建筑等效熱容。把管道長(zhǎng)度統(tǒng)一乘以0.5到2倍運(yùn)行成本變化如下延遲時(shí)間越接近調(diào)度時(shí)段長(zhǎng)收益提升越明顯但當(dāng)延遲超過(guò)3小時(shí)之后收益增速放緩因?yàn)楣芫W(wǎng)散熱損失增大多蓄的熱量開(kāi)始“漏”掉建筑熱容增大時(shí)可允許的供熱功率下降幅度變大收益同樣上升但超過(guò)某個(gè)閾值后受限于供水溫度下限繼續(xù)增加熱容不再產(chǎn)生收益。這個(gè)結(jié)果說(shuō)明熱慣性資源有邊界不是越大越好。調(diào)度模型的價(jià)值正在于把這些資源的邊界暴露出來(lái)告訴運(yùn)行人員到底能壓多少熱出力、能壓幾個(gè)小時(shí)而不是憑經(jīng)驗(yàn)毛估。6. 調(diào)試中踩過(guò)的坑與可復(fù)用的經(jīng)驗(yàn)6.1 混溫雙線性項(xiàng)優(yōu)先固定流量比第一次把熱網(wǎng)約束寫(xiě)進(jìn)模型時(shí)我試圖讓每個(gè)節(jié)點(diǎn)的流量作為決策變量結(jié)果模型規(guī)模爆炸求解時(shí)間從一個(gè)量級(jí)跳到另一個(gè)量級(jí)。后來(lái)老老實(shí)實(shí)先做固定流量比模型變成純線性規(guī)劃任何一臺(tái)標(biāo)準(zhǔn)的MILP求解器都能在幾秒內(nèi)解完。這個(gè)教訓(xùn)是初版模型絕對(duì)不要貪求物理完備先跑通一個(gè)可解釋、可驗(yàn)證的簡(jiǎn)化版本再考慮擴(kuò)展。如果后續(xù)一定要考慮流量調(diào)節(jié)我的經(jīng)驗(yàn)是用迭代式求解第一輪固定流量得到溫度分布第二輪根據(jù)溫度和負(fù)荷重新計(jì)算各支路流量分配更新延遲矩陣再求解一次。重復(fù)兩三輪后結(jié)果趨于穩(wěn)定。這個(gè)方法雖然沒(méi)有嚴(yán)格的收斂保證但在工程場(chǎng)景下比直接求解非凸問(wèn)題實(shí)用得多。6.2 指數(shù)衰減項(xiàng)別讓它非線性管道溫降的指數(shù)表達(dá)在數(shù)學(xué)上是微妙的陷阱。如果直接把exp(-K·L/(m_dot·cp))放進(jìn)約束而m_dot是變量模型就變成非線性。我踩過(guò)一次求解器跑了半小時(shí)結(jié)果還是崩潰的。后來(lái)把所有管道的溫降系數(shù)全部預(yù)計(jì)算成常數(shù)只在流量變化幅度超過(guò)20%的時(shí)候重新計(jì)算一次并更新參數(shù)問(wèn)題立刻消失。溫降系數(shù)對(duì)成本的影響很鈍完全值得用常數(shù)近似。6.3 求解器數(shù)值問(wèn)題大M、容差與MIP gap充放電互斥約束要引入大M常數(shù)很多初學(xué)者為了保險(xiǎn)把M設(shè)成1e9結(jié)果模型出現(xiàn)嚴(yán)重的數(shù)值病態(tài)。原則是M越小越好只要比該變量的最大可能值大一點(diǎn)就行。比如充電功率上限100MWM取120就夠了不要養(yǎng)成寫(xiě)1e6的習(xí)慣。設(shè)置MIP gap為1%之后最終成本比硬算到0.01%精度只高一點(diǎn)點(diǎn)但求解時(shí)間省掉一大半。6.4 少談精細(xì)、多談魯棒實(shí)際工程數(shù)據(jù)的處理辦法現(xiàn)實(shí)項(xiàng)目里未必有完整的管道保溫參數(shù)和建筑熱容數(shù)據(jù)。我的處理辦法是熱網(wǎng)等效熱容不用管道逐段累加而是用實(shí)際運(yùn)行數(shù)據(jù)反推——取幾天供回水溫度和熱負(fù)荷的時(shí)序數(shù)據(jù)用差分方程擬合出C_net的值誤差完全可以接受。建筑蓄熱系數(shù)則按建筑類(lèi)型取值辦公建筑熱容小、住宅熱容大這是合理的工程近似。做優(yōu)化調(diào)度的人要明白一件事模型的價(jià)值不在于絕對(duì)精確預(yù)測(cè)每一分鐘室溫而在于把“可轉(zhuǎn)移的熱量”量化出來(lái)給調(diào)度員一個(gè)安全邊界。邊界內(nèi)的操作是允許的邊界外的操作需要實(shí)時(shí)校驗(yàn)。用這樣的思路去建模既能享受熱慣性帶來(lái)的收益又不會(huì)因?yàn)槟P瓦^(guò)度樂(lè)觀導(dǎo)致實(shí)際運(yùn)行中出現(xiàn)室溫失守的問(wèn)題。這也是我在模擬項(xiàng)目X里最終采用簡(jiǎn)化熱慣性模型而不是上完整計(jì)算流體力學(xué)模型的原因。這類(lèi)模型后續(xù)還能延伸很多方向比如把建筑用戶側(cè)需求響應(yīng)加進(jìn)來(lái)、把AA-CAES的聯(lián)合循環(huán)運(yùn)行特性細(xì)化、或者處理多熱源多儲(chǔ)能的聯(lián)合調(diào)度。核心思路是一致的先把物理過(guò)程簡(jiǎn)化成能求解的線性或混合整數(shù)線性約束再逐步逼近真實(shí)系統(tǒng)。每次加一個(gè)約束都用對(duì)比算例去驗(yàn)證它是否真的帶來(lái)了成本或靈活性收益而不是為了“模型顯得高級(jí)”而堆砌細(xì)節(jié)。工程上的好模型永遠(yuǎn)是簡(jiǎn)潔、可調(diào)試、經(jīng)得起對(duì)比驗(yàn)證的模型。