【TSP问题】基于matlab差分进化求解的TSP问题【含matlab源码 131期】

一、简介

差分进化算法是模拟自然界生物种群以“优胜劣汰,适者生存”为原则的进化发展规律而形成的一种随机启发式搜索算法。其保留了基于种群的全局搜索策略,采用实数编码,基于差分的简单变异操作和一对一的竞争生存策略,比遗传算法更简单。同时,差分进化算法独特的记忆能力使其可以动态的跟踪当前的搜索情况,及时调整搜索测量,因此具有较强的全局收敛能力。
目前为止,差分进化算法已经成为一种求解非线性,不可微,多极值和高维复杂函数的一种极其有效的方法。
在优化设计中,差分进化算法与传统的算法相比,具有以下特点:
1.差分进化算法从一个群体即多个点而不是从一个点开始搜索,这也是算法能够以较大的概率找到整体最优解的原因。
2.算法的进化准则是基于适应性信息的,不需要其他的辅助性信息,如要求函数可导,连续等。
3. 差分进化算法具有内在的并行性,适用于大规模并行分布处理,减小时间成本开销。
但缺点为:
1.算法后期个体之间的差异性减小,收敛速度慢,易陷入局部最优。
2.没有利用个体的先验知识,可能较多的迭代次数才能收敛到全局最优
算法框架:
在这里插入图片描述
1.种群初始化设置初始进化代数t=0,在优化问题的可行解空间内按下式,随机产生满足约束条件的NP个个体X构成初始种群,NP的选取一般在维数D的5-10倍之间。
在这里插入图片描述
2.变异操作变异操作是DE算法中的关键步骤,也是其与其他进化算法的主要区别所在。DE算法最基本的变异成分是父代的差分矢量,每个差分矢量对应父代种群中两个不同个体的差向量,差分矢量定义见下式:
在这里插入图片描述
其中,r1,r2,r3∈{1, 2, …,NP}为随机选取的互不相同的正整数,且r1,r2,r3与当前目标个体矢量索引号i不同,由此可见,DE算法的种群规模必须大于4,否则将无法进行变异操作。Vi(t+1)为目标个体矢量Xi(t)对应的变异个体矢量,Xr3(t)称为基向量,F∈[0, 2]为常数,是DE算法的主要控制参数之一,称为变异因子或缩放因子,控制差异矢量的缩放幅度,也即对基向量影响的大小。
在这里插入图片描述
3.交叉操作为进一步增加种群多样性,DE 算法将目标矢量个体Xi(t)与其对应的变异个体Vi(t+1)进行交叉操作,产生试验个体,即目标个体的候选个体Ui(t+1)。为保证目标个体Xi(t)的进化,必须保证试验个体Ui(t+1)中至少有一维分量由变异个体Vi(t+1)贡献,而其他维分量则由交叉概率因子CR决定。由此试验个体中每一维分量uij(t+1)按下式。
在这里插入图片描述
其中,xij(t)表示父代种群中目标个体矢量Xi(t)中的第j维分量,vij(t+1)为变异个体Vi(t+1)中的第j维分量,其中i=1,…,NP,j=1,…,D。rand(j)∈[0,1]为第j维分量对应的随机数。交叉概率因子CR∈[0,1]是DE算法的另一个主要控制参数,它决定了变异个体Vi(t+1)在生成的试验个体Ui(t+1)中所占的比例。 k为第i个个体对应的系数,一般是从序列[1, 2, …,D]中随机选择的一个整数,用来确保候选个体Ui(t+1)中至少有一维分量来自变异个体Vi(t+1)。

4.选择操作(优胜劣汰)
在这里插入图片描述

二、源代码

close all
clear
clc
 
%edit by zhang
% 2014-3-15
 
city=[1304,2312;3639,1315;4177,2244;3712,1399;3488,1535;3326,1556;...
    3238,1229;4196,1004;4312,790;4386,570;3007,1970;2562,1756;2788,1491;...
    2381,1676;1332,695;3715,1678;3918,2179;4061,2370;3780,2212;3676,2578;4029,2838;...
    4263,2931;3429,1908;3507,2367;3394,3201;3439,3201;2935,3240;3140,3550;2545,2357;2778,2826;2370,2975];
 
city_num=size(city,1);
%计算两两城市之间的距离
for i=1:city_num
    for j=1:city_num
        distance(i,j)=sqrt((city(i,1)-city(j,1))^2 + (city(i,2)-city(j,2))^2);
    end
end
%相比于其他算法,迭代次数略长
NP=20;
NG=2000;
F=0.6;
CR=0.5;
 
pop=zeros(NP,city_num);
x_old=zeros(NP,city_num);
x_new=zeros(NP,city_num);
pi_old=zeros(NP,city_num);
pi_new=zeros(NP,city_num);
 
for i=1:NP
    for j=1:city_num
       pop(i,j)=5*rand();
    end
end
 
k=1;
 
x_old=pop;
 
while k<=NG
    %将实数编码转换成工件顺序编码
    for i=1:NP
      x_old_decode(i,:)=LOVdecode(x_old(i,:));
    end
    %----find the best value--------------%
    ind_best  = x_old(1,:);
    for i=2:NP
        pi_best=LOVdecode(ind_best);
        
        if CalLength(distance,pi_best)>CalLength(distance,x_old_decode(i,:))
            ind_best = x_old(i,:);
        end
    end
    
    BestFit=CalLength(distance , LOVdecode(ind_best));%最短时间
    Best=LOVdecode(ind_best);%最佳路径
     %%--------mutaiton---------------------%
     for i=1:NP
         R=randperm(NP);
         r1=R(1);
         r2=R(2);
         r3=R(3);
         
         if i==r1
             r1=R(4);
         else if i==r2
                 r2=R(4);
             else if i==r3
                     r3=R(4);
                 end
             end
         end
         
 
       
     x_old = x_new; 
     k=k+1;
end
BSF=Best;
BestL=BestFit;
%绘制路径图
for i=1:city_num-1 
        plot([city(BSF(i),1),city(BSF(i+1),1)],[city(BSF(i),2),city(BSF(i+1),2)],'bo-'); 
        hold on; 
end 
plot([city(BSF(city_num),1),city(BSF(1),1)],[city(BSF(city_num),2),city(BSF(1),2)],'ro-');
title('差分进化TSP')
 
disp('最佳路径');
disp(BSF);
disp('最短路径长度');
disp(BestL)

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ2449341593
往期回顾>>>>>>
VRP】基于matlab遗传算法的带时间窗的车辆路径问题【含Matlab源码 002期】
【路径规划】基于matlab A*算法解决三维路径规划问题【含Matlab源码 003期】
【路径规划】基于matlab人工蜂群的路径规划【含Matlab源码 004期】
【路径规划】基于matlab蚁群求解多旅行商MTSP问题【含Matlab源码 005期】
【路径规划】基于matlab蚁群算法的无人机路径规划【含Matlab源码 008期】
【路径规划】基于matlab遗传算法求解多VRP问题【含Matlab源码 010期】
【路径规划】基于matlab遗传算法的多中心VRP求解【含Matlab源码 011期】
【路径规划】基于matlab粒子群的三维无人机路径规划【含Matlab源码 015期】
路径规划】基于matlab采用遗传算法编制多物流中心的开放式车辆路径问题【含Matlab源码 017期】
【路径规划】基于matlab粒子群之机器人栅格路径规划【含Matlab源码 018期】
【路径规划】基于matlab蚁群算法求解最短路径【含Matlab源码 019期】
【路径规划】基于matlab 免疫算法之物流中心选址问题【含Matlab源码 020期】
【路径规划】基于matlab人工蜂群的无人机三维路径规划【含Matlab源码 021期】
【路径规划】基于matalb栅格地图——遗传算法的机器人最优路径规划【含Matlab源码 022期】
【路径规划】基于matlab栅格地图——遗传算法的机器人最优路径规划【含Matlab源码 027期】
【路径规划】基于matlab蚁群的多无人机攻击调度【含Matlab源码 034期】
【路径规划】基于matlab蚁群的三维路径规划【含matlab源码 043期】
【路径规划】基于matlab粒子群优化蚁群的最短路径求解【含Matlab源码 076期】
【路径规划】基于matlab蚁群算法求解多中心VRP问题【含Matlab源码 111期】
【路径规划】基于matlab蚁群算法求解带时间窗的多中心VRP问题【含Matlab源码 112期】
【路径规划】基于matlab蚁群算法求解带时间窗的多中心VRP问题【含Matlab源码 113期】
【路径规划】基于matalb遗传算法的多中心VRP求解【含Matlab源码 114期】
【路径规划】基于matlab模拟退火求解VRP问题【含Matlab源码 115期】
【路径规划】基于matlab A星的栅格路径规划【含Matlab源码 116期】
【路径规划】基于matlab一种带交叉因子的双向寻优粒子群栅格地图路径规划【含Matlab源码 117期】
【TSP】基于matlab蚁群算法求解旅行商TSP问题含GUI【含Matlab源码 118期】
【路径规划】基于matlab蚁群算法栅格地图路径规划【含Matlab源码 119期】

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/113097689