24连续Hopfield神经网络的优化旅行商问题优化计算(附matlab程序)

news2025/1/14 17:45:36

1.简述

      学习目标: 连续Hopfield神经网络的优化旅行商问题优化计算

                         需要计算10个城市最优路径及总路径长度

hopfield可以分为离散型神经网络和连续型神经网络(DHNN\ CHNN)

在之前的文章中讲过的单层感知器和BP都是离散的,目前连续的神经网络可能还没有碰见。

本文是通过《人工神经网络理论、设计及应用——第2版》的例子讲解离散型Hopfield,离散型反馈网络的拓扑结果如下图所示:

         所有神经元排列成一层,感觉像单层的,没有分层的概率。每一层都有输入,x1、x2 .。 图中没有标记偏置值,但我们清楚知道每个神经元都有一个权值。T值代表控制输入的信息,需要达到某种强度才会对神经元做出反应。跟其他神经网络一样,都有输入和输出,不一样的地方就是输出的x1有一个反馈的回路送到x2、x3,没有送给x1,可以把他反馈给自己的权值当作0。也可以变形画成如下环的形式,就是一种全连接。
 

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

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

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

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

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

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

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

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

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

2.代码

%% 清空环境变量、定义全局变量
clear all
clc
global A D
%% 导入城市位置
load city_location    %10个城市的横纵坐标
%% 计算相互城市间距离
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

3.运行结果

 

 

 

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

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

相关文章

高效创作助手:ChatGPT最新版实现批量撰写聚合文章的全新水平

随着人工智能技术的不断发展,ChatGPT最新版作为一款智能创作助手,实现了批量撰写聚合文章的全新水平。它能够在短时间内生成高质量的文章,极大地提高了创作效率。本文将从随机8-20个方面对ChatGPT最新版进行详细的阐述,让我们一起…

C11 std::function 学习

此文, https://blog.csdn.net/bcbobo21cn/article/details/111658249 使用了一次C11 std::function,是作为函数指针使用的; 进一步的来说,C11的std::function可以对任何可以调用的目标实体进行调用操作; std::functi…

RFID课程要点总结_5 EPC

5. EPCglobal Standard & protocol Concept of EPC global network EPCglobal Network: a technology that allows trading partners to document and determine the location of individual goodsif possible in real timeadditional information: such as 生产使用日期…

golang代码规范之框架搭建规范

编写本规范的目的在于,让开发者更方便快捷地搭建项目框架,同时让团队内部的技术栈达到统一。 指导思想 框架搭建需要适应项目的变化,为项目选择最合适的架构,没有什么是一成不变的。技术架构应该是不断完善的,在满足当…

pytest 自动化学习

一 pytest简介与安装 def inc(x): return x1 def test_answer(): assert inc(3) 5 #判断 4会不会等5 二 Pytest 命令规则 三 pycharm配置与界面化运行 四 pytest测试用例结构 用例结构 三部分构成 1.用例名称用例步骤 2.编辑 3.断言…

Docker 进入容器和交换文件

1、进入容器 有些时候需要进入容器进行操作,使用 docker exec 命令,这个命令后面可以添加很多参数,我们这里只讲添加 -i 和 -it 参数。 只添加 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示…

人工智能第2章基于图的知识表示与图搜索技术(课后部分习题答案)

解:用四元组(f,w,s,g)表示状态,其中 f 表示猎人,w 表示狼, s 表示羊,g 表示草,其中每个元素都可以为 0 或 1,表示在左案, …

chatgpt赋能python:Python将图片转换为代码的顶级SEO文章

Python将图片转换为代码的顶级SEO文章 在当今数字化的世界中,图像和代码都是最为重要的元素之一。Python作为一种流行的编程语言,可以帮助我们将这两种元素结合起来,让我们从图像中提取出代码。本文将讨论Python如何将图像转换为代码&#x…

哈工大计算机网络传输层协议详解之:TCP协议

哈工大计算机网络传输层协议详解之:TCP协议 文章目录 哈工大计算机网络传输层协议详解之:TCP协议TCP概述TCP段结构序列号和ACKTCP可靠数据传输RTT和超时TCP发送方事件TCP发送端程序伪代码TCP重传示例TCP接收方 ACK生成TCP快速重传机制 TCP流量控制TCP连接…

总结905

今日已做: 1.核聚课程 2.进步本回顾,重做8道题,有两道还没掌握,记录3页。 3.线性代数第5讲 4.三大计算,刷题15道,纠错。 5.每日长难句。 6.考研常识课 明日必做 1.熟练背诵《the king’s speech》并默写 2…

chatgpt赋能python:Python抽卡:让你的游戏更充实

Python抽卡:让你的游戏更充实 作为一款流行的游戏,抽卡是许多玩家最喜欢的功能之一。通过不断的抽卡,你可以获取到更加强大的角色和装备,从而在游戏中获得更多的胜利。但是,手动抽卡需要耗费大量的时间和精力&#xf…

简要介绍 | 点云距离度量:从原理到应用

注1:本文系“简要介绍”系列之一,仅从概念上对点云距离度量进行非常简要的介绍,不适合用于深入和详细的了解。 点云距离度量:从原理到应用 3D deep learning on Point cloud 1. 背景介绍 点云数据在计算机图形学、计算机视觉、自…

C#探索之路(9):深入理解C#代码编译的过程以及原理

C#探索之路(9):深入理解C#代码编译的过程以及原理 文章目录 C#探索之路(9):深入理解C#代码编译的过程以及原理一、前言:概念解析1、编译器:2、JIT是什么?3、AOT是什么?4、如何理解这个“基于运行时”的概念…

Shell 脚本和编程

shell脚本和编程 Shel基础概念 Shell是一种命令行解释器,是Linux系统中最常用的命令行界面。Shell脚本是由一系列Shell命令组成的文本文件,可以用来自动化执行Linux系统上的任务。Shell脚本是一种强大的工具,可以通过编写脚本来实现自动化运…

FPGA XDMA 中断模式实现 PCIE X8 测速试验 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案XDMA简介XDMA中断模式QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利:工程代码的获取 1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串行连接&#xf…

Unity 之 最新原生广告Ads接入 -- 助力增长游戏收益

Unity 之 最新Ads原生广告接入流程详解和工具类分享 一,注册 Unity Ads 广告 SDK二,下载 Unity Ads 广告 SDK三,配置 Unity Ads 广告 SDK3.1 广告位展示流程3.2 代码初始化 四,集成 Unity Ads 广告 SDK4.1 相关介绍4.2 代码分享 五…

开发日记-凌鲨中数据库代理的实现

凌鲨定位于连接研发过程中一切信息和工具。下面是数据库代理的大概框架: 技术选型 使用golang开发各种数据库协议代理,redis-proxy,mysql-proxy,mongo-proxy使用swagger提供代理协议的调试 选型原因 我们的客户端使用了tauri作为框架,在实现扩展功能的…

基于阴影检测和平衡亮度差阴影消除算法的MATLAB完整程序分享

完整代码: clc; clear; close all; warning off; addpath(genpath(pwd)); I=imread(1.png);%%此处导入自己需要检测的图片 [x,y,z]=size(I); figure(Name,Processing Steps),subplot(3,2,1), imshow(I),title(Image 1: Original Image); I=uint8(I); temp1=I; half_intens…

MySQL优化--MVCC

目录 概念 MVCC的具体实现 隐式字段 undo log日志 概念 undo log版本链 readview 接上文,redo log保证了事务的持久性,undo log 保证了事务的原子性和一致性 那,隔离性是如何保证的呢? 锁:排他锁(如…

Linux下Redis 存储

命令使用 目录 命令使用 RDB持久化 AOF持久化 yum安装 [rootlocalhost ~]# yum -y install redis 已加载插件:fastestmirror Loading mirror speeds from cached hostfile* c7-media: * epel: ftp.yz.yamagata-u.ac.jpvim到文件etc/redis.conf 取消注释requirep…