ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

多目标蚁群算法路径规划(2.5)-----从数据设计到毕业论文系列--番外篇

2021-05-30 12:01:00  阅读:250  来源: 互联网

标签:end 蚁群 -- route 路径 best 番外篇 Route Shortest


多目标蚁群算法路径规划(2.5)------番外篇

系列前言(一定要看)

  • 本系列为总结本人近一年多关于启发式算法解决路径规划的相关内容。主要从以下几个主题内容进行系列写作1.常见的数据获取方式与处理过程、2、算法的基础流程3.常见算法改进4.多目标排序5.基于应用场景的改进6.其他相关问题7、批量运行测试数据本系列全程免费提供相关代码。
  • 本系列代码来源主要参考网上相关博客与文献、根据不同实际需求重构的代码。
  • 本文所有提供的代码与文字说明仅供参考,不作为商业目的。
  • 对内容有疑问或是错误部分可以留言或私信。
  • 有偿定制特定功能, qq:1602480875。价格范围60—500。(建议优先看完系列内容,尝试系列中的代码,这些都是免费且能解决大部分问题。),具体代码后续会以完整形式上传百度云。
    更新时间:2021年5月21日

1.1 本章内容说明

  • 包含时间、成本、载货需求变动的路径规划
  • 算法设计的流程
  • 路径规划主函数
  • 路径规划的结果图

1.2 本章主要分享内容简介(摘要)

本章是对路径规划-从数据设计到毕业论文系列系列文章第二章
的一个补充说明,扩散具有的程序的具体设计过程。补充算法
的流程图,完善了结果的展示过程。对算例使用的数据进行呈现
,并描述使用的数据特点。
  • 本章代码会于6.20号后补充完整
  • 详细讲解会在后续更新过程不断完善。

1.3 算法思路详细流程图

在这里插入图片描述

1.4 主函数

%% 输入数据
%% 1602480875@qq.com
%% 版本0.1
clc
clear 
close all
S2= xlsread('编队数据.xlsx','Sheet3');
Un = xlsread('编队数据.xlsx','补给时间与价值','A1:C10'); % 可提供的服务时间 消耗时间 消耗的物质的量
microsoftexcel = xlsread('编队数据.xlsx','舰船坐标','A1:B9');
qidian_where=[0 0]; %补给船起始坐标
S3=[microsoftexcel;qidian_where];
%% 清除临时变量
clearvars raw;
%% 数据整理
xdata=S3;
x_label=xdata(1:end,1);
y_label=xdata(1:end,2);
Demand=Un;  %补给时间与价值矩阵
C=[x_label y_label];      %坐标矩阵
n=size(C,1);        %n表示节点(作战舰船)个数
% ==============计算距离矩阵==============
D=zeros(n,n);       %D表示完全图的赋权邻接矩阵,即距离矩阵D初始化
for i=1:n
    for j=1:n
        if i~=j
            D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5; %计算两舰船之间的距离
            if D(i,j)==0
                D(i,j)=eps; %对不可直接到达的地方一个赋予一个极小值
            end
        else
            D(i,j)=eps;   %i=j, 则距离为0;赋予一个极小值
        end
        D(j,i)=D(i,j);  %距离矩阵为对称矩阵
    end
end

v=37; % 30km/h 速度约束矩阵
Alpha=1;% 
Beta=5; %
Rho=0.75; % 信息挥发程度 
iter_max=100; %迭代次数
Q=10;   %
Cap=S2; %最大补给时间限制矩阵
m=size(D,1);  %起始放置数目
qidian=m;  % qidian起点坐标
[R_best,L_best,L_ave,Shortest_Route,~,L_ave_long]=ANT_VRP(D,Demand,Cap,iter_max,m,Alpha,Beta,Rho,Q,qidian,v); %蚁群算法求解VRP问题有约束函数
Shortest_Route_1=Shortest_Route;    %提取最优路线
cc=find(Shortest_Route_1==qidian);
xx_1=[];
best_route_2=[];
for i=1:length(cc)-1
    if i~=length(cc);
        cs_1=length(Shortest_Route_1(cc(i):cc(i+1)));
        xx_1(i,1:cs_1)=Shortest_Route_1(cc(i):cc(i+1)); %路线
    else
    end
    best_route_1=0;
    for j=1:length(xx_1(i,1:cs_1))-1 %计算每条路径的距离/成本
        best_route_1=D(xx_1(i,j),xx_1(i,j+1))+best_route_1;
    end
    best_route_vaule=0;
    for j=1:length(xx_1(i,1:cs_1))-1 %计算每条路径的距离/成本
        best_route_vaule=Demand(xx_1(i,j),2)+best_route_vaule;
    end
    best_route_2(i,1)= best_route_1; %每条路径的长度
    best_route_2(i,2)= best_route_vaule; %每条路径的长度
end
[~,n]=max(best_route_2(:,2));
Shortest_Length=best_route_2(n,2);                      %提取最短路径长度
%% ==============作图==============

figure(1)%作迭代收敛曲线图
x=linspace(0,iter_max,iter_max);
y=L_best(:,1);
plot(x,y);
xlabel('迭代次数'); ylabel('最大补给价值');
title('最大补给价值迭代图')
figure(2)   %作最短路径图
[~,m]=max(best_route_2(:,2));
Shortest_Route=xx_1(m,:);
plot(C(:,1),C(:,2),'*');
hold on
plot(C(Shortest_Route,1),C(Shortest_Route,2),'*-');
axis ( [-60 60 -20 100] ); %坐标绘制范围
grid on

%% 设置导入选项并导入数据
S1={'航空母舰','驱逐舰1','驱逐舰2','护卫舰1','护卫舰2','护卫舰3','护卫舰4','驱逐舰3','驱逐舰4','补给船'};
for i =1:size(C,1)
%     text(C(i,1),C(i,2),['   ' num2str(i)]);
text(C(i,1),C(i,2),['   ' S1(i)]);
end
xlabel('编队舰船横坐标'); ylabel('编队舰船纵坐标');
title('最大价值路径图')
figure(3)%作迭代收敛曲线图
axis ( [-60,60,-20,100] );
x=linspace(0,iter_max,iter_max);
y=L_ave_long;
plot(x,y);
xlabel('迭代次数'); ylabel('每代最优路径');
title('补给路程迭代图')
xlswrite('相关参数与结果.xlsx',[xx_1,best_route_2],'路径结果','A2')
clc

beak_length=D(Shortest_Route(end-1),Shortest_Route(end));
all_time=sum(Demand(Shortest_Route))+best_route_2(n,1)/v+beak_length/v;

disp(strcat('迭代次数:',num2str(iter_max)))
disp(strcat('最大补给价值为:',num2str(Shortest_Length)))
disp(strcat('最大补给价值路径长度为:',num2str(best_route_2(n,1))))
disp(strcat('返程路径长度:',num2str(beak_length)))
disp(strcat('返程路径消耗时间:',num2str(beak_length/v),'小时'))
disp(strcat('约束时间:',num2str(S2(1)),'小时'))
disp(strcat('剩余时间:',num2str(S2(1)-all_time),'小时'))
disp(strcat('剩余时间可服务距离:',num2str(v*(S2(1,1)-all_time)),'km'))
disp(strcat('总共消耗时间:',num2str(all_time),'小时'))
disp(strcat('运输货物量:',num2str(sum(Demand(Shortest_Route,3))),'单位'))
disp(strcat('运输货物剩余量:',num2str(S2(1,3)-sum(Demand(Shortest_Route,3))),'单位'))

1.4 运算的示例数据

  • 路径数据数据
    在这里插入图片描述
  • 车辆约束数据
    在这里插入图片描述
  • 路径坐标信息
    在这里插入图片描述

标签:end,蚁群,--,route,路径,best,番外篇,Route,Shortest
来源: https://blog.csdn.net/qq_33980829/article/details/117395842

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有