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

news2024/12/23 10:26:10

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

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

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

⛄ 部分代码

%%PNACO

%%New hybrid methods to solve the model of traveling salesman problem based-on meta-heuristic method

%% A thesis Submitted to the College of Education for Pure Sciences,

%% Tikrit University as a Partial Fulfillment of Requirements for the Degree 

%% of Master of Sciences in Mathematics

%% By (Warif B.B. Yahia)&(Dr Mohammed W. Al-Neama)&(Dr. Ghassan E. Arif)

%% 2020 A.D = 1441 A.H

%% The main idea of the NACO method is to reduce the distance matrix generated 

%by the cities which the salesman must to visits. Where the NACO try to merge the

%cities by building a phylogenetic tree and then generating a new matrix called

%LEAF1 which represent the first stage of the joined leaves.When the salesman

%reach any city within this matrix,he will move directly to the next 

%corresponding city without doing any computations. 

%% Start with ACO 

clc;

clear;

close all;

profile on 

for s=2:2

%% Read the Dataset

D_Set=CreateD_Set('5.txt');

% D_Set=D_Set1;

% % load('D_Set.mat');

% D_Set1=D_Set;

CostFunction=@(tour) L_Tour(tour,D_Set);

no_Var=D_Set.n;

%% 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);          

profile viewer

% filename = 'resuls.xlsx';

% A = {Time,num2str(BC(it)),no_Var,Iteration};

% sheet = 1;

% xlRange = 'A22';

% xlswrite(filename,A,sheet,xlRange)

%filename = 'resuls.xlsx';

%A = {Time,num2str(BC(it)),no_Var,Iteration};

%sheet = 1;

%cell_num = sprintf('A%s',num2str(s));

%xlRange = cell_num;

%xlswrite(filename,A,sheet,xlRange)

end

%%% Results4

figure;

plot(BC,'LineWidth',2);

xlabel('Iteration');

ylabel('Best Cost');

grid on;

% saveas(gcf,'It_BC_48_N_1.png');

% filename = 'resuls.xlsx';

% A = {'Time(s)','Best Cost','no Cities','no it'};

% sheet = 2;

% xlRange = 'A1';

% xlswrite(filename,A,sheet,xlRange)

⛄ 运行结果

⛄ 参考文献

"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

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

 

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

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

相关文章

(附源码)node.js学生钟点工管理系统 毕业设计 290011

学生钟点工管理系统 摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,学生钟点工管理系统当然也不能排除在外。学生钟点工管理系统是以实际运用为开发背景,运用…

docker(2):docker常用命令

目录帮助命令镜像命令docker imagesdocker searchdocker pulldocker rmi容器命令docker rundocker psdocker rm启动/停止/退出其他常用命令后台启动docker logsdocker topdocker inspectdocker execDocker attachdocker cp命令大全总结所有命令请查看帮助文档:https…

[附源码]Python计算机毕业设计SSM基于售楼系统(程序+LW)

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

Span 抽取和元学习能碰撞出怎样的新火花,小样本实体识别来告诉你!

作者:王嘉宁、汪诚愚、谭传奇、邱明辉、黄松芳、黄俊、高明 近日,阿里云机器学习平台PAI与华东师范大学高明教授团队、达摩院机器智能技术NLP团队合作在自然语言处理顶级会议EMNLP2022上发表基于Span和元学习的小样本实体识别算法SpanProto。这是一种面…

界面控件DevExtreme DataGrid——一个多用途的UI组件

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序,该套件附带功能齐…

【视频】什么是非线性模型与R语言多项式回归、局部平滑样条、 广义相加GAM分析工资数据|数据分享...

全文链接:http://tecdat.cn/?p9706在这文中,我将介绍非线性回归的基础知识。非线性回归是一种对因变量和一组自变量之间的非线性关系进行建模的方法。最后我们用R语言非线性模型预测个人工资数据(查看文末了解数据获取方式)是否每…

《人月神话》(The Mythical Man-Month)看清问题的本质:如果我们想解决问题,就必须试图先去理解它...

第一章 焦油坑(The Tar Pit)史前史中,没有比巨兽在焦油坑中垂死挣扎的场面更令人震撼的了。上帝见证着恐龙、猛犸象、剑齿虎在焦油中挣扎。它们挣扎得越是猛烈,焦油纠缠得越紧,没有任何猛兽足够强壮或具有足够的技巧&a…

Linux简化版线程池

目录 一,线程池设计 二,线程池应用场景 三,线程池准备 1,包装一个锁 2,一个任务类 三,线程池 1,成员介绍 2,设计单例模式 3,创建线程池 4,线程池执…

【吴恩达机器学习笔记】十六、应用实例:图片文字识别

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为学习吴恩达机器学习视频的同学提供的随堂笔记。 📚专栏简介:在这个专栏,我将整理吴恩达机器学习视频的所有内容的笔记&…

【Linux】Zabbix5.0平台的搭建

文章目录项目背景视频展演一、Linux基础配置1、查看当前系统版本2、修改主机名3、修改 IP 地址4、配置防火墙5、关闭 SELINUX6、修改系统时间及时区7、配置 YUM 库方式 1方式 2二、安装apache1、安装 apache2、启动 apache 服务3、设置 httpd 服务开机启动4、查看服务状态5、防…

深度学习——制作自己的VOC图像分割数据集

1、数据集介绍 COCO数据集有80个类别,VOC数据集有20个类别。当这些数据集类别中没有自己需要的时候,就需要自己动手做自己的数据集了。 我自己在做数据集的时候主要使用到了labelme和labelImg两个工具。labelme主要是制作语义分割数据集(ImageSets,JPEGImages,SegmentationC…

kubernetes 1.18 部署 ingress-nginx

文章目录kubernetes 1.18 部署 ingress-nginx1. 下载 yaml 文件2. 安装 ingress-nginx3. 检查安装情况4. 测试验证4.1 查看ingress规则4.2 访问测试5. 其他内容kubernetes 1.18 部署 ingress-nginx 1. 下载 yaml 文件 在 GitHub 下载完成之后可以直接使用,不需要修…

[基因遗传算法]进阶之三:sko.GA的实践TSP

参考资料:《VRP问题分类》 相关文章: 《[基因遗传算法]原理思想和python代码的结合理解之(一) :单变量》 《[基因遗传算法]进阶之二:最优规划问题–多种编码方式多变量》 文章目录一. GA的用法1.1 help(sko.GA)1.2 目标函数的书写A. 单变量的书写B. 多变量的书写C. 变量的范围…

mysql中的B+树、索引跳跃扫描

普通索引 B树的叶子节点上记录的是聚簇索引(主键索引)的值。 联合索引 叶子节点中记录的是name,age两个字段以及主键id的值。 MySQL一定是遵循最左前缀匹配的,这句话在mysql8以前是正确的,没有任何毛病。但是在M…

(文章复现)7.计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度(MATLAB程序)

联系方式:2645521500 复现文章: 计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度——孙惠娟(电网技术—2020) 摘要: 为了促进多能源互补及能源低碳化,本文提出了计及电转气协同的含碳捕集与垃圾焚…

有手就会做,保姆级Jmeter分布式压测操作流程(图文并茂)

分布式压测原理 分布式压测操作 保证本机和执行机的JDK和Jmeter版本一致 配置Jmeter环境变量 配置Jmeter配置文件 上传每个执行机服务jmeter chmod -R 755 apache-jmeter-5.1.1/ 执行机配置写自己的ip 控制机配置所有执行机ip,把server.rmi.ssl.disable改成true 将本机也作…

Java-1208

JVM与Java体系结构 JVM整体结构(上图主要针对hotspot虚拟机) 类加载器: 将字节码文件加载进去,并不一定是java字节码文件,很多语言都会编译成字节码文件使用JVM 运行时数据区: 方法区和堆:使用了…

毕业设计 STM32单片机智能WiFi天气助手 - 物联网 单片机

文章目录0 前言1 设计内容2 软件设计3 关键代码4 最后0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不…

Go设计与实现--数组与切片

数组 初始化 Go语言数组的初始化是在编译期就已经执行好了。这个是初始化的代码&#xff1a; // NewArray returns a new fixed-length array Type. func NewArray(elem *Type, bound int64) *Type {if bound < 0 {base.Fatalf("NewArray: invalid bound %v", …

Security实现前后端分离

Security实现前后端分离 说明 ​ 上一篇和上上一篇我大致介绍了一下security基础使用和oauth2的一些流程&#xff0c;这里在深入了解一些相关的配置项。 ​ 首先我们在梳理一下相关概念&#xff0c;首先基本的security是负责用户认证这这一环节&#xff0c;总而言之就是用户…