鞠耀輝 陳偉利 張佳琦 張晶亮 何振豪
(吉林建筑大學(xué),吉林 長春130118)
近些年來,中國的鐵路正在高速的發(fā)展。交通越來越便利,節(jié)假日選擇出行的人數(shù)正在不斷增多,全國各大景點(diǎn)節(jié)假日人流量都特別大,有來自全國各地的游客游訪。鐵路出行以其快速、準(zhǔn)時(shí)、經(jīng)濟(jì)、舒適的幾大優(yōu)勢,吸引了更多人去選擇。與此同時(shí),相應(yīng)的購票問題就出現(xiàn)了,尤其在春運(yùn)、法定節(jié)假日、寒(暑)假學(xué)生潮和景點(diǎn)的旅游旺季等,往往是一票難求,出行困難。網(wǎng)絡(luò)購票的興起,讓各種搶票攻略出現(xiàn),各種搶票軟件應(yīng)運(yùn)而生,甚至還收取一定費(fèi)用。由于票源始終有限,又受到官方系統(tǒng)的限制,即使購票人肯額外花錢,選擇搶票加速包,但能否搶到,有運(yùn)氣的成分,可能仍然沒有足夠票可買。有的軟件在為我們購票的同時(shí),默認(rèn)選擇搶票加速包,既沒有幫助購票者出行更加便利,還增加了出行費(fèi)用,加大了上述種種問題需要利用科技創(chuàng)新來得到更好地解決。
本作品的研究思路是基于了解目前所能搜索到的各種火車購票網(wǎng)站,并充分考慮了現(xiàn)今購票時(shí)的不足,以及對于對于節(jié)假日等時(shí)間乘客買不到票問題的調(diào)研,結(jié)合Python 技術(shù)的基礎(chǔ),自主設(shè)計(jì)了一種新的解決方案。在解決乘客買不到票的同時(shí),盡量減少時(shí)間、行程,并加強(qiá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)的乘車方案,提供給用戶。
在完成手機(jī)APP 的編寫及運(yùn)行測試后,提供給用戶免費(fèi)使用。用戶可以直接使用此軟件,也可以在遇到購票上的困難時(shí)使用該軟件。用戶進(jìn)行購票時(shí),對用戶輸入的起點(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ù)信息。
某線路(如圖1 所示),起點(diǎn)為a0,終點(diǎn)為an在起點(diǎn)到終點(diǎn)之間有a1,a2等站點(diǎn),現(xiàn)在就需要建立一個(gè)車票信息數(shù)據(jù)庫,具體如下:
2.3.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.3.2 同理建立a1→a2、a1→a3……a1→an-1、a1→an并標(biāo)記為:b12、b13、b14……b1n-1、b1n,數(shù)據(jù)包括:有票、具體張數(shù)、無票3 種,及相應(yīng)的席位信息等;
2.3.3 最后建立an-1→an并標(biāo)記為:bn-1n,數(shù)據(jù)包括:有票、具體張數(shù)、無票3 種,及相應(yīng)的席位信息等;
2.3.4 數(shù)據(jù)共有:(n-1)+(n-2)+(n-3)+……+2+1=n(n-1)/2;
2.3.5 數(shù)據(jù)拼接
(1)1 點(diǎn)換乘:在有票的條件下,查詢b0m+bmn的可行性,其中am 就是同車換乘中轉(zhuǎn)站點(diǎn);
(2)2 點(diǎn)換乘:在有票的條件下,查詢b0m+bml+bln的可行性,其中am、al就是同車換乘中轉(zhuǎn)站點(diǎn);
(3)多點(diǎn)換乘:在有票的條件下,查詢b0m+bml+……+bkn的可行性,其中am、al……ak就是同車換乘中轉(zhuǎn)站點(diǎn);
(4)上述方法無法實(shí)現(xiàn)時(shí),考慮“席位切換”的方式實(shí)現(xiàn)購票,即標(biāo)記ba、bb、bc、bd 等信息,其中a(商務(wù)座)、b(一等座)、c(二等座)、d(站票)為席位種類,在數(shù)據(jù)拼接時(shí),增加“席位切換”。可能得到如下信息:ba0m+bbml+……+bckn,其中am、al……ak就是同車換乘中轉(zhuǎn)站點(diǎn);
(5)上述方法無法實(shí)現(xiàn)時(shí),考慮“少疊加換乘”的方式實(shí)現(xiàn)購票,即標(biāo)記ba、bb、bc、bd 等信息,其中a(商務(wù)座)、b(一等座)、c(二等座)、d(站票)為席位種類,在數(shù)據(jù)拼接時(shí),增加”少疊加換乘”??赡艿玫饺缦滦畔ⅲ篵a0m+1+bbm-1l+……+bckn,其中am-1、am+1、al……ak就是同車換乘中轉(zhuǎn)站點(diǎn);
(6)上述方法無法實(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);
同車換乘數(shù)學(xué)模型
(7)上述方法無法實(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í)間也就越多,其中不確定因素也就越多。
市面上現(xiàn)有的火車票購票程序不能高效的、精準(zhǔn)便捷的針對不同用戶做出最符合其需求的火車票推薦方案?,F(xiàn)在的購票軟件僅僅依靠12306 網(wǎng)站購票系統(tǒng)為核心,通過自有服務(wù)器的強(qiáng)大刷票能力進(jìn)行搶票而已。在火車票資源不足時(shí)不能依靠自身的邏輯為用戶提供一套最為適應(yīng)的替代方案進(jìn)行購票。而我們的項(xiàng)目可以計(jì)算起點(diǎn)到終點(diǎn)間車次及車票的情況,有票直接購買。直達(dá)無票的情況下,在無票的車次上先一個(gè)中間站,進(jìn)行分段式購買,其中遵循用戶需求可以通過購買不同等級座位的方式來完成同車中轉(zhuǎn)到站的方法來實(shí)現(xiàn)用戶需求。如果仍然無票,智能選擇中轉(zhuǎn)站,將購票形式轉(zhuǎn)換成起點(diǎn)- 中轉(zhuǎn)- 終點(diǎn)。如果仍然無票,將起點(diǎn)車次、終點(diǎn)車次、中間車次分解進(jìn)行數(shù)據(jù)統(tǒng)計(jì),采用神經(jīng)網(wǎng)絡(luò)多元算法,在有票的情況下,計(jì)算有效通路,并拋棄路程過長,路程較高和中轉(zhuǎn)過多的選擇方案,實(shí)現(xiàn)購票。
3.1 應(yīng)用基于Python 語言的爬蟲技術(shù),Python 已成為目前第三大主流編程語言,相較于前兩種語言跟容易入門,可操作性更高Python 爬蟲技術(shù)作為二者結(jié)合它的適應(yīng)性更為強(qiáng)大。
3.2 我們設(shè)計(jì)的軟件算法更能貼合用戶需求,做到能最大限度滿足用戶的個(gè)性,減少用戶出行的麻煩,能在可行范圍內(nèi)實(shí)現(xiàn)同車多次換乘達(dá)到一輛車次在各個(gè)階段都有票的情況下使用戶抵達(dá)目的地。
3.3 在爬蟲技術(shù)的應(yīng)用下更快速的到最新的火車票信息,做到真正的在售票廳外得知每輛車每個(gè)站點(diǎn)之間的票務(wù)信息,幫助用戶快速方便購票。