則的分布魯棒優(yōu)化機組組合:Matlab建模與調(diào)參全記錄)
最近一直在折騰基于線性準(zhǔn)則的分布魯棒優(yōu)化機組組合問題Matlab代碼從建模到調(diào)試跑通中間確實踩了不少坑。這個方向在電力系統(tǒng)調(diào)度里越來越熱因為風(fēng)電占比上去之后傳統(tǒng)的確定性調(diào)度已經(jīng)不太夠用了。這篇不打算寫教科書式的推導(dǎo)就把我實際搭建模型、寫代碼、調(diào)參數(shù)的過程完整整理出來重點說說分布魯棒優(yōu)化DRO和線性決策準(zhǔn)則LDR這兩塊怎么融合到傳統(tǒng)UC模型里以及Matlab實現(xiàn)時那些文檔里不會寫但你又繞不過去的細(xì)節(jié)。1. 為什么機組組合會跟“分布魯棒”扯上關(guān)系1.1 機組組合的經(jīng)典形態(tài)到底是什么機組組合Unit Commitment簡稱UC說白了就是回答兩個問題明天24小時哪些機組要開機哪些停機然后在線運行的機組各自發(fā)多少電。前者是二進(jìn)制決策后者是連續(xù)決策疊加每小時變化的負(fù)荷、線路潮流、旋轉(zhuǎn)備用要求本質(zhì)上是一個大規(guī)?;旌险麛?shù)規(guī)劃問題。在沒有風(fēng)電或者風(fēng)電占比很低的時候負(fù)荷預(yù)測精度很高調(diào)度員把負(fù)荷當(dāng)成確定值跑一個確定性UC就能拿到可執(zhí)行的發(fā)電計劃。這個階段我用Matlab的intlinprog或YALMIPGurobi就能輕松搞定幾十臺機組的算例。但風(fēng)電一上來情況就變了。風(fēng)機出力受風(fēng)速影響預(yù)測誤差大尤其是尺度越小的風(fēng)電場誤差波動越劇烈。你提前一天做計劃第二天實際風(fēng)電可能比預(yù)測低很多也可能高很多。如果只按點預(yù)測值做調(diào)度實時平衡階段電網(wǎng)就得頻繁調(diào)整火電出力嚴(yán)重的時候可能拉閘限電。1.2 面對風(fēng)電不確定性三類處理方法怎么選調(diào)度層面處理風(fēng)電不確定性的主流方法大致分三類隨機優(yōu)化、魯棒優(yōu)化、分布魯棒優(yōu)化。我接觸過的項目里三類方法都用過各有利弊。隨機優(yōu)化假設(shè)風(fēng)電預(yù)測誤差服從某個已知的概率分布比如正態(tài)分布然后對隨機變量抽樣生成大量場景把UC問題轉(zhuǎn)成場景樹下的優(yōu)化問題。這里面最大的問題在于你憑什么相信風(fēng)電預(yù)測誤差一定是正態(tài)分布實際上風(fēng)電誤差往往表現(xiàn)出厚尾、偏態(tài)用錯分布模型最后給出的計劃既不經(jīng)濟也不安全。魯棒優(yōu)化更激進(jìn)一些它干脆不考慮分布只在某個不確定集合比如盒式集合內(nèi)尋找最壞情況下的最優(yōu)解。這樣做出來的調(diào)度方案很安全但代價也很明顯——過度保守。因為真實運行中所有隨機參數(shù)同時達(dá)到極端值的概率微乎其微魯棒優(yōu)化卻按這個最壞組合來安排機組結(jié)果就是成本偏高甚至出現(xiàn)“為了防備百年一遇的暴雨而天天背雨衣”的尷尬。分布魯棒優(yōu)化很有意思它站在兩者中間。它的哲學(xué)是我手里有一批歷史風(fēng)電預(yù)測誤差數(shù)據(jù)但真實分布未知。我在這批數(shù)據(jù)定義的“經(jīng)驗分布”周圍按某種距離度量畫一個半徑為ε的球模糊集真實分布落在球內(nèi)。然后我尋找這個球內(nèi)最壞分布下的期望成本最小化方案。它的優(yōu)勢是既不像隨機優(yōu)化那樣依賴精確分布假設(shè)又不像魯棒優(yōu)化那樣只盯絕對最壞場景而是盯著最壞分布在統(tǒng)計意義上整體最優(yōu)。1.3 線性決策準(zhǔn)則在這里扮演什么角色分布魯棒優(yōu)化模型本身是個兩階段min-max問題第一階段做機組啟停決策第二階段在不確定性實現(xiàn)后做經(jīng)濟調(diào)整。直接求解兩階段DRO計算復(fù)雜度非常高尤其機組組合還有二進(jìn)制變量。線性準(zhǔn)則Linear Decision RuleLDR是把這個復(fù)雜問題降維的關(guān)鍵手段。它假設(shè)第二階段決策量機組出力調(diào)整等是隨機變量風(fēng)電預(yù)測誤差的仿射函數(shù)y u Wξ。這樣無限維的二階段問題就轉(zhuǎn)化為有限維參數(shù)優(yōu)化問題——你只需要優(yōu)化仿射函數(shù)的系數(shù)矩陣W和截距u而W在求解時被一次性確定下來運行階段按這條“線性響應(yīng)規(guī)則”自動調(diào)整出力。它的直觀含義是當(dāng)風(fēng)電量出現(xiàn)偏差ξ時系統(tǒng)不重新經(jīng)歷復(fù)雜的實時優(yōu)化而是按照預(yù)先優(yōu)化好的線性反饋規(guī)則對各機組的調(diào)整量進(jìn)行分配。這個思路和自動控制里的狀態(tài)反饋類似在DRO框架內(nèi)它正好可以保證決策規(guī)則的可處理性與最優(yōu)性的近似平衡。2. 數(shù)學(xué)模型是怎么一層一層搭起來的2.1 兩階段框架里的目標(biāo)函數(shù)怎么設(shè)計兩階段DRO-UC目標(biāo)函數(shù)分成兩部分第一階段成本開機成本、關(guān)機成本、機組空載/基點出力燃料成本加上最大最壞分布下的第二階段期望調(diào)整成本。用符號表達(dá)的話第一階段決策變量包括機組g在時段t的開停機狀態(tài)變量x_g,t、啟動變量u_g,t、停機變量v_g,t以及基點出力p_g,t。第二階段決策變量是機組出力調(diào)整量r_g,t(ξ)以及應(yīng)對線路阻塞和備用不足的調(diào)整方案。目標(biāo)函數(shù)寫成min ∑_t ∑_g [ c_g^SU * u_g,t c_g^SD * v_g,t F_g(p_g,t) ] sup_{P∈B} E_P[ Q(x, p, ξ) ]其中第二項是一個期望算子下的最壞情況值而Q是第二階段的最小調(diào)整成本函數(shù)。F_g(p_g,t)通常取二次函數(shù)實際建模時線性化或分段線性化。需要指出的是第二階段調(diào)整成本Q本身是一個內(nèi)層最小化問題給定ξ實現(xiàn)后系統(tǒng)需要重新平衡功率付出燃料成本增量或切負(fù)荷懲罰。2.2 模糊集設(shè)計為什么選Wasserstein距離模糊集是分布魯棒優(yōu)化的核心。它定義了“真實分布在哪里不確定”。構(gòu)造模糊集的方式有很多KL散度、Prokhorov距離、Wasserstein距離都有應(yīng)用。在電力系統(tǒng)DRO實踐中Wasserstein距離用得最多我也是用它。給定N個歷史場景數(shù)據(jù)ξ_1,…,ξ_N經(jīng)驗分布是P?_N。Wasserstein模糊集定義為所有與P?_N的Wasserstein距離不超過ε的分布P的集合B { P : W(P, P?_N) ≤ ε }為什么選Wasserstein因為它對支撐集有良好的幾何意義而且相較于KL散度等基于密度比的定義Wasserstein在場景樣本點離散、分布重尾的情況下更穩(wěn)定。它衡量的是“概率質(zhì)量輸送的距離”哪怕兩個分布支撐不完全重疊也有定義。對風(fēng)電誤差這種可能出現(xiàn)極端值的字段Wasserstein模糊集的魯棒性更好。模糊集的半徑ε是一個超參數(shù)。ε太小模糊集太窄退化到隨機優(yōu)化ε太大模糊集太寬退步到魯棒優(yōu)化。實踐中我常用基于置信度的經(jīng)驗設(shè)計ε ≈ C * sqrt(2/N * log(1/(1-β))) 量級其中β為置信水平C是數(shù)據(jù)尺度相關(guān)的常數(shù)。也可以直接用樣本外驗證選ε。2.3 線性決策準(zhǔn)則的具體展開過程線性準(zhǔn)則的核心假設(shè)是把二階段決策r_g,t(ξ)寫成r_g,t(ξ) r_g,t^0 ∑_k R_g,t,k * ξ_k其中R_g,t,k表示在時段t機組g對第k個不確定源風(fēng)電場的預(yù)測誤差的線性反饋系數(shù)。這組R是待優(yōu)化的決策變量。為什么要用這個形式因為一旦把r寫成ξ的仿射函數(shù)第二階段目標(biāo)函數(shù)里“sup over P∈B E_P [c^T r(ξ)]”這個部分就可以重新表達(dá)。關(guān)鍵在于兩點第一r是ξ的線性函數(shù)所以二階期望變成了協(xié)方差/矩相關(guān)項第二最壞分布下的期望可以通過對偶理論轉(zhuǎn)化為一個有限維的凸優(yōu)化問題。具體來說第二階段的成本為∑_t ∑_g c_g^adj * (r_g,t^0 R_g,t ξ)它的期望和模糊集最壞化經(jīng)Wasserstein對偶之后等價于min_{λ≥0} λ ε (1/N) ∑_n φ(ξ_n, λ)這里的λ是模糊集半徑約束的對偶變量φ是一個關(guān)于場景ξ_n和λ的上確界函數(shù)表達(dá)式可解析推導(dǎo)。這個結(jié)果非常漂亮——把無限維的sup問題變成了一個關(guān)于λ和R的有限維優(yōu)化問題換句話說你不需要枚舉無限可能分布而是求解一個包含隨機場景對偶項的凸優(yōu)化。代碼層面我把這部分嵌入到Y(jié)ALMIP里用sdpvar定義R和λ把對偶項寫成可求解的約束。核心難點在于場景數(shù)量N和機組時段網(wǎng)格的乘積會急劇膨脹變量維度這一點后面我會再詳細(xì)說。2.4 完整約束列表與不確定性項位置DRO-UC模型的約束體系與經(jīng)典UC大體相同但第二階段約束里凡是含ξ項的都要進(jìn)入“對每個可能場景/在最壞分布內(nèi)成立”的范疇。第一階段的約束包括機組最小運行時間和最小停機時間約束避免頻繁啟停對設(shè)備壽命的損耗機組有功出力上下限約束對應(yīng)基點出力區(qū)間系統(tǒng)功率平衡約束不含風(fēng)電偏差時按預(yù)測值平衡旋轉(zhuǎn)備用容量約束按置信水平或確定性標(biāo)準(zhǔn)設(shè)定。第二階段的約束包括實際出力在上下限范圍內(nèi)p_g,t r_g,t(ξ) ∈ [P_g^min, P_g^max]爬坡約束在相鄰時段調(diào)整后仍滿足p_g,t r_g,t(ξ) - (p_g,t-1 r_g,t-1(ξ)) ≤ RU_g等系統(tǒng)功率實時平衡∑g r_g,t(ξ) ξ_w,t - 棄風(fēng)/切負(fù)荷動作 0。這些第二階段約束在模糊集內(nèi)對所有P都要成立概率為1成立或按機會約束方式定義。我實際實現(xiàn)時用的是“幾乎所有場景下約束可達(dá)”因為完全嚴(yán)格的魯棒可行性在模糊集邊緣場景下會讓問題無解或過于昂貴。3. Matlab代碼實現(xiàn)全流程3.1 數(shù)據(jù)準(zhǔn)備用什么樣的風(fēng)電數(shù)據(jù)做驅(qū)動分布魯棒優(yōu)化里風(fēng)電數(shù)據(jù)直接決定了經(jīng)驗分布和模糊集形態(tài)。如果你只有點預(yù)測曲線是無法做DRO的你至少需要一組歷史預(yù)測誤差場景數(shù)據(jù)預(yù)測值和實際值之間的差。我做算例時構(gòu)造了一個10機組6節(jié)點的標(biāo)準(zhǔn)測試系統(tǒng)負(fù)荷曲線采用典型日負(fù)荷風(fēng)電場上裝機容量300MW歷史預(yù)測誤差數(shù)據(jù)用混合高斯模型生成比純正態(tài)更接近真實風(fēng)電誤差分布特征樣本數(shù)量N2000。每個樣本是一個24維向量對應(yīng)24小時的風(fēng)電預(yù)測誤差。這里要特別提醒輸入的誤差樣本一定要做歸一化和異常值篩查。我在第一次跑模型時因為歷史數(shù)據(jù)里混了幾個數(shù)值異常大的壞點導(dǎo)致Wasserstein模糊集半徑?不論怎么取結(jié)果都異常后來把這些樣本清洗掉才正常。3.2 變量聲明與YALMIP建模骨架我采用YALMIP作為建模語言底層求解器用Gurobi。YALMIP的好處是能自然表達(dá)二進(jìn)制變量、凸約束并且支持在SDP/二階錐框架下寫Wasserstein對偶。代碼骨架大致如下% 參數(shù)定義 T 24; N 2000; G 10; Pmax [...]; Pmin [...]; % 機組出力上下限 RU [...]; RD [...]; % 爬坡速率 CS [...]; CD [...]; % 啟停成本 a [...]; b [...]; % 燃料成本系數(shù) Load [...]; % 預(yù)測負(fù)荷 1x24 xi load(wind_error_samples.mat); % N x T 誤差樣本 % 變量 x binvar(G, T); % 開停狀態(tài) u_on binvar(G, T); % 啟動動作 v_off binvar(G, T); % 停機動作 p sdpvar(G, T, full); % 基點出力 r0 sdpvar(G, T, full); % 線性決策準(zhǔn)則截距 R sdpvar(G*T, K, full); % 線性決策準(zhǔn)則反饋系數(shù)矩陣 lambda sdpvar(1, 1); % Wasserstein對偶變量這里K對應(yīng)不確定性維度一般等于風(fēng)電場數(shù)量×?xí)r段數(shù)或預(yù)測時段數(shù)。3.3 目標(biāo)函數(shù)寫入細(xì)節(jié)與求解器調(diào)用目標(biāo)函數(shù)包括確定性成本部分加最壞期望調(diào)整成本部分。確定性成本直接寫成本線性表達(dá)式最壞期望部分利用Wasserstein對偶寫成cost_det sum(sum(C_start * u_on)) sum(sum(a .* x b .* p)); % 第二階段對偶表達(dá) cost_adj lambda * epsilon (1/N) * sum(sum( max_scenario_term ));其中max_scenario_term的寫法是DRO實現(xiàn)的關(guān)鍵。在Wasserstein對偶與線性準(zhǔn)則結(jié)合后場景項可以寫成關(guān)于該場景對偶變量的線性函數(shù)需要引入臨時變量逐個場景展開。這里我用的是對每個場景寫一個約束對每個場景n有輔助變量 h_n滿足對任意支撐點gh_n ≥ 目標(biāo)函數(shù)項。然后把h_n求和后乘1/N加進(jìn)目標(biāo)。實際這樣寫出來的變量數(shù)大約是場景數(shù)2000 × 時段數(shù)24 × 機組數(shù)10 48萬個輔助變量再加系數(shù)矩陣。直接求解內(nèi)存壓力非常大。我做了個降維處理把爬坡約束和備用約束里的r_g,t(ξ)直接代入線性準(zhǔn)則整理成關(guān)于R的線性約束再用稀疏矩陣傳給YALMIP。為了讓Gurobi更快收斂我給每個連續(xù)變量設(shè)置了合理的bounds給所有包含大M的約束做了bound tightening并且啟用了Gurobi的MIP focus參數(shù)讓算法偏重于找可行整數(shù)解而不是只壓gap。3.4 線性化與大M法的幾個關(guān)鍵操作UC模型里最常見的非線性來源是第一階段的啟動動作變量與狀態(tài)變量之間的邏輯約束以及目標(biāo)函數(shù)中分段二次成本。我統(tǒng)一用分段線性化處理燃料成本曲線每一段的斜率a_i通過整數(shù)分段變量和連續(xù)分段負(fù)荷變量組合表達(dá)。第二階段約束中出現(xiàn)的絕對值項例如線路潮流約束|PG - PD - ξ| ≤ Fmax我用標(biāo)準(zhǔn)的絕對值線性化處理引入非負(fù)變量s和s-把原約束拆成兩對不等式。大M的選擇是踩坑重災(zāi)區(qū)。M太大數(shù)值條件數(shù)惡化求解器精度下降M太小約束可能錯誤截斷可行域。我的經(jīng)驗是給每個大M約束做獨立的tight bound。例如機組啟停與出力上限約束的M取值為對應(yīng)機組的Pmax減Pmin再加30%的爬坡余量線路阻塞約束的M取值為線路極限容量的2倍以上再加風(fēng)電誤差可能最大幅值。4. 子問題求解最壞分布搜尋到底在算什么4.1 把內(nèi)層sup問題等價變形為凸優(yōu)化我一開始沒想通的一步就是為什么“最壞分布下的期望”可以直接轉(zhuǎn)到求解器里。關(guān)鍵在于Wasserstein模糊集的強對偶定理。它說明給定經(jīng)驗分布和半徑εsup_{P:W(P,P0)≤ε} E_P[c(ξ)] 這個問題的對偶問題是一個關(guān)于標(biāo)量λ≥0和一組輔助變量的凸最小化問題。這個對偶轉(zhuǎn)化在Matlab實現(xiàn)里只有十幾行核心代碼卻容不得一點錯。對偶項里需要算1/N∑ max_j( c(ξ_n) - λ d(ξ_n, ξ_j) )之類的上確界其中d是距離測度j是所有支撐點。實際做的時候我把支撐點取為經(jīng)驗場景自身這樣對偶項變成對每個場景n、每個鄰近場景j的最大值整體結(jié)構(gòu)上是N×N的矩陣運算。4.2 場景支撐與概率變量的工程處理有網(wǎng)上的資料會用離散概率變量p_i表示P({ξ_i})然后模糊集寫成對偶變量的線性約束。這種“離散支撐概率變量”的做法比較直觀但規(guī)模一上來N2000的時候概率變量本身就有2000個加上對偶約束N2400萬條Matlab直接吃不消。我的做法是先用K-means聚類把N個場景聚成K100個代表性場景簇每個簇的概率由簇內(nèi)樣本比例決定再把聚類中心作為支撐點。這樣對偶規(guī)模降到10021萬計Matlab內(nèi)存和求解效率都在可控范圍。當(dāng)然聚類會損失一點分布精度但只要K取得合適誤差對最終機組組合決策的影響很小。我在文章里測算過K從50增加到200目標(biāo)函數(shù)值變化不超過1.5%說明聚類壓縮在這個問題是可靠的。5. 踩坑記錄與排查速查5.1 對偶符號與維度錯位分布魯棒模型的對偶轉(zhuǎn)換是新手重災(zāi)區(qū)。最典型的錯誤是把min和sup的先后順序搞反導(dǎo)致整個目標(biāo)函數(shù)變成凸性破壞。另一個典型問題是λ的對偶變量維度寫錯——Wasserstein半徑只有1個約束λ就應(yīng)該是標(biāo)量不要寫成向量但場景上確界項里的內(nèi)層對偶變量是場景相關(guān)的維度必須與支撐點數(shù)一致。我踩過一次坑把λ寫成T維向量導(dǎo)致Gurobi報“Q matrix is not positive semi-definite”查了整整兩天最后檢查變量定義才發(fā)現(xiàn)。5.2 數(shù)值問題導(dǎo)致結(jié)果不收斂DRO-UC的規(guī)模比一般UC大一個量級數(shù)值問題更加突出。表現(xiàn)通常是求解器長時間不收斂、gap振蕩不定、或者某個時段功率平衡約束的對偶乘子異常大。處理方法我用下來最有效的是以下幾點對所有數(shù)據(jù)做標(biāo)幺值化基準(zhǔn)功率取100MW成本單位統(tǒng)一到千美元或萬元避免數(shù)量級差異超過1e4對大M進(jìn)行bound tightening盡量縮小M取值范圍設(shè)置Gurobi的Numerics參數(shù)提高精度水平如果出現(xiàn)極端數(shù)值開啟多精度算法。5.3 收斂速度慢怎么給CCG加速實際寫的求解算法采用了列與約束生成CCG框架第一階段主問題給開停方案子問題對給定開停方案找最壞分布再把最壞分布對應(yīng)的約束反饋回主問題反復(fù)迭代直到間隙滿足要求。我的實際體驗從ε0.1開始前三輪迭代間隙就能跌到2%但再往下壓每下降0.1%都要花很長時間。這個階段最有用的技巧是給主問題添加“智能初始可行解”先把確定性UC的結(jié)果作為開停方案的初始值。這一改總迭代次數(shù)從28輪降到了15輪省了一半時間。5.4 模糊集半徑怎么調(diào)才合適半徑ε的選取不僅影響成本也直接影響求解難度。ε過大時模型趨近于魯棒優(yōu)化子問題對偶項包含極端場景的距離計算量增大ε過小時模型趨近隨機優(yōu)化模糊集的“安全性福利”變小。我建議的做法是跑一組ε敏感性分析從0開始逐步增大到某個上限比如1.0畫出總成本和棄風(fēng)風(fēng)險隨ε變化的曲線。曲線會呈現(xiàn)一個明顯的拐點拐點左側(cè)成本小幅緩增風(fēng)險快速下降拐點右側(cè)成本大幅上漲風(fēng)險下降趨于飽和。取拐點附近的ε就是兼顧經(jīng)濟性和魯棒性的甜蜜點。方法總成本萬元最大棄風(fēng)比例極端場景下切負(fù)荷風(fēng)險確定性UC320.40%高約4.8%概率隨機優(yōu)化UC341.80.8%中約0.9%概率分布魯棒UCε0.2362.22.1%低約0.05%概率經(jīng)典魯棒UC402.55.3%極低無切負(fù)荷這個表是我用10機組系統(tǒng)跑出來的典型結(jié)果不同系統(tǒng)數(shù)值會有差異但趨勢一致DRO確實是用一部分成本換取了較高的可靠性而且相比魯棒優(yōu)化它沒那么浪費。5.5 其他容易忽略的工程問題風(fēng)電場景與負(fù)荷的相關(guān)性沒有建模。如果誤差樣本沒體現(xiàn)“負(fù)荷高峰時段風(fēng)電誤差波動更大”這種相關(guān)性最壞分布搜尋結(jié)果會失真。我建議把場景數(shù)據(jù)按時段做條件抽樣或直接使用場景聯(lián)合樣本。輸電網(wǎng)約束的簡化。我在主體算例里用的是直流潮流模型忽略了無功和網(wǎng)絡(luò)損耗。如果要做交流潮流精確驗證DRO一要加二階錐松弛計算規(guī)模再上一個臺階。時間粒度。24小時粒度不夠細(xì)的時候啟動過程最小啟動時間、啟動功率曲線容易被錯誤建模。我把關(guān)鍵技術(shù)數(shù)據(jù)按15分鐘重新統(tǒng)計后開停方案變得更合理只是求解時間明顯上升需要在精度和算力之間做取舍。6. 算例結(jié)果解讀與核心實操建議6.1 從收斂曲線和機組組合看模型行為我調(diào)試通過后的收斂曲線很有意思主問題目標(biāo)值下界從第一輪的較低值迅速爬升子問題最壞期望成本上界從較高值逐步下降在15輪左右開始收斂到0.8%間隙。整體趨勢說明CCG在UC問題上沒有出現(xiàn)病態(tài)振蕩模型的凸性結(jié)構(gòu)保持得不錯這要歸功于線性準(zhǔn)則和二階段DRO對偶轉(zhuǎn)換的良好性質(zhì)。機組組合結(jié)果顯示相比確定性UCDRO方案會多開一臺中小容量機組作為靈活調(diào)節(jié)資源同時把大容量煤電的出力下調(diào)一些。多開機組、低負(fù)荷運行這看起來不經(jīng)濟但整體成本反而可控原因就在于系統(tǒng)有了更多爬坡容量來應(yīng)對風(fēng)電波動。這個現(xiàn)象在風(fēng)電滲透率超過20%的系統(tǒng)里尤其明顯。6.2 給想復(fù)現(xiàn)的人三條核心建議第一不要一上來就追完整模型。我強烈建議先在一個2機組、3時段的小系統(tǒng)里用手算的場景數(shù)據(jù)跑通DRO對偶轉(zhuǎn)換和CCG循環(huán)確認(rèn)目標(biāo)值和兩個界的邏輯一致再放大到完整系統(tǒng)。這樣能把對偶、模糊集、線性準(zhǔn)則的各類bug在小規(guī)模里暴露干凈。第二在線性準(zhǔn)則的反饋系數(shù)矩陣R的初始值上可以用最小二乘預(yù)處理先對歷史場景做一個線性回歸擬合“最優(yōu)調(diào)整量對誤差的響應(yīng)”用回歸系數(shù)初始化R。這個初始值不一定在最優(yōu)鄰域內(nèi)但能讓求解器更快找到可行方向。第三把精力重點放在模糊集半徑和場景代表性上而不是拼命加約束細(xì)節(jié)。我發(fā)現(xiàn)不少論文復(fù)現(xiàn)卡在“模型過于保守”上問題不出在模型結(jié)構(gòu)而是半徑取值偏大或者場景數(shù)量太少導(dǎo)致經(jīng)驗分布與實際誤差分布差異過大。多花時間做數(shù)據(jù)清洗和半徑標(biāo)定收益遠(yuǎn)大于增加約束復(fù)雜度。7. 這個方向還能怎么延伸7.1 接入儲能與需求響應(yīng)資源把儲能電站和柔性負(fù)荷放到第二階段決策里線性準(zhǔn)則的表達(dá)更寬裕因為儲能的充放電行為天然可以寫成對風(fēng)電誤差的仿射響應(yīng)。我在一個小規(guī)模測試?yán)锛恿艘粋€50MW/100MWh的儲能系統(tǒng)總成本進(jìn)一步下降棄風(fēng)比例也降了。DRO框架下儲能的收益評估比確定性框架更接近于真實調(diào)度工況。7.2 與深度學(xué)習(xí)預(yù)測結(jié)合分布魯棒優(yōu)化并不排斥預(yù)測模型。你可以先用神經(jīng)網(wǎng)絡(luò)或Transformer輸出風(fēng)電預(yù)測誤差的分布信息均值和區(qū)間寬度再用這些信息構(gòu)造更緊致的Wasserstein模糊集半徑實現(xiàn)“預(yù)測-優(yōu)化”聯(lián)動。這也是我下一步想嘗試的方向——把DRO的保守度做成一個隨預(yù)測置信度動態(tài)調(diào)節(jié)的參數(shù)。7.3 多時段耦合與市場機制設(shè)計DRO-UC模型還可以和電力現(xiàn)貨市場出清模型結(jié)合把模糊集放在市場申報的價格不確定度上用分布魯棒方法做市場成員的策略性報價分析。這類工作在電力市場改革背景下很有前景。我在實際調(diào)試這個項目的過程中最大的心得倒不是模型本身多復(fù)雜而是如何在理論公式和工程求解之間找到平衡。理論推導(dǎo)很“美麗”的部分往往是求解器最痛苦的部分反過來求解器喜歡拿到手的稀疏、緊界、維度可控的問題又往往要求你對原問題做一些看似不優(yōu)雅的近似。能在兩者之間找到一個可信的折中才是這類代碼真正能夠從論文走向?qū)嵱没年P(guān)鍵。如果你也在做DRO相關(guān)的調(diào)度模型不妨把我上面說的這幾個坑提前避開能省下不少debug時間。