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

总体概括

在这里插入图片描述
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.mzph.cn/diannao/55836.shtml

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

相关文章

大模型基础:基本概念、Prompt、RAG、Agent及多模态

随着大模型的迅猛发展,LLM 作为人工智能的核心力量,正以前所未有的方式重塑着我们的生活、学习和工作。无论是智能语音助手、自动驾驶汽车,还是智能决策系统,大模型都是幕后英雄,让这些看似不可思议的事情变为可能。本…

java中的I/O(8个案例+代码+效果图)

目录 1.File类 1)常用构造方法 1)File(String pathname) 2)File(String parent, String child) 3)File(File parent, String child) 2)常用方法 1)boolean canRead() 2)boolean canWrite() 3&am…

计算机网络——ftp

在网络通信中,控制连接和数据连接是两种不同类型的连接,它们各自具有特定的功能和用途。 一、控制连接 定义与功能: 控制连接主要用于在通信双方之间传输控制信息,以建立、维护和终止数据连接。它负责协调和管理数据传输的过程&am…

Leetcode - 周赛418

目录 一,3309. 连接二进制表示可形成的最大数值 二,3310. 移除可疑的方法 三,3311. 构造符合图结构的二维矩阵 四,3312. 查询排序后的最大公约数 一,3309. 连接二进制表示可形成的最大数值 本题数据范围较小&#…

chatGPT模型接口分享

前言: 仅供学习和交流,请合理使用。 API:https://api.gptnet.org key:sk-x9Rmq3HeHh5z9EIi8wFaXCl02OfxRSk5UAFodYm1o4zo5X3i 支持模型:gpt-3.5-turbo、gpt-3.5-turbo-16k、gpt-4o-mini、llama-3.1-405b 暂时支持以上四个模型…

Java基础-基础知识体系小结 Q/A

文章目录 知识体系Q&AJava 中应该使用什么数据类型来代表价格?怎么将 byte 转换为 String?Java 中怎样将 bytes 转换为 long 类型?存在两个类,B 继承 A,C 继承 B,我们能将 B 转换为 C 么? 如 C (C) B;Java 中 操作符是线…

Java初阶~~四种内部类总结

文章目录 1.内部类的分类2.局部内部类2.1.基本语法2.2就近原则的理解 3.匿名内部类3.1基于接口的匿名内部类3.2基于普通类的匿名内部类3.3基于抽象类的匿名内部类3.4匿名内部类的细节3.5匿名内部类实践3.5.1作为实参进行传递3.5.2实践案例 4.成员内部类4.1基本介绍4.2外部类&am…

5本一投就中的极速期刊,性价比高,1周-1个月录用,见刊极快!

在当今快节奏的学术界,研究者们不仅追求高质量的研究成果,还希望能够迅速地将这些成果分享给全球的同行。为此,科检易学术精心挑选了10本以高效审稿流程著称的期刊,这些期刊不仅性价比高,而且从投稿到录用的时间极短&a…

ARM base instruction -- asr

算术右移,结果带符号。 Arithmetic Shift Right (immediate) shifts a register value right by an immediate number of bits, shifting in copies of the sign bit in the upper bits and zeros in the lower bits, and writes the result to the destination reg…

SD NAND Flash 小容量存储解决方案及其STM32测试例程讲解

文章目录 前言一、Flash闪存是什么?二、SD NAND Flash三、STM32测试例程四、总结 前言 随着移动存储技术的快速发展和便携式数字设备的广泛应用,Flash闪存作为非易失性存储解决方案,在各种电子设备中扮演着越来越重要的角色。本文提供关于Fl…

【含开题报告+文档+PPT+源码】基于SpringBoot乡村助农益农平台的设计与实现

开题报告 近年来,随着社会经济的快速发展和人民生活水平的提高,人们对优质农产品的需求越来越高。然而,传统的农产品销售管理模式存在一些问题。首先,农产品供应链信息不透明,导致生产者难以了解市场需求和价格变动趋…

iMazing只能苹果电脑吗 Win和Mac上的iMazing功能有区别吗

在当今数字时代,管理和备份手机数据变得越来越重要。无论是转移照片、备份短信,还是管理应用程序,一个强大的工具可以大大简化这些操作。iMazing作为一款备受好评的iOS设备管理软件,已经成为许多用户的选择。但是,许多…

Anaconda创建环境

目录 前言 第一步:更改环境创建位置 第二步:安装环境 前言 在我们创建多个项目的时候,有时会安装的库版本冲突,所以最好是一个项目一个环境 第一步:更改环境创建位置 新安装Anaconda后,在创建环境时环…

Web安全 - 路径穿越(Path Traversal)

文章目录 OWASP 2023 TOP 10导图定义路径穿越的原理常见攻击目标防御措施输入验证和清理避免直接拼接用户输入最小化权限日志监控 ExampleCode漏洞代码:路径穿越攻击案例漏洞说明修复后的安全代码代码分析 其他不同文件系统下的路径穿越特性Windows系统类Unix系统&a…

ctfshow-web 萌新题

给她 spring漏洞 pyload: 1.dirsearch扫描&#xff0c;发现git 2. GitHack工具得到.git文件 <?php $passsprintf("and pass%s",addslashes($_GET[pass])); $sqlsprintf("select * from user where name%s $pass",addslashes($_GET[name])); ?>…

交换排序:冒泡排序、递归实现快速排序

目录 冒泡排序 1.冒泡排序的核心思想 2.冒泡排序的思路步骤 3.冒泡排序代码 4.代码分析 5.对冒泡排序的时间复杂度是O(N^2)进行解析 6.冒泡排序的特性总结 递归实现快速排序(二路划分版本) 1.快速排序基本思路 2.代码思路步骤 3.代码实现 4.代码分析 (1)递归终止条…

介绍几个电池充电管理芯片(TP4056、SGM40561)

TP4056 上一篇我们介绍了个TP4055&#xff0c;那么跟TP4055相比&#xff0c;TP4056肯定是做了升级的。 首先是有最高1000mA的充电电流&#xff0c;而TP4055是500mA。 一般来说我们尽可能的让充电电流接近电池容量的一半&#xff0c;这样对电池比较好。 充电电压都是4.2V。 …

vite学习教程06、vite.config.js配置

前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1a;Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。 博主所有博客文件…

五款专业三维数据处理工具:GISBox、Cesiumlab、OSGBLab、灵易智模、倾斜伴侣深度解析

随着三维数据处理技术的广泛应用&#xff0c;尤其是在城市规划、地理信息系统&#xff08;GIS&#xff09;、工程监测等领域&#xff0c;处理倾斜摄影、三维建模以及大规模数据管理的需求日益增加。以下是五款我精心挑选的倾斜摄影和三维数据处理工具——GISBox、Cesiumlab、OS…

Vue3入门学习

Vue3入门学习 1. Vue3简介1.1. 【性能的提升】1.2.【 源码的升级】1.3. 【拥抱TypeScript】1.4. 【新的特性】 2. 创建Vue3工程2.1. 【基于 vue-cli 创建】2.2. 【基于 vite 创建】(推荐)2.3. 【一个简单的效果】 3. Vue3核心语法3.1. 【OptionsAPI 与 CompositionAPI】Options…