蚁群算法matlab vrp问题车辆限重,蚁群算法MATLAB解VRP问题
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('客户所在纵坐标');
蚁群算法matlab vrp问题车辆限重,蚁群算法MATLAB解VRP问题相关推荐
- matlab如何造带限高斯白噪声,如何用Matlab产生高斯白噪?
MATLAB中产生高斯白噪声的两个函数 MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN.WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声. ...
- 【VRP】基于matlab模拟退火算法求解单中心多车辆路径规划问题【含Matlab源码 1072期】
⛄一.模拟退火算法简介 1 模拟退火算法的原理 模拟退火算法(SA)是一种适用于大规模组合优化问题的有效近似算法,来源于对固体退火过程的模拟.统计力学表明,在给定初始温度的条件下,通过将温度缓慢降低, ...
- 【路径规划】基于matlab模拟退火算法结合LNS求解车辆路径规划问题【含Matlab源码 2333期】
⛄一.模拟退火算法简介 1 模拟退火算法的原理 模拟退火算法(SA)是一种适用于大规模组合优化问题的有效近似算法,来源于对固体退火过程的模拟.统计力学表明,在给定初始温度的条件下,通过将温度缓慢降低, ...
- 【TWVRP】基于matlab蚁群算法求解带时间窗车辆路径规划问题【含Matlab源码 1930期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【TWVRP】蚁群算法求解带时间窗的车辆路径规划问题【含Matlab源码 1406期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【TWVRP】蚁群算法求解带时间窗车辆路径规划问题【含Matlab源码 1930期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【TWVRP】粒子群算法求解带时间窗的车辆路径规划问题【含Matlab源码 334期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【VRP】节约里程算法求解车辆路径规划问题【含Matlab源码 1166期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【TWVRP】基于matlab模拟退火算法结合狼群算法求解带时间窗的车辆路径规划问题【含Matlab源码 1075期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
最新文章
- 企业级自动化运维方案设计及Saltstack、Ansible等5种工具比较分析--云平台技术栈08...
- 利用服务器修改服务器数据,用Jquery实现可编辑表格并用AJAX提交到服务器修改数据...
- IIS 7.0的ASP.NET应用程序生命周期概述
- 什么是缓存一致性问题?如何解决呢?
- 【若依(ruoyi)】启动时,卡死在:Using existing EHCache named [loginRecordCache]
- Java并发包常见异常_Java并发包1--线程的状态及常用方法
- Java基础——synchronized
- python-函数的返回值
- 6章:常用工具类以及函数
- 创新课程管理系统——测试心得
- 3dmm计算特征向量,c++读写txt和二进制记录
- nginx加强安全模块
- 中国最顶尖的黑客,连外国人都想拜他为师
- kubeadm创建k8s集群(1.14.2版本)
- 5本经典著作描绘学习路线图带你飞过C++
- 微信公众号支付问题 - 当前页面的URL未注册
- 电视android内置系统界面,系统界面:原生安卓 定制界面_汽车科技评测-中关村在线...
- M102: MongoDB for DBAs chapter 2 crud_and_administrative_commands学习记录
- Mysql入门教程--基础命令
- 常用汇率查询货币列表实时汇率查询换算小demo
热门文章
- 【快讯】呼伦贝尔市人民医院利用Oracle APEX快速开发预检分诊系统
- 医疗保健、零售、金融、制造业……一文带你看懂大数据对工业领域的影响!...
- 写给程序员的裁员防身指南
- mvn install java版本,maven的打包命令--assemblyinstall和maven update之后jdk版本变回1.5的问题...
- PageHelper使用说明
- SQL中where 1 = 1的用处
- 工作流Flowable实战篇
- Docker Redis部署_04
- 企业实战(Jenkins+GitLab+SonarQube)_12_Jenkins+soanr服务器搭建和代码检查
- ByteArrayOutputStream和ByteArrayInputStream的简单使用