基于蚁优化算法的TSP问题求解计算智能实验报告

更新时间:2024-11-14 23:40:39 阅读: 评论:0


2022年8月1日发
(作者:中华人民共和国城乡规划法)

--

智能计算实验报告

学院:

班级:

学号:

姓名:

成绩:

日期:

--

--

实验名称:基于蚁优化算法的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 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 站长QQ:55-9-10-26