结合邻域连接法的蚁群优化(NACO)求解TSP问题(Matlab代码实现)

news2024/11/15 23:56:39

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

旅行推销员问题(TSP)是运筹学、数学优化和理论计算领域的经典算法问题。推销员必须绕过最短路线并返回起点,访问一定数量的地方。精确算法和启发式算法都用于求解 TSP.
旨在获得具有因子复杂性的精确解的精确算法被归类为 NP-Complete。启发式方法的解决方案要么基于优化问题。这些算法的复杂性小于确切的算法。因此,它在更少的时间和空间内给出解决方案,并在近似解决方案足以解决问题的情况下使用,特别是在达到确切解决方案非常困难的情况下。
本文的第一个目的是强调每种TSP方法的要求,局限性和功能,以指导科学家和研究人员选择最适合其特定需求的方法。它对最有效和广泛使用的TSP方法进行了全面调查,通过研究旨在发现其优势和劣势的方法来澄清其主要差异。
蚁群优化 (ACO) 考虑一种启发式方法,该方法具有达到最佳 TSP 解决方案的强大能力。它来源于蚂蚁在自然界中的自然行为——基于分析真正的蚂蚁思考在蚁群中寻找和储存食物。本论文的第二个目的是提出一种新的混合算法来解决TSP。它将由ACO与邻居加入(NJ)组合而成的结构,并称之为(NACO)。新算法高度关注所有可能影响解决方案的标准并将其应用于 TSP,并且通过将它们与蚁群的原始算法进行比较,特别是在减少计算和时间方面,它对解决方案进行了许多改进。
此外,本文还介绍了并行NACO作为高性能TSP的高效并行程序。建议在单独的执行线程中并行运行 Ant,以受益于每个 ant 的独立操作,并使用多核系统实现并行算法。提出的程序由MATLAB® R2017a(版本9.2)编程,并在具有8GB RAM和Intel Core i7-8565U CPU,64位Windows操作系统的HP计算机上实施。结果表明,相对于NACO,复杂度降低到O(n^2(n-ω))。至PNACO,复杂性从O(n(n⁄p)(n-ω))降低,此外加速度高达10。

📚2 运行结果

部分代码:

%% The Parameters

Iteration=1;                          % No. of Iterations
no_ant=1;                             % Population Size (No. of Ants)
Q=100;
%t0=1;
t0=10*Q/(no_Var*mean(D_Set.D(:)));      % Initial Phromone
alpha=1;                                % Phromone Exponential Weight
beta=5;                                 % Heuristic Exponential Weight
rate=0.7;                              % Evaporation Rate

%% Initialization

eta=1./D_Set.D;                         % Heuristic Information Matrix
t=t0*ones(no_Var,no_Var);               % Phromone Matrix
BC=zeros(Iteration,1);                  % Array to Hold Best Cost Values

% Empty Ant
empty_ant.Tour=[];
empty_ant.Cost=[];

% Ant Colony Matrix
ant=repmat(empty_ant,no_ant,1);

% Best Ant
BS.Cost=inf;

% the Level_one of NJ
Leaf=Leaf_1(D_Set.D);

% Runtime
T_1 = cputime;

%% NEW_ACO Main Program

for it=1:Iteration    
    for k=1:no_ant                      % Move Ants
        Leaf1=Leaf;
        ant(k).Tour=randi([1 no_Var]);  %% {choose a random non visited city}
        city=ant(k).Tour;
        for l =2:no_Var
            ant_tour=ant(k).Tour(end);          
            [row,col] = find(Leaf1==city);
            
            if isempty(row)
                P=t(ant_tour,:).^alpha.*eta(ant_tour,:).^beta;           
                P(ant(k).Tour)=0;
                P=P/sum(P);
                city=RouletteSelection(P);
                ant(k).Tour=[ant(k).Tour city];
            else
                l=l+1;                  % Pass the joining cities 
                if col==2
                    city=Leaf1(row,1);
               else
                    city=Leaf1(row,2);
                end
                ant(k).Tour=[ant(k).Tour city];
                Leaf1(row,1)=0;
                Leaf1(row,2)=0;
            end
          %  ant(k).Tour=[ant(k).Tour city];
        end
        ant(k).Cost=CostFunction(ant(k).Tour);
        
        if ant(k).Cost<BS.Cost
            BS=ant(k);
        end
    end
     
    % Update Phromones
    for k=1:no_ant
        tour=ant(k).Tour;
        tour=[tour tour(1)]; 
        for ll=1:no_Var
            ant_tour=tour(ll);
            city=tour(ll+1);
            t(ant_tour,city)=t(ant_tour,city)+Q/ant(k).Cost;
        end
        
    end
    
    % Evaporation
    t=(1-rate)*t;
    
    % Store Best Cost
    BC(it)=BS.Cost;

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]A HYBRID OPTIMIZATION ALGORITHM OF ANT COLONY SEARCH AND NEIGHBOUR-JOINING METHOD TO SOLVE THE TRAVELLING SALESMAN PROBLEM"‏, Advanced Mathematical Models & Applications Vol.5, No.1, 2020, pp.95-110

🌈4 Matlab代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

傅里叶级数与傅里叶变换

一、Games101 中出现的傅里叶变换(FT)的简单推导 到底什么是傅里叶变换&#xff1a;它的物理意义是什么&#xff0c;公式又从何而来&#xff1f; 以下的内容出现在 Games101 中的第八章&#xff1a;光栅化&#xff08;深度测试与抗锯齿&#xff09; 中&#xff0c;课程中这一部…

OpenAI Whisper论文笔记

OpenAI Whisper论文笔记 OpenAI 收集了 68 万小时的有标签的语音数据&#xff0c;通过多任务、多语言的方式训练了一个 seq2seq &#xff08;语音到文本&#xff09;的 Transformer 模型&#xff0c;自动语音识别&#xff08;ASR&#xff09;能力达到商用水准。本文为李沐老师…

Spring源码-doCreateBean

先看段代码&#xff1a; Overrideprotected Object createBean(String beanName, RootBeanDefinition mbd, Nullable Object[] args)throws BeanCreationException {if (logger.isDebugEnabled()) {logger.debug("Creating instance of bean " beanName "&qu…

Yolov5(v5.0) + pyqt5界面设计

1.下载安装pyqt5工具包以及配置ui界面开发环境 pip install PyQt5 pip install PyQt5-tools 2.点击File->Settings->External Tools进行工具添加&#xff0c;依次进行Qt Designer、PyUIC环境配置. 2.1 添加QtDesigner Qt Designer 是通过拖拽的方式放置控件&#xff0c…

GUI编程--PyQt5--QWidget2

文章目录事件事件传递父子关系扩展Z轴的层级关系事件 自定义控件类&#xff08;QWidget&#xff09;&#xff0c;然后重写对应的事件方法即可。 控件显示时触发&#xff0c;showEvent(QShowEvent) 控件关闭时触发&#xff0c;closeEvent(QCloseEvent) 事件传递 案例&#xff1…

MYSQL -- Binlog数据还原

对表误删或执行缺少条件的修改 SQL 导致修改了表内其他数据时&#xff0c;我们需要想办法将数据恢复回来。 先创建两个测试表 table_1 CREATE TABLE table_1 (id int(0) NOT NULL AUTO_INCREMENT,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL D…

SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战

一、前言 在面试中&#xff0c;经常会有一道经典面试题&#xff0c;那就是&#xff1a;怎么防止接口重复提交&#xff1f; 小编也是背过的&#xff0c;好几种方式&#xff0c;但是一直没有实战过&#xff0c;做多了管理系统&#xff0c;发现这个事情真的没有过多的重视。 最近…

[附源码]java毕业设计酒店管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

K8s为何需要Pod

Pod是K8s中的最小API对象&#xff0c;更专业的表述是&#xff0c;Pod是K8s项目的原子调度单位&#xff0c;Pod可以看做是一个进程组&#xff0c;K8s则是操作系统 一&#xff0c; 问题 现在有三个服务需要部署在同一个节点上&#xff0c;A占用1G内存&#xff0c;B &#xff0c;…

【Maven】使用maven profile 动态激活不同环境、依赖打包部署

使用maven profile 动态激活不同环境、依赖打包部署前言一、配置二、激活Profile三、动态依赖 示例一些其他参考&#xff1a;前言 在开发过程中&#xff0c;我们的软件会面对不同的运行环境&#xff0c;比如开发环境、测试环境、生产环境&#xff0c;而我们的软件在不同的环境中…

Java方法与方法重载

目录 如何使用带参数的方法 综合案例 常见错误2-1 常见错误2-2 方法传参 构造方法 构造方法重载 this的用法 方法重载 成员变量和局部变量 成员变量和局部变量的区别 如何使用带参数的方法 1、定义带参数的方法 语法&#xff1a;<访问修饰符> 返回类型 <方…

网络 IO 演变过程

在互联网中提起网络&#xff0c;我们都会避免不了讨论高并发、百万连接。而此处的百万连接的实现&#xff0c;脱离不了网络 IO 的选择&#xff0c;因此本文作为一篇个人学习的笔记&#xff0c;特此进行记录一下整个网络 IO 的发展演变过程。以及目前广泛使用的网络模型。 1.网…

服务端Skynet(一)——源码浅析

服务端Skynet(一)——源码浅析 文章目录服务端Skynet(一)——源码浅析1、skynet的本质2、skynet基本的数据结构1、skynet_modules管理模块2、skynet_context模块3、skynet_message模块3、skynet启动服务步骤4、启动服务例子(logger)参考文献&#xff1a;skynet设计综述 skynet…

实战Netty!基于私有协议,怎样快速开发网络通信服务?

前言 今天我们一起来来聊聊怎么使用netty。 在工作中&#xff0c;我经常使用netty开发一些服务&#xff0c;掌握netty的工作原理&#xff0c;开发一些服务端以及客户端是非常简单&#xff0c;本篇文章&#xff0c;我们就以具体的协议来进行一个简单的服务的开发。 正文 私有…

一键汇总报告模型可能会需要修改的地方

文章目录如何修改文件夹地址为指定地址?如何取消清除提醒, 避免每次点击弹窗选择?如何取消完成弹窗提醒?如果觉得反复打开工作簿太闪怎么办?如果有些报告的内容页不在第一个Sheet怎么办?如果想修改字段怎么办?运行程序前不想清除原有内容怎么办?报告页有内容但是没有被抓…

混合整数规划的机组组合附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Redis常见面试题(2022)

Redis基础 什么是 Redis&#xff1f; Redis 是一个开源&#xff08;BSD 许可&#xff09;、基于内存、支持多种数据结构的存储系统&#xff0c;可以作为数据库、缓存和消息中间件。它支持的数据结构有字符串&#xff08;strings&#xff09;、哈希&#xff08;hashes&#xf…

多分类交叉熵理解

多分类交叉熵有多种不同的表示形式&#xff0c;如下图所示&#xff1a; 但是&#xff0c;有时候我们读论文会深陷其中不能自拔。 也有很多读者、观众会纠正其他作者的文章、视频的交叉熵形式。 实际上&#xff0c;上述三种形式都是没有问题的。 这里&#xff0c;我们就要了解…

多媒体内容理解在美图社区的应用实践

导读&#xff1a;移动互联网时代&#xff0c;图像和短视频等多媒体内容爆发&#xff0c;基于计算机视觉的AI算法是多媒体内容分析的基础。在美图社区智能化发展的过程中&#xff0c;视频和图像分类打标、去重以及质量评估的结果&#xff0c;在推荐、搜索以及人工审核等多个场景…

【R语言数据科学】:变量选择(三)主成分回归和偏最小二乘回归

变量选择(三)主成分回归和偏最小二乘回归 🌸个人主页:JOJO数据科学📝个人介绍:统计学top3高校统计学硕士在读💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏✨本文收录于【R语言数据科学】本系列主要介绍R语言在数据科学领域的应用包括: R语言编…