遗传算法(GA)与TSP问题

该博客介绍了遗传算法(GA)的基本原理、流程,并通过分析种群个数M、迭代次数ITER、交叉概率Pc和变异概率Pm对算法的影响,探讨了如何优化TSP问题的解决方案。结果显示,合适的参数配置对于算法收敛速度和找到全局最优解至关重要。
摘要由CSDN通过智能技术生成

遗传算法

基本原理

遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。

基本流程

总结出遗传算法的一般步骤:
开始循环直至找到满意的解。
1.评估每条染色体所对应个体的适应度。
2.遵照适应度越高,选择概率越大的原则,从种群中选择两个个体作为父方和母方。
3.抽取父母双方的染色体,进行交叉,产生子代。
4.对子代的染色体进行变异。
5.重复2,3,4步骤,直到新种群的产生。
结束循环。

代码实现

连点画图函数

function plot_route(a,R)
scatter(a(:,1),a(:,2),'rx');
hold on;
plot([a(R(1),1),a(R(length(R)),1)],[a(R(1),2),a(R(length(R)),2)]);
hold on;for i=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);    
hold on;
end   
end

染色体的路程代价函数(用于计算每个染色体的长度)

function len=myLength(D,p)%p是一个排列
[N,NN]=size(D);
len=D(p(1,N),p(1,1));
for i=1:(N-1)   
len=len+D(p(1,i),p(1,i+1));
end
end

适应度函数(每次迭代都要计算每个染色体在本种群内部的优先级别,类似归一化参数。越大越好!)

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

变异函数

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

对调函数

functio
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值