✅博主简介:本人擅长数据处理、建模仿真、程序设计、论文写作与指导,项目与课题经验交流。项目合作可私信或扫描文章底部二维码。
在对城市轨道交通的客流进行预测时,需要充分理解其客流的时空特征及其在不同条件下的变化规律。尤其是在大型活动和封站干预条件下,客流的表现与常态条件下有显著差异。因此,首先需要对常态条件、大型活动和封站干预条件下的线网客流特征进行深入分析。
-
常态条件下的客流规律:常态条件下的客流表现出稳定的时段性和规律性。日常高峰时段如早高峰和晚高峰,客流量较大,而非高峰时段则相对平稳。通过对历史客流数据的分析,可以发现客流的季节性波动和工作日与周末的差异。这些规律为短时客流预测提供了基础数据。
-
大型活动下的客流特征:大型活动如展会、演唱会等会显著改变轨道交通的客流模式。活动前期和活动期间,车站周边的客流量会急剧增加,且客流集中度较高。活动结束后,客流量会迅速回落。这种大规模、短时间内的客流变化要求预测模型具备较高的灵活性和准确性,以便对运输组织和客运服务做出快速响应。
-
封站干预条件下的客流影响:封站干预如因维修、突发事件等导致的车站封闭,会对周边车站及整个线网的客流分布产生影响。封站可能导致客流在其他车站的聚集,从而使得原本稳定的客流模式被打破。这种情况下,客流预测模型需要能够识别封站的影响范围,并调整预测结果。
二、常态条件下的短时客流预测模型
在常态条件下,短时客流预测是运营管理的重要任务。为了提高预测精度,提出了一种融合循环门控单元(GRU)和图卷积神经网络(GCN)的GCGRU模型。该模型通过对比分析,显示出在短时预测精度上的显著提升。
-
GCN(图卷积网络):图卷积网络(GCN)是一种适用于处理图结构数据的神经网络模型。在城市轨道交通中,车站及其之间的连通关系可以看作是一个图结构,GCN能够有效地提取不同车站间的空间关联性。通过GCN,可以获取每个车站与其他车站的关系,从而识别出影响客流的空间因素。
-
GRU(循环门控单元):GRU是一种改进的递归神经网络,能够处理时序数据中的长短期依赖问题。在客流预测中,GRU能够捕捉到车站客流的时变特征,如周期性波动和突发变化。与传统的时间序列预测模型如ARIMA(自回归积分滑动平均模型)相比,GRU对时序数据的处理能力更强,预测精度更高。
-
GCGRU模型:GCGRU模型将GCN和GRU结合,通过GCN提取空间特征,通过GRU处理时序特征,从而实现对车站客流的综合预测。实验表明,与ARIMA、SVR(支持向量回归)、BPNN(反向传播神经网络)等模型相比,GCGRU模型在预测精度上有显著提升,能够更准确地预测短时客流变化。
三、大型活动下的客流预测模型
针对大型活动的特殊客流情况,构建了基于客流成分划分的灰色预测模型。该模型通过分析活动进站量与OD(Origin-Destination)分布量的历史规律,能够有效预测活动影响下的客流分布。
-
灰色预测模型:灰色预测模型(Grey Prediction Model)是一种适用于小样本和不确定数据的预测方法。通过对历史客流数据进行灰色建模,可以预测大型活动期间的客流变化。模型通过对客流成分进行划分,分析活动期间各个车站的客流量,并结合历史数据进行预测。
-
客流成分划分:在大型活动中,客流成分通常包括活动前期、活动期间和活动后期的不同阶段。通过对客流数据进行成分划分,能够更精确地捕捉到每个阶段的客流特点,从而提高预测的准确性。
-
案例研究:以广交会为例,应用灰色预测模型进行客流预测。结果表明,该模型能够较好地预测活动期间的客流分布,具有较高的准确性和适应性。这一模型为大型活动的运输组织和客运服务提供了有力的数据支持。
四、封站干预条件下的客流预测模型
在封站干预的情况下,提出了基于SAX(符号聚合近似)和DFM(动态因子模型)的组合预测模型,以识别受影响车站和调整预测结果。
-
SAX(符号聚合近似):SAX是一种时间序列数据降维和符号化的方法,通过将时间序列数据转化为离散符号,能够识别出数据中的模式和异常。在封站干预条件下,SAX可以用来识别封站对客流的潜在影响范围,帮助确定受影响的车站。
-
DFM(动态因子模型):动态因子模型是一种用于分解时间序列数据特征的统计模型。DFM能够将客流数据分解为一般特征和波动特征,从而识别出数据中的系统性变化和随机波动。结合DFM,可以更准确地预测封站干预下的客流变化,并调整预测结果以反映实际情况。
-
组合预测模型:将SAX和DFM结合,利用SAX识别封站的潜在影响范围,利用DFM对客流数据进行特征分解和预测。通过对国庆70周年庆典活动的封站案例研究,表明该方法能够有效识别受影响车站,相较于ARIMA模型,预测结果的均方根误差下降26.1%,平均绝对误差下降20.78%,显著提升了预测的准确性。
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense, GRU, GraphConv, GraphPool
from tensorflow.keras.models import Model
# 图卷积网络层定义
class GraphConvLayer(tf.keras.layers.Layer):
def __init__(self, units):
super(GraphConvLayer, self).__init__()
self.units = units
def build(self, input_shape):
self.kernel = self.add_weight(shape=(input_shape[0][-1], self.units),
initializer='glorot_uniform', trainable=True)
def call(self, inputs):
adjacency_matrix, features = inputs
adjacency_matrix = tf.linalg.normalize(adjacency_matrix, axis=1)[0]
graph_conv_output = tf.matmul(tf.matmul(adjacency_matrix, features), self.kernel)
return graph_conv_output
# GCGRU模型定义
def create_gcgru_model(input_shape):
adjacency_matrix_input = Input(shape=input_shape[0], name='adjacency_matrix')
features_input = Input(shape=input_shape[1], name='features')
x = GraphConvLayer(64)([adjacency_matrix_input, features_input])
x = GRU(64, return_sequences=True)(x)
x = Dense(1)(x)
model = Model(inputs=[adjacency_matrix_input, features_input], outputs=x)
model.compile(optimizer='adam', loss='mse')
return model
# 输入形状示例
input_shape = [(None, 64), (None, 10)]
model = create_gcgru_model(input_shape)
model.summary()