化調(diào)度實戰(zhàn):CSP+ORC+P2G協(xié)同建模與MILP求解)
做綜合能源系統(tǒng)優(yōu)化調(diào)度很多人都在“風(fēng)光火儲”這套經(jīng)典組合里打轉(zhuǎn)光伏加電池、風(fēng)電加電化學(xué)儲能的方案雖然成熟但優(yōu)化模型做來做去總覺得差一點“綜合”的味道。真正讓系統(tǒng)調(diào)度變得有層次感的是把光熱電站CSP、有機朗肯循環(huán)ORC和電轉(zhuǎn)氣P2G這三類單元放進同一個優(yōu)化框架里。這套組合最近我用Matlab完整實現(xiàn)了一遍從三個單元的設(shè)備建模、目標(biāo)函數(shù)與約束體系構(gòu)建到Y(jié)ALMIP調(diào)用MILP求解器得出調(diào)度方案整個過程踩了不少坑。這篇文章把我實際跑通這套綜合能源優(yōu)化調(diào)度模型的路線、參數(shù)設(shè)置和調(diào)試經(jīng)驗整理出來適合正在做IES相關(guān)課題、想從傳統(tǒng)微電網(wǎng)調(diào)度往綜合能源方向進階的讀者參考也能給做工程方案預(yù)研的朋友提供一套可以復(fù)現(xiàn)的代碼思路。1. 先把三個關(guān)鍵單元裝進模型CSP、ORC和P2G的數(shù)學(xué)表達1.1 光熱電站CSP儲熱型電源的調(diào)度優(yōu)勢從哪來光熱電站和光伏是兩回事。光伏是“太陽照著就發(fā)烏云來了就斷”出力曲線完全跟著輻照走調(diào)度上只能被動接受。CSP則多了一個大體積的儲熱系統(tǒng)TES相當(dāng)于給太陽能裝了一個“蓄水池”晴天中午太陽能產(chǎn)出的熱量除了直接送去發(fā)電還可以先把一部分存進儲熱罐等傍晚電價高或者光照變?nèi)踔笤侔褵崃糠懦鰜眚?qū)動汽輪發(fā)電機。這一條特性就讓CSP從不可控電源變成了具備時間平移能力的可調(diào)度電源在系統(tǒng)里能承擔(dān)類似火電調(diào)峰的角色。調(diào)度模型里CSP一般拆成三個環(huán)節(jié)集熱場、儲熱系統(tǒng)、發(fā)電島。集熱場的產(chǎn)熱功率由有效集熱面積、DNI直接法向輻照度和集熱效率決定寫成Q_sf(t) A_sf * DNI(t) * eta_sf這里的Q_sf是集熱場輸出的熱功率MWA_sf是集熱場面積m2eta_sf是綜合集熱效率。儲熱罐的動態(tài)約束是整個CSP模型的核心E_tes(t1) E_tes(t) (Q_sf(t) - P_csp(t) / eta_pb) * dt 0 E_tes(t) E_tes_max E_tes(1) E_tes_init E_tes(end) E_tes_endP_csp是發(fā)電島輸出的電功率eta_pb是汽輪發(fā)電系統(tǒng)的電效率所以P_csp/eta_pb就是發(fā)電所需的耗熱功率。這個等式把“集熱—儲熱—發(fā)電”三者的能量關(guān)系約束住了。這里有幾個容易踩的坑我后面第5章會細(xì)講儲熱罐容量單位是熱功率乘以時間MWh不是MW初始儲熱量和調(diào)度周期末尾的儲熱量如果不加約束結(jié)果會非常離譜——模型會在周期末把儲熱全部放光來充當(dāng)日發(fā)電量看起來成本很低實際上不滿足日循環(huán)運行要求。CSP發(fā)電島的出力上下限和爬坡速率同樣要建模。50MW的汽輪機組不是你想從0瞬間頂?shù)?0MW的每分鐘爬坡上限是多少、最小穩(wěn)定出力是多少都應(yīng)寫進約束里否則調(diào)度計劃在工程上沒法執(zhí)行。1.2 有機朗肯循環(huán)ORC中低溫余熱的“回收放大鏡”有機朗肯循環(huán)Organic Rankine CycleORC能放在綜合能源系統(tǒng)里的核心價值是回收傳統(tǒng)朗肯循環(huán)吃不動的中低溫余熱溫度范圍大概在100℃到300℃之間。這個溫度段的煙氣、熱水、導(dǎo)熱油直接排放掉太浪費用蒸汽朗肯循環(huán)又因為溫差太小沒法高效做功而ORC選用了低沸點有機工質(zhì)比如R245fa或R134a在同樣的低溫?zé)嵩礂l件下就能產(chǎn)生足夠的蒸氣壓力去推動渦輪機?;氐秸{(diào)度模型里ORC的建模比CSP簡單得多。如果熱源是系統(tǒng)外部的固定工業(yè)余熱比如某條生產(chǎn)線排煙它的余熱量在短時間內(nèi)基本恒定那么ORC就是一個“吃熱產(chǎn)電”的簡單變換環(huán)節(jié)P_orc(t) eta_orc * Q_orc_in(t) 0 Q_orc_in(t) Q_orc_avail(t) 0 P_orc(t) P_orc_maxP_orc是ORC發(fā)出的電功率eta_orc是ORC凈發(fā)電效率Q_orc_in是從余熱源回收的熱功率Q_orc_avail是當(dāng)前時段可用的余熱總量。效率這部分要提醒一下ORC效率受蒸發(fā)溫度、冷凝溫度和工質(zhì)類型影響很大不是固定常數(shù)。工程上更準(zhǔn)確的做法是查廠家提供的效率曲線或者用熱力學(xué)仿真軟件算準(zhǔn)學(xué)術(shù)調(diào)度模型中為了保持MILP的線性結(jié)構(gòu)常取一個有代表性的額定工況效率然后在靈敏度分析里重新取高、低兩個效率值各跑一遍看結(jié)果對效率取值敏不敏感。ORC的價值不僅在于“多發(fā)了幾度電”。在一個成本優(yōu)化模型里增加ORC本質(zhì)上是把原本廢棄的低品位熱能折算成了系統(tǒng)收入相當(dāng)于在不新增燃料消耗的前提下增加了出力供給降低了外購電量。它和CSP配在一起的邏輯就是高低溫互補CSP吃的是400℃以上的高溫太陽能ORC吃的是別人不要的低溫余熱兩者在溫度維度上把能量吃干榨凈。1.3 電轉(zhuǎn)氣P2G在電力與天然氣之間搭一座橋P2GPower to Gas是實現(xiàn)電氣耦合的關(guān)鍵單元。它先用電電解水制氫氫再和CO?反應(yīng)生成甲烷最終輸出的是可以直接進天然氣管網(wǎng)或儲氣設(shè)施的合成天然氣。對調(diào)度系統(tǒng)來說P2G的真正意義在于提供了一個可逆的能源轉(zhuǎn)換通道當(dāng)風(fēng)電在夜間大發(fā)而電負(fù)荷很低的時候與其把風(fēng)機扔掉或者讓火電壓到最低技術(shù)出力不如把多余的電轉(zhuǎn)成天然氣存起來白天再用燃?xì)廨啓C把氣燒成電——相當(dāng)于把“存儲時長”做到了天級甚至周級彌補了電化學(xué)儲能只能撐幾小時的短板。P2G調(diào)度模型可以這么寫V_p2g(t) eta_p2g * P_p2g(t) % 輸出燃?xì)鉄嶂礛Wh 0 P_p2g(t) P_p2g_max S_gas(t1) S_gas(t) V_p2g(t) - V_gt(t) - V_gas_load(t) V_buy(t) 0 S_gas(t) S_gas_maxV_p2g是P2G產(chǎn)出的燃?xì)鉄嶂礛Wheta_p2g是電轉(zhuǎn)氣的綜合效率P_p2g是消耗的電功率。如果追求更貼近實際可以把P2G的效率從常數(shù)改成負(fù)荷率相關(guān)的曲線電解槽在低負(fù)荷時效率明顯下降直接線性化會高估低負(fù)荷工況的產(chǎn)氣量。這一點我放在5.3節(jié)講具體的分段線性化處理。為什么要把P2G和燃?xì)廨啓C一起建模因為P2G單獨存在氣只能賣給氣網(wǎng)或直接供給氣負(fù)荷調(diào)節(jié)價值有限把它和燃?xì)廨啓C組合起來就形成了一個“電—氣—電”的閉環(huán)儲能系統(tǒng)。這也是我整個算例里P2G能真正起到削峰填谷作用的前提。2. 調(diào)度模型怎么搭目標(biāo)函數(shù)、約束體系與求解器選型2.1 目標(biāo)函數(shù)運行成本最小化的賬要這么算綜合能源優(yōu)化調(diào)度的目標(biāo)函數(shù)絕大多數(shù)情況是日運行成本最小化。這不是把設(shè)備加電費加起來那么簡單賬要算清楚不然優(yōu)化模型會找出各種“鉆空子”的調(diào)度方案。我用的目標(biāo)函數(shù)長這樣min C_buy C_sell C_gas C_om C_penaltyC_buy是向電網(wǎng)購電的費用C_sell是向電網(wǎng)售電的收入如果有售電渠道就作為負(fù)成本項C_gas是外購天然氣的費用C_om是各機組運維成本C_penalty是棄風(fēng)棄光懲罰。每項都按24個調(diào)度時段求和C_buy sum(price_buy(t) * P_buy(t)) C_gas sum(gas_price * V_buy(t)) C_om sum(om_csp * P_csp(t)) sum(om_orc * P_orc(t)) sum(om_gt * P_gt(t))電價是分時電價單位要統(tǒng)一成元/MWh。很多新手在這里栽跟頭原始資料里電價往往是元/kWh直接乘功率MW就得到元/h看似正確但24個時段求和時忘記乘時段長度1小時最后成本量綱是錯的。雖然在Δt1h的條件下數(shù)值大小一樣但思路必須清楚電量功率×?xí)r間成本功率×電價×?xí)r間。棄電懲罰項要單獨說。嚴(yán)格來說如果風(fēng)機光伏出力上限已經(jīng)作為約束寫進模型實際出力≤預(yù)測出力系統(tǒng)不會無理由棄電因為不棄電又不增加成本何樂而不為。但有些算例里允許棄電來緩解平衡壓力這時需要在目標(biāo)函數(shù)里加一個很小的單位懲罰系數(shù)比如50元/MWh目的不是真的“罰錢”而是引導(dǎo)優(yōu)化過程優(yōu)先消納新能源同時避免出現(xiàn)病態(tài)解。運維成本項切不可省。設(shè)備發(fā)一度電對應(yīng)的磨損和耗材成本如果不進入目標(biāo)函數(shù)模型會傾向于讓效率低但“免費”的設(shè)備拼命出力結(jié)果很不合理。ORC、CSP、燃?xì)廨啓C的運維成本一般在每兆瓦時幾十元水平數(shù)值不大但直接影響設(shè)備間的出力分配優(yōu)先級。2.2 約束體系電、熱、氣三類平衡和儲能動態(tài)約束綜合能源調(diào)度最容易讓模型失控的就是約束體系。我建議把約束分成三大塊平衡類、設(shè)備邊界類、動態(tài)儲能類。電功率平衡是整個調(diào)度模型最硬的一條約束所有發(fā)電單元和用電單元都要落在這條等式上P_buy(t) P_wt_use(t) P_pv_use(t) P_csp(t) P_orc(t) P_gt(t) P_load(t) P_p2g(t) P_sell(t)風(fēng)電光伏的“實際出力”在模型里定義為變量并且小于等于預(yù)測值0 P_wt_use(t) P_wt_forecast(t) 0 P_pv_use(t) P_pv_forecast(t)這樣模型就有棄風(fēng)棄光的自由度了。熱平衡在這套系統(tǒng)里主要由CSP內(nèi)部承擔(dān)。前面1.1節(jié)的儲熱動態(tài)方程其實就是熱平衡集熱場產(chǎn)熱發(fā)電耗熱儲熱量變化。溫度層面的熱網(wǎng)平衡如果算例里有外部熱負(fù)荷還需要加鍋爐或其他熱源但為了聚焦CSPORCP2G的耦合邏輯我這里把它視為內(nèi)部熱平衡不引入獨立的供熱管網(wǎng)約束。ORC用的外部余熱不參與系統(tǒng)內(nèi)部熱平衡方程按固定可用的熱源曲線給定即可。氣平衡約束連接了P2G、儲氣罐、燃?xì)廨啓C和氣負(fù)荷V_p2g(t) V_buy(t) V_gt(t) V_gas_load(t) (S_gas(t1) - S_gas(t))這個寫法里儲氣罐的充放氣通過罐存量的變化體現(xiàn)出來簡潔且不容易出錯。S_gas的單位是MWh熱值如果原始數(shù)據(jù)里氣量用的是m3記得用天然氣熱值折算1m3天然氣熱值約0.01MWh這個換算系數(shù)務(wù)必統(tǒng)一。設(shè)備邊界約束就是各單元的出力上下限、爬坡約束、最小啟停時間約束。CSP、ORC、P2G、燃?xì)廨啓C都有最小技術(shù)出力。為了保持24小時日循環(huán)儲熱罐和儲氣罐還必須有始末狀態(tài)約束我習(xí)慣寫E_tes(end) E_tes(1)S_gas(end) S_gas(1)意思是一個調(diào)度周期結(jié)束時儲能不能比開始時少保證這種調(diào)度方案可以長期日復(fù)一日地運行。2.3 為什么用MILP線性化處理與求解器選擇同樣是優(yōu)化問題求解策略差的不是一點半點。早期很多文獻用粒子群、遺傳算法這類元啟發(fā)式方法優(yōu)點是可以處理任意非線性和非凸問題缺點是每次運行結(jié)果不一樣而且沒法保證全局最優(yōu)。綜合能源調(diào)度本質(zhì)上是一個帶儲量動態(tài)約束和多時段耦合的決策問題這類問題用混合整數(shù)線性規(guī)劃MILP加商業(yè)求解器才是主流因為MILP求解器基于分支定界法能給出最優(yōu)性和可行性的量化證明。要把問題寫成MILP前提是目標(biāo)函數(shù)和約束都是線性表達式。CSP和ORC按額定常數(shù)效率建模時整個問題就是線性的P2G如果也取常數(shù)效率整件事就只剩下啟停狀態(tài)需要引入0-1變量。設(shè)備啟停的邏輯用big-M法表達P_dev(t) P_dev_max * u_dev(t) P_dev(t) P_dev_min * u_dev(t)u_dev是0-1變量表示設(shè)備在t時段是否運行。這樣電力系統(tǒng)加上儲能的運行約束、機組爬坡約束整體就是一個標(biāo)準(zhǔn)的MILP。我用的是Matlab加YALMIP工具箱求解器接Gurobi或CPLEX。YALMIP的好處是建模語言接近數(shù)學(xué)表達式迭代改模型非常方便。商業(yè)求解器對個人學(xué)術(shù)用戶有免費授權(quán)渠道如果不能使用商業(yè)求解器開源的HiGHS也能解MILPYALMIP同樣支持。求解器選擇上不要過度糾結(jié)關(guān)鍵是模型質(zhì)量線性化做得干凈求解速度自然就上來了。3. Matlab實操從參數(shù)文件到調(diào)度方案的完整實現(xiàn)3.1 程序結(jié)構(gòu)設(shè)計與參數(shù)準(zhǔn)備我寫這類調(diào)度程序文件組織一定分成四級主腳本、參數(shù)文件、約束構(gòu)建腳本、結(jié)果分析腳本。別把所有代碼堆在一個文件里模型改參數(shù)和調(diào)約束的時候會瘋掉。習(xí)慣的目錄結(jié)構(gòu)如下|-- main.m % 主腳本讀參數(shù)、建變量、建約束、求解、調(diào)結(jié)果分析 |-- params_system.m % 設(shè)備參數(shù)、電價、負(fù)荷、新能源預(yù)測數(shù)據(jù) |-- build_constraints.m % 把約束條件集中到一個函數(shù)里 |-- plot_results.m % 畫調(diào)度曲線圖 |-- result/ % 存放運行結(jié)果參數(shù)文件里所有數(shù)據(jù)集中用結(jié)構(gòu)體組織比如params.csp.A_sf這樣不要散落成幾十個孤立的變量名。主腳本的第一步是把參數(shù)加載進來設(shè)置好24小時的時段步長dt1。%% 主腳本 main.m clear; clc; run params_system.m; % 讀取全部參數(shù) dt 1; % 調(diào)度時段長度單位h T 24; % 調(diào)度周期24h數(shù)據(jù)準(zhǔn)備階段最容易出問題的就是曲線數(shù)據(jù)的長度。負(fù)荷曲線、風(fēng)電預(yù)測、光伏預(yù)測、DNI預(yù)測必須是24×1的列向量或者1×24的行向量并且時間對齊。我吃過一次虧負(fù)荷曲線是從0點到23點DNI數(shù)據(jù)是從1點到24點結(jié)果第一時段和最后一個時段全對不上平衡約束怎么可能滿足。3.2 典型場景與算例參數(shù)設(shè)置為了讓后面的結(jié)果對比有意義算例的參數(shù)必須自洽。我用的模擬算例是一個設(shè)想的區(qū)域型綜合能源系統(tǒng)所有設(shè)備參數(shù)如下表所示設(shè)備參數(shù)數(shù)值單位風(fēng)電場裝機容量80MW光伏電站裝機容量60MWCSP發(fā)電島最大出力50MWCSP集熱場面積120000m2CSP集熱效率0.45—CSP儲熱罐容量800MWhCSP發(fā)電效率0.42—ORC余熱回收上限15MWORC發(fā)電效率0.13—P2G額定電功率20MWP2G電轉(zhuǎn)氣效率0.65—儲氣罐容量上限500MWh燃?xì)廨啓C最大出力30MW燃?xì)廨啓C發(fā)電效率0.45—這些參數(shù)里有兩個細(xì)節(jié)值得說明。一是儲熱罐容量800MWh折合到50MW的發(fā)電島滿發(fā)時每小時需要熱量50/0.42≈119MW也就是說儲熱罐從滿到空大約能支撐發(fā)電島滿發(fā)6.7小時這個比例符合實際光熱電站的設(shè)計邏輯。二是P2G效率0.65指的是電到天然氣熱值的轉(zhuǎn)換效率目前工程上電制氫效率大約70%左右再經(jīng)甲烷化會有額外損失整體0.65是偏樂觀但學(xué)術(shù)算例可以接受的值。分時電價采用三段式結(jié)構(gòu)谷段350元/MWh平段650元/MWh峰段1050元/MWh。一天的時段劃分用代碼寫清楚price_buy [ 350*ones(7,1); % 0:00-7:00 谷 650*ones(3,1); % 7:00-10:00 平 1050*ones(5,1); % 10:00-15:00 峰 650*ones(3,1); % 15:00-18:00 平 1050*ones(3,1); % 18:00-21:00 峰 650*ones(2,1); % 21:00-23:00 平 350*ones(1,1); % 23:00-24:00 谷 ]; % 24×1單位元/MWh負(fù)荷和新能源預(yù)測數(shù)據(jù)不需要在這里寫全用典型的日曲線形狀就行負(fù)荷早上8點開始爬升午后14點達到小高峰晚上19-20點達到全天最高風(fēng)電夜間出力大白天小DNI從早上6點開始增長中午13點達到峰值750W/m218點以后歸零。后面提到的全部結(jié)果分析都是基于這套模擬數(shù)據(jù)。為了驗證子系統(tǒng)之間的協(xié)同關(guān)系我設(shè)計了三個對比場景場景編號場景說明對比目的場景1CSP ORC P2G 燃?xì)廨啓C全接入完整系統(tǒng)基準(zhǔn)方案場景2去掉P2G和燃?xì)廨啓C驗證P2G的消納和調(diào)峰價值場景3去掉ORC驗證ORC余熱回收的經(jīng)濟價值這三個場景在同一個負(fù)荷曲線、同一個新能源出力和同一套電價下運行排除變量再來看結(jié)果才能說明問題。3.3 約束構(gòu)建與求解調(diào)用代碼實例下面展示YALMIP建模的關(guān)鍵代碼。首先定義所有決策變量%% 決策變量定義 P_csp sdpvar(T,1); % CSP發(fā)電功率MW E_tes sdpvar(T,1); % 儲熱罐熱儲量MWh Q_sf sdpvar(T,1); % 集熱場產(chǎn)熱功率MW P_orc sdpvar(T,1); % ORC發(fā)電功率MW P_p2g sdpvar(T,1); % P2G耗電功率MW V_p2g sdpvar(T,1); % P2G產(chǎn)氣熱值MWh V_gt sdpvar(T,1); % 燃?xì)廨啓C耗氣熱值MWh P_gt sdpvar(T,1); % 燃?xì)廨啓C發(fā)電功率MW S_gas sdpvar(T,1); % 儲氣罐儲量MWh P_buy sdpvar(T,1); % 購電功率MW P_wt sdpvar(T,1); % 風(fēng)電實際出力MW P_pv sdpvar(T,1); % 光伏實際出力MW u_csp binvar(T,1); % CSP啟停標(biāo)志 u_p2g binvar(T,1); % P2G啟停標(biāo)志 u_gt binvar(T,1); % 燃?xì)廨啓C啟停標(biāo)志接下來構(gòu)建約束。電功率平衡、CSP儲熱動態(tài)、P2G產(chǎn)氣和儲氣罐動態(tài)是四個最關(guān)鍵的約束塊Cons []; %% 電功率平衡 Cons [Cons, P_buy P_wt P_pv P_csp P_orc P_gt P_load P_p2g]; %% CSP模型 Cons [Cons, Q_sf params.csp.A_sf * DNI * params.csp.eta_sf]; Cons [Cons, E_tes(2:end) E_tes(1:end-1) ... (Q_sf(2:end) - P_csp(2:end) / params.csp.eta_pb) * dt]; Cons [Cons, E_tes(1) params.csp.E_tes_init]; Cons [Cons, E_tes(end) params.csp.E_tes_init]; Cons [Cons, 0 E_tes params.csp.E_tes_max]; Cons [Cons, 0 P_csp params.csp.P_max * u_csp]; Cons [Cons, P_csp params.csp.P_min * u_csp]; %% P2G模型 Cons [Cons, V_p2g params.p2g.eta * P_p2g]; Cons [Cons, 0 P_p2g params.p2g.P_max * u_p2g]; %% 儲氣罐動態(tài) Cons [Cons, S_gas(2:end) S_gas(1:end-1) ... (V_p2g(2:end) - V_gt(2:end) - V_gas_load(2:end)) * dt]; Cons [Cons, S_gas(1) params.gas.S_init]; Cons [Cons, S_gas(end) params.gas.S_init]; Cons [Cons, 0 S_gas params.gas.S_max]; %% 燃?xì)廨啓C Cons [Cons, P_gt params.gt.eta * V_gt]; Cons [Cons, 0 P_gt params.gt.P_max * u_gt]; Cons [Cons, 0 V_gt params.gt.V_max * u_gt]; %% 新能源出力上限 Cons [Cons, 0 P_wt P_wt_forecast]; Cons [Cons, 0 P_pv P_pv_forecast];求解調(diào)用是最后一步設(shè)置好求解器和MIP gap就可以跑了%% 目標(biāo)函數(shù) price_buy_vec price_buy(:); Objective 0; Objective Objective sum(price_buy_vec .* P_buy); % 購電成本 Objective Objective sum(params.gas.price * V_buy); % 購氣成本 Objective Objective sum(params.om.csp * P_csp); % CSP運維 Objective Objective sum(params.om.orc * P_orc); % ORC運維 Objective Objective sum(params.om.gt * P_gt); % 燃?xì)廨啓C運維 %% 求解 ops sdpsettings(solver, gurobi, verbose, 2, ... mipgap, 0.0001, savesolveroutput, 1); sol optimize(Cons, Objective, ops); if sol.problem 0 disp(求解成功); else disp([求解失敗: sol.info]); end注意一個細(xì)節(jié)V_buy外購氣必須在變量定義里加上它出現(xiàn)在目標(biāo)函數(shù)中同時參與儲氣罐動態(tài)約束。我經(jīng)常在建模時只考慮到P2G產(chǎn)氣和燃?xì)廨啓C耗氣把外購氣這個自由度忘了導(dǎo)致整個氣平衡被卡死。4. 調(diào)度結(jié)果怎么看多場景對比驗證協(xié)同效益4.1 典型日調(diào)度計劃拆解跑完場景1的優(yōu)化調(diào)度得到的24小時發(fā)電計劃可以明顯看出三個單元的“性格分工”。夜間23點到次日7點是電價谷段。此時電負(fù)荷處于低谷但風(fēng)電出力往往處于全天最高系統(tǒng)面臨兩個選擇降低風(fēng)電出力棄電或者讓P2G啟動耗電制氣。優(yōu)化結(jié)果會選擇讓P2G在谷段以較高負(fù)荷運行把棄電風(fēng)險轉(zhuǎn)化為儲氣罐里的天然氣儲氣罐的儲量在夜里有明顯爬升。燃?xì)廨啓C在谷段基本不發(fā)電因為此時即使P2G制氣后再燒氣發(fā)電綜合效率才0.65×0.45≈29%再加上谷段電價只有350元/MWh怎么算都不如直接從電網(wǎng)購電劃算這是典型的“低買高賣”邏輯。上午10點到15點的高峰時段CSP的儲熱能力開始發(fā)力。中午DNI最強集熱場產(chǎn)熱量大一部分熱量直接發(fā)電一部分存入儲熱罐。等到下午16點以后DNI快速下降時儲熱罐開始放熱支撐CSP繼續(xù)滿發(fā)甚至爬坡出力。這個“午間儲熱、午后放熱”的行為模式正是CSP區(qū)別于光伏的價值所在。ORC在這一天里基本以穩(wěn)定功率持續(xù)運行只要余熱源不斷它就一直發(fā)著那2MW左右的基底電量出力曲線平平的但一天累計下來就是幾十MWh的免費電量。燃?xì)廨啓C發(fā)電集中在兩個時段一個是晚上負(fù)荷高峰20點左右一個是電價峰段且儲氣罐儲量充足的時候。燃?xì)廨啓C的出力不是很大它承擔(dān)的是平衡電價的邊際機組角色——當(dāng)購電價格超過燃?xì)廨啓C發(fā)電的等效成本時模型就會選擇燒氣發(fā)電。4.2 有無P2G/ORC的對比分析多場景對比是證明“1113”的關(guān)鍵。三個場景跑完的統(tǒng)計結(jié)果如下指標(biāo)場景1全系統(tǒng)場景2無P2G場景3無ORC日運行成本萬元152.6176.3161.8棄電率%1.26.81.6外購氣量MWh131215128燃?xì)廨啓C發(fā)電量MWh93096場景2去掉P2G和燃?xì)廨啓C后棄電率從1.2%跳到6.8%這就是夜間風(fēng)電無法消納的直接代價。沒有P2G這條“電到氣”的緩沖通道多余的電力只能棄掉。同時外購氣量從131MWh漲到了215MWh因為原本可以由P2G自產(chǎn)的天然氣現(xiàn)在必須全部從氣網(wǎng)購買來滿足氣負(fù)荷。棄電加上額外購氣成本自然會多出20多萬元/日這個數(shù)字足以說明P2G對整個系統(tǒng)經(jīng)濟性的貢獻。場景3去掉ORC后棄電率變化不大因為ORC沒有消納功能它只是一個穩(wěn)定的余熱發(fā)電單元。但日成本比全系統(tǒng)高了約9萬元相當(dāng)于每天損失了ORC發(fā)的約45MWh電量對應(yīng)的收益。ORC不參與調(diào)峰它的價值更樸素——把本來要扔掉的熱變成白來的電降低系統(tǒng)的凈購電量。從結(jié)果看ORC的價值雖然不如P2G那么戲劇化但對于長期運行的能源系統(tǒng)一年下來就是3000多萬元的節(jié)約相當(dāng)可觀。4.3 參數(shù)靈敏度的初步探索做完三場景對比建議再跑一輪參數(shù)靈敏度分析尤其是儲熱罐容量、P2G效率和分時電價差這三個參數(shù)。這幾個參數(shù)直接決定了CSP和P2G的調(diào)度策略。儲熱罐容量從800MWh逐步增大到1200MWh時系統(tǒng)日運行成本會持續(xù)下降但邊際改善會越來越弱。原因很簡單儲熱罐越大CSP就能把更多中午的太陽能熱量搬到傍晚高峰時段發(fā)電替代高價購電。但是當(dāng)儲熱罐容量已經(jīng)能夠覆蓋整個晚高峰的發(fā)電需求時再增大容量就只是增加了一部分無用儲備。每套系統(tǒng)都有一個“拐點”工程上就按這個拐點選儲熱容量避免過度投資。P2G效率從0.5提高到0.7的過程中棄電率變化不大但外購氣量會明顯下降日成本也跟著降。效率越高P2G的產(chǎn)氣成本越低模型就越愿意讓它在谷段多制氣甚至在平時段也啟動。靈敏度分析一個經(jīng)常發(fā)現(xiàn)的有趣現(xiàn)象是在效率較低的時候P2G只在谷段運行效率提高到某個閾值以后它會開始侵占平段的購電份額。這個閾值就是“制氣等效成本≈購電電價”的時刻算清楚它對項目可行性判斷很有幫助。5. 常見問題與調(diào)試實錄把這些坑填平基本就順了5.1 模型不可行從哪幾個方向找原因我調(diào)試這套模型時遇到最多的報錯就是“Infeasible problem”。模型不可行通常不是求解器的問題而是約束本身存在矛盾。按照我排查的順序你也能快速定位。第一步查電功率平衡。把目標(biāo)函數(shù)臨時設(shè)成0只求解可行域。如果還是不可行用YALMIP的diagnostic逐個時段查看平衡約束的殘差。最常見的原因是負(fù)荷曲線和新能源預(yù)測曲線的時間窗口不一致比如負(fù)荷數(shù)據(jù)是23個小時某個時段數(shù)據(jù)缺失被讀成0平衡直接破掉。第二步查儲熱和儲氣的初始狀態(tài)約束。E_tes(end) E_tes_init和S_gas(end) S_gas_init這兩條約束很“硬”如果儲熱罐容量800MWh而一天內(nèi)集熱場總產(chǎn)熱量才600MWh那不管怎么調(diào)度末端都不可能回補到初始值。這時要么把初始值調(diào)低要么放寬末端約束為E_tes(end) 0.5*E_tes_init要么干脆允許末端容積比初始少一部分反正儲能本來就是可以跨調(diào)度周期使用的不必強行日循環(huán)。第三步查設(shè)備功率上下限和爬坡約束的組合。50MW的CSP發(fā)電島如果同時綁定“最小出力20MW”和“每小時爬坡限制10MW”那么從停機狀態(tài)啟動到20MW至少要兩小時如果負(fù)荷曲線在某個時段只有10MW的空缺模型直接無解。解決辦法是把最小出力約束和設(shè)備啟停狀態(tài)解耦允許設(shè)備在啟動階段經(jīng)歷一個較低的出力區(qū)。提示遇到不可行問題時不要盲目刪約束。用YALMIP的sol.info拿到具體錯誤信息再用“逐步注釋約束塊”的方法二分定位。每次注釋掉一組約束重新求解很快就能鎖定矛盾來源。5.2 求解速度慢減少整數(shù)變量和調(diào)整求解器參數(shù)24小時調(diào)度的MILP模型變量規(guī)模并不大一般就幾百個變量、幾十個0-1變量求解時間應(yīng)該在幾秒到幾十秒量級。如果求解時間超過幾分鐘基本是建模方式出了問題。最大的嫌疑是二進制變量過多。P2G、燃?xì)廨啓C和CSP如果都用了24×1的啟停變量再加上設(shè)備啟動次數(shù)變量一下子就是70多個整數(shù)變量。其實對于日經(jīng)濟調(diào)度問題很多設(shè)備不需要啟停變量只要設(shè)定最小出力為0模型會在經(jīng)濟性驅(qū)動下自動選擇開或停。只有確實存在“啟停成本”或“最小運行時間約束”時才引入額外整數(shù)變量。我最終跑場景1時只保留了P2G和燃?xì)廨啓C的啟停變量CSP完全用連續(xù)變量建模求解時間從兩百多秒降到了二十秒以內(nèi)。求解器參數(shù)調(diào)節(jié)也有立竿見影的效果。mipgap默認(rèn)的1e-4對日調(diào)度來說過嚴(yán)了實際中0.01%的gap也就是0.0001和1e-6的經(jīng)濟性差異幾乎可以忽略。我會設(shè)置mipgap, 1e-4加timeLimit, 300讓求解器在300秒內(nèi)給出當(dāng)前最優(yōu)解。Gurobi的MIPFocus參數(shù)可以調(diào)整為尋找可行解優(yōu)先這樣即使時間受限也能拿到一個質(zhì)量不錯的調(diào)度方案。5.3 單位、儲熱與非線性處理三個最容易出錯的細(xì)節(jié)單位換算是這類項目里最隱蔽的坑。功率、能量、熱值、氣量、電價五個物理量放在一個模型里任何一個單位不一致結(jié)果都會差到離譜。我踩過的具體案例儲熱罐容量用了MWh但集熱場產(chǎn)熱功率用了kJ/s沒有轉(zhuǎn)成MW導(dǎo)致儲熱動態(tài)約束的系數(shù)差了3600倍。建議在參數(shù)文件開頭用一個total_unit的注釋塊把所有單位寫清楚每個變量名后面后綴單位比如P_csp_MW、E_tes_MWh雖然變量名長了但調(diào)試起來省心太多。儲熱罐的建模精細(xì)程度直接影響結(jié)果可信度。最簡單的單罐能量模型忽略了儲熱罐的散熱損失和充放熱的速率限制。在日調(diào)度尺度散熱損失大約占儲熱量的1%-2%每天可以折算成儲熱平衡方程里的一個漏熱系數(shù)E_tes(t1) E_tes(t) * (1 - eta_loss) (Q_sf(t) - P_csp(t)/eta_pb) * dteta_loss取0.01-0.02比較合理。此外還應(yīng)限制每小時的充放熱速率不要讓它超過某個上限否則優(yōu)化結(jié)果可能出現(xiàn)“中午一個小時內(nèi)給儲熱罐充進去200MWh”這種實際設(shè)備做不到的極端操作。P2G效率的常數(shù)處理在第1章我提過這里給出工程上的改進方向。電解槽在30%負(fù)荷時效率可能只有滿負(fù)荷的80%直接按常數(shù)效率算會高估低負(fù)荷時的產(chǎn)氣量導(dǎo)致模型過度使用P2G。改進方法是把P2G的輸入功率分成三段每一段用不同的效率系數(shù)并用0-1變量控制段的啟用順序P_p2g P_seg1 P_seg2 P_seg3 V_p2g eta1 * P_seg1 eta2 * P_seg2 eta3 * P_seg3 0 P_seg1 10*u1 0 P_seg2 5*u2 0 P_seg3 5*u3 u1 u2 u3最后一條約束u1u2u3保證了第三段不可能在第二段沒啟用時單獨啟用也就是負(fù)荷段必須按順序進入。這是分段線性化的一個標(biāo)準(zhǔn)寫法雖然會增加幾個整數(shù)變量但對模型精度提升非常明顯。如果你的系統(tǒng)對產(chǎn)氣量精度要求高這一步值得做。整套模型跑下來我最深的體感是綜合能源調(diào)度項目的功夫一半在建模一半在查錯純粹寫代碼的時間其實只占三成。CSP儲熱方程的時間耦合、P2G和燃?xì)廨啓C之間的氣平衡耦合、儲熱罐末端狀態(tài)約束這三處只要有一處沒對齊求解器就會用“不可行”三個字教你做人。建議第一次跑的時候別急著把全部單元塞進去先跑一個“風(fēng)機光伏電網(wǎng)購電”的微電網(wǎng)調(diào)度跑通了再加CSP再加ORC和P2G每加一個單元就跑一遍三場景對比。這樣出問題時定位清晰也對每個單元在系統(tǒng)里的真實作用有了直觀判斷。我個人習(xí)慣是每次調(diào)完參數(shù)都把三個場景的結(jié)果貼在同一張圖上對比著看而不是只看單場景的調(diào)度曲線——很多單元的價值只有對比才看得出來。