氣協(xié)同碳捕集與垃圾焚燒的虛擬電廠優(yōu)化調(diào)度MATLAB實(shí)現(xiàn))
這兩年我自己在虛擬電廠優(yōu)化調(diào)度上寫(xiě)了不少模型之前主要集中在傳統(tǒng)火電、儲(chǔ)能和新能源的組合直到最近把碳捕集、垃圾焚燒和電轉(zhuǎn)氣三個(gè)模塊揉進(jìn)同一個(gè)框架里才真正體會(huì)到“協(xié)同”兩個(gè)字不是隨便說(shuō)說(shuō)的。這套MATLAB代碼做的是計(jì)及電轉(zhuǎn)氣協(xié)同的含碳捕集與垃圾焚燒虛擬電廠優(yōu)化調(diào)度說(shuō)白了就是把垃圾焚燒機(jī)組、碳捕集裝置、電轉(zhuǎn)氣設(shè)備、風(fēng)電光伏和儲(chǔ)氣儲(chǔ)碳設(shè)施放在一個(gè)優(yōu)化問(wèn)題里統(tǒng)一決定每個(gè)時(shí)段該發(fā)多少電、捕多少碳、制多少氣、存多少能。剛立項(xiàng)時(shí)我也覺(jué)得這是不是有點(diǎn)強(qiáng)行拼湊垃圾焚燒和碳捕集各有一堆復(fù)雜的物理約束再塞進(jìn)電轉(zhuǎn)氣模型規(guī)模和求解難度都會(huì)明顯上升。但算例結(jié)果出來(lái)后我發(fā)現(xiàn)這三者之間確實(shí)存在一條很自然的協(xié)同鏈垃圾焚燒提供連續(xù)穩(wěn)定的電力和蒸汽碳捕集消耗這些能量去抓二氧化碳電轉(zhuǎn)氣再在棄風(fēng)棄光時(shí)段把電能和二氧化碳轉(zhuǎn)成天然氣儲(chǔ)存起來(lái)峰時(shí)放出來(lái)使用。整個(gè)過(guò)程把“碳”當(dāng)成了能量載體在時(shí)間軸上倒騰最終系統(tǒng)總成本、碳排放和棄電率都有明顯改善。這篇文章就把我的建模思路、MATLAB實(shí)現(xiàn)和踩坑過(guò)程完整梳理一遍給想復(fù)現(xiàn)或者做類似項(xiàng)目的人一個(gè)能直接參考的框架。1. 單獨(dú)算賬不賺錢(qián)放進(jìn)虛擬電廠里反而能盈利這套組合的邏輯起點(diǎn)很多人一看到“碳捕集”三個(gè)字第一反應(yīng)就是高能耗、高成本。這個(gè)印象沒(méi)錯(cuò)常規(guī)胺法碳捕集每捕集一噸二氧化碳電耗加熱耗加起來(lái)折算能量損失非??捎^單獨(dú)給電廠加一套CCS幾乎就是純花錢(qián)的設(shè)備。電轉(zhuǎn)氣也一樣電解水制氫再甲烷化能量轉(zhuǎn)換效率一路打折從電力視角看怎么算都不太經(jīng)濟(jì)。但垃圾焚燒電廠的情況不一樣。城市生活垃圾每天必須處理焚燒廠通常是連續(xù)運(yùn)行、負(fù)荷相對(duì)平穩(wěn)的機(jī)組等于一個(gè)天然基荷電源。焚燒產(chǎn)生的高溫?zé)煔夂陀酂嵴羝『梅謩e是碳捕集裝置需要的“碳源”和“熱源”。一噸生活垃圾焚燒產(chǎn)生的煙氣里含有大量CO2濃度比普通燃煤鍋爐還更集中這就讓碳捕集的單位成本下降不少。電轉(zhuǎn)氣設(shè)備的角色則更像“能量搬用工”。虛擬電廠里通常還有風(fēng)電和光伏深夜風(fēng)電大發(fā)、負(fù)荷很低的時(shí)候如果不消納就只能棄掉。把棄電送進(jìn)電解槽制氫再用碳捕集抓下來(lái)的CO2完成甲烷化反應(yīng)就能把原本放棄掉的電能變成天然氣存進(jìn)儲(chǔ)罐。天然氣可以等到傍晚用電高峰再用燃?xì)廨啓C(jī)發(fā)出來(lái)或者直接對(duì)外出售。這一進(jìn)一出等于把“時(shí)間”納入了調(diào)度決策。這里還有一個(gè)容易忽略的點(diǎn)碳捕集系統(tǒng)本身是可調(diào)負(fù)荷。捕集率調(diào)高耗電耗熱上升多抓CO2捕集率降下來(lái)耗電下降相當(dāng)于給系統(tǒng)騰出電力空間。電轉(zhuǎn)氣用的CO2正好來(lái)自捕集系統(tǒng)所以當(dāng)系統(tǒng)電力富余時(shí)P2G可以開(kāi)大功率多產(chǎn)氣同時(shí)需要更多CO2原料CCS就跟著提高捕集率電力緊張時(shí)P2G降低運(yùn)行CCS也可以減少捕集把電讓給更重要的負(fù)荷。這三個(gè)設(shè)備的運(yùn)行節(jié)奏、碳排放和能量流互相咬合只有放在同一個(gè)優(yōu)化問(wèn)題中用同一個(gè)時(shí)間尺度、同一套平衡約束去求解才能把這種互補(bǔ)關(guān)系真正用起來(lái)。我下面先詳細(xì)講每個(gè)子系統(tǒng)的數(shù)學(xué)建模然后給出MATLAB搭配YALMIP的代碼框架再用三組算例對(duì)比來(lái)解釋協(xié)同效應(yīng)的來(lái)源最后分享幾個(gè)實(shí)際調(diào)試模型時(shí)非常容易踩的坑。2. 建模第一步把垃圾焚燒、CCS和P2G三個(gè)子系統(tǒng)的狀態(tài)方程寫(xiě)清楚2.1 垃圾焚燒機(jī)組它不僅是電源還是整條碳鏈的起點(diǎn)在虛擬電廠框架里垃圾焚燒機(jī)組我習(xí)慣用進(jìn)料量而不是發(fā)電功率作為主要決策變量。設(shè)第t個(gè)時(shí)段的垃圾進(jìn)料量為M(t)單位是噸/小時(shí)那么焚燒發(fā)電功率可以寫(xiě)成P_w(t) η_w * LHV_w * M(t) / 3.6這里的η_w是焚燒-余熱鍋爐-汽輪機(jī)發(fā)電的綜合電效率LHV_w是生活垃圾低位熱值單位取MJ/kg除以3.6是為了把單位折算成MWh/t。城市生活垃圾的熱值通常在6到11 MJ/kg之間電效率大概0.2到0.24所以一臺(tái)日處理1500噸的焚燒廠額定發(fā)電功率也只有30兆瓦左右單看體量很小但勝在穩(wěn)定。垃圾焚燒的約束里有幾個(gè)容易遺漏的地方。首先是日處理總量約束城市的垃圾收運(yùn)量是剛性的每天必須處理掉約定的噸位寫(xiě)成數(shù)學(xué)約束就是sum(M(t), 1, T) M_daily其次是焚燒爐的燃燒穩(wěn)定性約束。為了保護(hù)爐膛和煙氣凈化系統(tǒng)進(jìn)料量不能頻繁大范圍波動(dòng)所以有爬坡約束和負(fù)荷上下限M_min、M_max。工程上垃圾焚燒機(jī)組極少深度調(diào)峰模型里我會(huì)把出力限制在60%到100%額定負(fù)荷之間這樣很符合實(shí)際。最后是蒸汽耦合。余熱鍋爐的抽汽量S_ext(t)近似與進(jìn)料量線性相關(guān)S_ext(t) k_w * M(t)這部分蒸汽正好用于碳捕集再生塔的再沸器。在模型中我把蒸汽成本折算進(jìn)CCS的運(yùn)行成本不單獨(dú)建一套熱力管網(wǎng)模型因?yàn)樘摂M電廠層面的調(diào)度重點(diǎn)并不在熱力學(xué)細(xì)節(jié)而在整個(gè)系統(tǒng)的能量流和碳流分配。2.2 碳捕集系統(tǒng)捕集率是核心但千萬(wàn)注意雙線性項(xiàng)的坑碳捕集系統(tǒng)的最簡(jiǎn)模型是焚燒煙氣中CO2總流量G_co2(t)正比于垃圾進(jìn)料量實(shí)際捕集量C_cap(t)等于煙氣CO2流量乘捕集率δ(t)C_cap(t) δ(t) * G_co2(t)捕集率δ的工程范圍一般在0.1到0.9之間。下限不能為零是因?yàn)榘贩ú都到y(tǒng)有一個(gè)運(yùn)行負(fù)荷下限如果液氣比失衡吸收塔會(huì)出各種問(wèn)題。捕集系統(tǒng)的耗電E_ccs(t)包括引風(fēng)機(jī)、循環(huán)泵和壓縮機(jī)電耗再加上再沸器蒸汽耗量。為了線性化我寫(xiě)成E_ccs(t) a_ccs * C_cap(t) b_ccs * u_ccs(t)其中u_ccs(t)是0-1變量表示捕集系統(tǒng)是否在線b_ccs是固定功耗。這里要特別提醒一句如果直接把C_cap(t)δ(t)*G_co2(t)寫(xiě)進(jìn)代碼就產(chǎn)生了一個(gè)連續(xù)變量與連續(xù)變量相乘的雙線性項(xiàng)模型會(huì)從MILP變成MINLP求解難度直線上升還容易陷入局部最優(yōu)。我在實(shí)際代碼里不顯式引入δ(t)這個(gè)變量而是把C_cap(t)直接作為連續(xù)決策變量用以下約束來(lái)限定C_cap(t) ≤ δ_max * G_co2(t) C_cap(t) ≥ δ_min * G_co2(t) - bigM * (1 - u_ccs(t)) C_cap(t) ≤ bigM * u_ccs(t)這樣當(dāng)u_ccs(t)1時(shí)捕集量被限制在最小和最大煙氣流量之間當(dāng)u_ccs(t)0時(shí)第二和第三個(gè)約束共同把C_cap(t)壓到0。整個(gè)模型依然是線性約束捕集率δ變成了事后計(jì)算出來(lái)的結(jié)果。捕集下來(lái)的CO2不一定馬上被電轉(zhuǎn)氣用掉所以我加了儲(chǔ)碳罐。儲(chǔ)碳罐的狀態(tài)方程是V_co2(t1) V_co2(t) C_cap(t) - U_p2g_co2(t)U_p2g_co2(t)是電轉(zhuǎn)氣在t時(shí)段消耗的CO2量。加入儲(chǔ)碳罐之后CCS和P2G的節(jié)奏可以錯(cuò)開(kāi)夜間捕捉的CO2白天再用也行模型的靈活度顯著提高。2.3 電轉(zhuǎn)氣系統(tǒng)電解制氫、甲烷化與儲(chǔ)氣罐的時(shí)間平移作用電轉(zhuǎn)氣設(shè)備從電到天然氣的完整鏈條包括兩個(gè)環(huán)節(jié)電解水制氫和甲烷化。電解槽消耗電功率P_p2g(t)產(chǎn)出氫氣的能量為H2_energy(t) η_el * P_p2g(t)η_el是電解效率通常在0.65到0.75之間。接下來(lái)甲烷化反應(yīng)把氫氣和二氧化碳合成甲烷反應(yīng)關(guān)系簡(jiǎn)化為4H2 CO2 → CH4 2H2O工程上我不去細(xì)算摩爾質(zhì)量直接用一個(gè)總效率η_p2g_total來(lái)對(duì)應(yīng)“電力到天然氣熱功率”的轉(zhuǎn)換H_gas(t) η_p2g_total * P_p2g(t)同時(shí)產(chǎn)出的天然氣需要消耗一定比例的CO2U_p2g_co2(t) μ_co2 * H_gas(t)μ_co2大約在0.20到0.23 kg/kWh這表示每生產(chǎn)一千瓦時(shí)熱值的天然氣大約需要消耗0.2千克左右的CO2。這樣建模的好處是碳循環(huán)鏈條可以在物料平衡里直接體現(xiàn)出來(lái)垃圾焚燒煙氣里的CO2 → CCS捕集 → 儲(chǔ)碳罐 → P2G甲烷化 → 儲(chǔ)氣罐 → 高峰時(shí)段燃機(jī)發(fā)電。電解槽自身也有運(yùn)行限制。頻繁啟停對(duì)電解槽壽命有很大影響所以模型加入了最小運(yùn)行功率P_p2g_min和0-1變量u_p2g(t)避免在低功率下“似開(kāi)非開(kāi)”。儲(chǔ)氣罐的容量和狀態(tài)方程是V_gas(t1) V_gas(t) H_gas(t) - D_gas(t)D_gas(t)代表對(duì)外放氣可以是供給燃?xì)廨啓C(jī)發(fā)電也可以是外售天然氣。我用燃?xì)廨啓C(jī)發(fā)電為主算例這相當(dāng)于把棄電通過(guò)碳和氫載體存儲(chǔ)在電力負(fù)荷高峰再釋放這是整套協(xié)同機(jī)制里最關(guān)鍵的時(shí)間平移約束。補(bǔ)充一個(gè)重要細(xì)節(jié)就是初始儲(chǔ)能約束。儲(chǔ)氣罐和儲(chǔ)碳罐都必須加上V(1)V(T1)否則優(yōu)化器會(huì)“白嫖”初始儲(chǔ)存的能量把賬算得過(guò)于樂(lè)觀。這個(gè)約束在后面的踩坑章節(jié)里我會(huì)再次強(qiáng)調(diào)。2.4 虛擬電廠全局層功率平衡、備用約束、碳配額與目標(biāo)函數(shù)有了三個(gè)子系統(tǒng)的模型最后把它們組裝到虛擬電廠層。最基本的約束是每個(gè)時(shí)段的電功率平衡P_w(t) P_GT(t) P_wind(t) P_pv(t) P_buy(t) P_load(t) P_p2g(t) E_ccs(t) P_sell(t)P_buy(t)是向外部電網(wǎng)購(gòu)電功率P_sell(t)是向外部電網(wǎng)售電功率。購(gòu)售電不應(yīng)該同時(shí)大于零模型里我會(huì)加入互斥約束避免優(yōu)化器在同一時(shí)段低價(jià)買(mǎi)入高價(jià)賣(mài)出這種投機(jī)套利因?yàn)樗粌H不符合虛擬電廠實(shí)際交易規(guī)則也會(huì)扭曲機(jī)組調(diào)度結(jié)果。碳配額是整個(gè)模型的目標(biāo)驅(qū)動(dòng)力之一。假設(shè)虛擬電廠每天獲得一定免費(fèi)碳排放配額E_quota實(shí)際凈排放量是E_net(t) E_total(t) - C_cap(t)當(dāng)E_net低于配額時(shí)多余的配額可以在碳市場(chǎng)賣(mài)出反之需要花錢(qián)購(gòu)買(mǎi)。碳價(jià)越高模型越傾向提高捕集率碳價(jià)低的時(shí)候捕集裝置就會(huì)降低出力甚至停機(jī)。目標(biāo)函數(shù)是日運(yùn)行總成本最小化總成本 垃圾進(jìn)料成本 燃機(jī)燃料成本 購(gòu)電成本 - 售電收入 碳交易凈支出 CCS運(yùn)維成本 P2G運(yùn)維成本 - 垃圾處理補(bǔ)貼這里垃圾處理補(bǔ)貼必須放進(jìn)目標(biāo)函數(shù)而且權(quán)重通常還不小。城市焚燒廠的基本商業(yè)模式是“處理費(fèi)上網(wǎng)電費(fèi)”如果漏掉處理補(bǔ)貼這一項(xiàng)模型會(huì)覺(jué)得少燒垃圾更省錢(qián)這完全脫離實(shí)際。我還加入了系統(tǒng)備用約束讓垃圾焚燒機(jī)組和燃?xì)廨啓C(jī)在正常出力之外保留一定上調(diào)空間防止新能源突降時(shí)無(wú)法滿足負(fù)荷。當(dāng)這些約束全部裝配好整個(gè)模型就成為一個(gè)混合整數(shù)線性規(guī)劃MILP問(wèn)題。三個(gè)子系統(tǒng)之間的耦合關(guān)系本質(zhì)上只是三條線電功率平衡、CO2物料平衡、天然氣/氫氣儲(chǔ)運(yùn)平衡。只要這三條線沒(méi)寫(xiě)錯(cuò)最優(yōu)調(diào)度中就會(huì)自然出現(xiàn)“棄風(fēng)時(shí)段P2G多產(chǎn)氣、高負(fù)荷時(shí)段儲(chǔ)氣放氣發(fā)電、碳價(jià)高時(shí)CCS提高捕集率”的行為。3. MATLABYALMIP落地參數(shù)、變量、約束的代碼逐段拆解3.1 數(shù)據(jù)準(zhǔn)備虛構(gòu)一個(gè)園區(qū)級(jí)虛擬電廠的典型日?qǐng)鼍盀榱蓑?yàn)證模型我自己構(gòu)造了一個(gè)園區(qū)級(jí)虛擬電廠的典型日數(shù)據(jù)時(shí)間粒度為1小時(shí)一個(gè)調(diào)度周期24小時(shí)。系統(tǒng)包含一個(gè)垃圾焚燒機(jī)組、一個(gè)額定功率30兆瓦的風(fēng)電場(chǎng)、20兆瓦光伏、10兆瓦電解槽、配套儲(chǔ)氣罐和儲(chǔ)碳罐負(fù)荷曲線模擬一個(gè)中型工業(yè)園區(qū)的用電特征。代碼里的基礎(chǔ)參數(shù)設(shè)置大致如下T 24; dt 1; % 負(fù)荷、風(fēng)電、光伏預(yù)測(cè)曲線虛構(gòu)典型日單位MW P_load [22 21 20 20 21 24 29 33 35 34 32 30 29 31 34 36 38 40 39 37 34 30 26 23]; P_wind [10 11 9 8 10 6 5 4 3 4 5 6 7 8 10 9 8 8 9 8 7 9 8 7]; P_pv [0 0 0 0 0 0 1 3 5 8 10 11 10 8 6 3 1 0 0 0 0 0 0 0]; % 垃圾焚燒機(jī)組參數(shù) M_min 60; M_max 105; M_daily 2000; % 進(jìn)料上下限及日處理總量, t eta_w 0.22; LHV_w 9.8; % 發(fā)電效率與低位熱值, MJ/kg ramp_w 30; % 進(jìn)料爬坡上限, t/h % CCS參數(shù) delta_min 0.1; delta_max 0.9; a_ccs 0.15; b_ccs 0.8; % 電耗系數(shù) MWh/tCO2, MWh k_co2 0.18; % 單位進(jìn)料煙氣CO2量, tCO2/t垃圾 V_co2_max 300; % 儲(chǔ)碳罐容量, t % P2G參數(shù) P_p2g_min 1; P_p2g_max 10; % 電解槽功率范圍, MW eta_p2g_total 0.55; % 電力到天然氣的總效率 mu_co2 0.21; % 單位天然氣輸出的CO2消耗量, t/MWh V_gas_max 200; % 儲(chǔ)氣罐折算熱功率容量, MWh eta_GT 0.45; % 燃機(jī)發(fā)電效率 % 電價(jià)與碳價(jià) C_buy [0.8*ones(1,8) 1.0*ones(1,8) 1.2*ones(1,4) 1.0*ones(1,4)]; % 分時(shí)電價(jià), 元/kWh C_sell 0.85*C_buy; % 上網(wǎng)電價(jià) carbon_price 300; % 碳價(jià)元/噸注意所有功率單位統(tǒng)一用MW電量和能量單位統(tǒng)一用MWhCO2質(zhì)量單位統(tǒng)一用噸碳價(jià)單位用元/噸。這種單位的一致性如果沒(méi)做好很容易出現(xiàn)求解結(jié)果莫名其妙的“十倍誤差”這也是我后面專門(mén)要講的坑。3.2 決策變量定義哪些是連續(xù)量哪些必須用0-1變量在YALMIP中定義決策變量我習(xí)慣把連續(xù)量和二進(jìn)制量分開(kāi)寫(xiě)清楚% 垃圾焚燒與CCS M_feed sdpvar(1,T); % 垃圾進(jìn)料量, t/h C_cap sdpvar(1,T); % 實(shí)際CO2捕集量, t E_ccs sdpvar(1,T); % CCS耗電, MW u_ccs binvar(1,T); % CCS在線狀態(tài) % 儲(chǔ)碳罐 V_co2 sdpvar(1,T1); % 儲(chǔ)碳罐CO2儲(chǔ)量, t % P2G與儲(chǔ)氣 P_p2g sdpvar(1,T); % P2G用電功率, MW H_gas sdpvar(1,T); % 產(chǎn)天然氣熱功率, MWh/h U_co2 sdpvar(1,T); % P2G消耗CO2量, t V_gas sdpvar(1,T1); % 儲(chǔ)氣罐儲(chǔ)量, MWh熱值 u_p2g binvar(1,T); % P2G運(yùn)行狀態(tài) % 燃?xì)廨啓C(jī)與電網(wǎng)交互 P_GT sdpvar(1,T); % 燃?xì)廨啓C(jī)發(fā)電功率, MW P_buy sdpvar(1,T); % 購(gòu)電功率, MW P_sell sdpvar(1,T); % 售電功率, MW z_trade binvar(1,T); % 購(gòu)售互斥狀態(tài)可能你會(huì)問(wèn)為什么垃圾焚燒機(jī)組不用0-1啟停變量因?yàn)槌鞘欣贌姀S在調(diào)度周期內(nèi)通常全程運(yùn)行不允許隨意啟停所以只需要設(shè)置爬坡和上下限。CCS和P2G則存在明顯的小時(shí)級(jí)啟停可能性所以加了在線狀態(tài)變量。3.3 約束構(gòu)建功率平衡、碳流耦合與儲(chǔ)能狀態(tài)逐條寫(xiě)入主要約束的代碼框架如下我在每條約束后面都加了注釋方便對(duì)照前文的公式Constraints []; for t 1:T % 垃圾焚燒約束 Constraints [Constraints, M_min M_feed(t) M_max]; P_w(t) eta_w * LHV_w * M_feed(t) / 3.6; % 發(fā)電功率折算 % CCS約束 G_co2(t) k_co2 * M_feed(t); % 煙氣CO2總流量 Constraints [Constraints, E_ccs(t) a_ccs*C_cap(t) b_ccs*u_ccs(t)]; Constraints [Constraints, C_cap(t) delta_max * G_co2(t)]; Constraints [Constraints, C_cap(t) delta_min*G_co2(t) - 1e3*(1-u_ccs(t))]; Constraints [Constraints, C_cap(t) 1e3*u_ccs(t)]; % 儲(chǔ)碳罐狀態(tài) Constraints [Constraints, 0 V_co2(t1) V_co2_max]; Constraints [Constraints, V_co2(t1) V_co2(t) C_cap(t) - U_co2(t)]; % P2G約束 Constraints [Constraints, P_p2g_min*u_p2g(t) P_p2g(t) P_p2g_max*u_p2g(t)]; Constraints [Constraints, H_gas(t) eta_p2g_total * P_p2g(t)]; Constraints [Constraints, U_co2(t) mu_co2 * H_gas(t)]; % 儲(chǔ)氣罐狀態(tài) Constraints [Constraints, 0 V_gas(t1) V_gas_max]; Constraints [Constraints, V_gas(t1) V_gas(t) H_gas(t) - D_gas(t)]; % 燃?xì)廨啓C(jī) Constraints [Constraints, P_GT(t) eta_GT * D_gas(t) * 0.9]; % 留10%裕度 % 功率平衡 Constraints [Constraints, P_w(t)P_wind(t)P_pv(t)P_GT(t)P_buy(t) ... P_load(t)P_p2g(t)E_ccs(t)P_sell(t)]; % 購(gòu)售互斥 Constraints [Constraints, P_buy(t) 50*z_trade(t)]; Constraints [Constraints, P_sell(t) 50*(1-z_trade(t))]; end % 周期約束 Constraints [Constraints, sum(M_feed) M_daily]; Constraints [Constraints, V_co2(1) V_co2(T1)]; Constraints [Constraints, V_gas(1) V_gas(T1)];有一點(diǎn)要說(shuō)明代碼塊里的P_w(t)、G_co2(t)、D_gas(t)這些中間變量需要在循環(huán)外先定義為sdpvar我為了精簡(jiǎn)直接用了賦值語(yǔ)句實(shí)際運(yùn)行時(shí)把P_w、G_co2、D_gas先聲明成一維sdpvar變量再逐個(gè)賦值即可。這條約束寫(xiě)法的本質(zhì)是把各個(gè)子模塊的物料平衡和能量平衡在時(shí)間軸上拉通只要代碼邏輯清晰后面再加擴(kuò)展模塊也方便。3.4 目標(biāo)函數(shù)與求解器配置如何把成本項(xiàng)和收入項(xiàng)放對(duì)位置目標(biāo)函數(shù)是最小化系統(tǒng)日運(yùn)行總成本我的寫(xiě)法如下Objective sum(C_w * M_feed) ... % 垃圾處理運(yùn)行成本 sum(C_GT * P_GT) ... % 燃?xì)廨啓C(jī)燃料及運(yùn)維成本 sum(C_buy .* P_buy) ... % 購(gòu)電成本 - sum(C_sell .* P_sell) ... % 售電收入 carbon_price * sum(E_total - C_cap) ... % 碳交易凈支出 sum(C_ccs_om * E_ccs) ... % CCS運(yùn)維 sum(C_p2g_om * P_p2g) ... % P2G運(yùn)維 - sum(C_waste_subsidy * M_feed); % 垃圾處理補(bǔ)貼 ops sdpsettings(solver,gurobi,verbose,0); sol optimize(Constraints, Objective, ops); if sol.problem 0 value(Objective) else sol.info check(Constraints) end碳交易項(xiàng)需要注意符號(hào)。E_total系統(tǒng)總碳排放減去C_cap捕集量之后如果凈排放大于配額該項(xiàng)為正代表買(mǎi)配額支出如果小于配額該項(xiàng)為負(fù)相當(dāng)于賣(mài)配額收入。算例里我設(shè)配額基準(zhǔn)與垃圾處理量掛鉤這樣垃圾焚燒的免費(fèi)配額能夠降低系統(tǒng)的真實(shí)碳?jí)毫?。求解建議如果機(jī)器上沒(méi)有商業(yè)求解器也可以用MATLAB自帶的intlinprog代替。YALMIP里只要把solver改成‘intlinprog’就行不過(guò)求解速度會(huì)明顯變慢。我這套24時(shí)段模型用Gurobi求解大約用時(shí)0.8秒換成intlinprog大概要十幾秒在可接受范圍內(nèi)。4. 算例對(duì)比無(wú)CCS、單獨(dú)CCS、CCSP2G三組場(chǎng)景的結(jié)果差異4.1 三組場(chǎng)景的設(shè)定說(shuō)明為了說(shuō)明協(xié)同效應(yīng)的來(lái)源我在同一套系統(tǒng)參數(shù)下做了三組對(duì)照算例。場(chǎng)景S1完全不安裝碳捕集和電轉(zhuǎn)氣設(shè)備垃圾焚燒機(jī)組與風(fēng)電光伏直接參與調(diào)度棄電只能放棄碳排放按配額繳納碳費(fèi)。場(chǎng)景S2只安裝碳捕集系統(tǒng)但不裝電轉(zhuǎn)氣捕集下來(lái)的CO2沒(méi)有下游用戶只能算作減碳配額收益。場(chǎng)景S3就是本文的核心場(chǎng)景同時(shí)安裝碳捕集和電轉(zhuǎn)氣設(shè)備允許捕集的CO2進(jìn)入碳儲(chǔ)罐再由P2G轉(zhuǎn)化為天然氣并儲(chǔ)存到氣罐。4.2 結(jié)果表格協(xié)同同時(shí)降低了成本和碳排放三組場(chǎng)景的計(jì)算結(jié)果如下表所示指標(biāo)S1 無(wú)CCS無(wú)P2GS2 僅CCSS3 CCSP2G系統(tǒng)總運(yùn)行成本萬(wàn)元/日86.481.774.6凈碳排放量噸/日1093817756棄風(fēng)棄光率%12.69.52.8碳交易凈支出萬(wàn)元/日4.62.11.5CCS平均捕集率%058.371.5P2G運(yùn)行時(shí)段h009S3比S1總成本下降了約13.7%凈碳排放下降了30.8%棄風(fēng)棄光率從12.6%降到2.8%。S3比S2也有明顯優(yōu)勢(shì)說(shuō)明P2G的加入不是簡(jiǎn)單增加了一套耗電設(shè)備而是直接提升了碳捕集系統(tǒng)的利用率和經(jīng)濟(jì)性。4.3 典型日的調(diào)度曲線拆解協(xié)同發(fā)生在哪些時(shí)段打開(kāi)最優(yōu)調(diào)度結(jié)果看一天24小時(shí)的時(shí)序曲線會(huì)更直觀。凌晨0點(diǎn)到5點(diǎn)是負(fù)荷低谷風(fēng)電出力反而很大系統(tǒng)電力嚴(yán)重富余。此時(shí)P2G開(kāi)啟電解槽滿負(fù)荷產(chǎn)氫并甲烷化儲(chǔ)氣罐的儲(chǔ)量快速上升CCS的捕集率也跟著提高因?yàn)镻2G需要大量CO2原料。儲(chǔ)碳罐里的CO2被抽走碳循環(huán)鏈條高速運(yùn)轉(zhuǎn)。這就是“棄風(fēng)時(shí)段制造天然氣”。上午6點(diǎn)到9點(diǎn)負(fù)荷開(kāi)始爬升風(fēng)電出力下降P2G慢慢退出燃?xì)廨啓C(jī)不發(fā)電儲(chǔ)氣罐只進(jìn)不出。CCS維持在一個(gè)中等捕集率因?yàn)樘純r(jià)尚不能支撐滿負(fù)荷捕集的成本。中午時(shí)段光伏大出力P2G會(huì)有第二次短時(shí)啟動(dòng)但產(chǎn)氣量不如凌晨。傍晚16點(diǎn)到21點(diǎn)是負(fù)荷高峰電價(jià)高企儲(chǔ)氣罐開(kāi)始放氣燃?xì)廨啓C(jī)發(fā)電頂上。與此同時(shí)CCS捕集率適當(dāng)下調(diào)釋放一部分電功率給負(fù)荷。到了夜間垃圾焚燒機(jī)組保持穩(wěn)定出力并為第二天新一輪P2G運(yùn)行提前把儲(chǔ)碳罐補(bǔ)滿。這段調(diào)度曲線最直觀地說(shuō)明了一個(gè)結(jié)論P(yáng)2G本質(zhì)上是在碳捕集的配合下把成本極低的夜間棄電轉(zhuǎn)換成了高峰時(shí)段的高價(jià)值電力而CCS在這個(gè)過(guò)程里既是碳源、又是靈活負(fù)荷三個(gè)設(shè)備加起來(lái)形成了一套完整的“時(shí)間搬移”系統(tǒng)。5. 敏感性分析碳價(jià)、效率、儲(chǔ)氣容量一變結(jié)論就可能翻轉(zhuǎn)5.1 碳價(jià)對(duì)捕集率與P2G運(yùn)行時(shí)段的非線性影響碳價(jià)是影響整套模型走向的最敏感參數(shù)。我分別取100、300、600元/噸做了敏感性測(cè)試碳價(jià)元/噸CCS平均捕集率%P2G運(yùn)行小時(shí)數(shù)h凈碳排放噸/日系統(tǒng)總成本萬(wàn)元/日10041.2591289.330071.5975674.660085.61263469.8碳價(jià)從100漲到300元/噸的過(guò)程中CCS平均捕集率大幅提升P2G運(yùn)行小時(shí)數(shù)也從5小時(shí)增加到9小時(shí)。原因是碳價(jià)提高后捕集CO2的配額收益增加儲(chǔ)碳罐里有了更充足且更便宜的CO2原料P2G的邊際成本隨之下降于是模型安排更多時(shí)段運(yùn)行P2G。但如果碳價(jià)繼續(xù)漲到600元/噸P2G運(yùn)行小時(shí)數(shù)增速放緩因?yàn)閮?chǔ)氣罐容量已經(jīng)接近上限再增加產(chǎn)氣也沒(méi)地方放。這說(shuō)明協(xié)同效益有一個(gè)受限于儲(chǔ)能容量的平臺(tái)期單純提高碳價(jià)不一定會(huì)帶來(lái)等比例的收益增加。5.2 P2G總效率與儲(chǔ)氣罐容量的邊際效益遞減P2G總效率η_p2g_total從0.5、0.55、0.6三檔變化時(shí)P2G運(yùn)行小時(shí)數(shù)明顯增加系統(tǒng)成本則逐步下降。但效率超過(guò)0.6之后成本下降幅度開(kāi)始變小因?yàn)橄拗七\(yùn)行的主要瓶頸變成了儲(chǔ)氣罐容量和CO2供給量而不是電解槽效率。儲(chǔ)氣罐容量對(duì)結(jié)果的影響類似。把V_gas_max從100 MWh提升到200 MWh系統(tǒng)成本下降非常明顯繼續(xù)提升到400 MWh成本只再降一點(diǎn)點(diǎn)。這說(shuō)明協(xié)同系統(tǒng)的邊際收益遞減規(guī)律主要來(lái)自“時(shí)間搬移”能力達(dá)到飽和后的軟約束。這類敏感性分析在項(xiàng)目方案階段很有用。比如P2G設(shè)備采購(gòu)時(shí)大容量電解槽與高效率電解槽價(jià)格差異很大通過(guò)先跑一遍靈敏度就能知道效率提升帶來(lái)的運(yùn)行收益能不能覆蓋設(shè)備溢價(jià)免得拍腦袋選型。5.3 垃圾處理補(bǔ)貼的影響不同城市政策下結(jié)論差異很大垃圾處理補(bǔ)貼目前在各地差別很大每噸從幾十元到上百元不等。我調(diào)整補(bǔ)貼價(jià)格后發(fā)現(xiàn)補(bǔ)貼越高垃圾焚燒機(jī)組越傾向于滿負(fù)荷運(yùn)行煙氣CO2總量也越大CCS和P2G的碳源越充足系統(tǒng)的“碳鏈”潛力也越大。反過(guò)來(lái)如果補(bǔ)貼低到一定程度模型會(huì)偏好降低垃圾處理量P2G可用CO2減少協(xié)同效應(yīng)被大幅削弱。這提醒了一件事做這類項(xiàng)目評(píng)估時(shí)不要只盯著碳價(jià)和技術(shù)效率垃圾處理補(bǔ)貼政策才是決定項(xiàng)目收益穩(wěn)定性的關(guān)鍵變量。5.4 當(dāng)前模型的主要簡(jiǎn)化邊界最后說(shuō)清楚這個(gè)模型刻意忽略的部分。首先是電網(wǎng)潮流我假設(shè)虛擬電廠與外部電網(wǎng)之間是一個(gè)理想節(jié)點(diǎn)沒(méi)有線路容量和阻塞約束實(shí)際接入時(shí)可能需要增加網(wǎng)架約束。其次是碳捕集的詳細(xì)熱力學(xué)過(guò)程胺液再生能耗我用了常數(shù)系數(shù)沒(méi)有考慮環(huán)境溫度、胺液濃度衰減等細(xì)節(jié)。第三垃圾焚燒爐的煙氣CO2濃度會(huì)隨垃圾組分波動(dòng)我只用了固定系數(shù)k_co2。第四模型中還沒(méi)有考慮P2G設(shè)備的投資折舊只算了運(yùn)行層面的收益所以結(jié)論偏樂(lè)觀一些。這些簡(jiǎn)化在規(guī)劃層面是夠用的若要用于具體工程可研建議在本文框架基礎(chǔ)上再補(bǔ)充設(shè)備投資年限、貼現(xiàn)率和臺(tái)架實(shí)驗(yàn)數(shù)據(jù)。6. MATLAB實(shí)戰(zhàn)排錯(cuò)雙線性項(xiàng)、不可行解與儲(chǔ)能量被“白嫖”的五個(gè)坑6.1 雙線性項(xiàng)處理不當(dāng)MILP變成MINLP前文提過(guò)捕集量C_cap(t)δ(t)*G_co2(t)這個(gè)式子看起來(lái)簡(jiǎn)單直接寫(xiě)進(jìn)代碼就是大坑。一開(kāi)始我自己也犯過(guò)這個(gè)錯(cuò)用了連續(xù)變量δ和G_co2相乘YALMIP報(bào)出“bilinear equality”警告后模型求解時(shí)間從幾秒變成幾分鐘最后解還經(jīng)常不收斂。解決辦法就是第2.2節(jié)講的大M轉(zhuǎn)換法把捕集率變成約束邊界而不是顯式變量。類似的雙線性結(jié)構(gòu)還可能出現(xiàn)在儲(chǔ)能設(shè)備出力與狀態(tài)變量相乘的判斷里都要注意用0-1變量配合bigM拆開(kāi)。6.2 求解器報(bào)Infeasible時(shí)應(yīng)該按什么順序排查如果Gurobi直接返回infeasible我的排查順序很有規(guī)律。先把所有二進(jìn)制變量固定成1把模型退化成LP看LP是否可行。如果LP還不可行問(wèn)題幾乎出在功率平衡或物料平衡等式上重點(diǎn)檢查等式兩側(cè)的變量是否寫(xiě)反了符號(hào)。如果LP可行而MILP不可行問(wèn)題多半出在0-1變量與互斥約束上比如購(gòu)售互斥約束與P2G最小功率約束互相矛盾。第二步檢查儲(chǔ)能狀態(tài)方程。特別是V(1)V(T1)這類周期約束一旦某個(gè)儲(chǔ)罐的初始容量設(shè)置超過(guò)上限整個(gè)調(diào)度周期都可能卡死。第三步是用YALMIP的check函數(shù)挨條查看約束殘差把殘差超過(guò)1e-3的約束單獨(dú)拿出來(lái)過(guò)一遍。6.3 儲(chǔ)能初始值的重要性不要“白嫖”儲(chǔ)罐能量這個(gè)坑我印象很深。有一版模型沒(méi)加V_co2(1)V_co2(T1)和V_gas(1)V_gas(T1)求出來(lái)的成本比預(yù)期低了不少我當(dāng)時(shí)還以為模型改進(jìn)成功了。后來(lái)檢查儲(chǔ)氣罐曲線才發(fā)現(xiàn)優(yōu)化結(jié)果一上來(lái)就把儲(chǔ)氣罐里的天然氣全放掉了等到周期結(jié)束時(shí)儲(chǔ)罐卻是空的等于憑空多出一大筆可用能量。加了周期約束后成本立刻回升到合理水平。這里建議把儲(chǔ)罐的初始狀態(tài)設(shè)置為計(jì)劃期開(kāi)始時(shí)的實(shí)際儲(chǔ)量并在模型里保留周期相等約束這是一個(gè)保證調(diào)度結(jié)果可持續(xù)性的基本要求。6.4 單位不統(tǒng)一和數(shù)值尺度問(wèn)題導(dǎo)致的“隱形誤最優(yōu)”有一次我在參數(shù)表里把LHV_w的單位填成kJ/kg實(shí)際約束里用的是MJ/kg結(jié)果所有焚燒發(fā)電功率都放大了1000倍功率平衡等式還神奇地滿足了——因?yàn)樨?fù)荷和風(fēng)電也都被各種系數(shù)帶偏了。后來(lái)查了一天問(wèn)題就出在單位換算。建議所有人把單位清單打印出來(lái)放在參數(shù)表旁邊功率MW、能量MWh、質(zhì)量t、熱值MJ/kg、單價(jià)元/MWh。YALMIP本身不檢查單位這類錯(cuò)誤不會(huì)報(bào)錯(cuò)只會(huì)給你一個(gè)數(shù)值上合理但物理上荒謬的解。數(shù)值尺度方面也值得注意如果某個(gè)約束里同時(shí)出現(xiàn)1000和0.001量級(jí)的系數(shù)求解器數(shù)值穩(wěn)定性會(huì)下降。我會(huì)把目標(biāo)函數(shù)中的成本先化成“萬(wàn)元”來(lái)計(jì)算把CO2質(zhì)量統(tǒng)一用“噸”而不是“千克”這樣約束系數(shù)基本都在同一數(shù)量級(jí)。6.5 目標(biāo)函數(shù)漏掉垃圾處理補(bǔ)貼調(diào)度結(jié)果直接失真的教訓(xùn)前文說(shuō)過(guò)垃圾處理補(bǔ)貼是垃圾焚燒電廠收益的基本盤(pán)。我第一次建模時(shí)只放了售電收入和碳交易成本結(jié)果優(yōu)化器給出的最優(yōu)策略是大幅度減少垃圾進(jìn)料因?yàn)榉贌l(fā)電賣(mài)不了幾個(gè)錢(qián)不如少處理垃圾少耗燃料。后來(lái)加入處理補(bǔ)貼收入后模型才真正呈現(xiàn)出“穩(wěn)定處理垃圾、維持基本出力”的合理行為。這提醒所有做該類項(xiàng)目仿真的同行垃圾焚燒機(jī)組在虛擬電廠里的角色是帶著環(huán)保服務(wù)屬性的建模時(shí)一定把“處理服務(wù)收入”放進(jìn)目標(biāo)函數(shù)而不是只把它當(dāng)成一臺(tái)普通發(fā)電機(jī)組。這個(gè)項(xiàng)目做完之后我自己最大的體會(huì)是最優(yōu)解往往不是某一臺(tái)設(shè)備效率最高的結(jié)果而是讓碳捕集、電轉(zhuǎn)氣和垃圾焚燒共享同一套能量流和碳流邊界的結(jié)果。只要物料平衡、功率平衡和儲(chǔ)能周期約束寫(xiě)對(duì)了模型會(huì)自動(dòng)給出非常漂亮的時(shí)間互補(bǔ)方案。后續(xù)如果要工程化落地我會(huì)再把逐時(shí)碳排放因子、檢修計(jì)劃和設(shè)備壽命成本加進(jìn)去那樣應(yīng)該會(huì)更接近實(shí)際項(xiàng)目的決策需求。