摘要:共享单车由于其符合低碳出行理念,所以引起了越来越多人的注意,现在已经成为了一种新型共享经济。居民居住地和交通站点通常都有一段距离,这段不远的距离以及现实存在的公共交通拥挤现象则使居民乘坐公共交通的意愿降低,而将共享单车服务系统纳入城市公共交通体系,能够从一定程度上缓解这一现象。
为了解决题目中给出的四个问题,我们先将题中所给的骑行数据按每五十分钟的时间段进行分段,并在该时间段内按其从某区域出发和到达个数进行筛选,进行简单的加和之后便得到在该时间段内该地点存在的共享单车数(由于研究的是某一时间段,而并非时间点,所以该地点某一时刻的共享单车数存在误差)。其次,利用附件二所给的需求量和问题一所得到的某时间段共享单车数进行比较,并带入运输距离、运输费用、运输时间、顾客满意度四个变量,来对共享单车进行最优调度。然后,假设指标 W(满意度),用总的骑行次数与需求次数作比,将由问题一所得的总骑行次数与附件二需求骑行次数作比作为顾客满意度的重要指标,由需求次数与总骑行次数的差值来对 100 辆补加共享单车进行分配,已达到资源的最为合理的配置。最后,根据附件三所给数据做出关系曲线,对曲线进行直观的分析,并以两个城市为例,来说明共享单车的普及对计程车的影响。
关键词:共享单车, 骑行次数 ,最优配置, 顾客满意度
1.问题重述
共享单车是指企业在校园、地铁站点、公交站点、居民区、商业区、公共服务区等提供自行车单车共享服务,是一种分时租赁模式。共享单车是一种新型共享经济。共享单车已经越来越多地引起人们的注意,由于其符合低碳出行理念,政府对这一新鲜事物也处于善意的观察期。
很多共享单车公司的单车都有 GPS 定位,能够实现动态化地监测车辆数据、骑行分布数据,进而对单车做出全天候供需预测,为车辆投放、调度和运维提供指引。
请根据下面附件给出数据及结合根据需要自己收集的数据,完成以下问题:
(1)根据附件 1 中共享单车的骑行数据,估计共享单车的时空分布情况。
如从某地点 A 出发,到达不同地点的分布情况。可分时间段讨论。
(2)假如根据调查,得到人们的骑行需求估计数据,见附件 2。
根据问题 1 的估计结果,建立数学模型解决如何优化共享单车的调度问题。(3)根据附件 1 的骑行数据和附件 2 的需求数据,判断各区域所需共享单
车的满足程度,给出你的度量指标。若增加 100 辆单车,如何进行投放更优。
(4)附件 3 是某地区投入不同数量共享单车后打车人次的数据。据此分析研究共享单车的投入对该地区打车市场的影响。同时请你收集实际数据进行量化研究。
2.问题假设
(1)假设所给数据均为具体所给的数据;
3
(2)假设顾客满意度几乎仅受是否存在共享单车供骑行,而受其他因素影响较小;
(3)假设搜集所得的数据均为真实可靠的数据;
(4)假设所取的时间段均可看做是时间点,忽略步长的影响。
3.符号设定
W:满意度
Lij:任意两个区域之间的距离
Lmin:将经过所有区域的最短路径设为
4、问题分析
对问题一:
对题目所给的附件一用 Excel 进行数据处理,将时间分为 22 个时间段,每
个时间段 50 分钟,按地域对数据进行筛选,并在该时间段内按其从某区域出发
和到达个数进行筛选,筛选后对数据进行处理,得到某个时间段内共享单车的
数量(由于研究的是某一时间段,而并非时间点,所以该地点某一时刻的共享
单车数存在误差),进行时空分析。利用 Excel 对数据进行处理,做出折线图以
及面积图对共享单车的时空分析进行,得出直观地共享单车的时空分布图。
对问题二:
利用附件二所给的需求量和问题一所得到的某时间段共享单车数进行比
较,并带入运输距离变量,来对共享单车进行最优调度。通过对附件二到达某
地点的共享单车数量进行求和,得出一天内共享单车的需求量,进而与问题一
4
所求得的某时刻共享单车的数量进行比较,并且考虑进运输距离变量。当共享单车实际数量小于需求量时,根据上述四个变量来实现对共享单车的最优调度。
对问题三:
假设指标 W(满意度),用总的骑行次数与需求次数作比,将由问题一所得的总骑行次数与附件二需求骑行次数作比作为顾客满意度的度量指标。根据附件一的总的使用次数除以共享单车数量即为 每辆共享单车的平均使用次数(忽略共享单车的时空位移,仅关注共享单车的使用率即共享单车的骑行次数)。用共享单车需求次数减去共享单车每个区域总的骑行次数,根据差值和每个单车的平均使用次数,即可得到每个区域共享单车的投放数量。对问题四:
根据附件三所给共享单车数量与打车人数的具体数据做出两者的关系曲线,对曲线进行直观的分析,从曲线中可得出随着共享单车的投入,打车人数下降。并以两个城市为例,来具体说明共享单车的普及对计程车的影响。
5.问题一的求解
为了求出共享单车的时空分布情况,我们先将原始数据进行了表格化的处
理(见附录 1),然后用 Excel 软件进行数据处理。从共享单车的使用时间我们
可以看出这是一天的使用情况,从凌晨到早上六点(即 0-360 分钟基本无车辆
的使用情况)。所以我们从 360 分钟开始划分,每 50 分钟划分为一个时间段,
共位划分了 22 个时间段。然后按地域对数据进行筛选,并在该时间段内按其从
某区域出发和到达个数进行筛选,筛选后对数据进行处理,得到某个时间段内
5
共享单车的数量(由于研究的是某一时间段,而并非时间点,所以该地点某一
时刻的共享单车数存在误差),进行时空分析。
我们根据 1000 辆自行车的出发区域计算出在初始时刻各个中共享单车数量。
区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||||
车辆 | 100 | 109 | 90 | 99 | 106 | 102 | 90 | 120 | 91 | 93 | |||
数 | |||||||||||||
表 1:初始时刻各个区域内的单车个数
然后我们又根据在各个时段内各个区域内的骑入和骑出量(开始时刻表示
骑出,结束时刻表示骑出)计算出各个时间段内各个区域内的单车数量,如下
表:
时间段/区 | 区域 | 区 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | |||||||||||||||||||||||
域 | |||||||||||||||||||||||||||||||||
域 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||||||||||||||||||||||||
2 | |||||||||||||||||||||||||||||||||
360-410 | 77 | 91 | 85 | 87 | 103 | 97 | 90 | 103 | 75 | 97 | |||||||||||||||||||||||
410-460 | 56 | 76 | 98 | 79 | 88 | 94 | 83 | 91 | 93 | 91 | |||||||||||||||||||||||
460-510 | 32 | 92 | 97 | 89 | 96 | 77 | 89 | 79 | 98 | 95 | |||||||||||||||||||||||
510-560 | 30 | 87 | 112 | 83 | 93 | 85 | 93 | 70 | 88 | 105 | |||||||||||||||||||||||
560-610 | 31 | 62 | 139 | 89 | 88 | 79 | 100 | 67 | 86 | 103 | |||||||||||||||||||||||
610-660 | 34 | 35 | 155 | 97 | 106 | 82 | 97 | 68 | 82 | 101 | |||||||||||||||||||||||
660-710 | 27 | 21 | 149 | 99 | 91 | 87 | 120 | 69 | 91 | 100 | |||||||||||||||||||||||
710-760 | 24 | 22 | 161 | 82 | 86 | 93 | 126 | 71 | 99 | 107 | |||||||||||||||||||||||
760-810 | 24 | 14 | 150 | 85 | 75 | 106 | 137 | 40 | 121 | 113 | |||||||||||||||||||||||
810-860 | 10 | -3 | 147 | 92 | 69 | 105 | 145 | 39 | 119 | 123 | |||||||||||||||||||||||
860-910 | 11 | -6 | 147 | 89 | 47 | 95 | 130 | 27 | 126 | 113 | |||||||||||||||||||||||
910-960 | 7 | -5 | 144 | 75 | 28 | 95 | 107 | 19 | 132 | 128 | |||||||||||||||||||||||
960-1010 | 5 | -22 | 143 | 61 | 18 | 109 | 106 | 17 | 130 | 123 | |||||||||||||||||||||||
1010-1060 | 0 | -29 | 161 | 64 | 10 | 89 | 115 | 19 | 137 | 117 | |||||||||||||||||||||||
1060-1110 | -12 | -48 | 164 | 59 | -4 | 102 | 130 | 17 | 142 | 127 | |||||||||||||||||||||||
1110-1160 | -11 | -51 | 164 | 51 | -17 | 99 | 138 | 9 | 138 | 141 | |||||||||||||||||||||||
1160-1210 | -12 | -50 | 180 | 47 | -20 | 100 | 143 | 14 | 139 | 149 | |||||||||||||||||||||||
1210-1260 | 24 | -7 | 209 | 86 | 34 | 147 | 187 | 37 | 179 | 169 | |||||||||||||||||||||||
1260-1310 | 16 | -13 | 213 | 93 | 39 | 156 | 192 | 31 | 184 | 159 | |||||||||||||||||||||||
1310-1360 | 18 | 4 | 207 | 92 | 38 | 154 | 195 | 27 | 182 | 163 | |||||||||||||||||||||||
1360-1410 | 26 | -4 | 207 | 94 | 35 | 158 | 203 | 23 | 182 | 167 | |||||||||||||||||||||||
1410-1460 | 31 | -3 | 209 | 97 | 40 | 159 | 205 | 24 | 185 | 168 | |||||||||||||||||||||||
6 |
表 2:每个时段各个区域内的车辆数
由上表我们观察得到,某些区域内的某些时间段的车辆数产生了负数,这显然是不符合常理的,对此我们进行了的误差分析。由于我们是用初始车辆+骑入车辆-骑出车辆来计算各时段的车辆数的,我们用开始时刻就表示骑出,到达时刻表示骑入,而单车在骑行过程中的情况我们没有考虑在内,所以在车辆数目上产生了一些误差。但是这些并不影响我们得出的这些数据反映出其时空分布情况。
我们接着利用上表绘制了车辆的时空分布图,如下图:
图 1:各个时间段内各个区域的车辆数的面积图
7
图 2:各个时间段内各个区域的车辆数的折线图
我们根据上图可以看出在 1000 到 1200 的时间段内区域区域 1、区域 2、区
域 5 和区域 8 的单车数量明显减少,这也在一定程度上反映出这些区域在
1000-1200 的这段时间内单车数量小于其需求量。
6.问题二的求解
利用附件二所给的需求量和问题一所得到的某时间段共享单车数进行比
较,并带入距离这一变量,任意两个区域之间的距离我们可以用两个区域之间
单车行驶的时间的进行估算,从而实现共享单车进行最优调度转化为求两点间
最短路径问题进行解决,通过对附件二到达某地点的共享单车数量进行求和,
得出一天内共享单车的需求量,进而与问题一所求得的某时刻共享单车的数量
进行比较,并且考虑进距离变量。当共享单车实际数量小于需求量时,则根据
距离来实现对共享单车的最优调度。
我们将任意两个区域间的距离设为Lij,将经过所有区域的最短路径设为
8
Lmin,
kn | æd | ö | |||||
ç | ÷ | ||||||
L min = å å å | ij | + | lj | k | ||||
ç | |÷xij | ||||||
v | |||||||
k =1 i =1 j =1,j ¹i è | ø |
本题中我们通过算法求出最短路径(见附录),我们求出最短路径后,当共享单
车的实际数量小于需求量时,我们便根据最短路径对各个区域的单车进行分
配。
7.问题三的求解
假设指标 W(满意度),用总的骑行次数与需求次数作比,将由问题一所得的总骑行次数与附件二需求骑行次数作比作为顾客满意度的度量指标。根据附件一的总的使用次数除以共享单车数量即为 每辆共享单车的平均使用次数(忽略共享单车的时空位移,仅关注共享单车的使用率即共享单车的骑行次数)。用共享单车需求次数减去共享单车每个区域总的骑行次数,根据差值和每个单车的平均使用次数,即可得到每个区域共享单车的投放数量。
每日单车的平均使用次数 N=11651/1000=12 次
区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
每日运行车 | 1156 | 1322 | 1072 | 1228 | 1315 | 1192 | 1085 | 1373 | 1070 | 1088 | |
次 | |||||||||||
表 3:每日各区域的运行车次
区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | ||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |||
需求车次 | 1168 | 1286 | 1289 | 1313 | 1301 | 1319 | 1297 | 1383 | 1252 | 1235 | ||
9 |
表 4:每日各区域的需求车次
区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
W | 0.99 | 1.028 | 0.832 | 0.935 | 1.011 | 0.904 | 0.837 | 0.993 | 0.855 | 0.881 | |
表 5:各个区域的满意度指标
如果再投入 100 辆共享单车,按照平均每日每辆车使用 12 次计算,即可增加 1200 车次,我们经过对各个区域的满意度指标进行排序得出区域 3、区域7、区域 9 和区域 10 的满意度指标最低,所这 100 辆共享单车应优先向这四个
区域进行投放。
8.问题四的求解
我们根据附件三所给共享单车数量与打车人数的具体数据做出两者的关系
曲线,如下图所示
图 3:单车投放量与打车人次的关系图
10
由上图我们可以直观的看出随着共享单车的投入,打车人数下降。
我们在网上查询出郑州和徐州两个城市的单车投放量与打车人次的数据如
下表。 | |||||||||
单车 | |||||||||
投放 | 18300 | 27450 | 36600 | 45750 | 54900 | 64050 | 73200 | 82350 | 91500 |
量 | |||||||||
打车 | 299200 | 280896 | 262944 | 230912 | 213840 | 197120 | 176299 | 173800 | 172304 |
人次 | |||||||||
表 6:郑州单车投放量与打车人次的数量关系 | |||||||||
单车 | |||||||||
投放 | 9700 | 14550 | 19400 | 24250 | 29100 | 33950 | 38800 | 43650 | 48500 |
量 | |||||||||
打车 | 175100 | 164388 | 153882 | 135136 | 125145 | 115360 | 103175 | 101713 | 100837 |
人次 |
表 7:徐州单车投放量与打车次数的数量的关系
打车人次
350000
300000
250000
200000
150000
100000
50000
0
18300 27450 36600 45750 54900 64050 73200 82350 91500
图 4:郑州单车投放量与打车人次的关系图
11
打车人次
200000
180000
160000
140000
120000
100000
80000
60000
40000
20000
0
9700 14550 19400 24250 29100 33950 38800 43650 48500
图 5:徐州单车投放量与打车人次的关系图
由郑州和徐州这两个城市的实际数据再结合关系图我们可以明显看出随着共享单车的投入,打车人数下降,当单车投入到一定量时,打车人次减少的趋势会放缓。
9.模型分析
(1)模型优点
对数据的合理利用,在第一问中我们为了分析出单车时空分布情况,我们先
将题中所给的骑行数据按每五十分钟的时间段进行分段,并在该时间段内按其从
某区域出发和到达个数进行筛选,进行简单的加和之后便得到在该时间段内该地
点存在的共享单车数。在第二问中我们从骑行时间分析出了任意两个区域之间的
距离Lij,再通过经过十个区域之间的最短路径也进行最优调度;问题三种我们引
入了满意度指标 W,而且估算出单车日平均使用量,从而对新增的 100 辆单车进
行最优分派;问题四中我们则引入了郑州和徐州这两个城市的实际数据,
12
(2)模型不足
考虑因素不够全面,第一问中没有考虑骑行时间,所以造成了一些误差;第
二问中也只考虑距离的因素,实际情况要更加复杂。
10.参考文献
- 薛定宇,陈阳泉,高等应用数学问题的 MATLAB 求解,[M],北京:清华大学出版社,2008。
- 谭永基等,数学模型,[M],上海:复旦大学出版社。
- 中国数学建模网:www.shumo.com
11.附录
使用到的软件有 Matlab、excel、code:blocks.
附录 1:转化为表格形式骑行数据
8 | 1 | 8 | NaN |
8 | 468.28 | 471.67 | 10 |
8 | 569.13 | 580.61 | 2 |
8 | 655.88 | 669.49 | 6 |
8 | 724.07 | 728.71 | 8 |
8 | 778.06 | 782.69 | 6 |
8 | 877.31 | 891.67 | 10 |
1 | 2 | 1 | NaN |
1 | 463.23 | 473.56 | 8 |
1 | 482 | 486.27 | 4 |
1 | 572.77 | 576.71 | 8 |
1 | 610.74 | 615.33 | 4 |
1 | 620.65 | 631.31 | 10 |
1 | 658.01 | 665.38 | 3 |
1 | 736.58 | 744.81 | 5 |
1 | 773.68 | 787.33 | 2 |
1 | 803.59 | 813.95 | 7 |
13
3 | 4 | NaN | |
4 | 370.3 | 376.91 | 6 |
4 | 461.1 | 465.06 | 8 |
4 | 499.86 | 510.56 | 1 |
4 | 550.25 | 561.46 | 9 |
4 | 607.46 | 620.23 | 1 |
4 | 699.69 | 712.34 | 9 |
4 | 727.32 | 732.4 | 6 |
4 | 826.12 | 837.6 | 2 |
4 | 922.65 | 932.95 | 1 |
4 | 951.25 | 958.99 | 5 |
4 | 1004.54 | 1008.9 | 4 |
4 | 1067.72 | 1081.87 | 3 |
4 | 1161.33 | 1175.9 | 7 |
4 | 1244.92 | 1248.95 | 8 |
4 | 1289.57 | 1298.74 | 2 |
6 | 4 | 6 | NaN |
6 | 409.15 | 413.73 | 8 |
6 | 451.65 | 455.46 | 3 |
6 | 538.92 | 545.83 | 10 |
6 | 635.21 | 643.06 | 1 |
6 | 720.73 | 731.21 | 8 |
6 | 797.47 | 809.47 | 9 |
6 | 842.22 | 847.44 | 6 |
6 | 909.52 | 914.27 | 9 |
6 | 995.54 | 1000.22 | 10 |
10 | 5 | 10 | NaN |
10 | 464.1 | 476.6 | 6 |
10 | 481.7 | 494.59 | 2 |
10 | 534.99 | 540.02 | 3 |
……………. | |||
…………… | |||
1350.22 | 1336.61 | 1350.22 | 10 |
10 | 999 | 10 | NaN |
423.51 | 410.93 | 423.51 | 6 |
486.59 | 480.51 | 486.59 | 4 |
546.97 | 536.15 | 546.97 | 10 |
560.94 | 557.59 | 560.94 | 8 |
660.1 | 650.82 | 660.1 | 2 |
752.34 | 740.49 | 752.34 | 10 |
829.12 | 815.07 | 829.12 | 5 |
867.62 | 854.63 | 867.62 | 7 |
14
885.88 | 896.26 | 2 | |
930.2 | 921.1 | 930.2 | 8 |
1013.22 | 1009.07 | 1013.22 | 7 |
1113.06 | 1098.63 | 1113.06 | 3 |
1188.12 | 1183.98 | 1188.12 | 8 |
1254.46 | 1250.04 | 1254.46 | 3 |
1345.06 | 1330.27 | 1345.06 | 7 |
1390.66 | 1384.3 | 1390.66 | 6 |
4 | 1000 | 4 | NaN |
477.45 | 473.36 | 477.45 | 5 |
564.34 | 548.33 | 564.34 | 9 |
630.41 | 623.49 | 630.41 | 4 |
695.05 | 688.42 | 695.05 | 6 |
777.01 | 768.08 | 777.01 | 1 |
NaN | NaN | NaN | NaN |
附录 2:各个时段每个区域骑出共享单车数量
时间段/区 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | |
域 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
360-410 | 52 | 50 | 45 | 51 | 41 | 50 | 39 | 63 | 51 | 43 | |
410-460 | 69 | 80 | 63 | 75 | 75 | 76 | 71 | 96 | 59 | 70 | |
460-510 | 101 | 80 | 72 | 78 | 84 | 82 | 84 | 103 | 81 | 78 | |
510-560 | 75 | 86 | 69 | 79 | 88 | 79 | 69 | 94 | 86 | 71 | |
560-610 | 83 | 90 | 66 | 81 | 91 | 81 | 79 | 102 | 74 | 80 | |
610-660 | 75 | 88 | 75 | 89 | 79 | 78 | 71 | 92 | 79 | 68 | |
660-710 | 65 | 89 | 85 | 80 | 95 | 87 | 64 | 85 | 66 | 81 | |
710-760 | 78 | 79 | 58 | 81 | 71 | 80 | 69 | 79 | 72 | 69 | |
760-810 | 76 | 74 | 69 | 63 | 74 | 62 | 64 | 87 | 51 | 60 | |
810-860 | 63 | 79 | 65 | 72 | 80 | 73 | 58 | 72 | 59 | 60 | |
860-910 | 58 | 76 | 61 | 69 | 71 | 70 | 64 | 77 | 58 | 70 | |
910-960 | 62 | 58 | 56 | 66 | 75 | 61 | 79 | 75 | 55 | 55 | |
960-1010 | 49 | 64 | 53 | 70 | 60 | 49 | 52 | 48 | 45 | 53 | |
1010-1060 | 46 | 55 | 30 | 40 | 61 | 58 | 39 | 63 | 43 | 38 | |
1060-1110 | 51 | 76 | 38 | 47 | 61 | 38 | 31 | 38 | 40 | 48 | |
1110-1160 | 37 | 46 | 34 | 48 | 46 | 46 | 40 | 54 | 41 | 40 | |
1160-1210 | 33 | 45 | 28 | 27 | 43 | 29 | 32 | 35 | 30 | 29 | |
1210-1260 | 27 | 34 | 38 | 42 | 41 | 29 | 27 | 37 | 23 | 27 | |
1260-1310 | 27 | 29 | 20 | 25 | 24 | 24 | 20 | 28 | 25 | 23 | |
1310-1360 | 17 | 25 | 30 | 28 | 25 | 25 | 23 | 22 | 20 | 15 | |
1360-1410 | 12 | 19 | 17 | 17 | 30 | 15 | 10 | 23 | 12 | 10 | |
1410-1460 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
15 |
附录 3:各个时段每个区域骑入共享单车数量
时间段/区 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
域 | |||||||||||
360-410 | 29 | 32 | 40 | 39 | 38 | 45 | 39 | 46 | 35 | 47 | |
410-460 | 48 | 65 | 76 | 67 | 60 | 73 | 64 | 84 | 77 | 64 | |
460-510 | 77 | 96 | 71 | 88 | 92 | 65 | 90 | 91 | 86 | 82 | |
510-560 | 73 | 81 | 84 | 73 | 85 | 87 | 73 | 85 | 76 | 81 | |
560-610 | 84 | 65 | 93 | 87 | 86 | 75 | 86 | 99 | 72 | 78 | |
610-660 | 78 | 61 | 91 | 97 | 97 | 81 | 68 | 93 | 75 | 66 | |
660-710 | 58 | 75 | 79 | 82 | 80 | 92 | 87 | 86 | 75 | 80 | |
710-760 | 75 | 80 | 70 | 64 | 66 | 86 | 75 | 81 | 80 | 76 | |
760-810 | 76 | 66 | 58 | 66 | 63 | 75 | 75 | 56 | 73 | 66 | |
810-860 | 49 | 62 | 62 | 79 | 74 | 72 | 66 | 71 | 57 | 70 | |
860-910 | 59 | 73 | 61 | 66 | 49 | 60 | 49 | 65 | 65 | 60 | |
910-960 | 58 | 59 | 53 | 52 | 56 | 61 | 56 | 67 | 61 | 70 | |
960-1010 | 47 | 47 | 52 | 56 | 50 | 63 | 51 | 46 | 43 | 48 | |
1010-1060 | 41 | 48 | 48 | 43 | 53 | 38 | 48 | 65 | 50 | 32 | |
1060-1110 | 39 | 57 | 41 | 42 | 47 | 51 | 46 | 36 | 45 | 58 | |
1110-1160 | 38 | 43 | 34 | 40 | 33 | 43 | 48 | 46 | 37 | 54 | |
1160-1210 | 32 | 46 | 44 | 23 | 40 | 30 | 37 | 40 | 31 | 37 | |
1210-1260 | 63 | 77 | 67 | 81 | 95 | 76 | 71 | 60 | 63 | 47 | |
1260-1310 | 19 | 23 | 24 | 32 | 29 | 33 | 25 | 22 | 30 | 13 | |
1310-1360 | 19 | 42 | 24 | 27 | 24 | 23 | 26 | 18 | 18 | 19 | |
1360-1410 | 20 | 11 | 17 | 19 | 27 | 19 | 18 | 19 | 12 | 14 | |
1410-1460 | 5 | 1 | 2 | 3 | 5 | 1 | 2 | 1 | 3 | 1 | |
附录 4:各个时间段内各个区域内的单车数量
时间段/区 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | 区域 | ||
域 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
360-410 | 77 | 91 | 85 | 87 | 103 | 97 | 90 | 103 | 75 | 97 | ||
410-460 | 56 | 76 | 98 | 79 | 88 | 94 | 83 | 91 | 93 | 91 | ||
460-510 | 32 | 92 | 97 | 89 | 96 | 77 | 89 | 79 | 98 | 95 | ||
510-560 | 30 | 87 | 112 | 83 | 93 | 85 | 93 | 70 | 88 | 105 | ||
560-610 | 31 | 62 | 139 | 89 | 88 | 79 | 100 | 67 | 86 | 103 | ||
610-660 | 34 | 35 | 155 | 97 | 106 | 82 | 97 | 68 | 82 | 101 | ||
660-710 | 27 | 21 | 149 | 99 | 91 | 87 | 120 | 69 | 91 | 100 | ||
710-760 | 24 | 22 | 161 | 82 | 86 | 93 | 126 | 71 | 99 | 107 | ||
760-810 | 24 | 14 | 150 | 85 | 75 | 106 | 137 | 40 | 121 | 113 | ||
810-860 | 10 | -3 | 147 | 92 | 69 | 105 | 145 | 39 | 119 | 123 | ||
860-910 | 11 | -6 | 147 | 89 | 47 | 95 | 130 | 27 | 126 | 113 | ||
910-960 | 7 | -5 | 144 | 75 | 28 | 95 | 107 | 19 | 132 | 128 | ||
16 |
960-1010 | 5 | -22 | 143 | 61 | 18 | 109 | 106 | 17 | 130 | 123 |
1010-1060 | 0 | -29 | 161 | 64 | 10 | 89 | 115 | 19 | 137 | 117 |
1060-1110 | -12 | -48 | 164 | 59 | -4 | 102 | 130 | 17 | 142 | 127 |
1110-1160 | -11 | -51 | 164 | 51 | -17 | 99 | 138 | 9 | 138 | 141 |
1160-1210 | -12 | -50 | 180 | 47 | -20 | 100 | 143 | 14 | 139 | 149 |
1210-1260 | 24 | -7 | 209 | 86 | 34 | 147 | 187 | 37 | 179 | 169 |
1260-1310 | 16 | -13 | 213 | 93 | 39 | 156 | 192 | 31 | 184 | 159 |
1310-1360 | 18 | 4 | 207 | 92 | 38 | 154 | 195 | 27 | 182 | 163 |
1360-1410 | 26 | -4 | 207 | 94 | 35 | 158 | 203 | 23 | 182 | 167 |
1410-1460 | 31 | -3 | 209 | 97 | 40 | 159 | 205 | 24 | 185 | 168 |
附录 5:求最短路径
- MATLAB算法代码
function [mydistance,mypath]=mydijkstra(a,sb,db);
%寻找i,j两点最短路径
% 输入:a—邻接矩阵,a(i,j)是指i到j之间的距离,可以是有向的
% sb—起点的标号, db—终点的标号
% 输出:mydistance—最短路的距离, mypath—最短路的路径
n=size(a,1); visited(1:n) = 0;
distance(1:n) = inf; distance(sb) = 0; %起点到各顶点距离的初始化
visited(sb)=1; u=sb; %u为最新的P标号顶点
parent(1:n) = 0; %前驱顶点的初始化for i = 1: n-1
id=find(visited==0); %查找未标号的顶点
for v = id
if a(u, v) + distance(u) < distance(v)
distance(v) = distance(u) + a(u, v); %修改标号值
parent(v) = u;
end
end
temp=distance;
temp(visited==1)=inf; %已标号点的距离换成无穷
[t, u] = min(temp); %找标号值最小的顶点
visited(u) = 1; %标记已经标号的顶点
end
mypath = [];if parent(db) ~= 0 %如果存在路!
t = db; mypath = [db];
while t ~= sb
p = parent(t);
mypath = [p mypath];
t = p;
endend
mydistance = distance(db);
2.C++代码
#include<iostream>
#include<vector>
using namespace std;
void dijkstra(const int &beg,//出发点
const vector<vector<int> > &adjmap,//邻
接矩阵,通过传引用避免拷贝
vector<int> &dist,//出发点到各点的最短路
径长度
vector<int> &path)//路径上到达该点的前一
个点
//负边被认作不联通
//福利:这个函数没有用任何全局量,可以直接复制!
{
const int &NODE=adjmap.size();//用邻接矩阵的大小传递顶点个数,减少参数传递
dist.assign(NODE,-1);//初始化距离为未知
path.assign(NODE,-1);//初始化路径为未知
vector<bool> flag(NODE,0);//标志数组,判断是否处理过
dist[beg]=0;//出发点到自身路径长度为 0
while(1)
{
int v=-1;//初始化为未知
for(int i=0; i!=NODE; ++i)
if(!flag[i]&&dist[i]>=0)//寻找未被处理过且if(v<0||dist[i]<dist[v])//距离最小的
点
v=i;
if(v<0)return;//所有联通的点都被处理过
flag[v]=1;//标记
for(int i=0; i!=NODE; ++i) if(adjmap[v][i]>=0)//有联通路径且
17
if(dist[i]<0||dist[v]+adjmap[v][i]<di
st[i])//不满足三角不等式
{
dist[i]=dist[v]+adjmap[v][i];
//更新
path[i]=v;//记录路径
}
}
}
int main()
{
int n_num,e_num,beg;//含义见下
cout<<"输入点数、边数、出发点:";
cin>>n_num>>e_num>>beg;
vector<vector<int> > adjmap(n_num,vector<int>(n_num,-1));// 默认初始化邻接矩阵
for(int i=0,p,q; i!=e_num; ++i)
{
cout<<"输入第"<<i+1<<"条边的起点、终点、长度(负值代
表不联通):";
cin>>p>>q;
cin>>adjmap[p][q];
}
vector<int> dist,path;//用于接收最短路径长度及路径各点 dijkstra(beg,adjmap,dist,path); for(int i=0; i!=n_num; ++i)
{
cout<<beg<<"到"<<i<<"的最短距离为"<<dist[i]<<",反向
打印路径:";
for(int w=i; path[w]>=0; w=path[w])
cout<<w<<"<-";
cout<<beg<<'\n';
}
}
18