这个程序比之前的两个程序要复杂。
首先有一张OD(Origin-Destination)表,这张表里面统计了137个站点中,每个时段(从6:00到24:00)每个站点间的出行人数(带有方向性)。
现在以西朗站、早上6:00~6:15为例来说明这个步骤流程。首先读取OD数据,比如说读取了第7行,西朗到长寿路,6:00~6:15的客流量9,将每个站每个时段的人数除以15,变成1分钟粒度,全部保留小数,即9/15=0.6。接着读取行人走行时间表,得到行人从刷卡处到站台的走行时间(西朗站的)为120s,从而得到行人达站台的时刻为:6*3600+120 =21720,并开始记录本时刻为6:00。
接着读取有效路径集那张表,读取其中的第F列(乘车时间),第H列(换乘站点编号)第I列(换乘次数),第k列(角度费用),第J列(换乘时间)以及第N列(有效路径集合)。根据公式:
V=θ1Ttravel +θ2Ntrans +θ3Ttrans +θ4Cangle
其中公式中的θ对应于下表中的系数。
属性
平峰
高峰
系数
系数
乘车时间(h)
-5.3029
-7.7727
换乘次数
-0.6234
-0.5299
换乘时间(h)
-9.6731
-12.8199
角度费用(m)
-3.1199
-1.8370
其中高峰时间对应于每天7:00~9:00,17:00~19:00,剩余的时段对应平峰。即7:007:00~9:00和17:00~19:00上车的乘客,其路径选择概率公式中的参数需要变化。
由此公式可以得到在相同起点和终点的乘客,选择不同路径的概率分别是多少。西朗到长寿路共有8条可选择的路径,所以共对应8个路径选择概率。又由于从OD表中已经知道了西朗——长寿站之间的流量为0.6,则每条路径上的流量为0.6*Pk
读取断面序号匹配表,将刚刚读取的第N列的路径数据,从匹配表中的第I列(断面行号)找到对应的数,并定位于第A列(断面ID),找到相对应的断面ID.有几个断面就能找到几个ID。也就是说,现在知道了选择不同路径的乘客所将要走过的所有断面的编号。
比如说其中一条路径为 3-5-7-9-13-,其对应的断面ID为101 103 105 107 109
由于之前已经得到各个起点站的乘客到达站台(此时为西朗)的时刻21720,读取之前由第二个程序生成的列车时刻表,从起点区间编号开始(101),用101的第一列(因为第一列是到站时刻),选择还未到站,但到站时刻与人群到站时刻最近的那列车次。并跟踪此车次。即用列车时刻表的起始区间到站时刻与人群到站的时刻做差,选择其中大于0且最小的那趟车次。
分别记录下此趟列车经过之前各个区间的时刻,并将车上的人数写入到经过的每一个区间,区间要与时刻相对应。列车如果在某个区间运行,从发车到到站的时刻跨过了某一时段,比如说6:00~6:15这个时段列车发出,但是到达区间终点的时候是在6:15~6:30这个时间段,则需要将客流按照列车分别在这两个时间段里面运行时间的比例,分别分配到这个区间的两个不同时间段内。
当选择的路径中有换乘站时,则需要将列车的 到站时刻+换乘时间 作为乘客到达换乘站台的时刻,然后再用列车时刻表的区间到站时刻与人群到站的时刻做差,选择其中大于0且最小的那趟车次。由于产生了换乘,线路肯定会发生改变。换乘时间的位置为:读取换乘数据那张表,由于之前已经读取了有效路径集中的换乘站点编号(第H列)那一列,那里面的数字代表着换乘数据那张表的第几行。比如说121-133-5-,就代表着第121-133-5-行(需要删掉解释性的表头)中黄沙-海珠广场-公园前-3个换乘站。换乘站的换乘时间为第E列。有几次换乘这个工作就需要做几次。
然后取15份人群中第2组,即他们到达站台的时刻为:6*3600+60+120=21780,相当于进站相较前一组推迟了1分钟。然后重复之前的工作。直到取到6:14分。
然后接着读取OD表中6:15~6:30的数据,重复以上所有工作,直到23:45~24:00.
最终输出表样里面的
断面ID
上下行
起点ID
起点站
终点ID
终点站
线路
序号
都可以在断面序号匹配表里面查到。
其他说明:
1.OD表和最终输出的表的时间表头都是按照 小时:分钟:秒 的格式来的,而列车时刻表和程序中的计算都是以 秒数 的格式来计算的。列车时刻表中的到站发车时刻均是以凌晨0点到现在时刻所走的秒数来定义的。
2.为什么要对客流量/15,将时间划分为1分钟粒度?是应为这样做可以防止某趟列车到站却没人上车,而下趟列车却爆满的情况,能够使乘客较为均匀的产生。
3.6点进站的乘客,它产生的流量可能分布在6点至8点的某几个断面区间。
4.要注意高峰和平峰的系数不同,也即在高峰和平峰时,相同起点和终点的相同路径选择概率也是不一样的。即如果平峰和高峰某个OD间流量恰好一样,则由于选择概率不同,给路径上分配的流量也是不同的。
5.在最终的输出表中,某一时间段某区间断面的客流量是一个不断累加的过程,只要列车经过n个断面,客流量就要加在这n个断面上。即不能只把流量加在起终点区间上,经过的区间都要加载。
6.这个程序的过程就是某个时段,某个OD对上一但产生流量,就已经将它未来所处的位置和对应时刻给安排好。
7.走行时间由于现在没有收到数据,暂且将所有站的走行时间设为120s,将来各个站点的走行时间是会有大的调整。
8.本程序需要读取6张表,输出1张表。
很多表都是带有解释性的表头的,您编写程序的时候可以将其删去。
最后希望程序运行时间能控制在10分钟之内。
_1234567891.unknown
_1234567893.unknown
_1234567894.unknown
_1234567892.unknown
_1234567890.unknown
1
exp(V)
exp(V)
k
K
k
k
k
P
=
=
å
travel
T
trans
N
trans
T
angle
C