優(yōu)化調(diào)度:深度強(qiáng)化學(xué)習(xí)實(shí)戰(zhàn)解析)
1. 項(xiàng)目概述為什么微網(wǎng)調(diào)度開始擁抱深度強(qiáng)化學(xué)習(xí)微網(wǎng)優(yōu)化調(diào)度這個(gè)話題在電力系統(tǒng)圈子里討論了好多年。以前大家做微網(wǎng)調(diào)度基本就是建立混合整數(shù)規(guī)劃模型丟給求解器跑或者用遺傳算法、粒子群這類啟發(fā)式算法去逼近最優(yōu)解。但做著做著就發(fā)現(xiàn)一個(gè)問題真實(shí)微網(wǎng)里的光伏出力、負(fù)荷需求、電價(jià)信號(hào)全是隨機(jī)波動(dòng)的傳統(tǒng)方法要么依賴精確預(yù)測(cè)要么計(jì)算時(shí)間太長(zhǎng)跟不上實(shí)時(shí)控制的需求。尤其是當(dāng)需求響應(yīng)機(jī)制加入之后調(diào)度問題從“單目標(biāo)尋優(yōu)”變成了“多主體博弈不確定性決策”數(shù)學(xué)規(guī)劃的框架開始顯得力不從心。深度強(qiáng)化學(xué)習(xí)Deep Reinforcement Learning, DRL這幾年之所以被引入微網(wǎng)調(diào)度核心邏輯其實(shí)很簡(jiǎn)單調(diào)度本質(zhì)上是一個(gè)序貫決策問題而DRL正好是處理序貫決策的天然工具。你不需要精確建模光伏出力和負(fù)荷的概率分布只需要讓智能體在仿真環(huán)境里反復(fù)試錯(cuò)自己去學(xué)“什么狀態(tài)下該做什么動(dòng)作”的策略。這種“無(wú)模型”的特性讓微網(wǎng)調(diào)度擺脫了對(duì)預(yù)測(cè)精度的過度依賴。A3CAsynchronous Advantage Actor-Critic這個(gè)算法在微網(wǎng)調(diào)度場(chǎng)景里是個(gè)很有意思的選擇。它不是像DQN那樣只輸出動(dòng)作價(jià)值而是同時(shí)學(xué)習(xí)策略和值函數(shù)加上多線程異步采樣的設(shè)計(jì)訓(xùn)練速度比傳統(tǒng)的單線程Actor-Critic快不少。更關(guān)鍵的是A3C天然適合微網(wǎng)這種多設(shè)備并行決策的場(chǎng)景——光伏、儲(chǔ)能、可調(diào)負(fù)荷、與大電網(wǎng)交互的功率這些控制變量本身就有一定的并行性A3C的異步架構(gòu)和這種物理結(jié)構(gòu)有契合點(diǎn)。這個(gè)項(xiàng)目適合誰(shuí)參考如果你的研究方向是微網(wǎng)能量管理、需求響應(yīng)策略優(yōu)化、或者想嘗試把DRL落地到實(shí)際的調(diào)度場(chǎng)景這篇文章里拆解的建模思路、A3C實(shí)現(xiàn)細(xì)節(jié)和調(diào)試經(jīng)驗(yàn)可以直接拿過去用。我不會(huì)只講一堆原理會(huì)把我實(shí)際踩過的坑、調(diào)參過程中的教訓(xùn)一并寫出來(lái)這些才是文檔里找不到的東西。2. 調(diào)度問題這樣定義狀態(tài)空間、動(dòng)作空間與獎(jiǎng)勵(lì)函數(shù)的設(shè)計(jì)邏輯2.1 從傳統(tǒng)優(yōu)化到強(qiáng)化學(xué)習(xí)問題表述的轉(zhuǎn)變先明確一下微網(wǎng)調(diào)度在干什么。一個(gè)典型微網(wǎng)包含光伏PV、儲(chǔ)能系統(tǒng)BESS、固定負(fù)荷和可調(diào)負(fù)荷通過公共連接點(diǎn)PCC與大電網(wǎng)相連。調(diào)度的目標(biāo)是在滿足負(fù)荷平衡、儲(chǔ)能SOC約束、聯(lián)絡(luò)線功率約束的前提下最小化運(yùn)行成本。傳統(tǒng)做法是把一天24小時(shí)分成96個(gè)時(shí)段15分鐘一個(gè)斷面建立優(yōu)化模型求解每個(gè)時(shí)段的設(shè)備出力。傳統(tǒng)模型寫出來(lái)大概長(zhǎng)這樣[ \min \sum_{t1}^{T} \left[ C_{grid}(P_{buy}^t) - R_{sell}(P_{sell}^t) C_{bess}(P_{dis}^t) C_{dr}(P_{shift}^t) \right] ]約束包括功率平衡、儲(chǔ)能充放電功率上下限、SOC遞推方程、聯(lián)絡(luò)線功率限制、需求響應(yīng)容量限制。這個(gè)問題本身不復(fù)雜復(fù)雜在于光伏出力預(yù)測(cè)不準(zhǔn)怎么辦電價(jià)波動(dòng)怎么應(yīng)對(duì)需求響應(yīng)用戶的行為不確定怎么辦把這個(gè)問題轉(zhuǎn)化為強(qiáng)化學(xué)習(xí)表述核心變化在于優(yōu)化變量從“每個(gè)時(shí)段的決策量”變成“策略函數(shù)”——輸入當(dāng)前狀態(tài)輸出應(yīng)該執(zhí)行的調(diào)度動(dòng)作約束條件要么嵌入動(dòng)作空間的限制用tanh或clip限制動(dòng)作范圍要么作為懲罰項(xiàng)加入獎(jiǎng)勵(lì)函數(shù)目標(biāo)函數(shù)從“最小化總成本”變成“最大化累計(jì)獎(jiǎng)勵(lì)”——把成本取負(fù)號(hào)變成獎(jiǎng)勵(lì)即可這一步轉(zhuǎn)化看起來(lái)簡(jiǎn)單實(shí)際做的時(shí)候問題很多。比如儲(chǔ)能SOC的約束如果你單純?cè)趧?dòng)作空間里限制充放電功率不考慮SOC不能越界的約束智能體很容易學(xué)會(huì)一個(gè)“先過度充電后面再猛放”的粗暴策略。2.2 狀態(tài)空間哪些信息必須進(jìn)網(wǎng)絡(luò)狀態(tài)空間的設(shè)計(jì)直接決定智能體能不能學(xué)到有效策略。我建議按照“可觀測(cè)性”來(lái)分類考慮第一類是環(huán)境狀態(tài)包括當(dāng)前時(shí)刻的光伏實(shí)際出力、負(fù)荷功率、電價(jià)。光伏出力和負(fù)荷是外部變量微網(wǎng)本身控制不了只能被動(dòng)適應(yīng)。電價(jià)如果是分時(shí)電價(jià)或者實(shí)時(shí)電價(jià)直接作為狀態(tài)輸入就行。第二類是系統(tǒng)狀態(tài)包括儲(chǔ)能SOC、聯(lián)絡(luò)線當(dāng)前交換功率、上一時(shí)刻的動(dòng)作量。儲(chǔ)能SOC是調(diào)度決策最重要的狀態(tài)變量因?yàn)樗苯蛹s束了當(dāng)前的調(diào)節(jié)能力。上一時(shí)刻的動(dòng)作量也很重要A3C這類算法需要知道“目前處于什么運(yùn)行狀態(tài)”才能做出平滑的決策——頻繁大范圍調(diào)整充放電功率對(duì)儲(chǔ)能壽命傷害很大。第三類是時(shí)間狀態(tài)包括當(dāng)前時(shí)段、星期幾、是否峰時(shí)。加這一維度的原因很簡(jiǎn)單光伏出力和負(fù)荷有很強(qiáng)的時(shí)序模式白天光伏強(qiáng)、晚上負(fù)荷高智能體需要感知“現(xiàn)在處于一天中的哪個(gè)階段”才能做出合理決策。很多初學(xué)者忽略這一維結(jié)果訓(xùn)練出來(lái)的策略在深夜還在拼命充電場(chǎng)面很滑稽。我的做法是把狀態(tài)向量組織成如下形式96時(shí)段切分每個(gè)狀態(tài)向量維度約15~20[t_week, t_hour, t_minute, PV_predict, PV_actual, load_base, load_shiftable, price, soc, pcc_power_prev, pv_actual_prev, load_actual_prev, ...]這里有個(gè)重要經(jīng)驗(yàn)環(huán)境變量做歸一化的時(shí)候一定要分類型處理。SOC本來(lái)就是0~1的不用動(dòng)功率變量按照微網(wǎng)容量基準(zhǔn)值歸一化時(shí)間變量用sin/cos編碼或者直接歸一化到0~1。如果統(tǒng)一用MinMaxScaler可能出現(xiàn)這樣的情況——電價(jià)在某些時(shí)段突然飆升歸一化后這個(gè)值變成1而其他時(shí)間都是0.2左右智能體會(huì)過度關(guān)注這一維特征學(xué)出來(lái)的策略在非尖峰時(shí)段動(dòng)作會(huì)變得很奇怪。2.3 動(dòng)作空間連續(xù)動(dòng)作比離散動(dòng)作更貼近實(shí)際微網(wǎng)調(diào)度的動(dòng)作怎么定義是一個(gè)值得認(rèn)真思考的問題。早期很多論文用的是離散動(dòng)作——把儲(chǔ)能充放電功率離散成幾個(gè)檔位比如[-50kW, -25kW, 0, 25kW, 50kW]然后用DQN類算法去做。這種方式實(shí)現(xiàn)簡(jiǎn)單但和實(shí)際調(diào)度需求有差距。實(shí)際調(diào)度中儲(chǔ)能充放電功率是一個(gè)連續(xù)變量PCC交換功率也是連續(xù)變量。你不可能真的讓儲(chǔ)能要么滿功率充電要么完全停掉。所以這個(gè)項(xiàng)目我堅(jiān)持用連續(xù)動(dòng)作空間A3C天然支持連續(xù)動(dòng)作——Actor網(wǎng)絡(luò)的輸出層用tanh激活函數(shù)把動(dòng)作限制在[-1, 1]區(qū)間再乘上動(dòng)作幅值映射到實(shí)際物理功率。動(dòng)作向量的定義# 動(dòng)作向量[儲(chǔ)能充電功率(負(fù)值/正值), 儲(chǔ)能放電功率, 與電網(wǎng)交互功率(正買負(fù)賣), 需求響應(yīng)可調(diào)負(fù)荷縮減比例] # 經(jīng)過tanh映射到[-1,1]再乘以對(duì)應(yīng)容量 action_bess action[0] * P_bess_max # 儲(chǔ)能功率 action_pcc action[1] * P_pcc_max # 聯(lián)絡(luò)線功率 action_dr (action[2] 1) / 2 # 需求響應(yīng)比例映射到[0,1]這個(gè)設(shè)計(jì)好在哪它把儲(chǔ)能、聯(lián)絡(luò)線、需求響應(yīng)三個(gè)決策通道解耦了——每個(gè)通道有獨(dú)立的控制權(quán)限智能體可以單獨(dú)調(diào)節(jié)。實(shí)際工程中微網(wǎng)控制器也是這樣分層設(shè)計(jì)的EMS層下發(fā)每個(gè)設(shè)備的功率指令設(shè)備層執(zhí)行。這種解耦方式讓A3C的訓(xùn)練更穩(wěn)定因?yàn)椴煌ǖ赖膭?dòng)作對(duì)獎(jiǎng)勵(lì)的影響尺度差異很大電價(jià)成本是萬(wàn)元級(jí)別的SOC約束懲罰可能是千元級(jí)別混在一起學(xué)容易互相干擾。2.4 需求響應(yīng)怎么建模價(jià)格型與激勵(lì)型的取舍需求響應(yīng)Demand Response, DR在微網(wǎng)調(diào)度里不是可選項(xiàng)而是重要的調(diào)節(jié)資源。我在項(xiàng)目里做了兩種建模方式的對(duì)比價(jià)格型需求響應(yīng)Price-based DR——用戶根據(jù)電價(jià)變化自動(dòng)調(diào)整用電行為。你在微網(wǎng)里不直接控制用戶負(fù)荷只是通過分時(shí)電價(jià)引導(dǎo)用戶削峰填谷。這種DR在強(qiáng)化學(xué)習(xí)框架里不需要額外的動(dòng)作變量電價(jià)本身就是狀態(tài)輸入的一部分智能體通過感知電價(jià)來(lái)自動(dòng)優(yōu)化儲(chǔ)能策略間接實(shí)現(xiàn)DR效果。激勵(lì)型需求響應(yīng)Incentive-based DR——微網(wǎng)運(yùn)營(yíng)商和用戶簽訂合同在特定條件下直接削減或轉(zhuǎn)移負(fù)荷。這種DR需要額外的動(dòng)作變量——可調(diào)負(fù)荷的削減比例。項(xiàng)目里我采用了這種方式因?yàn)樗男Ч苯右哺菀讓戇M(jìn)獎(jiǎng)勵(lì)函數(shù)里。需求響應(yīng)建模的具體做法定義可調(diào)負(fù)荷集合比如空調(diào)、熱水器、部分工業(yè)負(fù)荷每個(gè)時(shí)段智能體決定削減比例( r_{dr} \in [0, 1] )。削減負(fù)荷需要支付補(bǔ)償費(fèi)用合同約定的單位補(bǔ)償價(jià)格同時(shí)會(huì)帶來(lái)用戶舒適度損失。獎(jiǎng)勵(lì)函數(shù)里這兩項(xiàng)都要體現(xiàn)否則智能體會(huì)發(fā)現(xiàn)“削減負(fù)荷能省錢”就瘋狂削減完全不考慮用戶體驗(yàn)。我強(qiáng)烈建議在DR建模時(shí)加入補(bǔ)償成本系數(shù)并且把它設(shè)置在“比從電網(wǎng)買電便宜、但比光伏發(fā)電成本高”的區(qū)間。這樣智能體才會(huì)在合理的時(shí)機(jī)使用DR而不是濫用它。2.5 獎(jiǎng)勵(lì)函數(shù)設(shè)計(jì)直接成本與懲罰項(xiàng)的平衡藝術(shù)獎(jiǎng)勵(lì)函數(shù)是強(qiáng)化學(xué)習(xí)里最影響訓(xùn)練效果的部分。我的設(shè)計(jì)思路是主獎(jiǎng)勵(lì)項(xiàng)用真實(shí)物理量懲罰項(xiàng)用軟約束替代硬約束。主獎(jiǎng)勵(lì)項(xiàng)很好理解就是運(yùn)行成本的負(fù)值[ R_{cost} - \left[ \text{購(gòu)電費(fèi)用} - \text{售電收入} \text{DR補(bǔ)償} \text{儲(chǔ)能老化成本} \right] ]儲(chǔ)能老化成本很多人忽略但它對(duì)策略學(xué)習(xí)非常關(guān)鍵。如果你在獎(jiǎng)勵(lì)函數(shù)里不加電池老化懲罰智能體學(xué)到的策略一定是高頻次深度充放電——因?yàn)閺某杀咀钚』慕嵌瓤瓷疃确烹娔軠p少購(gòu)電但會(huì)嚴(yán)重縮短電池壽命。我在項(xiàng)目里用一個(gè)二次函數(shù)近似老化成本# 簡(jiǎn)化老化模型充放電深度越大、變化率越大老化越快 aging_cost alpha * (abs(soc_new - soc_old) / dt) beta * (soc_new - soc_mid) ** 2懲罰項(xiàng)處理的是約束違約。儲(chǔ)能SOC越界、聯(lián)絡(luò)線功率越限、功率不平衡這些情況如果直接做硬約束——即動(dòng)作采樣時(shí)強(qiáng)制clip——會(huì)導(dǎo)致梯度信息斷裂智能體不知道“為什么這個(gè)動(dòng)作不行”。更好的方式是把約束違約定義為平滑的懲罰項(xiàng)# SOC越界懲罰距離邊界越遠(yuǎn)懲罰越大 soc_penalty lambda_1 * max(0, soc_min - soc_new) ** 2 lambda_1 * max(0, soc_new - soc_max) ** 2 # 功率平衡懲罰 balance_penalty lambda_2 * (pv_power pcc_power bess_power - load_total) ** 2注意懲罰系數(shù)不要設(shè)得太大。我一開始把懲罰系數(shù)設(shè)成10000結(jié)果智能體完全不敢靠近約束邊界行動(dòng)儲(chǔ)能的調(diào)節(jié)能力被浪費(fèi)了。后面把系數(shù)調(diào)到100左右效果反而更好——智能體在邊界附近小幅試探學(xué)會(huì)了“貼著約束跑”的激進(jìn)策略。這個(gè)調(diào)參過程建議自己多做幾次實(shí)驗(yàn)對(duì)比不同的微網(wǎng)拓?fù)洹⒉煌脑O(shè)備容量最優(yōu)懲罰系數(shù)差異會(huì)很大。3. A3C算法在微網(wǎng)調(diào)度場(chǎng)景中的適配與實(shí)現(xiàn)細(xì)節(jié)3.1 為什么選A3C多線程異步帶來(lái)的探索效率提升先說結(jié)論A3C不是微網(wǎng)調(diào)度里唯一的DRL選擇DQN、DDPG、PPO都有論文做過相關(guān)實(shí)驗(yàn)。但A3C在某些維度上確實(shí)更適合微網(wǎng)調(diào)度這個(gè)場(chǎng)景。第一點(diǎn)探索效率。微網(wǎng)調(diào)度環(huán)境的狀態(tài)條件是連續(xù)變化的——光伏出力是一個(gè)隨時(shí)間平滑變化的曲線不是跳變的。這意味著相鄰時(shí)段的調(diào)度決策有很強(qiáng)的相關(guān)性探索空間是“連通”的。A3C的異步架構(gòu)讓多個(gè)worker從不同的初始狀態(tài)開始并行探索每個(gè)worker的探索軌跡相當(dāng)于給主網(wǎng)絡(luò)提供了多樣化的經(jīng)驗(yàn)。這個(gè)特性在微網(wǎng)場(chǎng)景里特別有用——不同worker可能分別遇到“光伏滿發(fā)”“負(fù)荷尖峰”“電價(jià)飆升”等不同運(yùn)行狀態(tài)主網(wǎng)絡(luò)能更快覆蓋到整個(gè)狀態(tài)空間。第二點(diǎn)穩(wěn)定性和可擴(kuò)展性。A3C的Actor-Critic結(jié)構(gòu)自帶方差削減機(jī)制優(yōu)勢(shì)函數(shù)配合N步回報(bào)n-step return做偏差方差均衡在連續(xù)控制問題上比DQN類方法穩(wěn)定得多。而且A3C的多worker設(shè)計(jì)天然適合分布式部署——如果你有多臺(tái)機(jī)器可以把worker分不到不同機(jī)器上各自模擬不同的微網(wǎng)場(chǎng)景比如一個(gè)模擬夏季工況、一個(gè)模擬冬季工況然后統(tǒng)一把梯度匯總到全局參數(shù)服務(wù)器。這種擴(kuò)展方式在微網(wǎng)研究中很有價(jià)值因?yàn)槲⒕W(wǎng)工況隨季節(jié)和氣候差異很大單一訓(xùn)練環(huán)境容易過擬合。當(dāng)然A3C也不是沒有短板。它的訓(xùn)練穩(wěn)定性比PPO差一些異步更新容易導(dǎo)致策略波動(dòng)對(duì)超參數(shù)也更敏感。如果你時(shí)間充裕建議把PPO也跑一遍做對(duì)比報(bào)告里寫上兩種算法的收斂曲線對(duì)比工作量不大但效果很好。3.2 算法核心機(jī)制拆解Actor、Critic與優(yōu)勢(shì)函數(shù)A3C是Actor-Critic家族的典型代表包含兩個(gè)網(wǎng)絡(luò)Actor網(wǎng)絡(luò)策略網(wǎng)絡(luò)——輸入狀態(tài)輸出動(dòng)作的分布參數(shù)。連續(xù)動(dòng)作空間下通常假設(shè)動(dòng)作服從正態(tài)分布Actor輸出均值和方差。方差可以固定訓(xùn)練初期大、后期減小也可以讓網(wǎng)絡(luò)自己學(xué)習(xí)方差的大小——后者更靈活但更容易出現(xiàn)訓(xùn)練震蕩。Critic網(wǎng)絡(luò)值函數(shù)網(wǎng)絡(luò)——輸入狀態(tài)輸出狀態(tài)價(jià)值估計(jì)。Critic的任務(wù)是評(píng)估“在當(dāng)前狀態(tài)下按當(dāng)前策略走能獲得多少期望回報(bào)”。兩個(gè)網(wǎng)絡(luò)共享前幾層特征提取層比如兩層128維的全連接層然后分叉為兩個(gè)輸出頭。共享特征的好處是減少參數(shù)、提升特征利用率壞處是兩個(gè)任務(wù)的梯度會(huì)互相干擾。微網(wǎng)調(diào)度這個(gè)場(chǎng)景狀態(tài)維度不高幾十維特征提取不難共享網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)勢(shì)大于劣勢(shì)。訓(xùn)練公式核心就兩個(gè)優(yōu)勢(shì)函數(shù)Advantage[ A(s_t, a_t) \sum_{i0}^{n-1} \gamma^i r_{ti} \gamma^n V(s_{tn}) - V(s_t) ]Actor損失[ L_{actor} - \log \pi(a_t|s_t) \cdot A(s_t, a_t) - \beta \cdot H(\pi(\cdot|s_t)) ]Critic損失MSE[ L_{critic} (R_t - V(s_t))^2 ]第一項(xiàng)是策略梯度第二項(xiàng)是熵正則項(xiàng)作用是鼓勵(lì)探索——如果熵太小策略會(huì)過早收斂到一個(gè)局部最優(yōu)動(dòng)作后續(xù)探索不足。微網(wǎng)調(diào)度場(chǎng)景里熵系數(shù)beta一般設(shè)0.01~0.1太大策略太隨機(jī)太小策略太貪婪。3.3 網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)與關(guān)鍵代碼實(shí)現(xiàn)我用的是三層結(jié)構(gòu)兩層全連接ReLU層128神經(jīng)元 輸出層。Actor輸出層是兩個(gè)頭——?jiǎng)幼骶祎anh激活和動(dòng)作方差softplus激活。Critic輸出層是單神經(jīng)元線性激活。學(xué)習(xí)率設(shè)1e-4Actor和2e-4CriticRMSProp優(yōu)化器微網(wǎng)調(diào)度任務(wù)不需要Adam那種自適應(yīng)矩估計(jì)那么強(qiáng)的調(diào)整能力RMSProp足夠還很穩(wěn)定。下面是核心代碼骨架我盡量精簡(jiǎn)但保持完整邏輯import torch import torch.nn as nn import torch.nn.functional as F import numpy as np class ActorCritic(nn.Module): def __init__(self, state_dim, action_dim, hidden128): super().__init__() # 共享特征層 self.fc1 nn.Linear(state_dim, hidden) self.fc2 nn.Linear(hidden, hidden) # Actor輸出頭 self.actor_mean nn.Linear(hidden, action_dim) self.actor_logstd nn.Parameter(torch.zeros(action_dim)) # Critic輸出頭 self.critic nn.Linear(hidden, 1) def forward(self, x): x F.relu(self.fc1(x)) x F.relu(self.fc2(x)) return x def act(self, state): x self.forward(state) mean torch.tanh(self.actor_mean(x)) std torch.exp(self.actor_logstd) dist torch.distributions.Normal(mean, std) action dist.sample() log_prob dist.log_prob(action).sum(dim-1) return action, log_prob def evaluate(self, state, action): x self.forward(state) mean torch.tanh(self.actor_mean(x)) std torch.exp(self.actor_logstd) dist torch.distributions.Normal(mean, std) log_prob dist.log_prob(action).sum(dim-1) entropy dist.entropy().sum(dim-1) value self.critic(x).squeeze(-1) return log_prob, entropy, value這里有個(gè)細(xì)節(jié)值得提一下我把Actor的logstd設(shè)成了可訓(xùn)練參數(shù)而不是固定值。這樣做的原因是微網(wǎng)調(diào)度不同通道的動(dòng)作儲(chǔ)能功率、聯(lián)絡(luò)線功率、DR比例量綱和合理波動(dòng)范圍差異很大固定方差不合適。儲(chǔ)能功率的合理波動(dòng)可能是幾十千瓦的量級(jí)DR比例波動(dòng)是0.05左右的量級(jí)方差如果共享訓(xùn)練會(huì)很別扭??捎?xùn)練的方差參數(shù)讓每個(gè)通道自己學(xué)一個(gè)合適的探索強(qiáng)度。3.4 Worker設(shè)計(jì)與全局參數(shù)同步機(jī)制A3C的靈魂在“異步”。每個(gè)Worker獨(dú)立運(yùn)行一個(gè)微網(wǎng)仿真環(huán)境獨(dú)立采樣和計(jì)算梯度然后把梯度推送到全局模型。我用Python的multiprocessing實(shí)現(xiàn)多進(jìn)程而不是多線程——因?yàn)槲⒕W(wǎng)仿真環(huán)境里有大量數(shù)值計(jì)算多線程在GIL下發(fā)揮不出多核優(yōu)勢(shì)。def worker_process(worker_id, global_model, optimizer, env_config, max_episodes): # 每個(gè)worker創(chuàng)建自己的本地模型副本 local_model ActorCritic(env_config[state_dim], env_config[action_dim]) local_model.share_memory() # 共享內(nèi)存允許高效參數(shù)同步 env MicroGridEnv(env_config) for episode in range(max_episodes): state env.reset() done False episode_reward 0 # 軌跡緩存 states, actions, rewards, next_states, dones [], [], [], [], [] while not done: action, log_prob local_model.act(torch.FloatTensor(state).unsqueeze(0)) next_state, reward, done, info env.step(action.numpy().squeeze()) states.append(state); actions.append(action) rewards.append(reward); next_states.append(next_state); dones.append(done) state next_state episode_reward reward # 累積到T_max步或終止時(shí)計(jì)算梯度和更新 if len(states) T_max or done: update_global_model(local_model, global_model, optimizer, states, actions, rewards, next_states, dones) # 更新后同步參數(shù)到本地 local_model.load_state_dict(global_model.state_dict()) states, actions, rewards, next_states, dones [], [], [], [], []關(guān)鍵點(diǎn)是Worker不是每一步都更新全局參數(shù)而是攢夠一定步數(shù)T_max才推一次梯度。T_max我設(shè)的是20相當(dāng)于5小時(shí)15分鐘一個(gè)斷面。這個(gè)值太大策略更新滯后太小通信開銷大。20在實(shí)際運(yùn)行中效果不錯(cuò)你可以試試16~32的范圍。3.5 微網(wǎng)仿真環(huán)境搭建Gym接口與物理約束處理仿真環(huán)境是整個(gè)項(xiàng)目的地基。我基于OpenAI Gym的接口規(guī)范寫了一個(gè)MicroGridEnv類之所以用Gym標(biāo)準(zhǔn)接口是為了后續(xù)可以無(wú)縫對(duì)接其他DRL框架Stable-Baselines3等也方便在多個(gè)算法之間做對(duì)比實(shí)驗(yàn)。class MicroGridEnv(gym.Env): def __init__(self, config): super().__init__() self.dt 0.25 # 15分鐘一個(gè)調(diào)度斷面 self.horizon 96 # 一天96個(gè)時(shí)段 self.pv_capacity config[pv_capacity] # 光伏裝機(jī)容量 self.bess_capacity config[bess_capacity] # 儲(chǔ)能容量kWh self.bess_power config[bess_power] # 儲(chǔ)能最大充放電功率kW self.pcc_max config[pcc_max] # 聯(lián)絡(luò)線最大功率 # 狀態(tài)空間維度 20 self.observation_space spaces.Box(low-np.inf, highnp.inf, shape(20,)) # 動(dòng)作空間 3維連續(xù) self.action_space spaces.Box(low-1, high1, shape(3,)) self.reset() def step(self, action): # 解析動(dòng)作 bess_power action[0] * self.bess_power pcc_power action[1] * self.pcc_max dr_ratio (action[2] 1) / 2 # [0, 1] # 應(yīng)用需求響應(yīng)可調(diào)負(fù)荷按比例削減 self.load_actual self.load_base self.load_shiftable * (1 - dr_ratio) # 功率平衡計(jì)算 balance self.pv_power pcc_power bess_power - self.load_actual # 更新儲(chǔ)能SOC if bess_power 0: # 放電 soc_new self.soc - bess_power * self.dt / self.bess_capacity * eff_dis else: # 充電 soc_new self.soc - bess_power * self.dt / self.bess_capacity / eff_chg # 計(jì)算成本 cost self.compute_cost(pcc_power, dr_ratio, soc_new) reward -cost # 更新狀態(tài) self.soc np.clip(soc_new, self.soc_min, self.soc_max) self.t 1 done self.t self.horizon return self._get_state(), reward, done, {cost: cost}環(huán)境搭建要注意的細(xì)節(jié)很多我挑重要的說第一功率平衡約束。我在step里計(jì)算了balance這個(gè)變量但沒有直接用它來(lái)強(qiáng)制約束動(dòng)作——而是把它加入懲罰項(xiàng)。為什么強(qiáng)約束會(huì)切斷智能體的學(xué)習(xí)信號(hào)如果pcc功率稍微越界就直接clip成邊界值智能體學(xué)不到“為什么越界”只會(huì)盲目調(diào)節(jié)。軟懲罰讓智能體自己權(quán)衡“越界多少懲罰多大、其他收益多大”學(xué)出來(lái)的策略更有彈性。第二儲(chǔ)能SOC初始值。我做了隨機(jī)初始化——SOC初始值在[0.3, 0.7]之間均勻隨機(jī)采樣。這樣做的好處是讓智能體經(jīng)歷不同的儲(chǔ)能狀態(tài)起點(diǎn)避免總是從滿電狀態(tài)開始訓(xùn)練導(dǎo)致策略對(duì)SOC不敏感。實(shí)際運(yùn)行中也確實(shí)發(fā)現(xiàn)隨機(jī)初始化后訓(xùn)練出的策略對(duì)SOC的感知能力更強(qiáng)——光伏大發(fā)時(shí)會(huì)主動(dòng)多充電、電價(jià)尖峰時(shí)會(huì)主動(dòng)放電而不是只依賴當(dāng)前時(shí)段的電價(jià)做決策。第三負(fù)荷數(shù)據(jù)的處理方式。真實(shí)負(fù)荷和光伏數(shù)據(jù)是帶有明顯周期性和季節(jié)性的如果只用一段固定數(shù)據(jù)訓(xùn)練策略會(huì)過擬合到這段數(shù)據(jù)上。我用3~5年的歷史數(shù)據(jù)切片每個(gè)episode隨機(jī)抽取一天開始訓(xùn)練。這個(gè)方法在強(qiáng)化學(xué)習(xí)里叫“domain randomization”在微網(wǎng)場(chǎng)景里非常有效。4. 實(shí)操過程訓(xùn)練、評(píng)測(cè)與參數(shù)調(diào)優(yōu)全流程4.1 數(shù)據(jù)準(zhǔn)備與場(chǎng)景設(shè)計(jì)項(xiàng)目用的是某園區(qū)微網(wǎng)的歷史運(yùn)行數(shù)據(jù)包含一年8760小時(shí)的負(fù)荷和光伏數(shù)據(jù)。數(shù)據(jù)切片成15分鐘粒度即每天96個(gè)斷面。數(shù)據(jù)預(yù)處理三個(gè)階段第一階段是清洗。負(fù)荷和光伏數(shù)據(jù)有缺失值和異常值采集設(shè)備故障、通信中斷——用前后時(shí)段插值異常值超過設(shè)備容量2倍以上的數(shù)據(jù)點(diǎn)、負(fù)值負(fù)荷等直接剔除后插值。第二階段是縮放。負(fù)荷和光伏數(shù)據(jù)按照微網(wǎng)容量基準(zhǔn)值歸一化到[-1, 1]或[0, 1]區(qū)間。歸一化基準(zhǔn)要統(tǒng)一——都用微網(wǎng)額定容量做基準(zhǔn)不要分別用負(fù)荷最大值和光伏最大值做歸一化否則狀態(tài)向量各維度的尺度不一致網(wǎng)絡(luò)訓(xùn)練會(huì)很吃力。第三階段是構(gòu)建不同的運(yùn)行場(chǎng)景。我把數(shù)據(jù)分成三類訓(xùn)練場(chǎng)景春夏秋冬各取若干天、測(cè)試場(chǎng)景與訓(xùn)練場(chǎng)景完全不同月份的若干天、壓力測(cè)試場(chǎng)景極端天氣日比如連續(xù)陰雨天、極端高溫日。這樣的設(shè)計(jì)是必要的——訓(xùn)練集用來(lái)學(xué)策略測(cè)試集用來(lái)驗(yàn)證泛化能力壓力測(cè)試看看策略在極端工況下會(huì)不會(huì)崩。4.2 訓(xùn)練過程記錄與收斂性分析訓(xùn)練跑了大約5000個(gè)episode每個(gè)worker 1000個(gè)episode5個(gè)worker并行單機(jī)8核CPU跑了大約3個(gè)小時(shí)。以下是訓(xùn)練過程中的關(guān)鍵觀察記錄第1~500個(gè)episode獎(jiǎng)勵(lì)非常低且震蕩劇烈。智能體在探索階段經(jīng)常出現(xiàn)“亂充亂放”的行為——連著幾個(gè)時(shí)段大功率充電光伏出力又不足只能高價(jià)從電網(wǎng)買電成本極高。這個(gè)階段是正常的不要過早判斷策略好壞也不要在這個(gè)階段調(diào)參。第500~2000個(gè)episode獎(jiǎng)勵(lì)逐步上升震蕩幅度收窄。智能體開始學(xué)會(huì)一些基本的規(guī)則光伏大發(fā)時(shí)充電、電價(jià)低時(shí)購(gòu)電充電、電價(jià)高時(shí)放電。儲(chǔ)能SOC曲線開始變得合理。第2000~5000個(gè)episode獎(jiǎng)勵(lì)趨于平穩(wěn)震蕩幅度進(jìn)一步收窄。策略基本穩(wěn)定儲(chǔ)能SOC曲線基本遵循“白天光伏充電、傍晚高峰放電、夜間低價(jià)充電”的合理模式。DR削減率在電尖峰時(shí)段提高在平時(shí)時(shí)段基本接近零。在論文寫作或報(bào)告匯報(bào)時(shí)建議不要只畫一條Reward曲線。更好的做法是匯總?cè)齻€(gè)指標(biāo)累計(jì)成本、儲(chǔ)能SOC的均值和方差、DR削減率隨電價(jià)的變化關(guān)系。這三個(gè)指標(biāo)分別對(duì)應(yīng)經(jīng)濟(jì)性、安全性、需求響應(yīng)效果評(píng)審專家看到這些才覺得你的工作扎實(shí)。4.3 關(guān)鍵超參數(shù)effect一覽一份可以直接抄的調(diào)參表A3C的超參數(shù)對(duì)訓(xùn)練效果影響很大而且不同環(huán)境最優(yōu)值差異很大。我把自己實(shí)驗(yàn)過的參數(shù)整理成表格注意這只是一個(gè)合理的起點(diǎn)不是最優(yōu)解。超參數(shù)推薦值對(duì)訓(xùn)練的影響我的調(diào)試經(jīng)驗(yàn)學(xué)習(xí)率Actor1e-4過大策略震蕩過小收斂慢Actor和Critic學(xué)習(xí)率分開設(shè)Critic可以稍大學(xué)習(xí)率Critic2e-4同上分開設(shè)比共用一個(gè)值穩(wěn)定T_max更新步數(shù)20太短更新頻繁太長(zhǎng)延遲大對(duì)應(yīng)5小時(shí)調(diào)度周期物理語(yǔ)義合理熵系數(shù)0.02太大策略太隨機(jī)太小過早收斂可以訓(xùn)練后期逐步減小折扣因子γ0.99影響遠(yuǎn)期回報(bào)的權(quán)重0.99適合天級(jí)調(diào)度如果做小時(shí)級(jí)可以設(shè)0.95懲罰系數(shù)λ100約束違約懲罰力度需要根據(jù)儲(chǔ)能容量、電價(jià)水平動(dòng)態(tài)調(diào)整Worker數(shù)量4~8探索多樣性過多會(huì)導(dǎo)致梯度更新競(jìng)爭(zhēng)加劇不一定更快收斂歸一化方法分通道歸一化防止不同量綱干擾SOC用原始值功率按容量歸一電價(jià)按峰值歸一學(xué)習(xí)率這一列重點(diǎn)說說。A3C的異步機(jī)制對(duì)學(xué)習(xí)率特別敏感——如果學(xué)習(xí)率太大某個(gè)worker推上來(lái)的梯度可能大幅更新全局參數(shù)導(dǎo)致其他worker還在用舊策略采樣出現(xiàn)“策略滯后”的惡性循環(huán)。我一開始用5e-4訓(xùn)練到2000個(gè)episode時(shí)發(fā)現(xiàn)損失函數(shù)震蕩得像心電圖一樣調(diào)低到1e-4才穩(wěn)定下來(lái)。這個(gè)經(jīng)驗(yàn)在換個(gè)場(chǎng)景、換組數(shù)據(jù)時(shí)大概率還會(huì)遇到先調(diào)學(xué)習(xí)率再做別的調(diào)參動(dòng)作。4.4 訓(xùn)練過程中的“觀察指標(biāo)法”怎么判斷策略在變好強(qiáng)化學(xué)習(xí)調(diào)試最難受的地方是Reward曲線看著在上升但你不知道策略是否真的合理。畢竟在微網(wǎng)調(diào)度里Reward是成本的負(fù)值如果環(huán)境里電價(jià)普遍上漲了Reward下降不代表策略變差了。我總結(jié)了一套“觀察指標(biāo)法”來(lái)輔助判斷策略質(zhì)量第一看SOC曲線走勢(shì)。訓(xùn)練到后期每一輪episode的SOC曲線應(yīng)該是平滑的“扣碗形”——白天充電SOC升高、傍晚SOC在高位、夜間放電SOC降低。如果SOC曲線還在上躥下跳說明策略還不穩(wěn)定。第二看PCC交互功率的頻次。合理策略下PCC功率變化不該太頻繁因?yàn)轭l繁改變購(gòu)售電狀態(tài)會(huì)帶來(lái)額外的交易成本。如果PCC功率在相鄰時(shí)段來(lái)回翻轉(zhuǎn)一會(huì)兒買電一會(huì)兒賣電說明策略在“抖”——通常是因?yàn)楠?jiǎng)勵(lì)函數(shù)里的成本項(xiàng)權(quán)重不夠策略對(duì)微小的電價(jià)差異過度敏感。第三看DR削減率與電價(jià)的相關(guān)性。好的策略應(yīng)該是“電價(jià)越高削減越多”而且峰值時(shí)段的削減比例與平谷時(shí)段之間有明顯差異。如果DR削減率在全天都差不多說明智能體沒學(xué)會(huì)“看價(jià)格行事”。這三個(gè)指標(biāo)配合Reward曲線判斷比只看Reward可靠得多。我建議把這些指標(biāo)可視化出來(lái)——畫在一張多子圖的圖里訓(xùn)練過程實(shí)時(shí)刷新一跑就停不下來(lái)。5. 常見問題與排查技巧實(shí)錄5.1 訓(xùn)練不收斂原因和解決方案訓(xùn)練不收斂是DRL項(xiàng)目最常遇到的問題你們跑來(lái)問我的十有八九是這個(gè)。微網(wǎng)調(diào)度場(chǎng)景里不收斂的原因最大的嫌疑就是以下幾個(gè)方面第一個(gè)原因是獎(jiǎng)勵(lì)函數(shù)設(shè)計(jì)不合理。比如成本量級(jí)和懲罰量級(jí)差距過大——購(gòu)電成本幾萬(wàn)元SOC越界懲罰只有幾十——智能體根本感知不到約束懲罰的存在自然學(xué)不出安全的策略。解法把懲罰項(xiàng)系數(shù)調(diào)大或者把成本也歸一化到合理量級(jí)。第二個(gè)原因探索噪聲過大。A3C的動(dòng)作采樣自帶噪聲正態(tài)分布的方差如果方差參數(shù)初始值設(shè)得太大智能體在一個(gè)已經(jīng)很經(jīng)濟(jì)的動(dòng)作附近反復(fù)大幅波動(dòng)導(dǎo)致訓(xùn)練震蕩。解法把Actor的logstd初始值從0改為-2相當(dāng)于初始標(biāo)準(zhǔn)差約0.13探索溫和一些。第三個(gè)原因是狀態(tài)特征沒有被充分觀測(cè)。比如你忘了把“是否工作日”這個(gè)特征放進(jìn)狀態(tài)里智能體就無(wú)法區(qū)分工作日和周末的負(fù)荷模式差異策略只能在兩種模式之間取一個(gè)“折中方案”。解法審視狀態(tài)空間把所有影響調(diào)度決策的已知變量都放進(jìn)去哪怕你覺得“這個(gè)變量大概率沒用”——有它沒它做個(gè)消融實(shí)驗(yàn)再下結(jié)論。5.2 策略學(xué)出壞習(xí)慣過早收斂到局部最優(yōu)有一種情況是訓(xùn)練指標(biāo)看起來(lái)挺好的Reward在穩(wěn)步上升但在仿真測(cè)試?yán)锉憩F(xiàn)很差——常見原因是策略過早收斂到了局部最優(yōu)。微網(wǎng)調(diào)度里的典型局部最優(yōu)是“在所有時(shí)段都用最小購(gòu)電量的策略”。這個(gè)策略在電價(jià)平穩(wěn)或者光伏充足時(shí)很有效但遇到極端天氣連續(xù)陰雨、負(fù)荷尖峰就完全不行。為什么因?yàn)橛?xùn)練數(shù)據(jù)里極端工況出現(xiàn)次數(shù)少智能體過早把大量權(quán)重放在了優(yōu)化常規(guī)工況上極端工況的樣本還沒來(lái)得及影響策略就“來(lái)不及了”。解法有兩個(gè)方向。方向一是修改訓(xùn)練數(shù)據(jù)的采樣方式——不要純隨機(jī)抽取歷史天而是按比例人工“過采樣”極端工況的樣本比如把陰雨天、極熱天的數(shù)據(jù)占比從天然比例約10%提升到30%。方向二是調(diào)整熵系數(shù)——訓(xùn)練前半段用較大的熵系數(shù)0.05鼓勵(lì)充分探索后半段逐步降到0.005讓策略收斂。這種“探索-利用”退火策略雖然簡(jiǎn)單但非常有效。5.3 多工人訓(xùn)練效率低瓶頸往往是環(huán)境交互另一個(gè)常見問題是多worker訓(xùn)練提速不明顯。加了8個(gè)worker訓(xùn)練時(shí)間只快了1.5倍U盤被黃瓜卡位了排查后發(fā)現(xiàn)瓶頸往往不在網(wǎng)絡(luò)更新而在環(huán)境交互——MicroGridEnv.step()函數(shù)里如果有大量Python循環(huán)或非向量化的計(jì)算每個(gè)worker都慢吞吞地跑并行度再高也白搭。優(yōu)化方法有幾個(gè)層次第一層把環(huán)境交互中重復(fù)計(jì)算的部分提取出來(lái)——比如負(fù)荷插值、太陽(yáng)能代入模型這些操作可以在環(huán)境初始化時(shí)預(yù)計(jì)算好step里直接用查表的方式取數(shù)據(jù)。這一步就能把環(huán)境交互耗時(shí)降低50%以上。第二層用numpy批量向量化替代Python循環(huán)。比如計(jì)算成本函數(shù)時(shí)不要一個(gè)時(shí)段一個(gè)時(shí)段地循環(huán)用numpy數(shù)組一次性算完——代碼長(zhǎng)一點(diǎn)但速度差距巨大。第三層如果環(huán)境本身很復(fù)雜比如調(diào)用了外部潮流計(jì)算工具考慮簡(jiǎn)化模型——用線性化的潮流近似替代完整潮流計(jì)算。微網(wǎng)調(diào)度的核心收益函數(shù)并不需要非常精確的潮流結(jié)果用近似模型訓(xùn)練策略再用完整模型做驗(yàn)證這是工業(yè)界很常見也推薦的思路。5.4 測(cè)試集上表現(xiàn)差泛化能力提升三板斧訓(xùn)練時(shí)Reward收斂很好一換測(cè)試集不同的月份、不同的天氣條件效果大幅下降——這是典型的泛化問題。微網(wǎng)調(diào)度場(chǎng)景里泛化能力差的核心原因往往是環(huán)境數(shù)據(jù)分布與訓(xùn)練數(shù)據(jù)分布不一致。解決方案三板斧第一板斧是數(shù)據(jù)擴(kuò)充。除了歷史數(shù)據(jù)用統(tǒng)計(jì)模型生成更多合成場(chǎng)景——比如基于歷史數(shù)據(jù)擬合分布用蒙特卡洛采樣生成大量“看似真實(shí)但未發(fā)生過”的光伏出力和負(fù)荷序列。這些合成數(shù)據(jù)可以極大擴(kuò)充訓(xùn)練集的分布覆蓋范圍。第二板斧是域隨機(jī)化。在訓(xùn)練過程中隨機(jī)調(diào)整環(huán)境參數(shù)——比如光伏出力在原始數(shù)據(jù)的±10%范圍內(nèi)隨機(jī)擾動(dòng)、負(fù)荷在±5%范圍內(nèi)隨機(jī)擾動(dòng)、電價(jià)在±5%內(nèi)擾動(dòng)。這樣一來(lái)智能體學(xué)到的是對(duì)參數(shù)變化不敏感的策略而不是對(duì)特定參數(shù)值“過擬合”的策略。第三板斧是離線評(píng)估法。不要只用一個(gè)測(cè)試集而是構(gòu)建多個(gè)不同分布的測(cè)試集——光照充足的夏季數(shù)據(jù)集、光照不足的冬季數(shù)據(jù)集、高負(fù)荷的過渡季數(shù)據(jù)集——分別評(píng)估策略在各數(shù)據(jù)集上的表現(xiàn)。只有通過多個(gè)不同工況的考核你的策略才算“真的學(xué)會(huì)”了微網(wǎng)調(diào)度。6. 項(xiàng)目延伸與改進(jìn)方向6.1 從單微網(wǎng)走向多微網(wǎng)協(xié)同單微網(wǎng)的調(diào)度策略解決了下一個(gè)順理成章的方向是多微網(wǎng)協(xié)同調(diào)度。多個(gè)微網(wǎng)通過配電網(wǎng)相連時(shí)每個(gè)微網(wǎng)既有本地優(yōu)化目標(biāo)最小化自身運(yùn)行成本又需要和鄰居微網(wǎng)協(xié)調(diào)功率互濟(jì)、共享備用容量。用A3C可以做一個(gè)分布式架構(gòu)每個(gè)微網(wǎng)部署一個(gè)Actor網(wǎng)絡(luò)各自做本地決策通過共享網(wǎng)絡(luò)參數(shù)或通信機(jī)制實(shí)現(xiàn)協(xié)調(diào)。這個(gè)方向我試驗(yàn)過初步版本效果比單獨(dú)優(yōu)化然后“各管各的”好——儲(chǔ)能和DR的調(diào)節(jié)資源可以在不同微網(wǎng)之間動(dòng)態(tài)調(diào)配整體效率提升10%~15%。但從單微網(wǎng)到多微網(wǎng)的跳躍要處理的問題從“算法問題”變成“系統(tǒng)協(xié)調(diào)問題”復(fù)雜度不是一個(gè)量級(jí)的。6.2 從純仿真走向硬件在環(huán)第二個(gè)順延方向是硬件在環(huán)驗(yàn)證。純仿真環(huán)境下訓(xùn)練的策略放到真實(shí)微網(wǎng)控制器上部署會(huì)發(fā)生很多問題——通信延遲、傳感器噪聲、執(zhí)行器誤差、設(shè)備故障等等。硬件在環(huán)思路是把訓(xùn)練好的策略部署到控制器硬件上用真實(shí)的通信協(xié)議和I/O引腳與環(huán)境仿真器連接驗(yàn)證策略的實(shí)時(shí)性和魯棒性。這個(gè)方向的代碼改動(dòng)不大但要處理的問題非常磨人——比如仿真環(huán)境的時(shí)間和物理時(shí)間步不一致、控制器啟動(dòng)初始化時(shí)序、異常值保護(hù)邏輯等。我從純仿真切到硬件在環(huán)大概花了兩周時(shí)間而真正燒錢的地方是你得有真實(shí)硬件。如果你們實(shí)驗(yàn)室有條件值得嘗試條件不夠做純仿真驗(yàn)證強(qiáng)化學(xué)習(xí)策略魯棒性分析也足夠發(fā)表。6.3 從單目標(biāo)到多目標(biāo)經(jīng)濟(jì)性與碳排放聯(lián)合優(yōu)化現(xiàn)在“雙碳”目標(biāo)下微網(wǎng)調(diào)度不能只盯著經(jīng)濟(jì)成本了——碳排放約束和社會(huì)效益也要納入調(diào)度決策。一種做法是給碳排放定價(jià)把它變成成本項(xiàng)加進(jìn)去另一種做法是真正的多目標(biāo)優(yōu)化——用帶約束的DRL比如Lagrangian方法加約束或者多目標(biāo)獎(jiǎng)勵(lì)工程設(shè)計(jì)帕累托前沿搜索把經(jīng)濟(jì)目標(biāo)和碳排放目標(biāo)同時(shí)考慮。我用第一種方式簡(jiǎn)單做過驗(yàn)證——把碳排放價(jià)格設(shè)為50元/噸策略會(huì)顯著減少聯(lián)絡(luò)線購(gòu)電量更多依賴光伏和儲(chǔ)能。但真正的多目標(biāo)優(yōu)化需要?jiǎng)铀惴蚣茈y度上了一個(gè)臺(tái)階。建議等單目標(biāo)的坑全部踩順了再來(lái)碰多目標(biāo)這塊。7. 寫在最后的個(gè)人經(jīng)驗(yàn)這個(gè)項(xiàng)目做下來(lái)我最深的體會(huì)是深度強(qiáng)化學(xué)習(xí)在微網(wǎng)調(diào)度里能不能落地根本不取決于你用A3C還是PPO還是DDPG而取決于你把調(diào)度問題本身想得多清楚。狀態(tài)空間里該放什么變量、獎(jiǎng)勵(lì)函數(shù)里成本項(xiàng)和懲罰項(xiàng)怎么配比、動(dòng)作空間怎么設(shè)計(jì)才能貼合物理約束——這些問題想清楚了選什么算法只是“最后一公里”的事。反過來(lái)如果環(huán)境建模一塌糊涂獎(jiǎng)勵(lì)函數(shù)亂寫一氣再好的DRL算法也救不回來(lái)。我見過不少同學(xué)拿著現(xiàn)成的代碼跑Reward曲線確實(shí)在收斂但把策略拿出來(lái)一分析完全是“撞大運(yùn)”式的調(diào)度——儲(chǔ)能亂充亂放、PCC功率來(lái)回亂跳、DR濫用。這種“掛羊頭賣狗肉”的成果放到真實(shí)微網(wǎng)現(xiàn)場(chǎng)一秒就會(huì)露餡。最后分享一個(gè)小技巧訓(xùn)練好的策略要拿去部署或者做項(xiàng)目匯報(bào)時(shí)不要只展示Reward曲線——這是自?shī)首詷?。學(xué)著把策略的可視化做完整——儲(chǔ)能SOC曲線、PCC功率曲線、DR削減率曲線、成本構(gòu)成堆疊圖——讓不懂強(qiáng)化學(xué)習(xí)的人也能一眼看出你的策略好在哪、和傳統(tǒng)優(yōu)化方法差在哪。這一步看起來(lái)是“錦上添花”實(shí)際上很多時(shí)候是“雪中送炭”。如果后續(xù)你想在這個(gè)方向繼續(xù)深入建議按這個(gè)順序推進(jìn)先搞定單微網(wǎng)經(jīng)濟(jì)調(diào)度再擴(kuò)展到多微網(wǎng)協(xié)同然后考慮多目標(biāo)優(yōu)化最后做硬件在環(huán)驗(yàn)證。每一步都走扎實(shí)了你手里積累的經(jīng)驗(yàn)和代碼就是最值錢的東西。