N-1擴(kuò)展規(guī)劃:DistFlow建模與Matlab實(shí)現(xiàn)全解析)
配電網(wǎng)N-1擴(kuò)展規(guī)劃這類題目最近兩年在規(guī)劃項(xiàng)目里出現(xiàn)頻率非常高。很多朋友一聽到N-1第一反應(yīng)是安全校驗(yàn)里那個(gè)N-1準(zhǔn)則——給定一套網(wǎng)架開斷任意一條線路或一臺(tái)主變看看系統(tǒng)能不能繼續(xù)穩(wěn)定運(yùn)行。但真正落到規(guī)劃層面問題就變了在現(xiàn)有網(wǎng)架基礎(chǔ)上考慮到未來負(fù)荷增長(zhǎng)我們到底應(yīng)該新建哪幾回線路、在哪幾個(gè)走廊建、建完之后能不能通過N-1校驗(yàn)同時(shí)還要讓總投資和運(yùn)行成本盡量低。這就是配電網(wǎng)N-1擴(kuò)展規(guī)劃研究的核心內(nèi)容也是本文想完整復(fù)盤的東西。我會(huì)從問題定義、數(shù)學(xué)模型、DistFlow線性化處理、Matlab實(shí)現(xiàn)到算例結(jié)果解讀全流程走一遍代碼部分用Matlab配合YALMIP建模適合正在做配網(wǎng)網(wǎng)架規(guī)劃、寫相關(guān)方向論文或者想復(fù)現(xiàn)一個(gè)完整規(guī)劃流程的同學(xué)參考。1. 先搞清楚N-1在配電網(wǎng)里到底意味著什么1.1 配電網(wǎng)的N-1和輸電網(wǎng)的N-1不是一回事輸電網(wǎng)的N-1比較簡(jiǎn)單直觀系統(tǒng)里拿走一臺(tái)變壓器或者一條輸電線路潮流會(huì)按照物理規(guī)律重新分布只要設(shè)備不過載、電壓不越限、系統(tǒng)不失去穩(wěn)定就算通過校驗(yàn)。輸電網(wǎng)是強(qiáng)環(huán)網(wǎng)結(jié)構(gòu)潮流有天然的多路徑轉(zhuǎn)移能力。但配電網(wǎng)不一樣。絕大多數(shù)中壓配電網(wǎng)是閉環(huán)設(shè)計(jì)、開環(huán)運(yùn)行正常運(yùn)行時(shí)呈輻射狀一條饋線帶一段確定范圍的負(fù)荷各條饋線之間通過聯(lián)絡(luò)開關(guān)連接。正常狀態(tài)下聯(lián)絡(luò)開關(guān)是斷開的一旦某條饋線故障或者檢修退出需要合上聯(lián)絡(luò)開關(guān)把非故障段負(fù)荷轉(zhuǎn)帶到另一條饋線上去。所以配電網(wǎng)的N-1本質(zhì)上問的是在某個(gè)元件退出后剩余網(wǎng)絡(luò)通過轉(zhuǎn)帶路徑能不能把負(fù)荷全部承接住配電變壓器、線路、開關(guān)設(shè)備是否過載電壓是否越限。這個(gè)區(qū)別直接決定了后面建模的方向。輸電網(wǎng)N-1校驗(yàn)天然適合用常規(guī)潮流計(jì)算去掃配電網(wǎng)N-1則必須考慮轉(zhuǎn)帶路徑、聯(lián)絡(luò)開關(guān)的位置和容量。換句話說配電網(wǎng)N-1擴(kuò)展規(guī)劃真正規(guī)劃的不是冗余網(wǎng)架而是可轉(zhuǎn)帶通道。這也是很多初學(xué)者容易踩坑的地方——直接把輸電網(wǎng)那套N-1分析邏輯搬到配網(wǎng)上結(jié)果算出來的方案在實(shí)際運(yùn)行中根本不成立。1.2 配電層面的N-1具體指什么在配電網(wǎng)規(guī)劃實(shí)踐中N-1校驗(yàn)通常分成兩個(gè)層面變電站主變N-1站內(nèi)任意一臺(tái)主變壓器退出運(yùn)行時(shí)其余主變要能承載全站負(fù)荷且不過載。這是判斷一個(gè)變電站容量是否夠用的核心依據(jù)。10kV出線饋線N-1某一條10kV饋線退出后由聯(lián)絡(luò)線路轉(zhuǎn)帶其所帶負(fù)荷饋線、分段開關(guān)、聯(lián)絡(luò)開關(guān)均不過載末端電壓不越限。10kV饋線層面的N-1是網(wǎng)架規(guī)劃中最費(fèi)功夫的部分。一條饋線能不能通過N-1取決于三個(gè)因素有沒有聯(lián)絡(luò)路徑、聯(lián)絡(luò)通道的容量夠不夠、轉(zhuǎn)帶后系統(tǒng)電壓能不能滿足要求。所以配電網(wǎng)網(wǎng)架擴(kuò)展規(guī)劃里新建線路往往要重點(diǎn)考慮打通聯(lián)絡(luò)增加轉(zhuǎn)帶通道這一功能。1.3 從N-1校核到N-1擴(kuò)展規(guī)劃的跨越搞清楚了配電網(wǎng)N-1的含義再理解擴(kuò)展規(guī)劃就順理成章了。校核是一個(gè)評(píng)價(jià)問題給定網(wǎng)架判斷N-1能否通過。擴(kuò)展規(guī)劃是一個(gè)優(yōu)化問題給定現(xiàn)狀網(wǎng)架、負(fù)荷增長(zhǎng)預(yù)期、候選新建走廊要決策新建哪些線路、每回線路的型號(hào)和路徑使得目標(biāo)網(wǎng)架滿足N-1安全準(zhǔn)則同時(shí)成本最優(yōu)。這個(gè)優(yōu)化問題在數(shù)學(xué)上是一個(gè)0-1整數(shù)規(guī)劃。線路只有建與不建兩種狀態(tài)天然適合用二進(jìn)制變量描述。再加上潮流等式約束、電壓約束、容量約束和N-1場(chǎng)景約束整體就變成一個(gè)混合整數(shù)規(guī)劃問題。配電網(wǎng)規(guī)模不大但變量和約束數(shù)量不少用Matlab做建模和求解是目前高校和規(guī)劃院都比較常見的做法。2. 數(shù)學(xué)模型怎么搭目標(biāo)函數(shù)、決策變量、約束體系2.1 目標(biāo)函數(shù)一次投資和多年運(yùn)行成本怎么統(tǒng)一N-1擴(kuò)展規(guī)劃的目標(biāo)函數(shù)最樸素的形式就是投資成本 運(yùn)行成本。但兩者時(shí)間尺度不同投資是一次性付出運(yùn)行成本是每年都發(fā)生的直接相加沒有意義。工程上常用的做法是等年值折算。投資成本的年值化公式為C_A C_inv × r × (1 r)^T / ((1 r)^T - 1)其中C_inv是新建線路或者變電站擴(kuò)容的一次性投資r是折現(xiàn)率T是規(guī)劃期年限。這個(gè)公式把一次性投資折算成規(guī)劃期內(nèi)每年等額支付的金額這樣就能和年運(yùn)行費(fèi)用直接相加。運(yùn)行成本里網(wǎng)損是最主要的一項(xiàng)。配電網(wǎng)網(wǎng)損的計(jì)算用年最大負(fù)荷損耗小時(shí)數(shù)τ來估算年網(wǎng)損電量就是各線路損耗功率的總和乘以τ再乘以上網(wǎng)電價(jià)得到年網(wǎng)損費(fèi)用。如果規(guī)劃期考慮多水平年還可以對(duì)每一年的運(yùn)行成本折現(xiàn)。目標(biāo)函數(shù)從簡(jiǎn)處理可以寫成min Σ C_new_l × x_l C_sub × y C_loss × Σ R_l × I_l2 × τ其中x_l是線路新建的0-1決策變量y是變電站擴(kuò)容變量I_l是第l條線路的電流有效值。這里為簡(jiǎn)化表述把年值折算和折現(xiàn)系數(shù)都合并在C_new_l、C_loss的系數(shù)里了。實(shí)際代碼中把這些系數(shù)事先算好就行。2.2 決策變量投資變量與運(yùn)行變量分開定義這個(gè)模型里有兩類性質(zhì)完全不同的變量建模時(shí)一定要分清楚變量類別具體變量類型說明投資變量x_l 候選線路是否新建二值變量決定網(wǎng)架拓?fù)浣Y(jié)構(gòu)投資變量y_s 變電站是否擴(kuò)容二值變量決定站內(nèi)容量運(yùn)行變量P_ij(s) 支路有功連續(xù)變量每個(gè)場(chǎng)景都有獨(dú)立副本運(yùn)行變量Q_ij(s) 支路無(wú)功連續(xù)變量每個(gè)場(chǎng)景都有獨(dú)立副本運(yùn)行變量V_i2(s) 節(jié)點(diǎn)電壓平方連續(xù)變量用于DistFlow表達(dá)運(yùn)行變量I_ij2(s) 支路電流平方連續(xù)變量用于容量約束注意這里有個(gè)關(guān)鍵設(shè)計(jì)投資變量是跨場(chǎng)景共享的而運(yùn)行變量是針對(duì)每個(gè)N-1場(chǎng)景分別定義的。也就是說不管校驗(yàn)?zāi)膫€(gè)N-1場(chǎng)景網(wǎng)架拓?fù)涫峭粋€(gè)但每個(gè)場(chǎng)景下的潮流狀態(tài)可以各不相同。這是安全約束規(guī)劃的標(biāo)準(zhǔn)結(jié)構(gòu)代碼實(shí)現(xiàn)時(shí)要把這個(gè)共享變量、分離場(chǎng)景變量的結(jié)構(gòu)寫對(duì)否則模型就錯(cuò)了。2.3 約束條件分組基態(tài)約束、N-1場(chǎng)景約束、拓?fù)浼s束模型的約束可以分成四組基態(tài)潮流約束對(duì)應(yīng)系統(tǒng)正常運(yùn)行方式下的DistFlow方程所有現(xiàn)有和新建線路都參與目標(biāo)函數(shù)的網(wǎng)損也基于基態(tài)場(chǎng)景計(jì)算。N-1場(chǎng)景潮流約束每個(gè)被校驗(yàn)的元件k退出后系統(tǒng)還要滿足DistFlow方程、容量約束和電壓約束。這一組約束的數(shù)量取決于校驗(yàn)場(chǎng)景的數(shù)量。容量約束所有線路在基態(tài)和任一N-1場(chǎng)景下輸送功率都不能超過熱穩(wěn)定限額。N-1后的短時(shí)運(yùn)行狀態(tài)可以放寬到額定值的1.2到1.3倍這是工程上允許的短時(shí)過載能力建模時(shí)在右側(cè)系數(shù)上乘一個(gè)過載系數(shù)。拓?fù)浼s束配電網(wǎng)正常運(yùn)行時(shí)要滿足輻射狀結(jié)構(gòu)即不能出現(xiàn)合環(huán)也不能出現(xiàn)孤島。這組約束在規(guī)劃模型里很容易被忽略但一旦漏掉優(yōu)化器很可能給出一個(gè)雖然滿足N-1、但實(shí)際無(wú)法運(yùn)行的結(jié)果。輻射狀約束的建模方式主要有兩種一種是用圖論中的生成樹約束要求網(wǎng)絡(luò)中連通、且支路數(shù)等于節(jié)點(diǎn)數(shù)減一另一種是利用潮流方向變量給線路加方向判斷保證每個(gè)節(jié)點(diǎn)有且僅有一個(gè)父節(jié)點(diǎn)。第一種處理起來相對(duì)簡(jiǎn)單適合規(guī)模適中的配電網(wǎng)規(guī)劃問題。3. DistFlow潮流模型與N-1約束的數(shù)學(xué)化表達(dá)3.1 為什么配電網(wǎng)規(guī)劃選DistFlow而不是牛頓-拉夫遜配電網(wǎng)潮流計(jì)算的主流方法里有前推回代法、牛拉法但規(guī)劃優(yōu)化模型里幾乎都是選DistFlow支路潮流方程原因有三點(diǎn)。第一DistFlow方程是顯式的節(jié)點(diǎn)功率平衡與支路損耗表達(dá)式方便直接代入優(yōu)化模型第二它是二次約束適當(dāng)松弛或線性化后能轉(zhuǎn)化為混合整數(shù)二階錐規(guī)劃或混合整數(shù)線性規(guī)劃求解器可以直接處理第三配電網(wǎng)通常是輻射狀網(wǎng)絡(luò)DistFlow不需要計(jì)算節(jié)點(diǎn)導(dǎo)納矩陣的逆數(shù)值穩(wěn)定性也好。DistFlow原始方程如下支路潮流平衡P_j Σ_{k∈child(j)} P_jk - P_ij R_ij × I_ij2 Q_j Σ_{k∈child(j)} Q_jk - Q_ij X_ij × I_ij2電壓降落關(guān)系V_j2 V_i2 - 2(R_ij P_ij X_ij Q_ij) (R_ij2 X_ij2) I_ij2支路電流定義I_ij2 (P_ij2 Q_ij2) / V_i2這里面最后一個(gè)方程是二次的也是非線性的來源。配電網(wǎng)規(guī)劃場(chǎng)景多、體量大如果保留全部非線性問題就變成了混合整數(shù)非線性規(guī)劃求解難度會(huì)急劇上升。3.2 線性化處理把二次約束變成可控的線性約束處理這個(gè)非線性有三種主流方案。第一種是把I_ij2項(xiàng)忽略掉認(rèn)為網(wǎng)損遠(yuǎn)小于輸送功率然后方程簡(jiǎn)化成線性的DistFlow。這種處理在輕載的農(nóng)村配電網(wǎng)問題中誤差可接受但對(duì)負(fù)荷重、網(wǎng)損占比高的城區(qū)電網(wǎng)誤差會(huì)偏大。第二種是對(duì)I_ij2和V_i2采用分段線性化。把每個(gè)變量劃分成若干段用一組連續(xù)變量和二進(jìn)制變量表示每一段的值使非線性項(xiàng)用線性組合近似。實(shí)際算例證明選取合適的分段數(shù)精度和求解速度能達(dá)到一個(gè)比較好的平衡。第三種是利用二階錐松弛把I_ij2的等式關(guān)系松弛為不等式整個(gè)問題變成混合整數(shù)二階錐規(guī)劃。這種建模方式在近期文獻(xiàn)中用得很多求解器支持也比較成熟。但要注意松弛是否嚴(yán)格松弛后的最優(yōu)解如果I_ij2大于等于關(guān)系取了等號(hào)結(jié)果才與原問題等價(jià)。我在自己搭建模型時(shí)采用的方案是線性化DistFlow加Big-M處理候選線路這樣最終模型是純MILP求解穩(wěn)定性好初學(xué)也容易調(diào)試。對(duì)結(jié)果精度要求高的場(chǎng)合可以再切換到二階錐版本。3.3 Big-M約束候選線路沒建時(shí)潮流必須為0候選線路在未建設(shè)時(shí)x_l0對(duì)應(yīng)支路上不應(yīng)該有功率流動(dòng)同時(shí)在電網(wǎng)上等同于不存在這條支路。這個(gè)邏輯不能靠簡(jiǎn)單的容量約束表達(dá)因?yàn)槲唇ň€路一旦被賦予0潮流方程里它的電壓降落關(guān)系卻仍然存在會(huì)影響相鄰節(jié)點(diǎn)電壓。因此需要對(duì)候選線路加Big-M約束|P_l_s| ≤ M × x_l |Q_l_s| ≤ M × x_l當(dāng)x_l0時(shí)強(qiáng)制P_l_s和Q_l_s都為0當(dāng)x_l1時(shí)約束不發(fā)揮限制作用M取一個(gè)足夠大的數(shù)但也不能太大否則會(huì)損害求解器的數(shù)值穩(wěn)定性。實(shí)際中M取線路額定容量倒數(shù)的若干倍或者取全系統(tǒng)負(fù)荷總量都是常見做法。候選線路的電壓關(guān)系也要特殊處理。當(dāng)x_l1時(shí)支路兩端電壓滿足DistFlow的電壓降落關(guān)系當(dāng)x_l0時(shí)兩端電壓可以被視為解耦約束不生效。寫法是在原來的等式右邊加一個(gè)含M和(1-x_l)的松弛項(xiàng)。3.4 N-1場(chǎng)景集的生成與篩選N-1場(chǎng)景集不能簡(jiǎn)單地把所有元件都掃一遍。配電網(wǎng)設(shè)備數(shù)量多如果把每臺(tái)配變、每段線路都納入N-1校核模型規(guī)模會(huì)迅速膨脹求解時(shí)間可能從幾分鐘變成幾十個(gè)小時(shí)。工程上更務(wù)實(shí)的做法是場(chǎng)景篩選只對(duì)主變、重載饋線、關(guān)鍵聯(lián)絡(luò)通道做N-1校驗(yàn)。篩選依據(jù)可以是歷史故障率、檢修頻次、負(fù)荷重要性等級(jí)。負(fù)荷較輕的末端單輻射分支線路故障時(shí)本來就可以通過分段開關(guān)隔離不一定要納入全網(wǎng)N-1校核。場(chǎng)景壓縮把電氣距離相近、拓?fù)浣Y(jié)構(gòu)相似的線路合并成代表場(chǎng)景不同故障位置如果導(dǎo)致相同的轉(zhuǎn)帶路徑只需保留一個(gè)場(chǎng)景。故障預(yù)想集動(dòng)態(tài)更新先求解不含N-1約束的模型得到一個(gè)基礎(chǔ)方案然后掃描這個(gè)方案下哪些元件N-1不通過把這些元件作為新的N-1場(chǎng)景加入模型重新求解直到所有預(yù)想故障都滿足為止。這個(gè)方法就是經(jīng)典的安全約束迭代法能大幅減少場(chǎng)景數(shù)量。我在實(shí)際項(xiàng)目中采用的做法是基礎(chǔ)方案N-1回填修正。坦白說這個(gè)迭代策略的收斂性在少數(shù)算例中可能需要兩三輪但大多數(shù)配電網(wǎng)問題都能在兩輪內(nèi)收斂總體效率比一次枚舉全部場(chǎng)景高很多。4. Matlab代碼實(shí)現(xiàn)YALMIP建模與求解實(shí)戰(zhàn)4.1 數(shù)據(jù)準(zhǔn)備節(jié)點(diǎn)、線路、候選走廊怎么組織Matlab里搭配電網(wǎng)規(guī)劃模型第一步是把網(wǎng)絡(luò)數(shù)據(jù)整理成清晰的數(shù)組結(jié)構(gòu)。我自己習(xí)慣用結(jié)構(gòu)體組織數(shù)據(jù)這樣后面寫約束時(shí)不容易搞混節(jié)點(diǎn)編號(hào)。% 網(wǎng)絡(luò)基礎(chǔ)數(shù)據(jù) net.nb 6; % 節(jié)點(diǎn)數(shù) net.nl 4; % 現(xiàn)有線路數(shù) net.nc 3; % 候選線路數(shù) net.baseMVA 100; % 基準(zhǔn)容量100MVA % 節(jié)點(diǎn)數(shù)據(jù)編號(hào)、負(fù)荷有功MW、負(fù)荷無(wú)功MVar net.bus [ 1 0.0 0.0; % 變電站節(jié)點(diǎn) 2 0.8 0.3; 3 1.2 0.4; 4 0.9 0.3; 5 1.5 0.5; 6 0.8 0.2 ]; % 現(xiàn)有線路首節(jié)點(diǎn)、末節(jié)點(diǎn)、電阻Ω、電抗Ω、容量MVA net.line [ 1 2 0.10 0.05 5.0; 1 3 0.08 0.04 5.0; 2 4 0.15 0.06 4.0; 3 5 0.12 0.05 4.0 ]; % 候選線路首節(jié)點(diǎn)、末節(jié)點(diǎn)、電阻Ω、電抗Ω、容量MVA、投資成本萬(wàn)元 net.cand [ 2 5 0.15 0.07 6.0 120; 3 6 0.18 0.08 6.0 150; 4 6 0.20 0.09 5.0 140 ];注意所有電氣量最好都轉(zhuǎn)化為標(biāo)幺值這樣數(shù)字量級(jí)接近求解器的數(shù)值穩(wěn)定性好不會(huì)因?yàn)槟硞€(gè)量綱差距過大導(dǎo)致收斂困難。基準(zhǔn)容量取100MVA電壓基準(zhǔn)取10kV則標(biāo)幺化后阻抗不需要額外變換直接把歐姆值除以基準(zhǔn)阻抗即可。4.2 核心建模代碼變量定義和約束組裝Matlab里用YALMIP做建模非常直觀。投資變量用binvar定義運(yùn)行變量用sdpvar定義。因?yàn)槊總€(gè)N-1場(chǎng)景都有自己的運(yùn)行變量所以運(yùn)行變量的維度是元件數(shù)×場(chǎng)景數(shù)。% 定義變量 x binvar(net.nc, 1); % 候選線路新建決策 Pg sdpvar(net.nb, nscen, full); % 節(jié)點(diǎn)注入有功場(chǎng)景維度 Qg sdpvar(net.nb, nscen, full); % 節(jié)點(diǎn)注入無(wú)功 Pij sdpvar(net.nl net.nc, nscen, full); % 支路有功 Qij sdpvar(net.nl net.nc, nscen, full); % 支路無(wú)功 Vi2 sdpvar(net.nb, nscen, full); % 節(jié)點(diǎn)電壓平方 Ii2 sdpvar(net.nl net.nc, nscen, full); % 支路電流平方這里nscen表示總場(chǎng)景數(shù)包括1個(gè)基態(tài)場(chǎng)景和若干個(gè)N-1場(chǎng)景。很多初學(xué)者寫代碼時(shí)會(huì)把運(yùn)行變量定義成二維矩陣后面循環(huán)場(chǎng)景時(shí)按下標(biāo)賦值這個(gè)思路沒問題但要注意矩陣索引別寫反。目標(biāo)函數(shù)可以這樣寫% 投資成本年值系數(shù) r 0.08; T 10; A_P r * (1r)^T / ((1r)^T - 1); C_inv_annual net.cand_cost * A_P; % 每回候選線路的年值投資 % 網(wǎng)損成本 C_loss 0.5; % 元/kWh示例值 tau 3000; % 年最大負(fù)荷損耗小時(shí)數(shù) obj C_inv_annual * x ... C_loss * tau * sum(sum(R_all .* Ii2(:,1))) / 1000;代碼里R_all是全部線路現(xiàn)有候選的電阻標(biāo)幺值數(shù)組。為什么只算基態(tài)場(chǎng)景的網(wǎng)損因?yàn)镹-1場(chǎng)景是短時(shí)故障狀態(tài)運(yùn)行時(shí)間短網(wǎng)損成本占比很小為了簡(jiǎn)化模型我們可以只在基態(tài)場(chǎng)景計(jì)算網(wǎng)損成本N-1場(chǎng)景只做安全約束不計(jì)入目標(biāo)函數(shù)。約束組裝是核心環(huán)節(jié)用循環(huán)把每個(gè)場(chǎng)景的約束依次寫進(jìn)去Constraints []; for s 1:nscen % 基態(tài)或N-1場(chǎng)景的DistFlow約束 % Pij(l,s)代表第l條線路在場(chǎng)景s下的有功 % 節(jié)點(diǎn)功率平衡每個(gè)節(jié)點(diǎn)的注入等于下游支路功率之和 for i 2:net.nb % 變電站節(jié)點(diǎn)1作為平衡節(jié)點(diǎn)單獨(dú)處理 % Pg(i,s)等于負(fù)荷功率減去注入功率 % 這里用鄰接矩陣A_inj來組織節(jié)點(diǎn)-支路關(guān)聯(lián)關(guān)系 % 實(shí)際操作中用稀疏矩陣乘法實(shí)現(xiàn)更高效 end % 支路電壓-潮流約束線性化DistFlow % Vj2 Vi2 - 2*(R*Pij X*Qij) % 容量約束 % Pij(l,s)^2 Qij(l,s)^2 cap_l^2 * Ii2(l,s) % 電壓上下限 % 0.95^2 Vi2(i,s) 1.05^2 end % 候選線路Big-M約束 M 10; % 足夠大的數(shù) for l 1:net.nc pl net.nl l; Constraints [Constraints, -M*x(l) Pij(pl,:), Pij(pl,:) M*x(l)]; Constraints [Constraints, -M*x(l) Qij(pl,:), Qij(pl,:) M*x(l)]; end % 輻射狀約束總線路數(shù) 節(jié)點(diǎn)數(shù) - 1 Constraints [Constraints, sum(x) net.nl - net.nl_dummy net.nb - 1];代碼片段的輻射狀約束處理寫了簡(jiǎn)化形式真實(shí)項(xiàng)目中如果候選線路選擇和現(xiàn)有拓?fù)渲丿B需要更嚴(yán)格地表征連通性和無(wú)環(huán)約束可以引入每個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn)二進(jìn)制變量或者對(duì)每個(gè)節(jié)點(diǎn)做生成樹約束。實(shí)際代碼里我用的是逐節(jié)點(diǎn)父節(jié)點(diǎn)指示方法稍微復(fù)雜一些但能保證拓?fù)錁湫谓Y(jié)構(gòu)。4.3 求解器選擇與求解參數(shù)配置模型建好之后求解器是MILP求解的核心。Matlab自帶的intlinprog可以處理中小規(guī)模問題但性能一般。行業(yè)里通常用主流商用MILP求解器或者開源求解器SCIP。YALMIP提供了統(tǒng)一的調(diào)用接口求解器只要裝了對(duì)應(yīng)的Matlab接口直接調(diào)用optimize()函數(shù)即可。% 設(shè)置求解器與參數(shù) options sdpsettings(solver, gurobi, ... gurobi.MIPGap, 0.001, ... gurobi.TimeLimit, 3600, ... verbose, 2); % 求解 optimize(Constraints, obj, options); % 提取結(jié)果 x_opt value(x); Pij_opt value(Pij); Vi2_opt value(Vi2); fprintf(總成本%.2f萬(wàn)元\n, value(obj)); fprintf(新建線路決策); disp(find(x_opt 0.5));MIPGap設(shè)置成0.001表示允許0.1%的相對(duì)優(yōu)化間隙可以顯著加速求解。TimeLimit設(shè)成3600秒避免遇到極端算例時(shí)無(wú)限期等待。求解后檢查YALMIP返回的求解狀態(tài)如果求解結(jié)果是infeasible那就要回到約束定義里找原因。另外提一個(gè)實(shí)際經(jīng)驗(yàn)求解器參數(shù)里MIPGap和TimeLimit是兩個(gè)最重要的參數(shù)。配電網(wǎng)N-1擴(kuò)展規(guī)劃模型規(guī)模大了之后求精確最優(yōu)往往非常耗時(shí)工程上0.1%甚至0.5%的間隙已經(jīng)完全夠用。沒必要為了那一點(diǎn)點(diǎn)目標(biāo)函數(shù)差異讓求解器跑上幾天。5. 算例復(fù)盤某10kV工業(yè)園區(qū)配電網(wǎng)的N-1擴(kuò)展規(guī)劃5.1 算例系統(tǒng)設(shè)定為了把前面的模型串起來我用一個(gè)簡(jiǎn)化的10kV工業(yè)園區(qū)配電網(wǎng)做演示。系統(tǒng)基準(zhǔn)容量100MVA基準(zhǔn)電壓10kV?,F(xiàn)有網(wǎng)架4條饋線3個(gè)候選新建走廊規(guī)劃期10年折現(xiàn)率8%。現(xiàn)狀最大負(fù)荷5.2MW規(guī)劃期末預(yù)計(jì)增長(zhǎng)到7.5MW左右負(fù)荷功率因數(shù)約0.9。候選線路參數(shù)如下表編號(hào)首節(jié)點(diǎn)末節(jié)點(diǎn)電阻標(biāo)幺值電抗標(biāo)幺值容量/MVA投資/萬(wàn)元C1250.0150.0076.0120C2360.0180.0086.0150C3460.0200.0095.0140校驗(yàn)場(chǎng)景選擇四條現(xiàn)有饋線分別退出運(yùn)行以及變電站一臺(tái)主變退出運(yùn)行共5個(gè)N-1場(chǎng)景加1個(gè)基態(tài)場(chǎng)景。5.2 求解結(jié)果模型經(jīng)YALMIP建模后調(diào)用求解器求解耗時(shí)大約40秒優(yōu)化間隙0.1%以內(nèi)。目標(biāo)函數(shù)最小時(shí)選擇新建線路C1和C2跳過C3??偝杀灸曛荡蠹s為58.6萬(wàn)元其中投資年值約28.9萬(wàn)元年網(wǎng)損成本約29.7萬(wàn)元。新建C1和C2的直觀意義很清晰。C1打通了節(jié)點(diǎn)2到節(jié)點(diǎn)5的通道使右上角負(fù)荷區(qū)可以由兩條路徑供電C2打通了節(jié)點(diǎn)3到節(jié)點(diǎn)6的通道消除了左側(cè)負(fù)荷區(qū)的單輻射末端。C3雖然也能提供聯(lián)絡(luò)但新增效益不如前兩條線路高在投資權(quán)衡下被優(yōu)化掉了。5.3 N-1校驗(yàn)結(jié)果與方案解讀對(duì)新建后的網(wǎng)架做全場(chǎng)景N-1校驗(yàn)結(jié)果如下故障元件轉(zhuǎn)帶路徑最大負(fù)載率最低電壓標(biāo)幺值校驗(yàn)結(jié)果饋線L1經(jīng)C1轉(zhuǎn)帶92%0.958通過饋線L2經(jīng)C2轉(zhuǎn)帶88%0.962通過饋線L3經(jīng)C1C2聯(lián)合轉(zhuǎn)帶95%0.955通過饋線L4經(jīng)C2轉(zhuǎn)帶90%0.960通過主變T1其余主變承載94%0.957通過可以看到雖然L3故障時(shí)轉(zhuǎn)帶路徑較長(zhǎng)但因?yàn)镃1和C2同時(shí)存在負(fù)荷被分擔(dān)到兩條通道上負(fù)載率沒有超過短時(shí)過載系數(shù)1.3的限制電壓也在0.95以上的合格范圍。這組校驗(yàn)充分說明了N-1擴(kuò)展規(guī)劃本質(zhì)上是構(gòu)建轉(zhuǎn)帶通道的判斷。5.4 對(duì)比與靈敏度成本和N-1要求的平衡把約束條件里的短時(shí)過載系數(shù)從1.3改成1.0也就是N-1后完全不允許過載結(jié)果會(huì)怎樣我重新求解后發(fā)現(xiàn)需要把C3也納入建設(shè)方案總成本直接上升了約35%。這說明N-1標(biāo)準(zhǔn)的嚴(yán)苛程度對(duì)投資決策影響非常大。規(guī)劃人員拿到一個(gè)N-1校核標(biāo)準(zhǔn)時(shí)一定要搞清楚其中是否有短時(shí)過載裕度因?yàn)檫@個(gè)系數(shù)直接決定了要不要多建一條聯(lián)絡(luò)線路。再做一個(gè)靈敏度分析如果候選線路的投資成本上調(diào)20%最優(yōu)方案變成了只建C1一條線路N-1校驗(yàn)在L4故障時(shí)不通過。換句話說預(yù)算緊張時(shí)如果強(qiáng)行壓投資就必須接受一部分N-1場(chǎng)景不過的結(jié)果或者接受在故障時(shí)切除部分三級(jí)負(fù)荷。這個(gè)例子想說明的是N-1擴(kuò)展規(guī)劃本質(zhì)上是一個(gè)在可靠性與經(jīng)濟(jì)性之間做權(quán)衡的問題不是簡(jiǎn)單多建線路就能通過所有校驗(yàn)。6. 常見問題與排查技巧實(shí)錄6.1 模型報(bào)錯(cuò)不可行應(yīng)該先查哪個(gè)環(huán)節(jié)模型不可行是N-1擴(kuò)展規(guī)劃里最讓人頭大的情況。我自己調(diào)試時(shí)有一個(gè)固定排查順序先檢查基態(tài)場(chǎng)景再檢查N-1場(chǎng)景。如果基態(tài)都不可行說明現(xiàn)有網(wǎng)架加上候選方案無(wú)法滿足基礎(chǔ)供電需求多半是候選線路的走廊選擇不夠、或者容量規(guī)格選小了這時(shí)模型解不出投資方案是正常的。如果基態(tài)可行但加入某個(gè)N-1場(chǎng)景后不可行就要查是哪一個(gè)場(chǎng)景出的問題。一個(gè)快速辦法是在循環(huán)里注釋掉部分場(chǎng)景約束逐個(gè)追查。往往是某個(gè)N-1場(chǎng)景對(duì)應(yīng)的轉(zhuǎn)帶路徑根本不存在比如某個(gè)節(jié)點(diǎn)只有一條出線它下游的負(fù)荷在故障時(shí)沒有任何可轉(zhuǎn)帶通道。這種情況下要么增加候選線路打通這個(gè)通道要么在模型里允許切除部分三級(jí)負(fù)荷引入松弛變量并加懲罰費(fèi)用否則問題就不可能有可行解。6.2 求解時(shí)間爆炸怎么壓縮配電網(wǎng)N-1擴(kuò)展規(guī)劃模型最怕的是場(chǎng)景太多。每個(gè)N-1場(chǎng)景都要復(fù)制一套潮流變量場(chǎng)景數(shù)量翻倍變量和約束數(shù)量幾乎線性翻倍求解時(shí)間呈超線性增長(zhǎng)。我自己遇到過從10分鐘求解時(shí)間變成兩三小時(shí)還沒收斂的情況。三個(gè)壓縮手段最有效。第一按3.4節(jié)的方法做場(chǎng)景篩選只保留關(guān)鍵元件第二把MIPGap適當(dāng)調(diào)大比如從0.001放到0.005目標(biāo)函數(shù)誤差最多增加0.5%但求解時(shí)間可能減少一個(gè)數(shù)量級(jí)第三給求解器設(shè)一個(gè)TimeLimit比如1800秒如果時(shí)間到了還沒收斂就把當(dāng)前最優(yōu)整數(shù)解作為方案輸出并檢查它的N-1校驗(yàn)結(jié)果。實(shí)際項(xiàng)目中一個(gè)安全可行但成本略高0.2%的方案遠(yuǎn)好過一個(gè)算不出來的精確最優(yōu)解。6.3 規(guī)劃結(jié)果看著不對(duì)勁孤島、合環(huán)怎么處理一個(gè)常見問題是優(yōu)化結(jié)果里出現(xiàn)了孤島。比如某條候選線路被選中但它只連接了一個(gè)沒有負(fù)荷的中間節(jié)點(diǎn)形成懸空結(jié)構(gòu)。這種現(xiàn)象的原因通常是輻射狀約束寫得不夠嚴(yán)格或者Big-M參數(shù)M取值不合理導(dǎo)致求解器鉆空子構(gòu)造了一個(gè)虛假的低成本方案。排查方法是把結(jié)果方案的拓?fù)洚嫵鰜碇饤l檢查連通性。我習(xí)慣用Matlab的graph對(duì)象做可視化把節(jié)點(diǎn)和建成的線路畫成圖一眼就能看出有沒有孤島。如果孤島出現(xiàn)優(yōu)先檢查輻射狀約束是否約束了所有候選線路必須構(gòu)成連通樹而不只是約束線路總條數(shù)。合環(huán)的問題通常出現(xiàn)在現(xiàn)有網(wǎng)架本身存在聯(lián)絡(luò)開關(guān)的場(chǎng)景里。如果模型沒有對(duì)聯(lián)絡(luò)開關(guān)做二進(jìn)制建模求解器可能會(huì)把所有聯(lián)絡(luò)開關(guān)當(dāng)成常閉開關(guān)導(dǎo)致正常運(yùn)行方式下出現(xiàn)環(huán)網(wǎng)。處理辦法是在模型里給聯(lián)絡(luò)開關(guān)單獨(dú)建0-1變量并且約束正常運(yùn)行方式下開關(guān)斷開的數(shù)量使整個(gè)網(wǎng)絡(luò)保持輻射狀。6.4 結(jié)果通過了模型校驗(yàn)但配電網(wǎng)實(shí)際運(yùn)行人員不認(rèn)可這種情況也遇到過。建模時(shí)為了計(jì)算方便把負(fù)荷全設(shè)成了恒功率模型、忽略了電壓靜態(tài)特性N-1后電壓雖然滿足0.95~1.05的約束但實(shí)際轉(zhuǎn)帶時(shí)線路充電功率、配電變壓器的勵(lì)磁特性等因素會(huì)帶來偏差。所以我的建議一直是模型結(jié)果必須用完整交流潮流做一次后校驗(yàn)把N-1場(chǎng)景逐一用成熟的潮流計(jì)算工具重新算一遍確認(rèn)負(fù)載率、電壓、功率因數(shù)都滿足工程要求。這個(gè)后校驗(yàn)步驟雖然看起來是多此一舉但在實(shí)際工程評(píng)審中是救命的一步。規(guī)劃方案評(píng)審時(shí)專家第一件事就是抽幾個(gè)N-1場(chǎng)景讓你算給他看。如果拿不出交流潮流的復(fù)核結(jié)果方案很難被認(rèn)可。最后分享一個(gè)實(shí)際操作層面體會(huì)我在實(shí)際項(xiàng)目里踩過最深的一個(gè)坑是把N-1場(chǎng)景的潮流約束和基態(tài)場(chǎng)景的潮流約束建立了錯(cuò)誤的耦合關(guān)系。有一版代碼里我把投資變量和場(chǎng)景變量混在一起循環(huán)導(dǎo)致求解器始終找不到可行解查了兩天才發(fā)現(xiàn)是某個(gè)場(chǎng)景下候選線路的Big-M約束被錯(cuò)誤地綁定到了別的場(chǎng)景變量上。這種問題最有效的避免方式是寫約束之前先畫一張變量關(guān)系表明確每個(gè)約束涉及哪些變量、哪些是共享的、哪些是場(chǎng)景獨(dú)立的然后再動(dòng)手寫代碼。另外如果你準(zhǔn)備把這個(gè)模型往更深的方向擴(kuò)展可以考慮加入分布式電源的選址定容、儲(chǔ)能配置、動(dòng)態(tài)多階段規(guī)劃等。N-1擴(kuò)展規(guī)劃作為基礎(chǔ)框架往上加這些模塊是順理成章的事。但我的建議是先把最基本的線路擴(kuò)展N-1校驗(yàn)跑通跑熟再談擴(kuò)展?;A(chǔ)模型的每一個(gè)環(huán)節(jié)從數(shù)據(jù)準(zhǔn)備、約束構(gòu)建到求解器參數(shù)調(diào)試都值得耐心做扎實(shí)。