何建強,張玉萍,滕志軍
(1.商洛學院,陜西 商洛 726000;2.商洛市人工智能研究中心,陜西 商洛 726000;3.北京四方繼保自動化股份有限公司,北京 100085;4.東北電力大學 現(xiàn)代電力系統(tǒng)仿真控制與綠色電能新技術(shù)教育部重點實驗室,吉林 吉林 132012)
風能作為一種可再利用的、清潔的新型替代能源,能夠優(yōu)化能源結(jié)構(gòu),增強能源供應(yīng)能力,保障能源安全可靠。由于風具有隨機性、間歇性和不可控性,導致風電具有間斷性,致使風電并網(wǎng)會增加電力系統(tǒng)運行的不穩(wěn)定性,極大地影響電網(wǎng)的供電質(zhì)量。因此,科學、準確的預測風電場的輸出功率能夠平衡大規(guī)模風電對電網(wǎng)的影響,促進風電健康持續(xù)地發(fā)展。文獻[2]和文獻[3]闡述了由于風電的間斷性,致使風電功率預測大多主要集中于短期預測。目前短期預測技術(shù)被廣泛研究和應(yīng)用,主要研究方法有物理法、統(tǒng)計方法、機器學習法和空間相關(guān)性法。文獻[4]對風電功率預測的物理方法和統(tǒng)計方法進行了綜述。物理預測方法由于受風電場所處環(huán)境地形和地貌以及周圍大氣環(huán)境的影響比較大,所以預測精度往往相對低。統(tǒng)計方法建模相對簡單、計算速度快、預測成本低,但是輸入的預測參數(shù)單一,不斷地擴大預測時間尺度會降低預測精度。文獻[5-7]對卡爾曼濾波法、時間序列法、最小二乘法、灰色預測法等常用的統(tǒng)計方法在風電功率預測中的應(yīng)用進行研究,但都存在易陷入局部最優(yōu)的缺點。機器學習方法預測精度相對較高,但預測模型比較復雜,建模相對困難,而且樣本訓練需要大量歷史數(shù)據(jù)的支持,訓練速度慢。常用的方法有小波分析法,BP神經(jīng)網(wǎng)絡(luò)法、SVM等方法。文獻[8]提出的人工神經(jīng)網(wǎng)絡(luò)法是風電功率短期預測當中最常用的預測方法,具有非線性映射、自學習、容錯性和泛化能力強等優(yōu)點。但單一的預測方法具有不足之處,為克服單一方法預測的不足,組合預測法成為近年來風電功率預測研究的熱點,它是將一些統(tǒng)計方法和學習方法相結(jié)合,提高預測精度。文獻[9-12]提出了空間相關(guān)法,將其作為繼物理模型、統(tǒng)計學之后的第3種模型,它是一種通過鄰近風電場氣象信息對目標風電場進行預測的方法。文獻[13]結(jié)合空間相關(guān)性的方法,建立了預測模型,解決了風速突變造成預測精度低的問題。但由于風速時變性較強,預測的最大誤差很難控制,有時預測可能完全失效。
為解決單一模型在風電功率預測中的局限性,本文針對文獻[14]中提出的KNN算法在短期風電功率預測中的不足,提出了基于K-means和改進KNN算法的風電功率預測,該算法針對大量的歷史樣本集和預測樣本集,建模簡單,運算速度快,預測準確率高。以吉林省某風電場365天的實際數(shù)據(jù)為樣本,對本文預測方法的優(yōu)越性進行了分析驗證。
K
個樣本相似或最鄰近,而且這K
個最鄰近的樣本大多數(shù)是同一個類別,那么此樣本也被標記為該類別。重點強調(diào)的是特征空間中的每個樣本必須已被正確分類。KNN算法在本質(zhì)上采用的是投票分類決策機制,通過最鄰近樣本的類別決策待分類樣本的類別,決策前需要遍歷整個樣本空間,決策時只依靠最近鄰的少數(shù)樣本。KNN算法的優(yōu)點是適合類域交叉或者大量重疊的待分類樣本集。本文利用樣本回歸特性對樣本進行功率預測,即對于一個預測樣本,首先獲取樣本的K
個最鄰近已分類樣本,然后計算其屬性的平均值,將該平均值作為預測樣本的屬性值。K
值進行預測時,每個樣本對應(yīng)每個不同的K
值都要遍歷一次特征空間,那么隨著特征空間的擴大,就會成倍的增加運算量,也就會成倍的降低運算速度。同時在分類過程中,如果特征空間樣本類別不平衡時,一部分樣本容量較大,另一部分樣本容量較小,隨著K
值的逐漸增大,選取樣本的誤判率就會增大,針對這一情況本文對KNN算法進行了改進。改進策略是:同一個預測樣本,在同一個特征空間中,針對不同的K
值,只需要遍歷一次整體樣本空間。首先提取預測樣本的最大K
值,此時遍歷整體樣本空間,提取K
個最相似的樣本,重點是要對選取的K
個樣本按相似程度的從高到低進行排列,并且將這K
個相似樣本保存到相似隊列中。這樣如果預測樣本想提取K
-1個相似樣本的話,就不需要再遍歷整體特征空間了,只需要從相似隊列中提取前K
-1個樣本即可。這種改進策略是通過增加存儲空間來加快預算速度。因為對于現(xiàn)在的計算機來說,存儲空間越來越大。假設(shè)一個風電場有100臺風機,每分鐘記錄一項風機的運行狀態(tài),運行狀態(tài)中包括20個屬性,那么10年的記錄也只有38.5 G。所以存儲空間不是風電功率預測的壓力。因此,利用存儲空間換取高效的預測空間是值得的。改進的KNN算法包括兩個過程,第一個過程是計算預測樣本選取最多近鄰樣本時對應(yīng)的K
值,同時對獲取的相似樣本集合從高到低按照相似程度排序,并存至優(yōu)先級隊列中;第二個過程是當K
值減小時,從已存儲的優(yōu)先級隊列中直接獲取相似樣本集,根據(jù)相似距離決定相似權(quán)重,從而用訓練樣本的加權(quán)功率值來計算預測樣本的功率值。獲取最長優(yōu)先級隊列的核心步驟如下。第一步:確定最近鄰樣本個數(shù)最多時對應(yīng)的K
值,給出已知類別的訓練樣本集(或者叫做特征空間)D
;第二步:設(shè)每一個預測樣本為z
=(x
′,y
′),開始執(zhí)行for循環(huán)forz
=(x
′,y
′);第三步:計算z
與每個訓練樣本(x
,y
)∈D
間的相似距離d
(x
′,x
′);第四步:選擇與預測樣本z
最相似的K
個訓練樣本D
?D
,同時記錄這K
個樣本與z
的相似距離;第五步:按照與z
相似程度對D
從高到低排序,將結(jié)果存至優(yōu)先級隊列PriorityQueue中;第六步:end for;//結(jié)束for循環(huán),并保存好本次預測的優(yōu)先級隊列。
本文通過相似歷史數(shù)據(jù)建立模型,實現(xiàn)風電功率的預測。將風向、風速和風機變槳角度這3個參數(shù)作為輸入?yún)?shù),選取不受時間序列影響而且樣本集合的相似度比較高的數(shù)據(jù)作為樣本數(shù)據(jù)。在輸入?yún)?shù)后會自動尋找與之相似的樣本數(shù)據(jù)集合,并匹配對應(yīng)的風電功率數(shù)據(jù),以此來對未來的輸出功率進行推算,預測模型框架如圖1所示。最后,通過吉林省某風電場實際數(shù)據(jù)來對預測模型的有效性和預測準確度進行檢驗。
圖1 預測模型框架圖
由于本文所提改進的KNN算法通過相似歷史數(shù)據(jù)進行預測時采用的數(shù)據(jù)分類方法與K-means聚類算法思想一致,因此在對歷史樣本進行分類時采用K-means算法,該方法在增加選中相似樣本概率的同時,也保障了預測的準確性。該算法進行歷史樣本分類的過程如下。
Input:N
//為區(qū)別改進KNN中的K
,此處用N
表示劃分子類的個數(shù);{Y
}//
歷史樣本集,其中包含j
個對象。Outout:N
個子類。具體執(zhí)行流程如下。
第一步:從歷史樣本集{Y
}中隨機選擇N
個樣本作為初始分類的中心。第二步:比較新讀取樣本對象和各個類中對象的均值,然后將其分配至最相似的類中。
第三步:對每個類的中心進行更新,重新對每個類中對象的均值進行計算。
第四步:until每個類的中心不再變化結(jié)束。
其中:{Y
}表示歷史樣本集合,其中每個樣本均包含風向、風速和風機變槳角度3個維度;N
為將要劃分子類的個數(shù)。以吉林省某風電場2019年2月的歷史數(shù)據(jù)為例,每隔一分鐘記錄一次風電機組的運行狀態(tài),一共29天,每臺機組的歷史樣本數(shù)量為41 760條。以其中某一臺的風機的歷史樣本記錄為例,利用Clementine軟件中的K-means聚類模型得出的聚類結(jié)果如2圖所示。
圖2 某臺風機的歷史數(shù)據(jù)聚類結(jié)果
n
(k
)提高為n
(k
)。改進KNN的算法流程如圖3所示。圖3 改進KNN算法流程
算法的具體執(zhí)行過程如下:
1)初始化預測樣本X
和K
值的集合。2)獲取最大K
值,賦于K
,K
僅搜索K
對應(yīng)的相似歷史樣本集合。3)選取相似度計算公式。
本文在計算預測樣本和歷史樣本的相似度時,選用適用于數(shù)值型數(shù)據(jù)的歐氏距離和曼哈頓距離計算公式,分別如公式(1)和公式(2)所示。
(1)
(2)
式中,X
和Y
分別表示第i
個預測樣本和第j
個歷史樣本。風向、風速和風機變槳角度為每個樣本3個維度,z
為維數(shù)。4)獲取最大優(yōu)先級隊列PQ(X
,K
)。在歷史樣本中隨機選取K
個樣本,按相似距離大排序,生成優(yōu)先級隊列PQ(X
,K
)。遍歷歷史樣本集,并計算其與預測樣本的相似距離。若相似距離比PQ(X
,K
)中最后一個樣本的相似距離大,則繼續(xù)遍歷下一個歷史樣本,否則移除PQ(X
,K
)中最后元素,將當前遍歷樣本值放入PQ(X
,K
)尾部,并按照相似程度重新自動排序,遍歷完所有歷史樣本,得到最終PQ(X
,K
)。5)其余K
值,從最終PQ(X
,K
)中提取對應(yīng)的相似樣本優(yōu)先級子隊列。如K
=K
時,提取PQ(X
,K
)中前m
個歷史樣本,作為K
的PQ(X
,K
)。6)計算PQ(X
,K
)中多數(shù)類別所有樣本輸出功率的平均值,將其作為預測樣本X
的預測值。計算公式如公式(3)所示:(3)
式中,powerpr
(X
,K
)表示預測樣本X
選取K
個相似樣本的功率值;表示樣本類別是C
的第j
個相似歷史樣本,z
表示類型編號。AVG()為計算多數(shù)類樣本功率的加權(quán)平均值。7)計算所有K
值下X
對應(yīng)的預測值,結(jié)束預測。最終功率預測值對應(yīng)K
值選取時,要根據(jù)不同風機運轉(zhuǎn)情況通過實驗數(shù)據(jù)來進行確定最佳K
值。圖4 風電功率預測系統(tǒng)架構(gòu)圖
圖5 系統(tǒng)整體功能模塊
本文采用C/S架構(gòu)設(shè)計風電功率預測系統(tǒng),將預測模型轉(zhuǎn)換為計算機可以完成的功能,保障風電功率預測的高效性、穩(wěn)定性和安全性。風電功率預測系統(tǒng)整體架構(gòu)分為3層,依次為基礎(chǔ)數(shù)據(jù)層、功能服務(wù)層和用戶層。每一層之間是相互獨立且具有一定的聯(lián)系,風電功率預測系統(tǒng)架構(gòu)圖如圖4所示。
4.1.1 基礎(chǔ)數(shù)據(jù)層
基礎(chǔ)數(shù)據(jù)層又包括3部分。第一部分是風電實時數(shù)據(jù)的采集與整理;第二部分是數(shù)據(jù)存儲,將整理完畢的實時數(shù)據(jù),存儲于數(shù)據(jù)庫中,可以永久性的使用,并定期維護;第三部分建立數(shù)據(jù)訪問接口。
4.1.2 功能服務(wù)層
功能服務(wù)層主要是指風電功率預測系統(tǒng)需要完成的功能應(yīng)用。本系統(tǒng)的應(yīng)用服務(wù)主要有基礎(chǔ)數(shù)據(jù)更新模塊、實時數(shù)據(jù)展現(xiàn)模塊、風電數(shù)據(jù)清洗模塊、風電功率預測模塊、預測誤差分析模塊、用戶管理模塊、系統(tǒng)設(shè)置模塊、輔助模塊等。
4.1.3 用戶層
用戶層是與用戶直接相關(guān)的部分。用戶層是用戶與系統(tǒng)進行交互的終端。用戶可以輸入相關(guān)數(shù)據(jù)或者點擊相關(guān)操作,實現(xiàn)需要的功能。
采用java語言實現(xiàn)風電功率預測系統(tǒng)的整體功能,選用關(guān)系型數(shù)據(jù)庫MySQL作為數(shù)據(jù)庫管理系統(tǒng)。系統(tǒng)主要包括用戶管理模塊、核心模塊和系統(tǒng)設(shè)置模塊。系統(tǒng)整體功能模塊圖如圖5所示。
用戶管理模塊主要包括用戶注冊模塊、用戶登錄模塊、信息修改模塊等。用戶注冊模塊主要是新用戶在使用系統(tǒng)前進行用戶注冊。為了確定用戶賬號的安全性,系統(tǒng)引入MD5加密技術(shù),對用戶的密碼以及密碼修改提示答案采用密文的形式存儲。這樣可以防止非法用戶的入侵,保障系統(tǒng)的安全性。用戶登錄模塊是任何一個軟件系統(tǒng)的基礎(chǔ)模塊。該系統(tǒng)的用戶登錄模塊需要用戶通過多方面的認證合格,才可以進入系統(tǒng)。主要包括權(quán)限認證、崗位認證、用戶名、密碼、驗證碼等合法驗證。
用戶修改模塊主要方便用戶對自身基本信息的更新。
系統(tǒng)設(shè)置模塊包括系統(tǒng)用戶權(quán)限管理、系統(tǒng)數(shù)據(jù)備份、系統(tǒng)數(shù)據(jù)還原。用戶權(quán)限管理模塊主要是根據(jù)風電功率預測系統(tǒng)中用戶的崗位類別、職稱類別等判定用戶的角色,并按照一定的安全策略為每種角色設(shè)置相應(yīng)的權(quán)限。每個用戶只可以訪問自身權(quán)限范圍內(nèi)的內(nèi)容。本系統(tǒng)的權(quán)限設(shè)置管理主要包括功能級權(quán)限管理和數(shù)據(jù)級權(quán)限管理。數(shù)據(jù)備份模塊是系統(tǒng)容災(zāi)方案的一種。本系統(tǒng)考慮到電力系統(tǒng)屬于專用網(wǎng)、風電數(shù)據(jù)的存儲量大、不易恢復等特性,采用數(shù)據(jù)庫備份方案。數(shù)據(jù)庫備份即在備份機上創(chuàng)建數(shù)據(jù)庫的拷貝版本,定期更新備份。系統(tǒng)數(shù)據(jù)恢復模塊是指將丟失的或者異常數(shù)據(jù)恢復到正常的狀態(tài)。本系統(tǒng)主要應(yīng)用版本恢復將系統(tǒng)數(shù)據(jù)庫中的數(shù)據(jù)恢復到前一個備份版本,使數(shù)據(jù)恢復正常。
核心模塊的主要功能為風電實時數(shù)據(jù)存儲、實時數(shù)據(jù)查詢、實時數(shù)據(jù)處理、風電訓練樣本分類、風電功率預測、誤差分析和歷史預測結(jié)果查詢。該模塊的UML活動圖如圖6所示。
圖6 風電功率預測系統(tǒng)UML活動圖
風電實時數(shù)據(jù)存儲模塊主要用于獲取風電場的實時數(shù)據(jù)。通過I/O讀取程序,獲取已經(jīng)存儲于記事本的風電功率實時采集數(shù)據(jù)。按照每一行為一個記錄的方式,將獲取的數(shù)據(jù)存入已經(jīng)創(chuàng)建好的MySQL數(shù)據(jù)庫,作為風電功率預測的數(shù)據(jù)源。
風電實時數(shù)據(jù)顯示模塊主要協(xié)助用戶根據(jù)自己的意愿選擇要瀏覽的風電數(shù)據(jù)。用戶可以按照時間段模式進行預覽。風電實時數(shù)據(jù)處理模塊主要是清洗那些由于采集、傳輸和記錄過程中導致的異常數(shù)據(jù)、缺省數(shù)據(jù)或者記錄不完整的數(shù)據(jù)。利用相鄰時間點數(shù)據(jù)的加權(quán)平均值修補缺省值和更正不完善的數(shù)據(jù)。
風電訓練樣本分類模塊是由于預測模型需要輸入具有確定類別的風電訓練樣本。該模塊主要是將K-means聚類算法用java語言實現(xiàn)。
風電功率預測模塊是系統(tǒng)的核心模塊。該模塊同樣也是利用java語言實現(xiàn)預測算法的過程。該模塊留有輸入、輸出兩個接口。輸入接口主要是輸入訓練樣本和預測樣本。輸出接口就是輸出風電功率的預測結(jié)果。
歷史預測結(jié)果查詢模塊可以查詢預測完畢的結(jié)果。一般用戶可以通過預測時間段查詢預測結(jié)果,也可以根據(jù)預測誤差率或者準確率來查詢預測結(jié)果。
K
值的集合為[1,100],分別利用曼哈頓距離和歐氏距離尋找相似樣本。不同K
值下兩種距離計算方法的預測結(jié)果對比如7和圖8所示。圖7 不同K值下曼哈頓距離計算方法的預測結(jié)果
圖8 不同K值下歐氏距離計算方法的預測結(jié)果
由圖7和圖8可以看出,當K
=48時,曼哈頓距離計算方法預測結(jié)果最好,平均絕對誤差最低。當K
=50時,歐氏距離計算方法預測結(jié)果較好,預測誤差也遠低于國家規(guī)定范圍。預測功率與實際功率值的對比結(jié)果分別如圖9和圖10所示。從圖7和圖8的預測誤差率中可以看出,預測誤差隨著K
值的增加逐漸降低,增加到一定值后,隨著K
值的增加又逐漸升高。其與K
值的變化關(guān)系如圖11所示。通過大量的實驗發(fā)現(xiàn),當K
值在45~55時,預測準確率最高。圖9 K=48時未來24小時功率預測值與實際值對比
圖10 K=50時未來24小時功率預測值與實際值對比
圖11 預測誤差與K值的關(guān)系
本文將預測結(jié)果和文獻[17-18]中的預測結(jié)果按照誤差分析方法進行了對比,預測誤差對比結(jié)果如表1所示。從對比結(jié)果中可以看出采用本文的方法,平均絕對誤差和均方根誤差預測誤差率分別最大下降1.08和0.48個百分點。在相同的條件下,本文的方法在預測時間最大提高了5.45個百分點。可見,本文的預測方法提高了預測準確度。
表1 預測誤差對比
改進的KNN預測模型在預測過程中不斷地剔除訓練樣本中異常的或者影響預測準確度的樣本,從而修正預測模型,使得預測模型的預測準確率不斷自動地提升。因此,實驗數(shù)據(jù)表明在對20臺風機功率的預測中,誤差率越來越低,每臺風機的平均誤差都小于15%,滿足目前風電功率預測系統(tǒng)的要求。
K
值,仍是下一步需要重點研究的內(nèi)容。