用遗传算法求解中国34个省会TSP的问题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:用遗传算法求解中国34 个省会TSP 问题源代码分享在本人博客:

2012-1-17

智能控制技术及其应用

大作业

专业: 控制工程

学号:XXXXXX

姓名:XXX

用遗传算法求解中国34 个省会TSP 问题

一、TSP 问题的描述

旅行商问题(TSP)可以具体描述为:已知n 个城市之间的相互距离,现有一个推销员从某一个城市出发,必须遍访这n 个城市,并且每个城市只能访问一次,最后又必须返回到出发城市,如何安排他对这些城市的访问次序,可使其旅行路线的总长度最短。

现给出中国34 个省会数据,要求基于此数据使用遗传算法解决该TSP 问题。

图1 中国34 省会位置

city =

1.西藏

2.云南

3.四川

4.青海

5.宁夏

6.甘肃

7.内蒙古

8.黑龙江

9.吉林

10.辽宁11.北京12 天津13.河北14.山东15.河南16.山西17. 陕西18.安徽

19.江苏20.上海21.浙江22.江西23.湖北24.湖南25,贵州26. 广西27.广东

28.福建29.海南30.澳门31.香港32.台湾33.重庆34.新疆

像素坐标如下:

Columns 1 through 11

100 187 201 187 221 202 258 352 346 336 290

211 265 214 158 142 165 121 66 85 106 127

Columns 12 through 22

297 278 296 274 265 239 302 316 334 325 293

135 147 158 177 148 182 203 199 206 215 233

Columns 23 through 33

280 271 221 233 275 322 250 277 286 342 220

216 238 253 287 285 254 315 293 290 263 226

Column 34

104

77

二、遗传算法的介绍

2.1 遗传算法

遗传算法的基本原理是通过作用于染色体上的基因寻找好的染色体来求解问题,它需要对算法所产生的每个染色体进行评价,并基于适应度值来选择染色体,使适应性好的染色体有更多的繁殖机会,在遗传算法中,通过随机方式产生若干个所求解问题的数字编码,即染色体,形成初始种群;通过适应度函数给每个个体一个数值评价,淘汰低适应度的个体,选择高适应度的个体参加遗传操作,经过遗产操作后的个体集合形成下一代新的种群,对这个新的种群进行下一轮的进化。

2.2 遗传算法的过程

遗传算法的基本过程是:

1. 初始化群体。

2. 计算群体上每个个体的适应度值

3. 由个体适应度值所决定的某个规则选择将进入下一代个体。

4. 按概率Pc 进行交叉操作。

5. 按概率Pm 进行变异操作。

6. 没有满足某种停止条件,则转第2 步,否则进入第7 步。

7. 输出种群中适应度值最优的染色体作为问题的满意解或最优界。停止条件有

两种:一是完成了预先给定的进化代数则停止;二是种群中的最

优个体在连续若干代没有改进或平均适应度在连续若干代基本没有改进时停止。

遗传算法过程图如图2:

图2 遗传算法过程框图

三、遗传算法解决TSP 问题的Matlab 程序实现

3.1 程序初始化

程序首先读入34 个省会城市坐标,计算任意两个城市的距离;设置遗传算法控制参数。

clear all;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); %生成n x n矩阵

dmat = reshape(sqrt(sum((xy(a,:)-xy(a',:)).^2,2)),nlen,nlen); %计算城市距离矩阵遗传算法对求解问题本身是一无所知的,这里采用随机生成初始化种群,如下:

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

for i=1:n

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

end

3.2 计算适应度

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

fit = (1 -len - min l en

)m max len - min len + 0.0001

其中,len 为某组解的总距离,minlen 为该次迭代中最短距离,maxlen 为该次迭代中最长距离,m 为适应度归一化淘汰加速指数,源程序如下:

function fitness=fit(len,m,maxlen,minlen)

fitness=len;

for i=1:length(len)

fitness(i,1)=(1-((len(i,1)-minlen)/(maxlen-minlen+0.0001))).^m;

end

3.3 选择操作

当个体适应度小于某一随机数值时,遭到淘汰,保留优秀个体,使它们有机会作为父代产生后代个体,源程序如下:

FARM=farm;

nn=0; % nn 为复制的个数

for i=1:n

if fitness(i,1)>=alpha*rand %适应度与随机数值相比较

nn=nn+1;

FARM(nn,:)=farm(i,:);

end

end

FARM=FARM(1:nn,:);

3.4 交叉操作

许多生物的繁衍是通过染色体的交叉完成的,在遗传算法中使用这一概念,并把交叉作为遗传算法的一个操作算子,其实现过程是对选中用于繁殖下一代的个体,随机地选择两个个体的位置,按交叉概率Pc,在选择的位置实行交换,目的在于产生新的基因组合,即新的个体,源代码如下:

相关文档
最新文档