对南京地铁计价模型分析及最佳路径设计基于Python语言
离散数学技术报告(该报告不完整)
实验题目:对南京地铁计价模型分析及最佳路径设计基于Python语言
关键词: 城市交通; 地理信息系统; Dijkstra算法; 约束条件; 路径分析
一.引言
截至2022年10月,南京地铁已开通运营线路共有11条,包括1、2、3、4、10、S1、S3、S6、S7、S8及S9号线,均采用地铁系统,共193座车站(换乘站重复计算),地铁线路总长429.1千米,构成覆盖南京全市11个市辖区及句容市的地铁网络。南京是中国第一个区县全部开通地铁的城市,也是继广州、上海、武汉后中国第四个开通跨市地铁线路的城市通过对离散数学图论部分的学习,我们通过此次实验调查了南京地铁的计价规则,并通过编程的方式对其进行复现,该计价系统只需要在确定起点和终点的情况下寻求最短路径,花费最少的费用完成路程转换,以达到在实际情况下提高所学知识运用能力的目的。
二.技术总结
1 资料查阅
根据南京市发展和改革委员会《关于调整南京地铁线网票价的通知》可知南京地铁按里程计价的规则:
南京地铁票制按里程计价,起步价2元可乘4千米,4千米以上部分,票价每增加1元晋级相应里程。详细票价查询可访问南京地铁官网。
2019年3月31日之前南京地铁实行低票价策略,从首条线路正式运营起南京地铁票价为中国最低,按国际地铁协会统计的购买力衡量,南京地铁票价属亚洲最低,按乘距衡量票价在全球排名末位。
南京地铁线网票价方案 |
|||
分段 |
乘坐里程(千米) |
跨度 |
单程票票价 |
1 |
0≤里程≤4 |
4千米 |
2元 |
2 |
4<里程≤9 |
5千米 |
3元 |
3 |
9<里程≤14 |
5千米 |
4元 |
4 |
14<里程≤21 |
7千米 |
5元 |
5 |
21<里程≤28 |
7千米 |
6元 |
6 |
28<里程≤37 |
9千米 |
7元 |
7 |
37<里程≤48 |
11千米 |
8元 |
8 |
48<里程≤61 |
13千米 |
9元 |
9 |
61<里程 |
每15千米 |
增加1元 |
在遇到起点和终点存在多种换乘线路的情况时,应当按照最短换成里程计算票价。
由计价方式可将地铁计价问题抽象为图论中的最短路径问题:将地铁线路图抽象为无向简单赋权图,车站为图中的节点,地铁线路为边,将站间距离作为权值。通过求最短路径的算法即可求得其最短路径。利用最短路径长度通过计价标准计算可得票价。
站间距离可以从南京地铁官网(https://www.njmetro.com.cn/njdtweb/home/go-line-intro.do?columnId=8a8080076512510d0165130727520004&rowId=8a80800765a29a780165a8538b6f0018)查询得到。
2 设计思路
此次实验的核心为利用迪杰斯特拉算法求出给定起点和终点之间的最短距离从而得出花费最低的票价及其最短路程完成目的。以下进行分析阐述。
3 问题分析
首先将从南京地铁官网可获取本次实验所需要的1号线、2号线、3号线、4号线、10号线、S1号线、S3号线、S6号线、S7号线、S8号线、S9号线地铁线路图如下:
其次,根据所学图论知识,将图中车站画为节点,地铁线路为连结两节点的边,将站间距离作为权值赋权,通过绘制无向简单带权图,建立地铁线路系统分析的模型如下:
建立初步模型后,接下来就是搭建数据储存的几种机制。得出以下两种方式储存地铁站间距离,一是通过二维数组直接进行所有点间的权重(即距离)的遍历,二是通过一维数组进行相邻站点间的距离的储存,在调用时再新建邻接矩阵进行图的矩阵化。
在邻接矩阵准备完毕后,通过我们此次试验需要用到的核心算法Dijkstra算法进行计算得到最短路径来用于求取费用,最后输出我们想要的结果。
三.系统与算法
1 理论分析Dijkstra算法
Dijkstra算法是由荷兰计算机科学家Dijkstra于1959 年提出的,是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。从一个点出发寻求到另一个点的最短路径,Dijkstra算法用生成“最小路径树”的方法实现(1)算法特点:Dijkstra算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树。
(2)算法思想:设G=<V,E>是一个带权有向图,把图中顶点分成两部分,一部分为最短路径已使用过的点的集合(设为S),另一部分为还未经过的点的集合(设为U),初始时S只有一个源点,按照最短路径长度的递增次序依次把U中的顶点加入到S中,在此过程中总是保持源点到S中顶点的最短路径长度不大于源点到U中任何顶点的最短路径。
每个顶点同时还对应一个距离,S中顶点的距离就是从源点到此顶点的最短路径长度。
(3)算法描述:
(a).选择一个结点作为树的根,将其标记成永久性结点。接着从根出发与它的所有相邻的结点分别做出临时连接。
(b).比较所有的临时连接,找出费用最小的路径,这个路径上的弧和结点都被标记为最短路径树上的永久部分。
(c)考察从选定的最短路径向外延伸所能连接的所有非永久性结点,将这些结点临时性地加到最短路径树上。
(d)如果目标结点已经成为最短路径树上的永久部分,则去掉所有临时性的弧,算法结束。
2 计价系统数据处理和计费处理
(1)站名处理:定义一个常量字符串数组用于存放所有地铁站的英文名,据统计,十一条线一共有168个不同的站点名,如下图所示:
(2)站间距离处理:通过建立二维数组构建邻接矩阵,如下图,先将二维数组中不同点间距离置为无穷大,即maxint,相同点距离置为0,通过手动录入南京地铁官网所有两站的距离,可以发现两点间互通,得到的是无向图,邻接矩阵也是个对称矩阵。二维数组中的索引为1也就是我们一号线的起点“南京站”的索引,索引为2也就是“南京南站”,以此类推。c[1][2]也就是存储了这两个索引之间的距离。
(3)计价处理,也就是将用Dijkstra算法获取的最短路径来用官网的计费公式实现:
4可视化代码分析
(1)Tkinter(即 tk interface) 是 Python 标准 GUI 库,简称 “Tk”;从本质上来说,它是对 TCL/TK 工具包的一种 Python 接口封装。Tkinter 是 Python 自带的标准库,因此无须另行安装,它支持跨平台运行,不仅可以在
# 导入tk from tkinter import * # 创建一个主窗口对象 window = Tk() # 调用mainloop()显示主窗口 window.mainloop() |
Windows 平台上运行,还支持在 Linux 和 Mac 平台上运行。
(2)Label(标签)控件,是 Tkinter 中最常使用的一种控件,主要用来显示窗口中的文本或者图像,并且不同的 Lable(标签)允许设置各自不同的背景图片。下面通过一个示意图对 Label 背景的区域构成进行说明:
图1:Label控件组成
边框的宽度可以通过 borderwidth 来调整,其样式可以通过relief来设置(默认为平的 flat);填充区的大小调整分为水平方向和垂直方向,可以使用padx和pady来调整;内容区则主要用来显示文字或者图片,其大小由 width/height 来控制。
四.实验与测试
对于通过分析解决得到的代码体系,我们选取了三组有代表性的数据进行试验与测试,结果如下图展示:
选取的三组数据:
- 迈皋桥站到句容站
- 南京站到西安门站
- 软件大道站到禄口机场站
图(a1)系统测试结果1
图(a2)高德地图程序官方结果1
图(b1)系统测试结果2
图(b2)高德地图程序官方结果2
图(c1)系统测试结果3
图(c2)高德地图程序官方结果3
由上系列图可见,经过多组测试,实验与实际情况基本相符。
五.总结
地铁收费系统以networkx中的Dijkstra算法求最短路径为主要算法,以南京市地铁收费标准为依据完成出从出发站到终点站的票价的计算。
在着手开始写代码之前,我们从南京地铁官网,以及实地乘坐地铁时收集相关信息,根据networkx中如何调用Dijkstra算法的过程,逐步实现向代码的转化。其中最大的障碍是如何把地铁线路转图存放于矩阵中,并将代表站点名的字符串与站点间距一一对应,再通过查阅资料,询问专业人士后,用字典存放站点名,站与站之间对应的距离,解决了这个问题。在讲地铁线路转化成图后便可使用Dijkstra算法实现最短路径的计算,与区间票价比较得到最终票价。完成代码编译也出现了或多或少或大或小的问题,基本通过讨论分析,查阅资料一一解决了所有的问题,最终成功实现了地铁系统。
完成南京市地铁票务系统后,加深了我们对Dijkstra算法的认识,同时也对图论部分的知识有了更深刻的理解和感悟,在作品的实现过程中,我们从最开始不太清楚离散数学这门课程与计算机或者说与专业的关系到逐渐认识到离散在计算机中的应用,这一过程以及这门课的学习对于我们未来的学习是很有帮助的。在这次实验中利用已学过的知识设计了一个完整的系统,深刻体会到了算法在这其中的作用。算法就像是一个系统的灵魂,它能让一个系统富有生机和活力。以前总觉得算法离我们很遥远,但它却应用在了生活的方方面面。离散数学的课程虽然已经结束,但我相信这门课程里学到的知识会让我受益匪浅。这次我们也发现了自己的问题,对就是代码运用不是很熟悉,很多东西需要不停的查找资料。此次实验锻炼了我们在实际问题中运用所学知识的能力。
参考文献:
[1] |
IVAN I, BENENSON I, JIANG B, et al. Geoinformatics for intelligent transportation[M]. Cham: Springer International Publishing, 2015: 121-135. |
[2] |
GUNAY A, AKCAY O, ALTAN M O. Building a semantic based public transportation geoportal compliant with the INSPIRE transport network data theme[J]. Earth Science Informatics, 2014, 7(1): 25-37. |
[3] |
SADEGHI-NIARAKI A, VARSHOSAZ M, KIM K, et al. Real world representation of a road network for route planning in GIS[J]. Expert Systems with Applications, 2011, 38(10): 11999-12008. |
[4] |
PAPINSKI D, SCOTT D M. A GIS-based toolkit for route choice analysis[J]. Journal of Transport Geography, 2011, 19(3): 434-442. |
[5] |
YANG H T, CHERRY C, ZARETZKI R, et al. A GIS-based method to identify cost-effective routes for rural deviated fixed route transit[J]. Journal of Advanced Transportation, 2016, 50(8): 1770-1784. |
[6] |
HUANG B. GIS-based route planning for hazardous material transportation[J]. Journal of Environmental Informatics, 2006, 8(1): 49-57. |
[7] |
DUNCAN M J, MUMMERY W K. GIS or GPS? A comparison of two methods for assessing route taken during active transport[J]. American Journal of Preventive Medicine, 2007, 33(1): 51-53. |
[8] |
YANG Z Z, JIANG Y L, CHEN Y. Developing a road traffic control system with GIS[J]. Transport, 2009, 162(4): 189-194. |
[9] |
HUANG R H, HAWLEY D. A data model and internet GIS framework for safe routes to school[J]. URISA Journal, 2009, 21(1): 21-30. |
[10] |
VERONESI F, SCHITO J, GRASSI S, et al. Automatic selection of weights for GIS-based multicriteria decision analysis: site selection of transmission towers as a case study[J]. Applied Geography, 2017, 83: 78-85. |
[11] |
IOANNOU G, KRITIKOS M, PRASTACOS G. Map-route: a GIS-based decision support system for intra-city vehicle routing with time windows[J]. Journal of the Operational Research Society, 2002, 53(8): 842-854. |
[12] |
DIJKSTRA E W. A note on two problems in connexion with graphs[J]. Numerische Mathematik, 1959, 1(1): 269-271. |
[13] |
苏宝莉, 李宁. Dijkstra算法优化及在GIS系统中求最佳路径的应用[J]. 遥感技术与应用, 2013, 28(5): 866-870. |
[14] |
ATKINSON D M, DEADMAN P, DUDYCHA D, et al. Multi-criteria evaluation and least cost path analysis for an arctic all-weather road[J]. Applied Geography, 2005, 25(4): 287-307. |
[15] |
DAUNORAS J, BAGDONAS V, GARGASAS V. City transport monitoring and routes optimal management system[J]. Transport, 2008, 23(2): 144-149. |
[16] |
LIMA R M D, OSIS R, QUEIROZ A R D, et al. Least-cost path analysis and multi-criteria assessment for routing electricity transmission lines[J]. IET Generation, Transmission & Distribution, 2016, 10(16): 4222-4230. |
[17] |
CHENG M Y, CHANG G L. Automating utility route design and planning through GIS[J]. Automation in Construction, 2001, 10(4): 507-516. |
[18] |
姚恩建, 鲁楠, 郎志峰, 等. 考虑节能的城市物流配送方案优化[J]. 北京交通大学学报, 2015, 39(6): 85-91. |
[19] |
HAZELL L C, BRODIE G. Applying GIS tools to define prehistoric megalith transport route corridors: Olmec megalith transport routes: a case study[J]. Journal of Archaeological Science, 2012, 39(11): 3475-3479. |
[20] |
FENG C Q, JIANG N, ZHANG X N, et al. Automatic match between delimitation line and real Terrain based on least-cost path analysis[C]//ISPRS-International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences. Beijing, 2013: 57-61. |
对南京地铁计价模型分析及最佳路径设计基于Python语言相关推荐
- 连线自动路由算法:在GEF中实现连线的自动直角路由,智能避障并绕开模型,选择最佳路径进行布线,仿Visio效果
在使用GEF(图形编辑框架)开发建模工具时,比如利用GEF实现程序流程图建模功能,有时对连线的路由方式会有比较高的要求,比如连线自动采用直角布局,要能够智能地避障并绕开模型,选择最佳路径进行布线.在建 ...
- python调用nastran_基于Python语言的NASTRAN模型向Abaqus模型转换程序
基于 Python 语言的 NASTRAN 模型向 Abaqus 模型转 换程序 张 涛 李三平 杜双龙 [期刊名称] 中国科技信息 [年 ( 卷 ), 期] 2016(000)008 [总页数] 3 ...
- python商业分析_科研进阶 | 纽约大学 | 商业分析、量化金融:基于Python的商业分析工具...
科研进阶 | 纽约大学 | 商业分析.量化金融:基于Python的商业分析工具(8.22开课)mp.weixin.qq.com 课题名称 = 基于Python的商业分析工具 = 项目背景 数据分析为 ...
- python数字识别kaggle论文_基于Python语言Kaggle的数据集分析
界 基于 Python 语言 Kaggle 的数 据集 分析 段 聪 聪 柴 世 一 * 渊 河 南 大 学 计 算 机 与 信 息 工 程 学 院 袁 河 南 开 封 475004 冤 揖 摘 要 ...
- 基于Python语言的PUBG游戏数据可视化分析系统
[success]写于2019年大作业[/success] 博客链接:https://www.iamzlt.com/?p=299 代码链接请到博客链接内查看. 摘要 随着网络技术的兴起和普及,网络游戏 ...
- 基于python语言,使用爬虫和深度学习来预测双色球(二、模型训练与测试)
在上一篇博文中(基于python语言,使用爬虫和深度学习来预测双色球(一.数据的准备)),我们完成了数据的准备,通过爬虫的方式将2003年至今的每一期的中奖数据保存到了txt文件中,那么我们现在就开始 ...
- 机械故障诊断信号的幅域分析 - 幅值概率密度函数 | 基于python的代码实现,在CWRU轴承数据上实战
机械故障诊断信号的幅域分析 - 幅值概率密度函数 | 基于python的代码实现,在CWRU数据上实战 **1.随机信号的幅值概率密度函数介绍** **2.代码实战** 2.1导入包 2.2定义CWR ...
- 基于matlab的电机运行分析,电机模型分析及拖动仿真:基于MATLAB的现代方法
第1章绪论 1.1MATLAB概述 1.2Simulink平台与MATLAB工具箱 1.2.1Simulink平台 1.2.2MATLAB工具箱 1.2.3SimPowerSystems工具箱 1.3 ...
- python语言例子_机器学习案例分析(基于Python语言)
领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...
最新文章
- bootstap 表格自动换行 截取超长数据
- Exp8 web基础
- “约见”面试官系列之常见面试题之第七十一篇之let和var和const区别(建议收藏)
- 关于双网卡电脑无法加入域或失去与域的联系的方法
- bzoj 3242: [Noi2013]快餐店
- Symbian 5800 重力开发的一些数据
- oracle12c安装教程
- php小偷程序实例代码
- 【Mendeley】自定义文献引用格式(cite style)并保存
- sftp上传文件到服务器遇到的问题
- python多线程是假的!速度慢!效率低下!不升反降!
- liunx安装xfs包挂载大于16T的硬盘
- Asp.net 万年历
- epoch如何设置_最易懂的方式介绍 神经网络模型中的Epoch、Iteration、Batchsize
- 《码农翻身》原文分章节阅读链接
- Linux Socket详解 大全 基础知识
- “隐私—数据收集”问题的两难分析
- 蓝湖切图后如何做成html,如何使用蓝湖 sketch for Mac设置切图?
- 3dsMax模型转UE4
- leetcode 刷题视频(8) - 搜索