【TSP问题】差分进化之求解TSP问题【Matlab 044期】

一、简介

差分进化算法是模拟自然界生物种群以“优胜劣汰,适者生存”为原则的进化发展规律而形成的一种随机启发式搜索算法。其保留了基于种群的全局搜索策略,采用实数编码,基于差分的简单变异操作和一对一的竞争生存策略,比遗传算法更简单。同时,差分进化算法独特的记忆能力使其可以动态的跟踪当前的搜索情况,及时调整搜索测量,因此具有较强的全局收敛能力。
目前为止,差分进化算法已经成为一种求解非线性,不可微,多极值和高维复杂函数的一种极其有效的方法。
在优化设计中,差分进化算法与传统的算法相比,具有以下特点:
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)

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ912100926。
往期回顾>>>>>>
【路径规划】粒子群优化算法之三维无人机路径规划【Matlab 012期】
【路径规划】遗传算法之多物流中心的开放式车辆路径规划【Matlab 013期】
【路径规划】粒子群算法之机器人栅格路径规划【Matlab 014期】
【路径规划】蚁群算法之求解最短路径【Matlab 015期】
【路径规划】免疫算法之物流中心选址【Matlab 016期】
【路径规划】人工蜂群之无人机三维路径规划【Matlab 017期】
【路径规划】遗传算法之基于栅格地图机器人路径规划【Matlab 018期】
【路径规划】蚁群算法之多无人机攻击调度【Matlab 019期】
【路径规划】遗传算法之基于栅格地图的机器人最优路径规划【Matlab 020期】
【路径规划】遗传算法之考虑分配次序的多无人机协同目标分配建模【Matlab 021期】
【路径规划】蚁群算法之多中心vrp问题【Matlab 022期】
【路径规划】蚁群算法之求解带时间窗的多中心VRP【Matlab 023期】
【路径规划】遗传算法之多中心VRP求解【Matlab 024期】
【路径规划】模拟退火之求解VRP问题【Matlab 025期】
【路径规划】A星之栅格路径规划【Matlab 026期】
【路径规划】基于一种带交叉因子的双向寻优粒子群栅格地图路径规划【Matlab 027期】
【路径规划】【TSP】蚁群算法之求解TSP问题含GUI【Matlab 028期】
【路径规划】蚁群算法之栅格地图路径规划【Matlab 029期】
【路径规划】遗传算法之旅行商 TSP 【Matlab 030期】
【路径规划】模拟退火算法之旅行商 TSP 问题【Matlab 031期】
【路径规划】蚁群算法之智能车路径规划【Matlab 032期】
【路径规划】华为杯:基于matlab 无人机优化运用于抢险救灾【Matlab 033期】
【路径规划】matlab之最小费用最大流算问题【Matlab 034期】
【路径规划】A*算法之解决三维路径规划问题【Matlab 035期】
【路径规划】人工蜂群算法之路径规划【Matlab036期】
【路径规划】人工蜂群算法之路径规划【Matlab 037期】
【路径规划】蚁群算法之求解多旅行商MTSP问题【Matlab 038期】
【路径规划】蚁群算法之无人机路径规划【Matlab 039期】

[【路径规划】遗传算法之求解多VRP问题【Matlab 040期】](https://blog.csdn.net/m0_54742769/article/details/113091004
【VRP】遗传算法之带时间窗的车辆路径问题【Matlab 041期】
【路径规划】蚁群算法之三维路径规划【Matlab 042期】
【路径规划】粒子群优化蚁群之求解最短路径【Matlab 043期】

猜你喜欢

转载自blog.csdn.net/m0_54742769/article/details/113104923
044