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解TSP问题

Excel表exp12_3_1.xls中数据为: clc clear all [xdata,textdata]=xlsread('exp12_3_1.xls'); %加载20个城市的数据,数据按照表格 ...

蚁群算法matlab实现

大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下用matlab实现蚁群算法:   %蚂蚁算法test   %用产生的一个圆上的十个点来检验蚂蚁 ...

蚁群算法 matlab程序(已执行)

下面是解放军信息project大学一个老师编的matlab程序,请尊重原作者劳动,引用时请注明出处. 我经过改动添加了凝视,已经执行过,无误, function [R_best,L_best,L_av ...

蚁群算法和简要matlab来源

1 蚁群算法原理 从1991由意大利学者 M. Dorigo,V. Maniezzo 和 A. Colorni 通过模拟蚁群觅食行为提出了一种基于群体的模拟进化算法--蚁群优化.极大关注,蚁群算法的特 ...

蚁群算法求解旅行商问题(附c和matlab源代码)

前几天写了个模拟退火算法的程序,然后又陆陆续续看了很多群智能算法,发现很多旅行商问题都采用蚁群算法来求解,于是开始写蚁群算法的模板.网上关于蚁群算法的理论很多就不再这里赘述了,下面直接上代码和进行简单 ...

&lbrack;matlab&rsqb; 8&period;蚁群算法解决TSP问题

城市坐标数据下载  密码:07d5 求遍历这52座城市后最后回到最初城市的最短距离 %% 第9章 蚁群算法及MATLAB实现——TSP问题 % 程序9-1 %% 数据准备 % 清空环境变量 clear ...

ACS蚁群算法求解对称TSP旅行商问题的JavaScript实现

本来以为在了解蚁群算法的基础上实现这道奇怪的算法题并不难,结果实际上大相径庭啊.做了近三天时间,才改成现在这能勉强拿的出手的模样.由于公式都是图片,暂且以截图代替那部分内容吧,mark一记. 1 蚁群 ...

蚁群算法(Java)tsp问题

1.理论概述 1.1.TSP问题 旅行商问题,即TSP问题(旅行推销员问题.货郎担问题),是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只 ...

蚁群算法求解TSP问题

一.蚁群算法简介 蚁群算法是对自然界蚂蚁的寻径方式进行模似而得出的一种仿生算法:蚂蚁在运动过程中,能够在它所经过的路径上留下信息素(pheromone)的物质进行信息传递,而且蚂蚁在运动过程中能够感知 ...

随机推荐

树分治 poj 1741

n k n个节点的一棵树 k是距离 求树上有几对点距离<=k; #include #include #include

jquery mobile 图片自适应问题

解决办法: 加入一段css

cxf2&period;7&period;10与Spring3&period;0&period;5集成时报错如下

严重: Error listenerStart 2014-3-29 22:25:20 org.apache.catalina.core.StandardContext start 严重: Contex ...

SDUT OJ 2783 小P寻宝记

#include #include #define N 10020 using namespace std; int dp[N],pi[ ...

windows下apache服务器开启压缩和网页缓存

找到配置文件:http.conf apache开启压缩 一.开启配置,去除下面代码前面的#号LoadModule deflate_module modules/mod_deflate.soLoadMo ...

ubuntu系统AndroidStudio修改内存大小

位于android-studio/bin目录下的studio64.vmoptions和studio.vmoptions文件. 把Xms,Xmx,-XX:MaxPermSize,-XX:Reserved ...

Mongodb复杂查询,总结

内嵌文档复杂查询 数据结构 { "_id":"1412243", "info":{ "data":[ { "b ...

在windows如何操控一些屌炸天的linux命令&lbrack;利刃篇&rsqb;

作为开发者,也许你会说,不会linux简直弱爆了.是的,但是,倒底有多少人是真正在用linux进行开发工作呢,也许是我孤陋寡闻,但我相信,windows操作很多东西是真方便,不愿意使用linux直接开 ...

关于精英蚁群算法matlab,蚁群算法MATLAB解VRP问题相关推荐

  1. 【配送路径规划】基于matlab蚁群算法求解配送路径最短问题【含Matlab源码 2222期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  2. 【配送路径规划】基于matlab蚁群优化节约算法单中心多城市配送车辆路径规划【含Matlab源码 017期】

    一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简述 ...

  3. 【ACO TSP】基于matlab GUI蚁群算法求解旅行商问题【含Matlab源码 1032期】

    ⛄一.TSP简介 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...

  4. 【优化求解】基于matlab蚁群算法配电网故障定位【含Matlab源码 165期】

    ⛄一.蚁群算法简介 1 引言 在自然界中各种生物群体显现出来的智能近几十年来得到了学者们的广泛关注,学者们通过对简单生物体的群体行为进行模拟,进而提出了群智能算法.其中, 模拟蚁群觅食过程的蚁群优化算 ...

  5. 【路径规划】基于matlab蚁群算法机器人大规模栅格地图最短路径规划【含Matlab源码 1860期】

    ⛄一.蚁群算法及栅格地图简介 随着机器人技术在诸多领域的应用, 如机器人协作焊接.灾后搜救.军事.太空探索.深海勘探.家用和服务行业等, 机器人的发展正向智能化方向延伸, 要求其具有自组织.自学习.自 ...

  6. 【路径规划】基于matlab蚁群算法栅格地图路径规划及避障【含Matlab源码 2088期】

    一.蚁群算法及栅格地图简介 随着机器人技术在诸多领域的应用, 如机器人协作焊接.灾后搜救.军事.太空探索.深海勘探.家用和服务行业等, 机器人的发展正向智能化方向延伸, 要求其具有自组织.自学习.自适 ...

  7. MATLAB蚁群算法、遗传算法、粒子群算法解决TSP问题(可以直接运行)

    MATLAB蚁群算法.遗传算法.粒子群算法解决TSP问题(可以直接运行) 1. 生成数据文件citys_data.mat 2. 蚁群算法 流程图 代码 结果展示 3.遗传算法 流程图 代码 结果展示 ...

  8. 【TWVRP】基于matlab蚁群算法求解带时间窗车辆路径规划问题【含Matlab源码 1930期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  9. 【ACO三维路径规划】基于matlab蚁群算法无人机三维路径规划【含Matlab源码 1278期】

    一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下 ...

最新文章

  1. No identifier specified for entity
  2. 用redis+jwt保存在线用户和获得在线用户列表、踢出用户示例
  3. java 会话共享_java – servlet如何工作?实例化,会话,共享变量和多线程
  4. matlab求最短路径代码_【高等数学】复数,通往真理的最短路径
  5. [html] websocket握手成功会返回一个干什么状态吗?是200吗
  6. 【转】ABP源码分析二十八:ABP.MemoryDB
  7. 用python画三维图、某区域的高程,python - 在PyQt中绘制具有高程和降低效果的3D矩形/多边形 - SO中文参考 - www.soinside.com...
  8. 互联网晚报 | 8月21日 星期六 | 中国电信正式在A股上市;呷哺呷哺将关闭200家亏损门店;个人信息保护法表决通过...
  9. matlab中-psi_建议收藏 | 生物信息学中的可变剪切,这些内容你了解吗?
  10. lucene学习之helloworld(简单实例)
  11. 软件工程导论 05章总体设计
  12. linux操作系统原理【3】
  13. Pcshare远控源码偏重分析(一)
  14. viewpage切换动画
  15. 网易公开课——可汗学院公开课:现代密码学(1)
  16. 【本科课程学习】数据库考试复习题(带答案)
  17. Altium Designer15入门
  18. MySQL 删除数据后自增长主键id依旧占用问题
  19. Windows 2003 工作手册
  20. 加密算法学习(一、中、1)——传统加密算法(playfair密码)

热门文章

  1. vue项目中页面响应式布局设计方案
  2. linux-3-指令入门
  3. html触发条件,如何触发css3动画
  4. dispose 模式 java_C#使用Dispose模式实现手动对资源的释放
  5. mysql忘记密码处理方法
  6. DEVC++ 演奏久石让的《summer》
  7. html图片自动向左滚动代码,图片无缝滚动代码(向左/向下/向上)
  8. AJAX实现图灵机器人聊天
  9. Vue获取元素的方法,不需要通过document.getElementById()
  10. 强连通分量算法学习笔记