鞠耀輝 陳偉利
(吉林建筑大學(xué) 電氣與計(jì)算機(jī)學(xué)院,吉林 長春130118)
由于高鐵大力建設(shè),現(xiàn)在鐵路運(yùn)行車次半年至1 年間就調(diào)整一次。鐵路出行因高鐵的出現(xiàn),與飛機(jī)有了競(jìng)爭(zhēng)力,成為現(xiàn)代出行重要工具。相應(yīng)的購票問題就出現(xiàn)了,尤其在春運(yùn)、法定節(jié)假日、寒(暑)假學(xué)生潮和景點(diǎn)的旅游旺季等。那么,如何如何全力“榨取”火車票資源,實(shí)現(xiàn)火車全負(fù)荷運(yùn)行,成為了一項(xiàng)可研發(fā)項(xiàng)目。
基于Python 爬蟲技術(shù)的系統(tǒng)設(shè)計(jì)可以很好地解決這些問題。采用Python 爬蟲技術(shù)的系統(tǒng)軟件,即能解決人們購不到票或購票難的問題。不僅減小了購票時(shí)花費(fèi)的精力,也最大限度的利用了火車的運(yùn)力。本文章主要闡述了ZigBee 路燈控制系統(tǒng)中節(jié)點(diǎn)的具體設(shè)計(jì)方案及組網(wǎng)。
在該軟件運(yùn)行之前,先導(dǎo)入火車運(yùn)行車次、起點(diǎn)、中間站點(diǎn)、終點(diǎn)及時(shí)間信息構(gòu)成鏈狀數(shù)據(jù)結(jié)構(gòu)。然后建立標(biāo)記起點(diǎn),可任意轉(zhuǎn)換線路的中間點(diǎn),終點(diǎn)。之后建立分段的車票價(jià)格、運(yùn)行時(shí)間,這個(gè)時(shí)間包括了出發(fā)時(shí)間及到達(dá)時(shí)間。再建立優(yōu)選方案,在乘客進(jìn)行購票時(shí),自動(dòng)優(yōu)選直達(dá)票,其次是同車換乘,最后才會(huì)選擇中轉(zhuǎn)車站,并且車站盡量選擇同一站或相近的車站。之后建立硬件服務(wù)器,在服務(wù)器上運(yùn)行Python 算法程序以達(dá)到接收手機(jī)APP 和WEB 信息的目的。通過算法的計(jì)算,導(dǎo)出最優(yōu)的乘車方案,提供給用戶。
爬蟲,應(yīng)該稱為網(wǎng)絡(luò)爬蟲,也叫網(wǎng)頁蜘蛛、網(wǎng)絡(luò)機(jī)器人、網(wǎng)絡(luò)螞蟻等。其實(shí),搜索引擎,就是網(wǎng)絡(luò)爬蟲的應(yīng)用者。但搜索引擎不能對(duì)所需網(wǎng)站及特定數(shù)據(jù)進(jìn)行獲取,因此,需要自己開發(fā)爬蟲來解決問題。隨著互聯(lián)網(wǎng)的迅速發(fā)展,大數(shù)據(jù)時(shí)代的來臨,數(shù)據(jù)挖掘在從海量數(shù)據(jù)中探查潛在的價(jià)值信息起到了重要的作用,成為當(dāng)下熱門的研究和實(shí)踐方向之一。python 作為數(shù)據(jù)挖掘領(lǐng)域中較為熱門的程序語言,其豐富的技術(shù)庫和強(qiáng)大的科學(xué)計(jì)算能力成為數(shù)據(jù)挖掘過程中不可或缺的工具。總的說,Python是一個(gè)使用簡潔方便,很適合初學(xué)者使用的語言?;赑ython的網(wǎng)絡(luò)爬蟲可以更加準(zhǔn)確的獲取我們所需的目標(biāo)數(shù)據(jù),具有一定的研究價(jià)值。
爬在完成手機(jī)APP 的編寫及運(yùn)行測(cè)試后,提供給用戶免費(fèi)使用。用戶可以直接使用此軟件,也可以在遇到購票上的困難時(shí)使用該軟件。用戶進(jìn)行購票時(shí),對(duì)用戶輸入的起點(diǎn)、終點(diǎn)及具體車次進(jìn)行數(shù)據(jù)采集,通過計(jì)算好的優(yōu)選方案優(yōu)先向用戶推薦直達(dá)票,直達(dá)無票的情況下,直接使用同車換乘的方案,即在用戶不需要換座換車的同時(shí)達(dá)到中轉(zhuǎn)的目的。一站如果達(dá)不到目的那就增加到兩站、三站。在這種方案進(jìn)行不下去或者耗費(fèi)費(fèi)用時(shí)間行程等太高時(shí),進(jìn)行下一個(gè)方案。根據(jù)席位的差別進(jìn)行席位交叉換乘,即購買同車另一個(gè)或另一種席位的中轉(zhuǎn)票,只需切換席位就能達(dá)到中轉(zhuǎn)的目的。如果席位切換也不行時(shí),若是購票者愿意多購買一站,還可以在分段的行程中,有一兩個(gè)站點(diǎn)的重疊,也就是說在其中的兩站之間,購票者同時(shí)買了兩張票,但也能夠達(dá)到同車換乘的目的。疊加換乘也不行,那就通過購買少數(shù)站站票的方式實(shí)現(xiàn)購票。即購買某兩個(gè)無剩余票站點(diǎn)之間的站票,使得用戶前一段行程有座位,中間站一會(huì),后一段行程也有座位。但要保證站票的時(shí)間不能太長。同車換乘是最優(yōu)的方案,避免了換車的時(shí)間損失,同時(shí)有效利用車票的零散資源。此上的這些方案為層層遞進(jìn)的關(guān)系,在上一個(gè)方案無法進(jìn)行下去時(shí),才會(huì)進(jìn)入到下一種方案的計(jì)算。這些數(shù)據(jù)是實(shí)時(shí)采集的,即可通過不同時(shí)間,多次計(jì)算獲取購票方案。
關(guān)于算法部分,要求計(jì)算建立標(biāo)記起點(diǎn)、中間站點(diǎn)、終點(diǎn)數(shù)據(jù)信息。
某線路,起點(diǎn)為a0,終點(diǎn)為an 在起點(diǎn)到終點(diǎn)之間有a1,a2等站點(diǎn),現(xiàn)在就需要建立一個(gè)車票信息數(shù)據(jù)庫,具體如下:
(1)使用Python 爬蟲技術(shù),將a0→a1、a0→a2、a0→a3……a0→an-1、a0→an 并標(biāo)記為:b01、b02、b03……b0n-1、b0n,數(shù)據(jù)包括:有票、具體張數(shù)、無票3 種,及相應(yīng)的席位信息等;
(2)同理建立a1→a2、a1→a3……a1→an-1、a1→an 并標(biāo)記為:b12、b13、b14……b1n-1、b1n,數(shù)據(jù)包括:有票、具體張數(shù)、無票3 種,及相應(yīng)的席位信息等;
(3)最后建立an-1→an 并標(biāo)記為:bn-1n,數(shù)據(jù)包括:有票、具體張數(shù)、無票3 種,及相應(yīng)的席位信息等;
(4)數(shù)據(jù)共有:(n-1)+(n-2)+(n-3)+……+2+1=n(n-1)/2;
(5)數(shù)據(jù)拼接
①1 點(diǎn)換乘:在有票的條件下,查詢b0m+bmn 的可行性,其中am 就是同車換乘中轉(zhuǎn)站點(diǎn);
②2 點(diǎn)換乘:在有票的條件下,查詢b0m+bml+bln 的可行性,其中am、al 就是同車換乘中轉(zhuǎn)站點(diǎn);
③多點(diǎn)換乘:在有票的條件下,查詢b0m+bml+……+bkn 的可行性,其中am、al……ak 就是同車換乘中轉(zhuǎn)站點(diǎn);
上述方法無法實(shí)現(xiàn)時(shí),考慮“席位切換”的方式實(shí)現(xiàn)購票,即標(biāo)記ba、bb、bc、bd 等信息,其中a(商務(wù)座)、b(一等座)、c(二等座)、d(站票)為席位種類,在數(shù)據(jù)拼接時(shí),增加“席位切換”??赡艿玫饺缦滦畔ⅲ篵a0m+bbml+……+bckn,其中am、al……ak 就是同車換乘中轉(zhuǎn)站點(diǎn);
上述方法無法實(shí)現(xiàn)時(shí),考慮“少疊加換乘”的方式實(shí)現(xiàn)購票,即標(biāo)記ba、bb、bc、bd 等信息,其中a(商務(wù)座)、b(一等座)、c(二等座)、d(站票)為席位種類,在數(shù)據(jù)拼接時(shí),增加“少疊加換乘”。可能得到如下信息:ba0m+1+bbm-1l+……+bckn,其中am-1、am+1、al……ak 就是同車換乘中轉(zhuǎn)站點(diǎn);
上述方法無法實(shí)現(xiàn)時(shí),考慮“少行程補(bǔ)票換乘”的方式實(shí)現(xiàn)購票,即標(biāo)記ba、bb、bc、bd 等信息,其中a(商務(wù)座)、b(一等座)、c(二等座)、d(站票)為席位種類,在數(shù)據(jù)拼接時(shí),增加“少疊加換乘”??赡艿玫饺缦滦畔ⅲ篵a0m-1+bdm-1m+1+bbm+1l+……+bckn,其中am-1、am+1、al……ak 就是同車換乘中轉(zhuǎn)站點(diǎn);
(6)上述方法無法實(shí)現(xiàn)時(shí),考慮“2 車或2 車以上換乘”的方式實(shí)現(xiàn)購票,首先選擇中轉(zhuǎn)車站(盡量選擇同一車站點(diǎn)),再確定具體車次信息,必須考慮中轉(zhuǎn)時(shí)間(目前很多車站提供換乘快速通道),車次晚點(diǎn)等因素。比如:“2 車換乘”就變成“2 個(gè)同車換乘”,再應(yīng)用上述的“同車換乘”的方法實(shí)現(xiàn)分段購票。
同理,“2 車以上換乘”也就變成了“多個(gè)同車換乘”,再應(yīng)用上述的“同車換乘”的方法實(shí)現(xiàn)分段購票。只是,換乘中轉(zhuǎn)站點(diǎn)越多,耽誤的換乘時(shí)間也就越多,其中不確定因素也就越多。
當(dāng)使用其他軟件搶不到票時(shí),其實(shí)并不是真正的沒有車票了,而是還有很多碎片化的短程車票可用。Python 爬蟲技術(shù)常規(guī)用于大數(shù)據(jù)統(tǒng)計(jì)、科研運(yùn)算與研究中。從技術(shù)角度上,python 爬蟲技術(shù)實(shí)現(xiàn)將起點(diǎn)車次、終點(diǎn)車次、中間站車次分解進(jìn)行數(shù)據(jù)統(tǒng)計(jì),采用神經(jīng)網(wǎng)絡(luò)多元算法實(shí)現(xiàn)購票??梢宰畲笙薅鹊睦没疖囘\(yùn)力,將零散的碎片票集成應(yīng)用,達(dá)到全負(fù)荷運(yùn)行狀態(tài)。達(dá)到充分利用碎片化車票、節(jié)省人力物力、節(jié)能減排的目的。