资源简介
一个用蚁群算法做OCVRP的代码。不是很复杂,但通用性还可以,里面有实验用的数据。
代码片段和文件信息
function []=CVRP()
clear all
close all
clc
%初始化蚁群
load data.txt
global n; %点数目
global m; %蚂蚁数目
global Weight_max; %最大载重
global Length_max; %最大距离
global Weight_all; %各点的载重
global Point_all; %所有点,包括起始点
global phe_all; %每两个点之间的信息素
global Weight_sum; %货车当前载重
global alpha
global beta
global rho
global Q
Nc_max=2000;
alpha=1;
beta=8;
rho=0.9;
Q=100;
n=data(11)+1;%目标点个数
m=n;%蚂蚁的数量等于点的数量
Weight_max=data(12);%最大载重
Length_max=data(13);%最大路程
Weight_all=data(2:n+13);%所有点的载重
Point_all=data(2:n+11:2);%起始点加上目标点
[Pop_initeta_all]=PopinitCom(Point_all);%输出Pop_init为各个点之间的距离
phe_all=ones(nn);%初始化信息素矩阵都为1
Ant_no=0; %蚂蚁正在的点的编号
Ant_visited_num=0;%蚂蚁已经访问过的点的数目
Ant_path=zeros(1n);%蚂蚁走过的路径
Ant_remained=zeros(1n);%蚂蚁还未走的路径
Best_length=inf; %初始值设最短长度为很大
%Time_start=datenum(clock);
Flag=0;%判断搜索是否有更优的解0为没有,1为有
for i=1:Nc_max
fprintf(‘开始第%d次搜索,剩余%d次‘iNc_max-i);
Flag=0;%初始设没有
for j=1:m
%****************************************************
Ant_length=0;%蚂蚁走过的长度清0
Ant_path=Ant_path*0;%蚂蚁走过的路径清0
Ant_remained=Ant_remained+1;%所有点设为可去
Ant_path(1)=1;%第一个点设为1,也就设为起始点
Ant_no=1;%蚂蚁现在所在的点为1
Ant_visited_num=1;%蚂蚁已经去过的点的数目为1
Ant_remained(1)=0;%第一个点设为去过
% rand(‘state‘ sum(100*clock));
%*******************************************************
while (Ant_visited_num To_visit=-1;%将下一个即将要去的点设为-1
%******************************************************
%概率的确定是最基本的信息素乘以启发值
Pro_sum=0;
phe_all_sum=0;
eta_all_sum=0;
for jj=1:n
if(Ant_remained(jj)==1)
phe_all_sum=phe_all_sum+phe_all(Ant_nojj);
eta_all_sum=eta_all_sum+eta_all(Ant_nojj);
end
end
for ii=1:n
if(Ant_remained(ii)==1)%点未访问过
Probability(ii)=(phe_all(Ant_noii))^alpha*(eta_all(Ant_noii))^beta;
Pro_sum=Pro_sum+Probability(ii);
else
Probability(ii)=0;%如果点去过该点的概率设为0
end
end
%******************************************************
%这里使用轮盘赌的方法
Temp=0;
if Pro_sum>0
Temp=rand*Pro_sum;
for jj=1:n
if Ant_remained(jj)==1
Temp=Temp-Probability(jj);
if Temp<0
To_visit=jj;
break;
end
end
end
end
if To_visit==-1
for k=1:n
if Ant_remained(k)==1 %该点没访问过
To_visit=k;
break;
end
end
end
Ant_visited_num=Ant_visited_num+1;%已经访问过的点的数目+1
Ant_path(Ant_visited_num)=To_visit;%保存蚂蚁走的路径
Ant_remained(To_visit)=0;%该点访问过
Ant_no=To_visit;
end
%******************************************************
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6586 2012-12-19 13:02 CVRP\CVRP.asv
文件 7155 2013-01-04 22:40 CVRP\CVRP.m
文件 507 2012-12-15 08:49 CVRP\data.txt
文件 492 2012-12-18 14:49 CVRP\PopinitCom.m
文件 300 2012-12-19 22:31 CVRP\数据实验\16(1).txt
文件 27805 2012-12-19 22:30 CVRP\数据实验\16(1).jpg
文件 13854 2012-12-21 20:14 CVRP\新建 Microsoft Office Excel 工作表.xlsx
文件 12364 2012-12-21 19:36 CVRP\新建 Microsoft Office Word 文档 (2).docx
文件 6865 2012-12-19 16:26 CVRP\最基本版本,收敛过早\CVRP.m
文件 492 2012-12-18 14:49 CVRP\最基本版本,收敛过早\PopinitCom.m
目录 0 2012-12-19 22:31 CVRP\数据实验
目录 0 2012-12-19 16:43 CVRP\最基本版本,收敛过早
目录 0 2012-12-21 20:29 CVRP
----------- --------- ---------- ----- ----
76420 13
相关资源
- Pattern Recognition and Machine Learning(高清
- MATLAB 编程 第二版 Stephen J. Chapman 著
- 均值滤波和FFT频谱分析Matlab代码
- 《MATLAB扩展编程》代码
- HDB3码、AMI码的MATLAB实现
- 3点GPS定位MATLAB仿真
- MATLAB数字信号处理85个实用案例精讲入
- matlab从入门到精通pdf94795
- 欧拉放大论文及matlab代码
- 跳一跳辅助_matlab版本
- 全面详解LTE MATLAB建模、仿真与实现
- MIMO-OFDM无线通信技术及MATLAB实现_孙锴
- MATLAB Programming for Engineers 4th - Chapman
- matlab 各种谱分析对比
- 分数阶chen混沌matlab程序
- 蚁群算法论文+源代码
- 基于粒子群算法的非合作博弈的matl
- MATLAB车流仿真 包括跟驰、延误
- matlab空间桁架计算程序
- 基于MATLAB的图像特征点匹配和筛选
- DMA-TVP-FAVAR
- GPS信号的码捕获matlab代码.7z
- 一维光子晶体MATLAB仿真代码吸收率折
- newmark法源程序
- 传统关联成像、计算鬼成像matlab
- pri传统分选算法
- 摆动滚子推杆盘形凸轮设计
- 医学图像重建作业matlab源码
- Matlab实现混沌系统的控制
- 检测疲劳驾驶
评论
共有 条评论