日前經(jīng)濟調(diào)度模型復(fù)現(xiàn)與求解經(jīng)驗)
做電熱綜合能源系統(tǒng)調(diào)度研究的朋友應(yīng)該都有過這種體驗?zāi)P涂蚣艽钇饋砗芸煺嬲屓税疽沟耐恰盀槭裁唇Y(jié)果不合理”和“為什么求解器不收斂”。這段時間我剛好在Matlab環(huán)境里完整復(fù)現(xiàn)了一個考慮可再生能源消納的電熱綜合能源系統(tǒng)日前經(jīng)濟調(diào)度模型從數(shù)學(xué)建模、求解器選型到算例驗證都走了一遍踩了不少坑也沉淀了一些經(jīng)驗寫出來供大家參考。這個模型的核心價值很明確把電力系統(tǒng)調(diào)度和熱力系統(tǒng)調(diào)度放進同一個優(yōu)化框架里讓電鍋爐、儲熱罐、熱泵這些設(shè)備參與削峰填谷從而提升風(fēng)電、光伏等可再生能源的消納水平。無論你是剛接觸綜合能源系統(tǒng)方向的研究生還是已經(jīng)在做園區(qū)級多能互補工程的工程師這篇內(nèi)容都會對你有用。我會圍繞模型為什么這么建、Matlab代碼怎么組織、求解器怎么選、算例結(jié)果怎么分析這幾個層次展開最后把我在調(diào)試過程中遇到的高頻問題一并梳理出來。1. 為什么必須把熱網(wǎng)放進日前調(diào)度里1.1 “以熱定電”是棄風(fēng)的第一推手北方冬季供暖期熱電聯(lián)產(chǎn)機組CHP的發(fā)電出力并不自由。為了保證供熱溫度機組必須保持一定的抽汽量而抽汽量直接約束了發(fā)電出力區(qū)間——這就是行業(yè)內(nèi)常說的“以熱定電”。簡單說當(dāng)熱負荷高的時候CHP機組的電出力下限會被抬高于是系統(tǒng)中其他電源的可用空間就被壓縮了尤其是優(yōu)先性較差但邊際成本極低的風(fēng)電第一個被犧牲掉。我最早做這個項目時第一版模型只考慮電力系統(tǒng)的平衡結(jié)果非常典型夜間熱負荷不變但電網(wǎng)負荷很低風(fēng)電出力卻達到峰值。因為沒有熱力環(huán)節(jié)的調(diào)節(jié)手段調(diào)度結(jié)果直接砍掉大量風(fēng)電棄風(fēng)率一度超過30%。這時候我才意識到問題不在風(fēng)電預(yù)測不準(zhǔn)而在電熱兩個系統(tǒng)之間存在“權(quán)力的不平衡”——熱負荷在早上六點提交需求電系統(tǒng)只能在剩下空間里安排風(fēng)電這本質(zhì)上是一個系統(tǒng)耦合結(jié)構(gòu)導(dǎo)致的資源錯配。所以把熱網(wǎng)納入優(yōu)化范圍目的不是把兩個系統(tǒng)強行拼接而是讓熱負荷也具備“可調(diào)節(jié)性”為風(fēng)電讓出空間。常見的手段包括電鍋爐、吸收式熱泵、儲熱罐等它們共同的作用是拆掉CHP機組的“電熱剛性耦合”。1.2 熱網(wǎng)本身的“儲能屬性”被大多數(shù)人忽略了很多初學(xué)者有個誤區(qū)覺得儲熱罐才是唯一的熱儲能設(shè)備。事實上熱力管網(wǎng)本身就是一個自帶慣性的大規(guī)模儲能系統(tǒng)。供熱管道的溫度變化是緩變的熱水在管網(wǎng)里循環(huán)一圈需要幾十分鐘甚至數(shù)小時這意味著熱負荷的供應(yīng)不必嚴(yán)格實時匹配——只要保證在幾個小時的時間窗口內(nèi)有足夠的蓄熱量用戶端的室溫就不會明顯波動。日前調(diào)度的時間尺度是小時級而且調(diào)度視野是24小時這就給了熱網(wǎng)溫度平抑策略足夠的發(fā)揮空間。在建模時可以做兩種選擇一種是忽略管道動態(tài)只把熱負荷當(dāng)成普通節(jié)點負荷另一種是把管網(wǎng)模型簡化為一階慣性環(huán)節(jié)或儲熱等效節(jié)點。后者雖然多了一些約束但模型對“風(fēng)電高發(fā)時段提前蓄熱”這種操作的表達能力完全不同。我個人的建議是第一版先別追求管網(wǎng)動態(tài)精度先用儲熱罐熱泵的配置驗證調(diào)度邏輯跑通了再往里面加管網(wǎng)細節(jié)。1.3 目標(biāo)函數(shù)不是成本最小這么簡單經(jīng)濟調(diào)度的目標(biāo)函數(shù)看起來非常直白——“總運行成本最小”但展開之后每一個成本項都有自己的脾氣。常規(guī)機組有煤耗成本、啟停成本CHP有電熱聯(lián)合生產(chǎn)成本電鍋爐有耗電成本這些都好辦。真正需要認真權(quán)衡的是“棄風(fēng)懲罰”怎么定價。如果懲罰系數(shù)設(shè)得過高模型會為了讓風(fēng)電多發(fā)而不惜啟動昂貴的電鍋爐從全系統(tǒng)經(jīng)濟運行角度反而不劃算如果懲罰系數(shù)設(shè)得過低模型會傾向于棄風(fēng)。業(yè)界通常的做法是把棄風(fēng)懲罰設(shè)置為常規(guī)機組發(fā)電成本的1.2到1.5倍讓它在“多燒煤”和“棄風(fēng)電”之間形成合理的經(jīng)濟折中。還有個可選加分項是碳交易成本。在雙碳背景下很多省份已經(jīng)把碳配額納入火電成本這時候目標(biāo)函數(shù)里要加上碳排放量的線性懲罰項。不過要注意碳價參數(shù)本身就是不確定的強耦合進調(diào)度模型后會給敏感性分析帶來額外工作量除非論文或工程確有需要第一版不建議加入。2. 日前經(jīng)濟調(diào)度模型的數(shù)學(xué)表達方式2.1 決策變量和系統(tǒng)邊界一定要先畫清楚建模之前我習(xí)慣先畫一張系統(tǒng)能量流圖電源側(cè)接風(fēng)電場、光伏電站、常規(guī)火電機組、CHP機組熱源側(cè)接CHP余熱、電鍋爐、儲熱罐負荷側(cè)是電負荷和熱負荷系統(tǒng)邊界處是聯(lián)絡(luò)線可以與大電網(wǎng)交換功率。這張圖決定了所有變量的定義范圍畫錯了后面會很痛苦。具體的決策變量包括每臺CHP機組的電出力和熱出力、火電機組出力、風(fēng)電場實際上網(wǎng)功率、光伏實際出力、電鍋爐耗電功率和產(chǎn)熱功率、儲熱罐充放熱功率和儲熱 SOC、聯(lián)絡(luò)線交換功率以及各機組的啟停狀態(tài)二進制變量。這些都是典型的連續(xù)變量加整數(shù)變量混合體所以模型天然是一個混合整數(shù)優(yōu)化問題。值得額外注意的是可再能源出力變量的處理方式。很多文章喜歡用“預(yù)測出力等于實際上網(wǎng)功率”的等式約束這是很粗糙的。更合理的做法是讓實際上網(wǎng)功率成為一個決策變量只約束它不小于0且不大于預(yù)測值至于棄風(fēng)棄光量則通過目標(biāo)函數(shù)的懲罰項來優(yōu)化決定。這就是“軟約束懲罰”的設(shè)計思路比硬性約束科學(xué)得多。2.2 約束條件的全家福與分類約束條件大致可以分為四層。第一層是平衡約束包括電功率平衡約束、熱功率平衡約束核心思想是每個時刻“源側(cè)出力儲能釋放外購電”必須等于“負荷儲能充入”。第二層是設(shè)備出力約束包括機組上下限、爬坡速率限制、電鍋爐容量、儲熱罐儲熱容量和充放熱速率限制。第三層是網(wǎng)絡(luò)約束包括支路潮流限制和節(jié)點電壓上下限視算例規(guī)模和精度需求可以用直流潮流或交流潮流建模。第四層是啟停邏輯約束涉及最小開關(guān)機時間、啟停狀態(tài)與出力范圍聯(lián)動等。我在建模過程中用到的約束分類可以看下面這個表格約束類型典型表達式建模要點電功率平衡∑P_G ∑P_W P_buy P_load P_EB P_HP外購電變量方向要統(tǒng)一符號別弄反熱功率平衡∑H_CHP H_EB H_dis H_load H_ch儲熱放熱為正儲熱為負機組出力約束P_min·u ≤ P ≤ P_max·u二進制變量配合大M實現(xiàn)邏輯聯(lián)動爬坡約束-RD ≤ P(t1) - P(t) ≤ RU要考慮啟停時的出力量是否跳過爬坡限制儲熱約束SOC_min ≤ SOC(t) ≤ SOC_maxSOC初值要和24小時末值聯(lián)合約束形成日循環(huán)風(fēng)電消納約束0 ≤ P_W(t) ≤ P_W_pre(t)避免寫成等式導(dǎo)致強制棄風(fēng)或無謂懲罰這里面最容易出錯的就是儲熱罐SOCState of Charge儲熱狀態(tài)的日循環(huán)約束。日前調(diào)度一般是周期性調(diào)度如果SOC只約束下限上限而不約束一天結(jié)束時的狀態(tài)那么優(yōu)化結(jié)果會傾向于把熱量在最后時刻全部放光以便“低成本”滿足負荷結(jié)果完全失真。解決方法是加一個等式約束SOC_T SOC_0或者至少約束SOC_T ≥ SOC_min_return保證第二天調(diào)度有足夠連續(xù)工況。2.3 非線性項的線性化處理電熱聯(lián)合調(diào)度模型里有兩個經(jīng)典的非線性來源一個是火電機組的煤耗曲線通常是凸二次函數(shù)直接進優(yōu)化模型就成了MIQP混合整數(shù)二次規(guī)劃雖然不是不能求解但求解效率要讓位于MILP另一個是CHP機組的可行域工程上常用一個梯形或五邊形區(qū)域來刻畫電熱出力耦合關(guān)系邊界是分段線性的但引入二進制變量后同樣會變成混合整數(shù)結(jié)構(gòu)。我在實現(xiàn)中選擇的做法是把煤耗成本曲線按出力區(qū)間做分段線性近似PWL。簡單說就是把發(fā)電出力分成若干段每段對應(yīng)一個固定斜率整體近似出一條凸分段線性費用曲線。分段數(shù)取3到5段時精度已經(jīng)能控制在1%以內(nèi)但求解速度會比完全二次模型快數(shù)倍。這個線性化操作在Matlab里用矩陣形式寫非常簡單把每個區(qū)間段的出力分解成多個連續(xù)變量并設(shè)置每段上限再在目標(biāo)函數(shù)里用各段斜率乘上對應(yīng)段出力即可。核心要義是確保分解后各段的取值范圍形成組合約束防止模型“跳過前面的區(qū)間直接用后面的高價段”。這里必須強調(diào)一個經(jīng)驗分段線性化引入的額外變量和約束并不多但收益很大。我在測試中同一個38節(jié)點算例原MIQP在CPLEX里要跑40多秒分段線性化后的MILP只需要6秒代價僅僅是成本誤差0.3%在工程上完全可以接受。3. Matlab代碼實現(xiàn)中的關(guān)鍵細節(jié)3.1 算例結(jié)構(gòu)和數(shù)據(jù)組織方式項目選用中國電科院一個經(jīng)典38節(jié)點電熱耦合算例做骨架。該算例包含常規(guī)火電節(jié)點、風(fēng)電場節(jié)點、CHP節(jié)點和熱負荷節(jié)點拓撲結(jié)構(gòu)適中非常適合學(xué)術(shù)驗證。數(shù)據(jù)組織是整個編碼階段的基石我強烈建議把所有原始參數(shù)統(tǒng)一放到一個結(jié)構(gòu)體或表格對象里不要在求解腳本里散落硬編碼數(shù)字。我的數(shù)據(jù)組織方式是定義一個名為sys的結(jié)構(gòu)體內(nèi)部字段包含gen發(fā)電機參數(shù)表、chp熱電聯(lián)產(chǎn)參數(shù)表、wind風(fēng)電預(yù)測時序、load電負荷時序、heat_load熱負荷時序、grid網(wǎng)絡(luò)拓撲鄰接矩陣等。每個字段的列順序在注釋里寫清楚比如gen的第1列到第6列分別是機組編號、最大出力、最小出力、爬坡上限、爬坡下限、煤耗系數(shù)。這樣做的好處是后邊求解器生成約束時可以直接按列索引構(gòu)建矩陣不容易出現(xiàn)數(shù)據(jù)對不上號的情況。另外一點容易被忽視的是時間粒度的選擇。歐美文獻習(xí)慣用1小時為調(diào)度間隔國內(nèi)許多園區(qū)項目用15分鐘一個斷面全天96個點。時間粒度選得越小系統(tǒng)動態(tài)表達越精細但變量規(guī)模翻倍求解時間非線性增長。我的建議是第一版先從24小時粒度跑通邏輯確認結(jié)果合理后再切到96點精細優(yōu)化兩個版本之間只改時間軸數(shù)組和負荷曲線的插值方式其他代碼結(jié)構(gòu)完全一樣。3.2 求解器選型CPLEX、BONMIN還是原對偶內(nèi)點法Matlab環(huán)境下求解優(yōu)化問題有幾種路線各有利弊。如果模型最終是一個MILP商業(yè)求解器CPLEX效果最穩(wěn)定YALMIP或MATLAB自帶的intlinprog接口都能調(diào)用。這里有個容易混淆的點許多文獻寫的是“用BONMIN求解”那是針對MINLP混合整數(shù)非線性規(guī)劃的求解器。如果你的模型里保留CHP可行域非線性項或交流潮流約束用BONMIN這類外點法求解器是合理的但收斂速度和初值依賴性都是問題。我個人的實操體會是第一版務(wù)必把模型改造成MILP用CPLEX跑先確認調(diào)度結(jié)果在經(jīng)濟學(xué)上是合理的如果需要計及真實交流潮流或熱網(wǎng)水力工況的非線性約束才考慮引入原對偶內(nèi)點法或迭代式潮流求解后者我會在下一節(jié)單獨說。至于有人用智能優(yōu)化算法比如遺傳算法、粒子群求解我理解某些論文需要對比算法性能但工程上不建議作為首選因為可重復(fù)性和全局最優(yōu)性都無法保證。使用YALMIP的建模過程其實可以寫得非常簡潔。定義一個包含24小時所有時段優(yōu)化的Constraints單元數(shù)組循環(huán)疊加平衡約束和設(shè)備約束目標(biāo)函數(shù)用sum求和最后調(diào)用optimize(Constraints, Objective, options)即可。如果不用YALMIP直接用intlinprog就要把所有時段變量一次性都堆進一個大向量手動構(gòu)建矩陣和不等式系數(shù)代碼會多出幾百行。這里不是看不起手寫矩陣而是明確告訴大家在Matlab里做這類研究YALMIP是生產(chǎn)力工具值得優(yōu)先掌握。3.3 雅可比迭代與潮流約束的嵌入邏輯當(dāng)需要在日前經(jīng)濟調(diào)度里加入電網(wǎng)潮流約束時一個常見的做法是用直流潮流近似——精度足夠且保持線性。但直流潮流丟掉電壓和無功信息如果論文里要算概率潮流指標(biāo)就得回到交流潮流框架。折中方案是把潮流計算放進一個外層迭代循環(huán)內(nèi)層用原對偶內(nèi)點法求解調(diào)度主問題得到各節(jié)點注入功率后外層用牛頓-拉夫遜法計算交流潮流并提取雅可比矩陣和靈敏度信息把線路過載或電壓越限的約束反饋回主問題通過增廣拉格朗日項或者割平面迭代修正。這個過程很像工程里的“分解協(xié)調(diào)法”雖然數(shù)學(xué)上不是全程嚴(yán)格最優(yōu)但在實際應(yīng)用中收斂性不錯計算時間也可控。這種迭代框架在Matlab里用自帶優(yōu)化工具箱就能搭起來并不一定需要CPLEX參與。唯一需要注意的是潮流方程中節(jié)點的PV/PQ轉(zhuǎn)換邏輯一定要寫對否則雅可比矩陣奇異時會直接報錯排查就非常費勁。如果嫌麻煩也可以直接把潮流約束簡化為功率傳輸分布因子PTDF矩陣用直流潮流的靈敏度公式把傳輸容量約束寫成線性不等式。這個方法在38節(jié)點規(guī)模下完全夠用。3.4 代碼結(jié)構(gòu)建議五段式布局一份完整的日前調(diào)度Matlab程序建議按五個模塊組織數(shù)據(jù)加載模塊load_data.m、模型構(gòu)建模塊build_model.m、求解模塊solve_model.m、結(jié)果后處理模塊postprocess.m、繪圖輸出模塊plot_result.m。這套分層設(shè)計的核心價值在于調(diào)試友好當(dāng)結(jié)果出現(xiàn)反直覺的現(xiàn)象比如棄風(fēng)率不降反升我能很快定位是數(shù)據(jù)問題、約束寫錯還是求解參數(shù)不合適而不是在一整片腳本里從頭到尾翻。說一個真實的教訓(xùn)我曾經(jīng)在postprocess階段復(fù)核電量平衡發(fā)現(xiàn)每個斷面上總有0.5 MWh左右的電量缺口。排查了一整天最后發(fā)現(xiàn)是電鍋爐的耗電功率變量在模型里被定義成了“熱功率輸出”而非“電輸入”兩者之間少乘了一個能效比系數(shù)。這種單位換算錯誤從語法層面完全抓不到只能靠結(jié)果復(fù)核校驗邏輯來發(fā)現(xiàn)。所以強烈建議在每個模塊間增加中間變量打印或者寫入Excel人眼檢查幾個關(guān)鍵斷面。4. 可再生能源的不確定性到底怎么納入模型4.1 確定性調(diào)度的局限性剛才講的全過程本質(zhì)上是一個確定性優(yōu)化風(fēng)電預(yù)測曲線是給定的模型在“完美預(yù)測”的前提下做決策。但實際上風(fēng)電預(yù)測誤差是非常顯著的尤其在日內(nèi)尺度上。確定性調(diào)度結(jié)果雖然看著成本低、消納率高但一旦實際風(fēng)力和預(yù)測值差出30%備用容量不足系統(tǒng)就得實時切負荷或者緊急調(diào)整機組實際運行成本會遠高于日前計算結(jié)果。我見過不少文獻在“結(jié)論”里直接寫“本模型可有效提高可再生能源消納率”卻沒有交代預(yù)測誤差帶來的風(fēng)險補償成本。這類結(jié)論其實是不嚴(yán)謹?shù)?。所以如果想證明你搭建的模型有應(yīng)用價值建議在確定性模型跑通之后至少做一次蒙特卡洛仿真測試把風(fēng)電預(yù)測誤差按正態(tài)分布或?qū)崪y誤差分布抽樣模擬多個場景看看日前調(diào)度方案在滾動修正后的實際運行成本分布情況。4.2 隨機優(yōu)化與魯棒優(yōu)化兩種最常用的路線考慮不確定性的建模路線業(yè)界主流有兩套。一套是隨機規(guī)劃Stochastic Programming生成若干風(fēng)電出力場景每場景賦一個概率目標(biāo)函數(shù)變成所有場景運行成本的期望值最小化同時約束分別在各場景下滿足。這個方法的好處是信息利用充分、經(jīng)濟性較好壞處是需要提前做場景削減否則模型規(guī)模會爆炸。常見的場景削減手段有K-medoids聚類、同步回代削減法Backward Reduction等可以把500個場景縮到20個而誤差保持在可接受范圍。另一套是魯棒優(yōu)化Robust Optimization假設(shè)風(fēng)電出力在一個不確定區(qū)間內(nèi)波動目標(biāo)是找到即使在最惡劣出力組合下也可行的調(diào)度方案必要時代價為讓渡部分經(jīng)濟性。魯棒優(yōu)化的關(guān)鍵是不確定集合的設(shè)計一般會用盒式集合加預(yù)算約束避免所有節(jié)點同時達到最惡劣出力這種保守場景。從計算角度說魯棒對偶后模型仍可保持為MILP很適合在Matlab里用CPLEX求解。我的建議是如果你的研究重點在消納機制和系統(tǒng)耦合先做隨機優(yōu)化如果你的研究重點在極端天氣下系統(tǒng)的安全韌性那魯棒優(yōu)化更合適。兩者并不沖突也可以做成兩階段模型日前階段做魯棒決策日內(nèi)階段利用滾動預(yù)測做隨機調(diào)整這種模型寫起來復(fù)雜但能同時覆蓋經(jīng)濟性與保守性。4.3 概率潮流與機會約束的實操接口在計及風(fēng)電不確定性時還有一個工程實現(xiàn)細節(jié)值得單獨說就是概率潮流。傳統(tǒng)潮流計算給定一組注入功率輸出一組確定的潮流分布概率潮流則是給注入功率一個概率分布輸出節(jié)點電壓和線路潮流的概率分布比如越限概率為5%時對應(yīng)的最低電壓。這一指標(biāo)特別適合用來生成機會約束比如約束“線路傳輸功率越限的概率不能超過5%”通過概率潮流的靈敏度分析可以得到線性化的近似不等式。我在Matlab里的實現(xiàn)方式是分三明治結(jié)構(gòu)外層抽樣生成風(fēng)電出力場景中間層每個場景跑一次直流潮流或交流潮流統(tǒng)計線路流過功率的分布內(nèi)層再把分位數(shù)約束線性化回到主問題。這個結(jié)構(gòu)的計算量主要在外層場景數(shù)量上一般500個場景就足夠穩(wěn)定。需要注意的是當(dāng)變量維數(shù)較高時直接保存所有場景的潮流結(jié)果矩陣可能會讓內(nèi)存吃緊建議邊抽樣邊累積統(tǒng)計量不要一次性存完整場。4.4 改進智能算法適合在什么位置我身邊不少朋友拿到模型第一反應(yīng)是“用改進灰狼優(yōu)化算法IGWO跑”這個思路在論文里做算法性能對比沒有問題但如果模型本身是一個大規(guī)模MILP用智能算法求解實際上是拿自己的短處和商用求解器的長處硬碰硬。我測試對比過CPLEX和IGWO在同一個38節(jié)點確定性模型上的表現(xiàn)CPLEX得到全局最優(yōu)解耗時6秒IGWO在2000次迭代后得到的解仍比CPLEX成本高約2.3%并且每次運行結(jié)果有波動。所以我的建議是當(dāng)模型保持MILP結(jié)構(gòu)時優(yōu)先用CPLEX當(dāng)模型引入高度非線性的熱網(wǎng)水力學(xué)或交流潮流約束導(dǎo)致無法直接交給商業(yè)求解器時再考慮IGWO等啟發(fā)式算法作為替代求解手段而不是把它當(dāng)“默認解法”。5. 算例結(jié)果分析、敏感性測試與常見故障排查5.1 典型結(jié)果怎么看消納率提升是表象日循環(huán)是本質(zhì)我在上述38節(jié)點算例上設(shè)定了四種運行場景做對比純電調(diào)度不考慮熱網(wǎng)、電熱聯(lián)合且配置電鍋爐、電熱聯(lián)合且配置儲熱罐、電熱聯(lián)合同時配置電鍋爐和儲熱罐。其他參數(shù)保持一致風(fēng)電裝機容量占比設(shè)為總負荷峰值的25%。結(jié)果對比如下運行場景棄風(fēng)率%總運行成本/萬元儲熱罐日循環(huán)次數(shù)純電調(diào)度28.7132.6無電熱聯(lián)合電鍋爐14.2127.9無電熱聯(lián)合儲熱罐9.6125.40.9電熱聯(lián)合電鍋爐儲熱罐4.8122.11.2從結(jié)果里能讀出幾個有價值的信息。第一單純加電鍋爐可以降棄風(fēng)但電鍋爐本身耗電在高電價時段運行反而推高成本所以經(jīng)濟性提升不顯著。第二儲熱罐的加入讓熱電聯(lián)產(chǎn)機組可以在夜間多儲熱、白天少產(chǎn)熱實際上是把CHP的發(fā)電出力從夜間高位移到白天高位更好匹配了電網(wǎng)負荷曲線成本下降更明顯。第三兩個手段組合起來成本降幅并非簡單疊加而是有協(xié)同效應(yīng)因為儲熱罐給了電鍋爐更靈活的運行區(qū)間電鍋爐不必在風(fēng)電出力高峰一股腦全開。5.2 敏感性分析到底要測哪些變量仿真模型跑通之后除了展示“分時電價下系統(tǒng)經(jīng)濟性最優(yōu)”這種結(jié)果我建議做兩個方向的敏感性分析。第一個是風(fēng)電滲透率從10%逐步增加到40%觀察棄風(fēng)率拐點在哪里。很多算例在滲透率20%以下時棄風(fēng)率增長平緩一旦超過某個閾值棄風(fēng)率會陡增。這時候你需要調(diào)整儲熱容量或增加電鍋爐容量觀察擴容對拐點的推動作用。這個結(jié)果對系統(tǒng)規(guī)劃非常有參考價值能為儲能配比提供量化依據(jù)。第二個是熱負荷水平變化的影響。北方供暖期的熱負荷并非恒定初冬和深冬差得很多??梢栽跓嶝摵煞逯瞪舷赂?0%做場景掃描看調(diào)度成本和棄風(fēng)率的譜線趨勢。我自己實際跑下來發(fā)現(xiàn)熱負荷越高風(fēng)電消納率下降越明顯——因為高負荷下CHP電出力下限抬升得更狠這從物理直覺上完全說得通但把這條曲線表繪制出來放在論文里審稿人會明顯覺得你的分析有深度。5.3 求解不收斂和不可行問題排查手冊下面這部分是我最想寫給所有調(diào)試者的內(nèi)容。Matlab環(huán)境下做優(yōu)化模型遇到的報錯就那幾類每一類的排查路徑都很固定。第一類“Infeasible problem”不可行問題。出現(xiàn)這個提示首先查的是約束矛盾而不是求解器參數(shù)。我常用的二分法定位思路是這樣的先把所有整數(shù)變量固定成某組可行值然后依次屏蔽約束集合找到讓模型恢復(fù)可行的那一組約束再仔細審查這組約束里的邊界條件和單位。最常見的坑是熱負荷和電負荷的量綱不統(tǒng)一比如一個用了MW一個用了GJ/h兩者在熱平衡方程里直接相加數(shù)值差了近三倍。第二類求解時間爆炸。模型不是不可行就是半天不出結(jié)果。這類問題的根源多數(shù)是決策變量沒有縮放到合理量綱。Chp出力是兆瓦量級儲熱罐容量是吉焦量級如果變量直接混在一起目標(biāo)函數(shù)里某一項的數(shù)值遠大于另一項求解器會把大量時間花在克服數(shù)值病態(tài)上。我的處理辦法是統(tǒng)一除以系統(tǒng)基準(zhǔn)值比如100 MVA或某個典型負荷值把變量歸一化到0.1到10這個舒適區(qū)間求解速度往往提升一個數(shù)量級。第三類結(jié)果震蕩或初值敏感。這個問題多出現(xiàn)在用內(nèi)點法或啟發(fā)式算法時。內(nèi)點法對初值很敏感一個不合理的初始點可能導(dǎo)致迭代發(fā)散。我的經(jīng)驗是先讓所有機組從中間出力比如50%額定起步儲熱罐SOC從50%起步求解穩(wěn)定性會好很多。如果用IGWO這類啟發(fā)式算法結(jié)果震蕩多是收斂條件設(shè)置得太寬松或者種群規(guī)模太小需要把最大迭代次數(shù)拉長并重復(fù)跑多次取最優(yōu)。第四類雅可比矩陣奇異。這個報錯十有八九是節(jié)點類型設(shè)置錯誤比如把某個本來應(yīng)該做PV節(jié)點的發(fā)電機節(jié)點寫成了PQ節(jié)點導(dǎo)致該節(jié)點既沒有給定電壓也沒有給定無功出力潮流方程缺了一個自由度。排查方法是打印節(jié)點類型和節(jié)點注入功率逐行核對是否有節(jié)點未被任何設(shè)備連接以及平衡節(jié)點是否設(shè)置正確。5.4 后處理階段容易被低估的價值很多人在算例結(jié)果出來后就急著截圖收工但后處理階段如果能多做一步“日運行Gantt圖”或“電熱負荷平衡堆疊圖”對理解調(diào)度邏輯有很大幫助。我在Matlab里用area函數(shù)畫96點電功率平衡堆疊圖底部是常規(guī)機組出力上面疊CHP電出力再疊風(fēng)電出力最頂部是電鍋爐耗電和聯(lián)絡(luò)線交換功率。這樣一眼就能看出風(fēng)電機組在半夜是被哪些設(shè)備“讓路”的也能看出儲熱罐充放熱時段和電價峰谷的關(guān)系。我還常用一個交叉驗證腳本在求解結(jié)束后重新把所有平衡約束計算一遍檢查最大不平衡量是否在容差范圍內(nèi)。這個腳本看起來“多此一舉”但在我調(diào)試過程中至少幫我抓出過兩次隱蔽的單位錯誤和數(shù)據(jù)錯位比事后看曲線的效率高得多。做仿真研究的人和做工程的人有個共同點永遠不要完全信任第一次運行的結(jié)果數(shù)據(jù)校驗環(huán)節(jié)絕不能省。6. 我的幾點體會與后續(xù)擴展建議做完整套模型最大的體會是綜合能源系統(tǒng)調(diào)度的難點不在于某一類設(shè)備的運行約束有多復(fù)雜而在于多類設(shè)備之間的時間尺度、量綱和可調(diào)節(jié)性差異。電是秒級傳輸熱能是小時級慣性風(fēng)電是間歇隨機熱負荷又有很強的剛性拼勁。把這四個特性擰在一起還能用一套優(yōu)化模型描述本身就需要反復(fù)平衡建模精度和求解可行性。對于剛?cè)胧值淖x者我的建議是先不要碰交流潮流也不要急著加不確定性。老老實實先把確定性MILP跑通電力平衡、熱力平衡、儲熱日循環(huán)、風(fēng)電消納約束四大塊都正確了再逐步擴展。這一步如果走了捷徑后面所有分析都會建立在一個不牢固的基礎(chǔ)上。另外我個人建議最好給這個模型加一個簡單的“數(shù)據(jù)可視化Dashboard”哪怕只是把所有設(shè)備和負荷曲線畫在同一個面板上。模型規(guī)模越大越需要一眼看清系統(tǒng)狀態(tài)的工具。我在調(diào)試時還發(fā)現(xiàn)一個非常實用的小技巧每個求解斷點都打印一次目標(biāo)函數(shù)各成本分量的組成比如煤耗成本、購電成本、棄風(fēng)懲罰各占多少。如果發(fā)現(xiàn)棄風(fēng)懲罰在目標(biāo)函數(shù)里占比異常高那就不是消納能力問題而是懲罰系數(shù)設(shè)置不合理需要回到參數(shù)標(biāo)定環(huán)節(jié)。目前這套模型還有兩個方向想繼續(xù)擴展一是把過去滾動調(diào)度機制加進去模擬日前計劃和日內(nèi)調(diào)整的雙尺度銜接二是引入碳捕集設(shè)備的電碳耦合特性把碳流和能流一起優(yōu)化。兩個方向都還在搭模塊階段等代碼調(diào)通之后我再把實際效果和踩坑經(jīng)歷整理出來繼續(xù)分享。