黃育鵬,何雪明,盧立新,林自東
(1.江南大學(xué) 機械工程學(xué)院,江蘇 無錫 214122;2.山東碧海包裝材料有限公司,山東 臨沂 276600)
庫存預(yù)測是根據(jù)企業(yè)的歷史庫存數(shù)據(jù),通過科學(xué)的方法和邏輯,對近期庫存的水平做出推測,以此來提前應(yīng)對市場以及客戶方面可能出現(xiàn)的突發(fā)性問題。有效的庫存預(yù)測能夠為企業(yè)降低庫存成本,為生產(chǎn)或者采購計劃提供依據(jù)[1]。因此庫存預(yù)測也是個企業(yè)重點關(guān)注的問題之一[2-3]。
而預(yù)測的方法也有許多,常用的就有灰色預(yù)測(grey prediction,GM)、簡單平均(simple averaging,SA),加權(quán)平均(weighted average,WA),簡單移動平均(simple moving average,SMA),加權(quán)移動平均(weighted moving average,WMA),指數(shù)平滑(exponential smoothing,ES)等算法,張林靈等將二次指數(shù)平滑模型和灰色馬爾科夫模型組合起來,為低值醫(yī)用耗材的庫存準備提供了可靠依據(jù)[4]。李佳民利用簡單移動平均法對汽車售后配件需求進行預(yù)測,推斷未來發(fā)展趨勢,為汽車服務(wù)企業(yè)提供參考和借鑒[5]。張碩等利用加權(quán)移動平均法預(yù)測某產(chǎn)品未來3個月的銷售量[6]。楊博帆等以動態(tài)多模型指數(shù)平滑法對傳感器測量參數(shù)進行實時預(yù)測[7]。伍信怡等以指數(shù)平滑法模型與季節(jié)性差分自回歸移動平均模型對通過三峽船閘貨運量建立了預(yù)測模型[8]。劉奇等通過改進的蝗蟲優(yōu)化算法構(gòu)建了一個血站供應(yīng)的預(yù)測模型[9]。Maguluri等基于聚類的非線性回歸算法構(gòu)建了一個預(yù)測股票價格趨勢的數(shù)據(jù)模型[10]。Dai等采用SOP以及GM算法構(gòu)建了一個預(yù)測股票收益的模型[11]。
課題組采用粒子群算法并對其進行改進,以改善其早熟的問題,增強全局搜索能力。結(jié)合三次指數(shù)平滑法構(gòu)建庫存預(yù)測模型,通過求解最佳平滑系數(shù),使該系數(shù)能夠自適應(yīng)地調(diào)整以匹配當前歷史數(shù)據(jù),預(yù)測下一期的庫存值。并通過某汽車零部件公司生產(chǎn)的一種導(dǎo)流板6個月的實際庫存數(shù)據(jù)來驗證該預(yù)測模型的可行性。
粒子群算法(PSO)是1995年,Eberhart博士和Kennedy博士在對鳥群捕食進行觀察時,發(fā)現(xiàn)鳥群在捕食時存在一定的規(guī)律,進而提出了PSO這一群智能尋優(yōu)算法。該算法中所有的粒子都被認為是在解空間(即解的范圍)中的一個可行解,而每個粒子都會被一個速度v來決定他們飛行方向和速度,并且每個粒子都會知道自己當前尋找到的最好的位置(pbest),以及目前整個群體中找到的最好的位置(gbest)。就這樣,在不斷迭代更新中,每個粒子通過向pbest和gbest方向靠攏來更新自己在解空間中的位置,直到滿足退出要求,以此得到最后的最優(yōu)解。粒子位置的更新公式為:
(1)
(2)
PSO算法的主要流程如下:
1)初始化粒子群,包括每個粒子的x(粒子位置)和v(粒子速度);
2)計算每個粒子的適應(yīng)度值F;
3)將當前粒子的F和個體極值pbest比較,如果F 4)對每個粒子,用它的適應(yīng)度值F和全局極值gbest比較,如果F 5)根據(jù)式(1)和式(2)更新粒子的速度v和位置x; 6)如果滿足結(jié)束條件(到達最大循環(huán)次數(shù))退出,否則返回步驟2)。 粒子群算法存在的缺點主要有:過于早熟,容易陷入局部最優(yōu)解。 指數(shù)平滑法ES是由布朗提出的一種時間序列分析預(yù)測方法,該方法實際上是一種特殊的移動加權(quán)平均法,他每一期的指數(shù)平滑值都是當前的實際觀察值與前一期指數(shù)平滑值的加權(quán)。以數(shù)學(xué)公式來表達即為: yk=αxk-1+(1-α)yk-1。 (3) 式中:yk為第k期的預(yù)測值;xk-1為第k-1期的實際觀察值;yk-1為第k-1期的預(yù)測值;α為平滑系數(shù),該系數(shù)越大則代表當前的實際值對預(yù)測值的影響較大,反之較小。 指數(shù)平滑法分為一次、二次和三次指數(shù)平滑法。一次主要用于比較平穩(wěn)的數(shù)值序列,二次主要用于呈線性趨勢的數(shù)值序列,三次則用于波動較大,有明顯趨勢性以及季節(jié)性的數(shù)值序列。文中采用三次指數(shù)平滑法,并且為調(diào)整該方法預(yù)測值的滯后性,將放棄傳統(tǒng)的以(xk-1-yk-1)2產(chǎn)生的誤差平方和(SSE)作為評價指標,將(xk-2-yk-1)2產(chǎn)生的誤差平方和作為評價指標。 三次指數(shù)平滑法的計算公式為: (4) (5) (6) 預(yù)測n期數(shù)值的公式為: Yt+n=at+btn+ctn2。 (7) 式中at,bt和ct為第t期的預(yù)測參數(shù)。 其中: (8) 指數(shù)平滑法的缺點主要是平滑系數(shù)一經(jīng)確定就是固定值,無法更改,后期預(yù)測精度會下降。 在PSO算法中,慣性權(quán)重w是一個極其重要的調(diào)整參數(shù)。w較大時能夠使得算法具有較大的全局搜索能力,w較小時能夠提升算法的局部搜索能力。常見的w變化方式主要有線性遞減權(quán)重法和隨機權(quán)重法等。課題組引入正割三角函數(shù)來自適應(yīng)地改變w,公式如下: (9) 式中:wmax為慣性權(quán)重最大值,wmin為慣性權(quán)重最小值,t為當前迭代次數(shù),T為最大迭代次數(shù)。 隨著迭代次數(shù)的不斷增加,w會有最大值不斷非線性減小到最小值,以此達到非線性調(diào)整w的目的。 學(xué)習(xí)因子c1,c2一般為固定常數(shù),且通常取的值為2,本研究中學(xué)習(xí)因子采用異步變化的形式,使得在算法迭代初期,粒子能夠擁有較大的自我學(xué)習(xí)能力和較小的社會學(xué)習(xí)能力,以此來增強全局搜索能力;后期則相反,粒子具有較小的自我學(xué)習(xí)能力和較大的社會學(xué)習(xí)能力,以此來使得解能夠收斂,公式如下: (10) 通常粒子的更新公式如式(2)所示,課題組引入海鷗算法(SOA)中避免碰撞的一個變量A,以此來增強粒子的多樣性,公式如下: A=fc-(t·fc/T)。 (11) 式中fc為控制因子,設(shè)為2。 則位置更新公式如下: (12) 課題組使用4種常用的算法性能測試函數(shù),通過與原始PSO算法、SOA算法對比,來驗證改進后算法的性能。測試函數(shù)表如表1所示。 表1 測試函數(shù)表 參數(shù)設(shè)置: 1)原始PSO。粒子數(shù)目N=50,最大迭代次數(shù)M=1 000,空間維數(shù)D=30,慣性權(quán)重w=0.5,c1=c2=1.5。 2)SOA。種群規(guī)模N=50,最大迭代次數(shù)M=1 000,空間維數(shù)D=30,螺旋參數(shù)vsp=u=1,頻率fc=2。 3)改進PSO。粒子數(shù)目N=50,最大迭代次數(shù)M=1 000,空間維數(shù)D=30,慣性權(quán)重wmax=0.9,wmin=0.4。 對每個標準函數(shù)的適應(yīng)度值測試20次后取平均值,平均值越接近表1中的理論值0則表示效果越好,結(jié)果如表2所示。 表2 測試函數(shù)結(jié)果 各測試函數(shù)迭代效果如圖1~4所示。 圖1 Sphere的最優(yōu)個體適應(yīng)度 圖2 Schwefel2.22的最優(yōu)個體適應(yīng)度 圖3 Rastrigin的最優(yōu)個體適應(yīng)度 圖4 Ackley的最優(yōu)個體適應(yīng)度 通過效果圖1~4,以及測試出來的平均值可知改進后的PSO算法在精度、搜索能力以及收斂能力都比原始PSO以及SOA算法要好。 課題組選取的改進PSO算法的參數(shù)為:種群規(guī)模為100,最大迭代次數(shù)為300,空間維數(shù)為1維,wmax=0.9,wmin=0.8。 三次指數(shù)平滑法的初始值參數(shù)選取主要有2種方式。 1)當歷史的數(shù)據(jù)項較多時(t>12),忽略初始值對后期預(yù)測值的影響,此時初始平滑值應(yīng)為: (13) 2)當歷史數(shù)據(jù)項較少時(t≤15),為減少初始值的選定對后期預(yù)測值的影響,于是將前3期的平滑值改為: (14) 課題組選取的是第2種方式。 平滑系數(shù)α的取值范圍一般為0.0~0.8,主要適用于表3的3種序列情況。 表3 不同α的分類 課題組選取α的范圍為0.2~0.8。 課題組利用改進后的粒子群算法尋優(yōu)能力,以誤差平方和最小作為評價目標,來自適應(yīng)調(diào)整α的值,讓其能夠不斷適應(yīng)當前的數(shù)據(jù)波動情況。 步驟1:在0.2~0.8范圍內(nèi)初始化粒子,個數(shù)為100。 步驟2:將每個粒子的值作為平滑系數(shù)α以及歷史庫存數(shù)據(jù)代入三次指數(shù)平滑算法中根據(jù)式(4)~(8)和式(14)中計算預(yù)測值并將誤差平方和返回作為當前粒子的評價函數(shù)F。 步驟3:將當前的F與pbest和gbest比較,更新pbest和gbest的值。 步驟4:更新粒子的x和v。 步驟5:再返回步驟2繼續(xù)迭代更新,直到達到最大迭代次數(shù),輸出預(yù)測值。 課題組選取2020年1月至3月某公司生產(chǎn)的一種導(dǎo)流板的庫存數(shù)據(jù)作為歷史觀察數(shù)據(jù)進行分析,庫存數(shù)據(jù)如表4所示。 表4 1-3月庫存數(shù)據(jù)表 根據(jù)文中建立的預(yù)測模型,將這3個月的數(shù)據(jù)代入模型中進行計算,并將通過本研究改進的模型得出的數(shù)據(jù)與常用的灰色預(yù)測(GM)、簡單平均、加權(quán)平均、簡單移動平均、加權(quán)移動平均以及原始三次指數(shù)平滑方法進行比較,得到預(yù)測結(jié)果如表5所示,誤差平方和如表6所示。 表5 預(yù)測結(jié)果 表6 誤差平方和 通過實際測試可知:通過改進的粒子群算法來不斷搜索迭代,課題組構(gòu)建的預(yù)測模型以最小的誤差平方和為評價指標,尋找出最適合當前數(shù)據(jù)的平滑系數(shù)α,其相較原始預(yù)測模型以及常用的預(yù)測模型精度更高,更加貼近實際值,對于這種波動較大的庫存預(yù)測更具優(yōu)勢。 課題組針對企業(yè)自動化立體倉庫庫存預(yù)測結(jié)果不準確、具有時間滯后性的問題,提出了一種新的預(yù)測方法:通過將改進PSO算法與三次指數(shù)平滑法相結(jié)合構(gòu)建能夠自適應(yīng)改變平滑系數(shù)的預(yù)測模型,使企業(yè)的產(chǎn)品庫存預(yù)測精度提高。實驗結(jié)果表明: 1)通過引入非線性動態(tài)慣性權(quán)重w,學(xué)習(xí)因子c1,c2以及SOA算法中的避免碰撞變量A,增強了PSO算法前期的全局搜索能力、后期收斂能力以及粒子的多樣性。 2)結(jié)合三次指數(shù)平滑法,通過自適應(yīng)的調(diào)整平滑系數(shù)α,構(gòu)建了一個庫存預(yù)測模型,通過與其他常用的預(yù)測模型對比,構(gòu)建的預(yù)測模型數(shù)值更加精確,為預(yù)測這種波動性較大的數(shù)據(jù)提供了參考。1.2 指數(shù)平滑算法原理及缺點
2 PSO算法的改進
2.1 非線性動態(tài)慣性權(quán)重
2.2 變學(xué)習(xí)因子策略
2.3 粒子位置更新策略
2.4 算法性能測試
3 基于改進PSO算法的預(yù)測模型構(gòu)建
3.1 參數(shù)選取
3.2 預(yù)測模型的步驟
4 實際測試及結(jié)果分析
4.1 實際測試
4.2 結(jié)果分析
5 結(jié)論