DeepACO:用于组合优化的神经增强蚂蚁系统解决TSP问题的代码阅读

news2024/10/10 22:31:41

总体概括

在这里插入图片描述
DeepACO与普通ACO不同的是将问题输入实例输入到一个训练的网络中,将网络训练成为一个类似于专家知识的模块,可以生成相应的启发式矩阵网络,从而省去相应的专家知识。
其中在训练网络的代码中:
在这里插入图片描述
是进行监督式训练通过train_epochs函数进行一次训练然后通过validation函数对模块进行校验。接下来分别从这两个函数进行细致的讲述。

1.训练函数train_epoch()

train_epoch函数其实特别的简单就是调用utils文件中的gen_pyg_data函数输入:
instance:这是输入到 gen_pyg_data 函数的第一个参数,它是一个形状为(n_node, 2) 的张量,表示每个节点的特征。这些特征通常用于表示节点在二维空间中的位置。(instance 是一个由 PyTorch 生成的随机张量。具体来说,它是一个形状为 (n_node, 2) 的张量,其中 n_node 是一个变量,表示节点的数量,而 2 表示每个节点有两个特征)
k_sparse:这是输入到 gen_pyg_data 函数的第二个参数,它是一个整数,表示稀疏度。稀疏度决定了生成的图中的边数。具体来说,k_sparse 表示每个节点连接到其最近的 k_sparse 个邻居节点的边数。
在这里插入图片描述

gen_pyg_data 函数的具体实现如下:
首先,计算节点数 n_nodes。
然后,调用 gen_distance_matrix(tsp_coordinates) 函数生成距离矩阵 distances。
接着,使用 torch.topk 函数获取距离矩阵中前 k_sparse 个最小值和对应的索引。
然后,生成边索引 edge_index,其中第一个维度是重复的节点索引,第二个维度是前 k_sparse 个最小值的索引。
生成边属性 edge_attr,将前 k_sparse 个最小值展平。
最后,生成图数据 pyg_data,包含节点坐标、边索引和边属性。
x 是节点特征,即 tsp_coordinates,表示每个城市的坐标。
edge_index 是边的索引,即 edge_index,表示城市之间的连接关系。
edge_attr 是边的属性,即 edge_attr,表示城市之间的距离。
返回图数据和距离矩阵
在这里插入图片描述
train_instance主要是负责训练实例函数,通过蚁群优化算法和强化学习来优化路径成本。训练完成后,模型参数将根据优化结果进行更新。
在这里插入图片描述

训练实例的作用是使用给定的神经网络(net)和优化器(optimizer)对数据进行训练。具体来说,train_instance 函数会执行以下步骤:
	数据准备:从 data 中提取训练数据,包括位置和距离矩阵。
	初始化:设置一些训练参数,如训练轮数(epochs)和批处理大小(batch_size)。
	训练循环:对于每一轮训练,执行以下操作:
		将数据输入到神经网络中,得到预测结果。
		计算预测结果和真实值之间的损失(loss)。
		使用优化器更新神经网络的权重,以最小化损失。
	评估:在每一轮训练后,评估模型在验证集上的表现,并记录损失值。
通过这个过程,神经网络会逐渐学习如何根据输入的位置和距离矩阵预测最优路径。训练完成后,模型可以用于预测新的实例,从而解决项目调度问题。

2.验证函数validation()

验证函数使用验证数据集通过infer_instance函数在给定模型和图数据的情况下,返回基线、采样成本最小值和ACO算法最小成本。然后validation函数返回avg_bl:平均的预测结果。avg_sample_best:平均的样本最佳结果。avg_aco_best:平均的蚁群优化最佳结果。
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

虚幻引擎GAS入门学习笔记(一)

虚幻引擎GAS入门(一) Gameplay Ability System(GAS) 是一个模块化且强大的框架,用于管理虚幻引擎中的游戏玩法逻辑。它的核心组成部分包括 Gameplay Ability(定义和执行能力)、Gameplay Effect(应用和管理…

数字安全新时代:聚焦关键信息基础设施安全保障——The Open Group 2024生态系统架构·可持续发展年度大会盛大来袭

在全球数字化转型的浪潮中,关键信息基础设施(Critical Information Infrastructure,简称CII)的安全保障已成为各国政府和企业共同关注的焦点。随着技术的飞速发展和网络威胁的日益复杂,如何构建高效、灵活且安全的数字…

“Flash闪存”基础 及 “SD NAND Flash”产品的测试介绍

目录 一、“FLASH闪存”是什么? 1. 简介 2. 分类 3. 特点 4. 虚拟化 二、SD NAND Flash 1. 概述 2. 特点 3. 引脚分配 4. 数据传输模式 5. SD NAND寄存器 6. 通电图 7. 参考设计 三、STM32测试例程 1. 初始化 2. 单数据块测试 3. 多数据块测试 4.…

SSD | (一)SSD综述

文章目录 📚SSD综述🐇SSD基本结构🐇SSD与HDD🐇SSD基本工作原理⭐SSD请求处理流程⭐SSD主要组成模块⭐SSD读写操作 🐇SSD产品核心指标⭐基本信息⭐性能指标⭐数据可靠性和寿命⭐功耗 📚可计算存储 &#x1f…

VueRouter前端路由

文章目录 VueRouter前端路由VueRouter 简介安装vuerouter配置router文件子路由路由重定向 VueRouter前端路由 VueRouter 简介 安装vuerouter npm install vue-router4yarn add vue-router4配置router文件 import { createRouter, createWebHistory } from vue-router; impor…

k8s--二进制包部署及常见报错解决方法

部署流程 所有基础流程见此教程,很详细: 从零搭建k8s集群 - 许大仙 - 博客园 (cnblogs.com) 记得在写配置文件时细心点,注意修改自己的ip地址,以及看在哪个主机上操作 这里记得写自己的token 常见报错及解决方法 我只在下边讲…

GDPU Vue前端框架开发 ecmascript6初步使用

前端框架基础,打造你的前端应用。 箭头函数 使用箭头函数实现求多个数的和,可以有一个参数,也可以有多个或零个参数。 let sum (...numbers) > {return numbers.reduce((acc, curr) > acc curr, 0);};let asum(); let bsum(1); let…

实战千问2大模型第五天——VLLM 运行 Qwen2-VL-7B(多模态)

一、简介 VLLM 是一种高效的深度学习推理库,通过PagedAttention算法有效管理大语言模型的注意力内存,其特点包括24倍的吞吐提升和3.5倍的TGI性能,无需修改模型结构,专门设计用于加速大规模语言模型(LLM)的…

生成对抗网络(GAN,Generative Adversarial Network)

生成对抗网络(GAN,Generative Adversarial Network)是一种深度学习模型,由两部分组成:生成器(Generator)和判别器(Discriminator)。生成器的目标是生成逼真的样本&#x…

Xinstall品牌揭秘:如何成为App拉新的行业翘楚?

在移动互联网时代,App作为连接用户与服务的桥梁,其重要性不言而喻。然而,随着市场竞争的加剧,App拉新(即吸引新用户下载并使用App)的难度也在逐渐增大。传统的营销方式往往面临着成本高、效率低、用户留存差…

理解PID(零)——什么是PID

PID控制器是一种广泛用于各种工业控制场合的控制器,它结构简单,可以根据工程经验整定参数Kp,Ki,Kd. 虽然现在控制专家提出了很多智能的控制算法,比如神经网络,模糊控制等,但是PID仍然被广泛使用。常见的PID控制器有位置…

视频怎么转gif动图?5个简单转换方法快来学(详细教程)

相信大家在社交平台上会经常看到一些有趣的gif动图表情包,有些小伙伴就会问:这些GIF动图是如何制作的呢?一般GIF动图表情包可以用视频来制作,今天小编就来给大家分享几个视频转成GIF动图的方法,相信通过以下的几个方法…

文献阅读CONCH模型--相关知识点罗列

文章链接:A visual-language foundation model for computational pathology | Nature MedicineThe accelerated adoption of digital pathology and advances in deep learning have enabled the development of robust models for various pathology tasks across…

【可答疑】基于51单片机的智能家居系统(含仿真、代码、报告、演示视频等)

✨哈喽大家好,这里是每天一杯冰美式oh,985电子本硕,大厂嵌入式在职0.3年,业余时间做做单片机小项目,有需要也可以提供就业指导(免费)~ 🐱‍🐉这是51单片机毕业设计100篇…

ceph基础

ceph基础搭建 存储基础 传统的存储类型: DAS设备: SAS,SATA,SCSI,IDW,USB 无论是那种接口,都是存储设备驱动下的磁盘设备,而磁盘设备其实就是一种存储是直接接入到主板总线上去的。直连存储。 NAS设备: NFS CIFS FTP 几乎所有的…

商标恶意维权形式及应对策略

在商业领域,商标恶意维权的现象时有出现,给正常的市场秩序和企业经营带来了不良影响。以下将介绍其常见形式及应对方法。 一、商标恶意维权的形式1、囤积商标后恶意诉讼。一些人或企业大量注册与知名品牌相似或具有一定通用性的商标,并非用于…

留学生毕业论文设计问卷questionnaire的基本步骤

在上一期内容中,小编介绍了留学毕业论文的定量研究和相关的问卷设计。然而在一些研究中,定量研究和问卷数据并不能满足我们的研究需求。这种情况下,我们可以采取其他的数据收集方式,例如observation,case study和inter…

软件设计之SSM(11)

软件设计之SSM(11) 路线图推荐: 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版SSM框架全套视频教程,Spring6SpringBoot3最新SSM企业级开发 资料可以去尚硅谷官网免费领取 学习内容: Springboot 配置文件整合SpringMVC整合Dr…

【学术会议征稿】第十届能源资源与环境工程研究进展国际学术会议(ICAESEE 2024)

第十届能源资源与环境工程研究进展国际学术会议(ICAESEE 2024) 2024 10th International Conference on Advances in Energy Resources and Environment 第十届能源资源与环境工程研究进展国际学术会议(ICAESEE 2024)定于2024年…

拓扑排序与入度为0的结点算法解析及实现

拓扑排序与入度为0的结点算法解析及实现 算法思想时间复杂度分析伪代码C语言实现环路检测结论拓扑排序是一种用于有向无环图(DAG, Directed Acyclic Graph)的重要操作,它可以对图中的结点进行排序,使得对于每一条有向边 (u, v),顶点 u 在排序中都出现在顶点 v 之前。本文介…