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

news2024/9/20 14:43:56

连续Hopfield神经网络

连续Hopfield神经网络(Continuous Hopfield Network, CHN)是一种基于能量最小化原理的神经网络模型,与离散Hopfield网络相比,它的状态是连续的,典型地采用实数值或者概率分布。在优化连续Hopfield神经网络时,需要考虑以下几个方面:

  1. 选择合适的激活函数:激活函数是神经元的输出与输入之间的非线性映射,对于连续Hopfield网络,常见的激活函数有Sigmoid、Tanh和ReLU等。选择合适的激活函数可以提高网络的性能。

  2. 设计合适的能量函数:连续Hopfield网络的核心是能量函数,它描述了网络状态的稳定性。设计一个合适的能量函数有助于提高网络的收敛速度和稳定性。

  3. 权重矩阵初始化:权重矩阵的初始化对网络性能有很大影响,常用的初始化方法包括随机初始化、He初始化和Xavier初始化等。合适的初始化策略可以加快网络的收敛速度并提高性能。

  4. 学习率调整:学习率是神经网络中的一个重要超参数,它决定了权重更新的速度。采用适当的学习率策略,如固定学习率、衰减学习率或自适应学习率,可以提高优化效果。

  5. 正则化:正则化是一种防止过拟合的方法,通过在损失函数中添加正则项来实现。常见的正则化方法包括L1正则化、L2正则化和Dropout等。适当的正则化策略可以提高网络的泛化能力。

  6. 训练策略:对于连续Hopfield网络的训练,可以采用批量梯度下降、随机梯度下降或小批量梯度下降等方法。不同的训练策略对收敛速度和性能有不同的影响,因此需要根据实际问题选择合适的训练方法。

  7. 模型选择与评估:在训练过程中,可以采用交叉验证、模型选择与超参数调整等技巧,以选出最佳模型和参数设置。此外,还需要合理设计评估指标,以便准确地衡量网络性能。

综上所述,优化连续Hopfield神经网络涉及多个方面的策略和技巧,需要根据实际问题和数据集进行调整,以达到最佳性能。

TSP(旅行商问题,Traveling Salesman Problem)

我们以TSP(旅行商问题,Traveling Salesman Problem)为例,说明如何使用连续Hopfield神经网络进行优化。

TSP问题是一个经典的组合优化问题,要求在给定一组城市和它们之间的距离后,找到一条访问每个城市恰好一次并回到起始城市的最短路径。

在这个例子中,我们可以通过优化连续Hopfield神经网络来求解TSP问题。

  1. 网络表示:首先,我们需要将TSP问题表示为连续Hopfield神经网络。假设有N个城市,我们可以用一个N×N的矩阵X表示网络状态,其中每个元素x_ij表示城市i在访问顺序中的第j个位置的概率。

  2. 能量函数:接下来,我们需要设计一个能量函数来度量网络状态的优劣。一个常用的能量函数为:

E(X) = A * (Σ_i(Σ_j x_ij - 1)^2 + Σ_j(Σ_i x_ij - 1)^2) + B * Σ_i Σ_j Σ_k d_ik * x_ij * x_k(j+1)

其中A和B是权衡因子,d_ik是城市i和城市k之间的距离。第一项保证每个城市只被访问一次,第二项保证每个位置只有一个城市,第三项表示总路径长度。

  1. 动力学方程:为了优化能量函数,我们需要根据能量函数的梯度构造动力学方程。在这个例子中,我们可以采用sigmoid函数作为激活函数,并使用梯度下降法进行优化:

dx_ij/dt = -∂E/∂x_ij + γ * f(x_ij) * (1 - f(x_ij))

其中f(x_ij) = 1/(1 + exp(-β * x_ij)),γ和β是超参数。

  1. 参数设置与优化:在实际优化过程中,我们需要选择合适的权衡因子A和B,以及超参数γ和β。这些参数可以通过交叉验证或网格搜索等方法进行调整。此外,我们还需要设置合适的学习率和训练策略,例如可以使用自适应学习率和小批量梯度下降法。

  2. 解码与评估:最后,我们需要将网络状态矩阵X解码为TSP问题的解。常见的解码方法是取每行和每列的最大概率值所对应的城市和位置。然后我们可以计算解的总路径长度,以评估连续Hopfield神经网络求解TSP问题的性能。

通过以上步骤,我们可以使用连续Hopfield神经网络进行TSP问题的优化。

 

Code

diff_u

% % % % 计算du
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;

energy

% % % % % 计算能量函数
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);

main

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

%% 清空环境变量、定义全局变量
clear all
clc
global A D

%% 导入城市位置
load city_location

%% 计算相互城市间距离
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));

%% 结果显示
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)])
   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('最优路径矩阵');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)])
   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);
   ylim([0 2000])
   title(['能量函数变化曲线(最优能量:' num2str(E(end)) ')']);
   xlabel('迭代次数');
   ylabel('能量函数');
else
   disp('寻优路径无效');
end

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

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

相关文章

各大外卖平台占据共享经济市场主要份额,占比近50%

哈喽大家好,随着大量互联网用户和移动支付的普及、大量用户通过共享平台将闲置资源和服务与需求方进行匹配,实现了资源的高效利用和消费者福利的提升。在全球化驱动的新型消费需求以及政策支持下,共享经济正在向更加成熟和规范化的方向发展。…

【生态环境保护】绿水青山就是金山银山——生态环保篇

环保是一个持续性的话题,不仅仅是在国内,整个世界都是一个命运共同体从城市垃圾分类,到农村/村镇污水治理,城乡一体化和因地制宜的实施方式,是我们一直在探索的。 从余村到全国,从中国到世界,“…

网络安全合规-数据安全治理体系建设

一、数据安全治理体系建设思路: 一级文档。由决策层认可、面向组织的数据安全方针,通常应包括组织数据安全工作的总体目标、基本原则、数据安全决策机构设置与职责划分等。 二级文档。根据数据安全方针的要求,对组织数据安全工作各关键领域的…

黑客攻击的心理学:了解黑客的行为背后隐藏的心理因素

第一章:引言 在当今数字时代,网络已经成为人们交流、信息传递、商业活动的主要方式之一。但随之而来的是网络安全问题的不断浮现,其中最为突出的就是黑客攻击。黑客攻击不仅仅是技术问题,还涉及到心理学、社会学等多方面因素。了…

LoRA 理解

LLM的参数量对于时间和显存要求都带来很大的挑战。现存的两种显著范式: 增加adapter:主要问题在于推理时带来的额外计算量和延迟。优化prompt: 前缀微调(Prefix Tuning)较难优化,而且随着参数量增长性能并非单调变化。 那有什么方法可以 解…

一篇简单的文章带你玩转SpringBoot 之定时任务详解

序言 使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式: 一、基于注解(Scheduled)二、基于接口(SchedulingConfigurer) 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态…

Linux网络编程TCP连接的建立和终止

文章目录 前言一、TCP的三路握手二、TCP连接终止总结 前言 本篇文章将讲解TCP的连接的建立和终止,主要就是讲解TCP的三路握手和TCP连接断开内部发生的一些机制和事件。 一、TCP的三路握手 TCP三路握手所交换的三个分节: (1)服务器必须准备好接受外来…

C++题解之对顶堆:中位数

中位数 题目链接:洛谷P1168 中位数 题目描述 给定一个长度为 N N N 的非负整数序列 A A A,对于前奇数项求中位数。 输入格式 第一行一个正整数 N N N。 第二行 N N N 个正整数 A 1 … N A_{1\dots N} A1…N​。 输出格式 共 ⌊ N 1 2 ⌋ …

【是C++,不是C艹】 省缺参数 | 函数重载 | 内联函数

💞💞欢迎来到 Claffic 的博客 💞💞 👉 专栏:《是C,不是C艹》👈 前言: 上期,我带大家给C打了招呼,捎带着认识了命名空间和输入输出,那…

LeetCode——链表简单题题解

83. 删除排序链表中的重复元素 题目描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 输入:head [1,1,2] 输出:[1,2] 解题思路:用一个指向节点类型的指针保…

Vscode配置C/C++开发环境

下载Vscode进行安装。 下载MinGW-W64 GCC最新版本, 选择x86_64-win32-seh进行下载。解压放入自定义目录(英文路径)后,添加$:\mingw64\bin到系统Path环境变量。安装C/C插件。 在.c后缀文件中按Ctr Shift P,选择C/C …

Windows系统文件被faust勒索病毒加密勒索病毒解密恢复,电脑中病毒了怎么修复?

恶意软件的攻击已经让电脑用户变得更加谨慎了。在最近的一波攻击中,faust勒索病毒已经对使用Windows系统的计算机造成了广泛的破坏。该病毒利用加密技术锁定用户的文件,只有在支付一定数额的赎金后才会解锁这些文件。如果你的计算机中也受到了这种勒索病…

MaxScript编写bone转换biped工具

一、制作转换工具的缘由 大家好,我是阿赵。我经常从各种渠道得到了一些角色模型,这些模型得到之后,会发现是带有蒙皮和骨骼,甚至带有动作的。   不过这些资源很多都是从游戏截取出来的,导入到3DsMax之后,…

信息安全复习十:Web与电子商务安全

一、章节梗概 1.信息安全的学科内容 2.Web和电子商务安全问题提出 3.安全套接字协议SSL与传输层安全协议TLS 4.安全电子交易(SET)简要介绍 复习: 密码学内容:对称密钥密码、公开密钥密码、报文鉴别 PKI:数字签名、数字证书、信任关系 身份认…

MES管理系统助力企业数字化与实体经济实现“数实融合“

中国企业评估协会日前公布了2022年度“中国新经济500强”的名单。在这些企业中,先进制造业企业的比例超过了半数,尤其是互联网与现代信息技术服务业、新能源产业、新型生活性服务业等,在这些行业中占据了重要地位。由此可以看出,绿…

C/C++每日一练(20230427) 二叉树专场(5)

目录 1. 从中序与后序遍历序列构造二叉树 🌟🌟 2. 从先序与中序遍历序列构造二叉树 🌟🌟 3. 二叉树展开为链表 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每…

微信小程序php+python+nodejs+vue 高校工资管理系统

在线公益知识练习及测试系统是随着计算机技术和互联网技术的发展而产生的一种的新的练习及测试模式,与传统的纸质化练习及测试不同,在线系统提高了练习或测试的效率,减少了纸张的浪费,减轻了教师的评卷压力,同时也为参…

易观千帆 | 金融机构如何保证用户体验长期可持续?

易观:用户体验正逐渐成为金融机构的命脉。 数字经济时代的到来,金融机构面临着来自内部和外部的双重压力。一方面,互联网金融企业凭借强大的技术能力以及人才优势,通过互联网运营的模式迅速响应客户需求,吸引了大量用户…

自定义Feign日志

文章目录 开篇定位Feign是怎么打印日志的?自定义FeignLogger实现 开篇 在上一篇Feign打印日志文章中,已经成功打印了FeignClient请求服务的日志信息,但是默认打印的日志太过零散,不是我们想要的。怎么能自定义日志打印的格式和内…

系统分析师《企业信息化战略与实施》高频知识点二

企业信息化战略与实施---系统建模 组织结构是一个企业内部部门的划分以及相互之间的关系,每个企业都有自己的组织结构图,它将企业分成若干部分,标明行政隶属关系。组织结构图是一种树结构,树的分支是根据上下级和行政隶属关系绘制…