Hopfield神经网络求解旅行商问题(Traveling Salesman Problem,TSP),提供完整MATLAB代码,复制粘贴即可运行

news2024/11/24 1:47:46

Hopfield神经网络是以美国物理学家约翰·霍普菲尔德(John Hopfield)的名字命名的。他在1982年提出了这种类型的神经网络模型,因此通常被称为Hopfield网络。Hopfield网络是一种早期的人工神经网络,具有以下特点:

  1. 递归连接:网络中的每个神经元都与其他所有神经元相连,形成一个高度耦合的网络。

  2. 单层网络:尽管Hopfield网络通常被视为单层网络,但它通过递归连接实现了类似于多层网络的功能。

  3. 能量函数:Hopfield网络定义了一个能量函数,网络的动态演化过程可以看作是能量函数的最小化过程。网络状态的稳定性与能量函数的局部极小值相关联。

  4. 稳定性:Hopfield网络具有稳定的吸引子状态,网络会收敛到这些状态之一。这些吸引子状态可以看作是网络的记忆或存储的模式。

  5. 联想记忆:Hopfield网络能够存储和回忆模式,即使在输入模式不完全或有噪声的情况下也能做到这一点。

  6. 优化问题:Hopfield网络可以用于解决优化问题,如旅行商问题(TSP),通过将问题的解决方案映射到网络的能量状态中,并寻找能量函数的最小值。

  7. 异步更新:在Hopfield网络中,神经元的状态更新通常是异步进行的,即在任何给定的时间步,只有一个神经元的状态会更新。

  8. 局部计算:每个神经元的状态更新只依赖于其当前的输入和网络的当前状态,不需要全局信息。

Hopfield神经网络主要用于优化问题和联想记忆。在旅行商问题(TSP)中,Hopfield网络通过能量函数的最小化来寻找问题的近似最优解。

原理介绍:

  1. 模型结构:Hopfield神经网络通常由神经元组成的二维网格构成,每个神经元对应一个城市和一个旅行顺序位置。
  2. 激活状态:神经元的激活值表示当前城市在特定位置的可能性,初始时随机设置,运行中不断调整。
  3. 能量函数:定义一个能量函数来衡量当前网络状态与最优解的差距,包括路径长度、城市的唯一性和顺序的合理性。
  4. 更新规则:使用更新规则来调整神经元的激活值,如基于梯度下降的方法或竞争机制。
  5. 求解过程:初始化网络,迭代更新,判断收敛,提取解。最终的神经元激活状态表示旅行商的路径。

完整MATLAB如下,复制粘贴即可运行:

%% 连续Hopfield神经网络的优化—旅行商问题优化计算
 
%% 清空环境变量、定义全局变量
clear all
clc
global A D
 
%% 城市位置
citys=rand(10,2);
%% 计算相互城市间距离
distance = dist(citys,citys');
%% 初始化网络
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);
%% 寻优迭代
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
 %% 判断路径有效性
[rows,cols] = size(V);
V1 = zeros(rows,cols);
[V_max,V_ind] = max(V);
for j = 1:cols
    V1(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));
%  flag=1;
%% 结果显示
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-','LineWidth',2);
   for i = 1:length(citys)
       text(citys(i,1),citys(i,2),['   ' num2str(i)])
   end
   text(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 on
   xlabel('城市位置横坐标')
   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,:)');
   end
   disp('最优路径矩阵');
   % 绘制最优路径
   figure(2)
   plot([citys_end(:,1);citys_end(1,1)],...
       [citys_end(:,2);citys_end(1,2)],'o-','LineWidth',2);
   for i = 1:length(citys)
       text(citys(i,1),citys(i,2),['  ' num2str(i)])
   end
   text(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 on
   xlabel('城市位置横坐标')
   ylabel('城市位置纵坐标')
   % 绘制能量函数变化曲线
   figure(3)
   plot(1:iter_num,E,'LineWidth',2);
   ylim([0 2000])
   title(['能量函数变化曲线(最优能量:' num2str(E(end)) ')']);
   xlabel('迭代次数');
   ylabel('能量函数');
else
   disp('寻优路径无效');
end
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;
end
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);
end
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6116ab2c6e6f4cbfa11e31355aa7817d.png)



在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【重磅升级】基于大数据的股票量化分析与预测系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 伴随全球经济一体化和我国经济的快速发展,中国股票市场对世界经济的影响力不断攀升,中国股市已成为全球第二大股票交易市场。在当今的金融市场中,股票价格的波动…

图像处理中常用的统计矩

目录 原点矩中心矩常用的统计矩偏度(Skewness)定义解释 峰度(Kurtosis)定义解释 统计矩的应用MATLAB相关函数 原点矩(Moment about the Origin)和中心矩(Central Moment)是概率论和数…

YOLOv11改进 | 融合篇,YOLOv11改进主干网络为MobileNetV3+CA注意机制

YOLOv11改进介绍 YOLOv11 跟 YOLOv8 结构差不多相似,只是作者在 YOLOv8 基础上进行了改进,我感觉 YOLOv11 训练速度更快,map和精度应该比 YOLOv8 高一些,所以我会把 YOLOv11 改进也写在本专栏里面。YOLOv11 改进,可以看往期 YOLOv8 改进主干网络教程,原理都是一样的,这…

【m6A】如何调节【免疫】,双热点如何碰撞出火花?

国自然已经放榜许久,【免疫】和【m6A】(N6-甲基腺苷)再次成为热门研究主题。m6A作为真核生物mRNA的主要表观遗传修饰之一,它通过调控mRNA的稳定性、剪接、运输和翻译等过程,进而影响基因的表达[1]。 图1.关键词【免疫、…

热烈祝贺!开利网络成为第一批广州市数据要素入库企业

今日,我们怀着无比激动的心情,热烈祝贺 广州市开利网络科技有限公司成为第一批广州市数据要素入库企业!这一殊荣,是对 广州市开利网络科技有限公司在数据领域卓越表现的高度认可,更是 广州市开利网络科技有限公司发展历…

华为OD机试 - 排队游戏 刺头学生(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

动态规划lc

先找到规律,然后找边界情况;部分特殊情况分类讨论 *递归 70.爬楼梯 简单 提示 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入&#xff1a…

瑞芯微RK3566/RK3568 Android11使用OTA升级固件方法,深圳触觉智能鸿蒙开发板演示,备战第九届华为ICT大赛

本文介绍瑞芯微RK3566/RK3568在Android11系统OTA升级固件方法,使用触觉智能的Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566,Laval官方社区主荐! 1、OTA包生成 在源码根目录上执行以下命令编译OTA包 # make installclean # …

效率提高——自动登录校园网(河海大学)与模拟点击与输入获取最新消息

文章目录 零、前言一、自动登录校园网1.1 快速锁定小工具1.2 版本问题1.3 出现进程未结束的情况1.4 关于chromedriver.exe1.5 打包ico图片格式 二、获取信息门户最新消息参考文章 零、前言 最近被校园网弄的也是比较烦心,而且准备远程弄弄这些玩具,为以…

150万条多语种音频数据!浙大清华发布语音伪造检测框架SafeEar,兼顾隐私保护,附代码和数据集

150万条多语种音频数据!浙大清华发布语音伪造检测框架SafeEar,兼顾隐私保护,附代码和数据集. SafeEar是一种内容隐私保护的语音伪造检测方法,其核心是设计基于神经音频编解码器的解耦模型,分离语音声学与语义信息&…

服务器数据恢复—硬盘坏扇区导致Linux系统服务器数据丢失的数据恢复案例

服务器数据恢复环境: 一台linux操作系统网站服务器,该服务器上部署了几十个网站,使用一块SATA硬盘。 服务器故障&原因: 服务器在工作过程中突然宕机。管理员尝试重新启动服务器失败,于是将服务器上的硬盘拆下检测…

PostgreSQL数据库安全管理,细节都在这里了

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

要求信创检测的项目验收中,验收依据有哪些?

一、验收依据和分类 验收依据: 通常包括立项批复文件以及经批复的项目建议书、可行性研究报告、业务需求说明书;正式设计文件;项目招标文件和采购文件;签订的项目合同或协议;经批准的项目变更文件;有关法…

出海快报 | “三消+短剧”手游横空出世,黄油相机“出圈”日本市场,从Q1看日本手游市场趋势和机会

编者按:TopOn出海快报栏目为互联网出海从业者梳理出海热点,供大家了解行业最新发展态势。 1.“三消短剧”横空出世,融合创新手游表现亮眼 随着竞争的加剧,新产品想要突出重围,只能在游戏中加入额外的元素。第一次打开…

vue使用js-xlsx导入本地excle表格数据,回显在页面上

效果图 解释放在代码的注释中 页面代码&#xff0c;导入本地文件我用的是element的上传工具 // 我是根据js文件直接引入的 <script src"/js/xlsx.full.min.js"></script>// 导入excelreadWorkbookFromLocalFile(fileData) {// 文件信息const file f…

智能生成ppt软件哪个好?如何高效生成ppt?

想要快速制作出专业且吸引人的PPT演示文稿吗&#xff1f;ai智能生成ppt工具可以帮你实现这一目标。 无需复杂的设计技巧&#xff0c;也不必花费大量时间&#xff0c;只需几个简单的步骤&#xff0c;就能创造出令人印象深刻的演示文稿。下面是一份免费版教程&#xff0c;让你轻…

中航资本:股票低佣开户注意事项,怎么低佣金开户?

股票生意中会涉及到一些手续费&#xff0c;佣金费、印花税、过户费等&#xff0c;印花税、过户费的费率是承认的&#xff0c;而不同证券公司、生意途径的佣金费率都有或许不同。 低佣金开户办法&#xff1a; 1、线上券商途径开户&#xff1a;许多大型证券公司&#xff0c;例如…

在HF上部署你的专属MindSearch,随时随地开启智能搜索!

作者&#xff1a;MindSearch 兴趣小组成员张富才 本文将详细带领大家学习如何在 Hugging Face Space 部署****并美化专属自己的 MindSearch 应用&#xff0c;免去排队等待的烦恼&#xff0c;随时随地开启智能搜索&#xff01; 在深入开始之前&#xff0c;我们需要了解&#x…

深入理解 C/C++ 指针

深入理解 C 指针&#xff1a;指针、解引用与指针变量的详细解析 前言 在 C 编程语言中&#xff0c;指针 是一个非常强大且重要的概念。对于初学者来说&#xff0c;指针往往会让人感到困惑不解。本文将通过形象的比喻&#xff0c;帮助大家深入理解指针、解引用与指针变量的概念…

安装openai-whisper 失败

昨晚安装python 语音识别模型经常失败&#xff1a; pip install openai-whisper 具体原因是因为国外的源使网络不稳定造成断网 查阅资料我自己的解决办法是在自己C:\Users\用户名目录下建一个pip文件夹&#xff0c;在pip文件夹下建一个pip.ini文件 在pip.ini文件中加入自己要…