必经点最短路径问题

经过指定的中间节点集的最短路径算法

目前以Dijkstra算法为基础,针对最短路径问题的研究非常多。多数只是针对起点出发到达终点的情况。如果限制这条最短路径必须要经过某些指定的中间节点,则现有算法将不在适用。

基于Dijkstra算法的经过指定的中间节点集的最短路径算法
Dijkstra算法描述及matlab代码

算法表述:
Step 1: 采集数据集,求取邻接矩阵,设置起点S,终点E,中间节点矩阵M;以及中间节点个数n;

Step 2: 对n个中间节点做全排列,生成一个中间节点序列(n*(n-1)行,n列的矩阵);全排列的起点记为M1;终点积为Mn。计算所有中间节点之间的距离和路径。
求中间节点之间的最短路径方法:
对于一个中间节点序列,若任意两相邻节点有边直接相连,则他们的距离为邻接矩阵中该边的权重值;反之,使用Dijkstra算法求出它们之间的最短路径和距离。若它们之间的路径经过了自由节点,则应将自由节点保存到该路径中。将所有相邻节点间的距离相加即可得到M1到Mn且经过其他所有中间节点的最短距离;将所有相邻节点间的路径(中间可能会经过一些自由节点)相连即得中间节点之间的最短路径。

Step 3: 使用Dijkstra算法求起点S到M1的局部最短路径;使用Dijkstra算法求Mn到终点E的局部最短路径;

Step 4: 将以上三条路径连接起来即得该排列下的(待选)全程最短路径。将以上3条路径的距离相加即得该条待选全程最短路径的距离。

Step 5: 遍历n*(n-1)次求取其中距离最小的即为待求的全程最短距离,对应的路径就是待求的最短路径。

【模型结果】
由上述模型求解的路径可能会经过网络中除了起点、终点和指定的中间节点之外的其他节点(自由节点),同时这条路径中某些节点可能会出现多次,路径中也可能存在回路。

示例

数据点
P_x = [1,6 ,10.6 ,16,16,16,9,4.5,1,7.58,9.6];
P_y = [9.75, 9.75,8.5 , 9.75,4.65,0.75,0.75,0.75,0.75,5.05,7.3];
P = [P_x’,P_y’];
相关节点
第一个为起点,最后一个为终点,中间的为必经点;
R_node = [1,2,10,9,6,5];

1、从起点过必经点到达终点

从起点过必经点到达终点
输出结果
Best_distance = 37.6477;
Best_path =[ 1 2 10 8 9 8 7 6 5];

2、从起点过必经点且不掉头的到达终点

在这里插入图片描述

输出结果
Best_distance = 47.5287;
Best_path =[ 1 9 8 10 2 3 11 10 7 6 5];

3、有指定朝向点,从起点过必经点且不掉头到达终点

在这里插入图片描述

输出结果
Best_distance = 53.1346;
Best_path =[ 1 2 10 8 9 1 2 10 7 6 5];

Matlab源码

经过指定的中间节点集的最短路径算法的matlab源码

Python源码

经过指定的中间节点集的最短路径算法的Python源码

在Matlab中,有一个名为SHPATH的函数可以于计算避障最短路径规划。该函数可以通过给定一个由0(代表开放空间)和1(代表障碍物)组成的"地形"矩阵,计算两个指定之间的最短路径,并自动避开障碍物。这个函数采用了两阶段解决方案。在第一阶段,算法通过搜索开放空间找到两个指定之间的路径。在第二阶段,算法通过避开障碍物来优化第一阶段找到的路径,以确保生成的最短路径是有效且可行的。 如果您想要获取完整的代码并直接运行,可以在网上搜索"海神之光 Matlab避障最短路径规划",找到相应的下载链接。请注意,该代码适用于Matlab 2014a或2019b版本。如果在运行代码时遇到任何问题,您可以私信博主进行咨询。 总结来说,Matlab中的避障最短路径规划可以通过SHPATH函数实现,并且可以通过海神之光提供的代码进行运行。该方法适用于多种领域,包括路径规划、优化求解、神经网络预测、图像处理和语音处理等。如果您对这方面的内容感兴趣,可以击博主的主页,了解更多相关信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [避障最短路径(版本 1.3):计算平面中两之间的最短路径,避开障碍物。-matlab开发](https://download.csdn.net/download/weixin_38691199/19308755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【路径规划】基于matlab A_star算法机器人避障最短路径规划【含Matlab源码 2522期】.zip](https://download.csdn.net/download/TIQCmatlab/87710424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【路径规划】基于A_star算法机器人避障最短路径规划附matlab代码.zip](https://download.csdn.net/download/qq_59747472/87673994)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值