
配電網規劃說起來簡單真正上手做N-1擴展規劃很多人第一次就栽在“N-1到底該怎么建模”這個坎上。拿一份IEEE 33節點數據跑通潮流容易但要回答“未來五年該在哪條走廊新建線路、新建幾回才能既省錢又保證單一故障下不斷電”這就是一個典型的配電網N-1擴展規劃問題。這篇文章我打算把這個問題從工程背景、數學建模到Matlab代碼實現完整拆一遍順便把我自己踩過的坑和排查經驗都倒出來適合正在做配電網規劃課題的研究生、剛接手配網規劃項目的工程師以及想復現相關論文算法的同學。1. 配電網N-1擴展規劃問題定義與研究價值1.1 N-1準則的工程含義N-1準則最早脫胎于輸電網安全穩定運行標準說的是電力系統在任意單一元件線路、變壓器、母線等故障退出運行后系統仍然能夠保持對全部負荷的供電不切負荷、設備不過載、節點電壓不越限。說白了就是最好的路斷了車還能從別的路繞過去只不過繞行之后不能把橋壓塌。配電網的N-1和輸電網并不完全一樣。配電網一般是閉環設計、開環運行正常工況下多回饋線在聯絡開關處斷開各自帶各自的負荷。一旦某回饋線故障才通過合上聯絡開關讓相鄰饋線承接故障段下游負荷。所以在配電網規劃階段做N-1校驗本質上是在問當某回饋線或某臺配變退出運行后有沒有足夠的備用容量和聯絡通道把負荷轉帶出去。很多初學者會把N-1誤當成“所有線路都要雙回路”這是不對的。N-1關心的不是“有沒有備用元件”而是“任意一個元件退出后系統是不是還安全”。一個三段的輻射狀饋線如果中間裝了兩個聯絡開關接往兩條不同的變電站母線那它完全可能滿足N-1并不需要整條線路都拉雙回。1.2 擴展規劃要解決的核心問題擴展規劃就是在已有配電網基礎上對未來一定周期內的負荷增長做出應對。常見措施包括新建或更換饋線增大導線截面、新增聯絡線、新建變電站或新增主變、加裝分段開關和聯絡開關等。這個問題的難點在于組合爆炸。一條規劃饋線走廊建與不建是0/1決策一個變電站新增幾臺主變是整數決策多條候選線路組合起來可行方案數量會隨著候選走廊數量呈指數級增長。比如30條候選線路理論上就有2^30種建設方案靠手工枚舉根本不現實。同時規劃結果還必須滿足運行層面的約束包括潮流約束、電壓約束、容量約束、輻射狀約束以及關鍵的N-1安全約束。所以配電網N-1擴展規劃本質上是一個“投資決策-運行校核”強耦合的組合優化問題也是目前配電網規劃方向學術研究和工程落地都繞不開的核心課題。1.3 為什么選擇Matlab來做這件事做規劃研究業界常用的平臺有幾種GAMS、PythonPyomo/Pandapower、MatlabYalmip。我之所以在項目里用Matlab主要看重三點。第一Matlab的矩陣運算和內置的優化工具箱讓原型開發很快。配電網的DistFlow潮流方程用矩陣形式寫出來一段代碼就能把整張網的潮流約束組織完改數據也方便。第二Yalmip這個建模工具箱大大降低了混合整數二階錐規劃MISOCP的建模門檻搭配Cplex或Gurobi幾行代碼就能把復雜的N-1約束丟給求解器。第三Matlab的繪圖和數據分析能力對結果展示非常友好規劃出的網架結構、電壓分布、網損變化都能直接可視化寫報告和論文的時候省不少事。需要說明的是Matlab和Yalmip都需要正版授權求解器如Gurobi有學術免費許可Cplex也有社區版具體安裝方法網上有官方文檔這里不展開。2. 數學模型如何把規劃問題變成可求解的優化問題2.1 目標函數投資、損耗與可靠性成本怎么權衡規劃模型的目標函數通常是“年綜合費用最小”。這里的“年綜合費用”不是某一年的一次性投資而是把規劃期內的建設投資、運行費用和可靠性成本折算到同一個時間尺度上。我常用的目標函數形式是min C C_inv C_loss C_ens其中C_inv是新建線路投資的等年值計算公式是C_inv (r0 * (1r0)^n) / ((1r0)^n - 1) * Σ c_k * x_k這里r0是貼現率n是設備使用年限c_k是第k條候選線路的建設成本x_k是0/1變量表示是否建設該線路。之所以要做“等年值”折算是因為一個規劃項目通常跨越好多年不同方案的建設年份、設備壽命不同不折算到同一年就沒法公平比較。C_loss是年網損費用一般按典型日負荷曲線或者最大負荷利用小時數近似計算。簡化處理時可以選一個代表日或代表場景算完潮流后把網損乘上利用小時數和電價。C_ens是缺電成本工程上常用期望缺供電量EENS乘以單位停電損失來估計。不過說實話完整地算EENS需要大量故障場景枚舉學術論文里經常用工程簡化時往往會弱化這一項重點關注C_inv和C_loss。2.2 約束條件潮流、電壓、輻射狀與N-1之間的邏輯關系約束是規劃模型的骨架。上手先排優先級大致是這四類潮流約束決定全網運行狀態是否物理可行。配電網用DistFlow方程最合適它是把完整的交流潮流方程在輻射狀網絡下做了精確的支路化簡化精度足夠而且具有非常好的凸松弛結構。節點電壓約束保證每個節點電壓在允許范圍內一般取0.93~1.07倍額定電壓有些地區標準不同按實際規范來。這里注意N-1故障狀態下電壓偏差允許范圍往往比正常運行要寬這是工程慣例模型里要對正常工況和N-1故障工況分別設電壓上下限。支路電流/容量約束每條線路的載流量不能超過上限。新建線路有建設狀態變量所以要用“大M”方式處理線路不建電流強制為0線路建設電流上限等于導線載流量。輻射狀約束配電網優化理論上應當保持開環運行。如果只用DistFlow方程本身其實是不限制環網的。實際規劃中我一般通過“虛擬潮流”法加一個輔助變量強制每個負荷節點只有一個父節點從而保證網絡是輻射狀森林結構。N-1安全約束的特殊之處在于它不是一組普通不等式而是對“故障后系統”的一組運行可行性約束。也就是說每考慮一個預想故障就要對故障后的網絡重新列寫一套潮流約束和運行約束再把這些約束和正常工況的約束一起放進同一個優化問題里。這就導致模型規模成倍增長也是N-1擴展規劃計算量大的根本原因。2.3 N-1校核的兩種處理思路先規劃后校驗與約束內嵌實際研究里N-1的處理有兩種典型思路我項目里兩種都寫過簡單對比一下。第一種是“先規劃后校驗”迭代法。先把N-1約束暫時去掉解一個只滿足正常運行工況的規劃問題得到一組建設方案然后對這個方案做全故障掃描找出N-1不滿足的場景再把這些場景對應的約束作為“割”加回原模型中重新求解。如此循環直到所有故障場景全部通過。這個方法優點是模型規模小、求解快缺點是迭代次數不確定而且對初始方案敏感有時候要跑很多輪才能收斂。第二種是“約束內嵌”法也就是把每個預想故障場景下的潮流變量和約束直接全部放進優化模型一次性求解。這種方法模型完整求解結果在數學上保證了N-1安全但變量數會膨脹得非常快。比如IEEE 33節點系統如果有15個候選線路、考慮10個故障場景那么潮流變量就要乘以10。對于節點數在100以內的配電網現代求解器還能應付超過幾百個節點就得上分解算法或者場景削減了。我自己的經驗是做學術研究優先選“約束內嵌”法一次成型、結論干凈做實際工程規劃如果網絡規模大可以先跑“先規劃后校驗”快速獲得可行解再用嚴格模型做最終校核兩條腿走路更穩妥。3. 求解策略為什么MISOCP成了主流啟發式算法還有沒有用武之地3.1 從非線性潮流到二階錐松弛配電網DistFlow方程本身是非線性的尤其是支路功率與電壓、電流的耦合項直接求解非凸非線性規劃既慢又容易陷在局部最優里。2016年前后學術界把“二階錐松弛”引入DistFlow這一步是配電網規劃算法上比較大的進步。二階錐松弛的核心思想是把約束I2_ij (P2_ij Q2_ij) / V2_i放寬成旋轉二階錐約束I2_ij ≥ (P2_ij Q2_ij) / V2_i或者寫成更標準的形式再做一次變量替換最終變成一個可以用商業錐優化求解器高效求解的凸約束。在目標函數單調遞增且網絡滿足一定條件時這個松弛是緊的也就是說求出來的解和原非凸問題的最優解等價。這個發現對規劃問題意義重大因為一旦松弛是緊的整個N-1擴展規劃就從“非凸混合整數非線性規劃”變成了“混合整數二階錐規劃MISOCP”。雖然MISOCP仍然是NP難的整數問題但現代求解器Cplex、Gurobi、Mosek已經能處理中等規模的MISOCP而且能給出最優性間隙的證明。這在工程上非常有用你知道你離最優解還差1%而不是在黑暗里瞎摸索。3.2 商業求解器和Matlab內置求解器怎么選Matlab內置的intlinprog只能解混合整數線性規劃不能直接處理二階錐約束。如果不用Yalmip等建模工具還真不好直接用內置函數求解MISOCP。所以我的建議是裝一個Yalmip工具箱再用Gurobi或Cplex做底層求解器。Gurobi對二階錐的支持非常完善求解速度快學術免費。Cplex社區版也夠用但部分老版本對二階錐的處理不如Gurobi順手。如果網絡規模很小也可以用fmincon配合罰函數處理整數變量但這只能作為教學演示別拿到正式項目里用整數的0/1約束用罰函數很難保證可行性。啟發式算法遺傳算法、粒子群在純學術討論里偶爾能看到但我必須潑一盆冷水這類算法無法保證全局最優面對大規模N-1故障集時每次個體評估都要做一次全網潮流甚至N-1掃描計算量反而更恐怖而且結果不穩定。除非網絡結構非常特殊或者你要處理的約束太復雜無法用MISOCP表達否則我很不建議一上來就上啟發式。3.3 幾種求解思路的對比求解方式數學性質計算速度適用規模能保證最優性嗎使用難度MISOCP Gurobi/Cplex凸松弛整數規劃快節點數500能給出最優性間隙中MILP線性化近似線性化誤差快較大取決于線性化精度中低啟發式GA/PSO非凸、隨機慢中等不能保證低枚舉所有組合精確極慢僅候選線路很少能低實際項目中我傾向于先用MISOCP跑一個小規模樣例驗證模型正確性再逐步擴大候選線路數量和故障場景數量最后再根據求解時間決定是否做場景削減。4. Matlab代碼實現整體框架與關鍵環節拆解4.1 主程序框架從數據到結果一共分幾步一個完整的配電網N-1擴展規劃Matlab程序我習慣分成六個模塊數據讀入、參數設置、變量定義、約束構建、求解調用、結果分析。代碼本身不用堆砌得很長關鍵是每個模塊職責清楚后面排查問題才方便。下面是一個主程序的示意結構%% 主程序配電網N-1擴展規劃 clear; clc; %% 1. 讀入網絡數據節點、已有線路、候選線路、負荷 [bus, branch, candidate] load_network_data(case33_N1.xlsx); %% 2. 設置規劃參數 para.discount 0.08; % 貼現率 para.life 20; % 設備壽命年 para.price 0.6; % 單位電價元/kWh para.lossHours 3000; % 等效網損利用小時數 para.Vmax 1.07; % 正常運行電壓上限 para.Vmin 0.93; % 正常運行電壓下限 para.Vmax_N1 1.10; % N-1工況電壓上限 para.Vmin_N1 0.90; % N-1工況電壓下限 %% 3. 生成故障場景集合預想事故集 faultSet build_fault_set(candidate, ...); %% 4. 調用Yalmip建模函數構建規劃模型 model build_N1_planning_model(bus, branch, candidate, faultSet, para); %% 5. 調用Gurobi求解器求解 ops sdpsettings(solver, gurobi, verbose, 2, usex0, 0); sol optimize(model.Constraints, model.Objective, ops); %% 6. 提取結果并繪圖 if sol.problem 0 x_opt value(model.x_line); visualize_planning_result(bus, branch, candidate, x_opt); else disp(求解失敗請檢查約束或求解器設置); end這個框架里最花時間的是build_N1_planning_model這個函數后面幾節我會把里面核心部分的寫法展開。4.2 數據準備候選線路和故障場景是規劃的關鍵輸入做擴展規劃數據準備決定了模型質量的一半。我強烈建議把原始數據整理成結構體或者Excel表格包含以下關鍵字段節點數據節點編號、有功負荷、無功負荷、電壓基準值。已有線路數據起始節點、終止節點、電阻、電抗、最大載流量、是否已投運。候選線路數據跟已有線路字段相同另外加一個“單位建設成本”字段。變電站/電源點數據電壓幅值、短路容量如果做短路電流校核時要用。候選線路怎么生成是個很講究的活。最粗糙的辦法是把所有“節點對”都作為候選但這會導致整數變量爆炸。一個實用的做法是根據地理坐標找出相鄰節點之間的可行走廊然后結合已有線路走向補上“使網絡形成環網”的關鍵聯絡線。比如在一個33節點配電網里如果已有線路是輻射狀那么候選線路常見的是那些能把末端饋線連接起來、形成備用通道的線路。故障場景集的生成也有講究。嚴格意義上的N-1要把所有線路逐一斷開但配電網里有些線路故障后影響很小可以省略。實際處理時我一般按“變電站主變”“主干饋線段”“重要的聯絡線”來過濾把N-1預想事故集控制在20個以內這樣模型規模可控工程上也說得過去。4.3 DistFlow潮流約束和二階錐約束的代碼表達Yalmip建模的好處是幾乎可以直接把數學公式抄成代碼。下面這段是構建正常運行工況下DistFlow約束的核心代碼我用注釋解釋每一條語句的含義function F add_distflow_constraints(F, V2, I2, P, Q, bus, branch) % F: 已有的約束集合 % V2: 節點電壓平方變量 % I2: 支路電流平方變量 % P, Q: 支路有功和無功變量有向 % bus: 節點數據 % branch: 支路數據 nB size(bus, 1); % 節點數 nL size(branch, 1); % 支路數 % 電源點電壓固定例如0號節點為平衡節點 F [F, V2(bus.slack) 1.0^2]; % 對每條支路寫出DistFlow方程 for k 1:nL i branch.from(k); % 首端節點 j branch.to(k); % 末端節點 r branch.r(k); x branch.x(k); % 支路末端有功和無功平衡 F [F, P(j) sum(P_all_out_of_j) r * I2(k) bus.Pload(j)]; F [F, Q(j) sum(Q_all_out_of_j) x * I2(k) bus.Qload(j)]; % 電壓降落方程 F [F, V2(j) V2(i) - 2*(r*P(k) x*Q(k)) (r^2 x^2) * I2(k)]; % 二階錐約束I2 (P^2 Q^2) / V2(i) F [F, [I2(k), P(k), Q(k), V2(i)] ... : cone([2*P(k); 2*Q(k); V2(i)-I2(k)], V2(i)I2(k))]; end % 節點電壓上下限 F [F, para.Vmin^2 V2 para.Vmax^2]; end上面代碼里我用了一個簡寫P_all_out_of_j真實程序中要把它和節點關聯起來一般先建一個“節點-出線”的映射關系再用sum做聚合。Yalmip的cone命令會自動把線性二階錐表達式轉成規劃求解器能識別的格式如果讀者習慣用Gurobi原生接口也可以手動寫二階錐表達式但Yalmip會更直觀。這里尤其要注意對于“有候選線路但沒有建設”的支路支路功率必須強制為0否則會發生“沒建的線還跑電流”的囧事。做法是對每條候選支路引入大M約束F [F, -M*x(k) P(k) M*x(k)]; F [F, -M*x(k) Q(k) M*x(k)]; F [F, I2(k) I_max(k)^2 * x(k)];M的取值不需要太大取線路容量上限的幾倍即可。M太大會讓松弛后的數值穩定性變差求解器容易報數值警告這是我在實踐中踩過的一個坑。4.4 N-1故障場景的循環建模與求解配置N-1工況的建模思路就是對每個故障場景復制一組潮流變量和約束。代碼結構大概是這樣的for s 1:nFault % 故障線路集合 if s 1 faultLines []; % 場景0正常運行工況 scenarioName normal; else faultLines faultSet(s-1,:); % 斷開的線路編號 scenarioName [N1_, num2str(s)]; end % 為該場景創建獨立的電壓、電流、功率變量 V2_s{s} sdpvar(nB, 1, full); I2_s{s} sdpvar(nL, 1, full); P_s{s} sdpvar(nL, 1, full); Q_s{s} sdpvar(nL, 1, full); % 構建該場景的DistFlow約束 F [F, add_distflow_constraints(F, V2_s{s}, I2_s{s}, P_s{s}, Q_s{s}, bus, branch, faultLines)]; % 故障線路的開關狀態約束斷開的線路功率為0 for k 1:length(faultLines) F [F, P_s{s}(faultLines(k)) 0]; F [F, Q_s{s}(faultLines(k)) 0]; F [F, I2_s{s}(faultLines(k)) 0]; end % 該場景下候選線路的建設狀態仍然由全局變量x決定 for k 1:nCandidate F [F, P_s{s}(candidateIdx(k)) M * x(k)]; end end這段偽代碼只是整體框架實際寫的時候還要處理“故障線路對應已有線路還是候選線路”的區別。如果是已有線路故障它直接斷開如果是候選線路故障但它本來就沒建那這個故障場景實際應該跳過因為該線路不在系統中運行。一個更精致的做法是把網絡中的支路分成兩類——必建支路和選建支路。只有必建支路才進故障集選建支路不做N-1校驗。這種沿用工程慣例的做法能讓模型規模下降不少。最后求解配置我一般在sdpsettings里選Gurobi打開數值清洗功能設置MIPGap為0.01%然后開始求解。如果模型規模很大建議給解設置一個時間上限比如600秒先拿到一個可行解再做后處理分析不要干等。5. 算例分析IEEE 33節點系統的N-1擴展規劃全過程5.1 算例設置從基礎網架到候選方案生成算例我選自經典的IEEE 33節點配電網原始系統是輻射狀節點0是變電站母線其余32個節點是負荷節點。為了演示擴展規劃我在原始網上做了兩處改造一是把原始的輻射狀網絡當作“現狀電網”但設置了6條候選聯絡走廊這些走廊可以把末端節點連接起來在N-1故障時提供轉供路徑二是假設未來負荷增長20%部分線路在原方案下會過載。候選線路具體是哪幾條我這里列一下候選線路編號起始節點終止節點建設成本萬元/km載流量AC182145400C291545400C3122240300C4183350400C5252940300C612840300故障場景集選擇了主干線上的10條關鍵線段模擬“任一主干段斷開后系統是不是還能通過聯絡通道轉帶負荷”。5.2 規劃結果建了哪幾條線效果如何用上述模型調用Gurobi求解得到的最優方案是建設C1、C3、C4三條線路總建設投資等年值約為86萬元/年。對比不建設任何新線路的場景這個方案把正常工況下的系統網損從245kW降到了176kW年網損費用減少約12萬元。更關鍵的變化發生在N-1校驗環節。不建任何新線路時我對故障集進行掃描發現至少有5個故障場景會導致部分節點電壓低于0.90p.u.或者部分線路電流超過載流量。而建設C1、C3、C4之后同樣的故障集掃描所有場景都能成功轉供最嚴重的電壓降落也控制在0.91p.u.以上滿足N-1工況下的電壓要求。這組結果直觀地說明了擴展規劃的價值新線路不是簡單地“多鋪幾回線”而是通過優化配置聯絡走廊讓整個網絡具備了應對單一故障的自愈能力。C2和C5雖然也能改善網損但它們對N-1轉供的作用不如C1、C3、C4明顯所以最優解里沒有它們。5.3 探索性分析候選線路數量如何影響求解時間我在同一套算例上做了個簡單的敏感性分析候選線路從6條逐步增加到18條觀察模型求解時間的增長。結論是當候選線路在12條以內時Gurobi通常在30秒內就能找到最優解候選線路增加到18條后求解時間跳到了近300秒而且最優性間隙在10分鐘計算時限內只能收斂到0.5%左右。這告訴我們兩個教訓第一規劃模型不是候選線路越多越好實際工程中要結合廊道條件和電網結構篩選出真正有潛力的候選走廊第二如果候選線路特別多一定要想辦法做場景削減或采用Benders分解等高級求解框架。如果讀者后續要研究更大規模的網絡建議從“網架結構約簡”和“故障場景聚類”這兩個方向入手。6. 常見問題與實操避坑記錄6.1 潮流不收斂大部分時候是初始數據的問題很多同學跑計劃模型時遇到“infeasible problem”第一反應是改求解器參數。我調試過幾十次N-1規劃模型可以負責任地說絕大多數不可行問題出在數據一致性上。最典型的幾個坑一是節點電壓初始值給得太離譜比如把平衡節點電壓設成1.1而其他節點電壓下限是0.93這樣松弛后的二階錐約束看起來可行實際潮流卻沒法滿足二是負荷數據單位不統一有功用的MW無功用的Mvar但線路阻抗用的歐姆沒有歸算到統一標幺值三是故障場景里把一個必建線路當成候選線路斷開結果網絡直接劈成孤島。排查方法也很簡單先用一個不含整數變量的純潮流模型測試把所有候選線路全部等價位“閉合”看模型能不能收斂能收斂再一步步加入整數變量和N-1故障場景。用這種“最小復現法”逐層縮小問題范圍比我瞎試求解器參數快得多。6.2 N-1校驗總是失敗可能是“轉供路徑”根本沒建起來規劃方案在正常工況下很美一進N-1場景就崩這種現象我見得太多了。常見原因是對“故障后網絡”的連通性約束缺失。比如候選線路只建了C1但C1只在某個特定故障場景里能轉供其他故障場景中轉供通道斷了N-1自然失敗。一個隱蔽的坑是在N-1場景中某個負荷節點可能既不在主網的供電路徑上也沒有任何備用路徑這時潮流方程依然“有解”——解是那個節點電壓等于0功耗全部不滿足。這種數學上可行、物理上荒謬的結果是因為模型缺少了“每個負荷節點都必須被某個電源點供電”的連通性約束。解決辦法是在模型里加一個“虛擬功率注入”變量或者對每個節點加一個“必須有父支路”的約束。用虛擬潮流法構建輻射狀約束時這個連通性一般能順帶保證但如果只復制DistFlow方程而忘了輻射狀約束N-1結果就會非常不可靠。6.3 求解時間太長先別急著加硬件試試場景削減我在N-1擴展規劃里遇到過最痛苦的一次求解是候選線路22條、故障場景60個Gurobi跑了半個多小時才收斂到2%的最優性間隙。后來我做了三件事時間立刻降到了3分鐘以內。第一做故障場景聚類。把故障后系統響應類似的線路合并成一個代表場景。比如同一條母線下的好幾段饋線故障后的轉供路徑幾乎一樣完全可以合并。第二削減候選方案。用一次“不考慮N-1”的快速規劃找出有價值的候選線路把收益極低的走廊從候選集中刪掉縮小整數變量搜索空間。第三給求解器提供一個初始可行解。先用啟發式方法生成一個相對好的建設方案再用Yalmip的assign函數把它賦值給整數變量這樣Gurobi可以沿著這個解快速改進而不是從零開始分支剪枝。6.4 關于二階錐松弛緊度需要留個心眼MISOCP解出來之后我總會做一次“松弛緊度驗證”把最優建設方案固定下來跑一個完整的交流潮流程序比如用Matpower或者Pandapower對比節點電壓和支路電流看看二階錐松弛的結果和交直流潮流結果差多少。如果兩者偏差在千分之幾以內那說明松弛是緊的結果可信如果偏差明顯偏大說明模型的目標函數或者約束設置可能缺少了某個能“壓緊”松弛的項。出現不緊的情況常見原因是目標函數里網損成本占比太小或者約束里沒有對電流下限做限制。這種時候我通常會在目標函數里顯式加入一個極小權重的網損項或者在二階錐約束處增加一個很小的懲罰系數強迫松弛自然緊化。這個技巧在論文復現時特別有用大家可以記一下。7. 一些個人體會做配電網N-1擴展規劃這一路下來我最大的感受是這個方向真正難的不是數學推導而是怎么把一個工程問題和一堆約束、變量、場景對應起來。很多人在論文里看到“N-1安全約束”只是簡單一句話落到代碼里卻要處理幾十個故障場景的變量復制和約束耦合稍不留神就漏掉一個連通性約束結果算出來的方案根本不滿足安全要求。如果你打算自己寫一套類似的Matlab程序我建議從一個小網絡開始比如33節點系統就夠了先把正常運行工況下的擴展規劃跑通再逐步加入N-1場景。每加一個故障場景就手動檢查一次結果是否合理。這套流程看著慢但遠比一口氣把大模型堆起來再去debug要省時間。最后再分享一個小技巧規劃結果的展示比結果本身更重要。別只丟一個“建設哪些線路”的表格把正常工況和N-1工況下的關鍵節點電壓曲線、支路負載率對比圖畫出來一眼就能看出規劃方案到底好在哪。寫得直觀評審和導師都會對你高看一眼。