蚁群算法求TSP问题matlab代码
蚁群算法求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代码相关推荐
- 【路径规划-TSP问题】基于粒子群结合蚁群算法求解旅行商问题附matlab代码
1 内容介绍 一种基于粒子群优化的蚁群算法求解TSP问题的方法.该方法在求解TSP问题时,利用粒子群优化的思想,对蚁群算法的参数取值进行优化并选择.在粒子群算法中,将蚁群算法的5个参数(q,α,β,ρ ...
- 蚁群算法求解TSP问题 matlab程序
https://blog.csdn.net/wayjj/article/details/72809344 蚁群算法,单单学习算法还是不够深入了解,得实际编程实现了,理解才能更加透彻,本文根据这篇博文贴 ...
- 【图像边缘检测】基于蚁群算法实现图像边缘检测matlab代码
1 简介 目的提出基于蚂蚁算法的图像分割技术,解决传统的图像分割算法分割图像的效果不理想.不能满足图像分割要求等问题.方法将图像的灰度.梯度和邻域特征组合成蚂蚁,通过MATLAB实现蚁群图像分割算法对 ...
- 【路径规划-TSP问题】基于蚁群算法求解旅行商问题含Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 机器学习(MACHINE LEARNING)MATLAB蚁群算法解决TSP问题
文章目录 1 蚁群算法 2 蚁群算法与TSP问题的关系 3 代码实现 1 蚁群算法 基本原理: (1)蚂蚁在携带等量的信息素一路释放 (2)信息素浓度会和路径的长度成反比 (3)下次蚂蚁来到该路口会选 ...
- 蚁群算法求最值c语言实现,蚁群算法代码(求函数最值)
<蚁群算法代码(求函数最值)>由会员分享,可在线阅读,更多相关<蚁群算法代码(求函数最值)(4页珍藏版)>请在人人文库网上搜索. 1.function F=F(x1,x2) % ...
- 蚁群算法求函数最值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 ...
- 用蚁群算法求解TSP问题
TSP是什么?TSP全称Travelling salesman problem.中文名:旅行商问题.就是模拟退火中讲到的14个城市之间巡回旅行,求路径最短的问题. 为什么偏偏找他呢?因为这是一个衡量算 ...
- 蚁群算法求解TSP问题
蚁群算法求解TSP问题 蚁群算法求解TSP问题 蚁群算法求解TSP问题 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著 ...
- 蚂蚁算法matlab,蚁群算法(ACA)及其Matlab实现
1基本原理: 本质上也是一种概率算法,通过大概率收敛到最佳值,和其他的智能算法很相似.蚁群分泌的信息素存在正反馈,使得较佳的解 具有大概率被选到,当全局都选用较佳的解,变可以得到整体的最优解. 2几个 ...
最新文章
- spark编程基础--4.2在spark-shell中运行代码
- Flutter 制作漂亮的登录表单
- P7115-[NOIP2020]移球游戏【构造】
- MySQL 增加、更新、删除
- python写安卓app控制蓝牙_Python脚本利用adb进行手机控制的方法
- mysql在windows启动_MySQL笔记:mySQL在windows环境启动
- iOS:简单使用UIAlertVIew和UIActionSheet
- [linux] C语言Linux系统编程-做成守护进程
- linux 内核代码怎么下载,centos的linux内核源码下载方法
- Citrix XenAPP DS角色
- 电脑绣花制版软件评比(上)
- 低功耗电波钟的制作 - 电子设计竞赛
- 平面设计个人简历模板
- 为什么中国的数字是四位一进,而西方的是三位一进?
- android apk更新下载以及安装
- uniapp打开pdf文件
- CH32F103与STM32F103在USB接口上的差异与使用
- 日本IT公司工作体验
- 上兵伐谋,其次伐交,其次伐兵,其下攻城
- 初学者的3d建模软件。是什么软件?
热门文章
- php 图像编程库,php – 数据图像库64
- matlab 正弦波 fft,【求助】正弦信号序列fft频谱分析!!!
- dbeaver查看执行计划_SAP学习基础篇(52):PP模块-物料需求计划
- gin框架-2-返回是html格式的网页数据
- ping,python实现批量ping包工具--小案例v4优化版本
- JQuery 添加元素appendf 后\prepend前,before 前\after 后,删除元素remove\empty
- 高德地图画带箭头的线_华耀室佳发光顶角线能否代替传统回型顶角线呢?
- 可以两个人协作一个项目吗_两个人分手了,还可以继续做朋友吗?
- xmake vs cmake对比分析
- 蓝桥杯 拉马车(模拟)