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

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

作者:互联网

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

系列前言(一定要看)

1.1 本章内容说明

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

本章是对路径规划-从数据设计到毕业论文系列系列文章第二章
的一个补充说明,扩散具有的程序的具体设计过程。补充算法
的流程图,完善了结果的展示过程。对算例使用的数据进行呈现
,并描述使用的数据特点。

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