l 道路交通是城市的核心要素之一。
l 随着社会经济的发展,中国城市的车辆保有量已经越来越多,大都市慢慢变成了“堵”市。如何在出行时避免拥堵,是每一个人的目标。
l 日常生活中,很多拥堵是由于车辆行驶路线规划失误,大批车辆集中选择主干道行驶导致通行效率下降。
l 如果车辆都由调度中心统一规划调度路线,拥堵问题将得到大大缓解甚至彻底解决。
l 实际上这一技术已经在工业领域如矿山车辆、无人货仓等得到广泛应用。
l 但道路上的私家车辆尚无法进行统一规划,未来,自动驾驶和物联网技术的结合,使得彻底解决这一难题出现了曙光。
l 请同学们提前出任“首席城市交通规划官”,为未来城市规划好每一辆车的行驶路线。
l 在模拟的道路图上为每一辆车规划行驶路线,系统会自动根据规划路线运行。
l 在路线合法的前提下,最终所有车辆按照规划的路线到达目的地。
l 路口完全立交:假定在每一个路口交汇的所有道路都可以完全互连,且车辆通过路口时不考虑在路口的通行时间。
l 无限神奇车库:我们认为,系统中的每个地点都有一个无限容量的“神奇车库”。车辆在未到既定出发时间前,或者到达目的后,就停放在“神奇车库”中,完全不影响其他车辆通过。但车辆一旦出发,在行驶过程中则不允许进入车库空间。
4. 约束条件
l 不允许超车变道:即车辆一旦进入某条车道,就必须在此车道内从道路起点驶向道路终点,中途不允许变道,即使前车速度缓慢,也不允许超车。
l 排队先到先行:在一条道路前排队等待的所有车辆,按照到达时间先后进入道路。若多辆车在同一时间到达,按如下规则进入下一道路:
1. 同一道路牌车道号小(车道的编号)的车辆优先于车道号大的车辆
Figure 1:直行车道优先示例
2. 按现实交通规则,直行车辆有优先通行权,直行车辆优先于转弯车辆
Figure 2:直行优先示例
3. 处于左转进入道路的车辆优先于右转进入道路的车辆
Figure 3:转弯优先示例
l 车道固定进入:车辆在进入一段道路时按照车道编号从小到大的优先级选择可以进入的车道驶入,与前车的行驶速度无关。
即就是:车辆优先按车道编号由小到大依次进入,除非车道号小的车道没有空位可进入。
Figure 4:进入车道规则示例
如下Figure 5:车道行驶规则举例所示,左侧道路车辆经一定时间行驶达到右侧道路车辆状态。
Figure 5:车道行驶规则举例
每一个测试用例都分为三部分:
道路
l 道路数据文件“road.txt”文件。
l 每一行数据为一条道路。
l 每条道路数据表示为:(道路id,道路长度,最高限速,车道数目,起始点id,终点id,是否双向)格式的向量。例如(502, 10, 6, 5, 2, 3, 1)的向量表示编号为502的道路,连接路口2和路口3的长度为10,限速6的双向5车道路段; (502, 10, 6, 5, 2, 3, 0)的向量表示编号为502的道路,连接路口2和路口3的长度为10,限速6的单向5车道路段。
l 起始点id:路口id(下文中有描述)
l 终止点id:路口id(下文中有描述)
l 是否双向:1:双向;0:单向
l 不管是双向道路还是单向道路,一条道路数据只会有一行数据表示,不会因为双向而多出来一行道路的数据表示。
l “#”开始的数据行为说明性文字,可以理解成为注释。如“#(id,length,speed,channel,form,to,isDuplex)”。
l 对于多车道的道路,相对于行驶方向,车道编号从左至右依次增大。
Figure 6:车道编号示例
车辆
l 车辆数据文件“car.txt”。
l 每一行数据为一车辆。
l 每辆车数据表示为:(车辆id,始发地、目的地、最高速度、出发时间)格式的向量。例如(1001,1,16,6,1)的向量表示一辆编号是1001最高速度为6的车辆要在时间点1从路口1到达路口16。
l 始发地:路口id(下文中有描述)
l 目的地:路口id(下文中有描述)
l “#”开始的数据行为说明性文字,可以理解成为注释。如“#(id,始发地,目的地,最高速度,出发时间)”。
路口
l 路口数据文件“cross.txt”。
l 每一行数据为一个路口。
l 每个路口数据表示为:(路口id,道路id,道路id,道路id,道路id)格式的向量。例如(6, 504, 514, 505, 518)表示504,514,505,518这四条路段交汇的编号为6的路口。
l 路口信息数据向量中的道路id,以路口为中心,其所连接的道路id按顺时针方向编排。比如向量(100,21,30,9,55)和(100,21,30,-1,55)分别表示如下:
Figure 7:路口数据向量示例
l “#”开始的数据行为说明性文字,可以理解成为注释。如:“#(结点id,道路id,道路id,道路id,道路id)”。
数据样例:
l Road.txt
#(道路id,道路长度,最高限速,车道数目,起始点id,终点id,是否双向)
(501, 10, 6, 5, 1, 2, 1)
(502, 10, 6, 5, 2, 3, 1)
(503, 10, 6, 5, 3, 4, 1)
(504, 10, 6, 5, 5, 6, 1)
(505, 10, 6, 5, 6, 7, 1)
(506, 10, 6, 5, 7, 8, 1)
(507, 10, 6, 5, 9, 10, 1)
(508, 10, 6, 5, 10, 11, 1)
(509, 10, 6, 5, 11, 12, 1)
(510, 10, 6, 5, 13, 14, 1)
(511, 10, 6, 5, 14, 15, 1)
(512, 10, 6, 5, 15, 16, 1)
(513, 10, 6, 5, 1, 5, 1)
(514, 10, 6, 5, 2, 6, 1)
(515, 10, 6, 5, 3, 7, 1)
(516, 10, 6, 5, 4, 8, 1)
(517, 10, 6, 5, 5, 9, 1)
(518, 10, 6, 5, 6, 10, 1)
(519, 10, 6, 5, 7, 11, 1)
(520, 10, 6, 5, 8, 12, 1)
(521, 10, 6, 5, 9, 13, 1)
(522, 10, 6, 5, 10, 14, 1)
(523, 10, 6, 5, 11, 15, 1)
(524, 10, 6, 5, 12, 16, 1)
l Car.txt
#(id,始发地,目的地,最高速度,出发时间)
(1001,1,16,6,1)
(1002,1,16,6,1)
(1003,1,16,6,1)
(1004,1,16,6,1)
(1005,1,16,6,1)
(1006,1,16,6,1)
(1007,1,16,6,1)
(1008,1,16,6,1)
l Cross.txt
#(结点id,道路id,道路id,道路id,道路id)
(1, 501, 513, -1, -1)
(2, 501, -1, 502, 514)
(3, 502, -1, 503, 515)
(4, 503, -1, -1, 516)
(5, 513, 504, 517, -1)
(6, 504, 514, 505, 518)
(7, 505, 515, 506, 519)
(8, 506, 516, -1, 520)
(9, 517, 507, 521, -1)
(10, 507, 518, 508, 522)
(11, 508, 519, 509, 523)
(12, 509, 520, -1, 524)
(13, 521, 510, -1, -1)
(14, 510, 522, 511, -1)
(15, 511, 523, 512, -1)
(16, 512, 524, -1, -1)
l 选手应针对题目输入中的所输入的信息为基础,编写完整程序,输出“answer.txt”文件。
l “answer.txt“文件中每行数据表示:每一辆车的行驶路线规划,具体格式为(车辆id,实际出发时间,行驶路线序列)格式的向量。例如(1001, 1, 501, 502, 503, 516, 506, 505, 518, 508, 509, 524)即为上述1001号车辆自时间点1开始出发,从道路501、502、503…行驶至道路524的行驶路线。
l 每条答案数据以“(”起始,以“)”终止,路径中各道路以“,”分隔,中间只可以出现0个或多个空格“ ”,不允许出现其他非法字符。
l “#”开始的数据行为说明性文字,可以理解成为注释。系统阅卷会忽略“#”开始的该行数据。如:“#(carId,StartTime,RoadId...)”
l “answer.txt”示例:
#(carId,StartTime,RoadId...)
(1001, 1, 501, 502, 503, 516, 506, 505, 518, 508, 509, 524)
(1002, 1, 513, 504, 518, 508, 509, 524)
(1003, 1, 513, 517, 507, 508, 509, 524)
(1004, 1, 501, 502, 515, 519, 509, 524)
(1005, 1, 501, 514, 504, 517, 507, 508, 509, 524)
(1006, 1, 513, 517, 521, 510, 511, 512)
(1007, 1, 513, 504, 518, 507, 521, 510, 511, 512)
(1008, 1, 501, 502, 503, 516, 506, 519, 508, ,522, 511,512)
l 系统调度时间短者胜出。系统调度时间指,从系统调度开始时间(非第一辆车实际开始运行的时间),至所有车辆全部到达目的地的时间,两者之差作为系统调度时间。
l 若系统调度时间相同,则所有车辆的行驶用时总时间最少者胜出。一辆车在系统计算中达到目的地的时间点减去其最初计划出发的时间点,称为这辆车的行驶用时。
l 若两队参赛选手的规划路线所有车辆的行驶用时总时间相同,则参赛选手程序计算出所有车辆行驶路线所运行时间最少者胜出。(该时间与前述时间不同,为程序运行时间,单位为ms)
l 若参赛选手程序计算运行时间也相同,则先提交代码的队伍胜出。
1.对道路建模,构建双向图、
2.约定道路上车辆的数量与道路的长度之间的关系。(道路越拥挤道路越长,做一个变换)
3.两点之间的最短路径(实时的,根据当前路况建模的结果求解最优路线)