蚁群算法求TSP问题matlab代码

%%% 蚁群算法求解TSP问题
clc;
clear all;
%%%各目标点的位置坐标, %%%一时找不到数据,就自动生成了五十个坐标点(xi,yi),i=1,2...,50;
x=randi([0,200],50,1);
y=randi([0,200],50,1);
city=[x,y];
city0=[0,0];             %%%出发点选取(0,0);
citys=[city0;city];           %%%将出发点加在50个点的开始(无所谓加哪都行);
%%% 计算城市间相互距离
n = size(citys,1);
D = zeros(n,n);
for i = 1:nfor j = 1:nif i ~= jD(i,j) = sqrt(sum((citys(i,:) - citys(j,:)).^2));elseD(i,j) = 1e-4;      endend
end%%% 初始化参数
m = 10;                              % 蚂蚁数量
alpha = 1;                           % 信息素重要程度因子
beta = 5;                            % 启发函数重要程度因子
rho = 0.1;                           % 信息素挥发因子
Q = 1;                               % 常系数
Eta = 1./D;                          % 启发函数
Tau = ones(n,n);                     % 信息素矩阵
Table = zeros(m,n);                  % 路径记录表
iter = 1;                            % 迭代次数初值
iter_max = 1000;                      % 最大迭代次数
Route_best = zeros(iter_max,n);      % 各代最佳路径
Length_best = zeros(iter_max,1);     % 各代最佳路径的长度
Length_ave = zeros(iter_max,1);      % 各代路径的平均长度  %%%迭代寻找最佳路径
while iter <= iter_max% 随机产生各个蚂蚁的起点城市start = zeros(m,1);for i = 1:mtemp = randperm(n);start(i) = temp(1);endTable(:,1) = start; % 构建解空间citys_index = 1:n;% 逐个蚂蚁路径选择for i = 1:m% 逐个城市路径选择for j = 2:ntabu = Table(i,1:(j - 1));           % 已访问的城市集合(禁忌表)allow_index = ~ismember(citys_index,tabu);allow = citys_index(allow_index);  % 待访问的城市集合P = allow;% 计算城市间转移概率for k = 1:length(allow)P(k) = Tau(tabu(end),allow(k))^alpha * Eta(tabu(end),allow(k))^beta;endP = P/sum(P);% 轮盘赌法选择下一个访问城市Pc = cumsum(P);     target_index = find(Pc >= rand); target = allow(target_index(1));Table(i,j) = target;endend% 计算各个蚂蚁的路径距离Length = zeros(m,1);for i = 1:mRoute = Table(i,:);for j = 1:(n - 1)Length(i) = Length(i) + D(Route(j),Route(j + 1));endLength(i) = Length(i) + D(Route(n),Route(1));end% 计算最短路径距离及平均距离if iter == 1[min_Length,min_index] = min(Length);Length_best(iter) = min_Length;  Length_ave(iter) = mean(Length);Route_best(iter,:) = Table(min_index,:);else[min_Length,min_index] = min(Length);Length_best(iter) = min(Length_best(iter - 1),min_Length);Length_ave(iter) = mean(Length);if Length_best(iter) == min_LengthRoute_best(iter,:) = Table(min_index,:);elseRoute_best(iter,:) = Route_best((iter-1),:);endend% 更新信息素Delta_Tau = zeros(n,n);% 逐个蚂蚁计算for i = 1:m% 逐个城市计算for j = 1:(n - 1)Delta_Tau(Table(i,j),Table(i,j+1)) = Delta_Tau(Table(i,j),Table(i,j+1)) + Q/Length(i);endDelta_Tau(Table(i,n),Table(i,1)) = Delta_Tau(Table(i,n),Table(i,1)) + Q/Length(i);endTau = (1-rho) * Tau + Delta_Tau;% 迭代次数加1,清空路径记录表iter = iter + 1;Table = zeros(m,n);
end%%% 结果显示
[Shortest_Length,index] = min(Length_best);
Shortest_Route = Route_best(index,:);
disp(['最短距离:' num2str(Shortest_Length)]);
disp(['最短路径:' num2str([Shortest_Route Shortest_Route(1)])]);%%% 绘图
figure(1)
plot([citys(Shortest_Route,1);citys(Shortest_Route(1),1)],...[citys(Shortest_Route,2);citys(Shortest_Route(1),2)],'o-');
grid on
for i = 1:size(citys,1)text(citys(i,1),citys(i,2),['   ' num2str(i)]);
end
text(citys(Shortest_Route(1),1),citys(Shortest_Route(1),2),'       起点');
text(citys(Shortest_Route(end),1),citys(Shortest_Route(end),2),'       终点');
xlabel('城市位置横坐标')
ylabel('城市位置纵坐标')
title(['蚁群算法优化路径(最短距离:' num2str(Shortest_Length) ')'])
figure(2)
plot(1:iter_max,Length_best,'b',1:iter_max,Length_ave,'r:')
legend('最短距离','平均距离')
xlabel('迭代次数')
ylabel('距离')
title('各代最短距离与平均距离对比')

蚁群算法求TSP问题matlab代码相关推荐

  1. 【路径规划-TSP问题】基于粒子群结合蚁群算法求解旅行商问题附matlab代码

    1 内容介绍 一种基于粒子群优化的蚁群算法求解TSP问题的方法.该方法在求解TSP问题时,利用粒子群优化的思想,对蚁群算法的参数取值进行优化并选择.在粒子群算法中,将蚁群算法的5个参数(q,α,β,ρ ...

  2. 蚁群算法求解TSP问题 matlab程序

    https://blog.csdn.net/wayjj/article/details/72809344 蚁群算法,单单学习算法还是不够深入了解,得实际编程实现了,理解才能更加透彻,本文根据这篇博文贴 ...

  3. 【图像边缘检测】基于蚁群算法实现图像边缘检测matlab代码

    1 简介 目的提出基于蚂蚁算法的图像分割技术,解决传统的图像分割算法分割图像的效果不理想.不能满足图像分割要求等问题.方法将图像的灰度.梯度和邻域特征组合成蚂蚁,通过MATLAB实现蚁群图像分割算法对 ...

  4. 【路径规划-TSP问题】基于蚁群算法求解旅行商问题含Matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  5. 机器学习(MACHINE LEARNING)MATLAB蚁群算法解决TSP问题

    文章目录 1 蚁群算法 2 蚁群算法与TSP问题的关系 3 代码实现 1 蚁群算法 基本原理: (1)蚂蚁在携带等量的信息素一路释放 (2)信息素浓度会和路径的长度成反比 (3)下次蚂蚁来到该路口会选 ...

  6. 蚁群算法求最值c语言实现,蚁群算法代码(求函数最值)

    <蚁群算法代码(求函数最值)>由会员分享,可在线阅读,更多相关<蚁群算法代码(求函数最值)(4页珍藏版)>请在人人文库网上搜索. 1.function F=F(x1,x2) % ...

  7. 蚁群算法求函数最值c语言,蚁群算法代码(求函数最值)

    蚁群算法简单应用 function [F]=F(x1,x2) %目标函数 F=-(x1.^2+2*x2.^2-0.3*cos(3*pi*x1)-0.4*cos(4*pi*x2)+0.7); End f ...

  8. 用蚁群算法求解TSP问题

    TSP是什么?TSP全称Travelling salesman problem.中文名:旅行商问题.就是模拟退火中讲到的14个城市之间巡回旅行,求路径最短的问题. 为什么偏偏找他呢?因为这是一个衡量算 ...

  9. 蚁群算法求解TSP问题

    蚁群算法求解TSP问题 蚁群算法求解TSP问题 蚁群算法求解TSP问题 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著 ...

  10. 蚂蚁算法matlab,蚁群算法(ACA)及其Matlab实现

    1基本原理: 本质上也是一种概率算法,通过大概率收敛到最佳值,和其他的智能算法很相似.蚁群分泌的信息素存在正反馈,使得较佳的解 具有大概率被选到,当全局都选用较佳的解,变可以得到整体的最优解. 2几个 ...

最新文章

  1. spark编程基础--4.2在spark-shell中运行代码
  2. Flutter 制作漂亮的登录表单
  3. P7115-[NOIP2020]移球游戏【构造】
  4. MySQL 增加、更新、删除
  5. python写安卓app控制蓝牙_Python脚本利用adb进行手机控制的方法
  6. mysql在windows启动_MySQL笔记:mySQL在windows环境启动
  7. iOS:简单使用UIAlertVIew和UIActionSheet
  8. [linux] C语言Linux系统编程-做成守护进程
  9. linux 内核代码怎么下载,centos的linux内核源码下载方法
  10. Citrix XenAPP DS角色
  11. 电脑绣花制版软件评比(上)
  12. 低功耗电波钟的制作 - 电子设计竞赛
  13. 平面设计个人简历模板
  14. 为什么中国的数字是四位一进,而西方的是三位一进?
  15. android apk更新下载以及安装
  16. uniapp打开pdf文件
  17. CH32F103与STM32F103在USB接口上的差异与使用
  18. 日本IT公司工作体验
  19. 上兵伐谋,其次伐交,其次伐兵,其下攻城
  20. 初学者的3d建模软件。是什么软件?

热门文章

  1. php 图像编程库,php – 数据图像库64
  2. matlab 正弦波 fft,【求助】正弦信号序列fft频谱分析!!!
  3. dbeaver查看执行计划_SAP学习基础篇(52):PP模块-物料需求计划
  4. gin框架-2-返回是html格式的网页数据
  5. ping,python实现批量ping包工具--小案例v4优化版本
  6. JQuery 添加元素appendf 后\prepend前,before 前\after 后,删除元素remove\empty
  7. 高德地图画带箭头的线_华耀室佳发光顶角线能否代替传统回型顶角线呢?
  8. 可以两个人协作一个项目吗_两个人分手了,还可以继续做朋友吗?
  9. xmake vs cmake对比分析
  10. 蓝桥杯 拉马车(模拟)