張 潔,羅俊杰
(南京郵電大學 計算機學院,江蘇 南京 210023)
相較于傳統能源,光伏能源更加清潔且有著易獲取和低價等優點,這使得近些年來光伏能源在全部能源使用的占比越來越高,光伏產業規模也逐年擴增,同時光伏產業的技術要求也隨之提升。由于光伏組件工作在室外,氣溫、沙塵、降雨等因素都導致了光伏組件功率模型的不確定性,帶來許多安全問題。為獲得光伏組件的功率模型情況,通常會選取合適的組件模型,使用多種參數辨識算法基于獲取的大規模的光伏數據來對光伏組件模型中的未知參數進行辨識[1],所得到的模型參數對光伏產業的效率計算、最大功率點追蹤和未知效率預測等都有著重要的意義。
歷經數年的發展,如今在光伏組件參數辨識領域已經涌現出不少優秀的算法。文獻[2]提出了自適應進化粒子群優化BP神經網絡(AEPSO-BPNN)辨識方法,在粒子群算法中引入自適應和重構策略以此優化BP神經網絡,避免BP神經網絡在迭代后期陷入局部最優解。文獻[3]在傳統的HHO算法中引入了多種策略,延長了迭代后期的局部搜索時間,并且縮小了搜索空間,提高了在光伏電站模型參數辨識中的尋優效率。張海寧[4]使用基于遞推的最小二乘法對光伏組件逆變器進行模型參數辨識,實驗結果表明該算法步驟簡單、計算量小,在多次辨識中一致性較高,通用型較強。文獻[5-6]中都引用了自適應函數對傳統的粒子群算法進行優化,使用了自適應調整策略來控制全局和局部搜索,以此提高算法的收斂精度,實驗結果表明引入自適應函數優化后有著更高的求解精度和尋優效率。此外還有許多文獻提出了一系列模擬動物行為的搜索算法,如鯨魚優化算法、灰狼算法、閃電算法、飛蛾火焰算法和蝙蝠優化算法等,仿真結果都表明此類算法都有著不錯的尋優能力,能在光伏系統模型辨識中快速找到最優解[7-9]。
針對光伏組件參數辨識問題,該文提出了一種基于禁忌搜索算法優化的果蠅算法(TS-FOA)的參數辨識方法。該方法利用果蠅算法在全局搜索的高效性,并引入禁忌搜索算法對后期尋優方向進行限制,這樣同時擁有禁忌搜索算法和果蠅算法的尋優特點,可以有效避免在搜索過程中陷入局部最優解并有效提高尋優效率。之后,采用某光伏電站的實測數據,使用TS-FOA算法對模型進行參數辨識仿真實驗,驗證了TS-FOA算法的實用性和高效性。
在理想的情況下,光伏組件模型等效為一個二極管和一個光伏板(電流源)的并聯,通常稱之為單二極管的等效基礎模型,而在實際的工程中,內部組件都存在損耗,故需要在理想模型基礎上加上幾個等效的電阻,得到的光伏電池等效模型如圖1所示。

圖1 光伏電池的等效模型
根據二極管的特性和圖1中的模型,可以得到流過內部二極管的電流ID的計算公式為:
(1)
式中,ID和I0分別為模型中流經二極管的電流和反向飽和電流;IL和UL分別表示光伏電池系統實際輸出電流和輸出電壓;A為二極管的理想因子,取值由系統組件結構和材料決定;q為電子電荷,q=1.6×10-19C;k為Botzman系數,k=1.38×10-23J/K;T為光伏模塊某種工況下的絕對溫度。
繼續按照圖1中規定的參考模型,并結合公式(1)和基爾霍夫定律可以得到如式(2)的光伏組件I-V的表達式。
IL=Iph-ID-Ish=
(2)
式中,Iph和Ish分別為光伏組件光電效應產生的電流和流經并聯電阻Rsh的電流;Rs和Rsh分別為模型上的串聯電阻和并聯電阻。
公式(2)便是目前光伏組件系統中最基礎的表達式,目前大多數對光伏組件性能的研究都是基于此表達式。在光伏系統性能的研究中,常需要對光伏組件中最大功率點MPPT(maximum power point tracking)進行跟蹤控制,以此獲得組件最大的電力輸出,所以就需要確定此時模型中的IL和UL,但是在式(2)中I0、Iph、Rs、Rsh和A這五個參數都是不確定的,五個參數都與組件的工作實況有關,難以求解,故需要這五個參數進行參數辨識。
參數辨識求解的最終結束標志是目標函數到達了預期的最值范圍,所以在參數辨識之前,還需要建立一個適當的目標函數,首先將式(1)進行如下變形可得:
(3)

選擇均方根誤差RMSE作為尋優過程中的目標函數。
(4)
式中,i為第i次數據的變形差值。
果蠅優化算法(fruit fly optimization algorithm,FOA)是基于果蠅覓食的復雜關系衍生出的一種全局范圍下的尋優方法[10]。基于仿生學原理研究,果蠅群體憑借敏銳的嗅覺和視覺,對食物有著非常強的感知能力,可以依據食物的味道尋找食物的方位,味道越濃說明離目標食物越近反之味道越淡距離越遠,根據味道濃度便可以繼續飛向該目標位置,在到達一個新位置后,繼續通過嗅覺判斷食物方位,直到找到食物源為止。
如圖2所示:Fly Group為果蠅群體的初始所在位置;Flyi是果蠅群體中飛出去的單只果蠅的位置;Di為單只果蠅距離起點的距離。通過Di可以計算出味道判定值Si,再基于預先設定的味道濃度判定函數SmellFuntion(Si),可以得到單只果蠅此時位置的味道濃度Smelli,從而選取味道濃度最優的方向,將整個Fly Group朝著該方向移動,繼續迭代直到達到終止條件為止。

圖2 果蠅群體覓食示意圖
禁忌搜索算法(tabu search,TS)基于對局部領域搜索算法的優化[11],使用領域搜索的規則得到跳轉位置更佳到領域位置以此來到達尋優的目的。TS算法在此基礎上模仿人腦的記憶模式建立出禁忌表,使用禁忌表來記錄已經到過的位置,避免了對局部最優解的重復搜索,再引入了特赦規則的概念,以特赦機制保證局部搜索的同時不會遺漏掉其他最優解。
圖3是禁忌搜索算法尋優示意圖。

圖3 禁忌搜索算法尋優示意圖
科研中常用爬山尋峰圖來表示TS算法的尋優過程[12],如圖3所示:Highi為各個位置的目標值;山頂位置Highmax是尋優過程中最終期望到達的極值位置,位于“山頂”。通過在山峰中坐標的位置Locationi計算出周圍的Highi,選取目標值最佳的坐標位置,判斷該坐標點是否存在于禁忌表T中,若不存在則將初始位置High0向該坐標點移動,繼續迭代直至達到終止條件為止。
FOA算法利用果蠅群體的協作能力進行尋優,具有良好的全局搜索能力,但是由于果蠅尋優過程中存在著不確定性,也導致了FOA易于快速陷入局部最優解,無法給出精確的解。其次,由于光伏組件參數辨識問題中需要辨識的參數較多,導致FOA算法難以處理類似的高維度問題,會導致后期迭代效果較差,迭代時間長;TS算法是基于傳統的局部搜索算法的改進,代碼簡單且容易實現,在引入禁忌表和特赦規則后,具有較強的局部尋優能力,但是在全局搜索的應用上表現一般,迭代時間較長。
基于FOA算法和TS算法的各自特點,該文將TS算法的思想融合到FOA算法中,提出一種禁忌搜索算法優化的果蠅算法(TS-FOA)來對光伏組件進行參數辨識[13]。TS-FOA算法使用FOA算法對辨識過程進行一個全局的快速搜索,得到已經在最優解附近的小規模子群解,之后融合TS算法的禁忌表機制和特赦機制來避免FOA算法的局部最優問題,對已有的小規模子群進行一個局部搜索,最終快速、精確地得到最優解。
TS-FOA算法的具體執行步驟如下:
步驟1:設定果蠅群體的群體規模FlySize和FOA算法最大的迭代查找次數MaxGen_FOA,初始化果蠅群體Fly Group所在的位置為X0,該位置包括在光伏組件參數辨識過程中需要辨識的參數I0、Iph、Rs、Rsh和A,即為一個五維參數:
X0=[Iph_0,I0_0,A0,Rs_0,Rsh_0]
(5)
步驟2:為第i只果蠅飛出群體的方位進行隨機賦值。

(6)
步驟3:得到單只果蠅的新位置后,先計算Flyi距離原點的距離Di,并得到該果蠅的味道濃度判定值Si。

(7)

(8)
步驟4:將Flyi的味道濃度判定值Si代入到味道判定函數SmellFuntion(Si)中,從而得到Flyi的味道濃度值Smelli,基于光伏組件數據的特點,該文選取式(4)的均方根誤差RMSE作為味道判定函數SmellFuntion(Si)的判定函數,以此轉化為一個以式(9)為目標函數的最值尋優問題[14]。
Smelli=SmellFunction(Si)
(9)
步驟5:遍歷查找種群中味道濃度值Smelli最佳的果蠅,并記錄最佳味道濃度值best_smell和最佳果蠅Flyi的下標best_index。
[best_smell,best_index]=Smelli
(10)
步驟6:使用best_smell更新此時的最佳味道濃度值BestSmell,并將果蠅群體坐標替換為當前最佳位置,即視作將果蠅群體Fly Group朝著Flybest_smell移動。
BestSmell=best_smell
(11)
(12)
步驟7:判斷終止條件,即該位置濃度是否最佳,并且已經達到最大的迭代查找次數MaxGen_FOA,否則轉入步驟2繼續進行迭代尋優查詢。若達到終止條件,轉入步驟8繼續執行TS算法搜索。
步驟8:設定TS算法最大的迭代查找次數MaxGen_TS,設定最大等待步數N,初始化當前所在的位置Location0為步驟7中已經到達終止條件的小規模子群X0,即Location0=X0=[Iph_0,I0_0,A0,Rs_0,Rsh_0],初始化禁忌表空表T。
步驟9:通過當前坐標Location0獲得當前可達的位置坐標Locationi。
步驟10:獲得了Locationi后,代入到最佳高度計算函數High(Locationi)中,在此使用式(4)的均方根誤差RMSE作為最佳高度計算函數High(Locationi),得到各個坐標點的目標值,再對Locationi的集合進行排序。
Highi=High(Locationi)
(13)
Highi=Sort(Highi)
(14)
步驟11:從Locationi的集合中選取高度目標值Highk最大的Locationk,判斷Locationk是否已經存在禁忌表T中,若已存在則選取其他Locationk,若不存在將Locationk加入到禁忌表T中,并更新Location0。
Locaton0=Locationk
(15)
T.add(Locationk)
(16)
步驟12:判斷是否達到終止條件,TS算法中終止條件包括:已達到最大的迭代查找次數MaxGen_TS或者在當前Location0停留步數已經達到最大等待步數N,此時即可終止計算。若未達到終止條件,轉入步驟9繼續進行迭代尋優搜索。
此外,需要對TS-FOA算法中的特赦規則進行設定,根據上文所述,在迭代過程中可能會出現較優解屬于禁忌表的情況,為此設定特赦規則為:若候選位置狀態優于當前位置狀態,則可以跳出禁忌表限定,更新當前位置狀態為最佳狀態[15]。TS-FOA算法流程如圖4所示。

圖4 TS-FOA算法流程
該文使用的是南通理工學院提供的光伏單晶硅固定電站運行監測數據,選取某日7時到下午6時每10分鐘的監測數據作為本次參數辨識的實驗數據集。在使用相同數據集的條件下,選取傳統粒子群算法(PSO)、未使用TS機制優化的果蠅算法(FOA)和提出的TS-FOA算法進行實驗訓練,使用Matlab進行算法模擬和測試并比較結果,以說明該算法相較于其他算法具有的迭代速度快和精度高等優勢。
迭代次數都設定為25次,此時各算法參數辨識結果如表1所示。在表1的條件下,限定三種算法的迭代次數都為25次并使用相同的數據集對參數進行辨識。

表1 各算法參數辨識結果
由表1可得,在傳統FOA算法中引入了TS算法的機制提升了同迭代次數下參數辨識的準確率,此外相較于傳統的PSO算法,TS-FOA算法的精度同樣有著較大的提升。


圖5 各算法辨識結果與實測數據曲線圖
由圖5可得,TS-FOA算法的參數辨識曲線和實測數據曲線擬合度最佳,誤差較小。PSO算法曲線相較于TS-FOA算法曲線的擬合略差,在中午時段會出現偏差,而傳統FOA算法曲線和實測數據曲線相差最大,較難滿足一些情況下精度的要求。
為了得到不同迭代次數下TS-FOA算法的性能參數,在Matlab的算法中設定不同的迭代次數對PSO算法、FOA算法和TS-FOA算法進行參數辨識,結果如圖6所示。

圖6 各算法不同迭代次數下實驗數據
由圖6可得,在限定迭代次數的情況下,TS-FOA算法在大約20次迭代的條件下便可以完成全局收斂,獲得最優解,并且在三種算法中TS-FOA算法可以得到最佳的目標函數值。PSO算法由于自身的限制,在迭代次數較少的情況下目標函數值改變不大,即陷入了局部最優解的情況。傳統的FOA算法有著較好的全局搜索能力,但是在局部搜索中表現較差,即使在迭代次數較大的情況下,相較于TS-FOA算法存在較大的誤差,并且在迭代的初期也出現了陷入了局部最優解的情況。
為了解決光伏組件的參數辨識問題,該文基于傳統的FOA算法引入TS算法機制,提出了TS-FOA算法模型,其中使用了禁忌表機制和特赦機制對FOA算法進行優化,優化了FOA算法易于陷入局部最優解的問題,同時也提升了參數辨識的尋優精度。使用光伏組件實測數據集對TS-FOA算法進行的實驗測試表明,相較于PSO算法和FOA算法,TS-FOA算法有著更高的精確度以及更短的收斂時間,能夠快速迭代以得到最優解,大大提高了光伏組件參數辨識的效率。