本文以AFC系統中乘客進出站刷卡記錄資料為基礎并對進出站客流量進行預測,將神經網路與客流量時間與空間的分布特征相結合,能夠有效地揭示軌道交通客流量的變化趨勢,更進一步組合LSTM和CNN模型進行較為客觀的客流量預測資料統計,并通過深度學習將預測結果應用于實踐之中對軌道交通發車頻次進行合理優化,制定準確的發車間隔,以提升軌道交通運行效率,本文將使用上海10號線原始客流資料,通過python中的numpy和pandas庫進行資料清洗,通過CNN的特征提取和LSTM的短期預測得到短期客流預變化趨勢,相關代碼如下:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Reshape, Dropout, BatchNormalization
from tensorflow.keras.layers import LSTM, Conv1D, MaxPooling1D
from tensorflow.keras.optimizers import SGD
from datetime import datetime
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
data = pd.read_csv('all_day_data.csv')
def sample(name, state):
if state=='in':
stop_data_in = data[data['3'] == name][data['5']==0.0]
series_in = pd.Series([1]*len(stop_data_in), index=pd.to_datetime(stop_data_in['1']))
series_in = series_in.resample('10T').sum()
df_allday = pd.DataFrame({'Time':series_in.index, 'freq':series_in.values})
return df_allday
elif state=='out':
stop_data_out = data[data['3'] == name][data['5']!=0.0]
series_out = pd.Series([1]*len(stop_data_out), index=pd.to_datetime(stop_data_out['1']))
series_out = series_out.resample('10T').sum()
df_allday = pd.DataFrame({'Time':series_out.index, 'freq':series_out.values})
return df_allday
df = sample('10號線五角場', 'in')
s_date = pd.to_datetime('20150408')
df['Time'] = pd.to_datetime(df['Time'])
m = max(df['freq'])
train_data = df[df['Time']<=s_date]['freq'].values
test_data = df[df['Time']>=s_date]['freq'].values
test_data = test_data/m
train_data = train_data/m
train_n = len(train_data)
test_n = len(test_data)
LOOK_BACK = 6
train_x = np.array([train_data[k:k+LOOK_BACK] for k in range(train_n-LOOK_BACK+1)])
train_y = np.array(train_data[LOOK_BACK-1:])
train_x = tf.reshape(train_x, (-1, LOOK_BACK, 1))
test_x = np.array([test_data[k:k+LOOK_BACK] for k in range(test_n-LOOK_BACK+1)])
test_y = np.array(test_data[LOOK_BACK-1:])
test_x = tf.reshape(test_x, (-1, LOOK_BACK, 1))
Model = Sequential()
Model.add(Conv1D(50, 3, activation='relu',input_shape=(LOOK_BACK, 1)))
Model.add(MaxPooling1D(2))
Model.add(LSTM(150))
Model.add(Dropout(0.1))
Model.add(BatchNormalization())
Model.add(Dense(1, activation='sigmoid'))
Model.compile(loss='mse', optimizer='Adam')
Model.fit(train_x, train_y, epochs=20, batch_size=16, verbose=1)
mse = Model.evaluate(test_x, test_y)
print(f'average mean square error for model: {mse}')
predict_y = Model.predict(test_x)
test_time = df[df['Time']>=s_date]['Time']
time_x = [x.strftime('%H:%M') for x in test_time]
xs = [datetime.strptime(d, '%H:%M') for d in time_x]
ys = test_y*m
yp = predict_y*m
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
plt.gca().xaxis.set_major_locator(mdates.HourLocator())
plt.plot(xs[LOOK_BACK-1:], ys)
plt.plot(xs[LOOK_BACK-1:], yp, 'r')
plt.gcf().autofmt_xdate()
plt.savefig('predict.png')

以10號線五角場站為例,其中紅線代表預測值藍線代表真實值,由影像不難看出,由于作業出行具有較強規律性在早晚高峰期模型預測精準度比較高,而在晚上由于出行游玩等原因往往表現出不規律的特征但預測誤差也相對較小,在整體看來模型具有很分布預測性能,

通過上表顯示組合模型要比單獨的LSTM模型預測效果優異,各類誤差均為最小,其預測的MAE為13.3052,RMSE為21.5747,MAPE為24.2243%,此評價標準的建立進一步顯示了該模型在客流預測的優越性,可以充分說明CNN取證捕捉站點間空間相關關系再加上LSTM的時間預測使預測模型達到十分精確,
局限:
軌道交通短時客流預測是交通運營企業和交通運輸部門關注的重要問題,本文雖然對客流與發車頻率的預測進行模型建立,但短時客流預測和列車調度優化是一個極其復雜的程序,也希望研究此方面的同學或者作業中解決以下的問題:
1.由于節假日客流不確定性比較大,未建立起節假日和周末的預測模型
2.此模型只考慮正常情況,未對大型活動和突發情況進行客流預測
3.在列車發車頻率優化方面我們僅考慮客流量和等待時間方面進行優化未考慮乘客時間價值、乘客感受度、列車過剩成本等多方面的影響
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/437011.html
標籤:AI
上一篇:OpenCV學習(58)
