劉興霖,黃 超,王 龍,羅 熊
(1.北京科技大學(xué) 順德研究生院,廣東 佛山 528399;2.北京科技大學(xué) 計算機與通信工程學(xué)院,北京 100083)
隨著煤炭、石油、天然氣等化石燃料的不斷消耗,環(huán)境、能源問題成為世界關(guān)注的焦點。太陽能作為具有高可用性且用之不竭的清潔能源,被認為是最有前途的能源替代品之一,各國都十分重視太陽能產(chǎn)業(yè)的發(fā)展,特別是光伏產(chǎn)業(yè)[1]。建設(shè)光伏系統(tǒng)已經(jīng)成為可持續(xù)發(fā)展的重要內(nèi)容[2]。國際能源署發(fā)布的2020年全球光伏報告顯示,截止2020年底,全球累計光伏裝機容量760.4 GW,中國、歐盟和美國的新增光伏裝機容量分別以48.2 GW、19.6 GW和19.2 GW的規(guī)模位列前三[3]。然而,具有高波動性和間歇性的太陽能會給電力系統(tǒng)的管理帶來巨大挑戰(zhàn)[4-5]。因此,隨著全球光伏裝機容量的不斷提升,光伏功率預(yù)測的準確性對于電網(wǎng)管理和電力調(diào)度至關(guān)重要[6]。
預(yù)測方法中,有兩類常用的方法,即物理法和統(tǒng)計法。物理法的優(yōu)勢在于不需要歷史運行數(shù)據(jù),但在對復(fù)雜天氣的抗干擾能力方面有一定缺陷[7-8]。統(tǒng)計法包括線性算法如自回歸等,還包括非線性算法如人工神經(jīng)網(wǎng)絡(luò)[9]、支持向量機(support vector machine,SVM)[10]、高斯過程回歸(Gaussian process regression, GPR)[11]、深度學(xué)習(xí)(deep learning,DL)[12-14]等。深度學(xué)習(xí)具有較強的抗干擾性,能夠更好地挖掘出數(shù)據(jù)之間的關(guān)系。而深度學(xué)習(xí)模型中的長短期記憶(long-short-term memory,LSTM)神經(jīng)網(wǎng)絡(luò)[15-16]是對循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)[17]的優(yōu)化,引入了“記憶塊”,可以使得LSTM對歷史數(shù)據(jù)進行充分的學(xué)習(xí)。K-means算法是一種經(jīng)典的聚類算法,文獻[18]通過K-means算法對訓(xùn)練樣本集進行聚類分析,在聚類得到的各類別數(shù)據(jù)上分別訓(xùn)練支持向量機,并根據(jù)預(yù)測樣本的類別選擇對應(yīng)的支持向量機進行發(fā)電功率預(yù)測。
基于神經(jīng)網(wǎng)絡(luò)的預(yù)測模型通常以均方誤差(mean square error,MSE)為損失函數(shù)訓(xùn)練模型[19]。以MSE為損失函數(shù)訓(xùn)練模型易于收斂,但MSE對離群點敏感。而光伏發(fā)電功率高度依賴于太陽輻射值,可在數(shù)分鐘內(nèi)劇烈變化,較易產(chǎn)生離群點。為此,以通過降低對離群點懲罰程度的Huber損失函數(shù)訓(xùn)練模型,可使得模型對離群點更加魯棒[20]。在此基礎(chǔ)上,可采用智能優(yōu)化算法對Huber損失函數(shù)中的超參數(shù)進行優(yōu)化。而高效的全局搜索技術(shù)才能更好地解決參數(shù)尋優(yōu)問題。鯨魚優(yōu)化算法[21](whale optimization algorithm,WOA)是一種新型啟發(fā)式優(yōu)化算法,并且已被用于優(yōu)化各個領(lǐng)域。相比于遺傳算法等傳統(tǒng)進化算法,WOA具有計算簡單和收斂速度快等優(yōu)點。因此,該文選擇WOA作為Huber損失函數(shù)的優(yōu)化算法。
基于以上分析,該文提出基于K-means聚類分析和LSTM算法相結(jié)合的光伏發(fā)電功率日前逐時魯棒預(yù)測模型。首先,基于K-means算法以天氣預(yù)報數(shù)據(jù)為特征將光伏數(shù)據(jù)進行分類,再針對每一類數(shù)據(jù)分別建立基于LSTM算法的預(yù)測模型。為了提升模型的魯棒性,使用Huber損失函數(shù),并結(jié)合WOA訓(xùn)練模型。為驗證提出的預(yù)測模型的有效性,以GEFCom2014能源預(yù)測競賽[22]中的光伏數(shù)據(jù)開展實例研究。研究結(jié)果表明:(1)與MSE和一般的Huber損失函數(shù)相比,經(jīng)WOA優(yōu)化的Huber損失函數(shù)可有效提升模型的預(yù)測精度;(2)與傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)、LSTM、Autoformer[23]、時間融合Transformers (temporal fusion transformers,TFT)[24]及基于決策樹算法的梯度提升框架模型LightGBM[25]相比,K-means與LSTM相結(jié)合的預(yù)測模型可進一步提升預(yù)測精度。
一般來說,天氣狀況分為兩種類型:如晴空天氣與陰雨天氣,利用K-means聚類算法分析太陽輻照度、溫度、降雨量等環(huán)境因素,按照晴空天氣與陰雨天氣各自聚類,以實現(xiàn)將數(shù)據(jù)集按照不同天氣類型分類。該算法將樣本根據(jù)相似度聚集到k個聚簇當(dāng)中,最終實現(xiàn)各個簇內(nèi)相似度高,簇間相似度低[26]。步驟如下:
步驟一:從數(shù)據(jù)集中隨機選擇k個樣本數(shù)據(jù),并作為初始聚類中心{μ1,μ2,…,μk};
步驟二:計算剩余樣本到每一個初始中心點的歐氏距離,選擇距離最近的初始聚類中心形成k簇。距離計算公式如式(1)所示:
(1)
式中,x為樣本空間中的樣本;μi為簇Ci的質(zhì)心。
步驟三:對各個簇重新計算聚類中心。聚類中心計算公式如式(2)所示:
(2)
最后重復(fù)步驟二和步驟三直到條件被滿足或者達到最大迭代次數(shù)而終止,終止條件為:
|μn+1-μn|≤ε
(3)
式中,ε為閾值條件。
LSTM神經(jīng)網(wǎng)絡(luò)由輸入層、隱含層和輸出層組成,其中隱含層包含輸入門、遺忘門、輸出門和具有特殊記憶細胞的神經(jīng)單元,其單元結(jié)構(gòu)如圖1所示。
圖1 LSTM單元結(jié)構(gòu)
ft=σ(WfXt+UfHt-1+bf)
(4)
it=σ(WiXt+UiHt-1+bi)
(5)
ot=σ(WoXt+UoHt-1+bo)
(6)
(7)
(8)
Ht=ottanh(Ct)
(9)
式中,ft為遺忘門;it為輸入門;ot為輸出門;C為記憶細胞狀態(tài)的向量值;W為隱藏單元的輸入權(quán)重矩陣;U為輸出權(quán)重矩陣;b為偏置向量;下標t-1和t分別代表不同的時間步長;σ為sigmoid函數(shù)。
在WOA過程中,每條鯨魚都有兩種行為。一種是包圍獵物,鯨魚會迅速包圍獵物,螺旋形縮小圈。另一種是利用泡沫網(wǎng),鯨魚發(fā)現(xiàn)獵物后,排出氣泡迫使獵物聚集。在每一個迭代過程中,鯨魚會在這兩種行為之間隨機選擇進行捕獵。為了模擬這些行為,根據(jù)隨機概率q,在每一代鯨魚中以50%的概率選擇兩種行為之一,并定義為:
(10)
該文研究基于日前逐時天氣預(yù)報信息的光伏功率預(yù)測方法。主要天氣預(yù)報信息包括:總液態(tài)水、總冰水、表面壓力、1 000毫巴時的相對濕度、總云量、10米水平風(fēng)分量、10米垂直風(fēng)分量、2米溫度、地面太陽輻射總量、地面散熱總量、大氣頂部的凈太陽輻射總量、總降水量。這些變量都是基于衛(wèi)星數(shù)據(jù)的預(yù)測量。
針對光伏功率特性,該文提出K-means和LSTM相結(jié)合的光伏發(fā)電功率日前逐時預(yù)測模型,即先用K-means算法以天氣預(yù)報信息為特征將數(shù)據(jù)進行分類,再針對不同類的數(shù)據(jù)建立基于LSTM算法的預(yù)測模型。整體流程如圖2所示,對關(guān)鍵步驟的描述如下:
圖2 光伏輸出功率的預(yù)測過程
步驟一:數(shù)據(jù)預(yù)處理,如:數(shù)據(jù)歸一化以及累積變量的預(yù)處理,并劃分訓(xùn)練集和測試集。
步驟二:天氣聚類分析。從樣本數(shù)據(jù)集中總結(jié)并提煉出能夠明顯表現(xiàn)天氣類型的特征數(shù)據(jù),如單日日間的太陽輻照度和降雨量等。利用K-means聚類算法和提取后的特征數(shù)據(jù),并根據(jù)晴空天氣和陰雨天氣設(shè)置k=2,將訓(xùn)練集和測試集分為晴空天氣訓(xùn)練集、晴空天氣測試集、陰雨天氣訓(xùn)練集和陰雨天氣測試集。
步驟三:建立基于LSTM算法的預(yù)測模型。模型輸入為時間和日前逐時天氣預(yù)報信息;模型的輸入層神經(jīng)元個數(shù)為輸入數(shù)據(jù)維度;考慮到模型擬合效果和訓(xùn)練時間,隱含層的層數(shù)設(shè)定為3層,并設(shè)定Dropout值以防止過擬合;輸出層的前一層為全連接層;模型輸出為預(yù)測時刻的發(fā)電功率。
步驟四:采用Huber損失函數(shù)(詳見2.2節(jié))訓(xùn)練LSTM神經(jīng)網(wǎng)絡(luò),同時引入WOA,針對各個模型中的Huber損失函數(shù),優(yōu)化得到對應(yīng)的超參數(shù)δ,并將采用優(yōu)化后所得到的結(jié)果與優(yōu)化前和使用MSE的結(jié)果進行對比。
步驟五:算例驗證與實驗結(jié)果分析。將K-means聚類分析后的訓(xùn)練集和測試集,結(jié)合LSTM進行訓(xùn)練和預(yù)測,得到預(yù)測結(jié)果后,將其評價指標與BP、LSTM、Autoformer、TFT及LightGBM算法進行比較。
采用Huber損失函數(shù)用于預(yù)測模型的訓(xùn)練。Huber損失函數(shù)是一種用于回歸問題的帶參損失函數(shù),與常用的L1、L2損失函數(shù)相比,降低了對離群點的懲罰程度,并結(jié)合MSE和MAE的優(yōu)點,對異常點更加魯棒,以此來提高模型的魯棒性。Huber損失函數(shù)如式(11)所示。當(dāng)|pi-Pi|≤δ時,Huber損失等價為MSE;當(dāng)|pi-Pi|>δ時,Huber損失趨向于MAE。
(11)
式中,pi為光伏發(fā)電功率實際值;Pi為光伏發(fā)電功率預(yù)測值;δ為閾值,用來判斷模型應(yīng)如何處理異常值。
文中采用的實驗環(huán)境為Windows10操作系統(tǒng),在Pycharm2021.1的anaconda環(huán)境下使用python進行編程,版本號為3.6,并搭建TensorFlow框架,版本號為2.4。
所選數(shù)據(jù)集來自于2014年GEFCom2014能源預(yù)測競賽。選擇該競賽中光伏預(yù)測方向的數(shù)據(jù)集,該數(shù)據(jù)集取自澳大利亞某個地區(qū)的三座太陽能發(fā)電廠,時間段為2012年4月1日至2014年7月1日,數(shù)據(jù)時間分辨率為1 h。在K-means聚類分類和建立LSTM神經(jīng)網(wǎng)絡(luò)之前對所有特征進行歸一化處理,使得各數(shù)值統(tǒng)一取值為0到1之間。此外,光伏發(fā)電功率在原始數(shù)據(jù)中已做歸一化處理,所以在后續(xù)的評價指標計算時,得到的均為歸一化后的值。
數(shù)據(jù)預(yù)處理中首先要處理的是四個累積變量,即地面太陽輻射總量、地面散熱下降總量、大氣頂部的凈太陽輻射總量和總降水量。這四個變量在每一時刻的數(shù)據(jù)都是單日內(nèi)從零時起到某時的累積量,所以需要將這四個累積變量的各個時刻都處理為每小時的增量。處理后的四個新變量命名為每小時地面太陽輻射量、每小時地面散熱量、每小時大氣頂部的凈太陽輻射量和每小時降水量。
其次要處理的是時間戳,將時間信息字符串處理為可以直接輸入到模型中的年、月、日、小時四個變量。原始數(shù)據(jù)采用的時間是世界標準時間,但由于當(dāng)?shù)貢r間與預(yù)期的太陽輻射進程是匹配的,所以在后續(xù)實驗中根據(jù)當(dāng)?shù)貢r間來處理更為便捷。最后,由于需要對三個電廠的所有數(shù)據(jù)進行實驗,但電廠2和電廠3中存在部分無效數(shù)據(jù)。在剔除它們后,將2012年4月1日至2014年3月30日內(nèi)的數(shù)據(jù)設(shè)定為訓(xùn)練集,將2014年4月1日至2014年7月1日內(nèi)的數(shù)據(jù)設(shè)定為測試集。最終訓(xùn)練集以及測試集劃分后的天數(shù)如表1所示。
可用于天氣聚類分析的信息包括日內(nèi)24個時間點的氣象變量,數(shù)據(jù)維度較高。為提升天氣分類的準確度,天氣預(yù)報數(shù)據(jù)中選出或衍生出更具代表意義的特征。通過分析特征與光伏發(fā)電量的相關(guān)性,選擇以下氣象變量用于天氣聚類分析:單日最高地面太陽輻射量、單日最高凈太陽輻射量、單日日間最高降水量、單日日間最高液態(tài)水量、單日日間最高冰水量、單日日間平均云量,其中單日日間設(shè)定的時間段為6:00-18:00。結(jié)合K-means聚類算法將光伏發(fā)電日的天氣類型分為兩類,即晴空天氣和陰雨天氣。三個電廠的訓(xùn)練集和測試集天氣聚類分析結(jié)果如表1所示。
表1 各電廠訓(xùn)練集和測試集的劃分和聚類分析結(jié)果
根據(jù)3.2中的聚類結(jié)果,針對晴空天氣類型訓(xùn)練子集和陰雨天氣類型訓(xùn)練子集以及完整訓(xùn)練集分別訓(xùn)練LSTM預(yù)測模型,并依次命名為LSTM1、LSTM2和LSTM3。根據(jù)2.1中的LSTM網(wǎng)絡(luò)結(jié)構(gòu),基于Python的TensorFlow框架中的keras.layers.LSTM搭建LSTM神經(jīng)網(wǎng)絡(luò)。預(yù)測模型的輸入包括時間與氣象特征,共13個:小時、總液態(tài)水、總冰水、表面壓力、1 000毫巴時的相對濕度、總云量、10米水平風(fēng)分量、10米垂直風(fēng)分量、2米的溫度、每小時地面太陽輻射、每小時地面散熱下降量、每小時大氣頂部的凈太陽輻射量和每小時降水量。同時,三個LSTM模型參數(shù)設(shè)置為:第一層LSTM神經(jīng)元個數(shù)及其dropout均為50和0.4;而第二層的神經(jīng)元個數(shù)以及dropout分別設(shè)置為LSTM1:100、0.2,LSTM2:80、0.4,LSTM3:100、0.2;第三層神經(jīng)元個數(shù)均為50;batch_size均為32;最后的Dense層神經(jīng)元個數(shù)為1。
在LSTM模型的訓(xùn)練階段,選擇Huber損失函數(shù)并采用WOA優(yōu)化其超參數(shù)δ來提高模型的性能。由于該文預(yù)測任務(wù)中的光伏發(fā)電功率數(shù)據(jù)為歸一化值,可將需要優(yōu)化的δ的搜索范圍設(shè)定為[0.000 01,1],然后進行迭代優(yōu)化。WOA參數(shù)設(shè)置為:種群規(guī)模為80,最大迭代次數(shù)為500。同時,與使用MSE和一般Huber損失函數(shù)獲得的結(jié)果進行對比。
以平均絕對誤差(mean absolute error,MAE)、均方根誤差(root mean square error,RMSE)、決定系數(shù)R2為指標進行誤差計算,計算公式為:
(12)
(13)
(14)
為展示損失函數(shù)對光伏功率預(yù)測性能的影響,分別采用MSE損失函數(shù)、一般Huber損失函數(shù)和WOA優(yōu)化后的Huber損失函數(shù)來訓(xùn)練LSTM1、LSTM2和LSTM3。表2比較了基于不同損失函數(shù)訓(xùn)練的模型在測試集上的預(yù)計精度(RMSE值)。
表2 采用不同損失函數(shù)時的RMSE誤差結(jié)果對比
表2表明,與MSE損失函數(shù)相比,采用一般Huber損失函數(shù)訓(xùn)練LSTM神經(jīng)網(wǎng)絡(luò),大多數(shù)情況下都能獲得1 %左右的精度提升。而相比于一般的Huber損失函數(shù),采用WOA優(yōu)化后的Huber損失函數(shù)能夠更加適應(yīng)模型,并且RMSE值也降低了1%~2%。由此可以得出對于一般的光伏功率預(yù)測問題,不僅一般的Huber損失函數(shù)能夠通過提升模型的魯棒性,得到比MSE更加精確的預(yù)測結(jié)果,采用WOA優(yōu)化后的Huber損失函數(shù)可以得到優(yōu)于前兩者的實驗精度。說明光伏數(shù)據(jù)中離群點的存在會影響模型的精度,并且再經(jīng)過WOA的優(yōu)化,可以使得Huber損失函數(shù)更加貼合模型,提高其學(xué)習(xí)能力。為此,后續(xù)實驗結(jié)果分析都基于WOA優(yōu)化后Huber損失函數(shù)訓(xùn)練的預(yù)測模型。
表3比較了各預(yù)測模型在測試集上對不同天氣類型的預(yù)測精度。測試結(jié)果表明:在晴空天氣下,LSTM3模型比LSTM1模型的表現(xiàn)更優(yōu),即選用完整訓(xùn)練集訓(xùn)練預(yù)測模型可提高晴空天氣條件下的預(yù)測精度;在陰雨天氣條件下,LSTM2模型比LSTM3模型的表現(xiàn)更好,即選用陰雨天氣訓(xùn)練子集訓(xùn)練預(yù)測模型可提高陰雨條件下的預(yù)測精度。
表3 不同天氣條件下的預(yù)測性能
圖3展示了2014年4月23、24日晴空天氣下三個電廠的LSTM3預(yù)測結(jié)果;圖4展示了2014年5月4、5日陰雨天氣下三個電廠連續(xù)五天的LSTM2預(yù)測結(jié)果。所使用的數(shù)據(jù)集為兩年以上的數(shù)據(jù),由于K-means分類為晴空天氣和陰雨天氣兩類數(shù)據(jù)時存在分類不夠準確的情況,如:在分類后的晴空天氣數(shù)據(jù)集中存在2%左右的陰雨天氣數(shù)據(jù)。所以在晴空天氣下,使用完整訓(xùn)練集得到的模型能夠?qū)π〔糠值年幱晏鞖庥兄玫臄M合效果。同理,分類后的陰雨天氣訓(xùn)練子集與測試子集也存在小部分晴天數(shù)據(jù),但數(shù)據(jù)中都仍以陰雨天氣為主,所以相比于以晴空天氣為主的未分類訓(xùn)練集,采用分類后的陰雨天氣訓(xùn)練子集可使測試數(shù)據(jù)達到更好的擬合效果。但又限于陰雨天氣條件下的功率預(yù)測會受到更加復(fù)雜的因素影響,如單日內(nèi)波動較大的降雨量、降雪量、溫度、總云量等,其總體誤差均比晴空天氣條件下的偏大。
圖3 三個電廠在晴空天氣條件下連續(xù)五天的光伏功率預(yù)測結(jié)果
圖4 三個電廠在陰雨天氣條件下連續(xù)五天的光伏功率預(yù)測結(jié)果
以上分析表明,基于K-means聚類分析結(jié)果,LSTM2與LSTM3結(jié)合即LSTM2用于聚類分析后的陰雨天氣預(yù)測和LSTM3用于聚類分析后的晴空天氣預(yù)測兩種方法的結(jié)合可提高整體的預(yù)測精度。表4中展示了基于K-means和結(jié)合后的LSTM模型方法在整個測試集上的預(yù)測性能。
為進一步驗證提出的K-means天氣聚類分析與LSTM預(yù)測模型相結(jié)合對光伏發(fā)電功率預(yù)測的有效性,比較了所提出的預(yù)測方法與傳統(tǒng)BP和LSTM算法以及Autoformer、TFT和LightGBM算法,結(jié)果如表4所示。所有對比方法的訓(xùn)練均基于未進行天氣分類的完整訓(xùn)練集,預(yù)測結(jié)果均為相應(yīng)模型在整個測試集上的表現(xiàn)。
表4 不同預(yù)測方法預(yù)測性能比較
根據(jù)表4給出的結(jié)果,可以看出與其他算法相比,除Autoformer與文中模型在電廠1中的誤差比較接近,提出的預(yù)測模型的評價指標在三個電廠的數(shù)據(jù)集中均為最優(yōu)。與傳統(tǒng)的LSTM相比,提出的模型在電廠1、電廠2、電廠3中的平均RMSE與MAE分別降低了4.86%與4.33%;與Autoformer算法相比,提出的模型在三個電廠中的平均RMSE與MAE分別降低了2.35%、1.85%;與TFT算法相比,文中模型的平均RMSE與MAE分別降低了1.88%與2.91%;與LightGBM算法相比,文中模型的平均RMSE與MAE分別降低了6.06%與1.89%。結(jié)果證明了文中模型和數(shù)據(jù)處理方法的可行性與有效性,并且在預(yù)測精度和穩(wěn)定性方面均表現(xiàn)出較好的性能。
該文提出基于K-means的天氣聚類分析和LSTM相結(jié)合的光伏發(fā)電功率日前逐時預(yù)測方法,并從損失函數(shù)和訓(xùn)練集的選擇上做出研究分析,結(jié)果表明:
(1)在光伏發(fā)電預(yù)測模型中損失函數(shù)的選擇上,Huber損失函數(shù)相比于MSE具有更強的魯棒性,能更好地處理光伏數(shù)據(jù)中的離群點,在此基礎(chǔ)之上,選擇鯨魚優(yōu)化算法對Huber損失函數(shù)中的δ實現(xiàn)進一步的優(yōu)化,從而能有效地提高光伏預(yù)測模型的準確度,總體可將預(yù)測精度提高2%左右。
(2)基于K-means算法將數(shù)據(jù)分類為晴空天氣類型和陰雨天氣類型,在聚類得到的各類別訓(xùn)練集上分別訓(xùn)練LSTM,并根據(jù)測試集的類別選擇對應(yīng)的LSTM進行光伏發(fā)電功率的預(yù)測。研究結(jié)果表明,提出的K-means與LSTM相結(jié)合的預(yù)測方法比單獨的LSTM以及LightGBM的預(yù)測效果更好,預(yù)測精度提升在4%左右,同時對比Autoformer算法和TFT算法,預(yù)測精度提升約2%。
(3)基于K-means算法對天氣進行聚類分析時,存在對一小部分天氣數(shù)據(jù)分類錯誤的情況。在后續(xù)的研究工作中,可結(jié)合其他機器學(xué)習(xí)算法,提高分類的準確率,進一步提高預(yù)測精度。