俞 煥 劉 萍 趙國(guó)強(qiáng)
(陸軍炮兵防空兵學(xué)院 合肥 230031)
21 世紀(jì)以來(lái),伴隨著科技的飛快進(jìn)步和經(jīng)濟(jì)的高速發(fā)展,工業(yè)制造的成本急劇下降,尤其是汽車制造行業(yè),在車輛價(jià)格不斷下調(diào)的背后是汽車銷售量的持續(xù)性爆發(fā)。截至2019 年底,全國(guó)汽車保有量已經(jīng)達(dá)到2.6 億輛,這給城市管理帶來(lái)了巨大的壓力。智能交通系統(tǒng)[1]是綜合考慮了人、車、路,并運(yùn)用信息技術(shù)、電子傳感器技術(shù)、數(shù)據(jù)通信技術(shù)、計(jì)算機(jī)技術(shù)及控制技術(shù)等進(jìn)行有效集成,運(yùn)用于整個(gè)地面的交通管理系統(tǒng)。實(shí)時(shí)交通流量預(yù)測(cè)作為城市智能交通系統(tǒng)誘導(dǎo)和控制的關(guān)鍵技術(shù)[2],是指利用當(dāng)前和歷史的交通流量信息對(duì)未來(lái)的交通流量進(jìn)行預(yù)測(cè),從而幫助出行者進(jìn)行路徑規(guī)劃,緩解交通擁堵和減少環(huán)境污染等[3]。在交通數(shù)據(jù)步入大數(shù)據(jù)時(shí)代的背景下,利用大數(shù)據(jù)技術(shù)來(lái)優(yōu)化交通管理控制系統(tǒng),實(shí)現(xiàn)交通流的實(shí)時(shí)預(yù)測(cè),具備著重要的現(xiàn)實(shí)意義。
目前,國(guó)內(nèi)外學(xué)者在交通流預(yù)測(cè)領(lǐng)域已經(jīng)取得了許多重大的研究成果。常用的預(yù)測(cè)方法有平均值法、ARMA、線性回歸、非參數(shù)回歸、神經(jīng)網(wǎng)絡(luò)等[4~5],這些模型雖然在一定程度上實(shí)現(xiàn)了交通流的預(yù)測(cè),但是在預(yù)測(cè)精度上仍存在一定的差距。20世紀(jì)90年代Vapnik等提出的一種新的網(wǎng)絡(luò)預(yù)測(cè)模型,即支持向量機(jī)[6~7],有效地克服多維度、非線性和局部最值等復(fù)雜問(wèn)題,得以廣泛應(yīng)用于多個(gè)領(lǐng)域。賀國(guó)光等人同時(shí)構(gòu)建神經(jīng)網(wǎng)絡(luò)模型與數(shù)學(xué)模型來(lái)進(jìn)行交通流預(yù)測(cè),較大地提升了預(yù)測(cè)的精確度[8]。李松、劉力軍等提出一種使用粒子群算法來(lái)優(yōu)化BP 神經(jīng)網(wǎng)絡(luò)的新模型,使得模型更適應(yīng)對(duì)國(guó)內(nèi)現(xiàn)實(shí)交通問(wèn)題的預(yù)測(cè)[9]。在提升算法計(jì)算速度方面,李雙雙提出了建立在MapReduce編程模型的并行分布式方法,優(yōu)化了計(jì)算效率,有效縮短了交通流預(yù)測(cè)的時(shí)間[10]。王凡等在將神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型與并行計(jì)算結(jié)合的基礎(chǔ)上,提出一種廣義的神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型,減少了迭代次數(shù),提升計(jì)算資源的利用率[11]。針對(duì)多層的復(fù)雜神經(jīng)網(wǎng)絡(luò),梁珂等實(shí)現(xiàn)了基于KNN 與遺傳算法的交通流預(yù)測(cè)模型,同時(shí)利用分布式集群的優(yōu)勢(shì)來(lái)減少算法的運(yùn)行時(shí)間[12]。以上學(xué)者們的研究成果基本實(shí)現(xiàn)了交通流預(yù)測(cè)的功能,但很多預(yù)測(cè)方法只適用于特定的應(yīng)用環(huán)境,距離投入實(shí)踐仍有較大的差距。伴隨著交通數(shù)據(jù)采集技術(shù)的進(jìn)步,海量生成的交通數(shù)據(jù)對(duì)算法性能又提出了新的要求。
交通系統(tǒng)是一個(gè)復(fù)雜多變、影響因素較多的非線性系統(tǒng),傳統(tǒng)的線性預(yù)測(cè)模型只能擬合一部分的特征,存在著一定的局限性,本文采用BP神經(jīng)網(wǎng)絡(luò)模型來(lái)實(shí)現(xiàn)交通流的預(yù)測(cè),由于其本質(zhì)是利用梯度下降法來(lái)進(jìn)行模型訓(xùn)練,易陷入局部最優(yōu)解,因此提出使用遺傳算法來(lái)優(yōu)化神經(jīng)網(wǎng)絡(luò)的相關(guān)參數(shù)。同時(shí),借助Spark分布式處理技術(shù),來(lái)加快模型訓(xùn)練的速度,確保模型在交通流預(yù)測(cè)上的高效性與準(zhǔn)確性。
本文主要采用經(jīng)典的主/從架構(gòu)進(jìn)行交通流的預(yù)測(cè),將海量的交通數(shù)據(jù)通過(guò)并行化預(yù)測(cè)模型來(lái)實(shí)現(xiàn)高效地分析預(yù)測(cè)。具體的架構(gòu)組成,如圖1所示。
圖1 基于云計(jì)算的交通流預(yù)測(cè)分析架構(gòu)
道路交通數(shù)據(jù)主要來(lái)源于歷史收集、道路傳感器采集和人工采集等,這些交通數(shù)據(jù)實(shí)時(shí)傳輸?shù)皆朴?jì)算平臺(tái)中的主控服務(wù)器進(jìn)行數(shù)據(jù)的預(yù)處理,篩選出有價(jià)值的數(shù)據(jù)組成訓(xùn)練數(shù)據(jù)集,數(shù)據(jù)管理系統(tǒng)將數(shù)據(jù)集合理地分配到相應(yīng)的從服務(wù)器,在從服務(wù)器上進(jìn)行數(shù)據(jù)集的具體處理,同時(shí)在其他從服務(wù)器中設(shè)置副本,記錄下數(shù)據(jù)集的處理日志。預(yù)測(cè)算法模型庫(kù)中包含著神經(jīng)網(wǎng)絡(luò)、灰色預(yù)測(cè)和多元線性回歸等多種預(yù)測(cè)算法,依據(jù)實(shí)際的交通流預(yù)測(cè)需求,選取相匹配的一種或者多種算法,將整個(gè)任務(wù)進(jìn)程進(jìn)行合理的分解,然后分配給各個(gè)從服務(wù)器,憑借著從服務(wù)器中的數(shù)據(jù)處理與任務(wù)執(zhí)行模塊互相配合,實(shí)現(xiàn)海量數(shù)據(jù)下交通流預(yù)測(cè)的可行性與實(shí)時(shí)性。
BP 神經(jīng)網(wǎng)絡(luò)屬于多層感知器的范疇,是一種多層前向網(wǎng)絡(luò),其中包含多個(gè)隱含層的網(wǎng)絡(luò),主要用來(lái)解決單個(gè)感知器難以解決的線性不可分問(wèn)題。BP 神經(jīng)網(wǎng)絡(luò)實(shí)質(zhì)上是一種按照誤差反向傳播算法訓(xùn)練的多層前饋網(wǎng)絡(luò),他可以學(xué)習(xí)和存儲(chǔ)大量的輸入—輸出模式映射關(guān)系,而無(wú)需事前描述這種映射關(guān)系的數(shù)學(xué)模型。BP 神經(jīng)網(wǎng)絡(luò)模型的算法一般步驟如下所示[13]:
設(shè)X1,X2,…Xn為輸入向量;Y1,Y2,…Ym為期望輸出向量;輸入層至隱含層的連接權(quán)值為ωij;隱含層至輸出層的連接權(quán)值為ωjk;輸入節(jié)點(diǎn)數(shù)和輸出節(jié)點(diǎn)數(shù)分別為m和n。
1)初始化神經(jīng)網(wǎng)絡(luò)。隨機(jī)賦予各層之間的連接權(quán)值ωij、ωjk以及相應(yīng)的閾值a、b在-1~1之間的初始值。
2)正向計(jì)算隱含層、輸出層的輸出。通過(guò)輸入向量X,連接權(quán)值ωij和閾值a,計(jì)算出隱含層的輸出H。
式中,f為激勵(lì)函數(shù),l為隱含層包含的節(jié)點(diǎn)數(shù)。
通過(guò)隱含層的輸出H,連接權(quán)值ωjk和閾值b,計(jì)算出輸出層的預(yù)測(cè)輸出C。
式中,f為激勵(lì)函數(shù),k為輸出層包含的節(jié)點(diǎn)數(shù)。
3)計(jì)算網(wǎng)絡(luò)的預(yù)測(cè)誤差。
通過(guò)期望輸出Y 與網(wǎng)絡(luò)預(yù)測(cè)輸出C 來(lái)計(jì)算預(yù)測(cè)誤差e。
4)依據(jù)誤差優(yōu)化權(quán)值與閾值。
通過(guò)預(yù)測(cè)誤差e來(lái)修正連接權(quán)值ωij和ωjk。
通過(guò)預(yù)測(cè)誤差e來(lái)修正閾值a和b。
式中η 為學(xué)習(xí)率;i=1,2,…m;j=1,2,……l;k=1,2,……n。
5)重復(fù)上述步驟,直到誤差滿足一定的精度要求。
遺傳算法將“優(yōu)勝劣汰,適者生存”的生物進(jìn)化理論引入到優(yōu)化參數(shù)形成的編碼串聯(lián)群體中,非常適合用來(lái)解決復(fù)雜問(wèn)題的優(yōu)化,具備著自我學(xué)習(xí)、自我適應(yīng)、自我優(yōu)化的優(yōu)點(diǎn)[14]。遺傳算法優(yōu)化的BP 神經(jīng)網(wǎng)絡(luò)主要是利用遺傳算法的全局搜索能力,通過(guò)對(duì)樣本進(jìn)行迭代訓(xùn)練得到神經(jīng)網(wǎng)絡(luò)中連接權(quán)值與閾值的最優(yōu)解[15]。其具體流程如下所示:
1)生成初始種群。將BP神經(jīng)網(wǎng)絡(luò)中的連接權(quán)值與閾值作為初始群體隨機(jī)進(jìn)行生成,用二進(jìn)制編碼符號(hào)串的形式來(lái)表示每個(gè)個(gè)體中的連接權(quán)值與閾值。設(shè)種群大小為N,交叉概率為Pc,變異概率為Pm。
2)建立適應(yīng)度函數(shù)。將神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)誤差e的倒數(shù)作為適應(yīng)度函數(shù)F,用來(lái)評(píng)價(jià)個(gè)體的優(yōu)劣程度。
式中,C為神經(jīng)網(wǎng)絡(luò)的實(shí)際預(yù)測(cè)值,Y為期望值,p為個(gè)體編號(hào),k為輸出節(jié)點(diǎn)編號(hào)。
3)選擇操作。個(gè)體的適應(yīng)度越高,表明其自身基因越優(yōu)良,因此有較大的概率被選中作為遺傳中的父代,有利于產(chǎn)生更為優(yōu)秀的子代。第i 個(gè)個(gè)體被選中作為父代的概率如下。
4)交叉操作與變異操作。在進(jìn)行下一代繁殖的過(guò)程中,將挑選出的優(yōu)秀個(gè)體進(jìn)行單點(diǎn)交叉操作,得到新的個(gè)體,同時(shí)對(duì)該個(gè)體進(jìn)行變異操作,選取合適的基因位置點(diǎn)進(jìn)行取反操作,從而產(chǎn)生一個(gè)新的群體。
5)重復(fù)上述步驟,直到滿足初始設(shè)定的迭代次數(shù)或者預(yù)測(cè)精度。將最終得到的優(yōu)化解進(jìn)行解碼得到相應(yīng)神經(jīng)網(wǎng)絡(luò)的權(quán)值與閾值,提升模型訓(xùn)練的效率。
交通流預(yù)測(cè)與其他預(yù)測(cè)領(lǐng)域有所不同,因?yàn)榻煌黝A(yù)測(cè)的結(jié)果將直接作為整個(gè)智能交通系統(tǒng)調(diào)度分配的重要依據(jù),必須確保預(yù)測(cè)結(jié)果的實(shí)時(shí)性與準(zhǔn)確性,而B(niǎo)P 神經(jīng)網(wǎng)絡(luò)算法雖然具備著很多的優(yōu)勢(shì),但其自身仍存在著很多局限性,例如全局搜索性能較差、容易陷入局部最優(yōu)以及收斂效率低等。為了滿足交通流預(yù)測(cè)對(duì)于實(shí)時(shí)與準(zhǔn)確方面的需求,將遺傳算法優(yōu)化后的BP 神經(jīng)網(wǎng)絡(luò)在Spark 的框架下實(shí)現(xiàn)并行化,得到一個(gè)更為高效的BP神經(jīng)網(wǎng)絡(luò),可以較好地彌補(bǔ)上述的缺陷。
在Spark中,并行化設(shè)計(jì)有一點(diǎn)區(qū)別于多線程,就是要充分協(xié)調(diào)各個(gè)任務(wù)之間的通信。在Hadoop中,一個(gè)任務(wù)需要編寫(xiě)一個(gè)相對(duì)應(yīng)的MapReduce程序,MapReduce 程序的編寫(xiě)次數(shù)必須與其操作次數(shù)一一對(duì)應(yīng),而Spark 則沒(méi)有這么嚴(yán)格的Map 與Reduce 的要求,直接在RDD 中進(jìn)行Map 與Reduce 等函數(shù)進(jìn)行調(diào)用即可,極大地提高了算法并行化的效率。為了使得交通流預(yù)測(cè)結(jié)果能夠兼顧實(shí)時(shí)性與準(zhǔn)確性,在訓(xùn)練中使用的數(shù)據(jù)集規(guī)模應(yīng)該足夠大,而如此大規(guī)模的數(shù)據(jù)顯然無(wú)法用單機(jī)模式來(lái)進(jìn)行處理,因此本文將Spark 分布式計(jì)算平臺(tái)和BP神經(jīng)網(wǎng)絡(luò)相結(jié)合,有機(jī)融合兩者的優(yōu)勢(shì)來(lái)進(jìn)行交通流預(yù)測(cè)。改進(jìn)后算法在Spark 平臺(tái)下的多個(gè)節(jié)點(diǎn)同時(shí)進(jìn)行訓(xùn)練,綜合決策各個(gè)節(jié)點(diǎn)得出最后的預(yù)測(cè)值Y,計(jì)算公式如下所示:
式中,yi表示第i個(gè)節(jié)點(diǎn)的預(yù)測(cè)值,ai表示第i個(gè)節(jié)點(diǎn)的權(quán)重值。
每個(gè)節(jié)點(diǎn)中的標(biāo)準(zhǔn)差公式如下所示:
式中,T表示輸出算法各個(gè)訓(xùn)練集的目標(biāo)值,E表示標(biāo)準(zhǔn)誤差函數(shù)。
依據(jù)梯度下降法則,Δαk的計(jì)算公式如下所示:
結(jié)合上述三個(gè)公式,利用鏈?zhǔn)角髮?dǎo)法則,可以得到公式如下所示:
式中,η表示學(xué)習(xí)率,本文將學(xué)習(xí)率設(shè)定為0.15,ak通過(guò)以下公式進(jìn)行更新:
改進(jìn)后的算法具體實(shí)現(xiàn)流程如下:
1)將存儲(chǔ)在分布式文件系統(tǒng)中的海量交通流預(yù)測(cè)數(shù)據(jù)提取到Spark 中,利用Spark 中的MapParition 函數(shù)將獲取到的數(shù)據(jù)集N 劃分為P 個(gè)部分(P為Spark中的節(jié)點(diǎn)數(shù))。
2)在各個(gè)Spark 節(jié)點(diǎn)中,相應(yīng)的Map 函數(shù)通過(guò)運(yùn)行BP 神經(jīng)網(wǎng)絡(luò)算法得到預(yù)測(cè)值,這個(gè)過(guò)程等價(jià)于P個(gè)神經(jīng)網(wǎng)絡(luò)在同時(shí)進(jìn)行訓(xùn)練。
3)依據(jù)Map 函數(shù)中得到的預(yù)測(cè)結(jié)果,Reduce函數(shù)對(duì)P 個(gè)節(jié)點(diǎn)進(jìn)行權(quán)值的統(tǒng)籌分析,得出最精確的預(yù)測(cè)結(jié)果。
模型的具體流程如圖2所示。
圖2 基于Spark的遺傳優(yōu)化BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型
目前國(guó)內(nèi)沒(méi)有詳細(xì)的開(kāi)源交通流數(shù)據(jù)分享平臺(tái),因此本文采用的數(shù)據(jù)來(lái)自美國(guó)加州的PeMS 數(shù)據(jù)庫(kù),將I-5 路段與716921 號(hào)監(jiān)測(cè)點(diǎn)相鄰的三個(gè)監(jiān)測(cè)點(diǎn)3 年共315360 組的交通流量數(shù)據(jù)做為歷史數(shù)據(jù),將對(duì)該路段716921號(hào)監(jiān)測(cè)點(diǎn)2019年10月11日的交通流量使用本文提出的模型進(jìn)行預(yù)測(cè)。
實(shí)驗(yàn)中利用4 臺(tái)配置相同的服務(wù)器來(lái)搭建Spark分布式平臺(tái),每臺(tái)服務(wù)器的配置均為Intel XeonE5-2640 2.6 GHz,8 核,32G 內(nèi)存。其中1 臺(tái)服務(wù)器作為管理節(jié)點(diǎn),負(fù)責(zé)各個(gè)分節(jié)點(diǎn)的數(shù)據(jù)統(tǒng)籌,其他;3 臺(tái)服務(wù)器作為分布式運(yùn)算節(jié)點(diǎn),負(fù)責(zé)相應(yīng)部分交通數(shù)據(jù)的處理任務(wù)。
綜合考慮影響交通流的相關(guān)因素,將天氣、節(jié)假日情況和上一時(shí)間節(jié)點(diǎn)的交通流數(shù)據(jù)作為BP神經(jīng)網(wǎng)絡(luò)的輸入。實(shí)驗(yàn)采用3 層BP 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),參數(shù)設(shè)定如下:輸入層節(jié)點(diǎn)數(shù)為3,輸出層節(jié)點(diǎn)數(shù)為1,隱含層采用Sigmoid 函數(shù),訓(xùn)練次數(shù)為100,訓(xùn)練目標(biāo)為0.0001,學(xué)習(xí)率為0.1。遺傳算法的參數(shù)設(shè)定如下:交叉概率為0.3,變異概率為0.03,迭代次數(shù)為100。
道路交通復(fù)雜的運(yùn)行環(huán)境,使得傳感器采集的數(shù)據(jù)中夾雜著許多沒(méi)有價(jià)值的“臟數(shù)據(jù)”,因此需要對(duì)數(shù)據(jù)進(jìn)行清洗和標(biāo)準(zhǔn)化處理。利用估值法來(lái)彌補(bǔ)缺失的數(shù)據(jù),消除數(shù)據(jù)中的噪聲,同時(shí)對(duì)數(shù)據(jù)進(jìn)行Min-Max 的標(biāo)準(zhǔn)化處理,使得所有數(shù)據(jù)都落在0~1這個(gè)區(qū)間內(nèi)。
為了評(píng)價(jià)模型預(yù)測(cè)的性能,本文采用均方誤差作為評(píng)價(jià)標(biāo)準(zhǔn),設(shè)交通流的實(shí)際值與預(yù)測(cè)值分別為F和f,則相對(duì)誤差E為
為了確保誤差為正值,引入均方誤差e 對(duì)模型的性能進(jìn)行評(píng)價(jià):
實(shí)驗(yàn)一:為了驗(yàn)證本文所設(shè)計(jì)的并行算法相較于遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)在海量交通數(shù)據(jù)的背景下具有較大的性能優(yōu)勢(shì),在兩臺(tái)配置相同的計(jì)算機(jī)中,分別進(jìn)行算法預(yù)測(cè),通過(guò)對(duì)于4 組不同大小數(shù)據(jù)集的測(cè)試來(lái)對(duì)比運(yùn)行的效率。重復(fù)5 次,取平均值作為最終結(jié)果,如表1所示。
表1 模型處理效率匯總
實(shí)驗(yàn)結(jié)果表明,隨著數(shù)據(jù)集大小的增加,傳統(tǒng)算法的效率急劇下降,但是基于Spark 分布式并行計(jì)算展現(xiàn)出明顯的優(yōu)勢(shì),更加適合用于海量數(shù)據(jù)的處理分析。
實(shí)驗(yàn)二:通過(guò)本文提出的基于Spark 平臺(tái)的遺傳優(yōu)化BP 神經(jīng)網(wǎng)絡(luò)模型對(duì)于交通流進(jìn)行實(shí)時(shí)預(yù)測(cè),結(jié)果如表2所示。
表2 預(yù)測(cè)結(jié)果匯總
通過(guò)預(yù)測(cè)值與實(shí)際值計(jì)算出均方誤差,均方誤差曲線如圖3所示。
圖3 均方誤差曲線
通過(guò)圖3 可以發(fā)現(xiàn),其均方誤差基本穩(wěn)定在0.06 之內(nèi),屬于可接受的誤差范圍。通過(guò)此次實(shí)驗(yàn),可以驗(yàn)證基于Spark的遺傳優(yōu)化BP神經(jīng)網(wǎng)絡(luò)模型是可行的。
本文在遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)模型的基礎(chǔ)上,借助Spark分布式平臺(tái)來(lái)實(shí)現(xiàn)交通流的預(yù)測(cè),將神經(jīng)網(wǎng)絡(luò)強(qiáng)大的學(xué)習(xí)能力與Spark平臺(tái)高效可擴(kuò)展的特性相結(jié)合,實(shí)現(xiàn)了較為高效的交通流預(yù)測(cè)效果。以后的工作,主要是進(jìn)一步優(yōu)化Spark 平臺(tái)中各個(gè)分節(jié)點(diǎn)的權(quán)重配置。