--
智能计算实验报告
学院:
班级:
学号:
姓名:
成绩:
日期:
--
--
实验名称:基于蚁优化算法的TSP问题求解
题目要求:
利用蚁优化算法对给定的TSP问题进行求解,求出一条最短路径。
蚁优化算法简介:
蚁算法是一中求解复杂优化问题的启发式算法,该方法通过模拟蚁对“信息
素”的控制和利用进行搜索食物的过程,达到求解最优结果的目的。它具有智能
搜索、全局优化、稳健性强、易于其它方法结合等优点,适应于解决组合优化问
题,包括运输路径优化问题。
TSP数据文件格式分析:
本次课程设计采用的TSP文件是att48.tsp,文件是由48组城市坐标构成的,文件
共分成三列,第一列为城市编号,第二列为城市横坐标,第三列为城市纵坐标。数
据结构如下所示:
城市编号城市横坐标城市纵坐标
实验操作过程:
1、TSP文件的读取:
classchengshi{
intno;
doublex;
doubley;
chengshi(intno,doublex,doubley){
=no;
this.x=x;
this.y=y;
}
privatedoublegetDistance(chengshichengshi){
returnsqrt(pow((x-chengshi.x),2)+pow((y
-chengshi.y),2));
}
}
try{
//定义HashMap保存读取的坐标信息
--
--
HashMap<Integer,chengshi>map=newHashMap
er,chengshi>();
//读取文件
BufferedReaderreader=newBufferedReader(new
FileReader(newFile(filename)));
for(Stringstr=reader.readLine();str!=nu
ll;str=reader.readLine()){
//将读到的信息保存入HashMap
if(str.matches("([0-9]+)(s*)([0-9]+)(.?)([0-9]*)
(s*)([0-9]+)(.?)([0-9]*)")){
String[]data=str.split("(\s+)");
chengshichengshi=newchengshi(Intege
eInt(data[0]),
Double.parseDouble(data[1]),
Double.parseDouble(data
[2]));
ma(chengsh,chengshi);
}
}
//分配距离矩阵存储空间
distance=newdouble[map.size()+1][map.s
ize()+1];
//分配距离倒数矩阵存储空间
heuristic=newdouble[map.size()+1][map.size()
+1];
//分配信息素矩阵存储空间
pheromone=newdouble[map.size()+1][map.si
ze()+1];
for(inti=1;i<ma()+1;i++){
for(intj=1;j<map.size()+1;j++){
//计算城市间的距离,并存入距离矩阵
distance[i][j]=map.get(i).getDistance(ma
(j));
//计算距离倒数,并存入距离倒数矩阵
heuristic[i][j]=1/distance[i][j];
//初始化信息素矩阵
pheromone[i][j]=1;
}
}
}catch(Exceptionexception){
System.intln("初始化数据失败!");
}
}
2、TSP作图处理:
--
--
privatevoidevaporatePheromone(){
for(inti=1;i
for(intj=1;j
pheromone[i][j]*=1-rate;
}
ﻩ}
3、关键源代码(带简单的注释):
蚂蚁类代码:
classmayi{
//已访问城市列表
privateboolean[]visited;
//访问顺序表
privateint[]tour;
//已访问城市的个数
privateintn;
//总的距离
privatedoubletotal;
mayi(){
//给访问顺序表分配空间
tour=newint[distance.length+1];
//已存入城市数量为n,刚开始为0
n=0;
//将起始城市1,放入访问结点顺序表第一项
tour[++n]=1;
//给已访问城市结点分配空间
visited=newboolean[distance.length];
//第一个城市为出发城市,设置为已访问
visited[tour[n]]=true;
}
privateintchoosechengshi(){
//用来random的随机数
--
--
doublem=0;
//获得当前所在的城市号放入j,如果和j相邻的城市没有被访问,那
么加入m
for(inti=1,j=tour[n];i<pheromone.l
ength;i++){
if(!visited[i]){
m+=pow(pheromone[j][i],alpha)*pow
(heuristic[j][i],beta);
}
}
//保存随机数
doublep=m*random();
//寻随机城市
doublek=0;
//保存城市
intq=0;
for(inti=1,j=tour[n];k<p;i++){
if(!visited[i]){
k+=pow(pheromone[j][i],alpha)*p
ow(heuristic[j][i],beta);
q=i;
}
}
returnq;
}
城市选择代码:
privateintchoosechengshi(){
//用来random的随机数
doublem=0;
--
--
//获得当前所在的城市号放入j,如果和j相邻的城市没有被访
问,那么加入m
for(inti=1,j=tour[n];i<pheromone.l
ength;i++){
if(!visited[i]){
m+=pow(pheromone[j][i],alpha)*p
ow(heuristic[j][i],beta);
}
}
//保存随机数
doublep=m*random();
//寻随机城市
doublek=0;
//保存城市
intq=0;
for(inti=1,j=tour[n];k
if(!visited[i]){
k+=pow(pheromone[j][i],alph
a)*pow(heuristic[j][i],beta);
q=i;
}
}
returnq;
}
4、算法运行收敛图(即运行到第几步,求得的最优值是多少):
run:
本次为倒数第100次迭代,当前最优路径长度为41634.60
本次为倒数第99次迭代,当前最优路径长度为41514.21
本次为倒数第98次迭代,当前最优路径长度为38511.61
--
--
本次为倒数第97次迭代,当前最优路径长度为38511.61
本次为倒数第96次迭代,当前最优路径长度为38511.61
本次为倒数第95次迭代,当前最优路径长度为38511.61
本次为倒数第94次迭代,当前最优路径长度为37293.07
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
本次为倒数第6次迭代,当前最优路径长度为37293.07
本次为倒数第5次迭代,当前最优路径长度为37293.07
本次为倒数第4次迭代,当前最优路径长度为37293.07
本次为倒数第3次迭代,当前最优路径长度为37293.07
本次为倒数第2次迭代,当前最优路径长度为37293.07
本次为倒数第1次迭代,当前最优路径长度为37293.07
得到的最优的路径长度为:37293.07
5、最终求得的最优解的TSP图像:
最优路径如下:
→1→9→38→31→44→18→7→28→37→19→6→30→43→27→17→
36→46→33→15→12→11→23→14→25→13→20→47→21→39→32→
48→5→29→2→26→4→35→45→10→42→24→34→41→16→22→3
→40→8→1成功生成(总时间:3秒)
实验结果分析:
本次通过JAVA语言实现蚁优化算法,我们发现虽然我们到了问题的最
优解,但是最优解的收敛性并不乐观,并不能求得问题的精确解,并且随着参数
的调节运行结果有随机性。另外,在蚁算法求解过程中,蚂蚁的数量和城市的
数量差距对结果也是具有一定影响的。
信息素的蒸发速度,对结果也有重要影响。目前来看,蚂蚁系统只是蚁算法
的一个最初的版本,他还有有待提高。这种算法,蚂蚁在其爬过的边上释放与其
构建路径长度成反比的信息素量,蚂蚁构建的路径越好,属于路径的各个边上所
获得的信息素就越多,这些边在以后的迭代中被蚂蚁选择的几率也就越大,但是我
们不难想象,当城市的规模较大的时候,问题的复杂度呈指数增长,仅仅靠这样一
个基础单一的信息素更新机制引导搜索偏向,搜索效率有瓶颈。针对这种现象,
--
--
我们可以在AS的基础上给蚂蚁要释放的信息素大小加上一个权值,加大各个边
信息素的差异,以指导搜索。在每一轮所有蚂蚁构建完路径后,他们将按照所的
路径的长短进行排名,只有生成了至今最优路径的蚂蚁和排名在前(W-1)的蚂蚁
才被允许释放信息素,蚂蚁在边(I,J)上释放的信息素的权值有蚂蚁的排名决定。
--
本文发布于:2022-08-01 16:51:45,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/falv/fa/82/50933.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |