集群劃分策略)
前陣子朋友拿來一個樓宇配電網(wǎng)的分區(qū)需求區(qū)域內(nèi)十幾棟樓的屋頂鋪滿了光伏儲能建設進度參差不齊希望把網(wǎng)絡劃分成幾個相對獨立的集群讓每個集群盡量內(nèi)部自洽減少跨區(qū)功率流動和倒送。他最初只看拓撲距離和功率平衡結果劃分結果里出現(xiàn)了“光伏過剩區(qū)”和“純晚間負荷區(qū)”之間頻繁功率倒送的情況邊界附近一棟商業(yè)樓的兩個入戶節(jié)點還被切到了不同集群后續(xù)做統(tǒng)一的需求響應非常別扭。后來我們把樓宇空間布局信息樓宇類型、空間坐標、負荷曲線形態(tài)、源荷匹配潛力作為顯式約束加入劃分模型再配上一套兼顧譜聚類和遺傳算法的Matlab實現(xiàn)分區(qū)效果立刻上了一個臺階。這篇博文就圍繞“考慮樓宇空間布局的電力系統(tǒng)集群規(guī)劃策略”展開不藏私地把數(shù)學模型、Matlab代碼實現(xiàn)、參數(shù)整定方法和調(diào)試中踩過的坑都整理出來。先說明一下這里說的集群劃分屬于電力系統(tǒng)網(wǎng)絡分區(qū)和計算機集群是兩碼事它主要面向配電網(wǎng)規(guī)劃、微電網(wǎng)群劃分、分布式資源聚合運行這三類典型場景。讀這篇內(nèi)容的朋友不管你是做規(guī)劃研究的、寫論文的還是實際項目中需要落地分區(qū)方案的工程師都可以直接參考甚至復現(xiàn)這套實現(xiàn)。1. 整體設計思路為什么集群劃分要“看樓”而不能只“看線”1.1 集群劃分的本質集群劃分的本質是把一個連續(xù)大網(wǎng)映射成若干個相對自治的“子區(qū)域”。在電力系統(tǒng)語境下每個區(qū)域就是一個集群集群內(nèi)部節(jié)點通過中低壓線路相連集群之間只在少數(shù)聯(lián)絡點交換功率。為什么要做這件事原因不外乎三點第一全網(wǎng)統(tǒng)一優(yōu)化在大規(guī)模分布式電源接入后計算代價急劇上升分層分區(qū)可以顯著降低求解規(guī)模第二分區(qū)之后每個集群可以獨立進行調(diào)壓、削峰填谷、故障隔離有利于提升供電可靠性第三面向市場化交易集群作為基本單元參與優(yōu)化調(diào)度權責邊界更清晰。傳統(tǒng)做法里最常用的就是譜聚類和模塊度優(yōu)化。譜聚類的思路是構造一個反映節(jié)點間關系的矩陣然后對矩陣做特征分解借助低維特征空間里的距離完成分類模塊度優(yōu)化則是把“社區(qū)發(fā)現(xiàn)”的思想從社交網(wǎng)絡搬進電網(wǎng)讓每個集群內(nèi)部連接盡量緊密、集群間連接盡量稀疏。這兩種方法在輸電網(wǎng)分區(qū)中已經(jīng)相當成熟可一旦落到有大量樓宇客戶端的配電網(wǎng)里單一依賴拓撲結構就會失效。原因在于配電網(wǎng)的分區(qū)對象不只是變電站節(jié)點和饋線段更核心的是成千上萬的樓宇負荷它們的行為規(guī)律、用能節(jié)奏、空間分布都直接影響集群的自治效果。1.2 樓宇空間布局為什么是隱藏約束先想一個問題同一片區(qū)域內(nèi)全是辦公大樓和全是居民小區(qū)日負荷曲線差異有多大辦公類樓宇白天工作時段用電強度高午休和夜間驟降住宅類樓宇傍晚到夜間是峰值白天相對平穩(wěn)商業(yè)類樓宇則幾乎全天維持一定負荷周末和節(jié)假日還會出現(xiàn)明顯波動。如果把這些類型樓宇劃分到同一個集群就有很強的時段互補性辦公樓的午間屋頂光伏富余出力可以就近供給商業(yè)樓空調(diào)和照明負荷住宅樓的晚間用電高峰則可以用商業(yè)區(qū)儲能來調(diào)劑。這個“合成負荷”的平穩(wěn)度直接決定集群對外部電網(wǎng)的依賴程度。空間布局的作用不只是體現(xiàn)在負荷曲線形態(tài)上。樓宇的物理坐標決定了配電網(wǎng)中的電氣距離也直接關聯(lián)到屋頂光伏、樓宇配電室、充電樁、蓄冷蓄熱裝置的空間歸屬。光伏在集群內(nèi)能不能被充分消納儲能能不能覆蓋同一批重要負荷都受空間位置的硬約束。如果劃集群的時候忽略了這些就很容易出現(xiàn)“電氣拓撲上相鄰、行政歸屬上分離、能量互動上困難”的尷尬局面?;谶@個認知我在方案里做了幾個關鍵選擇把樓宇作為基本節(jié)點單元進行分組將樓宇類型、空間坐標、負荷曲線相關性、源荷匹配潛力轉化為量化指標在傳統(tǒng)目標函數(shù)中增加空間布局相關信息。后續(xù)章節(jié)就是沿著這條線展開的。2. 指標體系與數(shù)學模型2.1 三類核心指標在構建模型前需要先把“好集群”翻譯成可計算的目標函數(shù)。我總結下來評判一個集群劃分方案好不好主要看三類指標。第一類是拓撲電氣距離。節(jié)點之間線路阻抗越小、線路越短通常電氣耦合越強。常用的電氣距離定義是把支路阻抗按標幺值折算成等效距離也可以用潮流計算得到的電壓靈敏度矩陣來定義。與實際經(jīng)驗相關的一個細節(jié)是樓宇之間地理上可能相隔很遠但電氣上卻可能通過聯(lián)絡開關很近這種情況下需要區(qū)別對待該聚的聚該散的散不能單純按地圖上的直線距離套。第二類是功率自平衡度也叫源荷匹配度。集群內(nèi)部允許光伏、儲能和各類負荷電量大致平衡盡量減少外部功率交換。這個指標可以用集群內(nèi)總可發(fā)功率與峰值負荷之比來計算也可以用日凈交換功率曲線的方差來度量。自平衡度越高集群對電網(wǎng)的沖擊越小運行越靈活。我實測下來凈功率方差比簡單容量比更能暴露早晚高峰的缺口問題所以更推薦用它做主指標。第三類是樓宇源荷互補度。這是這次特別加入的刻畫集群內(nèi)不同樓宇負荷曲線之間的相關性。把不同類型樓宇的日負荷曲線歸一化后兩兩計算Pearson相關系數(shù)同類樓宇相關性偏高異類樓宇往往呈現(xiàn)互補。集群的互補度定義為內(nèi)部樓宇兩兩相關系數(shù)的加權平均數(shù)值越低說明互補性越強。這三類指標不能單獨使用。只優(yōu)化電氣距離可能劃出一個自平衡極差的集群只優(yōu)化自平衡度又可能把空間上完全分散的幾個樓宇硬拉到一個集群毫無地理意義。2.2 綜合目標函數(shù)與約束假設樓宇節(jié)點總數(shù)為N目標聚類數(shù)為K。設x_ij為0-1變量表示節(jié)點i是否劃分到集群j。定義電氣距離矩陣D[d_ij]其中d_ij用節(jié)點間最短等效阻抗路徑來表示集群凈功率方差用var(P_net_j)表示樓宇互補指標建立在節(jié)點負荷曲線的Pearson矩陣C上。我采用的綜合目標函數(shù)形式如下實際項目中會根據(jù)數(shù)據(jù)特性微調(diào)min F α · Σ_j Σ_{i,l∈V_j} d_il β · Σ_j var(P_net_j) γ · Σ_j (樓宇負荷平均相關度)_j約束條件主要有四個。第一每個節(jié)點必須且只能屬于一個集群第二每個集群至少包含指定數(shù)量的樓宇防止出現(xiàn)單點孤島第三集群內(nèi)部任意兩點之間必須存在至少一條連通的電氣路徑這個約束在節(jié)點歸屬重排后尤其容易被遺漏第四集群內(nèi)總峰值負荷不超過饋線容量留出15%左右的裕度??吹侥繕撕瘮?shù)可能有人會問α、β、γ三個權重怎么取取不好結果會偏差很大。我認為沒有通解但有一個實用辦法先用熵權法根據(jù)數(shù)據(jù)本身的信息量給三個指標定初值再結合規(guī)劃者偏好微調(diào)。數(shù)據(jù)波動越大的指標往往在區(qū)分方案上貢獻越大熵權法會自然賦予它更高權重。需要強調(diào)的是無論權重怎么調(diào)劃出的集群必須能落到現(xiàn)實的開關位置和供電路徑上否則規(guī)劃只能停留在數(shù)學層面沒有工程意義。2.3 把樓宇空間布局映射到權重矩陣這一段是處理空間信息的核心。假設樓宇i和樓宇j的物理坐標分別為(x_i, y_i)和(x_j, y_j)定義一個空間鄰近度s_ij exp(-d_geo_ij2 / (2σ2))d_geo_ij是地理距離σ是衰減半徑。這個公式在聚類里很常見它讓空間距離近的樓宇獲得更大的耦合權重。再考慮負荷曲線相關性定義c_ij 1 - |ρ_ij|ρ_ij為兩棟樓宇日負荷曲線的Pearson相關系數(shù)c_ij越大說明互補性越強。綜合權重矩陣W的每個元素可以寫成W_ij λ1 · z_ij λ2 · s_ij λ3 · c_ij其中z_ij處理拓撲電氣距離s_ij處理空間鄰近度c_ij處理源荷互補度。我通常先取λ10.4、λ20.3、λ30.3再根據(jù)區(qū)域特點微調(diào)。把W_ij作為鄰接矩陣喂給譜聚類時它已經(jīng)不再是單純的“電網(wǎng)拓撲圖”而是一張融合了電氣耦合、空間地理與負荷行為特性的混合網(wǎng)絡圖。這也是整個策略區(qū)別于傳統(tǒng)分區(qū)方案最核心的地方。有了這張權重矩陣后續(xù)無論用譜聚類還是啟發(fā)式算法劃分出來的集群都天然帶有空間規(guī)劃語義。3. Matlab代碼實現(xiàn)與核心細節(jié)3.1 數(shù)據(jù)組織和輸入格式先看輸入。因為要同時處理拓撲、坐標和負荷曲線我建議用一個結構體統(tǒng)一管理避免變量滿天飛。基本字段包括節(jié)點編號、節(jié)點坐標、節(jié)點類型樓宇類型或聯(lián)絡節(jié)點、支路起點/終點/阻抗、負荷曲線矩陣每行是某節(jié)點在全天的采樣功率列數(shù)取96或24都行。在代碼里常用的數(shù)據(jù)組織方式如下case_data.N 38; % 節(jié)點總數(shù) case_data.coord coord; % N×2 坐標矩陣 case_data.type type; % N×1 節(jié)點類型標記 case_data.branch branch; % E×3 支路矩陣 [from,to,impedance] case_data.load_curve load_curve; % N×24 歸一化負荷曲線這個結構的好處是無論后面算電氣距離、算空間鄰近度還是算負荷相關性都能直接從同一個標準化數(shù)據(jù)源讀取不容易對不上號。實際調(diào)試中我最怕的是拓撲支路矩陣和坐標數(shù)據(jù)不是同一套編號所以強烈建議在數(shù)據(jù)加載完成后先畫一張拓撲圖做校驗確認編號與坐標能夠對齊。這一步雖然啰嗦但能省掉后面一大半排查時間。3.2 鄰接矩陣與權重矩陣構建接下來把第2.3節(jié)中的物理量轉成矩陣。首先是電氣距離。如果沒有現(xiàn)成的潮流軟件輸出可以先把支路阻抗轉成節(jié)點間距離矩陣再用Dijkstra或Floyd算法求出最短等效阻抗路徑。N不超過一兩百個時Floyd算法簡單直接性能完全夠用。Z inf(N); for e 1:size(branch,1) Z(branch(e,1), branch(e,2)) imag(branch(e,3)); Z(branch(e,2), branch(e,1)) Z(branch(e,1), branch(e,2)); end Z_d floyd(Z);需要注意這一步用的是支路電抗的標幺值。我之前一版代碼只用了線路長度結果電氣距離和地理距離幾乎重合空間布局信息被稀釋掉后來把阻抗模作為基礎量效果才穩(wěn)定。然后構建空間鄰近度和樓宇互補度矩陣。空間鄰近度按s_ij公式計算互補度矩陣先用corrcoef計算每兩棟樓宇負荷曲線的相關系數(shù)再取1-|ρ|。最終權重矩陣由三部分線性疊加并歸一化歸一到0到1之間避免量綱差異把聚類結果帶偏。尤其是負荷曲線數(shù)值和坐標數(shù)值不在同一個尺度如果不歸一化空間項會被完全淹沒。3.3 譜聚類與遺傳算法兩段式求解拿到權重矩陣W之后直接用譜聚類?;静襟E是構造度矩陣Dg計算歸一化拉普拉斯矩陣Lsym I - Dg^(-1/2) · W · Dg^(-1/2)對Lsym做特征分解取前K小的特征值對應的特征向量拼成N×K矩陣然后按行做kmeans聚類。這個過程大概二十行代碼能寫完。但譜聚類有個老問題它對K的設定和權重矩陣的尺度比較敏感直接出來的簇可能大小特別不均衡。我的處理是兩段式求解——先用譜聚類給出一組初始劃分再用遺傳算法在譜聚類初值基礎上優(yōu)化目標函數(shù)F。遺傳算法的編碼方式非常直觀染色體長度等于節(jié)點數(shù)每個基因位是1到K之間的整數(shù)代表該節(jié)點所屬集群。function fitness evalF(chrom, data, W, alpha, beta, gamma) cluster_id chrom; F computeF(cluster_id, data, W, alpha, beta, gamma); conn_penalty connectivity_penalty(cluster_id, data); fitness F 1000 * conn_penalty; % 懲罰不可行解 end連通性判定用深度優(yōu)先遍歷逐個確認每個集群內(nèi)部在圖上是連通的。不可行的染色體雖然在遺傳操作中可能出現(xiàn)但只要懲罰系數(shù)足夠大種群很快會淘汰這些解。這一招看起來簡單卻幫我避免了很多次“目標值很好看、現(xiàn)實里無法執(zhí)行”的劃分結果。遺傳算法本身參數(shù)不用設得很激進種群大小60、迭代代數(shù)100左右基本夠用。3.4 可視化輸出與結果落盤計算完成后規(guī)劃結果不能只是一組編號還得有可信的可視化。我習慣畫兩類圖第一類是節(jié)點分布圖把所有樓宇按坐標鋪開用不同顏色標注集群歸屬同時畫出支路線條第二類是集群內(nèi)凈功率曲線圖把每個集群一天24小時的凈交換功率畫成折線直觀看哪些時段存在倒送或缺口??梢暬粌H用來匯報也用來自檢。有一次程序跑出的結果里出現(xiàn)一個集群的凈功率曲線毛刺特別多一開始以為是算法問題后來把樓宇坐標畫出來才發(fā)現(xiàn)是把同一棟建筑的不同入戶節(jié)點分到了兩個集群屬于輸入數(shù)據(jù)里的編號錯誤。類似這種問題靠數(shù)字指標很難發(fā)現(xiàn)畫圖一眼就能看出來。所以我的建議是可視化代碼一定要寫而且要放在主流程里不是可選項。4. 仿真案例一個35節(jié)點樓宇群的劃分實踐4.1 算例設置為了說明效果我構造了一個完全虛構但足夠典型的算例一個包含35個節(jié)點的區(qū)域配電網(wǎng)其中28個節(jié)點對應樓宇其余節(jié)點為聯(lián)絡節(jié)點和分布式電源接入點。樓宇類型包括辦公樓10棟、住宅樓12棟、商業(yè)樓6棟。所有樓宇屋頂加載光伏容量部分樓宇配置儲能日負荷曲線按典型建筑類型的規(guī)律生成采樣點數(shù)取24。聚類目標數(shù)K設為4。權重系數(shù)采用熵權法治定初始值后稍作調(diào)整α0.35、β0.4、γ0.25。為了體現(xiàn)空間布局的價值我做了一組對照實驗對照組只使用電氣距離和功率平衡兩類指標不引入樓宇類型與坐標相關信息實驗組完整引入空間鄰近度和樓宇互補度。其他條件保持一致遺傳算法隨機種子也固定確保差異只來自權重矩陣的構造方式。4.2 指標對比結果運行結束后的差異非常直觀。對照組的四個集群中有兩個集群的凈功率方差明顯偏大光伏大發(fā)時段集群內(nèi)存在嚴重倒送實驗組的四個集群凈功率曲線相對平緩午間辦公樓光伏出力可以較好地匹配商業(yè)樓負荷晚間則依靠住宅集群需求低谷與儲能錯峰。下面這張表記錄了我比較關注的幾個指標。指標對照組不考慮空間布局實驗組考慮空間布局集群平均凈功率方差0.310.12集群間最大交換功率占比22.6%11.8%集群內(nèi)樓宇平均相關系數(shù)0.420.19最小集群包含樓宇數(shù)46拓撲連通性滿足度100%100%這幾行數(shù)字的工程含義是說考慮空間布局后集群內(nèi)部能量自洽能力大幅提高集群之間交換的功率峰值明顯下降整體運行方式更接近“分區(qū)自治、余缺互濟”的目標。集群間交換功率占比降低接近一半意味著外部聯(lián)絡線的輸送壓力和損耗都相應減少后續(xù)做不同集群間的協(xié)調(diào)調(diào)度時約束也寬松很多。4.3 為什么會出現(xiàn)這種變化從結果往回看原因其實不復雜。對照組的譜聚類僅根據(jù)電氣距離就把附近的辦公樓和住宅樓分在了一個集群里初看很合理但忽略了辦公樓白天集中用電、住宅樓傍晚集中用電兩條曲線疊加后導致集群凈負荷波動巨大。實驗組由于在權重矩陣里加入了負荷曲線相關性約束算法會更傾向于把互補的樓宇類型湊到一起光伏、儲能與各類負荷在空間上形成更好的搭配。還有一個細節(jié)值得關注考慮空間布局之后劃分出的集群邊界更符合實際開關站的管轄范圍和樓宇地理組團后續(xù)接入站域控制或實施需求響應時歸屬關系更清晰。這一點在純數(shù)學指標上看不出來卻是真正落實到工程時最重要的價值。換句話說空間布局讓集群劃分從“網(wǎng)絡拓撲的聚類”變成了“物理世界的分區(qū)”每個集群都對應一組看得見摸得著的樓宇、設備和管線。5. 常見問題與調(diào)試心得5.1 K值到底選幾個聚類數(shù)K是參數(shù)中影響最大但也最容易拍腦袋定的一個。我的建議是分兩步先用肘部法則跑一遍不同K下的目標函數(shù)曲線看曲線斜率明顯變緩的位置再核對這個K對應的集群規(guī)模是否能落在變電站饋線或開關站的合理管轄范圍內(nèi)。K過小會導致集群太大自治能力不足K過大會造成大量孤島簇管理成本上升。實測下來K取4到7之間通常是比較合適的區(qū)間具體還要結合區(qū)域內(nèi)變電站數(shù)量來定。5.2 連通性約束總是被破壞這是劃分算法里最容易被忽視的硬約束。遺傳算法的交叉和變異操作很可能讓某個集群變成幾個互不相連的碎片。我初期吃過虧沒有加連通性懲罰結果優(yōu)化結束時目標值很漂亮集群地圖卻完全不能看。后來加了一個深度優(yōu)先遍歷的連通性檢查對不連通的個體施加高懲罰效果立竿見影。更精細一點可以做連通性修復把碎片節(jié)點按最近可達路徑重新分配但項目初期用懲罰法就夠穩(wěn)定。5.3 譜聚類結果不穩(wěn)定怎么辦譜聚類對歸一化拉普拉斯矩陣的構建方式比較敏感同一個數(shù)據(jù)集換一種歸一化方法可能得到不同分區(qū)。要穩(wěn)定復現(xiàn)首先固定隨機數(shù)種子其次對權重矩陣做標準歸一化第三如果使用kmeans作為譜聚類最后一步建議重復多次取最優(yōu)解。還有個小技巧把特征向量做白化處理能明顯提升聚類穩(wěn)定性。如果跑了三次得到三個差別很大的結果不要急著調(diào)參數(shù)先檢查輸入權重矩陣是不是存在大量極端值。5.4 權重系數(shù)調(diào)不出期望效果α、β、γ三個權重比例直接決定了目標函數(shù)傾向。如果只希望集群間交換功率盡量小就把β加大如果更注重集群形狀緊湊、便于設備管理那就提高α。不要期望一次參數(shù)搜索找到全局最優(yōu)實際工程里參數(shù)本來就是用來反映規(guī)劃偏好的先跑三到五組對照從中選一組最符合實際運行需求的方案比盲目追求“最優(yōu)參數(shù)”更實用。我在項目里經(jīng)常用網(wǎng)格搜索加人工判讀每次大概跑十組左右就能找到一條比較合理的分區(qū)邊界。5.5 輸入數(shù)據(jù)口徑不統(tǒng)一建筑負荷曲線往往來自用能監(jiān)測平臺光伏出力來自氣象數(shù)據(jù)兩者采樣粒度和時間基準可能不一致。我在做數(shù)據(jù)接入時遇到過凌晨采樣點錯位的情況導致相關系數(shù)計算異常。一定要在進入算法前把時間序列對齊統(tǒng)一插值到相同的時間戳并剔除異常點。這個步驟看起來枯燥卻決定了整個模型的地基是否可靠。數(shù)據(jù)質量不過關后面算法再精巧也是白搭。在這套方案的多次調(diào)試中我體會最深的一點是電力系統(tǒng)的集群劃分從來不是純粹的數(shù)學游戲。譜聚類和遺傳算法只是工具真正決定分區(qū)效果的是你是否理解了數(shù)據(jù)背后的物理含義——樓宇類型決定負荷走勢空間坐標決定能量流動的邊界光伏和儲能的位置決定自平衡的潛力。把這些問題想清楚哪怕只用最簡單的算法框架也能得到貼合實際的結果。如果你最近正好在做類似的分區(qū)規(guī)劃建議先別急著寫代碼花半天時間把你的節(jié)點、樓宇、支路數(shù)據(jù)整理干凈再借這套思路跑一版對比相信你會看到明顯差異。