使用MATLAB对地铁站、公交站等求解最短路径

2024-06-13 05:52

本文主要是介绍使用MATLAB对地铁站、公交站等求解最短路径,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用MATLAB对城市的地铁站、公交站等站点,根据站点的经纬度坐标和彼此之间的权重,求解其最短路径、途径站点和路程

  1. 已知的数据如图,是西安市地铁站点的数据,保存在一个Excel里
    在这里插入图片描述
    如图,每列的内容都在上面,不过往MATLAB中导入数据时,不需要第一行的文字内容,MATLAB不能读取汉字,直接把所有汉字都删除,记住每一列数字的意义就行。

2.MATLAB代码很简单,主要是进行Excel中的处理。
西安市站点一共有117个,本次数据一共有1219条,所以数据中的站点需要转换成数字进行替代。所有的站点用1~117的数字进行代替,相同的站点要用相同的数字代替。

3.在Excel中新建一个sheet,把A列站点粘到A1位置,然后把B列终点站点也复制,粘到新建的sheet A列下面,在本组数据中,就是粘到A1220位置往下。
粘贴完成后,在新建sheet A列中,数据一共有1219*2=2438个数据。
主要是因为上图中的A列或B列并没有完全包含117个站点,只用一列数据去重复会存在少点的问题。
使用上述相同的粘贴方法,把C列起点经度和D列终点纬度,粘到新建sheet的B列和C列,然后把上图中E列终点经度和F列终点纬度,粘到新建sheetB列和C列的1220格,续上粘贴。

先这么粘到一个新sheet中
再这么向下续着粘贴,记得粘完了把所有的中文都删除,MATLAB不能运行中文

4.然后在新建sheet中,选中A列全部站名,点击 “数据”——“删除重复值”
在这里插入图片描述

选择拓展选定区域,会自动把重复的地铁站名删除,连带着重复的地铁经纬度坐标也会留下唯一的。
这个时候注意检查,地铁站数量是不是117个,同时对应着117个经纬度坐标。

5.这会儿是117个地铁站名和对应的经纬度坐标。
使用Excel的排序功能,对地铁站进行字母排序,顺便带着经纬度也会调整。
这一步不是必须,但是排序后会更明了
在这里插入图片描述

6.把排序后的117个地铁站复制,在原始数据的sheet中,左边新增3列空白。如图所示,117个地铁站复制到A列,B列用自然数赋值,1 2 3这样拖到117,对应每一个地铁站。然后C列用VLOOKUP命令,如图所示,这样就给每一个地铁站名赋了一个数字,就是对应的1~117的数字。
=VLOOKUP(A2, $A 2 : 2: 2:B$117, 2, FALSE)
截图中因为有第一行的文字,所以是118,本身公式应该是117
这就是命令,等于赋值了
注意这里面是D列
注意这里面是E列
把这个vlookup的命令拖满整列,就可以看到整个起点终点都对应成了数字。

7.把现在站名变成数字的数据表导入到MATLAB中,导入时候需要选择向量形式,然后每组数据导入后的命名如下:
在这里插入图片描述
在这里插入图片描述
8.回到步骤5中,站点按照首字母顺序排列的那个sheet,这时候的站点按照首字母顺序进行排列,对应着经纬度坐标。
把这两列经纬度坐标也导入MATLAB,分别命名为x和y
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后所有导入的数据如图所示

9.代码运算比较简单,直接按照MATLAB帮助文档中,“根据节点坐标寻找最短路径”的代码进行计算得到。
具体网址:https://ww2.mathworks.cn/help/matlab/ref/graph.shortestpath.html;jsessionid=b2088ade3cc29383eb196d1e336d?s_tid=srchtitle#mw_ecf88b43-d1b1-4cac-b526-e8a40dbe533d
在这里插入图片描述

clc
clear all
close allload("matlab.mat")G = graph(S,T);    
%直接按照MATLAB帮助文档中的“根据节点坐标寻找最短路径”的代码进行计算得到
figure
plot(G,'XData',x,'YData',y)
hold on
scatter(x,y,"red","filled");     %画出起点,散点,红色,实心for i=1:117                                    %这里面是因为地铁站数量只有117个,需要根据站点数量进行调整这个数字for j=1:117                                %这里面是因为地铁站数量只有117个,需要根据站点数量进行调整这个数字[path,len] = shortestpath(G,i,j);           %%直接按照MATLAB帮助文档中的“根据节点坐标寻找最短路径”的代码allPaths{i, j} = path; % 存储路径           %所有地铁站之间两两的途径站点allLens(i, j) = len; % 存储长度             %所有地铁站之间两两的路程长度end
end

代码非常简单,前半段是画图,后半段是把117个车站两两之间的路径和路程长度。

在这里插入图片描述
生成的图如上所示
在这里插入图片描述
在这里插入图片描述
allpaths和alllens可以看到都是矩阵,可以得到每两个车站间的最短路径和对应的路程长度

这篇关于使用MATLAB对地铁站、公交站等求解最短路径的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056453

相关文章

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#中Trace.Assert的使用小结

《C#中Trace.Assert的使用小结》Trace.Assert是.NET中的运行时断言检查工具,用于验证代码中的关键条件,下面就来详细的介绍一下Trace.Assert的使用,具有一定的参考价值... 目录1、 什么是 Trace.Assert?1.1 最简单的比喻1.2 基本语法2、⚡ 工作原理3