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