化的配電網(wǎng)多目標(biāo)無功協(xié)調(diào)優(yōu)化與工程實(shí)踐)
配電網(wǎng)里光伏滲透率一上來第一個(gè)睡不著覺的就是做無功優(yōu)化的人。電網(wǎng)公司給光伏并網(wǎng)點(diǎn)定的電壓考核區(qū)間通常壓得很緊白天光伏大發(fā)、本地負(fù)荷又低的時(shí)候線路末端電壓能從正常的1.0 p.u.一路沖到1.06甚至更高多云天更惱人云層一過出力幾分鐘內(nèi)掉一半電壓跟著劇烈波動。傳統(tǒng)配電臺區(qū)里那幾臺電容器和主變有載調(diào)壓分接頭動作又慢又不經(jīng)折騰硬靠它們根本壓不住。我最近完成的項(xiàng)目就是圍繞“基于二階錐優(yōu)化的電氣綜合能源系統(tǒng)多目標(biāo)無功協(xié)調(diào)優(yōu)化”來做的重點(diǎn)解決含高比例光伏配電網(wǎng)的無功優(yōu)化求解難題。說白了就是把OLTC分接頭、電容器組、儲能PCS、光伏逆變器這些可調(diào)資源放到同一個(gè)模型里以有功網(wǎng)損和電壓偏差為目標(biāo)做協(xié)調(diào)同時(shí)用二階錐凸松弛把原來非線性非凸的潮流方程變成求解器能穩(wěn)穩(wěn)拿下的凸優(yōu)化問題。這篇文章把建模思路、松弛原理、多目標(biāo)處理、MATLAB實(shí)操和踩坑心得一次講清楚適合正在做分布式光伏接入、配電網(wǎng)無功優(yōu)化或綜合能源調(diào)度方向的研究生和工程師參考。1. 先搞清楚問題變了高比例光伏逼著無功優(yōu)化必須“協(xié)調(diào)”1.1 光伏大發(fā)時(shí)配電網(wǎng)到底發(fā)生了什么傳統(tǒng)配電網(wǎng)的無功優(yōu)化主要靠變電站側(cè)的電容/電抗器和OLTC分接頭思路是“從上往下壓”。那時(shí)候末端負(fù)荷大、分布式電源少電壓沿線路自然下降無功補(bǔ)償也基本是就地平衡邏輯。但高比例光伏接入后潮流方向徹底變了。想象一根水管原先水從源頭流向末端壓降是順著的現(xiàn)在末端附近接了一臺大水泵往管子里打水末端壓力反而比中間高。配電網(wǎng)里就是光伏往上游倒送有功功率線路末端電壓被抬起來最嚴(yán)重的時(shí)候是中午光照最強(qiáng)、本地負(fù)荷卻處于低谷母線電壓越過上限。反過來光伏出力一掉電壓又快速回落。這種雙向潮流下的電壓波動靠變電站單點(diǎn)調(diào)壓根本壓不住。還有一層很多人容易忽略光伏逆變器出廠默認(rèn)功率因數(shù)接近1不參與無功調(diào)節(jié)。也就是說光伏只發(fā)有功、不吸收無功線路上的無功潮流還是從變電站往末端走但末端電壓已經(jīng)被有功倒送頂起來了。這時(shí)候你再盲目投電容器只會讓末端電壓更高。所以必須換一套思路要讓逆變器根據(jù)電壓情況主動發(fā)無功或者吸無功把無功當(dāng)成控制電壓的“方向盤”。1.2 為什么叫“電氣綜合能源系統(tǒng)多目標(biāo)協(xié)調(diào)”項(xiàng)目標(biāo)題里“電氣綜合能源系統(tǒng)”不是硬貼概念。在配電網(wǎng)層面它指的是電、氣、熱、儲等多種能源形式通過耦合設(shè)備互聯(lián)源、網(wǎng)、荷、儲一起參與調(diào)節(jié)。落到無功優(yōu)化上就是不能只盯著電網(wǎng)里的電容器和變壓器還要把光伏逆變器、儲能變流器、充電樁甚至帶變頻驅(qū)動的可控負(fù)荷都納入無功調(diào)節(jié)資源池。這些設(shè)備的調(diào)節(jié)特性完全不一樣OLTC分接頭能調(diào)電壓但不能頻繁動電容器投切是離散的、投了短期內(nèi)不能反復(fù)切光伏逆變器響應(yīng)快但受當(dāng)前有功出力限制儲能PCS四象限能力強(qiáng)、可充可發(fā)但是有SOC約束和使用壽命成本。如果各設(shè)備都按本地電壓自行其是很容易互相打架。比如光伏電壓高了逆變器開始吸無功壓電壓電容器那邊“看到”低壓側(cè)無功不足又切一組電容器上去結(jié)果電壓繼續(xù)抬升逆變器繼續(xù)吸無功……整個(gè)系統(tǒng)在幾個(gè)設(shè)備之間來回振蕩。協(xié)調(diào)優(yōu)化的價(jià)值就在這里用一個(gè)統(tǒng)一的優(yōu)化模型把各種調(diào)節(jié)手段放在同一組潮流約束下算出“誰該動、動多少、按什么順序動”既避免設(shè)備打架也能兼顧多個(gè)目標(biāo)。分布式資源越多的電氣綜合能源系統(tǒng)這種全局協(xié)調(diào)帶來的收益越明顯。1.3 多目標(biāo)到底多在哪傳統(tǒng)單目標(biāo)無功優(yōu)化一般只追求網(wǎng)損最小但高比例光伏配電網(wǎng)里電壓越限往往比網(wǎng)損更致命。你不可能為了降低網(wǎng)損讓某個(gè)節(jié)點(diǎn)電壓沖到1.08 p.u.也不能為了電壓合格完全不管經(jīng)濟(jì)性。所以目標(biāo)函數(shù)至少要有兩個(gè)有功網(wǎng)損最小、電壓偏移最小。如果還考慮光伏消納那就要把“棄光量最小”甚至“避免倒送”也放進(jìn)去。多目標(biāo)問題的麻煩在于這些目標(biāo)不可能同時(shí)達(dá)到最優(yōu)只能做權(quán)衡。網(wǎng)損最小的點(diǎn)電壓可能壓得很低電壓最平穩(wěn)的點(diǎn)網(wǎng)損可能反而偏高。所以不要一上來就指望一個(gè)目標(biāo)函數(shù)解決所有問題后面我會專門講權(quán)重法和ε約束法怎么配合。2. 核心算法選型為什么二階錐優(yōu)化能搞定無功潮流問題2.1 原來的無功優(yōu)化問題為什么難算交流潮流約束長這樣P_i V_i Σ V_j (G_ij cos θ_ij B_ij sin θ_ij)Q_i V_i Σ V_j (G_ij sin θ_ij ? B_ij cos θ_ij)里面有電壓幅值與相角的乘積還有三角函數(shù)的嵌套整體是非線性非凸問題。傳統(tǒng)內(nèi)點(diǎn)法雖然能解但初值選不好就掉進(jìn)局部最優(yōu)遺傳算法、粒子群這類智能算法能全局搜索可計(jì)算量很大跑一個(gè)33節(jié)點(diǎn)算例都要反復(fù)試很多次而且每次結(jié)果還不一樣工程上很難接受。更致命的是加了OLTC、電容器這類離散變量之后問題變成混合整數(shù)非線性規(guī)劃MINLP常規(guī)算法很難保證在可接受時(shí)間內(nèi)找到可行解。我最早用MATLAB自帶的fmincon配合罰函數(shù)處理離散變量結(jié)果一個(gè)24時(shí)段問題跑了半個(gè)多小時(shí)解出來的方案里電容器投切次數(shù)還是亂跳根本沒法下發(fā)給現(xiàn)場設(shè)備。這時(shí)候需要一個(gè)根本性的轉(zhuǎn)變不是把非線性算法調(diào)得更強(qiáng)而是把問題本身“掰”成一個(gè)求解器容易處理的結(jié)構(gòu)。二階錐優(yōu)化就是干這件事的。2.2 DistFlow支路方程與二階錐松弛原理輻射狀配電網(wǎng)里有一條非常好用的簡化潮流方程叫DistFlow。以支路i→j為例它把功率平衡和電壓降落寫成P_ij ? Σ_{k∈child(j)} P_jk p_j r_ij l_ijQ_ij ? Σ_{k∈child(j)} Q_jk q_j x_ij l_ijU_j U_i ? 2(r_ij P_ij x_ij Q_ij) (r_ij2 x_ij2) l_ij其中U_i是節(jié)點(diǎn)電壓的平方l_ij是支路電流幅值的平方。這套方程本身就是做了變量替換把電壓和電流的二次項(xiàng)以平方變量形式出現(xiàn)避開了相角計(jì)算。剩下的問題只剩下一個(gè)非凸等式l_ij (P_ij2 Q_ij2) / U_i這是一個(gè)雙線性等式也是整個(gè)模型非凸的根源。二階錐松弛的核心思路是把這個(gè)等式放寬成不等式然后通過旋轉(zhuǎn)變換寫成錐約束。具體做法是把P、Q、U、l整理成旋轉(zhuǎn)錐的形式|| 2P_ij, 2Q_ij, l_ij ? U_i ||? ≤ l_ij U_i這個(gè)約束在幾何上是一個(gè)二階錐屬于凸集。凸問題就意味著沒有局部最優(yōu)陷阱內(nèi)點(diǎn)法可以在多項(xiàng)式時(shí)間內(nèi)找到全局最優(yōu)解而且不依賴初值。松弛之后會帶來一個(gè)問題可行域變大了原問題的解可能落在這個(gè)錐的內(nèi)部而不是邊界上。好在我們關(guān)心的目標(biāo)函數(shù)里通常包含網(wǎng)損項(xiàng)而網(wǎng)損與l_ij正相關(guān)優(yōu)化過程會傾向于盡量壓低l_ij把變量“拉”回錐邊界。實(shí)際算例里絕大多數(shù)輻射狀配電網(wǎng)的SOCP松弛都是精確的工程上可以用錐間隙對偶間隙來檢驗(yàn)松弛誤差誤差在10??級別以下就可以視為精確。2.3 求解器與建模環(huán)境的工程選擇把問題變成SOCP之后能用的求解器就多了。Gurobi、CPLEX、MOSEK都支持二階錐規(guī)劃而且如果有OLTC、電容器這類離散變量這些求解器也支持混合整數(shù)二階錐規(guī)劃MISOCP不需要另起爐灶。我的習(xí)慣是在MATLAB環(huán)境用YALMIP建模。YALMIP的好處是語法貼近數(shù)學(xué)表達(dá)式寫約束幾乎不用考慮求解器接口換求解器只改一行參數(shù)。對主流配電網(wǎng)測試算例來說連續(xù)SOCP的求解時(shí)間是毫秒級到秒級MISOCP通常在幾秒到幾十秒內(nèi)也能收住比MINLP那種動不動跑十分鐘起步的方案穩(wěn)定太多了。核心建模片段大概長這樣% 變量定義nl為支路數(shù)nb為節(jié)點(diǎn)數(shù) P sdpvar(nl,1); % 支路有功 Q sdpvar(nl,1); % 支路無功 U sdpvar(nb,1); % 節(jié)點(diǎn)電壓平方 L sdpvar(nl,1); % 支路電流平方 % DistFlow功率平衡約束以支路首端節(jié)點(diǎn)i、末端j為例 Constraints [Constraints, P(b) - p_load(j) p_pv(j) sdpvar_from_children?]; % 二階錐約束L(b) (P(b)^2 Q(b)^2) / U(i) % 寫成YALMIP的cone形式|| [2P; 2Q; L-U(i)] || LU(i) Constraints [Constraints, cone([2*P(b); 2*Q(b); L(b)-U(i)], L(b)U(i))]; % 目標(biāo)函數(shù)以網(wǎng)損最小為例 Objective sum(r .* L); ops sdpsettings(solver,gurobi,verbose,1); optimize(Constraints, Objective, ops);這里有幾個(gè)容易寫錯(cuò)的地方我先提前提醒第一DistFlow方程推導(dǎo)過程中所有的系數(shù)都基于標(biāo)幺值如果原始數(shù)據(jù)是有名值而且沒有歸算模型很容易不可行第二電壓變量用的是平方值但電壓越限約束要記得對上下限也取平方比如0.95 p.u.到1.05 p.u.對應(yīng)U的范圍是0.9025到1.1025第三錐約束的寫法必須確保錐變量的維度對齊YALMIP實(shí)際生成的錐半徑和高度參數(shù)別接反了。3. 多目標(biāo)無功協(xié)調(diào)優(yōu)化的建模細(xì)節(jié)3.1 目標(biāo)函數(shù)、歸一化與決策變量清單無功優(yōu)化里最常見的兩個(gè)目標(biāo)一是網(wǎng)損二是電壓偏移。網(wǎng)損定義為f_loss Σ r_ij l_ij這個(gè)量綱是有功功率單位是兆瓦。電壓偏移我一般用平方誤差的形式f_volt Σ (U_i ? U_ref)2注意這里U_i是電壓平方U_ref取1.0 p.u.的平方值1.0所以偏差量綱是pu2。兩個(gè)目標(biāo)的量級完全不同網(wǎng)損通常是10?210?1 MW電壓偏移可能是10?310?2直接加權(quán)求和的話數(shù)值大的一方會徹底壓住另一方。所以第一步做歸一化先分別單獨(dú)優(yōu)化兩個(gè)目標(biāo)得到各自的最優(yōu)值f_loss_min和f_volt_min然后把綜合目標(biāo)寫成min w1 × (f_loss / f_loss_min) w2 × (f_volt / f_volt_min)權(quán)重w1、w2之和為1用不同權(quán)重組合掃描就能畫出一條網(wǎng)損—電壓偏移的Pareto曲線。工程上最實(shí)用的操作是讓權(quán)重在0.1到0.9之間按0.1步長掃10輪把10個(gè)解都算出來再人工挑一個(gè)符合電壓考核要求且網(wǎng)損盡量低的方案。3.2 多目標(biāo)權(quán)衡加權(quán)法和ε約束法的適用場景權(quán)重法簡單直觀但它有一個(gè)容易被忽略的問題如果目標(biāo)函數(shù)不是凸的話某些Pareto前沿上的點(diǎn)在權(quán)重法下是“不可達(dá)”的。好在SOCP松弛之后網(wǎng)損目標(biāo)和電壓偏移目標(biāo)都是凸函數(shù)權(quán)重法能掃出比較完整的前沿這個(gè)風(fēng)險(xiǎn)基本可以忽略。不過權(quán)重法給人的“邊界感”不強(qiáng)尤其是當(dāng)運(yùn)行人員明確說“電壓最大偏移不能超過5%”時(shí)你很難通過調(diào)權(quán)重去精確滿足這個(gè)硬約束。這時(shí)候ε約束法更合適把網(wǎng)損作為目標(biāo)把電壓最大偏移作為硬約束例如要求所有節(jié)點(diǎn)U_i都在0.952到1.052之間然后逐步收緊這個(gè)閾值從1.052往下減到1.022、1.012看網(wǎng)損會因此抬升多少。這樣得到的結(jié)果天然滿足考核要求操作上也更容易對生產(chǎn)部門解釋。如果項(xiàng)目只要求一套運(yùn)行方案不要求Pareto曲線我建議優(yōu)先用ε約束法選一版電壓約束最嚴(yán)格、網(wǎng)損又可接受的方案而不是去糾結(jié)權(quán)重怎么配。權(quán)重法更適合做研究分析用來展示多目標(biāo)之間的敏感性和轉(zhuǎn)移趨勢。3.3 各類調(diào)節(jié)資源的數(shù)學(xué)建模要點(diǎn)這一部分直接決定模型是不是“可落地”。我只挑幾個(gè)典型設(shè)備講。光伏逆變器的無功調(diào)節(jié)范圍不是簡單的Q∈[?Qmax, Qmax]它受當(dāng)前有功輸出的限制。逆變器容量是一個(gè)圓Q_inv2 ≤ S_inv2 ? P_pv2光伏有功P_pv由光照決定在優(yōu)化模型里可以作為常數(shù)注入即先做超短期預(yù)測也可以作為決策變量如果允許棄光。這個(gè)約束本身是一個(gè)旋轉(zhuǎn)錐正好落在SOCP框架里處理起來非常自然。需要注意中午時(shí)段P_pv接近S_invQ的可用范圍很小反而是清晨或傍晚P_pv很小逆變器能提供的無功能力很大。所以做協(xié)調(diào)時(shí)中午不能指望逆變器大幅調(diào)壓必須提前讓儲能或者電容器在早上低谷時(shí)段把電壓調(diào)整到位。電容器組的投切是離散的。比如一臺電容器容量為Q_cap分成N檔那么實(shí)際無功輸出寫成Q_cap_total Q_cap × n, n ∈ {0,1,2,...,N}這個(gè)整數(shù)變量會讓模型變成MISOCP。為了避免求解時(shí)間爆炸我會把電容器檔位限制在3到5檔以內(nèi)必要時(shí)采用最近鄰取整與連續(xù)優(yōu)化交替的啟發(fā)式先放開成連續(xù)變量求一遍得到理想檔位后在附近做小范圍整數(shù)搜索。OLTC分接頭本質(zhì)上是改變變壓器兩側(cè)電壓比值也就是在DistFlow方程里U_j的基準(zhǔn)值乘以一個(gè)檔位系數(shù)。同樣要離散化處理而且OLTC有動作次數(shù)限制如果做24時(shí)段優(yōu)化還需要加一個(gè)總動作次數(shù)約束否則模型會讓分接頭每小時(shí)跳好幾次設(shè)備根本受不了。儲能PCS在無功優(yōu)化里的建模稍微復(fù)雜一點(diǎn)它同時(shí)有有功P和儲能SOC約束。做無功協(xié)調(diào)時(shí)我通常采取“有功功率曲線優(yōu)先”的策略先由能量管理系統(tǒng)給定一天的有功計(jì)劃把P_pcs當(dāng)作常數(shù)再讓Q_pcs在P_pcs與容量S_pcs限定的范圍內(nèi)作為優(yōu)化變量參與無功調(diào)節(jié)。如果讓P和Q同時(shí)優(yōu)化模型會多出一整層SOC約束和SOC動態(tài)約束求解規(guī)模會成倍增長而且很容易算出“讓電池以很大功率充電來換取無功能力”這種不經(jīng)濟(jì)的方案。4. 實(shí)操復(fù)盤MATLABYALMIP搞定含高比例光伏的配電網(wǎng)算例4.1 算例配置與光伏參數(shù)我拿IEEE 33節(jié)點(diǎn)系統(tǒng)跑的主體算例基準(zhǔn)電壓12.66 kV基準(zhǔn)容量10 MVA基準(zhǔn)負(fù)荷是3.715 MW加2.3 Mvar。為了模擬“高比例光伏”我在末端節(jié)點(diǎn)17、21、32分別接入三座分布式光伏總裝機(jī)5.0 MW左右大概是峰值有功負(fù)荷的1.3倍保證中午光伏大發(fā)時(shí)能明顯觀察到倒送和電壓抬升現(xiàn)象。光伏逆變器容量按裝機(jī)容量的1.1倍配置功率因數(shù)允許范圍設(shè)為0.95滯后到0.95超前。調(diào)節(jié)設(shè)備方面我在變電站出口設(shè)置了OLTC有8個(gè)檔位在節(jié)點(diǎn)8和25各放了一組兩檔電容器單組容量0.3 Mvar節(jié)點(diǎn)17和32的光伏電站旁配置了儲能PCS每套容量1.5 MVA無功可調(diào)范圍±1.2 Mvar有功功率按給定的充放電計(jì)劃運(yùn)行。所有光伏的有功出力取典型晴天中午時(shí)段的超短期預(yù)測值生成一個(gè)24點(diǎn)時(shí)序斷面做協(xié)調(diào)優(yōu)化。4.2 從建模到求解的關(guān)鍵步驟記錄我在MATLAB里按下面幾步把模型跑通整個(gè)過程大概分成五個(gè)階段第一步數(shù)據(jù)準(zhǔn)備。整理線路參數(shù)、節(jié)點(diǎn)負(fù)荷、光伏出力曲線全部化成標(biāo)幺值。這里我吃了不少虧IEEE 33節(jié)點(diǎn)原始數(shù)據(jù)給出的線路阻抗是歐姆而基準(zhǔn)阻抗是(12.66kV)2/10MVA≈16.02Ω歸算時(shí)很容易漏掉某個(gè)量導(dǎo)致潮流方程對不上。我的建議是寫一個(gè)簡單的數(shù)據(jù)校驗(yàn)函數(shù)先算一遍不含光伏的純負(fù)荷潮流跟參考結(jié)果對比誤差超過0.5%就回去查參數(shù)。第二步變量定義。用YALMIP生成P、Q、U、L四組連續(xù)變量OLTC檔位和電容器投切用binvar整數(shù)變量。U是節(jié)點(diǎn)電壓平方L是支路電流平方這兩組變量雖然名字看起來不直觀但能大幅簡化DistFlow方程。第三步寫約束。把節(jié)點(diǎn)有功/無功平衡、支路電壓降、二階錐電流約束、電壓上下限、逆變器容量約束、OLTC和電容器整數(shù)約束全部拼裝起來。這里我要特意強(qiáng)調(diào)DistFlow方程里的損耗項(xiàng)r_ij·l_ij和x_ij·l_ij不能省雖然有同學(xué)為了簡化會把它去掉但在高比例光伏場景下支路電流可能很大損耗項(xiàng)對電壓降的貢獻(xiàn)完全不可忽略去掉之后電壓誤差會達(dá)到0.02 p.u.量級。第四步設(shè)置求解器。連續(xù)SOCP我用GurobiMISOCP也用Gurobi。如果手頭沒有商業(yè)求解器SeDuMi和SDPT3也能解連續(xù)SOCP但混合整數(shù)部分就比較吃力了需要把離散變量用枚舉或啟發(fā)式單獨(dú)處理。設(shè)置求解器時(shí)我會把MIPGap設(shè)為1e-4時(shí)間限制設(shè)在300秒超過時(shí)間限制就取當(dāng)前最優(yōu)整數(shù)解。第五步后處理校驗(yàn)。優(yōu)化完成后把求出的U、P、Q代回原始潮流方程計(jì)算每個(gè)節(jié)點(diǎn)的潮流殘差和錐間隙。如果錐間隙超過1e-3說明松弛不精確我會回看是不是電壓上限約束綁得太死、目標(biāo)函數(shù)沒有有效激勵(lì)錐邊界取等并考慮加一小項(xiàng)懲罰項(xiàng)把解拉回邊界。4.3 優(yōu)化結(jié)果怎么讀網(wǎng)損、電壓與調(diào)節(jié)貢獻(xiàn)在白天光伏大發(fā)時(shí)段不優(yōu)化、逆變器功率因數(shù)為1時(shí)算例里節(jié)點(diǎn)17附近電壓最高到了1.068 p.u.已經(jīng)越上限節(jié)點(diǎn)32光伏倒送有功較大線路末端壓降也異常。整體網(wǎng)損在0.151 MW左右。用SOCP做多目標(biāo)協(xié)調(diào)之后我取了一個(gè)兼顧網(wǎng)損和電壓的折中方案權(quán)重w10.6、w20.4。網(wǎng)損降到0.094 MW下降約37.7%所有節(jié)點(diǎn)電壓回到0.97到1.03 p.u.之間滿足±5%的考核要求。從調(diào)節(jié)量貢獻(xiàn)看光伏逆變器承擔(dān)了約55%的無功調(diào)節(jié)量儲能PCS承擔(dān)約25%電容器和OLTC只負(fù)責(zé)“粗調(diào)”和基態(tài)電壓支撐。這個(gè)比例說明在高比例光伏場景下逆變器才是真正的主力傳統(tǒng)設(shè)備只能托底。再看Pareto掃描結(jié)果很有意思當(dāng)電壓約束從±7%逐步收緊到±2%時(shí)網(wǎng)損從0.086 MW緩慢上升到0.102 MW上升幅度大概18%。換句話說把電壓質(zhì)量做上去要付出的經(jīng)濟(jì)代價(jià)并不算大前提是調(diào)節(jié)資源足夠多、算法能全局協(xié)調(diào)。如果只看網(wǎng)損最小的單目標(biāo)解電壓偏移會明顯偏大從工程安全角度看不能直接采用。4.4 規(guī)?;c高效求解的幾個(gè)手段如果從IEEE 33節(jié)點(diǎn)擴(kuò)到實(shí)際饋線比如1000節(jié)點(diǎn)以上的配電網(wǎng)直接上MISOCP可能還是要等很久。我一般采取這幾招第一分級求解。先把離散變量OLTC檔位、電容器檔位固定為一組合理初值求連續(xù)SOCP然后在此基礎(chǔ)上放開離散變量做局部搜索。實(shí)際測試中這個(gè)策略能減少60%以上的MISOCP求解時(shí)間而且解的差距很小。第二熱啟動。YALMIP里可以用assign給變量賦初值或者通過sdpsettings的usex0選項(xiàng)讓求解器從上一時(shí)段的解開始迭代。24時(shí)段動態(tài)優(yōu)化時(shí)相鄰時(shí)段的離散設(shè)備狀態(tài)變化通常很小熱啟動效果非常明顯。第三時(shí)段解耦。如果只做無功優(yōu)化、不涉及儲能SOC跨時(shí)段耦合完全可以把24個(gè)時(shí)段拆開并行求解每個(gè)時(shí)段用多線程跑整體時(shí)間能壓到單時(shí)段求解時(shí)間的幾倍以內(nèi)。第四對偶割平面。針對SOCP松弛不精確的特殊節(jié)點(diǎn)可以迭代添加切割約束每次求解后找到錐間隙最大的支路追加一條線性割約束通常迭代3到5輪錐間隙就能降到1e-5以下。這個(gè)技巧在處理重負(fù)荷末端線路時(shí)特別好用。5. 從優(yōu)化結(jié)果到實(shí)際控制仿真驗(yàn)證與工程銜接5.1 為什么優(yōu)化算完還要在Simscape/Simulink里做驗(yàn)證很多同學(xué)在MATLAB里用YALMIP算完就收工了但工程上過不了關(guān)。SOCP優(yōu)化給出的是穩(wěn)態(tài)斷面的無功指令實(shí)際執(zhí)行時(shí)逆變器和儲能PCS是三相電力電子設(shè)備動態(tài)響應(yīng)過程里有鎖相環(huán)延時(shí)、電流內(nèi)環(huán)限幅、直流母線電壓波動等一系列問題。純數(shù)學(xué)優(yōu)化假設(shè)“指令下發(fā)后立刻精確跟蹤”這在物理上不成立。我拿到優(yōu)化結(jié)果后會把典型的無功指令序列接到Simscape Electrical搭建的光伏并網(wǎng)模型里把三相逆變器、LCL濾波器、并網(wǎng)變壓器和線路模型完整建出來跑一段電磁暫態(tài)仿真。重點(diǎn)看兩個(gè)指標(biāo)一是無功指令切換時(shí)電壓過沖是否超過允許值二是三相不平衡情況下單相無功分配是否和優(yōu)化假定一致。如果動態(tài)仿真里電壓超調(diào)嚴(yán)重我會回頭調(diào)整優(yōu)化模型里的逆變器無功響應(yīng)速度懲罰讓指令變化不那么激進(jìn)。熱詞里提到的“10kV配電網(wǎng)短路電流仿真”也是在這類驗(yàn)證里做的。光伏逆變器在故障時(shí)迅速進(jìn)入低電壓穿越模式輸出特性跟穩(wěn)態(tài)完全不是一回事。做無功協(xié)調(diào)控制策略時(shí)至少要在并網(wǎng)點(diǎn)靠近短路故障的場景下驗(yàn)證一下防止整定出來的無功給定在故障恢復(fù)階段造成二次電壓沖擊。5.2 無功指令分配與實(shí)際逆變器功率因數(shù)約束優(yōu)化模型給出的通常是“節(jié)點(diǎn)總無功需求量”而一個(gè)節(jié)點(diǎn)可能掛了多臺逆變器。實(shí)際下發(fā)時(shí)不能簡單除以臺數(shù)因?yàn)槊颗_逆變器當(dāng)前的有功出力不同剩余容量不同必須按可用無功容量比例分配。比如某站點(diǎn)兩臺逆變器容量都是500 kVA一臺當(dāng)前有功300 kW另一臺有功450 kW前者可調(diào)無功約400 kvar后者可調(diào)無功約218 kvar按1:0.55分配才是合理的平均分配會導(dǎo)致滿發(fā)那臺超過容量限制。還有功率因數(shù)考核的問題。逆變器并網(wǎng)要求功率因數(shù)通常在0.95以上這意味著無功指令不能超過有功出力對應(yīng)的極限。優(yōu)化模型里我用了容量圓約束理論上已經(jīng)隱含了這個(gè)限制但工程上最好再乘一個(gè)安全裕度系數(shù)我習(xí)慣把模型里的S_inv按實(shí)際容量的0.95倍處理給電壓波動和誤差留點(diǎn)余量。5.3 超短期預(yù)測誤差帶來的偏差怎么兜底高比例光伏場景下優(yōu)化執(zhí)行的時(shí)候光伏出力已經(jīng)和預(yù)測值對不上了。我的處理辦法是滾動優(yōu)化每隔5分鐘重新執(zhí)行一次SOCP優(yōu)化前5分鐘指令立刻下發(fā)后面時(shí)段作為參考但不強(qiáng)制執(zhí)行。二次規(guī)劃求解一次很快滾動機(jī)制完全跑得過來。另外我在控制層給每臺逆變器加了一個(gè)本地Q-V下垂控制的冗余邏輯。如果通信或者優(yōu)化主站故障設(shè)備自動切換成下垂模式電壓偏高就吸無功電壓偏低就發(fā)無功。這個(gè)兜底邏輯不追求全局最優(yōu)但能在優(yōu)化系統(tǒng)失效的幾分鐘內(nèi)把電壓穩(wěn)住避免設(shè)備脫網(wǎng)。這塊在Simulink里仿真驗(yàn)證過很多次效果比單純“等主站恢復(fù)”穩(wěn)妥得多。5.4 光伏數(shù)據(jù)與計(jì)算銜接的一個(gè)小巧思熱詞里提到的“超短期光伏功率預(yù)測”“工業(yè)園區(qū)光伏數(shù)據(jù)集”實(shí)際工程中可以直接對接。我的做法是把預(yù)測曲線作為SOCP優(yōu)化模型的光伏有功注入把實(shí)測偏差的統(tǒng)計(jì)分布轉(zhuǎn)成若干典型誤差場景每個(gè)場景跑一遍優(yōu)化最后按場景概率加權(quán)取期望指令。如果預(yù)測偏差主要是光照波動場景數(shù)控制在5個(gè)以內(nèi)就夠了如果涉及云團(tuán)快速遮擋需要把時(shí)間分辨率提到1分鐘這時(shí)SOCP求解速度的優(yōu)勢就非常關(guān)鍵。6. 常見問題與避坑手冊6.1 問題排查速查表我把項(xiàng)目里碰到的高頻率問題整理成了一張表照著排查比憑空猜快很多現(xiàn)象可能原因解決辦法求解器直接報(bào)不可行數(shù)據(jù)標(biāo)幺化不一致負(fù)荷或光伏單位錯(cuò)了電壓上下限沒取平方先跑不含優(yōu)化約束的潮流校驗(yàn)數(shù)據(jù)再逐條注釋約束定位不可行來源優(yōu)化后電壓反而更高權(quán)重沒歸一化電壓目標(biāo)被網(wǎng)損目標(biāo)壓住先做單目標(biāo)優(yōu)化求理想點(diǎn)再歸一化加權(quán)錐間隙過大松弛不精確目標(biāo)函數(shù)沒有激勵(lì)電流平方取邊界電壓上限綁得太緊檢查目標(biāo)是否包含網(wǎng)損項(xiàng)加少量l_ij懲罰項(xiàng)迭代加割平面MISOCP求解時(shí)間過長離散變量太多MIPGap設(shè)置太緊沒有熱啟動分級求解、減少電容器檔位、開啟熱啟動、適當(dāng)放寬MIPGap到1e-3電容器投切結(jié)果頻繁變化優(yōu)化模型沒加動作次數(shù)約束加動作次數(shù)懲罰或硬約束工程上一天投切不超過3次逆變器無功指令超過實(shí)際容量容量圓約束寫錯(cuò)或S_inv裕度不足用旋轉(zhuǎn)錐形式寫Q2≤S2?P2并預(yù)留5%~10%裕度YALMIP提示沒有可用求解器未安裝或未配置Gurobi/MOSEK等檢查求解器許可重新運(yùn)行setup求解器路徑6.2 建模階段最容易翻車的三個(gè)細(xì)節(jié)第一個(gè)是DistFlow的電壓降方程里二次項(xiàng)系數(shù)。公式里是(r2x2)l_ij很多同學(xué)會漏掉這個(gè)二次項(xiàng)。在低壓重載支路上這個(gè)量雖然小但乘以電流平方后未必能忽略。我自己的經(jīng)驗(yàn)是全部保留等松弛校驗(yàn)通過后再評估能不能省略不要一上來就簡化。第二個(gè)是光伏逆變器容量約束里P和Q的方向。逆變器容量圓是以原點(diǎn)為圓心但P_pv一般是正值、Q_pv可正可負(fù)寫成Q2≤S2?P2之后容量圓會明顯往正P方向偏移。這個(gè)約束不能簡化成Q∈[?Qmax,Qmax]的矩形否則在光伏滿發(fā)時(shí)會把無功指令算到容量圓外面下發(fā)后逆變器必然限功率。第三個(gè)是歸一化與權(quán)重的配合。不加歸一化直接設(shè)w10.6、w20.4電壓目標(biāo)幾乎不起作用。我試過一次優(yōu)化結(jié)果里電壓最大偏移還有0.06 p.u.完全不合格。歸一化之后同樣的權(quán)重下電壓偏移明顯被壓下來了。判斷權(quán)重是否合理的經(jīng)驗(yàn)指標(biāo)是看Pareto解集里兩個(gè)目標(biāo)的取值是否都在各自理想點(diǎn)的1.1倍以內(nèi)如果某個(gè)目標(biāo)是理想點(diǎn)的1.5倍以上說明這個(gè)目標(biāo)權(quán)重太低了。6.3 關(guān)于“松弛精確性”的一次排查實(shí)錄有一次我在節(jié)點(diǎn)18、22、31接入高比例光伏之后SOCP求解結(jié)果回代潮流方程發(fā)現(xiàn)節(jié)點(diǎn)22的電壓誤差有0.004 p.u.錐間隙到1e-2。拉網(wǎng)檢查后發(fā)現(xiàn)問題出在光伏滿發(fā)時(shí)段、節(jié)點(diǎn)22到節(jié)點(diǎn)21的支路電流非常大而目標(biāo)函數(shù)里網(wǎng)損項(xiàng)提供的激勵(lì)不足以把這條支路的電流約束壓回錐邊界。當(dāng)時(shí)我的解決辦法是給目標(biāo)函數(shù)追加一項(xiàng)很小的線性懲罰0.01×Σl_ij相當(dāng)于給電流平方一個(gè)正系數(shù)驅(qū)動松弛收緊。迭代兩輪后錐間隙降到1e-5回代誤差幾乎消失。后來我把這個(gè)小懲罰固定放進(jìn)了所有算例作為保險(xiǎn)措施代價(jià)是網(wǎng)損目標(biāo)變化不到0.3%完全可以接受。這個(gè)排查過程的啟發(fā)是SOCP松弛精確性不是一勞永逸的跟運(yùn)行方式、網(wǎng)絡(luò)結(jié)構(gòu)都有關(guān)系。大規(guī)模算例上線前一定要在每個(gè)典型斷面都做錐間隙檢查不能只在一個(gè)算例上驗(yàn)證過就默認(rèn)全對。7. 最后說點(diǎn)體己話這套二階錐多目標(biāo)無功協(xié)調(diào)方案做完之后我最大的感受是真正節(jié)省時(shí)間的不是求解器跑得快而是模型結(jié)構(gòu)讓所有推導(dǎo)和替換都變得可控。網(wǎng)損、電壓、設(shè)備容量、離散檔位每一條約束都能寫成一個(gè)清清楚楚的凸約束或者整數(shù)約束調(diào)試起來不用靠猜。比起以前用智能算法跑一次改一次參數(shù)這種“一次建模、終身受益”的感覺實(shí)在好太多了。如果讓我重做一遍這個(gè)項(xiàng)目我會把“松弛精確性驗(yàn)證”提到最前面而不是等結(jié)果不合理了再回頭查。另外再分享一個(gè)小技巧做多目標(biāo)優(yōu)化時(shí)先分別求解單目標(biāo)理想點(diǎn)再做歸一化權(quán)重給的每一個(gè)數(shù)值才有實(shí)際意義。你拿去給電網(wǎng)調(diào)度或者評審解釋時(shí)一張Pareto曲線配上“電壓約束每收緊1%網(wǎng)損增加約0.2個(gè)百分點(diǎn)”這樣的結(jié)論比單純甩一個(gè)優(yōu)化結(jié)果有說服力得多。后續(xù)想進(jìn)一步擴(kuò)展的話可以把天然氣網(wǎng)、熱網(wǎng)的耦合約束也放進(jìn)來在更大的電氣綜合能源系統(tǒng)里做跨網(wǎng)協(xié)調(diào)也可以把魯棒SOCP和滾動模型預(yù)測控制結(jié)合起來應(yīng)對更激進(jìn)的光伏波動。這套二階錐建??蚣懿粫冏兊闹皇羌s束條件和目標(biāo)函數(shù)這也是它最值得投入時(shí)間的地方。