劉興霖,黃 超,王 龍,羅 熊
(1.北京科技大學 順德研究生院,廣東 佛山 528399;2.北京科技大學 計算機與通信工程學院,北京 100083)
隨著煤炭、石油、天然氣等化石燃料的不斷消耗,環境、能源問題成為世界關注的焦點。太陽能作為具有高可用性且用之不竭的清潔能源,被認為是最有前途的能源替代品之一,各國都十分重視太陽能產業的發展,特別是光伏產業[1]。建設光伏系統已經成為可持續發展的重要內容[2]。國際能源署發布的2020年全球光伏報告顯示,截止2020年底,全球累計光伏裝機容量760.4 GW,中國、歐盟和美國的新增光伏裝機容量分別以48.2 GW、19.6 GW和19.2 GW的規模位列前三[3]。然而,具有高波動性和間歇性的太陽能會給電力系統的管理帶來巨大挑戰[4-5]。因此,隨著全球光伏裝機容量的不斷提升,光伏功率預測的準確性對于電網管理和電力調度至關重要[6]。
預測方法中,有兩類常用的方法,即物理法和統計法。物理法的優勢在于不需要歷史運行數據,但在對復雜天氣的抗干擾能力方面有一定缺陷[7-8]。統計法包括線性算法如自回歸等,還包括非線性算法如人工神經網絡[9]、支持向量機(support vector machine,SVM)[10]、高斯過程回歸(Gaussian process regression, GPR)[11]、深度學習(deep learning,DL)[12-14]等。深度學習具有較強的抗干擾性,能夠更好地挖掘出數據之間的關系。而深度學習模型中的長短期記憶(long-short-term memory,LSTM)神經網絡[15-16]是對循環神經網絡(recurrent neural network,RNN)[17]的優化,引入了“記憶塊”,可以使得LSTM對歷史數據進行充分的學習。K-means算法是一種經典的聚類算法,文獻[18]通過K-means算法對訓練樣本集進行聚類分析,在聚類得到的各類別數據上分別訓練支持向量機,并根據預測樣本的類別選擇對應的支持向量機進行發電功率預測。
基于神經網絡的預測模型通常以均方誤差(mean square error,MSE)為損失函數訓練模型[19]。以MSE為損失函數訓練模型易于收斂,但MSE對離群點敏感。而光伏發電功率高度依賴于太陽輻射值,可在數分鐘內劇烈變化,較易產生離群點。為此,以通過降低對離群點懲罰程度的Huber損失函數訓練模型,可使得模型對離群點更加魯棒[20]。在此基礎上,可采用智能優化算法對Huber損失函數中的超參數進行優化。而高效的全局搜索技術才能更好地解決參數尋優問題。鯨魚優化算法[21](whale optimization algorithm,WOA)是一種新型啟發式優化算法,并且已被用于優化各個領域。相比于遺傳算法等傳統進化算法,WOA具有計算簡單和收斂速度快等優點。因此,該文選擇WOA作為Huber損失函數的優化算法。
基于以上分析,該文提出基于K-means聚類分析和LSTM算法相結合的光伏發電功率日前逐時魯棒預測模型。首先,基于K-means算法以天氣預報數據為特征將光伏數據進行分類,再針對每一類數據分別建立基于LSTM算法的預測模型。為了提升模型的魯棒性,使用Huber損失函數,并結合WOA訓練模型。為驗證提出的預測模型的有效性,以GEFCom2014能源預測競賽[22]中的光伏數據開展實例研究。研究結果表明:(1)與MSE和一般的Huber損失函數相比,經WOA優化的Huber損失函數可有效提升模型的預測精度;(2)與傳統的BP神經網絡、LSTM、Autoformer[23]、時間融合Transformers (temporal fusion transformers,TFT)[24]及基于決策樹算法的梯度提升框架模型LightGBM[25]相比,K-means與LSTM相結合的預測模型可進一步提升預測精度。
一般來說,天氣狀況分為兩種類型:如晴空天氣與陰雨天氣,利用K-means聚類算法分析太陽輻照度、溫度、降雨量等環境因素,按照晴空天氣與陰雨天氣各自聚類,以實現將數據集按照不同天氣類型分類。該算法將樣本根據相似度聚集到k個聚簇當中,最終實現各個簇內相似度高,簇間相似度低[26]。步驟如下:
步驟一:從數據集中隨機選擇k個樣本數據,并作為初始聚類中心{μ1,μ2,…,μk};
步驟二:計算剩余樣本到每一個初始中心點的歐氏距離,選擇距離最近的初始聚類中心形成k簇。距離計算公式如式(1)所示:
(1)
式中,x為樣本空間中的樣本;μi為簇Ci的質心。
步驟三:對各個簇重新計算聚類中心。聚類中心計算公式如式(2)所示:
(2)
最后重復步驟二和步驟三直到條件被滿足或者達到最大迭代次數而終止,終止條件為:
|μn+1-μn|≤ε
(3)
式中,ε為閾值條件。
LSTM神經網絡由輸入層、隱含層和輸出層組成,其中隱含層包含輸入門、遺忘門、輸出門和具有特殊記憶細胞的神經單元,其單元結構如圖1所示。

圖1 LSTM單元結構

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為記憶細胞狀態的向量值;W為隱藏單元的輸入權重矩陣;U為輸出權重矩陣;b為偏置向量;下標t-1和t分別代表不同的時間步長;σ為sigmoid函數。
在WOA過程中,每條鯨魚都有兩種行為。一種是包圍獵物,鯨魚會迅速包圍獵物,螺旋形縮小圈。另一種是利用泡沫網,鯨魚發現獵物后,排出氣泡迫使獵物聚集。在每一個迭代過程中,鯨魚會在這兩種行為之間隨機選擇進行捕獵。為了模擬這些行為,根據隨機概率q,在每一代鯨魚中以50%的概率選擇兩種行為之一,并定義為:

(10)

該文研究基于日前逐時天氣預報信息的光伏功率預測方法。主要天氣預報信息包括:總液態水、總冰水、表面壓力、1 000毫巴時的相對濕度、總云量、10米水平風分量、10米垂直風分量、2米溫度、地面太陽輻射總量、地面散熱總量、大氣頂部的凈太陽輻射總量、總降水量。這些變量都是基于衛星數據的預測量。
針對光伏功率特性,該文提出K-means和LSTM相結合的光伏發電功率日前逐時預測模型,即先用K-means算法以天氣預報信息為特征將數據進行分類,再針對不同類的數據建立基于LSTM算法的預測模型。整體流程如圖2所示,對關鍵步驟的描述如下:

圖2 光伏輸出功率的預測過程
步驟一:數據預處理,如:數據歸一化以及累積變量的預處理,并劃分訓練集和測試集。
步驟二:天氣聚類分析。從樣本數據集中總結并提煉出能夠明顯表現天氣類型的特征數據,如單日日間的太陽輻照度和降雨量等。利用K-means聚類算法和提取后的特征數據,并根據晴空天氣和陰雨天氣設置k=2,將訓練集和測試集分為晴空天氣訓練集、晴空天氣測試集、陰雨天氣訓練集和陰雨天氣測試集。
步驟三:建立基于LSTM算法的預測模型。模型輸入為時間和日前逐時天氣預報信息;模型的輸入層神經元個數為輸入數據維度;考慮到模型擬合效果和訓練時間,隱含層的層數設定為3層,并設定Dropout值以防止過擬合;輸出層的前一層為全連接層;模型輸出為預測時刻的發電功率。
步驟四:采用Huber損失函數(詳見2.2節)訓練LSTM神經網絡,同時引入WOA,針對各個模型中的Huber損失函數,優化得到對應的超參數δ,并將采用優化后所得到的結果與優化前和使用MSE的結果進行對比。
步驟五:算例驗證與實驗結果分析。將K-means聚類分析后的訓練集和測試集,結合LSTM進行訓練和預測,得到預測結果后,將其評價指標與BP、LSTM、Autoformer、TFT及LightGBM算法進行比較。
采用Huber損失函數用于預測模型的訓練。Huber損失函數是一種用于回歸問題的帶參損失函數,與常用的L1、L2損失函數相比,降低了對離群點的懲罰程度,并結合MSE和MAE的優點,對異常點更加魯棒,以此來提高模型的魯棒性。Huber損失函數如式(11)所示。當|pi-Pi|≤δ時,Huber損失等價為MSE;當|pi-Pi|>δ時,Huber損失趨向于MAE。
(11)
式中,pi為光伏發電功率實際值;Pi為光伏發電功率預測值;δ為閾值,用來判斷模型應如何處理異常值。
文中采用的實驗環境為Windows10操作系統,在Pycharm2021.1的anaconda環境下使用python進行編程,版本號為3.6,并搭建TensorFlow框架,版本號為2.4。
所選數據集來自于2014年GEFCom2014能源預測競賽。選擇該競賽中光伏預測方向的數據集,該數據集取自澳大利亞某個地區的三座太陽能發電廠,時間段為2012年4月1日至2014年7月1日,數據時間分辨率為1 h。在K-means聚類分類和建立LSTM神經網絡之前對所有特征進行歸一化處理,使得各數值統一取值為0到1之間。此外,光伏發電功率在原始數據中已做歸一化處理,所以在后續的評價指標計算時,得到的均為歸一化后的值。
數據預處理中首先要處理的是四個累積變量,即地面太陽輻射總量、地面散熱下降總量、大氣頂部的凈太陽輻射總量和總降水量。這四個變量在每一時刻的數據都是單日內從零時起到某時的累積量,所以需要將這四個累積變量的各個時刻都處理為每小時的增量。處理后的四個新變量命名為每小時地面太陽輻射量、每小時地面散熱量、每小時大氣頂部的凈太陽輻射量和每小時降水量。
其次要處理的是時間戳,將時間信息字符串處理為可以直接輸入到模型中的年、月、日、小時四個變量。原始數據采用的時間是世界標準時間,但由于當地時間與預期的太陽輻射進程是匹配的,所以在后續實驗中根據當地時間來處理更為便捷。最后,由于需要對三個電廠的所有數據進行實驗,但電廠2和電廠3中存在部分無效數據。在剔除它們后,將2012年4月1日至2014年3月30日內的數據設定為訓練集,將2014年4月1日至2014年7月1日內的數據設定為測試集。最終訓練集以及測試集劃分后的天數如表1所示。
可用于天氣聚類分析的信息包括日內24個時間點的氣象變量,數據維度較高。為提升天氣分類的準確度,天氣預報數據中選出或衍生出更具代表意義的特征。通過分析特征與光伏發電量的相關性,選擇以下氣象變量用于天氣聚類分析:單日最高地面太陽輻射量、單日最高凈太陽輻射量、單日日間最高降水量、單日日間最高液態水量、單日日間最高冰水量、單日日間平均云量,其中單日日間設定的時間段為6:00-18:00。結合K-means聚類算法將光伏發電日的天氣類型分為兩類,即晴空天氣和陰雨天氣。三個電廠的訓練集和測試集天氣聚類分析結果如表1所示。

表1 各電廠訓練集和測試集的劃分和聚類分析結果
根據3.2中的聚類結果,針對晴空天氣類型訓練子集和陰雨天氣類型訓練子集以及完整訓練集分別訓練LSTM預測模型,并依次命名為LSTM1、LSTM2和LSTM3。根據2.1中的LSTM網絡結構,基于Python的TensorFlow框架中的keras.layers.LSTM搭建LSTM神經網絡。預測模型的輸入包括時間與氣象特征,共13個:小時、總液態水、總冰水、表面壓力、1 000毫巴時的相對濕度、總云量、10米水平風分量、10米垂直風分量、2米的溫度、每小時地面太陽輻射、每小時地面散熱下降量、每小時大氣頂部的凈太陽輻射量和每小時降水量。同時,三個LSTM模型參數設置為:第一層LSTM神經元個數及其dropout均為50和0.4;而第二層的神經元個數以及dropout分別設置為LSTM1:100、0.2,LSTM2:80、0.4,LSTM3:100、0.2;第三層神經元個數均為50;batch_size均為32;最后的Dense層神經元個數為1。
在LSTM模型的訓練階段,選擇Huber損失函數并采用WOA優化其超參數δ來提高模型的性能。由于該文預測任務中的光伏發電功率數據為歸一化值,可將需要優化的δ的搜索范圍設定為[0.000 01,1],然后進行迭代優化。WOA參數設置為:種群規模為80,最大迭代次數為500。同時,與使用MSE和一般Huber損失函數獲得的結果進行對比。
以平均絕對誤差(mean absolute error,MAE)、均方根誤差(root mean square error,RMSE)、決定系數R2為指標進行誤差計算,計算公式為:
(12)
(13)
(14)

為展示損失函數對光伏功率預測性能的影響,分別采用MSE損失函數、一般Huber損失函數和WOA優化后的Huber損失函數來訓練LSTM1、LSTM2和LSTM3。表2比較了基于不同損失函數訓練的模型在測試集上的預計精度(RMSE值)。

表2 采用不同損失函數時的RMSE誤差結果對比
表2表明,與MSE損失函數相比,采用一般Huber損失函數訓練LSTM神經網絡,大多數情況下都能獲得1 %左右的精度提升。而相比于一般的Huber損失函數,采用WOA優化后的Huber損失函數能夠更加適應模型,并且RMSE值也降低了1%~2%。由此可以得出對于一般的光伏功率預測問題,不僅一般的Huber損失函數能夠通過提升模型的魯棒性,得到比MSE更加精確的預測結果,采用WOA優化后的Huber損失函數可以得到優于前兩者的實驗精度。說明光伏數據中離群點的存在會影響模型的精度,并且再經過WOA的優化,可以使得Huber損失函數更加貼合模型,提高其學習能力。為此,后續實驗結果分析都基于WOA優化后Huber損失函數訓練的預測模型。
表3比較了各預測模型在測試集上對不同天氣類型的預測精度。測試結果表明:在晴空天氣下,LSTM3模型比LSTM1模型的表現更優,即選用完整訓練集訓練預測模型可提高晴空天氣條件下的預測精度;在陰雨天氣條件下,LSTM2模型比LSTM3模型的表現更好,即選用陰雨天氣訓練子集訓練預測模型可提高陰雨條件下的預測精度。

表3 不同天氣條件下的預測性能
圖3展示了2014年4月23、24日晴空天氣下三個電廠的LSTM3預測結果;圖4展示了2014年5月4、5日陰雨天氣下三個電廠連續五天的LSTM2預測結果。所使用的數據集為兩年以上的數據,由于K-means分類為晴空天氣和陰雨天氣兩類數據時存在分類不夠準確的情況,如:在分類后的晴空天氣數據集中存在2%左右的陰雨天氣數據。所以在晴空天氣下,使用完整訓練集得到的模型能夠對小部分的陰雨天氣有著更好的擬合效果。同理,分類后的陰雨天氣訓練子集與測試子集也存在小部分晴天數據,但數據中都仍以陰雨天氣為主,所以相比于以晴空天氣為主的未分類訓練集,采用分類后的陰雨天氣訓練子集可使測試數據達到更好的擬合效果。但又限于陰雨天氣條件下的功率預測會受到更加復雜的因素影響,如單日內波動較大的降雨量、降雪量、溫度、總云量等,其總體誤差均比晴空天氣條件下的偏大。

圖3 三個電廠在晴空天氣條件下連續五天的光伏功率預測結果

圖4 三個電廠在陰雨天氣條件下連續五天的光伏功率預測結果
以上分析表明,基于K-means聚類分析結果,LSTM2與LSTM3結合即LSTM2用于聚類分析后的陰雨天氣預測和LSTM3用于聚類分析后的晴空天氣預測兩種方法的結合可提高整體的預測精度。表4中展示了基于K-means和結合后的LSTM模型方法在整個測試集上的預測性能。
為進一步驗證提出的K-means天氣聚類分析與LSTM預測模型相結合對光伏發電功率預測的有效性,比較了所提出的預測方法與傳統BP和LSTM算法以及Autoformer、TFT和LightGBM算法,結果如表4所示。所有對比方法的訓練均基于未進行天氣分類的完整訓練集,預測結果均為相應模型在整個測試集上的表現。

表4 不同預測方法預測性能比較
根據表4給出的結果,可以看出與其他算法相比,除Autoformer與文中模型在電廠1中的誤差比較接近,提出的預測模型的評價指標在三個電廠的數據集中均為最優。與傳統的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%。結果證明了文中模型和數據處理方法的可行性與有效性,并且在預測精度和穩定性方面均表現出較好的性能。
該文提出基于K-means的天氣聚類分析和LSTM相結合的光伏發電功率日前逐時預測方法,并從損失函數和訓練集的選擇上做出研究分析,結果表明:
(1)在光伏發電預測模型中損失函數的選擇上,Huber損失函數相比于MSE具有更強的魯棒性,能更好地處理光伏數據中的離群點,在此基礎之上,選擇鯨魚優化算法對Huber損失函數中的δ實現進一步的優化,從而能有效地提高光伏預測模型的準確度,總體可將預測精度提高2%左右。
(2)基于K-means算法將數據分類為晴空天氣類型和陰雨天氣類型,在聚類得到的各類別訓練集上分別訓練LSTM,并根據測試集的類別選擇對應的LSTM進行光伏發電功率的預測。研究結果表明,提出的K-means與LSTM相結合的預測方法比單獨的LSTM以及LightGBM的預測效果更好,預測精度提升在4%左右,同時對比Autoformer算法和TFT算法,預測精度提升約2%。
(3)基于K-means算法對天氣進行聚類分析時,存在對一小部分天氣數據分類錯誤的情況。在后續的研究工作中,可結合其他機器學習算法,提高分類的準確率,進一步提高預測精度。