劃在主動(dòng)配電網(wǎng)動(dòng)態(tài)重構(gòu)中的應(yīng)用與實(shí)現(xiàn))
簡(jiǎn)介在電力系統(tǒng)優(yōu)化中凸優(yōu)化技術(shù)正成為解決復(fù)雜調(diào)度問(wèn)題的核心工具。二階錐規(guī)劃作為一類(lèi)可高效求解的凸優(yōu)化方法能夠?qū)⒎峭沟姆蔷€(xiàn)性潮流方程轉(zhuǎn)化為具有最優(yōu)性保證的數(shù)學(xué)模型在配電網(wǎng)分析中展現(xiàn)出獨(dú)特優(yōu)勢(shì)。主動(dòng)配電網(wǎng)因接入分布式電源和儲(chǔ)能設(shè)備其運(yùn)行狀態(tài)呈現(xiàn)強(qiáng)時(shí)變特性傳統(tǒng)靜態(tài)重構(gòu)難以適應(yīng)負(fù)荷與出力的動(dòng)態(tài)波動(dòng)。動(dòng)態(tài)重構(gòu)通過(guò)多時(shí)段耦合決策在滿(mǎn)足開(kāi)關(guān)動(dòng)作次數(shù)限制的前提下優(yōu)化網(wǎng)絡(luò)拓?fù)鋸亩档途W(wǎng)損并改善電壓質(zhì)量?;诨旌险麛?shù)二階錐規(guī)劃的動(dòng)態(tài)重構(gòu)模型兼?zhèn)淝蠼庑逝c全局最優(yōu)性在IEEE 33節(jié)點(diǎn)等典型算例中已得到充分驗(yàn)證。本文從模型原理、約束轉(zhuǎn)化到工程實(shí)現(xiàn)完整解析該技術(shù)路線(xiàn)的關(guān)鍵細(xì)節(jié)為配電網(wǎng)規(guī)劃與運(yùn)行優(yōu)化提供可落地的參考方案。 拿到這個(gè)項(xiàng)目文件的時(shí)候我第一反應(yīng)是典型的“學(xué)術(shù)包裝型”題目——二階錐規(guī)劃、主動(dòng)配電網(wǎng)、動(dòng)態(tài)重構(gòu)三個(gè)詞單獨(dú)拎出來(lái)都是方向里的高頻熱詞組合在一起更顯得門(mén)檻很高。但把模型和代碼完整跑通、把每一處約束的物理含義理清楚之后我必須承認(rèn)基于二階錐規(guī)劃的主動(dòng)配電網(wǎng)動(dòng)態(tài)重構(gòu)確實(shí)是目前這個(gè)方向里性?xún)r(jià)比最高的技術(shù)路線(xiàn)之一。無(wú)論你是正在做畢業(yè)設(shè)計(jì)、準(zhǔn)備電氣工程相關(guān)的競(jìng)賽還是想給手里那套傳統(tǒng)配電網(wǎng)模型做一次實(shí)質(zhì)性的升級(jí)把二階錐松弛和動(dòng)態(tài)時(shí)段耦合這兩套機(jī)制吃透遠(yuǎn)比盲目套用十種智能優(yōu)化算法管用。這篇博文我就圍繞這個(gè)項(xiàng)目把模型設(shè)計(jì)思路、數(shù)學(xué)推導(dǎo)細(xì)節(jié)、代碼實(shí)現(xiàn)要點(diǎn)、常見(jiàn)坑點(diǎn)一次講透。1. 項(xiàng)目整體設(shè)計(jì)與思路拆解1.1 主動(dòng)配電網(wǎng)動(dòng)態(tài)重構(gòu)到底在解決什么問(wèn)題傳統(tǒng)配電網(wǎng)重構(gòu)指的是在滿(mǎn)足網(wǎng)絡(luò)拓?fù)漭椛錉罴s束和運(yùn)行電壓約束的前提下通過(guò)調(diào)整聯(lián)絡(luò)開(kāi)關(guān)和分段開(kāi)關(guān)的開(kāi)合狀態(tài)改變電流的流通路徑從而降低網(wǎng)絡(luò)損耗、均衡饋線(xiàn)負(fù)載、改善電壓分布。這個(gè)概念從八十年代提出到現(xiàn)在已經(jīng)幾十年了本身不算新鮮。但“主動(dòng)配電網(wǎng)”四個(gè)字會(huì)改變問(wèn)題的性質(zhì)——當(dāng)大量分布式電源、儲(chǔ)能和柔性負(fù)荷接入配電網(wǎng)之后網(wǎng)絡(luò)的運(yùn)行狀態(tài)不再是“單向下沉”的模式而是變成多源雙向潮流、強(qiáng)時(shí)變性的復(fù)雜系統(tǒng)。這時(shí)候如果還沿用傳統(tǒng)的靜態(tài)重構(gòu)思路在某個(gè)固定負(fù)荷斷面下優(yōu)化一次拓?fù)淙缓笠挥镁褪菐讉€(gè)小時(shí)甚至一整天結(jié)果往往是很差的。動(dòng)態(tài)重構(gòu)要解決的就是這個(gè)問(wèn)題負(fù)荷在一天之內(nèi)有波峰波谷光伏出力在中午有高峰、夜間為零這些因素導(dǎo)致最優(yōu)網(wǎng)絡(luò)拓?fù)淦鋵?shí)是隨著時(shí)間變化的。動(dòng)態(tài)重構(gòu)的基本思想是把調(diào)度周期劃分為多個(gè)時(shí)段在保證開(kāi)關(guān)動(dòng)作次數(shù)不能太頻繁的前提下為每一個(gè)時(shí)段或者某幾個(gè)時(shí)段選擇一組最優(yōu)的開(kāi)關(guān)組合使得整個(gè)調(diào)度周期內(nèi)的總運(yùn)行成本主要是網(wǎng)損最小化。這樣做比每個(gè)時(shí)段單獨(dú)優(yōu)化一次要復(fù)雜得多因?yàn)椴煌瑫r(shí)段的拓?fù)錄Q策不是獨(dú)立的它們通過(guò)“開(kāi)關(guān)動(dòng)作次數(shù)約束”耦合在一起。這個(gè)耦合是動(dòng)態(tài)區(qū)別于靜態(tài)的核心也是建模中最容易出問(wèn)題的地方。1.2 為什么偏偏是二階錐規(guī)劃這里必須先把“為什么選二階錐”這個(gè)問(wèn)題回答透因?yàn)楹芏喑鯇W(xué)者對(duì)此完全沒(méi)概念拿到項(xiàng)目代碼就對(duì)著約束一臉茫然。配電網(wǎng)重構(gòu)問(wèn)題本質(zhì)上是一個(gè)“找開(kāi)關(guān)狀態(tài)”的組合優(yōu)化問(wèn)題再加上潮流約束的強(qiáng)非線(xiàn)性其精確數(shù)學(xué)模型屬于混合整數(shù)非線(xiàn)性規(guī)劃。MINLP理論上屬于NP難的范疇求解特別吃力。傳統(tǒng)的求解思路有兩種一種是直接用遺傳算法、粒子群、模擬退火這類(lèi)啟發(fā)式算法去搜優(yōu)點(diǎn)是不需要做模型轉(zhuǎn)化缺點(diǎn)是每次都要反復(fù)算潮流計(jì)算量非常大而且無(wú)法保證收斂到全局最優(yōu)解跑十次可能得到十個(gè)不同的結(jié)果另一種是把問(wèn)題線(xiàn)性化或者近似化比如把潮流方程線(xiàn)性化為DistFlow模型但這樣會(huì)引入誤差在DG滲透率較高的場(chǎng)景下可能直接失真。二階錐規(guī)劃解決這個(gè)問(wèn)題的思路非常巧妙。它保留配電網(wǎng)輻射狀潮流的非線(xiàn)性本質(zhì)但通過(guò)變量替換和凸松弛把原來(lái)非凸的潮流方程轉(zhuǎn)化為一組二階錐約束。二階錐規(guī)劃是凸優(yōu)化的一種可以用現(xiàn)代內(nèi)點(diǎn)法在多項(xiàng)式時(shí)間內(nèi)求解而且商業(yè)求解器對(duì)它的支持已經(jīng)非常成熟可靠。加上開(kāi)關(guān)變量是0-1整數(shù)最終形成的是混合整數(shù)二階錐規(guī)劃也就是MISOCP。這種模型有一個(gè)核心優(yōu)勢(shì)它求解出來(lái)的是帶最優(yōu)性證書(shū)的解也即能夠定量評(píng)估當(dāng)前解和理論最優(yōu)值的間隙。這對(duì)于算法對(duì)比、結(jié)果分析、論文寫(xiě)作都是巨大的加分項(xiàng)。從實(shí)踐角度看MISOCP的求解效率也足夠支撐動(dòng)態(tài)重構(gòu)這種多時(shí)段耦合的大規(guī)模問(wèn)題。IEEE 33節(jié)點(diǎn)系統(tǒng)在24個(gè)時(shí)段下變量規(guī)模達(dá)到幾千個(gè)對(duì)于Gurobi或者CPLEX來(lái)說(shuō)仍然是可以接受的通常幾十秒到幾分鐘就能求出高質(zhì)量解。相比之下如果用MINLP直接求解同樣的實(shí)例跑幾個(gè)小時(shí)都不一定收斂。這一點(diǎn)在實(shí)際項(xiàng)目中體會(huì)極深。1.3 動(dòng)態(tài)重構(gòu)的時(shí)段劃分策略動(dòng)態(tài)重構(gòu)的第一步就是定時(shí)間尺度。最常見(jiàn)的做法是把一天24小時(shí)按小時(shí)切分成24個(gè)時(shí)段每個(gè)時(shí)段內(nèi)假設(shè)負(fù)荷和DG出力恒定用該時(shí)段的平均值代表整個(gè)時(shí)段的運(yùn)行狀態(tài)。這種劃分方式簡(jiǎn)單清晰數(shù)據(jù)也容易獲取。但對(duì)于一些負(fù)荷波動(dòng)劇烈的場(chǎng)景尤其是含有高比例光伏的饋線(xiàn)一個(gè)小時(shí)內(nèi)負(fù)荷從低谷沖到高峰的情況并不少見(jiàn)24時(shí)段劃分可能不夠精細(xì)。有些研究會(huì)把時(shí)間粒度細(xì)化到15分鐘也就是一天96個(gè)時(shí)段這樣模型規(guī)模會(huì)成倍膨脹求解時(shí)間大幅上升。我個(gè)人的經(jīng)驗(yàn)是不要一上來(lái)就追求精細(xì)劃分。先跑24時(shí)段把模型調(diào)通、結(jié)果確認(rèn)無(wú)誤之后再考慮是否需要進(jìn)一步細(xì)分或者采用動(dòng)態(tài)時(shí)段劃分。所謂動(dòng)態(tài)時(shí)段劃分就是先對(duì)負(fù)荷曲線(xiàn)和DG出力曲線(xiàn)做聚類(lèi)分析把運(yùn)行狀態(tài)相似的時(shí)段合并成一個(gè)“典型時(shí)段”比如K-means聚類(lèi)把24小時(shí)聚成6-8個(gè)代表性時(shí)段。這樣做能大幅減少變量數(shù)量和求解時(shí)間而精度損失通常非常有限。這個(gè)技巧在實(shí)際項(xiàng)目中效果明顯尤其是做大規(guī)模配電網(wǎng)的動(dòng)態(tài)重構(gòu)時(shí)可以說(shuō)是提高求解效率的一個(gè)關(guān)鍵手段。2. 核心數(shù)學(xué)模型與二階錐轉(zhuǎn)化細(xì)節(jié)2.1 潮流約束從DistFlow到二階錐松弛配電網(wǎng)通常是輻射狀網(wǎng)絡(luò)針對(duì)這種網(wǎng)絡(luò)結(jié)構(gòu)DistFlow支路潮流方程是最常用的建模工具。對(duì)于支路ij即有功率流向節(jié)點(diǎn)j的支路其潮流方程可以寫(xiě)成如下形式P_ij - r_ij * l_ij sum_{k in N(j)} P_jk P_j_loadQ_ij - x_ij * l_ij sum_{k in N(j)} Q_jk Q_j_loadv_j v_i - 2 * (r_ij * P_ij x_ij * Q_ij) (r_ij^2 x_ij^2) * l_ij這個(gè)方程看起來(lái)簡(jiǎn)單但注意最后一個(gè)式子——它含有P_ij、Q_ij的線(xiàn)性項(xiàng)和l_ij的線(xiàn)性項(xiàng)看起來(lái)是線(xiàn)性的問(wèn)題出在v_j v_i - 2(rP xQ) (r^2x^2)*l但l_ij的定義是l_ij (P_ij^2 Q_ij^2) / v_i。這里的平方項(xiàng)疊加在分母上導(dǎo)致整個(gè)約束變成非凸的。經(jīng)典的處理辦法是引入兩個(gè)新變量v_i |V_i|^2l_ij |I_ij|^2。這樣把潮流方程中的非線(xiàn)性項(xiàng)隱藏到變量定義里原來(lái)的等式約束就變成線(xiàn)性的了。但這里還剩下一個(gè)問(wèn)題l_ij和v_i、P_ij、Q_ij之間的關(guān)系。這個(gè)關(guān)系體現(xiàn)在原始定義里即l_ij * v_i P_ij^2 Q_ij^2。這個(gè)等式是非凸的直接放進(jìn)模型會(huì)導(dǎo)致問(wèn)題變成非凸約束。二階錐松弛的核心操作就是把這個(gè)等式約束松弛為不等式l_ij * v_i P_ij^2 Q_ij^2這個(gè)不等式經(jīng)過(guò)變形可以寫(xiě)成標(biāo)準(zhǔn)的二階錐形式|| [2P_ij, 2Q_ij, l_ij - v_i] ||_2 l_ij v_i這個(gè)式子的幾何含義是把變量(P,Q,l,v)限制在一個(gè)二階錐內(nèi)。由于二階錐是凸集整個(gè)問(wèn)題就變成了凸優(yōu)化問(wèn)題。這個(gè)松弛之所以在實(shí)際中能取得很好的效果是因?yàn)楫?dāng)目標(biāo)函數(shù)是網(wǎng)絡(luò)損耗的嚴(yán)格遞增函數(shù)時(shí)最優(yōu)解通常會(huì)落在錐的邊界上也即松弛是“精確”的——松弛后的最優(yōu)解滿(mǎn)足原始的等式約束不損失精度。實(shí)際項(xiàng)目中我在IEEE 33節(jié)點(diǎn)、IEEE 123節(jié)點(diǎn)上都驗(yàn)證過(guò)松弛間隙通常在1e-6量級(jí)以下完全可以直接用于工程分析。2.2 輻射狀拓?fù)浼s束的三種實(shí)現(xiàn)方案配電網(wǎng)運(yùn)行的基本要求是輻射狀結(jié)構(gòu)也就是網(wǎng)絡(luò)中不能存在環(huán)路且所有負(fù)荷節(jié)點(diǎn)必須保持連通。在重構(gòu)模型中這個(gè)約束是通過(guò)二進(jìn)制開(kāi)關(guān)狀態(tài)變量來(lái)描述的處理起來(lái)比較微妙。第一種方案是“生成樹(shù)約束”思路利用圖論的性質(zhì)對(duì)于一個(gè)n節(jié)點(diǎn)的網(wǎng)絡(luò)如果選擇n-1條支路且所有節(jié)點(diǎn)連通則網(wǎng)絡(luò)必然是樹(shù)狀輻射網(wǎng)。在模型中可以用等式sum(W_ij) n - 1來(lái)約束支路數(shù)但連通性不容易直接表達(dá)需要輔助變量。一個(gè)簡(jiǎn)單實(shí)用、在學(xué)術(shù)界廣泛采用的做法是利用虛擬潮流方程從根節(jié)點(diǎn)變電站節(jié)點(diǎn)注入虛擬功率每個(gè)負(fù)荷節(jié)點(diǎn)消耗單位虛擬功率通過(guò)支路開(kāi)關(guān)狀態(tài)控制虛擬潮流的流動(dòng)從而保證每個(gè)節(jié)點(diǎn)都與根節(jié)點(diǎn)連通且網(wǎng)絡(luò)中不出現(xiàn)環(huán)路。第二種方案是更復(fù)雜一些的“單商品流約束”為每個(gè)節(jié)點(diǎn)引入一個(gè)輔助流變量令其在根節(jié)點(diǎn)產(chǎn)生、在其它節(jié)點(diǎn)消耗確保從根節(jié)點(diǎn)到每個(gè)節(jié)點(diǎn)都存在可行路徑。這個(gè)方案思路清晰但會(huì)增加額外的變量數(shù)量在大型網(wǎng)絡(luò)上計(jì)算開(kāi)銷(xiāo)更高。第三種方案也是我在項(xiàng)目中最終采用的方案是對(duì)每條候選支路引入二進(jìn)制變量W_ij然后添加如下約束從根節(jié)點(diǎn)0到節(jié)點(diǎn)i的虛擬潮流在支路斷開(kāi)時(shí)強(qiáng)制為0在支路閉合時(shí)無(wú)限制同時(shí)每個(gè)非根節(jié)點(diǎn)必須恰好接收到1個(gè)單位的虛擬潮流。一旦節(jié)點(diǎn)接收不到虛擬潮流就說(shuō)明這個(gè)節(jié)點(diǎn)和根節(jié)點(diǎn)之間沒(méi)有連通路徑模型就會(huì)自動(dòng)判定為不可行。配合sum(W) n-1就完整保證了輻射狀結(jié)構(gòu)。這個(gè)方法編程實(shí)現(xiàn)簡(jiǎn)單求解效率也不錯(cuò)推薦優(yōu)先使用。2.3 分布式電源模型與開(kāi)關(guān)動(dòng)作約束主動(dòng)配電網(wǎng)動(dòng)態(tài)重構(gòu)與靜態(tài)重構(gòu)的另一個(gè)顯著差異是要顯式考慮分布式電源。在模型里光伏和風(fēng)機(jī)通常被當(dāng)作可調(diào)度或者不可調(diào)度的功率注入源來(lái)處理。對(duì)于不可調(diào)度的DG比如光伏可以直接把有功出力作為負(fù)的負(fù)荷疊加到節(jié)點(diǎn)注入功率上對(duì)于可調(diào)度的DG比如微型燃?xì)廨啓C(jī)需要增加出力上下限約束和爬坡約束。項(xiàng)目代碼里關(guān)于DG的部分主要采用的是“功率因數(shù)可調(diào)”的簡(jiǎn)化模型也就是允許DG在一定的無(wú)功范圍內(nèi)調(diào)節(jié)其輸出這樣不僅能夠改善電壓分布還能進(jìn)一步降低網(wǎng)損。開(kāi)關(guān)動(dòng)作次數(shù)約束是動(dòng)態(tài)重構(gòu)最核心的約束也是初學(xué)者最容易忽略的地方。如果不加這個(gè)約束求解器會(huì)把每個(gè)時(shí)段都當(dāng)作獨(dú)立的靜態(tài)重構(gòu)來(lái)解最終結(jié)果可能是相鄰時(shí)段之間大量的開(kāi)關(guān)來(lái)回切換這在工程上是完全不可接受的——開(kāi)關(guān)設(shè)備有機(jī)械壽命限制頻繁操作會(huì)嚴(yán)重影響使用壽命和系統(tǒng)可靠性。所以需要增加一個(gè)約束整個(gè)調(diào)度周期內(nèi)所有開(kāi)關(guān)的動(dòng)作次數(shù)總和不超過(guò)預(yù)設(shè)值M同時(shí)同一時(shí)段內(nèi)不同開(kāi)關(guān)的動(dòng)作次數(shù)通常不加限制。這個(gè)約束的數(shù)學(xué)形式是sum_t sum_ij |W_ij,t - W_ij,t-1| M_max絕對(duì)值是非線(xiàn)性的但可以用線(xiàn)性化技巧處理引入兩個(gè)非負(fù)輔助變量分別表示開(kāi)關(guān)從閉合變?yōu)閿嚅_(kāi)和從斷開(kāi)變?yōu)殚]合的次數(shù)然后把絕對(duì)值用這兩個(gè)變量之和替代?;蛘吒?jiǎn)潔的做法是先對(duì)每一對(duì)相鄰時(shí)段增加不等式約束然后用求和形式累計(jì)配合二進(jìn)制變量的性質(zhì)就可以完全線(xiàn)性化。代碼里我用的是第二種方式實(shí)現(xiàn)很干凈求解器也好處理。2.4 目標(biāo)函數(shù)的設(shè)計(jì)網(wǎng)損與動(dòng)作次數(shù)的權(quán)衡目標(biāo)函數(shù)一般由兩部分組成網(wǎng)絡(luò)損耗成本與開(kāi)關(guān)動(dòng)作代價(jià)。網(wǎng)絡(luò)損耗項(xiàng)是主項(xiàng)反映了重構(gòu)的經(jīng)濟(jì)效益表達(dá)式為sum(r_ij * l_ij)乘以電價(jià)和調(diào)度時(shí)長(zhǎng)就可以轉(zhuǎn)換為日運(yùn)行費(fèi)用。開(kāi)關(guān)動(dòng)作代價(jià)項(xiàng)是一個(gè)懲罰項(xiàng)用來(lái)限制開(kāi)關(guān)的頻繁操作其權(quán)重系數(shù)設(shè)置需要小心權(quán)重太小懲罰項(xiàng)形同虛設(shè)求解器仍然會(huì)給出高頻動(dòng)作的解權(quán)重太大則可能為了減少幾次開(kāi)關(guān)動(dòng)作而犧牲大量經(jīng)濟(jì)性導(dǎo)致網(wǎng)損偏高。我在實(shí)驗(yàn)中通常的做法是先不加動(dòng)作懲罰項(xiàng)跑一次靜態(tài)重構(gòu)的下界然后根據(jù)允許的最大動(dòng)作次數(shù)反推權(quán)重使得最終解的動(dòng)作次數(shù)落在給定區(qū)間內(nèi)。這種做法雖然有些trial-and-error的成分但比拍腦袋設(shè)定權(quán)重要靠譜得多。3. 代碼實(shí)現(xiàn)與求解全流程3.1 開(kāi)發(fā)環(huán)境與工具鏈選擇這個(gè)項(xiàng)目的代碼實(shí)現(xiàn)采用MATLAB YALMIP Gurobi這套組合。之所以選擇MATLAB而不是Python一是因?yàn)榕潆娋W(wǎng)領(lǐng)域的很多基礎(chǔ)數(shù)據(jù)和工具箱都基于MATLAB搭建二是因?yàn)閅ALMIP這個(gè)建模工具箱對(duì)MISOCP問(wèn)題的支持非常完備語(yǔ)法直觀(guān)建模效率很高。當(dāng)然如果你更習(xí)慣PythonPyomo或者cvxpy也完全可以實(shí)現(xiàn)同樣的建模只是部分配電網(wǎng)數(shù)據(jù)預(yù)處理需要自己多寫(xiě)一些代碼。求解器方面我用的是Gurobi它對(duì)MISOCP的支持非常優(yōu)秀默認(rèn)的branch-and-cut算法在處理數(shù)千個(gè)二進(jìn)制變量的配電網(wǎng)重構(gòu)問(wèn)題時(shí)表現(xiàn)穩(wěn)定。如果沒(méi)有Gurobi的授權(quán)CPLEX和MOSEK需要配合外部的MIP處理機(jī)制也是可選的方案前者對(duì)整數(shù)二階錐問(wèn)題的支持同樣出色后者優(yōu)勢(shì)在于連續(xù)二階錐問(wèn)題的求解。但要注意的是MOSEK本身不直接支持整數(shù)變量因此如果堅(jiān)持用MOSEK只能通過(guò)Benders分解等方式把整數(shù)變量拆出來(lái)處理這在工程上會(huì)顯著增加代碼復(fù)雜度不如直接用Gurobi或者CPLEX來(lái)得省心。3.2 核心代碼框架與關(guān)鍵片段整個(gè)代碼的結(jié)構(gòu)大致分為四層數(shù)據(jù)準(zhǔn)備層、模型構(gòu)建層、求解與后處理層、結(jié)果可視化層。數(shù)據(jù)準(zhǔn)備層要做的是導(dǎo)入IEEE 33節(jié)點(diǎn)系統(tǒng)的線(xiàn)路參數(shù)、負(fù)荷數(shù)據(jù)和DG出力曲線(xiàn)模型構(gòu)建層是核心包括變量定義、約束添加和目標(biāo)函數(shù)設(shè)定求解層調(diào)用Gurobi的混合整數(shù)求解器可視化層負(fù)責(zé)把開(kāi)關(guān)狀態(tài)、網(wǎng)損曲線(xiàn)、電壓分布等結(jié)果畫(huà)出來(lái)。以IEEE 33節(jié)點(diǎn)系統(tǒng)為例其基準(zhǔn)電壓為12.66千伏基準(zhǔn)功率為10兆伏安系統(tǒng)共有32條分段支路和5條聯(lián)絡(luò)支路總裝機(jī)負(fù)荷約為3715千瓦加2300千乏。在進(jìn)行動(dòng)態(tài)重構(gòu)建模時(shí)這37條支路全部用二進(jìn)制變量表示開(kāi)關(guān)狀態(tài)24個(gè)時(shí)段就是37乘以24共888個(gè)二進(jìn)制變量。加上運(yùn)行變量總的優(yōu)化變量規(guī)模在幾千的量級(jí)。變量定義的核心代碼大致如下% 定義時(shí)段數(shù)和最大開(kāi)關(guān)動(dòng)作次數(shù) T 24; M_max 10; % 二進(jìn)制開(kāi)關(guān)變量nbranch條支路 × T個(gè)時(shí)段 W binvar(nbranch, T, full); % 運(yùn)行變量潮流、電壓幅值平方、電流幅值平方 P sdpvar(nbranch, T, full); Q sdpvar(nbranch, T, full); V sdpvar(nbus, T, full); L sdpvar(nbranch, T, full); % 目標(biāo)函數(shù)初始化 objective 0; for t 1:T % 網(wǎng)損項(xiàng) objective objective sum(r_array .* L(:, t)); % 對(duì)每條支路添加潮流約束DistFlow % 這里的矩陣形式需要配合節(jié)點(diǎn)關(guān)聯(lián)矩陣來(lái)寫(xiě) end % 開(kāi)關(guān)動(dòng)作次數(shù)約束 for t 2:T objective objective alpha * sum(abs(W(:, t) - W(:, t-1))); % 或者把動(dòng)作次數(shù)作為硬約束 % Constraints [Constraints, sum(sum(abs(W(:, 2:T) - W(:, 1:T-1)))) M_max]; end這段代碼只是一個(gè)框架性的示意真正的完整實(shí)現(xiàn)里還需要加入電壓上下限約束、支路電流約束、輻射狀拓?fù)浼s束和DG出力約束。需要注意的是YALMIP支持直接把絕對(duì)值函數(shù)用在二進(jìn)制變量上因?yàn)槎M(jìn)制變量的差絕對(duì)值可以通過(guò)引入輔助變量自然線(xiàn)性化內(nèi)部求解器會(huì)處理不需要用戶(hù)手動(dòng)轉(zhuǎn)化。初學(xué)者在這里很容易走彎路其實(shí)YALMIP比我們想象的要智能得多。3.3 輻射狀約束與DG約束的編碼注意事項(xiàng)在代碼工程里輻射狀約束是實(shí)現(xiàn)最容易出錯(cuò)的地方。我用的虛擬潮流方案需要額外定義一組連續(xù)變量F它表示虛擬功率在網(wǎng)絡(luò)中的傳輸量。對(duì)于每個(gè)非根節(jié)點(diǎn)虛擬潮流必須滿(mǎn)足“收入減支出等于該節(jié)點(diǎn)的虛擬負(fù)荷取1”的約束同時(shí)虛擬潮流的傳輸上限由開(kāi)關(guān)狀態(tài)決定如果開(kāi)關(guān)斷開(kāi)對(duì)應(yīng)支路的虛擬潮流必須為0如果開(kāi)關(guān)閉合虛擬潮流上限可以設(shè)為一個(gè)大數(shù)M_big比如節(jié)點(diǎn)數(shù)n。這里的關(guān)鍵在于“大M”的取值。如果取得太大會(huì)弱化松弛的效果導(dǎo)致求解效率下降如果取得太小又可能錯(cuò)誤地切斷了某些實(shí)際可行的路徑。我在代碼里取M_big nbus節(jié)點(diǎn)總數(shù)這是有理論依據(jù)的虛擬潮流從根節(jié)點(diǎn)到最遠(yuǎn)節(jié)點(diǎn)的累計(jì)消耗最壞情況下小于節(jié)點(diǎn)總數(shù)因此nbus作為上限是充分的不會(huì)誤傷可行解也不會(huì)因?yàn)槿≈颠^(guò)大而嚴(yán)重影響求解精度。DG出力的約束相對(duì)簡(jiǎn)單。對(duì)于每個(gè)接入DG的節(jié)點(diǎn)其有功注入P_dg和無(wú)功注入Q_dg分別限制在給定區(qū)間內(nèi)同時(shí)加上功率因數(shù)約束即Q_dg不能超過(guò)P_dg乘以某個(gè)正切值。這個(gè)約束是線(xiàn)性的直接寫(xiě)入即可。如果考慮儲(chǔ)能設(shè)備則需要額外增加充放電狀態(tài)變量和荷電狀態(tài)更新約束整體模型會(huì)再大一圈但原理上沒(méi)有本質(zhì)變化。3.4 求解過(guò)程與結(jié)果后處理求解階段直接用YALMIP的optimize函數(shù)diagnostic optimize(Constraints, objective, sdpsettings(solver, gurobi, verbose, 2));如果一切正常Gurobi會(huì)輸出MIP gap隨迭代次數(shù)下降的信息。我跑24時(shí)段IEEE 33節(jié)點(diǎn)算例的經(jīng)驗(yàn)是默認(rèn)參數(shù)下通常需要一兩分鐘才能收斂到gap小于1%的解但如果設(shè)置一個(gè)合理的MIP gap閾值比如0.5%或者1%求解時(shí)間可以大幅縮短到二三十秒。在實(shí)際項(xiàng)目里不必強(qiáng)求gap歸零0.5%到1%的gap對(duì)于配電網(wǎng)重構(gòu)應(yīng)用已經(jīng)完全夠用了。求解完成后需要做的工作是把結(jié)果回代驗(yàn)證把最優(yōu)開(kāi)關(guān)組合代入原始潮流方程用Newton-Raphson法重新算一遍精確潮流確認(rèn)沒(méi)有越限同時(shí)檢查網(wǎng)絡(luò)是否輻射狀連通。這一步非常重要因?yàn)镸ISOCP模型做了二階錐松弛雖然理論上在大多數(shù)情況下是精確的但工程應(yīng)用中必須通過(guò)實(shí)際驗(yàn)證來(lái)避免隱性錯(cuò)誤。我項(xiàng)目中已驗(yàn)證過(guò)多次松弛間隙都非常小最終回代結(jié)果和優(yōu)化目標(biāo)值幾乎一致。4. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄4.1 模型不可行九成是輻射狀約束寫(xiě)錯(cuò)了初次運(yùn)行模型時(shí)最常見(jiàn)的問(wèn)題就是求解器直接報(bào)“infeasible problem”。初學(xué)者很容易懷疑是數(shù)據(jù)問(wèn)題但經(jīng)過(guò)我大量的排錯(cuò)經(jīng)驗(yàn)超過(guò)九成的情況出在輻射狀約束上。具體來(lái)說(shuō)虛擬潮流約束要求每個(gè)非根節(jié)點(diǎn)恰好消耗1單位虛擬潮流同時(shí)支路開(kāi)關(guān)狀態(tài)為0時(shí)虛擬潮流強(qiáng)制為0這兩個(gè)條件組合起來(lái)其實(shí)對(duì)網(wǎng)絡(luò)的連通性提出了非常嚴(yán)格的要求。如果某個(gè)節(jié)點(diǎn)在某個(gè)時(shí)段因?yàn)殚_(kāi)關(guān)組合不合理而變成孤島模型就會(huì)立刻不可行。排查這類(lèi)問(wèn)題的方法是先把輻射狀約束注釋掉讓模型退化為普通的優(yōu)化潮流問(wèn)題確認(rèn)求解器能夠得到可行解然后逐步把輻射狀約束加回來(lái)逐步縮小問(wèn)題范圍。另外要重點(diǎn)檢查節(jié)點(diǎn)編號(hào)和支路關(guān)聯(lián)矩陣對(duì)不對(duì)——IEEE 33節(jié)點(diǎn)的數(shù)據(jù)在網(wǎng)上一搜一大把但不同版本的編號(hào)習(xí)慣可能不一樣直接用別人的數(shù)據(jù)源而不做轉(zhuǎn)換最容易出這類(lèi)問(wèn)題。4.2 求解時(shí)間過(guò)長(zhǎng)動(dòng)態(tài)重構(gòu)的性能瓶頸動(dòng)態(tài)重構(gòu)的求解時(shí)間之所以比靜態(tài)重構(gòu)高一個(gè)量級(jí)核心在于二進(jìn)制變量的數(shù)量從幾十個(gè)增加到了幾百個(gè)甚至上千個(gè)。Gurobi在求解MISOCP時(shí)每探索一個(gè)分支節(jié)點(diǎn)都要解一個(gè)連續(xù)的二階錐規(guī)劃這個(gè)開(kāi)銷(xiāo)比線(xiàn)性規(guī)劃的單純形法要高很多倍。因此任何能夠減少分支探索次數(shù)的手段都能帶來(lái)明顯的提速。我常用的優(yōu)化手段有幾個(gè)一是把MIP gap收緊到1%以?xún)?nèi)但不要追求太小的值二是給Gurobi設(shè)置時(shí)間上限比如120秒或300秒超時(shí)后取當(dāng)前最好可行解三是給變量提供熱啟動(dòng)初值把每個(gè)時(shí)段單獨(dú)靜態(tài)重構(gòu)的結(jié)果作為動(dòng)態(tài)模型的初始解傳給Gurobi這通常能大幅加快下界收斂。第四種是從根本上減少變量數(shù)量——采用前面說(shuō)的時(shí)段聚類(lèi)方法把24個(gè)時(shí)段聚合成6到8個(gè)典型時(shí)段。這樣模型規(guī)模大幅縮小求解速度提升十幾倍而目標(biāo)值的偏差通常在5%以?xún)?nèi)。4.3 二階錐松弛不精確什么時(shí)候需要擔(dān)心雖然二階錐松弛在大多數(shù)場(chǎng)景下是精確的但理論上存在一些邊界情況會(huì)導(dǎo)致松弛間隙不可忽略。最典型的情況是目標(biāo)函數(shù)對(duì)l_ij不是嚴(yán)格遞增的比如當(dāng)目標(biāo)函數(shù)包含某些對(duì)電壓偏移的懲罰項(xiàng)或者DG滲透率過(guò)高導(dǎo)致最優(yōu)解必須讓某些支路的電流平方項(xiàng)偏離錐邊界以換取電壓條件的滿(mǎn)足。在這種情況下松弛后的最優(yōu)解代入原始潮流方程會(huì)有明顯的可行度問(wèn)題回代結(jié)果與優(yōu)化結(jié)果偏差變大。處理方案是在目標(biāo)函數(shù)中加上一個(gè)非常小的電流平方懲罰項(xiàng)如epsilon * sum(r_ij * l_ij)這個(gè)懲罰項(xiàng)會(huì)迫使求解器把解推向錐邊界從而恢復(fù)精確性。epsilon取1e-4到1e-3量級(jí)即可既不會(huì)顯著改變目標(biāo)值又能保證松弛精度。我在DG滲透率高達(dá)100%的算例上試過(guò)這個(gè)方法非常有效松弛間隙從5%以上降到0.5%以?xún)?nèi)直接達(dá)到工程可接受的標(biāo)準(zhǔn)。4.4 開(kāi)關(guān)狀態(tài)結(jié)果出現(xiàn)“乒乓振蕩”動(dòng)態(tài)重構(gòu)的一個(gè)典型不良結(jié)果是開(kāi)關(guān)狀態(tài)在相鄰時(shí)段之間反復(fù)切換比如支路3在時(shí)段1閉合、時(shí)段2斷開(kāi)、時(shí)段3又閉合。雖然這個(gè)結(jié)果在數(shù)學(xué)上是可行的但它確實(shí)違反了工程直覺(jué)也對(duì)開(kāi)關(guān)設(shè)備非常不友好。出現(xiàn)這種情況的根本原因是相鄰時(shí)段的負(fù)荷和DG出力變化沒(méi)有大到需要持續(xù)改變拓?fù)涞蠼馄鳛榱藰O小化網(wǎng)損寧愿頻繁切換開(kāi)關(guān)也不愿保持一個(gè)“次優(yōu)”的固定拓?fù)洹=鉀Q這個(gè)問(wèn)題有兩種思路。第一種是把開(kāi)關(guān)動(dòng)作次數(shù)約束作為硬約束直接限制總動(dòng)作次數(shù)比如整個(gè)調(diào)度周期不超過(guò)8次或10次這樣求解器會(huì)在網(wǎng)損和動(dòng)作次數(shù)之間做全局權(quán)衡避免乒乓現(xiàn)象。第二種是把動(dòng)作次數(shù)懲罰項(xiàng)的權(quán)重調(diào)高使每次動(dòng)作的代價(jià)大于其帶來(lái)的網(wǎng)損節(jié)省。我個(gè)人更推薦第一種方案——硬約束更加直觀(guān)權(quán)重參數(shù)的敏感性也低結(jié)果便于解釋和寫(xiě)論文。4.5 求解器報(bào)錯(cuò)與數(shù)據(jù)格式的細(xì)節(jié)YALMIP配合Gurobi使用時(shí)有幾種常見(jiàn)報(bào)錯(cuò)值得留意?!癝olver not found”或者“No appropriate solver”通常是因?yàn)閅ALMIP沒(méi)有正確識(shí)別Gurobi的安裝路徑需要運(yùn)行yalmiptest命令檢查求解器是否被正確加載?!癗onconvex quadratic constraints”說(shuō)明模型里出現(xiàn)了非凸的二次約束最常見(jiàn)的來(lái)源是誤把l_ij * v_i P_ij^2 Q_ij^2這個(gè)原始形式直接寫(xiě)入模型而沒(méi)有轉(zhuǎn)化為標(biāo)準(zhǔn)二階錐形式。YALMIP實(shí)際上能夠自動(dòng)識(shí)別并改寫(xiě)一部分二階錐約束但對(duì)某些寫(xiě)法會(huì)誤判為非凸遇到這種情況需要手動(dòng)把約束改寫(xiě)成規(guī)范形式或者用YALMIP內(nèi)置的cone函數(shù)來(lái)顯式構(gòu)造二階錐。另一個(gè)常見(jiàn)問(wèn)題是數(shù)據(jù)單位不一致。IEEE 33節(jié)點(diǎn)的阻抗數(shù)據(jù)是以歐姆為單位給出的而標(biāo)幺值計(jì)算需要除以基準(zhǔn)阻抗如果漏掉了這一步電壓幅值和潮流數(shù)值會(huì)完全失真。建議所有數(shù)據(jù)統(tǒng)一轉(zhuǎn)換為標(biāo)幺值之后再進(jìn)行建模這是保證數(shù)值穩(wěn)定性的基礎(chǔ)。5. 動(dòng)態(tài)重構(gòu)的擴(kuò)展方向與實(shí)用心得模型跑通、結(jié)果合理之后這個(gè)項(xiàng)目其實(shí)還留下了很大的擴(kuò)展空間而且這些擴(kuò)展方向在論文寫(xiě)作和工程應(yīng)用中都非常有價(jià)值。首先是通過(guò)多目標(biāo)優(yōu)化處理網(wǎng)損和開(kāi)關(guān)動(dòng)作次數(shù)的權(quán)衡??梢园验_(kāi)關(guān)動(dòng)作次數(shù)作為第二個(gè)目標(biāo)函數(shù)用epsilon約束法或者加權(quán)和方法得到Pareto前沿然后由調(diào)度人員根據(jù)實(shí)際需求選擇合適的折中解。這樣比單純的引入懲罰項(xiàng)更有說(shuō)服力論文里放一張Pareto前沿圖審稿人的印象會(huì)好很多。其次是考慮儲(chǔ)能和需求響應(yīng)的聯(lián)合優(yōu)化。動(dòng)態(tài)重構(gòu)和儲(chǔ)能調(diào)度在數(shù)學(xué)上是天然耦合的——儲(chǔ)能的充放電策略會(huì)改變節(jié)點(diǎn)注入功率的時(shí)序分布從而影響最優(yōu)拓?fù)涞臅r(shí)序選擇。如果在這個(gè)項(xiàng)目的模型基礎(chǔ)上加入儲(chǔ)能設(shè)備的荷電狀態(tài)約束和充放電功率約束就構(gòu)成一個(gè)完整的“源網(wǎng)荷儲(chǔ)”協(xié)同優(yōu)化框架實(shí)用性和學(xué)術(shù)價(jià)值都會(huì)明顯提升。第三是規(guī)?;蠼獾奶剿鳌?duì)于IEEE 123節(jié)點(diǎn)甚至更大規(guī)模的實(shí)際饋線(xiàn)系統(tǒng)MISOCP模型的求解時(shí)間會(huì)迅速增長(zhǎng)。這時(shí)候需要考慮Benders分解或者列與約束生成算法把多時(shí)段的耦合問(wèn)題拆解為主問(wèn)題和子問(wèn)題來(lái)迭代求解?;蛘咛崆坝秘?fù)荷聚類(lèi)方法選典型時(shí)段把動(dòng)態(tài)重構(gòu)的時(shí)段數(shù)從24壓縮到6到8個(gè)求解效率的提升是非常明顯的。我前面用K-means聚類(lèi)的做法在IEEE 123節(jié)點(diǎn)系統(tǒng)上可以把求解時(shí)間從接近一個(gè)小時(shí)壓縮到幾分鐘這個(gè)經(jīng)驗(yàn)在大型項(xiàng)目里尤為重要。最后說(shuō)說(shuō)我個(gè)人在實(shí)際操作中的體會(huì)。做配電網(wǎng)重構(gòu)這個(gè)方向最忌諱的就是一頭扎進(jìn)算法堆里、只關(guān)心跑了多少個(gè)測(cè)試函數(shù)、比較了多少種智能算法而忽略了底層模型是否準(zhǔn)確、物理約束是否合理。二階錐規(guī)劃這套工具好的地方在于它要求你把每個(gè)約束的物理含義都想清楚然后才能正確地寫(xiě)成數(shù)學(xué)形式等到模型結(jié)構(gòu)梳理清楚之后求解反而是最順暢的一環(huán)。如果你發(fā)現(xiàn)自己卡在某個(gè)報(bào)錯(cuò)或者奇怪的求解結(jié)果上先不要急著改求解器參數(shù)回到模型本身、回到物理本質(zhì)上重新審視一遍通常問(wèn)題很快就會(huì)水落石出。這個(gè)項(xiàng)目從拿到手到全部理解、復(fù)現(xiàn)并擴(kuò)展我大概花了一個(gè)多星期其中一大半時(shí)間都花在理解輻射狀約束和各種邊界情況上——而這些功夫恰恰是這個(gè)項(xiàng)目最有價(jià)值的地方。本文還有配套的精品資源點(diǎn)擊獲取