基于某遗传算法解决TSP问题.docx

上传人:b****1 文档编号:13749837 上传时间:2023-06-17 格式:DOCX 页数:16 大小:197.87KB
下载 相关 举报
基于某遗传算法解决TSP问题.docx_第1页
第1页 / 共16页
基于某遗传算法解决TSP问题.docx_第2页
第2页 / 共16页
基于某遗传算法解决TSP问题.docx_第3页
第3页 / 共16页
基于某遗传算法解决TSP问题.docx_第4页
第4页 / 共16页
基于某遗传算法解决TSP问题.docx_第5页
第5页 / 共16页
基于某遗传算法解决TSP问题.docx_第6页
第6页 / 共16页
基于某遗传算法解决TSP问题.docx_第7页
第7页 / 共16页
基于某遗传算法解决TSP问题.docx_第8页
第8页 / 共16页
基于某遗传算法解决TSP问题.docx_第9页
第9页 / 共16页
基于某遗传算法解决TSP问题.docx_第10页
第10页 / 共16页
基于某遗传算法解决TSP问题.docx_第11页
第11页 / 共16页
基于某遗传算法解决TSP问题.docx_第12页
第12页 / 共16页
基于某遗传算法解决TSP问题.docx_第13页
第13页 / 共16页
基于某遗传算法解决TSP问题.docx_第14页
第14页 / 共16页
基于某遗传算法解决TSP问题.docx_第15页
第15页 / 共16页
基于某遗传算法解决TSP问题.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于某遗传算法解决TSP问题.docx

《基于某遗传算法解决TSP问题.docx》由会员分享,可在线阅读,更多相关《基于某遗传算法解决TSP问题.docx(16页珍藏版)》请在冰点文库上搜索。

基于某遗传算法解决TSP问题.docx

基于某遗传算法解决TSP问题

基于遗传算法解决TSP问题

摘要

题目要求给出环游全国全部省会的最短路径方案,是传统的TSP问题,本文将图表数据数字化后,将其转变成为线性规划问题,进而采取遗传算法用Matlab求解出理论上的最短路径与路线图。

通过第一问求出的路线顺序结合实际情况求解出实际情况下的最短路径与最短时间。

针对第一问,首先建立基本TSP模型,求出其线性规划方程组,用Matlab对地图做出基本处理,求出其像素坐标的矩阵。

将省会城市初始化为种群数据,用遗传算法求解出模型最优解,即最短路径大小与旅游城市顺序。

针对第二问,由于遗传算法求出的是近似最优解,以及实际道路情况不可能是直线距离,所以理论数据与实际有一定差别。

将旅行顺序求解出后,需要根据实际道路情况重新求解出最短路径大小,并根据题目所给条件求解出最短时间。

根据实际情况,求得最后的最短路径长度为20402.9公里,时间为45天。

题目中给出城市转化为图集,一共有33个顶点,数据较大,用Dijkstra算法和Floyd算法虽然答案可能更精确,但数据处理量大,时间复杂度高。

采用遗传算法可以得到近似最优解,并且精简了时间复杂度。

关键词:

最短路径TSP问题线性规划遗传算法

1、问题重述

如果从出发,要想开车走遍全国所有的省会城市,而且在到了每个省会城市以后都必须住一晚,第二天早上才能出发,安全起见每天开车时间最多在8小时左右,车速视实际路况而定,一般高速公路可以取平均车速100公里/小时左右,不是高速公路平均车速取60公里/小时左右,从出发要走遍所有省会城市以后回到,开车里程最少需要多少公里?

最少需要多少时间?

(暂不考虑省)

2、问题分析

题目要求求出最短路径与时间是典型的TSP问题,即要用最短的总路径走遍所有城市,此处需要设立一个二元组

,并且求出一个点的邻接矩阵。

根据经典的TSP模型,得出一般的线性规划方程组。

解TSP模型的一般算法有Dijkstra算法和Floyd算法,由于TSP问题是典型的NP难题,其可能路径数目与城市总数目n是呈指数型增长,并不适合用以上两种算法。

另外常用来解决TSP问题的退火算法受概率和退火过程影响,可能运算起来十分缓慢。

为了精简时间复杂度,故选取了遗传算法将图形数据初始为种群数据进行计算。

并且随着种群规模的增大,其结果越逼近最优值。

对于第二问,最短时间的计算,按照第一问求出的最优路线行走,并且结合实际高速公路分布与走向来计算最短路径的真实值,并且统计出高速公路与普通公路的实际数值。

题目中给出了车辆在高速公路上行车速度为100km/h,普通公路上为60km/h,统计出实际数值后,计算出总行车时间即可得出最短时间。

3、基本假设

1.题目给出的速度符合实际。

2.无论第一天何时到达,第二天均会离开该城市。

3.每天开车时间为8小时左右,对于9到10小时可以开到的城市均算为8小时左右,不需要中途休息。

4.开车行程在10小时以后的,每天开车八小时即停下并有地方休息。

5.第一问用TSP模型求解时,所有城市之间全部算为直线相连。

4、符号说明

Z:

走遍所有省会城市的最短路径长度

C:

路网有向图矩阵;

从节点i到节点j的弧,

∈C;

路段

的长度;

M:

种群个数

N:

染色基因个数(即城市个数)

c:

迭代次数

Pc:

交叉概率

Pm:

变异概率

len:

某组解的总距离

minlen:

该次迭代中的最短距离

maxlen:

该次迭代中的最长距离

m:

适应度归一化淘汰加速指数

5、模型建立与求解

5.1线性规划的约束条件与目标函数:

已设

为两城市之间的距离,根据TSP问题的一般约束条件可知,记为赋权图G=(V,E),V为顶点集,E为边集,各顶点间的距离

已知。

目标函数与约束条件:

5.2遗传算法前的基本处理

将全国城市的经纬度制成表格,用excel将其制成散点图,方便接下来的数据处理与运算。

城市

东经

北纬

城市

东经

北纬

城市

东经

北纬

116.46

39.92

123.38

41.8

113

28.21

117.2

39.13

114.48

38.03

114.31

30.52

121.48

31.22

112.53

37.87

113.23

23.16

106.54

29.59

101.74

36.56

110.35

20.02

91.11

29.97

117

36.65

103.73

36.03

乌鲁木齐

87.68

43.77

113.65

34.76

108.95

34.27

106.27

38.47

118.78

32.04

104.06

30.67

呼和浩特

111.65

40.82

117.27

31.86

106.71

26.57

108.33

22.84

120.19

30.26

102.73

25.04

126.63

45.75

119.3

26.08

114.1

22.2

125.35

43.88

115.89

28.68

澳门

113.33

22.13

用基于Java的经纬度坐标与地图容器像素坐标转换器,求出33个省会城市的像素坐标如下:

1.2.3.4.5.6.7.8.9.10.11.1213.14.15.16.17.18.19.20.21.22.23.24.25,26.广西27.28.29.30.澳门31.32.33.

像素坐标如下:

Columns1through11

1001872011872212022583523463362902112652141581421651216685106127Columns12through22

297278296274265239302316334325293135147158177148182203199206215233Columns23through33

280271221233275322250277286220104

21623825328728525431529329022677

5.3遗传算法求解最优值

1.程序初始化

程序首先读入33个省会城市坐标,计算任意两个城市的距离;

设置遗传算法控制参数。

clearall;clc;clf;

load('testdata.mat');

nlen=length(x1);

xy=[x1;y1]';

n=500;%种群数目

C=5000;%进化迭代次数

m=2;%适应度归一化淘汰加速指数,取值不宜太大

alpha=0.8;%淘汰保护指数,围0~1,为1时关闭保护

a=meshgrid(1:

nlen);%生成nxn矩阵

dmat=reshape(sqrt(sum((xy(a,:

)-xy(a',:

)).^2,2)),nlen,nlen);%计算城市距离矩阵

遗传算法对求解问题本身是一无所知的,这里采用随机生成初始化种群,如下:

[N,NN]=size(dmat);

farm=zeros(n,N);%用于存储种群

fori=1:

n

farm(i,:

)=randperm(N);%随机生成初始化种群

end

2计算适应度

本程序目标函数为经过33省会的总距离,适应度与目标函数的正相关,取值围0~1,适应度计算公式为:

3.4变异操作

采用变异操作解决同一问题。

算法核心思路是,在每次迭代中,解的个体随机按4个为1组,每组中只保留最优解,然后对此最优解进行左右翻转、交换、向前移位三种变异操作,生成三个新个体,再参与下次迭代。

整个算法不需要计算归一化适应度。

在此算法中,每次迭代淘汰率固定为75%,三种变异操作覆盖面比较广,直接以最短距离为适应函数,省去每次适应度的计算。

初始值种群数目设为500,进化迭代次数为5000,寻得最优解为1295.72。

 

5.4算法求解结果

图一散点图最优表示

图二仿真图表示

5.4根据实际情况的求解答案

路线:

——————————————————————————————————————呼和浩特————————乌鲁木齐————————————澳门————————

实际数据图

起点

终点

总距离/公里

公路/公里

时间/小时

高速/公里

时间/小时

总时间/小时

天数

177.6

0

0

177.6

1.776

1.776

1

299.2

0

0

299.2

2.992

2.992

1

175.6

0

0

175.6

1.756

1.756

1

378

0

0

378

3.78

3.78

1

355.4

0

0

355.4

3.554

3.554

1

345.3

0

0

345.3

3.453

3.453

1

892.4

0

0

892.4

8.924

8.924

1

311.7

0

0

311.7

3.117

3.117

1

712.9

0

0

712.9

7.129

7.129

1

482

0

0

482

4.82

4.82

1

436.6

0

0

436.6

4.366

4.366

1

325.4

0

0

325.4

3.254

3.254

1

664.5

0

0

664.5

6.645

6.645

1

380.4

0

0

380.4

3.804

3.804

1

271.4

0

0

271.4

2.714

2.714

1

1241.6

0

0

1241.6

12.416

12.416

2

292.2

0

0

292.2

2.922

2.922

1

240.8

0

0

240.8

2.408

2.408

1

呼和浩特

468.6

67.5

1.125

401.1

4.011

5.136

1

呼和浩特

718.2

0

0

718.2

7.182

7.182

1

440.7

0

0

440.7

4.407

4.407

1

225.4

29.6

0.493333333

195.8

1.958

2.451333333

1

乌鲁木齐

1740.8

339.3

5.655

1401.5

14.015

19.67

3

乌鲁木齐

2667.1

2667.1

44.45166667

0

0

44.45166667

6

2223.8

2223.8

37.06333333

0

0

37.06333333

5

507.5

0

0

507.5

5.075

5.075

1

577.8

0

0

577.8

5.778

5.778

1

474

0

0

474

4.74

4.74

1

澳门

583.6

0

0

583.6

5.836

5.836

1

澳门

136.7

0

0

136.7

1.367

1.367

1

172.7

0

0

172.7

1.727

1.727

1

864.5

0

0

864.5

8.645

8.645

1

618.5

0

0

618.5

6.185

6.185

1

总计

20402.9

5327.3

88.78833333

15075.6

150.756

150.756

45

最终的最优解,最短路径长度为20402.9公里,时间为45天。

6、模型评价

本文采用MATLAB实现遗传算法求解TSP问题,对结果进行了分析。

遗传算法是一种智能优化算法。

该模型最大的缺点是,求出的不是最优解,而是近似最优解。

同时,在做该模型时,是通过经纬度计算,算出的距离接近于两地直线距离。

而真实情况中,大部分公路都不是笔直的,而是弯弯曲曲的,因此该模型求解答案与真实值有差距。

同时,建最短时间模型过程中,忽略了很多客观的不定因素,比如天气问题等,会使正常计划受到一定的影响。

还有驶入高速前的一段公路上的速度也被近似看成高速车速。

但是本模型用区域性划分和动态分析法解决游遍全国的省会城市、直辖市、、澳门,相对于传统的动态规划解法,达到了省时、简便的效果,大大降低了计算的复杂性。

我们还需再靠近实际情况,再精确该模型,减少误差。

7、参考文献

[1]铁菊红,辉:

一种改进的基于高斯分布拟合的提取标志点像素坐标方法。

ComputerandModernization,2008(4)。

[2]解晨,韦雄亦:

模拟退火算法和遗传算法的比较与思考。

电脑知识与技术,2013,9(19)。

[3]王勇:

用遗传算法求解中国旅行商问题。

商业大学学报:

自然科学版,2005(4)。

[4]英:

遗传算法中适应度函数的研究。

工业高等专科学校学报,2006.9,vol13(3)。

[5]周凯,宋全军,邬学军:

数学建模竞赛与提高,图与网络模型。

[6]王剑文,戴光明,柏桥,全元。

求解TSP问题算法综述[J]。

计算机工程与科学.2008(02)。

八、附录

基于Java的经纬度坐标与地图容器像素坐标转换器

DOCTYPEHTML>

经纬度坐标与地图容器像素坐标相互转换

body{

margin:

0;

height:

100%;

width:

100%;

position:

absolute;

}

#mapContainer{

position:

absolute;

top:

0;

left:

0;

right:

0;

bottom:

150px;

}

#btnDiv{

position:

absolute;

bottom:

0;

left:

20px;

height:

150px;

font-size:

12px;

}

#btnDivinput{

height:

23px;

outline:

none;

border:

1pxsolid#ddd;

padding-left:

5px;

border-radius:

3px;

}

#btnDivinput[type='button']{

height:

28px;

line-height:

28px;

outline:

none;

text-align:

center;

padding-left:

5px;

padding-right:

5px;

color:

#FFF;

background-color:

#0D9BF2;

border:

0;

border-radius:

3px;

margin-top:

5px;

margin-left:

5px;

cursor:

pointer;

margin-right:

10px;

}


地图经纬度坐标:

鼠标左键在地图上单击获取经纬度坐标


X:

 Y:


地图容器像素坐标:


X:

 Y:

//初始化地图对象,加载地图

varmap=newAMap.Map('mapContainer',{

resizeEnable:

true

});

AMap.event.addListener(map,'click',getLnglat);

//鼠标在地图上点击,获取经纬度坐标

functiongetLnglat(e){

document.getElementById('lngX').value=e.lnglat.getLng();

document.getElementById('latY').value=e.lnglat.getLat();

}

//经纬度坐标转换为容器像素坐标

document.getElementById('lng2x').onclick=function(){

varpx=document.getElementById('lngX').value;

varpy=document.getElementById('latY').value;

varpixel=map.lnglatTocontainer(newAMap.LngLat(px,py));

document.getElementById('pixelx').value=pixel.getX();

document.getElementById('pixely').value=pixel.getY();

};

//容器像素坐标转换为经纬度坐标

document.getElementById('x2lng').onclick=function(){

varlnglatX=parseInt(document.getElementById('pixelx').value);

varlnglatY=parseInt(document.getElementById('pixely').value);

varll=map.containTolnglat(newAMap.Pixel(lnglatX,lnglatY));

document.getElementById('lngX').value=ll.getLng();

document.getElementById('latY').value=ll.getLat();

};

变异法核心代码

forp=4:

4:

pop_size

rtes=pop(rand_pair(p-3:

p),:

);

dists=total_dist(rand_pair(p-3:

p));

[ignore,idx]=min(dists);

best_of_4_rte=rtes(idx,:

);

ins_pts=sort(ceil(n*rand(1,2)));%生成1x2每一列元素

%按照升序排列矩阵

I=ins_pts

(1);

J=ins_pts

(2);

fork=1:

4%保留最佳个体,繁殖三个新个体

tmp_pop(k,:

)=best_of_4_rte;

switchk

case2%左右翻转

tmp_pop(k,I:

J)=fliplr(tmp_pop(k,I:

J));

case3%交换

tmp_pop(k,[IJ])=tmp_pop(k,[JI]);

case4%向前移动一位

tmp_pop(k,I:

J)=tmp_pop(k,[I+1:

JI]);

otherwise

end

end

new_pop(p-3:

p,:

)=tmp_pop;

end

pop=new_pop;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2