【路径规划】基于matlab粒子群融合遗传算法求解栅格地图最短路径【含Matlab源码 526期】

一、简介

基于matlab粒子群融合遗传算法求解栅格地图最短路径

二、源代码

clc;
close all
clear
load('data4.mat')
figure(1)%画障碍图
hold on
S=(S_coo(2)-0.5)*num_shange+(S_coo(1)+0.5);%起点对应的编号
E=(E_coo(2)-0.5)*num_shange+(E_coo(1)+0.5);%终点对应的编号
for i=1:num_shange
    for j=1:num_shange
        if sign(i,j)==1
            y=[i-1,i-1,i,i];
            x=[j-1,j,j,j-1];
            h=fill(x,y,'k');
            set(h,'facealpha',0.5)
        end
        s=(num2str((i-1)*num_shange+j));
        %text(j-0.95,i-0.5,s,'fontsize',6) 
    end
end
axis([0 num_shange 0 num_shange])%限制图的边界
plot(S_coo(2),S_coo(1), 'p','markersize', 10,'markerfacecolor','b','MarkerEdgeColor', 'm')%画起点
plot(E_coo(2),E_coo(1),'o','markersize', 10,'markerfacecolor','g','MarkerEdgeColor', 'c')%画终点
set(gca,'YDir','reverse');%图像翻转
for i=1:num_shange
    plot([0 num_shange],[i-1 i-1],'k-');
    plot([i i],[0 num_shange],'k-');%画网格线
end
PopSize=20;%种群大小
OldBestFitness=0;%旧的最优适应度值
gen=0;%迭代次数
maxgen =20;%最大迭代次数

c1=0.5;%认知系数
c2=0.7;%社会学习系数
w=0.96;%惯性系数
%%
%初始化路径
w_min=0.5;
w_max=1;
Group=ones(num_point,PopSize);  %种群初始化
for i=1:PopSize
    p_lin=randperm(num_point)';%随机生成1*400不重复的行向量
    %% 将起点编号放在首位
    index=find(p_lin==S);
    lin=p_lin(1);
    p_lin(1)=p_lin(index);
    p_lin(index)=lin;
    Group(:,i)=p_lin;
    %%将每个个体进行合理化处理
    [Group(:,i),flag]=deal_fun(Group(:,i),num_point,liantong_point,E,num_shange);
    while flag==1%如处理不成功,则初始化个体,重新处理
        p_lin=randperm(num_point)';
        index=find(p_lin==S);
        lin=p_lin(1);
        p_lin(1)=p_lin(index);
        p_lin(index)=lin;
        Group(:,i)=p_lin;
        [Group(:,i),flag]=deal_fun(Group(:,i),num_point,liantong_point,E,num_shange);       
    end
end

%最优解
route=Group(:,end)';
index1=find(route==E);
route_lin=route(1:index1);
for i=2:index1
    Q1=[mod(route_lin(i-1)-1,num_shange)+1-0.5,ceil(route_lin(i-1)/num_shange)-0.5];
    Q2=[mod(route_lin(i)-1,num_shange)+1-0.5,ceil(route_lin(i)/num_shange)-0.5];
    plot([Q1(1),Q2(1)],[Q1(2),Q2(2)],'b-.','LineWidth',3);hold on
    
end
title('粒子群算法-随机路线');

title('粒子群算法-随机路线');
figure(2)
hold on
for i=1:num_shange
    for j=1:num_shange
        if sign(i,j)==1
            y=[i-1,i-1,i,i];
            x=[j-1,j,j,j-1];
            h=fill(x,y,'k');
            set(h,'facealpha',0.5)
        end
        s=(num2str((i-1)*num_shange+j));
        text(j-0.95,i-0.5,s,'fontsize',6) 
    end
end
axis([0 num_shange 0 num_shange])%限制图的边界
plot(S_coo(2),S_coo(1), 'p','markersize', 10,'markerfacecolor','b','MarkerEdgeColor', 'm')%画起点
plot(E_coo(2),E_coo(1),'o','markersize', 10,'markerfacecolor','g','MarkerEdgeColor', 'c')%画终点
set(gca,'YDir','reverse');%图像翻转
for i=1:num_shange
    plot([0 num_shange],[i-1 i-1],'k-');
    plot([i i],[0 num_shange],'k-');%画网格线
end
for i=2:index1
    Q1=[mod(route_lin(i-1)-1,num_shange)+1-0.5,ceil(route_lin(i-1)/num_shange)-0.5];
    Q2=[mod(route_lin(i)-1,num_shange)+1-0.5,ceil(route_lin(i)/num_shange)-0.5];
    plot([Q1(1),Q2(1)],[Q1(2),Q2(2)],'b-.','LineWidth',3)
end
%初始化粒子速度(即交换序)
Velocity =zeros(num_point,PopSize);   
for i=1:PopSize
    Velocity(:,i)=round(rand(1,num_point)'*num_point/10); %round取整
end

%计算每个个体对应路径的距离
for i=1:PopSize   
	EachPathDis(i) = PathDistance(Group(:,i)',E,num_shange);
end

IndivdualBest=Group;%记录各粒子的个体极值点位置,即个体找到的最短路径
IndivdualBestFitness=EachPathDis;%记录最佳适应度值,即个体找到的最短路径的长度
[GlobalBestFitness,index]=min(EachPathDis);%找出全局最优值和相应序号
%寻优
while gen < maxgen
    w=w_max-(w_max-w_min)*gen/maxgen;
    %迭代次数递增
    gen = gen +1
    %更新全局极值点位置,这里指路径
    for i=1:PopSize   
        GlobalBest(:,i) = Group(:,index);
    end
   
    %求pij-xij ,pgj-xij交换序,并以概率c1,c2的保留交换序
    pij_xij=GenerateChangeNums(Group,IndivdualBest);  %根据个体最优解求交换序
    pij_xij=HoldByOdds(pij_xij,c1);%以概率c1保留交换序
    pgj_xij=GenerateChangeNums(Group,GlobalBest);%根据全局最优解求交换序
    pgj_xij=HoldByOdds(pgj_xij,c2);%以概率c2保留交换序
   
    %以概率w保留上一代交换序
    Velocity=HoldByOdds(Velocity,w);
    Group = PathExchange(Group,Velocity); %根据交换序进行路径交换
    Group = PathExchange(Group,pij_xij);
    Group = PathExchange(Group,pgj_xij);
    for i = 1:PopSize    
        [Group(:,i),flag]=deal_fun(Group(:,i),num_point,liantong_point,E,num_shange);
        while flag==1
            p_lin=randperm(num_point)';
            index=find(p_lin==S);
            lin=p_lin(1);
            p_lin(1)=p_lin(index);
            p_lin(index)=lin;
            Group(:,i)=p_lin;
            [Group(:,i),flag]=deal_fun(Group(:,i),num_point,liantong_point,E,num_shange);
        end    
    end 
    for i = 1:PopSize    % 更新各路径总距离
        EachPathDis(i) = PathDistance(Group(:,i)',E,num_shange);
    end
    IsChange = EachPathDis<IndivdualBestFitness;%更新后的距离优于更新前的,记录序号
    IndivdualBest(:, find(IsChange)) = Group(:, find(IsChange));%更新个体最佳路径
    IndivdualBestFitness = IndivdualBestFitness.*( ~IsChange) + EachPathDis.*IsChange;%更新个体最佳路径距离
    [GlobalBestFitness, index] = min(IndivdualBestFitness);%更新全局最佳路径,记录相应的序号

    if GlobalBestFitness~=OldBestFitness %比较更新前和更新后的适应度值;
        OldBestFitness=GlobalBestFitness;%不相等时更新适应度值
        best_route=IndivdualBest(:,index)';
    end   
     BestFitness(gen) =GlobalBestFitness;%每一代的最优适应度
end
%最优解
index1=find(best_route==E);
route_lin=best_route(1:index1);
for i=2:index1
    Q1=[mod(route_lin(i-1)-1,num_shange)+1-0.5,ceil(route_lin(i-1)/num_shange)-0.5];
    Q2=[mod(route_lin(i)-1,num_shange)+1-0.5,ceil(route_lin(i)/num_shange)-0.5];
    plot([Q1(1),Q2(1)],[Q1(2),Q2(2)],'r','LineWidth',3)
end
for i=1:PopSize
    p_lin=randperm(num_point)';%随机生成1*400不重复的行向量
    %% 将起点编号放在首位
    index=find(p_lin==S);
    lin=p_lin(1);
    p_lin(1)=p_lin(index);
    p_lin(index)=lin;
    Group(:,i)=p_lin;
    %%将每个个体进行合理化处理
    [Group(:,i),flag]=deal_fun(Group(:,i),num_point,liantong_point,E,num_shange);
    while flag==1%如处理不成功,则初始化个体,重新处理
        p_lin=randperm(num_point)';
        index=find(p_lin==S);
        lin=p_lin(1);
        p_lin(1)=p_lin(index);
        p_lin(index)=lin;
        Group(:,i)=p_lin;
        [Group(:,i),flag]=deal_fun(Group(:,i),num_point,liantong_point,E,num_shange);       
    end
end

%最优解
route=Group(:,end)';
index3=find(route==E);
route_lin1=route(1:index3);
for i=2:index3
    Q1=[mod(route_lin1(i-1)-1,num_shange)+1-0.5,ceil(route_lin1(i-1)/num_shange)-0.5];
    Q2=[mod(route_lin1(i)-1,num_shange)+1-0.5,ceil(route_lin1(i)/num_shange)-0.5];
    plot([Q1(1),Q2(1)],[Q1(2),Q2(2)],'c-.','LineWidth',3);hold on
end
for i=1:PopSize
    p_lin=randperm(num_point)';%随机生成1*400不重复的行向量
    %% 将起点编号放在首位
    index=find(p_lin==S);
    lin=p_lin(1);
    p_lin(1)=p_lin(index);
    p_lin(index)=lin;
    Group(:,i)=p_lin;
    %%将每个个体进行合理化处理
    [Group(:,i),flag]=deal_fun(Group(:,i),num_point,liantong_point,E,num_shange);
    while flag==1%如处理不成功,则初始化个体,重新处理
        p_lin=randperm(num_point)';
        index=find(p_lin==S);
        lin=p_lin(1);
        p_lin(1)=p_lin(index);
        p_lin(index)=lin;
        Group(:,i)=p_lin;
        [Group(:,i),flag]=deal_fun(Group(:,i),num_point,liantong_point,E,num_shange);       
    end
end

%最优解
route=Group(:,end)';
index2=find(route==E);
route_lin2=route(1:index2);
for i=2:index2
    Q1=[mod(route_lin2(i-1)-1,num_shange)+1-0.5,ceil(route_lin2(i-1)/num_shange)-0.5];
    Q2=[mod(route_lin2(i)-1,num_shange)+1-0.5,ceil(route_lin2(i)/num_shange)-0.5];
    plot([Q1(1),Q2(1)],[Q1(2),Q2(2)],'m-.','LineWidth',3);hold on
end

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ 1564658423
往期回顾>>>>>>
【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期】
【TSP问题】基于matlab差分进化求解的TSP问题【含matlab源码 131期】
【路径规划】基于matlab遗传算法的旅行商 TSP 问题【含Matlab源码 135期】
【路径规划】基于matlab模拟退火算法的旅行商 TSP 问题【含Matlab源码 136期】
【路径规划】基于matlab蚁群算法的智能车路径规划【含Matlab源码 137期】
【路径规划】华为杯:无人机在抢险救灾中的优化运用【含Matlab源码 138期】
【路径规划】基于matlab RRT三维路径规划【含Matlab源码 151期】
【路径规划】基于matalb人工势场无人机编队路径规划【 含Matlab 155期】
【VRP问题】基于matlab节约算法求解TWVRP问题【含Matlab源码 156期】
【VRP问题】基于matlab节约算法求解CVRP问题【含Matalb源码 157期】
【VRP问题】基于matlab禁忌搜索算法求解VRP问题【含Matalb源码 158期】
【VRP问题】基于matlab模拟退火求解CVRP问题【含Matlab源码 159期】
【VRP问题】基于matlab人工鱼群求解带时间窗的VRP问题【含Matlab源码 161期】
【VRP问题】基于matlab遗传算法求解带容量的VRP问题【含Matlab源码 162期】
【路径规划】基于matlab狼群算法之三维路径规划【含Matlab源码 167期】
【路径规划】基于matlab人工势场的无人机三维路径规划【含Matlab源码 168期】
【路径规划】基于matlab改进差分之三维多无人机协同航迹规划【含Matlab源码 169期】
【路径规划】基于matlab人工蜂群的多无人机三维路径规划【含Matlab源码 170期】
【路径规划】基于matlab麻雀搜索算法的无人机三维路径规划【含Matlab源码 171期】
【路径规划】基于matlab蚁群算法的三维路径规划【含Matlab源码 179期】
【路径规划】基于matlab免疫算法之最短路径规划【含Matlab源码 194期】
【旅行商问题】基于matlab免疫算法之求解旅行商问题【含Matlab源码 195期】
【路径规划】基于matlab遗传算法的公交排班系统分析【含Matlab源码 220期】
【TSP】基于matlab 粒子群算法Hopfield之TSP求解【含Matlab源码 224期】
【路径规划】基于matlab A星和改进A星的路径规划【含Matlab源码 225期】
【TSP】基于matlab 改进的禁忌搜索算法之求解旅行商问题【含Matlab源码 241期】
【TSP】基于matlab 改进的蚁群算法之求解旅行商问题【含Matlab源码 242期】
【路径规划】基于matlab模拟退火算法之求解火灾巡逻最短路径【含Matlab源码 252期】
【三维路径规划】基于matlab 无人机三维空间的航迹规划【含Matlab源码 270期】
【路径规划】基于matlab分布式目标检测和跟踪的多无人机【含Matlab源码 289期】
【路径规划】基于matlab粒子群算法求解无人机最短路径【含Matlab源码 300期】
【无人机】多无人协同任务分配程序平台【含Matlab源码 301期】
【路径规划】基于matlab任意架次植保无人机作业路径规划【含Matlab源码 322期】
【路径规划】基于matlab粒子群遗传求解多无人机三维路径规划【含Matlab源码 333期】
【VRP问题】基于matlab粒子群求解VRPTW模型【含Matlab源码 334期】
【路径规划】基于matlab改进蚁群算法的路径规划【含Matlab源码 335期】
【VRP】基于matlab改进的模拟退火和遗传算法求解VRP问题【含Matlab源码 343期】
【VRP问题】基于matlab灰狼算法求解VRPTW问题【含Matlab源码 361期】
【VRP问题】基于matlab遗传算法和模拟退火求解带时间窗的自行车调度问题【含Matlab源码 370期】
【路径规划】基于matlab 改进的人工势场法机器人动静态避障【含Matlab源码 371期】
【TSP】基于matlab混合粒子群求解TSP问题【含Matlab源码 397期】
【TSP】基于matlab蚁群算法求解旅行商问题【含Matlab源码 398期】
【TSP】基于matlab hopfield神经网络求解TSP问题【含Matlab源码 408期】
【TSP】基于matlab蚁群算法求解76城市TSP问题【含Matlab源码 409期】
【路径规划】基于matlab粒子群求解物流选址【含Matlab源码 410期】
【TSP】基于matlab 人工鱼群算法求解TSP问题【含Matlab源码 422期】
【TSP】基于matlab粒子群算法求解旅行商问题【含Matlab源码 445期】
【航迹规划】基于matlab Astar算法三维航迹规划【含Matlab源码 446期】
【TSP】基于matlab 禁忌搜索算法求解TSP问题【含Matlab源码 447期】
【路径规划】动态多群粒子群算法局部搜索【含Matlab源码 448期】
【路径规划】基于动态规划法二维、三维空间最短路径规划【含Matlab源码 487期】
【路径规划】基于matlab改进的粒子群算法路径规划【含Matlab源码 491期】
【路径规划】A算法机器人路径规划【含Matlab源码 495期】
【路径规划】基于A星算法移动机器人避障自动寻路【含Matlab源码 496期】
【路径规划】基于matlab EKF的机器人SLAM演示【含Matlab源码 509期】
【路径规划】基于matlab改进的遗传算法栅格地图求解最短路径【含Matlab源码 525期】

猜你喜欢

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