蚁群算法优化旅行问题
%%%%%%%%%%%%蚁群算法解决 TSP 问题%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%
clear all; %清除所有变量
close all; %清图
clc; %清屏
m = 50; %蚂蚁个数
Alpha = 1; %信息素重要程度参数
Beta = 5; %启发式因子重要程度参数
Rho = 0.1; %信息素蒸发系数
G = 200; %最大迭代次数
Q = 100; %信息素增加强度系数
C = [1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;...
3238 1229;4196 1044;4312 790;4386 570;3007 1970;2562 1756;...
2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;...
3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;...
3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;...
2370 2975]; %31 个省会城市坐标
%%%%%%%%%%%%%%%第一步:变量初始化%%%%%%%%%%%%%%
n = size(C,1); %n 表示问题的规模(城市个数)
D = zeros(n,n); %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) = eps;
end
D(j,i) = D(i,j);
end
end
Eta = 1./D; %Eta 为启发因子,这里设为距离的倒数
Tau = ones(n,n); %Tau 为信息素矩阵
Tabu = zeros(m,n); %存储并记录路径的生成
NC = 1; %迭代计数器
R_best = zeros(G,n); %各代最佳路线
L_best = inf.*ones(G,1); %各代最佳路线的长度
figure(1); %优化解
while NC <= G
%%%%%%%%%%第二步:将 m 只蚂蚁放到 n 个城市上%%%%%%%%%%
Randpos = [];
for i = 1:(ceil(m/n))
Randpos = [Randpos,randperm(n)];
end
Tabu(:,1) = (Randpos(1,1:m))';
%%%第三步:m 只蚂蚁按概率函数选择下一座城市,完成各自的周游%%%%
for j = 2:n
for i = 1:m
visited = Tabu(i,1:(j-1)); %已访问的城市
J = zeros(1,(n-j+1)); %待访问的城市
P = J; %待访问城市的选择概率分布
Jc = 1;
for k = 1:n
if length(find(visited==k))==0
J(Jc) = k;
Jc = Jc+1;
end
end
%%%%%%%%%%%计算待选城市的概率分布%%%%%%%%%%%
for k = 1:length(J)
P(k) = (Tau(visited(end),J(k))^Alpha)...
*(Eta(visited(end),J(k))^Beta);
end
P = P/(sum(P));
%%%%%%%%%%%按概率原则选取下一个城市%%%%%%%%%
Pcum = cumsum(P);
Select = find(Pcum >= rand);
to_visit = J(Select(1));
Tabu(i,j) = to_visit;
end
end
if NC >= 2
Tabu(1,:) = R_best(NC-1,:);
end
%%%%%%%%%%%%%第四步:记录本次迭代最佳路线%%%%%%%%%%
L = zeros(m,1);
for i = 1:m
R = Tabu(i,:);
for j = 1:(n-1)
L(i) = L(i)+D(R(j),R(j+1));
end
L(i) = L(i)+D(R(1),R(n));
end
L_best(NC) = min(L);
pos = find(L==L_best(NC));
R_best(NC,:) = Tabu(pos(1),:);
%%%%%%%%%%%%%%%第五步:更新信息素%%%%%%%%%%%%%
Delta_Tau = zeros(n,n);
for i = 1:m
for j = 1:(n-1)
Delta_Tau(Tabu(i,j),Tabu(i,j+1)) = ...
Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);
end
Delta_Tau(Tabu(i,n),Tabu(i,1)) = ...
Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
end
Tau = (1-Rho).*Tau+Delta_Tau;
%%%%%%%%%%%%%%%第六步:禁忌表清零%%%%%%%%%%%%%
Tabu = zeros(m,n);
%%%%%%%%%%%%%%%%%历代最优路线%%%%%%%%%%%%%%%
for i = 1:n-1
plot([ C(R_best(NC,i),1), C(R_best(NC,i+1),1)],...
[C(R_best(NC,i),2), C(R_best(NC,i+1),2)],'bo-');
hold on;
end
plot([C(R_best(NC,n),1), C(R_best(NC,1),1)],...
[C(R_best(NC,n),2), C(R_best(NC,1),2)],'ro-');
title(['优化最短距离:',num2str(L_best(NC))]);
hold off;
pause(0.005);
NC = NC+1;
end
%%%%%%%%%%%%%%%%%第七步:输出结果%%%%%%%%%%%%%%
Pos = find(L_best==min(L_best));
Shortest_Route = R_best(Pos(1),:); %最佳路线
Shortest_Length = L_best(Pos(1)); %最佳路线长度
figure(2),
plot(L_best)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')
相关文章:
蚁群算法优化旅行问题
%%%%%%%%%%%%蚁群算法解决 TSP 问题%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%% clear all; %清除所有变量 close all; %清图 clc; %清屏 m 50; %蚂蚁个数 Alpha 1; %信息素重要程度参数 Beta 5; %启发式因子重要程度参数 Rho 0.1; %信息素蒸发系数 G 20…...
树数据结构
什么是树数据结构? 树数据结构是一种层次结构,用于以易于导航和搜索的方式表示和组织数据。它是由边连接的节点集合,节点之间具有层次关系。树的最顶端的节点称为根,它下面的节点称为子节点。每个节点可以有多个子节点,…...
Spring Boot整合Redis并提供多种实际场景的应用
Spring Boot整合Redis并提供多种实际场景的应用1. 整合Redis2. 场景应用2.1 缓存2.2 分布式锁2.3 计数器2.4 发布/订阅3. 总结Spring Boot是一个快速构建基于Spring框架的应用程序的工具,它提供了大量的自动化配置选项,可以轻松地集成各种不同的技术。Re…...
VR全景图片,助力VR全景制作,720全景效果图
VR全景图片是指通过全景相机或多相机组合拍摄全景画面,并进行拼接处理生成全景图像的过程。VR全景图片的应用范围广泛,包括旅游和景区、房地产、汽车、艺术和文化、电影和娱乐等领域。本文将详细介绍VR全景图片的类型、应用场景、市场前景和发展趋势。 一…...
Kali Linux20款重要软件
Kali Linux 是一个流行的网络安全测试平台,它包含了大量的工具和应用程序,以下是其中20款最常用的软件和工具: Metasploit:Metasploit 是一个广泛使用的漏洞评估工具,可以帮助安全专业人员测试系统中的漏洞。Aircrack…...
C语言测试五
windows是什么类型的系统(实时还是分时)?有什么区别? 分时操作系统。如果在单核的情况下,分时操作系统多个进程共用一个单核,该单核会将其执行时间分成相应的时间片,每个进程占用一定的时间片&a…...
【微服务~原始真解】Spring Cloud —— 访问数据库整合Druid数据源
🔎这里是【秒懂云原生】,关注我学习云原生不迷路 👍如果对你有帮助,给博主一个免费的点赞以示鼓励 欢迎各位🔎点赞👍评论收藏⭐️ 👀专栏介绍 【秒懂云原生】 目前主要更新微服务,…...
前端入门必刷题,经典算法—两数之和
优美的前⾔ 年轻的码农哟~ 你是不是⼀直在思考⾃我提升的问题~ 思来想去,决定从算法抓起(单押)~ 拿起⼜放下,经历过多少次放弃(单押 ✖ 2)~ 决定了!这次让我来帮你梳理(单押 ✖ 3&a…...
‘海外/国外‘地区微博签到shu据(正题在第二部分)
最近失眠,研究了项关于weibo爬虫的新功能,种种原因,大家可跳过第一部分的引用直接看第二部分。 内容来源:健康中国、生命时报、央视等 失眠标准一:3个“30分钟” ● 入睡困难,从躺下想睡到睡着间隔…...
Springboot——SB整合Mybatis的CURD(基于注解进行开发)
此处是根据需求实现基本操作 上面这里涉及到了条件分页查询,还有增加和批量删除员工信息,右边编辑就是先查询后更新操作,叫做查询回显,然后在原有基础上进行更新 环境准备 在下面的入门案例的整体环境下把数据库表换成empSpring…...
现在大专生转IT可行吗?
当然可行的。 大专也是人,为什么不可以选择喜欢的专业学习,现在大学生遍地都是,学历已经不是限制你发展的因素了。有的人就是不擅长理论学习,更喜欢技术。IT也只是一个普普通通的技术行业,跟其他技术行业一样…...
XC7A50T-1CSG324I、XC7A50T-2CSG324I Artix-7 FPGA可编程门阵列
Artix-7 FPGA能够在多个方面实现更高的性价比,这些方面包括逻辑、信号处理、嵌入式内存、LVDS I/O、内存接口,以及收发器。MicroBlaze CPU针对Xilinx FPGA进行了优化,是一种可高度配置的32位RISC处理器,可为微控制器、实时处理器和…...
linux安装图片处理软件ImageMagick
下载地址: wget https://download.imagemagick.org/archive/ImageMagick-7.1.1-4.tar.gz 或者 wget --no-check-certificate https://download.imagemagick.org/archive/ImageMagick-7.1.1-4.tar.gz 安装命令: tar -zxvf ImageMagick-7.1.1-4.tar.…...
【Java基础】JavaCore核心-反射技术
文章目录1.什么是反射技术2.反射-获取类对象方式3.反射-获取声明构造器4.反射-对象创建实战5.反射-方法和属性实战6.反射-属性值操作实战7.反射-invoke运行类方法1.什么是反射技术 Java的反射(reflection)机制是指在程序的运行状态中 可以构造任意一个类…...
AWGN后验估计下的均值与协方差关系(向量和标量形式)
文章目录AWGN信道向量模型后验均值与协方差的关系从实数域拓展到复数域小结AWGN信道向量模型 考虑一个随机向量x∼pX(x)\boldsymbol x \sim p_{\boldsymbol X}(\boldsymbol x)x∼pX(x),信道模型为 qxv,v∼N(0,Σ)\boldsymbol q \boldsymbol x \boldsymbol v, \…...
Linux常用命令之文件搜索命令
1、常用搜索-find 命令find英文原意find所在路径/bin/find执行权限所有用户功能描述文件搜索语法find [搜索范围] [搜索条件] (默认准确搜索)范例find /etc -name init?? 常用的搜索条件的选项包括: -name:按照文件名进行匹配查找,例&…...
ChatGPT给软件测试行业带来的可能
软件测试在软件开发过程中扮演着至关重要的角色,因为它可以确保软件的质量和可靠性。而随着人工智能技术的不断发展,ChatGPT作为一个强大的自然语言处理工具,可以在软件测试中发挥出许多重要的作用。本文将介绍ChatGPT在软件测试应用中带来的…...
Cadence Allegro 导出Properties on Nets Report报告详解
⏪《上一篇》 🏡《上级目录》 ⏩《下一篇》 目录 1,概述2,Properties on Nets Report作用3,Properties on Nets Report示例4,Properties on Nets Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...
JAVA代码 实现定位数据动态聚集并绘制多边形区域
文章目录思路1、限制聚合距离2、绘制多边形区域3、多边形区域之间合并4、多边形定边点4、逻辑流程一些性能上的优化1、多边形设置圆心2、采用分支合并思路3、清理聚集较分散区域合理性处理1、解决多边形内凹角问题2、解决定边点插入位置问题3、多边形区域扩展成果展示最近有根据…...
基于储能进行调峰和频率调节研究【超线性增益的联合优化】(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
