不闭合三维TSP:成长优化算法GO求解不闭合三维TSP(起点固定,终点不定,可以更改数据集),MATLAB代码

一、旅行商问题

旅行商问题(Traveling salesman problem, TSP)是一个经典的组合优化问题,它可以描述为一个商品推销员去若干城市推销商品,要求遍历所有城市后回到出发地,目的是选择一个最短的路线。当城市数目较少时,可以使用穷举法求解。而随着城市数增多,求解空间比较复杂,无法使用穷举法求解,因此需要使用优化算法来解决TSP问题。
一般地,TSP问题可描述为:一个旅行商需要拜访n个城市,城市之间的距离是已知的,若旅行商对每个城市必须拜访且只拜访一次,求旅行商从某个城市出发并最终回到起点的一条最短路径。
记n个城市序号构成集合为N={1,2,…,n},旅行商拜访完n个城市所经过的回路记为:
P = { p 1 → p 2 → ⋯ → p n → p 1 } P=\left\{p_{1} \rightarrow p_{2} \rightarrow \cdots \rightarrow p_{n} \rightarrow p_{1}\right\} P={p1p2pnp1}
其中, p i ∈ N , p i ≠ p j ( i ≠ j ) , i = 1 , 2 , ⋯   , n p_{i} \in N, p_{i} \neq p_{j}(i \neq j), i=1,2, \cdots, n piN,pi=pj(i=j),i=1,2,,n
若城市之间的距离矩阵为 D = ∣ d i j ∣ n × n D=\left|d_{i j}\right|_{n \times n} D=dijn×n,则TSP问题的数学模型可表示为:
min ⁡ f ( P ) = ∑ i = 1 n − 1 d p i , p i + 1 + d p n , p 1 \min f(P)=\sum_{i=1}^{n-1} d_{p_{i}, p_{i+1}}+d_{p_{n}, p_{1}} minf(P)=i=1n1dpi,pi+1+dpn,p1
其中, f ( P ) f(P) f(P)表示旅行商行走路线的总路径长度。
旅行商从城市1出发,终点城市依据算法而定

二、部分代码

close all
clear
clc
global data
load(‘data.txt’)%导入TSP数据集
Dim=size(data,1)-1;%维度
lb=-100;%下界
ub=100;%上界
fobj=@Fun;%计算总距离
SearchAgents_no=100; % 种群大小(可以修改)
Max_iteration=2000; % 最大迭代次数(可以修改)
%% 画最终的结果 Kd是最终的城市序列
[~,idx]=sort(bestX);
idx=idx+1;
Kd(1)=1;
Kd(2:length(idx)+1)=idx;
%% 画收敛曲线图
figure
plot(curve,‘g-’,‘linewidth’,2)
xlabel(‘迭代次数’)
ylabel(‘总距离’)
legend(‘GO’)
%% 显示结果
fprintf(‘算法得到的路径:%d’,Kd(1))
for i=2:length(Kd)
fprintf(’ > %d’,Kd(i));
end
fprintf(‘\n’);
display([‘算法求解的总路径总长:’ num2str(curve(end))]);
%% 保存数据
dlmwrite(‘Kd.txt’,Kd,‘delimiter’, ‘\n’)%保留最终的城市序列
dlmwrite(‘curve.txt’,curve,‘delimiter’, ‘\n’)%保留算法求解的收敛曲线

三、部分结果

算法得到的路径:1 > 24 > 27 > 8 > 28 > 6 > 12 > 9 > 26 > 3 > 29 > 5 > 21 > 2 > 20 > 10 > 4 > 13 > 16 > 23 > 7 > 25 > 19 > 15 > 11 > 22 > 17 > 14 > 18

算法求解的总路径总长:9798.2528

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、完整MATLAB代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/633515.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java-MySql:JDBC

目录 JDBC概述 JDBC搭建 1、导入mysql开发商提供的jar包 2、注册驱动 3、与数据库连接 注解: Statement: 代码 运行 PreparedStatement: 代码 运行 PreparedStatement和Statement Statement 增 代码 运行 删 代码 运…

前端 CSS 经典:filter 滤镜

前言:什么叫滤镜呢,就是把元素里的像素点通过一套算法转换成新的像素点,这就叫滤镜。而算法有 drop-shadow、blur、contrast、grayscale、hue-rotate 等。我们可以通过这些算法实现一些常见的 css 样式。 1. drop-shadow 图片阴影 可以用来…

民国漫画杂志《时代漫画》第5期.PDF

时代漫画05.PDF: https://url03.ctfile.com/f/1779803-1246745815-7953cf?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络!

dify:开源 LLMOps平台。

单纯笔记: 一、关于 Dify dify/README_CN.md at main langgenius/dify GitHub Dify 是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以…

单表复杂查询的场景分析二:涉及数据分组与分区/多重函数计算/SQL变种

SQL演练,带详细分析,笔记和备忘。行文不易,感谢支持! 本文是单表下的复杂场景问题分析,具体看下面的每个需求。 接上文,本文为连载的第二篇。 目录 数据表及说明 需求8:找出指定月份每个人的…

C++—结构体

结构体(struct),是一种用户自定义复合数据类型,可以包含不同类型的不同成员。 结构体的声明定义和使用的基本语法: // 声明结构体struct 结构体类型 { 成员1类型 成员1名称; ...成员N类型 成员N名称; };除声明…

Python导入Shapefile到PostGIS的常见问题和解决方案

导入Shapefile到PostGIS的常见问题和解决方案 先决条件: 已经拥有含有GDAL的python环境(如果大家需要,我可以后面出一片文章 问题一:QGIS连接到PostGIS数据库失败 错误描述: Connection to server at &quo…

BCD编码(8421)介绍

概念 BCD (Binary-Coded Decimal) 是一种二进制的数字编码形式,其特点每个十进制数位用4个二进制位来表示。 在网络IO中,你传输一个数字类型最少需要一字节,传输两个数字类型最少需要两字节,但是当你使用BCD编码后传输&#xff…

Oracle Graph 入门 - RDF 知识图谱

Oracle Graph 入门 - RDF 知识图谱 0. 引言1. 查看 RDF Semantic Graph 安装情况2. 创建一个语义网络4. 创建一个模型5. 加载 RDF 文件6. 配置 W3C 标准的 SPARQL 端点 0. 引言 Oracle Graph 的中文资料太少了,只能自己参考英文资料整理一篇吧。 Oracle 数据库包括…

云下到云上,丽迅物流如何实现数据库降本50% | OceanBase案例

在2024年3月20日的首场OceanBase数据库城市行活动中,专注于物流及供应链解决方案的丽迅物流的架构师阳磊,围绕“OB Cloud在丽迅物流的实践”这一主题,进行了精彩的演讲。本文为此次演讲的内容回顾。 在丽迅物流(Lesoon Logistics…

论文精读-SRFormer Permuted Self-Attention for Single Image Super-Resolution

论文精读-SRFormer: Permuted Self-Attention for Single Image Super-Resolution SRFormer:用于单图像超分辨率的排列自注意 Params:853K,MACs:236G 优点: 1、参考SwinIR的RSTB提出了新的网络块结构PAB(排列自注意力…

盘点28个免费域名申请大全

盘点28个免费域名申请大全 免费域名推荐学习使用,免费就意味着没任何保障。 名称稳定时间支持解析模式后缀格式说明地址EU.org28 年NS.eu.org/. 国家简写.eu.org需要审核,稳定性高,限制少,国内访问有问题,可 CFeu.orgp…

反射获取或修改对象属性的值

利用反射既可以获取也可以写入,首先咱们先写几个获取的例子。 一:利用反射修改各数据(利用resultField.set修改) 首先定义实体类 public class Dog {private String dogUser;private int age;把DogUser的"hahaha"改为"geggegegege" Dog dog = new Do…

10个最佳Android数据恢复工具,用于恢复已删除的文件

由于我们现在在智能手机上存储了许多重要文件,因此了解数据恢复工具变得很重要。您永远不会知道何时需要使用适用于Android的数据恢复工具。 由于不乏Windows数据恢复工具,因此从崩溃的计算机中恢复文件很容易。但是,当涉及到从Android恢复数…

adb卸载系统垃圾应用

//获取包名 输入如下代码,然后在打开和关闭要获取包名的app就会打印出该app的包名 adb shell am monitor //卸载系统应用 -k会保留用户数据,不包含-k则不会保留用户数据 adb shell pm uninstall -k --user 0 包名 (包名一般为:c…

机械臂与Realsense D435 相机的手眼标定ROS包

本教程主要介绍机械臂与 Realsense D435 相机手眼标定的配置及方法。 系统:Ubuntu 20.0.4 ◼ ROS:Noetic ◼ OpenCV 库:OpenCV 4.2.0 ◼ Realsense D435:librealsense sdk(2.50.0)、realsense-ros 功能包&…

【map、set】C++用红黑树来封装map、set容器

🎉博主首页: 有趣的中国人 🎉专栏首页: C进阶 🎉其它专栏: C初阶 | Linux | 初阶数据结构 小伙伴们大家好,本片文章将会讲解map和set之用红黑树来封装map、set容器的相关内容。 如果看到最后您…

资料防拷贝该如何实现?数据防拷贝的方法有哪些

数据安全和隐私保护成为企业和个人关注的重点。电脑中存储的资料往往包含了重要的商业机密、个人隐私或其他敏感信息。 因此,如何有效防止他人非法拷贝电脑资料,成为了一个亟待解决的问题。 本文将探讨数据防拷贝的方法,以帮助企业和个人保护…

22-LINUX--多线程and多进程TCP连接

一.TCP连接基础知识 1.套接字 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程…

Map遍历、反射、GC

map的遍历 用foreach遍历 HashMap<Character,Integer> map new HashMap<>();map.put(A,2);map.put(B,3);map.put(C,3);for (Map.Entry<Character,Integer> entry: map.entrySet()) {char key entry.getKey();int value entry.getValue();System.out.prin…