遗传算法与TSP问题

本文探讨了遗传算法在解决旅行商问题(TSP)中的应用,通过对比不同参数(种群大小、交叉概率、变异概率、迭代次数)的影响,得出最佳参数配置。实验表明,种群大小为85,交叉概率为0.7,变异概率为0.07,迭代次数为1500时,遗传算法能有效避免局部最优,找到较优解。
摘要由CSDN通过智能技术生成

遗传算法与TSP问题

TSP问题简介

旅行商问题,又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。

遗传算法解决

TSP是一个具有广泛的应用背景和重要理论价值的组合优化问题。 近年来,有很多解决该问题的较为有效的算法不断被推出,例如Hopfield神经网络方法,模拟退火方法以及遗传算法方法等。
TSP搜索空间随着城市数n的增加而增大,所有的旅程路线组合数为(n-1)!/2。在如此庞大的搜索空间中寻求最优解,对于常规方法和现有的计算工具而言,存在着诸多计算困难。借助遗传算法的搜索能力解决TSP问题,是很自然的想法。

遗传算法基本思路

1、计算开始时,随机初始化一定数目的个体,并计算每个个体的适应度值,产生第一代(初始种群)。

2、如果不满足优化准则,开始新一代的计算:
按照适应度值选择个体,产生下一代;
父代按一定概率进行交叉操作,产生子代;
所有的子代按一定概率变异,形成新的一代。
计算新子代的适应度值。

3、这一过程循环执行,直到满足优化准则为止。

代码

交叉操作函数(cross.m)
function [A,B]=cross(A,B)
L=length(A);
if L<10
    W=L;
elseif ((L/10)-floor(L/10))>=rand&&L>10
    W=ceil(L/10)+8;
else
    W=floor(L/10)+8;
end
%%W为需要交叉的位数
p=unidrnd(L-W+1);%随机产生一个交叉位置
%fprintf('p=%d ',p);%交叉位置
for i=1: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

end
对调函数(exchange.m)
function [x,y]=exchange(x,y)
temp=x;
x=y;
y=temp;
 
end
适应度函数(fit.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
变异函数(Mutation.m)
function a=Mutation(A)
index1=0;index2=0;
nnper=randperm(size(A,2));
index1=nnper(1);
index2=nnper(2);
%fprintf('index1=%d ',index1);
%fprintf('index2=%d ',index2);
temp=0;
temp=A(index1);
A(index1)=A(index2);
A(index2)=temp;
a=A;

end
染色体的路程代价函数(mylength.m)
functi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值