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

基于连续Hopfield神经网络优化——旅行商问题优化计算

        大家好,我是带我去滑雪!

        利用神经网络解决组合优化问题是神经网络应用的一个重要方面。所谓组合优化问题,就是在给定约束条件下,使目标函数极小(或极大)的变量组合问题。将Hopfield网络应用于求解组合优化问题,把目标函数转化为网络的能量函数,把问题的变量对应到网络的状态,这样,当网络的能量函数收敛于极小值时,问题的最优解也随之求出。由于神经网络是并行计算的,其计算量不随维数的增加而发生指数性“爆炸”,因而对于组合优化问题的高速计算特别有效。典型的组合优化问题有旅行商问题、0-1背包问题、装箱问题、图着色问题、聚类问题等问题。这些问题的描述都非常简单,但优化求解很困难,其主要原因是求解这些问题的算法运行时,需要极长的运行时间和极大的存储空间。

        本期使用连续Hopfield神经网络实现旅行商问题优化计算。

一、问题与模型设计 

(1)问题描述

       旅行商问题,(Traveling Saleman Problem,TSP)是VRP的特例,由于Gaery[1]已证明TSP问题是NP难题,因此,VRP也属于NP难题。旅行商问题(TSP)又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。

        现对于一个城市数量为10的TSP问题,要求设计一个可以对其组合优化的连续型Hopfield神经网络模型,利用改模型可以快速地找到最优(或者近似最优)的一条路线。

(2)模型建立思路

        由于连续型Hopfield神经网络具有优化计算的特性,因此将TSP问题的目标函数(即最短路径)与网络的能量函数相对应,将经过的城市顺序与网络的神经元状态相对应。这样,由连续型Hopfield神经网络的稳定性定理知,当网络的能量函数趋于最小值时,网络的神经元状态也趋于平衡点,此时对应的城市顺序即为最佳的路线。

(3)设计步骤

       模型映射:为了将TSP问题映射为一个神经网络的动态过程,Hopfield神经网络采取换位矩阵的表示方式,用NxN的矩阵表示商人访问N个城市。对于N个城市TSP问题,使用NxN个神经元来实现,而每行每列只能有一个1,其余都是0,矩阵中1的和为N,该矩阵成为换位矩阵。

        构造网络能量函数和动态方程:设计的Hopfield神经网络的能量函数与目标函数(即最短路径)相对应的。同时,考虑到有效解的实际意义,即换位矩阵的每行每列都只能有一个1。因此,网络的能量函数包含目标项和约束项两部分。

        初始化网络:Hopfield神经网络迭代过程对网络的能量函数及动态方程的系数十分敏感,在总结前人经验及多次实验的基础上,网络输入初始化选取如下:A=200,D=100,采样时间设置为0.0001,迭代次数为10000。

       优化计算:当网络的结果及参数设计完成后,迭代优化计算的过程就变得非常简单,具体步骤:

步骤1:导入N个城市的位置坐标并计算城市之间的距离;

步骤2:网络初始化;

步骤3:计算能量函数;

步骤4:判断迭代次数是否结束,若迭代次数大于10000,则终止。

二、代码实现

(1)清空环境变量、声明全局变量

clear all
clc
global A D

(2)城市位置导入并计算城市间距离

load city_location
distance = dist(citys,citys');

(3)初始化网络

N = size(citys,1);
A = 200;
D = 100;
U0 = 0.1;
step = 0.0001;
delta = 2 * rand(N,N) - 1;
U = U0 * log(N-1) + delta;
V = (1 + tansig(U/U0))/2;
iter_num = 10000;
E = zeros(1,iter_num);

 (4)寻优迭代

        寻优迭代过程包括动态方程计算、输入神经元状态更新、输出神经元状态更新、能量函数计算四个步骤。 

for k = 1:iter_num  dU = diff_u(V,distance);U = U + dU*step;V = (1 + tansig(U/U0))/2;e = energy(V,distance);E(k) = e;  
end

(5)动态方程计算

function du=diff_u(V,d)
global A D
n=size(V,1);
sum_x=repmat(sum(V,2)-1,1,n);
sum_i=repmat(sum(V,1)-1,n,1);
V_temp=V(:,2:n);
V_temp=[V_temp V(:,1)];
sum_d=d*V_temp;
du=-A*sum_x-A*sum_i-D*sum_d;

(6)能量函数计算

function E=energy(V,d)
global A D
n=size(V,1);
sum_x=sumsqr(sum(V,2)-1);
sum_i=sumsqr(sum(V,1)-1);
V_temp=V(:,2:n);
V_temp=[V_temp V(:,1)];
sum_d=d*V_temp;
sum_d=sum(sum(V.*sum_d));
E=0.5*(A*sum_x+A*sum_i+D*sum_d);

(7)主函数

[rows,cols] = size(V);
V1 = zeros(rows,cols);
[V_max,V_ind] = max(V);
for j = 1:colsV1(V_ind(j),j) = 1;
end
C = sum(V1,1);
R = sum(V1,2);
flag = isequal(C,ones(1,N)) & isequal(R',ones(1,N));%% 结果显示
if flag == 1% 计算初始路径长度sort_rand = randperm(N);citys_rand = citys(sort_rand,:);Length_init = dist(citys_rand(1,:),citys_rand(end,:)');for i = 2:size(citys_rand,1)Length_init = Length_init+dist(citys_rand(i-1,:),citys_rand(i,:)');end% 绘制初始路径figure(1)plot([citys_rand(:,1);citys_rand(1,1)],[citys_rand(:,2);citys_rand(1,2)],'o-')for i = 1:length(citys)text(citys(i,1),citys(i,2),['   ' num2str(i)])endtext(citys_rand(1,1),citys_rand(1,2),['       起点' ])text(citys_rand(end,1),citys_rand(end,2),['       终点' ])title(['优化前路径(长度:' num2str(Length_init) ')'])axis([0 1 0 1])grid onxlabel('城市位置横坐标')ylabel('城市位置纵坐标')% 计算最优路径长度[V1_max,V1_ind] = max(V1);citys_end = citys(V1_ind,:);Length_end = dist(citys_end(1,:),citys_end(end,:)');for i = 2:size(citys_end,1)Length_end = Length_end+dist(citys_end(i-1,:),citys_end(i,:)');enddisp('最优路径矩阵');V1% 绘制最优路径figure(2)plot([citys_end(:,1);citys_end(1,1)],...[citys_end(:,2);citys_end(1,2)],'o-')for i = 1:length(citys)text(citys(i,1),citys(i,2),['  ' num2str(i)])endtext(citys_end(1,1),citys_end(1,2),['       起点' ])text(citys_end(end,1),citys_end(end,2),['       终点' ])title(['优化后路径(长度:' num2str(Length_end) ')'])axis([0 1 0 1])grid onxlabel('城市位置横坐标')ylabel('城市位置纵坐标')% 绘制能量函数变化曲线figure(3)plot(1:iter_num,E);ylim([0 2000])title(['能量函数变化曲线(最优能量:' num2str(E(end)) ')']);xlabel('迭代次数');ylabel('能量函数');
elsedisp('寻优路径无效');
end

(8)结果输出

       优化前的路径:

      优化后的路径图:

      优化后的路径距离相比于没有优化的路径距离更短。

      能量函数变化曲线:

       结果表明:利用Hopfield神经网络 ,可以快速准确地解决TSP问题。同理,对于其他利用枚举法会产生“组合爆炸”的组合优化问题,利用连续型Hopfield神经网络也可以进行优化计算。

需要数据集的家人们可以去百度网盘(永久有效)获取:

链接:
提取码:2138 


更多优质内容持续发布中,请移步主页查看。

   点赞+关注,下次不迷路!

相关文章:

基于连续Hopfield神经网络优化——旅行商问题优化计算

大家好,我是带我去滑雪! 利用神经网络解决组合优化问题是神经网络应用的一个重要方面。所谓组合优化问题,就是在给定约束条件下,使目标函数极小(或极大)的变量组合问题。将Hopfield网络应用于求解组合优化问…...

SpringBoot整合Activiti7——定时器事件(九)

文章目录 定时器事件时间定义时间固定时间段时间周期 1.开始事件2.中间事件3.边界事件代码实现xml文件自定义服务任务监听器自定义用户任务监听器测试流程流程执行步骤 定时器事件 可以用在开始事件、中间事件、边界事件上,边界事件可以是中断和非中断边界事件 需要…...

轻量封装WebGPU渲染系统示例<29>- 深度模糊DepthBlur(源码)

实现方式: step1. 通过mrt机制,输出颜色和深度相关数据的两张rtt纹理。 step2. 基于上述颜色纹理,生成一张模糊之后的新rtt纹理。 setp3. 基于深度(也就是距离摄像机的远近)数据,合成颜色和模糊纹理数据,并最终输出。 当前示例…...

LeetCode226. Invert Binary Tree

文章目录 一、题目二、题解2.1 前序遍历版本2.2 中序遍历版本2.3 后序遍历版本 一、题目 Given the root of a binary tree, invert the tree, and return its root. Example 1: Input: root [4,2,7,1,3,6,9] Output: [4,7,2,9,6,3,1] Example 2: Input: root [2,1,3] Ou…...

Java设计模式-创建型模式-建造者模式

建造者模式 建造者模式案例与工厂模式的区别:Builder 注解 建造者模式 建造者模式是将一个复杂对象的构件与表示分离,使得同样的构件过程可以创建不同的表示。 建造者模式将内部构件的创建和组装分割开,一般使用链式编程,代码整洁…...

PyQt中QFrame窗口中的组件不显示的原因

文章目录 问题代码(例)原因和解决方法 问题代码(例) from PyQt5.QtWidgets import * from PyQt5.QtGui import QFont, QIcon, QCursor, QPixmap import sysclass FrameToplevel(QFrame):def __init__(self, parentNone):super().…...

git 命令行回退版本

git 命令行回退版本 git 命令行回退版本命令: 1.切换到需要回退的分支 git checkout branch-v2.0.02.更新远程分支 git fetch3.找到需要回退版本的版本号git revert a6914da55ff40a09e67ac2426b86f1212e6580eb4.清除工作区缓存git clean -df5.强制提交git push -f...

IntelliJ IDEA 安装 GitHub Copilot插件 (最新)

注意: GitHub Copilot 插件对IDEA最低版本要求是2021.2,建议直接用2023.3,一次到位反正后续要升级的。 各个版本的依赖关系,请参照: ##在线安装: 打开 IntelliJ IDEA扩展商店,输入 "Git…...

viewpage选择器

GitHub - hackware1993/MagicIndicator: A powerful, customizable and extensible ViewPager indicator framework. As the best alternative of ViewPagerIndicator, TabLayout and PagerSlidingTabStrip —— 强大、可定制、易扩展的 ViewPager 指示器框架。是ViewPagerIndi…...

vue中如何将json数组指定的key赋值给el-form-item并均匀的分成2列

在Vue中&#xff0c;你可以使用v-for指令来遍历JSON数组&#xff0c;并将指定的key赋值给el-form-item。下面是一个示例&#xff1a; <template><el-form><el-row><el-col :span"6" v-for"item in jsonArray" :key"item.key&qu…...

笔记本分屏怎么操作?3个方法提高工作效率!

“有朋友知道笔记本怎么才能实现分屏吗&#xff1f;我在工作时&#xff0c;经常需要来回切换屏幕&#xff0c;效率真的太低了&#xff0c;有什么方法可以实现两个屏幕同时使用吗&#xff1f;” 在现代生活中&#xff0c;多任务处理已成为常态&#xff0c;而笔记本分屏技术为用户…...

Android 使用poi生成Excel ,word并保存在指定路径内

一添加依赖&#xff08;一定要用新版依赖防止一些bug&#xff09; minSdk 26 //注意最小支持SDK26 dependencies {implementation org.apache.poi:poi:5.2.4implementation org.apache.poi:poi-ooxml:5.2.4implementation javax.xml.stream:stax-api:1.0-2 }二&#xff0c;创…...

嵌入式杂记 -- MCU的大小端模式

MCU的大小端模式 大端模式小端模式大小端模式测试联合体概念MCU大小端模式测试大端模式测试小端模式测试 大小端模式转换 在进行MCU开发的时候&#xff0c;我们需要注意MCU的数据存储模式&#xff0c;在嵌入式中有两种不同的存储模式&#xff0c;分别是 大端模式和小端模式。 …...

对这套BI零售数据分析方案心动,是零售人天性

零售数据分析做了这么多年&#xff0c;难道真的没累积点经验&#xff0c;摸索出一条又快又能满足绝大多数需求的数据分析捷径&#xff1f;别人不知道&#xff0c;奥威BI还真就有这么一套标准化的BI零售数据分析方案&#xff0c;不管是服装零售、医药连锁、商超都能利用这套方案…...

vuekeyclock 集成

前端集成keycloak鉴权的主要写法&#xff0c; 在main.js里面写 import VueKeycloakJs from dsb-norge/vue-keycloak-js import { KeycloakInstance } from "keycloak-js";// 回调地址 const pageIndex process.env.NODE_ENV production ? http://xxxx/#/ : http:…...

ARM Linux 基础学习 / 配置交叉编译工具链 / 编译 Linux 应用和驱动 / 编译内核

编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料&#xff08;如 百问网的《嵌入式Linux应用开发完全手册》&#xff0c;在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO&#xff1a;开发板资料》或《2.2 全系列Linux教程&#xf…...

通讯协议学习之路(实践部分):SPI开发实践

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 本文…...

【系统安装】ubuntu20.04启动盘制作,正经教程,小白安装教程,百分百成功安装

1.所需材料&#xff1a; 64GBU盘&#xff08;其实8g和16g也可以&#xff09; 2.制作U盘启动盘 使用windows制作ubuntu 20.04启动盘 1&#xff09;下载制作工具&#xff1a;Rufus&#xff1a;Rufus - 轻松创建 USB 启动盘 2&#xff09;插入用来做启动盘的U盘 3&#xff0…...

2023云计算发展趋势

目录 一、云计算是什么&#xff1f; 二、云计算发展趋势 三、总结 一、云计算是什么&#xff1f; 云计算是一种基于互联网的计算方式&#xff0c;通过网络连接的方式提供计算能力、存储服务、应用程序和数据资源。它通常通过虚拟化技术实现多个计算机资源的池化&#xff0c;…...

C# .NET Core API Controller以及辅助专案

准备工作 Windows 10Visual Studio 2019(2017就有可以集中发布到publish目录的功能了吧)C#将方法封装(据说可以提高效率,就像是我们用的dll那种感觉新增专案作为我们API的辅助专案(作用类似dll&#xff0c;此处&#xff0c;你也可以在你自己的API专案里建文件夹&#xff0c;但…...

镜像视界|大模型+空间智能:公安视频系统迈入“目标持续掌控时代”——融合多视角三角测量、动态三维重构与行为认知引擎的无感定位体系

&#x1f4d8; 镜像视界&#xff5c;大模型空间智能&#xff1a;公安视频系统迈入“目标持续掌控时代”——融合多视角三角测量、动态三维重构与行为认知引擎的无感定位体系一、时代转折&#xff1a;公安视频系统进入“大模型时代”近年来&#xff0c;以大模型为代表的新一代人…...

Memfit AI 渗透测试智能体,到底能不能打?

深度测评&#xff1a;Memfit AI 渗透测试智能体&#xff0c;到底能不能打&#xff1f; 写在前面&#xff1a;这篇文章我写了整整一周&#xff0c;从安装部署到实际测试&#xff0c;把 Memfit AI 这个号称"下一代 AI 渗透测试平台"的工具从头到尾摸了一遍。先说结论&a…...

AI 模型推理中的延迟分析与测试

AI 模型推理中的延迟分析与测试 在人工智能技术快速发展的今天&#xff0c;AI 模型的推理性能成为影响实际应用效果的关键因素之一。无论是智能语音助手、自动驾驶&#xff0c;还是实时推荐系统&#xff0c;延迟的高低直接决定了用户体验的好坏。对 AI 模型推理的延迟进行分析…...

插件冲突频发?三招让你的WPS回归清爽

插件冲突频发&#xff1f;三招让你的WPS回归清爽 【免费下载链接】WPS-Zotero An add-on for WPS Writer to integrate with Zotero. 项目地址: https://gitcode.com/gh_mirrors/wp/WPS-Zotero 当你在WPS中处理学术文档时&#xff0c;突然发现工具栏上出现了两个Zotero插…...

【OpenCore Configurator】:解决黑苹果配置难题的智能化解决方案

【OpenCore Configurator】&#xff1a;解决黑苹果配置难题的智能化解决方案 【免费下载链接】OpenCore-Configurator A configurator for the OpenCore Bootloader 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Configurator OpenCore Configurator作为一款针…...

72小时数字记忆拯救计划:GetQzonehistory全方位备份方案

72小时数字记忆拯救计划&#xff1a;GetQzonehistory全方位备份方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 记忆保卫战&#xff1a;当十年说说面临消失危机 "您的QQ空间数…...

河海大学819传热学考研复试备考资料(新能源学院·清洁能源技术专硕专用)

温馨提示&#xff1a;文末有联系方式【权威备考】河海大学819传热学复试专属资料包 本资料由2025届成功录取河海大学新能源学院清洁能源技术专业硕士的学长亲自整理&#xff0c;初试与复试综合成绩稳居前三&#xff0c;内容高度贴合最新考核趋势。【高效提分利器】核心资料全覆…...

STM32F407实战:用CubeMX+FreeRTOS+SDIO+FatFs,5分钟搞定SD卡文件读写

STM32F407实战&#xff1a;5分钟极速实现SD卡文件系统全流程 拿到一块STM32F407开发板时&#xff0c;如何快速验证SD卡文件读写功能&#xff1f;这套组合方案或许能帮你省下大量调试时间——CubeMX生成基础框架、FreeRTOS管理任务调度、SDIO硬件接口驱动配合FatFs文件系统&…...

Vue2项目实战:v-md-editor从安装到二次封装全流程(附常见问题解决)

Vue2项目深度整合v-md-editor&#xff1a;从核心配置到企业级封装实践 在内容管理系统的开发中&#xff0c;Markdown编辑器已成为技术文档、博客平台和知识库系统的标配组件。v-md-editor作为Vue生态下功能完备的Markdown解决方案&#xff0c;其双栏实时预览、深度定制能力和丰…...

百度网盘提取码智能查询工具:3秒破解资源访问密码的终极方案

百度网盘提取码智能查询工具&#xff1a;3秒破解资源访问密码的终极方案 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘加密资源而困扰吗&#xff1f;当你急需下载学习资料、软件安装包或娱乐资源时&#xff0…...