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