数学实验综合实验.docx
《数学实验综合实验.docx》由会员分享,可在线阅读,更多相关《数学实验综合实验.docx(8页珍藏版)》请在冰豆网上搜索。
数学实验综合实验
课程名称:
数学软件与实验成绩:
旅行商问题
课程号:
50c11033
课序号:
01
任课教师:
邢红杰
班级:
5008信计
姓名:
郝杰
学号:
2008477042
填写日期:
2011-5-24
旅行商问题
5008信息与计算科学郝杰2008477042
1、实验问题
已知30个城市的坐标如下:
[4194;3784;5467;2562;764;299;6858;7144;5462;8369;6460;1854;2260;8346;9138;2538;2442;5869;7171;7478;8776;1840;1340;827;6232;5835;4521;4126;4435;450]
一名推销员要拜访多个地点时,如何找到在拜访每个地点一次后再回到起点的最短路径。
2、符号说明
Location储存的是个城市的坐标
D(i,j)代表城市i和城市j之间的距离
Len路径总距离
Pc交叉概率
Pm变异概率
3、问题分析与建模
3.1问题分析
本题中设定了我国30城市,当一个推销员拜访所有城市后回到起点,31个地点所有路径个数是30!
个。
由于其全局搜索的特性,遗传算法在解决TSP问题中有着其他算法所没有的优势。
TSP问题就是寻找一条最短的遍历n个城市的最短路径,或者说搜索子集v={v1,v2,v3,…,vn}(vi的元素表示对n个城市的编号)的一个排列t=(t1,t2,t3,…,ti,…,tn),其中ti∈v(i=1,2,3,…,n),且记tn+1=t1,,使len=Σd(Vi,Vi+1)+d(V1,Vn)取最小值,式中的d(Vi,Vi+1)表示城市Vi到城市Vi+1的距离.
标准的遗传算法包括群体的初始化,选择,交叉,变异操作。
其主要步骤可描述如下[1]:
(1)随机产生一组初始个体构成的初始种群,并评价每一个个体的适配值。
(2)判断算法的收敛准则是否满足。
若满足输出搜索结果;否则执行以下步骤。
(3)根据适配值大小以一定方式执行选择操作。
(4)按交叉概率Pc执行交叉操作.
(5)按变异概率Pm执行变异操作。
(6)返回步骤
(2)。
3.2程序设计
3.2.1坐标系中画出个城市的坐标点
矩阵location储存的是个城市的坐标(设:
推销员出发点的坐标为(0,0))
如下图所示:
locations=[00;4194;3784;5467;2562;764;299;6858;7144;5462;8369;6460;1854;2260;8346;9138;2538;2442;5869;7171;7478;8776;1840;1340;827;6232;5835;4521;4126;4435;450];
plot(locations(:
1),locations(:
2),'b*');
3.2.2距离矩阵和适应度函数
距离矩阵使用一个N×N矩阵D存储,D(i,j)代表城市i和城市j之间的距离。
D(i,j)=sqrt((Xi-Xj).^2+(Yi-Yj).^2)在该问题的求解中,用距离的总和来衡量适应度,距离的总和越大,适应度越小,进而探讨求解结果是否最优。
每个个体(每条路径距离)总合计算公式为:
len=D(1,N);
fori=1:
(N-1)
len=len+D(i,,i+));
end
len纪录总路径格式n×1len(i)代表第i个个体(路径)距离总合。
3.2.3选择操作
选择的目的是为了从当前群体中选出优良的个体,使他们有机会作为父代产生后代的个体。
functionseln=(s,p);
inn=size(p,1);
fori=1:
2
r=rand;
prand=p-r;
j=1;
whileprand(j)<0
j=j+1;
end
seln(i)=j;
end
end
3.2.4交叉操作
群体中的每个个体之间都以一定的概率pc交叉,即两个个体从各自字符串的某一位置(一般是随机确定)开始互相交换,这类似生物进化过程中的基因分裂与重组。
例如,假设2个父代个体x1,x2为:
x1=0100110
x2=1010001
从每个个体的第3位开始交叉,交又后得到2个新的子代个体y1,y2分别为:
y1=0100001
y2=1010110
这样2个子代个体就分别具有了2个父代个体的某些特征。
利用交又我们有可能由父代个体在子代组合成具有更高适合度的个体。
functionxoverKids=tsp_crossover_permutation(parents,options,NVARS,...
FitnessFcn,thisScore,thisPopulation)
nKids=length(parents)/2;
xoverKids=cell(nKids,1);
index=1;
fori=1:
nKids
parent=thisPopulation{parents(index)};
index=index+2;
p1=ceil((length(parent)-1)*rand);
p2=p1+ceil((length(parent)-p1-1)*rand);
child=parent;
child(p1:
p2)=fliplr(child(p1:
p2));
xoverKids{i}=child;
end
3.2.5变异操作
基因的突变普遍存在于生物的进化过程中。
变异是指父代中的每个个体的每一位都以概率pm翻转,即由“1”变为“0”,或由“0”变为“1”。
遗传算法的变异特性可以使求解过程随机地搜索到解可能存在的整个空间,因此可以在一定程度上求得全局最优解。
function
mutationChildren=mutate_permutation(parents,options,NVARS,...
FitnessFcn,state,thisScore,thisPopulation,mutationRate)
mutationChildren=cell(length(parents),1);
fori=1:
length(parents)
parent=thisPopulation{parents(i)};
p=ceil(length(parent)*rand(1,2));
child=parent;
child(p
(1))=parent(p
(2));
child(p
(2))=parent(p
(1));
mutationChildren{i}=child;
End
4、MATLB求解
迭代后的最优路径如下图所示
由上图可知推销员所走的最短路径fval=504.7888
5、总结体会
TSP问题还有很多其他算法,比如说最临近算法、模拟退火、粒子群算法、最小权匹配算法等等论文用遗传算法对TSP问题进行了求解,熟悉遗传算法地算法流程,证明了遗传算法在求解TSP问题时,具有可行性,MATLAB在进行算法优化编程时具有一定的优势。
遗传算法在设计过程中要照顾好两个原则①子代要具有父代优良的基因信息即继承性②子代要保持群体的多样性,即变异。
虽然这两个原则在设计过程中经常会出现冲突,我们必须统筹的把握。
遗传算法是一种高效率的,适用面较广的最优问题解决方法。
一般遗传算法解决旅行商问题的效率不高。
在做实验的这段时间里,自己更加深入的了解到遗传算法的合理性和有效性。
同时,我也更加熟练的掌握了matlab应用软件的用法和各种命令的使用方法,也发现了matlab软件的功能很实用。