文章目录
一、算法原理与基本步骤
1.1 原理
首先根据问题产生多个初始可行解(),然后从初始解中选择诺干优异的个体(问题的解)进行各种操作(交叉,变异)用以产生新的后代。再从新的后代中选择优异的个体进行相应的操作产生它们的后代,如此不断循环,直到迭代的次数达到了预先设定的值或者多次迭代以后产生的最优异的个体(最优解)的质量并没有明显的提高,就可以停止迭代,这时的最优个体(最优解)最为问题的解。
1.2 基本步骤
注意:交叉操作
要满足任意一个城市必须而且只能访问一次的约束,基本遗传算法的交叉操作生成的个体一般不能满足这一约束条件。所以要采用部分匹配交叉操作要求随机选取两个交叉点,以便确定一个匹配段。
部分匹配交叉:先随机确定两个交叉点,定义这两点间的区域为匹配区域并交换。对于匹配区域之外出现的城市重复,要根据匹配区域内的位置逐一进行替换
(1)种群初始化。对于TSP问题,实数编码为1-n的实数的随机排列,初始化的参数有种群个数M、染色体基因个数N(即城市的个数)、迭代次数C、交叉概率Pc、变异概率Pmutation。
(2)适应度函数。在TSP问题中,对于任意两个城市之间的距离D(i,j)已知,每个染色体(即n个城市的随机排列)可计算出总距离,因此可将一个随机全排列的总距离的倒数作为适应度函数,即距离越短,适应度函数越好。
(3)选择操作
(4)交叉操作
(5)变异操作
二、遗传算法对于TSP问题
2.1 数据的自定义
随机生成新的城市序列
c = rand(25,2);
save('citys.mat','c')
load citys.mat
2.2 matlab代码的实现
程序相关参数:
N=25; %%城市的个数
M=100; %%种群的个数
ITER=2000; %%迭代次数
%C_old=C;
m=2; %%适应值归一化淘汰加速指数
Pc=0.8; %%交叉概率
Pmutation=0.05; %%变异概率
变异函数:
function a=Mutation(A)
index1=0;index2=0;
nnper=randperm(size(A,2));
index1=nnper(1);
index2=nnper(2);
%fprintf('index1=%d ',index1);