西安电子科技大学-数据结构大作业-TSP问题

  • 简介
  • 一.题目9.TSP
    • 1.1问题概述
    • 1.2问题分析
    • 1.3问题求解
      • 1.3.1构建邻接矩阵
      • 1.3.2寻找最优解
      • 1.3.3结果
    • 1.4总结
  • 附录

简介

  本文旨在给学弟学妹做大作业时提供思路,学校作业可能会查重,学弟学妹使用的时候一定要读懂后进行修改!!!

  如果发现哪里有错可以评论留言。

  代码和报告见我的GitHub找相应的课程,求个Star:XDU_HW,里面还有其他课程的代码和报告

一.题目9.TSP

1.1问题概述

  某旅行团要从南宁坐飞机周游东南亚7 国,如果八地之间都有直飞航班,已知南宁坐标(378,78),河内(327,119),曼谷(232,266),金边(314,311),吉隆坡(255,477),新加坡(296,513),文莱(510,438),马尼拉(628,246),编程寻找最短周游路径,并显示出来。

1.2问题分析

  本题为旅行商(TSP)问题,只能用优化算法找出可能的最优解,为了跳出局部最优,找到全局最优解,本文采用模拟退火算法。

表格 1各地点编号及信息

编号 1 2 3 4 5 6 7 8
地名 南宁 河内 曼谷 金边 吉隆坡 新加坡 文莱 马尼拉
X坐标 378 327 232 314 255 296 510 628
Y坐标 78 119 266 311 477 513 438 246

  如表格1所示,对八个地点进行编号,编号结果表格1所示。
  用Matlab画出八个地点的相对位置,如图表1所示。代码见附录一。

图 1各地点相对位置

1.3问题求解

1.3.1构建邻接矩阵

  根据表格一中各位置编号和坐标构建邻接矩阵。

表格 2部分领接矩阵

0 65.43699 238.0336 241.6299
65.43699 0 175.0257 192.4396
238.0336 175.0257 0 93.53609
241.6299 192.4396 93.53609 0

  部分邻接矩阵如图表2所示,代码及完整矩阵见附录二。

1.3.2寻找最优解

  随机生成初始解,如[1 8 7 2 4 5 3 6 1],其含义为从1地(南宁)出发,先前往8地(马尼拉),再前往7地(文莱),以此类推,最终回到1地(南宁)。

  模拟退火算法可以分解为解空间、目标函数和初始解三部分。
(1)初始化:初始温度(充分大),初始解状态(是算法迭代的起点),令,其中分别为当前解,最优解和新解。把代入适应度函数,得到,令,其中分别为对应的适应度函数值。从降温到,每个值迭代次;
(2)对,循环执行(3)至(5)步:
(3)产生新解;
(4)计算新解的适应度函数值;
(5)若,则接受作为新的当前解。同时,若,则可使该新解成为最优解,否则以概率 接受作为新的当前解,否则令,目的是跳出局部最优解;
(6) 逐渐减少,如果满足终止条件则输出最优解,结束程序。
(2)控制参数的确定:
:初始温度,应该比较大,为了所求的解更加接近最优解,本文中令初始温度;
:温度变化量;
:的衰减函数,其中为的衰减因子。
:Markov链长度,设置为1000;
:停止条件设置为3,时程序停止;

1.3.3结果

图 2各代次能量值

  图2为各代解对应的能量函数,可以看到,能量逐渐趋近最优状态。

图 3运行结果

  最终运行结果如图3所示,虽短路径为1318.1,最优周游路径为

图 4最短周游路径

1.4总结

  本文使用邻接矩阵的目的是:本体最关键是要求路径长度,邻接矩阵能够快速、方便地获得两点之间的距离。

附录

附录一

clc,clear
data=xlsread('data.xlsx');
x=data(:,1);
y=data(:,2);
label={'南宁','河内','曼谷','金边','吉隆坡','新加坡','文莱','马尼拉'};
plot(x,y,'o')
for i=1:length(x)text(x(i),y(i),label{i})
end
A=[x,y];
xlswrite('data.xlsx',A)

附录二

clc,clear
n=8;
graph=zeros(n);
pos=xlsread('data.xlsx');
for i=1:nfor j=i+1:ngraph(i,j)=distance(pos(i,1),pos(i,2),pos(j,1),pos(j,2));end
end
graph=graph+graph';
xlswrite('graph.xlsx',graph);

fun.m文件

function E=fun(circle)
global graph
global n
n=8;
length=0;
for i=1:nlength=length+graph(circle(i),circle(i+1));
end
E=length;

附录三

clc,clear;
global graph
global n
graph=xlsread('graph.xlsx');%read graph
n=size(graph,1);
%随机生成处解
sol_new=[1:n 1];
for i=1:10m=ceil(rand()*(n-1)+1);n=ceil(rand()*(n-1)+1);temp=sol_new(m);sol_new(m)=sol_new(n);sol_new(n)=temp;
end
sol_best=sol_new;
sol_current=sol_new;
Etemp=fun(sol_new);
Ebest=Etemp;
Ecurrent=Etemp;
%init
t0=97;tf=3;L=10000;t=t0;at=0.99;
%main code
tic
i=1;
while t>=tffor k=1:Lif(rand()<0.5)%two exchangec1=ceil(rand()*(n-1)+1);c2=ceil(rand()*(n-1)+1);while(c1==c2)c1=ceil(rand()*(n-1)+1);c2=ceil(rand()*(n-1)+1);endtemp=sol_new(c1);sol_new(c1)=sol_new(c2);sol_new(c2)=temp;else%three exchange%make c1!=c2!=c3c1=ceil(rand()*(n-1)+1);c2=ceil(rand()*(n-1)+1);c3=ceil(rand()*(n-1)+1);while(c1==c2)||(c2==c3)||(c1==c3)||(abs(c1-c2)==1)c1=ceil(rand()*(n-1)+1);c2=ceil(rand()*(n-1)+1);c3=ceil(rand()*(n-1)+1);end%make c1<c2<C3temp1=c1;temp2=c2;temp3=c3;if (c1<c2)&&(c2<c3)elseif (c1<c3)&&(c3<c2)c2=temp3;c3=temp2;elseif (c2<c1)&&(c1<c3)c1=temp2;c2=temp1;elseif (c2<c3)&&(c3<c1)c1=temp2;c2=temp3;c3=temp1;elseif (c3<c1)&&(c1<c2)c1=temp3;c2=temp1;c3=temp2;elseif (c3<c2)&&(c2<c1)c1=temp3;c2=temp2;c3=temp1;endtemplist=sol_new((c1+1):(c2-1));sol_new((c1+1):(c1+c3-c2+1))=sol_new(c2:c3);sol_new((c1+c3-c2+2):c3)=templist;endEtemp=fun(sol_new);%记录历代能量Ehis(i)=Ecurrent;i=i+1;if(Etemp<Ecurrent)Ecurrent=Etemp;sol_current=sol_new;if(Etemp<Ebest)Ebest=Etemp;sol_best=sol_new;endelseif rand<exp(-(Etemp-Ecurrent)./t)Ecurrent=Etemp;sol_current=sol_new;elsesol_new=sol_current;endendendt=t.*at;
end
toc
%存结果
xlswrite('result_sol.xlsx',sol_best);
xlswrite('result_E.xlsx',Ebest);
plot(1:i-1,Ehis);
xlabel('代数')
ylabel('能量')
disp(sol_best)
disp(Ebest)

西安电子科技大学-数据结构大作业-TSP问题相关推荐

  1. 西安电子科技大学-EDA大作业-交通控制器

    西安电子科技大学-EDA大作业-交通控制器 简介 一.实验目的 二.设计任务 三.程序设计 3.1 分频器 3.2 45秒倒计时 3.3 数码管译码器 3.4 总控制器 3.5 顶层设计 3.6 引脚 ...

  2. 西安电子科技大学数据结构考点大纲解析

    (一)数据结构 1.线性表   1)线性表的定义 求合集:归并操作 2)线性表的顺序存储和基本运算(查找.插入和删除)的实现 1.用物理相邻表示逻辑相邻 随机存取结构LOC(ai)=LOC(ai-1) ...

  3. 西安电子科技大学-信号与线性系统大作业-歌曲人声消除

    西安电子科技大学-信号与线性系统大作业-歌曲人声消除 简介 一.内容与要求 二.思路与方案 2.1 立体声消除人声 2.1.1 基本原理 2.1.2 通过左右两声道的音频消除人声 2.2 设计带阻滤波 ...

  4. 西安电子科技大学-电磁场与电磁波大作业-生活中的电磁场与电磁波

    西安电子科技大学-电磁场与电磁波大作业-生活中的电磁场与电磁波 简介 一.航模接收机的天线 二.防蓝光眼镜 三.隐身飞机的外形 简介   本文旨在给学弟学妹做大作业时提供思路,学校作业可能会查重,学弟 ...

  5. 大学计算机实践教程4.3综合作业,2020年下学期西安电子科技大学《基础实验》综合大作业.docx...

    学习中心/函授站 _ 姓 名 学 号 西安电子科技大学网络与继续教育学院 2020 学年下学期 <基础实验>期末考试试题 (综合大作业) 题号 一 总分 题分 100 得分 考试说明: 1 ...

  6. 基于GIS的校园公交车管理系统设计(西安电子科技大学GIS课程大作业)

    基于GIS的校园公交车管理系统设计 一.任务 通过信息网络将现实校园的各种信息收集,整理,归纳,存储,分析和优化,进而对校园的教学资源,校园环境等方面的实体和现象进行模拟,仿真,表现,分析和深入认识. ...

  7. 西安电子科大计算机考研调剂,西安电子科技大学电子工程学院2020考研调剂信息...

    考研调剂是考研考生在第一志愿没有通过自己报考学校考试,但初试成绩符合复试调剂基本分数要求但在原报考单位没有复试资格,可以申请调剂.2020考研国家线已公布,2020考研调剂系统5月20日已开通,考研成 ...

  8. 西安电子科技大学计算机834,西安电子科技大学834数据结构2021年硕士研究生招生考试自命题科目考试大纲...

    西安电子科技大学2021年硕士研究生招生考试自命题科目考试大纲已发布!考研大纲是指由教育部考试中心组织编写,高等教育出版社出版的,规定当年全国硕士研究生入学考试相应科目的考试范围.考试要求.考试形式. ...

  9. 大数据早报:西安电子科技大学成立部属全国高校首个人工智能学院; 三星与京东达成合作,用AI等技术为消费者带来创新购物体验(11.10)

    数据早知道,上乐投网看早报! 『MongoDB』MongoDB 3.6 默认对数据库勒索软件开启防御 2017 有一条关于 MongoDB 的重大安全新闻引起了广泛关注 -- MongoDB 被数据库 ...

最新文章

  1. mysql根据两列去重复_mysql对两列去重复数据库
  2. 千兆宽带:是为了速度而提升速度吗?
  3. DDos游戏行业受攻击最多
  4. Linux基础之shell变量
  5. 基于psr规范php框架,PHP-PSR规范
  6. linux设置基础软件仓库时,安装centos系统时设置基础软件仓库出错
  7. 【计算机系统设计】重点 · 学习笔记(0)
  8. centos7设置静态IP地址
  9. JdbcTemplate 的使用
  10. c事件和委托的区别_web前端教程分享JavaScript学习笔记之Event事件二
  11. 微信小程序公众平台如何生成小程序码
  12. Homekit直连的灯带控制套装
  13. 提取出 Word 文档里的图片 并利用 python 批量转换格式
  14. 游戏服务器背包系统,Unity MMORPG 背包系统如何设计
  15. 微信小程序获取用户信息后的解密操作
  16. 初窥MySQL的索引与事务
  17. 微信小程序开发分析总结
  18. Java中字符流(FileReader(read、close)、FileWriter(write、close)、字符(输入、输出)流原理解析)
  19. UI设计师面试时必须注意的6大问题
  20. PHP Warning: file_put_contents(..):failed to open stream: Permission denied in...

热门文章

  1. 麻省理工博士退学开网店两年身家过千万
  2. 【王喆-推荐系统】(task1)DL推荐系统架构(基础架构篇)
  3. java 使用 idea 快捷键失效解决方法
  4. 细谈负载均衡,什么是负载均衡以及负载均衡的常见方法
  5. MT19937(梅森旋转算法)
  6. Python-docx设置纸张方向为横向
  7. 掷骰子python代码_如何使用python的random模拟掷骰子的数据
  8. 澳利率攀升,加息步伐将在某个时候放缓
  9. 大量的电脑文件如何快速批量的复制移动?
  10. jenkins的邮件通知设置