蚁群算法采用matlab开发的仿真平台:算法实现,路径显示,人机交互控制等

希望对你有帮助!

是可以运行的

%    the procedure of ant colony algorithm for VRP

%

%    %    %    %    %    %    %    %    %    %    %

%initialize the parameters of ant colony algorithms

load data.txt;

d=data(:,2:3);

g=data(:,4);

m=31; %蚂蚁数

alpha=1;

belta=4;% 决定tao和miu重要性的参数

lmda=0;

rou=0.9; %衰减系数

q0=0.95;

% 概率

tao0=1/(31*841.04);%初始信息素

Q=1;% 蚂蚁循环一周所释放的信息素

defined_phrm=15.0;   % initial pheromone level value

QV=100;  % 车辆容量

vehicle_best=round(sum(g)/QV)+1; %所完成任务所需的最少车数

V=40;

% 计算两点的距离

for i=1:32;

for j=1:32;

dist(i,j)=sqrt((d(i,1)-d(j,1))^2+(d(i,2)-d(j,2))^2);

end;

end;

%给tao miu赋初值

for i=1:32;

for j=1:32;

if i~=j;

%s(i,j)=dist(i,1)+dist(1,j)-dist(i,j);

tao(i,j)=defined_phrm;

miu(i,j)=1/dist(i,j);

end;

end;

end;

for k=1:32;

for k=1:32;

deltao(i,j)=0;

end;

end;

best_cost=10000;

for n_gen=1:50;

print_head(n_gen);

for i=1:m;

%best_solution=[];

print_head2(i);

sumload=0;

cur_pos(i)=1;

rn=randperm(32);

n=1;

nn=1;

part_sol(nn)=1;

%cost(n_gen,i)=0.0;

n_sol=0;   % 由蚂蚁产生的路径数量

M_vehicle=500;

t=0;  %最佳路径数组的元素数为0

while sumload<=QV;

for k=1:length(rn);

if sumload+g(rn(k))<=QV;

gama(cur_pos(i),rn(k))=(sumload+g(rn(k)))/QV;

A(n)=rn(k);

n=n+1;

end;

end;

fid=fopen('out_customer.txt','a+');

fprintf(fid,'%s  %i\t','the current position is:',cur_pos(i));

fprintf(fid,'\n%s','the possible customer set is:')

fprintf(fid,'\t%i\n',A);

fprintf(fid,'------------------------------\n');

fclose(fid);

p=compute_prob(A,cur_pos(i),tao,miu,alpha,belta,gama,lmda,i);

maxp=1e-8;

na=length(A);

for j=1:na;

if p(j)>maxp

maxp=p(j);

index_max=j;

end;

end;

old_pos=cur_pos(i);

if rand(1)

cur_pos(i)=A(index_max);

else

krnd=randperm(na);

cur_pos(i)=A(krnd(1));

bbb=[old_pos cur_pos(i)];

ccc=[1 1];

if bbb==ccc;

cur_pos(i)=A(krnd(2));

end;

end;

tao(old_pos,cur_pos(i))=taolocalupdate(tao(old_pos,cur_pos(i)),rou,tao0);%对所经弧进行局部更新

sumload=sumload+g(cur_pos(i));

nn=nn+1;

part_sol(nn)=cur_pos(i);

temp_load=sumload;

if cur_pos(i)~=1;

rn=setdiff(rn,cur_pos(i));

n=1;

A=[];

end;

if cur_pos(i)==1;  % 如果当前点为车场,将当前路径中的已访问用户去掉后,开始产生新路径

if setdiff(part_sol,1)~=[];

n_sol=n_sol+1;  % 表示产生的路径数,n_sol=1,2,3,..5,6...,超过5条对其费用加上车辆的派遣费用

fid=fopen('out_solution.txt','a+');

fprintf(fid,'%s%i%s','NO.',n_sol,'条路径是:');

fprintf(fid,'%i  ',part_sol);

fprintf(fid,'\n');

fprintf(fid,'%s','当前的用户需求量是:');

fprintf(fid,'%i\n',temp_load);

fprintf(fid,'------------------------------\n');

fclose(fid);

% 对所得路径进行路径内3-opt优化

final_sol=exchange(part_sol);

for nt=1:length(final_sol); % 将所有产生的路径传给一个数组

temp(t+nt)=final_sol(nt);

end;

t=t+length(final_sol)-1;

sumload=0;

final_sol=setdiff(final_sol,1);

rn=setdiff(rn,final_sol);

part_sol=[];

final_sol=[];

nn=1;

part_sol(nn)=cur_pos(i);

A=[];

n=1;

end;

end;

if setdiff(rn,1)==[];% 产生最后一条终点不为1的路径

n_sol=n_sol+1;

nl=length(part_sol);

part_sol(nl+1)=1;%将路径的最后1位补1

% 对所得路径进行路径内3-opt优化

final_sol=exchange(part_sol);

for nt=1:length(final_sol); % 将所有产生的路径传给一个数组

temp(t+nt)=final_sol(nt);

end;

cost(n_gen,i)=cost_sol(temp,dist)+M_vehicle*(n_sol-vehicle_best);   %计算由蚂蚁i产生的路径总长度

for ki=1:length(temp)-1;

deltao(temp(ki),temp(ki+1))=deltao(temp(ki),temp(ki+1))+Q/cost(n_gen,i);

end;

if cost(n_gen,i)

best_cost=cost(n_gen,i);

old_cost=best_cost;

best_gen=n_gen;  % 产生最小费用的代数

best_ant=i; %产生最小费用的蚂蚁

best_solution=temp;

end;

if i==m;  %如果所有蚂蚁均完成一次循环,,则用最佳费用所对应的路径对弧进行整体更新

for ii=1:32;

for jj=1:32;

tao(ii,jj)=(1-rou)*tao(ii,jj);

end;

end;

for kk=1:length(best_solution)-1;

tao(best_solution(kk),best_solution(kk+1))=tao(best_solution(kk),best_solution(kk+1))+deltao(best_solution(kk),best_solution(kk+1));

end;

end;

fid=fopen('out_solution.txt','a+');

fprintf(fid,'%s%i%s','NO.',n_sol,'路径是:');

fprintf(fid,'%i ',part_sol);

fprintf(fid,'\n');

fprintf(fid,'%s %i\n','当前的用户需求量是:',temp_load);

fprintf(fid,'%s %f\n','总费用是:',cost(n_gen,i));

fprintf(fid,'------------------------------\n');

fprintf(fid,'%s\n','最终路径是:');

fprintf(fid,'%i-',temp);

fprintf(fid,'\n');

fclose(fid);

temp=[];

break;

end;

end;

end;

end;

matlab教程蚁群算法,蚁群算法怎样用MATLAB仿真相关推荐

  1. 【MATLAB教程案例4】直接序列扩频通信系统的MATLAB仿真

    FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...

  2. 3.蚁群算法求解格栅地图路径规划matlab代码

    往期: 1.Dijkstra算法求解格栅地图路径matlab代码_墨叔叔的博客-CSDN博客 2.A*搜索算法原理及matlab代码_墨叔叔的博客-CSDN博客 一.蚁群算法原理 原理:蚁群系统(An ...

  3. 蚁群算法小结及算法实例(附Matlab代码)

    目录 1.基本蚁群算法 2.基本蚁群算法的流程 3.关键参数说明 3.1 信息素启发式因子 α 3.2 期望启发因子 β 3.3 信息素蒸发系数 ρ 3.4 蚂蚁数目 m 3.5 信息素强度 Q 对算 ...

  4. 【飞行器】基于matlab蚁群算法飞行器巡检路径【含Matlab源码 268期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[飞行器]基于matlab蚁群算法飞行器巡检路径[含Matlab源码 268期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  5. 【路径规划】基于蚁群算法实现多式联运路径规划问题matlab源码

    2.蚁群算法基本原理 2.1 算法综述 对于VRP问题,求解算法大致可分为精确算法和人工智能算法两大类.精确性算法基于严格的数学手段,在可以求解的情况下,解的质量较好.但是由于算法严格,运算量大,特别 ...

  6. 改进蚁群算法 改进flod算法对路径进行双向平滑度优化,提高路径的平滑度

    改进蚁群算法 改进flod算法对路径进行双向平滑度优化,提高路径的平滑度 自己研究编写的Matlab路径规划算法 蚁群算法路径规划 自己研究算法对比 可自行设置起始点,目标点,自由更换地图. ID:6 ...

  7. 蚁群算法,PSO算法以及两种算法可以融合的几种方法

    蚁群算法(ACO)是受自然界中蚂蚁搜索食物行为的启发,是一种群智能优化算法.它基于对自然界真实蚁群的集体觅食行为的研究,模拟真实的蚁群协作过程.算法由若干个蚂蚁共同构造解路径,通过在解路径上遗留并交换 ...

  8. 【其他】结构技术优化算法--蚁群算法(ant colony optimization)

    目录 1 遗传基因算法 2 模拟退火算法 2.1爬山算法 2.2随机概率优化 3 群体智能算法 3.1蚁群算法 3.2粒子群算法 4总结 1 遗传基因算法 遗传算法(Genetic Algorithm ...

  9. 地图信息,障碍判断以及寻路算法(A星算法,B星算法和蚁群算法等)

    一.广度优先遍历和深度优先遍历 在学习寻路算法之前,我们先来了解一下广度优先遍历和深度优先遍历. 什么是广度优先遍历? 广度优先遍历(breadth first search)是一个万能的算法. 广度 ...

  10. 【MATLAB教程案例11】基于PSO粒子群优化算法的函数极值计算matlab仿真及其他应用

    FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...

最新文章

  1. java static 可见性_Java多线程 synchronized与可见性的关系以及可见性问题总结
  2. ios 状态栏 覆盖自定义View
  3. 17. Letter Combinations of a Phone Number
  4. Using jQuery to add a dynamic “Back To Top” floating button with smooth scroll
  5. 敏捷开发 看板_什么是看板? 定义的敏捷方法论,以及如何将其用于您的软件开发团队
  6. 微信喊你来找工作:上千家企业将提供超10万个就业岗位
  7. SQL基础——DDL、DML、DQL、DCL速览
  8. Android权限之sharedUserId和签名
  9. switch怎么一个账号绑定各种服务器,NS怎么一个账号两台机器使用_Nintendo Switch 新旧机器同使用教程_尼萌手游网...
  10. 计算机不打印怎么回事,打印机无法打印怎么办解决方案
  11. ‘Staff‘ object has no attribute ‘data‘
  12. 大学计算机实践教程raptor,大学计算机实践教程.docx
  13. 梅花雪树控件的属性及方法
  14. 在深度反应离子蚀刻工具中调整蚀刻方向性
  15. mysql.servers表存在_ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
  16. 计算机中imb二进制数,计算机基础知识总述.doc
  17. 【入门】【递推】走楼梯
  18. SystemVerilog学习笔记(可综合的部分)(一)
  19. C#获取动态key的json对象的值
  20. Eclipse 配置JDK

热门文章

  1. PLSQL 申明和游标
  2. ForkJoinPool 学习示例
  3. Github基本操作的学习与温习
  4. 第1章 Express MongoDB 搭建多人博客
  5. PHPCMS V9爆出多个SQL注入漏洞
  6. Sandy引擎学习笔记:摄影机
  7. Haproxy+Percona-XtraDB-Cluster 集群
  8. 收集整理的非常有用的PHP函数
  9. [javaSE] 看博客学习java并发编程
  10. Xcode7,ios9 issue ,warning合集