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