Excel  exp12_3_2.xls内容:

ANT_VRP函数:

function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ANT_VRP(D,Demand,Cap,iter_max,m,Alpha,Beta,Rho,Q)

%% R_best 各代最佳路线

%% L_best 各代最佳路线的长度

%% L_ave 各代平均距离

%% Shortest_Route 最短路径

%% Shortest_Length 最短路径长度

%% D 城市间之间的距离矩阵,为对称矩阵

%% Demand 客户需求量

%% Cap 车辆最大载重

%% iter_max 最大迭代次数

%% m 蚂蚁个数

%% Alpha 表征信息素重要程度的参数

%% Beta 表征启发式因子重要程度的参数

%% Rho 信息素蒸发系数

%% Q 信息素增加强度系数

n=size(D,1);

T=zeros(m,2*n); %装载距离

Eta=ones(m,2*n); %启发因子

Tau=ones(n,n); %信息素

Tabu=zeros(m,n); %禁忌表

Route=zeros(m,2*n); %路径

L=zeros(m,1); %总路程

L_best=zeros(iter_max,1); %各代最佳路线长度

R_best=zeros(iter_max,2*n); %各代最佳路线

nC=1;

while nC<=iter_max %停止条件

Eta=zeros(m,2*n);

T=zeros(m,2*n);

Tabu=zeros(m,n);

Route=zeros(m,2*n);

L=zeros(m,1);

%%%%%%==============初始化起点城市(禁忌表)====================

for i=1:m

Cap_1=Cap; %最大装载量

j=1;

j_r=1;

while Tabu(i,n)==0

T=zeros(m,2*n); %装载量加载矩阵

Tabu(i,1)=1; %禁忌表起点位置为1

Route(i,1)=1; %路径起点位置为1

visited=find(Tabu(i,:)>0); %已访问城市

num_v=length(visited); %已访问城市个数

J=zeros(1,(n-num_v)); %待访问城市加载表

P=J; %待访问城市选择概率分布

Jc=1; %待访问城市选择指针

for k=1:n %城市

if length(find(Tabu(i,:)==k))==0 %如果k不是已访问城市代号,就将k加入矩阵J中

J(Jc)=k;

Jc=Jc+1;

end

end

%%%%%%%=============每只蚂蚁按照选择概率遍历所有城市==================

for k=1:n-num_v %待访问城市

if Cap_1-Demand(J(1,k),1)>=0 %如果车辆装载量大于待访问城市需求量

if Route(i,j_r)==1 %如果每只蚂蚁在起点城市

T(i,k)=D(1,J(1,k));

P(k)=(Tau(1,J(1,k))^Alpha)*((1/T(i,k))^Beta); %概率计算公式中的分子

else %如果每只蚂蚁在不在起点城市

T(i,k)=D(Tabu(i,j),J(1,k));

P(k)=(Tau(Tabu(i,visited(end)),J(1,k))^Alpha)*((1/T(i,k))^Beta); %概率计算公式中的分子

end

else %如果车辆装载量小于待访问城市需求量

T(i,k)=0;

P(k)=0;

end

end

if length(find(T(i,:)>0))==0 %%%当车辆装载量小于待访问城市时,选择起点为1

Cap_1=Cap;

j_r=j_r+1;

Route(i,j_r)=1;

L(i)=L(i)+D(1,Tabu(i,visited(end)));

else

P=P/(sum(P)); %按照概率原则选取下一个城市

Pcum=cumsum(P); %求累积概率和:cumsum([1 2 3])=1 3 6,目的在于使得Pcum的值总有大于rand的数

Select=find(Pcum>rand); %按概率选取下一个城市:当累积概率和大于给定的随机数,则选择求和被加上的最后一个城市作为即将访问的城市

o_visit=J(1,Select(1)); %待访问城市

j=j+1;

j_r=j_r+1;

Tabu(i,j)=o_visit; %待访问城市

Route(i,j_r)=o_visit;

Cap_1=Cap_1-Demand(o_visit,1); %车辆装载剩余量

L(i)=L(i)+T(i,Select(1)); %路径长度

end

end

L(i)=L(i)+D(Tabu(i,n),1); %%路径长度

end

L_best(nC)=min(L); %最优路径为距离最短的路径

pos=find(L==min(L)); %找出最优路径对应的位置:即为哪只蚂蚁

R_best(nC,:)=Route(pos(1),:); %确定最优路径对应的城市顺序

L_ave(nC)=mean(L)‘; %求第k次迭代的平均距离

Delta_Tau=zeros(n,n); %Delta_Tau(i,j)表示所有蚂蚁留在第i个城市到第j个城市路径上的信息素增量

L_zan=L_best(1:nC,1);

post=find(L_zan==min(L_zan));

Cities=find(R_best(nC,:)>0);

num_R=length(Cities);

for k=1:num_R-1 %建立了完整路径后在释放信息素

Delta_Tau(R_best(nC,k),R_best(nC,k+1))=Delta_Tau(R_best(nC,k),R_best(nC,k+1))+Q/L_best(nC);

end

Delta_Tau(R_best(nC,num_R),1)=Delta_Tau(R_best(nC,num_R),1)+Q/L_best(nC);

Tau=Rho*Tau+Delta_Tau;

nC=nC+1;

end

Shortest_Route=zeros(1,2*n); %提取最短路径

Shortest_Route(1,:)=R_best(iter_max,:);

Shortest_Route=Shortest_Route(Shortest_Route>0);

Shortest_Route=[Shortest_Route Shortest_Route(1,1)];

Shortest_Length=min(L_best); %提取最短路径长度

%L_ave=mean(L_best);

求解程序:

clc;clear all

%% ==============提取数据==============

[xdata,textdata]=xlsread(‘exp12_3_2.xls‘); %加载20个城市的数据,数据按照表格中位置保存在Excel文件exp12_3_1.xls中

x_label=xdata(:,2); %第二列为横坐标

y_label=xdata(:,3); %第三列为纵坐标

Demand=xdata(:,4); %第四列为需求量

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; %计算两城市之间的距离

else

D(i,j)=0; %i=j, 则距离为0;

end

D(j,i)=D(i,j); %距离矩阵为对称矩阵

end

end

Alpha=1;Beta=5;Rho=0.75;iter_max=100;Q=10;Cap=1;m=20; %Cap为车辆最大载重

[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ANT_VRP(D,Demand,Cap,iter_max,m,Alpha,Beta,Rho,Q); %蚁群算法求解VRP问题通用函数,详见配套光盘

Shortest_Route_1=Shortest_Route-1 %提取最优路线

Shortest_Length %提取最短路径长度

%% ==============作图==============

figure(1) %作迭代收敛曲线图

x=linspace(0,iter_max,iter_max);

y=L_best(:,1);

plot(x,y);

xlabel(‘迭代次数‘); ylabel(‘最短路径长度‘);

figure(2) %作最短路径图

plot([C(Shortest_Route,1)],[C(Shortest_Route,2)],‘o-‘);

grid on

for i =1:size(C,1)

text(C(i,1),C(i,2),[‘ ‘ num2str(i-1)]);

end

xlabel(‘客户所在横坐标‘); ylabel(‘客户所在纵坐标‘);

原文:https://www.cnblogs.com/zxhyxiao/p/9413325.html

matlab蚁群算法解决vrp过程,蚁群算法MATLAB解VRP问题相关推荐

  1. 【选址问题】二进制灰狼算法解决无容量选址问题【Matlab】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.无容量设施选址问题 1.问题描述 2.数学模型 二.二进制灰狼算法 1.引言 2.算法改进 3.数学模型 4.算法流程 ...

  2. 阿里云注册集群+Prometheus 解决多云容器集群运维痛点

    作者:左知 容器集群可观测现状 随着 Kubernetes(K8s)容器编排工具已经成为事实上行业通用技术底座,容器集群监控经历多种方案实践后,Prometheus 最终成为容器集群监控的事实标准. ...

  3. 用Floyd算法解决选址问题(附完整matlab代码)

    以2021年五一建模比赛中的消防站选址为例,此问题为重心性加权最优选址问题.可考虑各区域的出警次数和人口密度,并对其进行加权分析处理. 首先用Floyd算法求出距离矩阵,在考虑出警次数和人口密度的前提 ...

  4. 【经济调度】基于蚁狮算法解决经济调度优化问题附matlab代码

    1 简介 2 部分代码 %_________________________________________________________________________%​clc;clear;cl ...

  5. 总是封群怎么解决_我的群被封了怎么办

    2006-08-18 我的号被封了我的号不知道怎么的就被封了 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz ...

  6. 利用匈牙利算法Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES...

    首先介绍一下题意:已知,有N个学生和P门课程,每个学生可以选0门,1门或者多门课程,要求在N个学生中选出P个学生使得这P个学生与P门课程一一对应. 这个问题既可以利用最大流算法解决也可以用匈牙利算法解 ...

  7. Python实现A*算法解决N数码问题

    Python实现A*算法解决N数码问题 A*算法的描述 A*算法的步骤 问题描述 代码以及测试结果 算法优势 算法存在一些不足 A*算法的描述 A*算法是BFS的一个变种,它把原来的BFS算法的无启发 ...

  8. 神经网络算法的基本原理,神经网络是机器算法吗

    神经网络算法可以解决的问题有哪些 人工神经网络(ArtificialNeuralNetworks,ANN)系统是20世纪40年代后出现的. 它是由众多的神经元可调的连接权值连接而成,具有大规模并行处理 ...

  9. 人工蜂群算法python_教程 | 用人工蜂群算法求解k-分区聚类问题

    原标题:教程 | 用人工蜂群算法求解k-分区聚类问题 选自towarddatascience 作者:Pedro Buarque 参与:Pedro.刘晓坤 群体智能算法是一类受生物群体智能行为的启发而发 ...

  10. 算法学习笔记22:贪心算法

    目录 贪心算法:如何用贪心算法实现Huffman压缩编码 如何理解"贪心算法" 贪心算法实战分析 1.分糖果 2. 钱币找零 3. 区间覆盖 解答开篇 内容小结 贪心算法:如何用贪 ...

最新文章

  1. UVA10780:Again Prime? No Time(数论)
  2. mysql查询每个机构下的账号总数_MySQL高可用方案:实践篇
  3. python中subprocess_Python中subprocess学习
  4. 记录java应用部署到k8s中
  5. c语言绝对循环,c语言之循环
  6. 为什么有人说开车时,最能看出一个人的情商和潜力?
  7. 卡巴斯基KEY官方生成器
  8. 性能调优分析之:Oracle SQL执行计划报告生成器
  9. windows电脑上一些软件如画图/记事本变成了英文
  10. ARcore 相关学习
  11. 【功能测试】part1
  12. ps文字工具学习笔记
  13. 如何用VBA实现格式刷的功能?
  14. 在嵌入式开发中如何提高自己的代码水平
  15. Reflex仓库管理系统(WMS)简介
  16. vmware:end kernel panic not syncing
  17. 回归(Regression)是什么意思
  18. 新海诚动漫《天气之子》1080P 4K下载
  19. 数据的家——MySQL的数据目录
  20. JavaWeb项目在Tomcat中的部署

热门文章

  1. 新乡学院计算机主任教研室,新乡学院关于开展教研室之间互评互学活动方案
  2. PHP excel 直接输出导出
  3. SLAM AR 技术与应用
  4. 东软云HIS医疗管理系统——技术栈【SpringBoot+Vue+MySQL+MyBatis】
  5. SuperMap iServer产品版本以及模块介绍
  6. 支付宝个人支付接口(蚂蚁金服官方接口)
  7. 《面向对象分析与设计》一3.7 例题
  8. Excel中right函数用法实例
  9. 今日头条视频采集方法
  10. Invalid argument: Subshape must have computed start >= end since stride is negative, but is 0 and 2