当前位置: 首页 > news >正文

蚁群算法优化旅行问题

%%%%%%%%%%%%蚁群算法解决 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…...

树数据结构

什么是树数据结构&#xff1f; 树数据结构是一种层次结构&#xff0c;用于以易于导航和搜索的方式表示和组织数据。它是由边连接的节点集合&#xff0c;节点之间具有层次关系。树的最顶端的节点称为根&#xff0c;它下面的节点称为子节点。每个节点可以有多个子节点&#xff0c…...

Spring Boot整合Redis并提供多种实际场景的应用

Spring Boot整合Redis并提供多种实际场景的应用1. 整合Redis2. 场景应用2.1 缓存2.2 分布式锁2.3 计数器2.4 发布/订阅3. 总结Spring Boot是一个快速构建基于Spring框架的应用程序的工具&#xff0c;它提供了大量的自动化配置选项&#xff0c;可以轻松地集成各种不同的技术。Re…...

VR全景图片,助力VR全景制作,720全景效果图

VR全景图片是指通过全景相机或多相机组合拍摄全景画面&#xff0c;并进行拼接处理生成全景图像的过程。VR全景图片的应用范围广泛&#xff0c;包括旅游和景区、房地产、汽车、艺术和文化、电影和娱乐等领域。本文将详细介绍VR全景图片的类型、应用场景、市场前景和发展趋势。 一…...

Kali Linux20款重要软件

Kali Linux 是一个流行的网络安全测试平台&#xff0c;它包含了大量的工具和应用程序&#xff0c;以下是其中20款最常用的软件和工具&#xff1a; Metasploit&#xff1a;Metasploit 是一个广泛使用的漏洞评估工具&#xff0c;可以帮助安全专业人员测试系统中的漏洞。Aircrack…...

C语言测试五

windows是什么类型的系统&#xff08;实时还是分时&#xff09;&#xff1f;有什么区别&#xff1f; 分时操作系统。如果在单核的情况下&#xff0c;分时操作系统多个进程共用一个单核&#xff0c;该单核会将其执行时间分成相应的时间片&#xff0c;每个进程占用一定的时间片&a…...

【微服务~原始真解】Spring Cloud —— 访问数据库整合Druid数据源

&#x1f50e;这里是【秒懂云原生】&#xff0c;关注我学习云原生不迷路 &#x1f44d;如果对你有帮助&#xff0c;给博主一个免费的点赞以示鼓励 欢迎各位&#x1f50e;点赞&#x1f44d;评论收藏⭐️ &#x1f440;专栏介绍 【秒懂云原生】 目前主要更新微服务&#xff0c;…...

前端入门必刷题,经典算法—两数之和

优美的前⾔ 年轻的码农哟~ 你是不是⼀直在思考⾃我提升的问题~ 思来想去&#xff0c;决定从算法抓起&#xff08;单押&#xff09;~ 拿起⼜放下&#xff0c;经历过多少次放弃&#xff08;单押 ✖ 2&#xff09;~ 决定了&#xff01;这次让我来帮你梳理&#xff08;单押 ✖ 3&a…...

‘海外/国外‘地区微博签到shu据(正题在第二部分)

最近失眠&#xff0c;研究了项关于weibo爬虫的新功能&#xff0c;种种原因&#xff0c;大家可跳过第一部分的引用直接看第二部分。 内容来源&#xff1a;健康中国、生命时报、央视等​​​​ 失眠标准一&#xff1a;3个“30分钟” ● 入睡困难&#xff0c;从躺下想睡到睡着间隔…...

Springboot——SB整合Mybatis的CURD(基于注解进行开发)

此处是根据需求实现基本操作 上面这里涉及到了条件分页查询&#xff0c;还有增加和批量删除员工信息&#xff0c;右边编辑就是先查询后更新操作&#xff0c;叫做查询回显&#xff0c;然后在原有基础上进行更新 环境准备 在下面的入门案例的整体环境下把数据库表换成empSpring…...

现在大专生转IT可行吗?

当然可行的。 大专也是人&#xff0c;为什么不可以选择喜欢的专业学习&#xff0c;现在大学生遍地都是&#xff0c;学历已经不是限制你发展的因素了。有的人就是不擅长理论学习&#xff0c;更喜欢技术。IT也只是一个普普通通的技术行业&#xff0c;跟其他技术行业一样&#xf…...

XC7A50T-1CSG324I、XC7A50T-2CSG324I Artix-7 FPGA可编程门阵列

Artix-7 FPGA能够在多个方面实现更高的性价比&#xff0c;这些方面包括逻辑、信号处理、嵌入式内存、LVDS I/O、内存接口&#xff0c;以及收发器。MicroBlaze CPU针对Xilinx FPGA进行了优化&#xff0c;是一种可高度配置的32位RISC处理器&#xff0c;可为微控制器、实时处理器和…...

linux安装图片处理软件ImageMagick

下载地址&#xff1a; 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 安装命令&#xff1a; tar -zxvf ImageMagick-7.1.1-4.tar.…...

【Java基础】JavaCore核心-反射技术

文章目录1.什么是反射技术2.反射-获取类对象方式3.反射-获取声明构造器4.反射-对象创建实战5.反射-方法和属性实战6.反射-属性值操作实战7.反射-invoke运行类方法1.什么是反射技术 Java的反射&#xff08;reflection&#xff09;机制是指在程序的运行状态中 可以构造任意一个类…...

AWGN后验估计下的均值与协方差关系(向量和标量形式)

文章目录AWGN信道向量模型后验均值与协方差的关系从实数域拓展到复数域小结AWGN信道向量模型 考虑一个随机向量x∼pX(x)\boldsymbol x \sim p_{\boldsymbol X}(\boldsymbol x)x∼pX​(x)&#xff0c;信道模型为 qxv,v∼N(0,Σ)\boldsymbol q \boldsymbol x \boldsymbol v, \…...

Linux常用命令之文件搜索命令

1、常用搜索-find 命令find英文原意find所在路径/bin/find执行权限所有用户功能描述文件搜索语法find [搜索范围] [搜索条件] (默认准确搜索)范例find /etc -name init?? 常用的搜索条件的选项包括&#xff1a; -name&#xff1a;按照文件名进行匹配查找&#xff0c;例&…...

ChatGPT给软件测试行业带来的可能

软件测试在软件开发过程中扮演着至关重要的角色&#xff0c;因为它可以确保软件的质量和可靠性。而随着人工智能技术的不断发展&#xff0c;ChatGPT作为一个强大的自然语言处理工具&#xff0c;可以在软件测试中发挥出许多重要的作用。本文将介绍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代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

体验 Linux 的几个监控命令(htop、nmon、netdata)

体验 Linux 的几个监控命令htopnmonnetdatahtop 安装&#xff0c; sudo dnf install -y htop使用&#xff0c; htopnmon 安装&#xff0c; sudo dnf install -y nmon使用&#xff0c; nmon输入c&#xff0c; 输入C&#xff0c; 输入m&#xff0c; 输入n&#xff0c; 输入…...

NOC大赛2022NOC软件创意编程初赛图形化小低组(小学高年级组)

一、选择题 1.如果要控制所有角色一起朝舞台区右侧移动,下面哪个积太块是不需要的 2.要想让三个角色一起移动起来,下面哪个积木块没有作用 ? 3.小猴按照下面的程序前进,小猴最后一次前进了()步。 4.小可同学写了一个画笔程序画出花朵,但是运行后什么都看不到,不可…...

python进行股票收益率计算和风险控制的实现

股票收益率计算和风险控制的实现 在进行股票投资时&#xff0c;计算收益率和进行风险控制是非常重要的。本文将介绍一个与此相关的函数&#xff1a;radio_day_cal()。 radio_day_cal()函数 def radio_day_cal(last_day, sheet_name, df_dict, code_list, new_list):i 0days…...

自从有了这套近4000页的开发文档后,Java面试路上就像开了挂一样

Java是世界最流行的编程语言&#xff0c;也是国内大多数IT公司的主流语言。招聘网站上Java岗位众多&#xff0c;Java工程师似乎不愁找工作。但仔细一看就会发现&#xff0c;Java岗位的招聘薪酬天差地别&#xff0c;人才要求也是五花八门。而在Java工程师求职过程中&#xff0c;…...

Python文件操作

目录 一、文件操作介绍 二、文件的打开和关闭 三、文件的读写 四、文件文件夹相关操作 五、test 一、文件操作介绍 文件 : python中文件是对象 Liunx 文件 : 一切设备都可以看成是文件 磁盘文件 管道 网络Socket 文件属性: 读 写 执行权限 就是把一些存储存放起来&…...

036:cesium加载GPX文件,显示图形

第036个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载GPX文件, 显示图形。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共83行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https:/…...

【AI探索】我问了ChatGPT几个终极问题

终于尝试了一把ChatGPT的强大之处&#xff0c;问了一下关心的几个问题&#xff1a; chatGPT现在在思考吗&#xff1f;有没有什么你感兴趣的问题&#xff1f; 你认为AI会对人类产生哪些方面的影响&#xff1f; 你对人类所涉及到的学科有了解吗&#xff1f;你认为在哪些方面与人类…...

Leetcode 优先队列详解

优先队列 优先队列&#xff08;Priority Queue&#xff09;&#xff1a;一种特殊的队列。在优先队列中&#xff0c;元素被赋予优先级&#xff0c;当访问队列元素时&#xff0c;具有最高优先级的元素最先删除 普通队列详解Leetcode 队列详解 优先队列与普通队列最大的不同点在于…...

通过两道一年级数学题反思自己

背景 做完这两道题我开始反思自己&#xff0c;到底是什么限制了我&#xff1f;是我自己&#xff1f;是曾经教导我的老师&#xff1f;还是我的父母&#xff1f; 是考试吗&#xff1f;还是什么&#xff1f; 提目 1、正方体个数问题 2、相碰可能性 过程 静态思维&#xff1a; …...

Pytorch :从零搭建一个神经网络

文章目录安装依赖从源码编译pytorchCXX_ABI问题数据集归一化Transforms搭建神经网络Components of a neural networknn.Flattennn.Linearnn.Sequentialnn.SoftmaxModel Parameters优化模型参数设置超参数添加优化循环添加 loss function优化过程完整实现模型的保存和加载安装 …...

用什么可以做网站/seo关键词排名工具

java包中提供了很多监控JVM的工具类&#xff0c;作为java程序员必须得掌握常用的几个工具&#xff0c;下面是几个常用的JVM性能监控与故障处理工具的介绍与使用。 1、jstack 该命令用于生成当前时刻虚拟机的线程快照&#xff0c;可以用于定位线程出现长时间停顿的原因&#xff…...

wordpress 做什么/网站搭建工具

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;这些特性…...

折叠wordpress/网上哪里可以免费打广告

编译好的控制台CS文件&#xff1a; cs文件单独拿出来放到F盘目录中 打开命令提示CMD&#xff1a; 执行下面语句即可在F盘目录中看到生成的exe文件&#xff0c;windows系统下双击就可运行&#xff1a; C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc test.cs 转载于:https:…...

初学者求教怎样做网站/网店如何推广

这是我个人的一点小想法啊&#xff0c;不代表准确 在c语言中我经常会使用到这样的用法&#xff1a; int main() {int i0,j0;for(i0,j10;i<5&&j>3;i,j--){printf("%d %d\n",i,j);}}//然后就会得到我想要的输出结果&#xff0c;如下&#xff1a; 0 10 …...

ps网站参考线怎么做/推广公司经营范围

GIF gif中快捷键 执行sql ctrlenter 作用 比如ip之类的参数需要使用. 这样每次可以用 ${ip} 表示,然后dataGrip根据语法自动识别该变量,就算sql中多次使用,你通过参数 P 按钮修改一次,全局生效. 提高便利性....

网站制作模板北京/hao123主页

1.环境的搭建 第一步&#xff1a; 安装Git sudo apt-get install git 第二步&#xff1a; 到 https://github.com/ 上创建GitHub帐号 第三步&#xff1a; 生成ssh key ssh-keygen -t rsa -C "your_emailyouremail.com" #your_email是你的email 第四步&#xff…...