優(yōu)化調(diào)度實(shí)戰(zhàn):Cplex求解冷熱電聯(lián)供與碳交易模型)
做綜合能源系統(tǒng)優(yōu)化的朋友對(duì)這個(gè)方向肯定不陌生。冷、熱、電、氣四類能量在園區(qū)或建筑層面耦合起來(lái)燃?xì)廨啓C(jī)發(fā)電、余熱回收制冷制熱、不足的部分用電或燃?xì)庋a(bǔ)充再疊加上需求響應(yīng)和碳交易這兩個(gè)市場(chǎng)化機(jī)制——這基本就是當(dāng)前綜合能源系統(tǒng)優(yōu)化研究的標(biāo)準(zhǔn)配置。題目標(biāo)題里的“采用Cplex求解”則是這個(gè)領(lǐng)域最常見的落地方式把系統(tǒng)建模成一個(gè)混合整數(shù)線性規(guī)劃問(wèn)題交給商業(yè)求解器去算最優(yōu)調(diào)度計(jì)劃。這篇文章我把自己做這類項(xiàng)目的完整思路、建模細(xì)節(jié)、求解技巧和踩坑記錄整理出來(lái)。準(zhǔn)備做類似方向畢業(yè)設(shè)計(jì)、科研項(xiàng)目或者在實(shí)際園區(qū)里搞過(guò)能源調(diào)度、想系統(tǒng)了解模型寫法的朋友可以直接照這個(gè)框架去搭。整個(gè)研究的內(nèi)核可以概括成一句話在滿足冷、熱、電、氣負(fù)荷需求的前提下考慮用戶側(cè)可調(diào)節(jié)的響應(yīng)能力以及碳排放配額和碳價(jià)帶來(lái)的成本信號(hào)以總費(fèi)用最小為目標(biāo)求解未來(lái)24小時(shí)或更長(zhǎng)時(shí)間尺度內(nèi)各設(shè)備的出力計(jì)劃。別看這句話簡(jiǎn)單真把模型寫出來(lái)、讓Cplex穩(wěn)定求出結(jié)果、再讓結(jié)果能講出道理每一步都有不少細(xì)節(jié)。1. 先搞清楚這個(gè)研究到底在算什么1.1 四聯(lián)供系統(tǒng)到底長(zhǎng)什么樣所謂四聯(lián)供是指系統(tǒng)同時(shí)供應(yīng)冷、熱、電、氣四種能量形式。注意這個(gè)“氣”有兩層含義一是天然氣作為燃料輸入驅(qū)動(dòng)燃?xì)廨啓C(jī)和燃?xì)忮仩t二是某些場(chǎng)景下天然氣本身也會(huì)直接供給用戶比如餐飲用氣、工業(yè)用氣不過(guò)絕大多數(shù)優(yōu)化研究中氣主要作為燃料側(cè)出現(xiàn)實(shí)際優(yōu)化變量是“買多少氣”以及“氣如何分配給不同設(shè)備”。典型場(chǎng)景我習(xí)慣拿一個(gè)綜合園區(qū)舉例。園區(qū)里有辦公樓、實(shí)驗(yàn)室、食堂可能還有小型數(shù)據(jù)中心。樓宇有電負(fù)荷、冬季有熱負(fù)荷、夏季有冷負(fù)荷。能源站里裝了一臺(tái)燃?xì)廨啓C(jī)燒天然氣發(fā)電發(fā)電的同時(shí)產(chǎn)生高溫?zé)煔馔ㄟ^(guò)余熱鍋爐回收變成蒸汽或熱水。這部分余熱一部分直接供熱一部分進(jìn)入吸收式制冷機(jī)變成冷水供冷。如果余熱不夠就用燃?xì)忮仩t補(bǔ)熱或者用電制冷機(jī)補(bǔ)冷。電不夠就從電網(wǎng)買電電多了也能反售給電網(wǎng)。再加上電儲(chǔ)能、蓄熱罐、蓄冷罐整個(gè)系統(tǒng)的能量流動(dòng)網(wǎng)絡(luò)就成型了。這個(gè)構(gòu)型為什么流行因?yàn)樗プ×寺?lián)供系統(tǒng)最核心的經(jīng)濟(jì)邏輯燃?xì)廨啓C(jī)發(fā)一度電大約產(chǎn)生1.5到2.5倍于發(fā)電量的余熱這些余熱如果不利用就直接排掉了利用起來(lái)制冷或供熱替代了原本要用天然氣或電去產(chǎn)生的冷熱量綜合能源利用效率可以大幅提升。優(yōu)化的本質(zhì)就是在不同時(shí)段、不同價(jià)格信號(hào)下決定每一度氣是“先發(fā)電再用熱”更劃算還是“直接燒鍋爐”更劃算。1.2 需求響應(yīng)和碳交易為什么會(huì)改變調(diào)度結(jié)果很多人一開始想不明白沒有需求響應(yīng)和碳交易系統(tǒng)已經(jīng)能優(yōu)化了加上這兩個(gè)機(jī)制到底改變了什么先看需求響應(yīng)。傳統(tǒng)優(yōu)化把負(fù)荷當(dāng)成剛性數(shù)據(jù)空調(diào)該開多少就是多少電梯該跑就跑。但實(shí)際上樓宇負(fù)荷有相當(dāng)大的柔性。夏天最熱的時(shí)候辦公室空調(diào)溫度從24度調(diào)到26度人的體感變化不大但冷負(fù)荷能降下去一塊工廠里某些可中斷工序被通知后在高峰時(shí)段停一小時(shí)補(bǔ)償一點(diǎn)費(fèi)用給用戶電網(wǎng)削峰效果立竿見影。需求響應(yīng)引入后負(fù)荷從“不可動(dòng)”變成了“可削、可移、可調(diào)”這等于給優(yōu)化問(wèn)題增加了新的自由度。優(yōu)化的結(jié)果會(huì)傾向于在電價(jià)高的時(shí)段削減或轉(zhuǎn)移用電在碳價(jià)和電價(jià)疊加的尖峰時(shí)段更加明顯。再看碳交易。傳統(tǒng)優(yōu)化只算經(jīng)濟(jì)賬燒多少氣、買多少電乘以價(jià)格就行。碳交易加入后碳排放本身變成了一項(xiàng)有價(jià)格的“資源”。免費(fèi)配額就像政府發(fā)的“碳排放額度信用卡”實(shí)際排放一旦超過(guò)額度就得去碳市場(chǎng)買配額低于額度富余的配額可以賣錢。于是燃?xì)廨啓C(jī)什么時(shí)候開、開多少不再只看氣價(jià)和電價(jià)還要看天然氣燃燒產(chǎn)生的碳排放成本以及從電網(wǎng)購(gòu)電對(duì)應(yīng)的間接排放成本。當(dāng)碳價(jià)升高時(shí)系統(tǒng)可能傾向于減少低效機(jī)組的出力或者調(diào)整天然氣和電網(wǎng)購(gòu)電的比例。這正是碳交易機(jī)制發(fā)揮減排引導(dǎo)作用的具體體現(xiàn)。1.3 研究路線總覽按我自己的經(jīng)驗(yàn)這類研究的標(biāo)準(zhǔn)路線分四步走。第一步搭系統(tǒng)架構(gòu)確定設(shè)備類型、容量、效率參數(shù)明確能量流動(dòng)方向第二步數(shù)學(xué)建模寫目標(biāo)函數(shù)和約束條件本質(zhì)是把物理規(guī)律和經(jīng)濟(jì)規(guī)則翻譯成數(shù)學(xué)表達(dá)式第三步求解分析用Cplex等求解器計(jì)算最優(yōu)調(diào)度方案第四步對(duì)比討論設(shè)置不同場(chǎng)景比如無(wú)需求響應(yīng)、有需求響應(yīng)、有碳交易、兩者都有做對(duì)照實(shí)驗(yàn)觀察系統(tǒng)運(yùn)行成本、碳排放量、設(shè)備出力結(jié)構(gòu)的變化規(guī)律。整條路線看起來(lái)簡(jiǎn)單但每一步的細(xì)節(jié)決定成敗接下來(lái)逐項(xiàng)拆開講。2. 系統(tǒng)建模從設(shè)備到約束的完整拆解2.1 參考系統(tǒng)架構(gòu)與設(shè)備配置建模之前先定義物理系統(tǒng)。我常用的參考架構(gòu)包含一條燃?xì)廨啓C(jī)聯(lián)供主線一套補(bǔ)燃/補(bǔ)冷設(shè)備再加上儲(chǔ)能和電網(wǎng)交互。設(shè)備清單和關(guān)鍵參數(shù)如下表所示供你搭模型時(shí)參考。設(shè)備輸入能量輸出能量關(guān)鍵參數(shù)典型取值范圍燃?xì)廨啓C(jī)天然氣電 高溫?zé)煔獍l(fā)電效率、熱電比發(fā)電效率30%-40%熱電比1.2-2.0余熱鍋爐高溫?zé)煔鉄嵊酂峄厥招?0%-90%吸收式制冷機(jī)熱冷COP0.7-1.3電制冷機(jī)電冷COP3.0-5.5燃?xì)忮仩t天然氣熱熱效率85%-95%電儲(chǔ)能電電充放效率、SOC范圍效率90%-95%SOC限值20%-90%蓄熱罐/蓄冷罐熱/冷熱/冷儲(chǔ)放效率、容量效率90%左右電網(wǎng)交互電電購(gòu)電價(jià)、售電價(jià)分時(shí)電價(jià)曲線建模時(shí)燃?xì)廨啓C(jī)我習(xí)慣簡(jiǎn)化成一個(gè)“電出力變量 余熱出力變量”的耦合關(guān)系燃?xì)廨啓C(jī)燒氣產(chǎn)生電和熱熱電比通常近似看作常數(shù)余熱量等于發(fā)電功率乘以熱電比。這個(gè)簡(jiǎn)化在項(xiàng)目初期完全夠用等學(xué)位論文需要精細(xì)化時(shí)再改成隨負(fù)載率變化的非線性效率曲線。2.2 能量平衡約束四個(gè)母線的寫法整個(gè)優(yōu)化模型的核心是四個(gè)能量平衡方程分別對(duì)應(yīng)電、熱、冷、氣四條“母線”。每條母線代表一個(gè)能量節(jié)點(diǎn)所有注入該節(jié)點(diǎn)的能量之和等于所有流出該節(jié)點(diǎn)的能量之和。以24小時(shí)調(diào)度周期為例每個(gè)時(shí)段t都要滿足電平衡燃?xì)廨啓C(jī)發(fā)電 光伏發(fā)電 電網(wǎng)購(gòu)電 儲(chǔ)能放電 電負(fù)荷 - 需求響應(yīng)削減 電制冷機(jī)用電 電網(wǎng)售電 儲(chǔ)能充電熱平衡余熱回收 燃?xì)忮仩t產(chǎn)熱 蓄熱罐放熱 熱負(fù)荷 - 需求響應(yīng)削減 蓄熱罐充熱冷平衡吸收式制冷 電制冷 蓄冷罐放冷 冷負(fù)荷 - 需求響應(yīng)削減 蓄冷罐充冷氣平衡購(gòu)入天然氣 燃?xì)廨啓C(jī)耗氣 燃?xì)忮仩t耗氣 可選直接供氣負(fù)荷寫這些方程時(shí)有三個(gè)容易踩的坑。第一個(gè)是單位統(tǒng)一熱負(fù)荷和冷負(fù)荷有的用kW有的用GJ/h混著用必出錯(cuò)建模之前先統(tǒng)一成kW。第二個(gè)是方向約定儲(chǔ)能充電是負(fù)荷、放電是電源代入平衡方程時(shí)正負(fù)號(hào)要一致。第三個(gè)是“同時(shí)性”問(wèn)題電網(wǎng)不能同一時(shí)刻既大量購(gòu)電又大量售電熱網(wǎng)里蓄熱罐也不能同時(shí)充放這些需要用0-1變量加互斥約束來(lái)限制否則求解器會(huì)給出一看不合理但數(shù)學(xué)上“最優(yōu)”的出工結(jié)果。2.3 設(shè)備運(yùn)行約束啟停、爬坡與儲(chǔ)能動(dòng)態(tài)能量平衡只是物理定律的約束設(shè)備本身還有運(yùn)行限制。燃?xì)廨啓C(jī)和燃?xì)忮仩t存在最小技術(shù)出力不能低于額定容量的某個(gè)比例比如不能低于30%機(jī)組啟停是0-1決策變量停機(jī)時(shí)段不耗氣不產(chǎn)能量相鄰時(shí)段出力變化受爬坡速率限制不能從零直接蹦到滿負(fù)荷。儲(chǔ)能設(shè)備要加狀態(tài)遞推約束當(dāng)前時(shí)段的儲(chǔ)能量等于上一時(shí)段儲(chǔ)能量加上本時(shí)段充入量乘以充電效率減去本時(shí)段放出量除以放電效率。同時(shí)儲(chǔ)能容量有上下限充放電功率也有上限。這里要強(qiáng)調(diào)一個(gè)細(xì)節(jié)儲(chǔ)能SOC的初始值怎么設(shè)。我建議取調(diào)度周期首尾SOC相等也就是“日循環(huán)約束”這樣結(jié)果更具工程參考意義否則模型會(huì)把初始儲(chǔ)存的能量免費(fèi)用光導(dǎo)致結(jié)果偏樂觀。具體寫法就是SOC(0)SOC(24)讓一個(gè)調(diào)度周期內(nèi)充進(jìn)去的總能量和放出來(lái)的總能量在效率修正后相等。2.4 綜合需求響應(yīng)怎么建模題目里“綜合”兩個(gè)字意味著需求響應(yīng)不只管電力負(fù)荷冷、熱、電三種負(fù)荷都要納入響應(yīng)范圍。這也是很多初學(xué)朋友最容易漏掉的部分。電力需求響應(yīng)相對(duì)成熟兩種基本形式可削減負(fù)荷與可轉(zhuǎn)移負(fù)荷??上鳒p負(fù)荷就是高峰時(shí)段直接砍掉一部分用電用戶獲得補(bǔ)償可轉(zhuǎn)移負(fù)荷比如某些生產(chǎn)工序、洗衣房、充電樁可以把用電量平移到其他時(shí)段但一天內(nèi)總用電量守恒。建模時(shí)可削減量不能超過(guò)負(fù)荷的一定比例可轉(zhuǎn)移量要滿足“移出的量等于移入的量”這一守恒約束。熱力需求響應(yīng)和冷需求響應(yīng)很少被仔細(xì)講但恰恰是綜合能源系統(tǒng)里最有意思的部分。供熱系統(tǒng)本身有巨大的熱慣性房間溫度在一定范圍內(nèi)變化用戶感知不強(qiáng)所以熱負(fù)荷可以在允許范圍內(nèi)上調(diào)或下調(diào)只要保證時(shí)段總供熱量不低于最低舒適閾值即可。冷負(fù)荷同理但冷響應(yīng)更適合用“預(yù)冷策略”表達(dá)電價(jià)低谷時(shí)段提前多供冷把建筑物或蓄冷罐的冷量存起來(lái)電價(jià)高峰時(shí)段少供冷甚至不供冷實(shí)現(xiàn)“移峰填谷”。寫模型時(shí)熱/冷負(fù)荷響應(yīng)可以建模成負(fù)荷值在上下限區(qū)間內(nèi)連續(xù)可調(diào)而不是簡(jiǎn)單的0-1削減。這樣處理更貼近實(shí)際也給求解器提供了連續(xù)調(diào)整空間優(yōu)化效果更平滑。2.5 碳交易機(jī)制怎么進(jìn)模型碳交易建模分三塊配額怎么給、實(shí)際排放怎么算、交易成本怎么進(jìn)目標(biāo)函數(shù)。配額分配最常見的是基準(zhǔn)線法即以歷史強(qiáng)度或區(qū)域基準(zhǔn)值為準(zhǔn)給系統(tǒng)一個(gè)免費(fèi)排放額度。額度可以表示成與負(fù)荷水平掛鉤的線性函數(shù)也可以直接給一個(gè)固定常數(shù)。固定配額的好處是形式簡(jiǎn)單便于做靈敏度分析。我實(shí)際做的時(shí)候更推薦固定配額先跑出無(wú)碳交易時(shí)的最優(yōu)排放量再反設(shè)一個(gè)比它低5%-10%的配額模擬“逐步收緊”的政策環(huán)境這樣故事線更完整。實(shí)際排放核算覆蓋兩個(gè)碳排放源一是天然氣燃燒的直接排放包括燃?xì)廨啓C(jī)和燃?xì)忮仩t二是從電網(wǎng)購(gòu)電對(duì)應(yīng)的間接排放。直接排放等于耗氣量乘以天然氣碳排放因子間接排放等于購(gòu)電量乘以電網(wǎng)平均碳排放因子。注意通過(guò)電網(wǎng)反售出去的電量對(duì)應(yīng)的排放是負(fù)的從總排放中扣除否則會(huì)高估系統(tǒng)碳責(zé)任。碳交易成本等于實(shí)際排放量 - 免費(fèi)配額乘以碳價(jià)。實(shí)際排放小于配額時(shí)這項(xiàng)是負(fù)值相當(dāng)于賣配額獲利大于配額時(shí)是正值變成額外的運(yùn)行成本。碳價(jià)可以設(shè)固定值也可以設(shè)階梯價(jià)格模擬碳價(jià)上漲階梯會(huì)引入整數(shù)變量模型規(guī)模會(huì)增大前期建議先用固定碳價(jià)后期做價(jià)格靈敏度掃描時(shí)再考慮階梯。2.6 目標(biāo)函數(shù)與線性化處理目標(biāo)函數(shù)是所有決策者最關(guān)心的部分我通常寫成min ∑ [ 購(gòu)氣費(fèi)用 購(gòu)電費(fèi)用 - 售電收入 需求響應(yīng)補(bǔ)償費(fèi)用 碳交易成本 ]其中購(gòu)氣費(fèi)用等于總耗氣量乘以天然氣價(jià)格購(gòu)電費(fèi)用是電網(wǎng)購(gòu)電量乘以分時(shí)電價(jià)售電收入是反售電量乘以上網(wǎng)電價(jià)需求響應(yīng)補(bǔ)償是削減或轉(zhuǎn)移的負(fù)荷量乘以補(bǔ)償單價(jià)碳交易成本按上一節(jié)方式計(jì)算。光伏發(fā)電成本通常忽略或按度電成本計(jì)入儲(chǔ)能折舊成本可以在目標(biāo)函數(shù)里加一個(gè)很小的單位損耗系數(shù)讓模型自動(dòng)減少無(wú)效充放循環(huán)。寫模型時(shí)容易碰到非線性項(xiàng)最常見的三個(gè)燃?xì)廨啓C(jī)發(fā)電效率隨負(fù)載率變化導(dǎo)致產(chǎn)氣量與出力的非線性關(guān)系、階梯碳價(jià)導(dǎo)致的分段線性成本、需求響應(yīng)補(bǔ)償價(jià)格分檔。Cplex本身支持二次約束和二次目標(biāo)但混合整數(shù)二次規(guī)劃求解速度明顯慢于線性規(guī)劃。我的經(jīng)驗(yàn)是項(xiàng)目前期全部線性化把效率曲線用分段線性逼近把階梯價(jià)格用大M法轉(zhuǎn)成線性約束。這樣模型就是一個(gè)標(biāo)準(zhǔn)的MILPCplex求解穩(wěn)定、速度快、調(diào)試方便。等后續(xù)想提升精度再逐步把非線性項(xiàng)加回去對(duì)比效果。3. 用Cplex求解從建模到出結(jié)果的完整流程3.1 先確認(rèn)問(wèn)題類型寫代碼之前先判斷自己手里拿的是什么樣的優(yōu)化問(wèn)題。上面的模型帶有0-1整數(shù)變量機(jī)組啟停、充放互斥目標(biāo)函數(shù)和約束都是線性的所以這是典型的混合整數(shù)線性規(guī)劃MILP。Cplex最擅長(zhǎng)的就是這類問(wèn)題。如果去掉整數(shù)變量退化成LP求解會(huì)快一個(gè)數(shù)量級(jí)但會(huì)失去啟停邏輯的刻畫能力。實(shí)際寫模型時(shí)我會(huì)把變量分成三類連續(xù)變量各設(shè)備出力、儲(chǔ)能充放功率、購(gòu)售電量、0-1整數(shù)變量設(shè)備啟停、儲(chǔ)能狀態(tài)、購(gòu)售電狀態(tài)、輔助變量大M法產(chǎn)生的中間量。分類清楚之后再去寫約束和目標(biāo)函數(shù)據(jù)思路會(huì)清晰很多也方便后續(xù)查錯(cuò)。3.2 數(shù)據(jù)準(zhǔn)備與表格規(guī)范求解之前先整理數(shù)據(jù)。時(shí)序數(shù)據(jù)包括24小時(shí)電負(fù)荷預(yù)測(cè)、熱負(fù)荷預(yù)測(cè)、冷負(fù)荷預(yù)測(cè)、分時(shí)購(gòu)電價(jià)、上網(wǎng)電價(jià)、天然氣價(jià)格。價(jià)格型參數(shù)包括碳價(jià)、需求響應(yīng)補(bǔ)償單價(jià)、各設(shè)備效率、容量限值。我的習(xí)慣是用Excel或CSV統(tǒng)一存數(shù)據(jù)在建模腳本里一次性讀取并賦值給參數(shù)結(jié)構(gòu)體。注意校驗(yàn)負(fù)荷數(shù)據(jù)的數(shù)量級(jí)比如某棟樓的電負(fù)荷峰值是幾百千瓦還是幾兆瓦直接決定了設(shè)備容量參數(shù)怎么設(shè)。數(shù)據(jù)錯(cuò)誤是模型不可行最常見的原因沒有之一。調(diào)模型之前先把每條數(shù)據(jù)曲線畫出來(lái)看一眼比花幾個(gè)小時(shí)查約束高效得多。3.3 核心代碼框架我習(xí)慣用Matlab加Yalmip調(diào)Cplex開發(fā)效率高調(diào)試方便。核心代碼框架如下你可以直接參考。這里只展示關(guān)鍵片段完整模型按前面章節(jié)的約束逐個(gè)添加即可。% 參數(shù)定義示例 T 24; % 調(diào)度周期 P_gt_max 2000; % 燃?xì)廨啓C(jī)最大電出力kW P_gt_min 600; % 最小技術(shù)出力kW R_gt 800; % 爬坡速率上限kW/h eta_gt 0.33; % 發(fā)電效率 alpha_chp 1.5; % 熱電比 eta_gb 0.9; % 燃?xì)忮仩t效率 cop_ec 4.0; % 電制冷COP cop_ac 1.0; % 吸收式制冷COP % 決策變量 P_gt sdpvar(1, T); % 燃?xì)廨啓C(jī)發(fā)電功率 Q_gb sdpvar(1, T); % 燃?xì)忮仩t產(chǎn)熱 P_ec sdpvar(1, T); % 電制冷機(jī)耗電 Q_ac sdpvar(1, T); % 吸收式制冷耗熱 P_buy sdpvar(1, T); % 電網(wǎng)購(gòu)電 P_sell sdpvar(1, T); % 電網(wǎng)售電 u_gt binvar(1, T); % 燃?xì)廨啓C(jī)啟停 u_buy binvar(1, T); % 購(gòu)電狀態(tài) u_sell binvar(1, T); % 售電狀態(tài) % 儲(chǔ)能變量略類似SOC遞推和充放功率定義 % 約束條件 C []; C [C, P_gt_min * u_gt P_gt P_gt_max * u_gt]; C [C, abs(P_gt(2:T) - P_gt(1:T-1)) R_gt]; C [C, u_buy u_sell 1]; % 購(gòu)售電互斥 % 電平衡約束 C [C, P_gt P_pv P_buy P_bat_dis P_load - P_dr P_ec P_sell P_bat_ch]; % 熱平衡約束 C [C, alpha_chp * P_gt Q_gb Q_hs_dis Q_load - Q_dr Q_hs_ch]; % 冷平衡約束 C [C, cop_ac * Q_ac cop_ec * P_ec Q_cs_dis C_load - C_dr Q_cs_ch]; % 目標(biāo)函數(shù) F_gas_total P_gt / eta_gt * 1 / 10.55 Q_gb / eta_gb * 1 / 10.55; % 折算成kW天然氣耗量簡(jiǎn)化式 Objective sum(F_gas_total * price_gas P_buy .* price_buy - P_sell .* price_sell ... P_dr * price_dr carbon_cost); % 求解 ops sdpsettings(solver, cplex, verbose, 2); ops.cplex.mip.tolerances.mipgap 0.001; ops.cplex.timelimit 600; ops.cplex.threads 8; optimize(C, Objective, ops);代碼里的天然氣折算公式是高度簡(jiǎn)化的示意實(shí)際建模時(shí)通過(guò)“輸入燃料量 輸出電功率 / 發(fā)電效率”的關(guān)系還原耗氣量再乘天然氣低熱值統(tǒng)一到kW單位。3.4 Cplex參數(shù)調(diào)優(yōu)Cplex開箱即用能解大多數(shù)中小規(guī)模模型但遇到大規(guī)模場(chǎng)景比如8760小時(shí)全年調(diào)度、幾百個(gè)0-1變量就得調(diào)參數(shù)。我常用四個(gè)關(guān)鍵參數(shù)mipgap混合整數(shù)規(guī)劃的相對(duì)間隙容忍度。默認(rèn)0.0001即要求解的目標(biāo)值與下界差距小于0.01%。對(duì)大多數(shù)工程分析設(shè)到0.001-0.005就足夠可以明顯縮短求解時(shí)間。timelimit最長(zhǎng)求解時(shí)間防止模型陷入長(zhǎng)時(shí)間搜索。我一般設(shè)300到600秒到點(diǎn)取當(dāng)前最優(yōu)可行解。threads并行線程數(shù)。新機(jī)器核心多設(shè)成8到16能有效加速分支定界過(guò)程。mip.strategy / nodefile問(wèn)題太大會(huì)吃滿內(nèi)存需要開節(jié)點(diǎn)文件緩存把部分分支樹放到硬盤上。這時(shí)候求解變慢是正常的屬于拿時(shí)間換空間。參數(shù)調(diào)優(yōu)要遵循“先保證可行、再追求最優(yōu)”的原則。先把mipgap調(diào)松確認(rèn)模型能在一個(gè)合理時(shí)間內(nèi)給出可行解再逐步收緊看最優(yōu)解的變化。如果收緊gap后目標(biāo)幾乎不變說(shuō)明當(dāng)前精度已經(jīng)夠用再往下調(diào)只是浪費(fèi)計(jì)算時(shí)間。3.5 結(jié)果輸出與對(duì)比分析求解完成后把關(guān)鍵結(jié)果全部導(dǎo)出并作圖各設(shè)備逐時(shí)出力柱狀圖、購(gòu)售電曲線、儲(chǔ)能SOC曲線、需求響應(yīng)量曲線、碳配額與排放量對(duì)比圖。這些圖不僅是論文素材更是驗(yàn)證模型正確性的工具。我習(xí)慣做三組對(duì)照實(shí)驗(yàn)。第一組是基礎(chǔ)場(chǎng)景不加入需求響應(yīng)和碳交易得到傳統(tǒng)調(diào)度結(jié)果第二組只加需求響應(yīng)第三組同時(shí)加需求響應(yīng)和碳交易。對(duì)比三組的總運(yùn)行成本、總碳排放量和設(shè)備出力結(jié)構(gòu)能夠清晰看出兩個(gè)機(jī)制各自的貢獻(xiàn)。再加一組碳價(jià)靈敏度分析把碳價(jià)從20元/噸掃到200元/噸觀察系統(tǒng)碳排放變化和設(shè)備出力調(diào)整這種結(jié)果非常出效果審稿人和答辯老師都愛看。4. 求解器選型與模型收斂性優(yōu)化4.1 Cplex、Gurobi、開源求解器怎么選綜合能源優(yōu)化領(lǐng)域用到的主流求解器各有特點(diǎn)我列一個(gè)實(shí)際對(duì)比求解器類型許可方式MILP性能建模友好度適用場(chǎng)景Cplex商業(yè)學(xué)術(shù)免費(fèi)/商用收費(fèi)極強(qiáng)高支持多種建模工具大規(guī)模MILP標(biāo)準(zhǔn)選擇Gurobi商業(yè)學(xué)術(shù)免費(fèi)/商用收費(fèi)極強(qiáng)部分場(chǎng)景略優(yōu)于Cplex高大規(guī)模MILP性能敏感場(chǎng)景SCIP開源免費(fèi)較強(qiáng)中預(yù)算有限的學(xué)術(shù)項(xiàng)目CBC開源免費(fèi)中等中中小規(guī)模教學(xué)示例OSQP開源免費(fèi)只支持QP中純二次規(guī)劃場(chǎng)景Cplex的優(yōu)勢(shì)在于行業(yè)二十多年的積累求解器穩(wěn)定性好對(duì)MILP的分支定界和割平面算法非常成熟并且支持MATLAB、Python、C多種接口。我用Yalmip調(diào)Cplex時(shí)連求解器內(nèi)部參數(shù)都可以直接透?jìng)餍薷姆浅7奖恪urobi在某些純整數(shù)問(wèn)題上會(huì)更快一點(diǎn)但兩者在中小規(guī)模綜合能源模型上的差距不明顯。真到百萬(wàn)級(jí)變量的大規(guī)模問(wèn)題才需要認(rèn)真對(duì)比選型。4.2 模型規(guī)模膨脹的根源與削減技巧綜合能源模型規(guī)模膨脹主要來(lái)自三方面時(shí)間步長(zhǎng)細(xì)分15分鐘一個(gè)時(shí)段、設(shè)備數(shù)量增加、0-1變量激增。一個(gè)包含10臺(tái)設(shè)備、24小時(shí)、每臺(tái)設(shè)備平均2個(gè)0-1變量的模型整數(shù)變量也就幾百個(gè)Cplex秒解但如果做全年8760小時(shí)調(diào)度變量直接膨脹到百萬(wàn)級(jí)別求解時(shí)間呈指數(shù)增長(zhǎng)??刂埔?guī)模的技巧有幾個(gè)。一是時(shí)間聚合用典型日代替全年逐時(shí)數(shù)據(jù)比如選夏季典型日、冬季典型日、過(guò)渡季典型日各跑24小時(shí)調(diào)度再按天數(shù)加權(quán)匯總能極大縮減模型規(guī)模。二是合并冗余約束購(gòu)售電互斥本質(zhì)上只需要一個(gè)0-1變量如果系統(tǒng)不允許同時(shí)購(gòu)售電完全可以去掉互斥0-1變量只用“購(gòu)電量×售電量0”的非線性約束或者干脆強(qiáng)制二者之一為零減少整數(shù)變量個(gè)數(shù)。三是刪掉無(wú)效候選狀態(tài)夜間冷負(fù)荷接近于零時(shí)電制冷機(jī)和吸收式制冷機(jī)的最大出力直接限掉剪掉大量無(wú)意義的組合空間。5. 常見問(wèn)題與排查實(shí)錄5.1 模型不可行怎么定位Cplex返回不可行時(shí)第一反應(yīng)不要懷疑求解器先懷疑自己的約束。我的排查順序是先檢查負(fù)荷數(shù)據(jù)各時(shí)段是否齊全再檢查能量平衡方向是否寫反最容易出錯(cuò)的是儲(chǔ)能SOC遞推的正負(fù)號(hào)然后檢查容量限值是否小于負(fù)荷峰值比如蓄熱罐容量設(shè)小了熱平衡永遠(yuǎn)湊不平最后檢查互斥約束是否過(guò)強(qiáng)比如某時(shí)段要求既滿足電平衡又要求購(gòu)售電互斥結(jié)果沒有可行解說(shuō)明約束矛盾。Yalmip里可以用求不可行約束集合的功能通過(guò)“%#ok”注釋對(duì)比約束逐個(gè)放松約束定位問(wèn)題源。5.2 求解慢、長(zhǎng)時(shí)間不收斂模型卡住最直觀的原因是0-1變量組合空間太大。先用上一節(jié)的規(guī)模削減技巧壓縮模型再把mipgap放寬到0.005看看能不能快速得到一個(gè)可行解。如果連可行解都找不到說(shuō)明初始下界很差可以讓求解器先生成一個(gè)熱啟動(dòng)解先固定機(jī)組啟停變量為經(jīng)驗(yàn)值解一個(gè)純LP問(wèn)題再把這個(gè)解作為MIP的熱啟動(dòng)初始解通常能大幅提升搜索效率。5.3 結(jié)果出現(xiàn)同時(shí)購(gòu)電和售電在分時(shí)電價(jià)有峰谷差時(shí)同時(shí)購(gòu)電和售電表面上看很奇怪但因?yàn)榇嬖趦?chǔ)能設(shè)備模型有時(shí)會(huì)給出“低谷買電充電、高峰放電同時(shí)售電”的套利策略這時(shí)同時(shí)購(gòu)售電是合理的。真正不合理的是同一時(shí)段既大量購(gòu)電又大量售電且沒有儲(chǔ)能參與這通常說(shuō)明互斥約束寫漏了或者目標(biāo)函數(shù)里售電價(jià)大于購(gòu)電價(jià)導(dǎo)致無(wú)限套利。遇到這種結(jié)果先把時(shí)段和能量去向查一遍再檢查互斥約束是否完整。5.4 碳交易參數(shù)影響結(jié)果異常碳價(jià)升高后系統(tǒng)碳排放總量不一定單調(diào)下降。原因在于系統(tǒng)同時(shí)存在多個(gè)碳排來(lái)源燃?xì)廨啓C(jī)雖然排碳但余熱利用替代了燃?xì)忮仩t和電制冷機(jī)的耗能整體系統(tǒng)碳排放可能反而降低。所以碳價(jià)升高可能導(dǎo)致燃?xì)廨啓C(jī)多發(fā)電反而增加了一部分排放。這不是模型錯(cuò)誤而是聯(lián)供系統(tǒng)的真實(shí)特征碳排放和電力市場(chǎng)化激勵(lì)存在耦合分析結(jié)果時(shí)必須結(jié)合設(shè)備出力結(jié)構(gòu)來(lái)解釋不能只看總量曲線。做碳價(jià)靈敏度時(shí)把燃?xì)廨啓C(jī)出力、電網(wǎng)購(gòu)電量、燃?xì)忮仩t產(chǎn)熱量三條曲線一起畫出來(lái)碳價(jià)影響一目了然。5.5 常見問(wèn)題速查表問(wèn)題現(xiàn)象可能原因解決措施模型不可行負(fù)荷數(shù)據(jù)錯(cuò)誤或約束方向?qū)懛粗饤l檢查能量平衡方程檢查數(shù)據(jù)單位求解極慢0-1變量過(guò)多、big-M取值過(guò)大壓縮整數(shù)變量、收緊M值、放寬mipgap同時(shí)購(gòu)售電互斥約束缺失或儲(chǔ)能套利策略添加購(gòu)售電互斥檢查儲(chǔ)能充放邏輯目標(biāo)函數(shù)為負(fù)且離譜售電價(jià)高于購(gòu)電價(jià)模型無(wú)限套利檢查價(jià)格參數(shù)添加電量買賣約束儲(chǔ)能首時(shí)段即放完缺少日循環(huán)約束加入SOC初始等于末尾的約束碳價(jià)升高但排放反升聯(lián)供系統(tǒng)結(jié)構(gòu)特性非模型錯(cuò)誤結(jié)合設(shè)備出力曲線解釋補(bǔ)充對(duì)照?qǐng)鼍白詈笤俜窒硪稽c(diǎn)個(gè)人經(jīng)驗(yàn)這類研究做到最后真正有價(jià)值的往往不是那一張最優(yōu)解表格而是對(duì)系統(tǒng)運(yùn)行規(guī)律的理解。Cplex求解器只是工具它能在0.1秒內(nèi)給出一個(gè)數(shù)學(xué)上的最優(yōu)解但判斷這個(gè)解是否符合實(shí)際、是否滿足物理直覺、是否能在真實(shí)系統(tǒng)里落地還是得靠人。我做綜合能源模型踩過(guò)最深的坑就是過(guò)于相信求解結(jié)果直到把某一天的調(diào)度曲線逐條核對(duì)了幾個(gè)小時(shí)才發(fā)現(xiàn)是燃?xì)廨啓C(jī)的熱電比參數(shù)少了一個(gè)零。從此之后每跑完一組結(jié)果第一件事一定是畫圖、看圖、問(wèn)三個(gè)問(wèn)題設(shè)備出力是否在合理區(qū)間儲(chǔ)能是否有異常充放購(gòu)售電行為是否與市場(chǎng)價(jià)格信號(hào)一致這三個(gè)問(wèn)題過(guò)濾掉90%的模型錯(cuò)誤。如果你正準(zhǔn)備開這個(gè)方向的研究建議從一個(gè)小規(guī)模系統(tǒng)做起設(shè)備控制在3到5臺(tái)時(shí)間尺度先做24小時(shí)把模型跑通跑順再逐步擴(kuò)展。建模本身沒有太多玄學(xué)關(guān)鍵是物理邏輯清楚、數(shù)學(xué)表達(dá)準(zhǔn)確、求解結(jié)果可解釋。做到這三點(diǎn)這套框架無(wú)論是繼續(xù)深入做全年優(yōu)化、做不確定性魯棒優(yōu)化還是擴(kuò)展到多園區(qū)協(xié)同都會(huì)很順手。