基于遗传算法的旅行商求解方案Word格式文档下载.docx
- 文档编号:22277513
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:16
- 大小:219.62KB
基于遗传算法的旅行商求解方案Word格式文档下载.docx
《基于遗传算法的旅行商求解方案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于遗传算法的旅行商求解方案Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
选择或复制操作是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。
个体适应度越高,其被选择的机会就越多。
此处采用与适用度成比例的概率方法进行选择。
具体地说,就是首先计算群体中所有个体适应度的总和(
),再计算每个个体的适应度所占的比例(
),并以此作为相应的选择概率
。
(5)交叉操作:
交叉操作是遗传算法中最主要的遗传操作。
简单的交叉(即一点交叉)可分两步进行:
首先对种群中个体进行随机配对;
其次,在配对个体中随机设定交叉处,配对个体彼此交换部分信息。
(6)变异:
变异操作是按位(bit)进行的,即把某一位的内容进行变异。
变异操作同样也是随机进行的。
一般而言,变异概率
都取得较小。
变异操作是十分微妙的遗传操作,它需要和交叉操作配合使用,目的是挖掘群体中个体的多样性,克服有可能限于局部解的弊病。
这6个要素构成了遗传算法的核心内容,其流程如图1所示。
图1遗传算法的基本流程
遗传算法解题的基本步骤如下:
Step1:
参数设置及种群初始化;
Step2:
对不可行解进行贪婪修复;
Step3:
适应度评价;
Step4:
轮盘赌选择;
Step5:
交叉;
Step6:
变异;
Step7:
Step8:
Step9:
终止条件判断,若未达到终止条件,则转到Step4;
Step10:
输出结果。
图2遗传算法具体步骤
四.程序源代码
%遗传算法求解旅行商问题
%初始化
a=[13042312;
36391315;
41772244;
37121399;
34881535;
33261556;
...
32381229;
41961044;
4312790;
2864570;
19271970;
25621756;
27881491;
23811676;
1332695;
37151678;
39182179;
40612370;
37802212;
36762578;
15372838;
27452931;
34291908;
35072376;
];
%a:
假定的24个城市的坐标
n=100;
%n:
种群个数
C=200;
%C:
停止代数
m=2;
%m:
适配值淘汰加速指数,不宜太大
Pc=0.9;
%Pc:
交叉概率
Pm=0.2;
%Pm:
变异概率
D=distance(a);
%生成距离矩阵
[R,Rlength]=GeneTSP(D,a,n,C,m,Pc,Pm);
%返回值:
最优路径R
%总距离Rlength
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%D:
距离矩阵
31个城市的坐标,在初始化时设定
%C:
%m:
适值淘汰加速指数,不宜太大(5以下)
变异概率
%R:
最短路径,Rlength:
路径长度
function[R,Rlength]=GeneTSP(D,a,n,C,m,Pc,Pm)
[N,NN]=size(D);
%(31*31)
farm=zeros(n,N);
%存储种群
%随机生成初始种群,随机产生从1到N的N个初始值,例如,RANDPERM(6),可能结果为:
[245613].
fori=1:
n
farm(i,:
)=randperm(N);
end
R=farm(1,:
);
%一个随机解(个体)
scatter(a(:
1),a(:
2),'
x'
%画出所有点,a(:
1):
X坐标,a(:
2):
Y坐标
holdon
pause
(1)
%画出随机解得路径图
figure;
plotaiwa(a,R);
%输出随机的解得路径和总距离
disp('
初始种群中的一个随机值:
'
)
Rlength=myLength(D,R)
%计算各个个体总距离和适配置
len=zeros(n,1);
%存储路径长度
fitness=zeros(n,1);
%存储适配值
counter=0;
whilecounter<
C
len(i,1)=myLength(D,farm(i,:
));
%计算路径长度
minlen=min(len);
rr=find(len==minlen);
%返回的是在len中路径最短的路径坐标(i,1)
R=farm(rr(1,1),:
%更新最短路径
FARM=farm;
%优胜劣汰,nn记录了复制的个数
%选择
K=23;
[aa,bb]=size(FARM);
FARM2=FARM;
len2=len;
[len]=sort(len);
aa
tt=find(len2==len(i,1));
FARM(i,:
)=FARM2(tt(1,1),:
end
K
j=aa+1-i;
FARM(j,:
)=FARM(i,:
%交叉操作
2:
aa
ifPc>
rand&
&
i<
aa%交叉概率Pc
A=FARM(i,:
B=FARM(i+1,:
[A,B]=cross(A,B);
%交叉算法采用部分匹配交叉
)=A;
FARM(i+1,:
)=B;
%变异
ifPm>
=rand
)=mutate(FARM(i,:
FARM=[R;
FARM];
%将随机产生的n-aa个体加入从后面种群,将上次迭代的最优解从前面加入种群
%保持种群规模为n
ifaa>
FARM=FARM(1:
n,:
%更新farm
farm=FARM;
clearFARM
%更新迭代次数
counter=counter+1;
%结果输出
Rlength=myLength(D,R)
figure
plotaiwa(a,R)%画图
迭代次数c'
disp(C);
迭代后结果'
Rlength=myLength(D,R)%结果输出
%计算邻接矩阵
%输入参数a是中国31个城市的坐标
%输出参数D是无向图的赋权邻接矩阵
functionD=distance(a)
[c,d]=size(a);
%此例中c=24,d=2
D=zeros(c,c);
%申请一个0阵
fori=1:
c
forj=i:
bb=(a(i,1)-a(j,1)).^2+(a(i,2)-a(j,2)).^2;
D(i,j)=bb^(0.5);
%计算第i个城市到j城市的距离
D(j,i)=D(i,j);
end
%总路径len
functionlen=myLength(D,p)
[N,NN]=size(D);
len=D(p(1,N),p(1,1));
(N-1)
len=len+D(p(1,i),p(1,i+1));
%绘制路径示意图R记录路径
最短路径
functionplotaiwa(a,R)
scatter(a(:
holdon
plot([a(R
(1),1),a(R(24),1)],[a(R
(1),2),a(R(24),2)])
fori=2:
length(R)
x0=a(R(i-1),1);
y0=a(R(i-1),2);
x1=a(R(i),1);
y1=a(R(i),2);
xx=[x0,x1];
yy=[y0,y1];
plot(xx,yy)
holdon
function[a,b]=cross(a,b)
L=length(a);
ifL<
=10%确定交叉宽度
W=9;
elseif((L/10)-floor(L/10))>
=rand&
L>
10
W=ceil(L/10)+8;
else
W=floor(L/10)+8;
p=unidrnd(L-W+1);
%随机选择交叉范围,从p到p+W
%UNIDRNDRandomarraysfromthediscreteuniformdistribution.
%R=UNIDRND(N)returnsanarrayofrandomnumberschosenuniformly
%fromtheset{1,2,3,...,N}.ThesizeofRisthesizeofN.
%
%R=UNIDRND(N,MM,NN,...)orR=UNIDRND(N,[MM,NN,...])returnsan
%MM-by-NN-by-...array.
W
%交叉
x=find(a==b(1,p+i-1));
y=find(b==a(1,p+i-1));
[a(1,p+i-1),b(1,p+i-1)]=exchange(a(1,p+i-1),b(1,p+i-1));
[a(1,x),b(1,y)]=exchange(a(1,x),b(1,y));
end
%变异算法
functiona=mutate(a)
rray=randperm(L);
[a(rray
(1)),a(rray
(2))]=exchange(a(rray
(1)),a(rray
(2)));
5.运行结果
Rlength=
3.0138e+004
1.5077e+004
迭代次数c
200
迭代后结果
图324个城市坐标图
图4随机初始化结果
图5遗传算法求解结果
8.1881e+004
2.8217e+004
400
图636个城市坐标图
图7随机初始化结果
图8遗传算法求解结果
六.结果分析
由遗传算法对以上两种情况的求解(24城市和36城市),可以看出,用遗传算法来求解TSP问题是可行的。
用遗传算法求解时,增加迭代次数,可以得到更加优良的结果,但是会需要更长的时间,即一个优良的结果往往是以时间为代价的,这种情况要依据具体问题具体分析,平衡两者在问题求解时的比重。
另外,对选择算法进行优化,会提高遗传算法的性能,这些都需要在实践中不断积累和广泛涉猎优良算法。
最后,遗传算法得到的未必是最优解,我们可以根据需要进行多次求解,从而比较得出符合要求的结果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 遗传 算法 旅行 求解 方案