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

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.运行结果

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素馨堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值