基于连续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 


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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php+vue3实现点选验证码

buildadmin 中的点选验证码实现 验证码类 <?phpnamespace ba;use Throwable; use think\facade\Db; use think\facade\Lang; use think\facade\Config;/*** 点选文字验证码类*/ class ClickCaptcha {/*** 验证码过期时间(s)* var int*/private int $expire 600;/*** 可以…

Leetcode刷题详解——太平洋大西洋水流问题

1. 题目链接&#xff1a;417. 太平洋大西洋水流问题 2. 题目描述&#xff1a; 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界&#xff0c;而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格…

Spring Cloud学习(八)【RabbitMQ 服务异步通讯】

文章目录 初识 MQ同步通讯异步通讯MQ 常见框架 RabbitMQ 快速入门RabbitMQ 单机部署RabbitMQ概述常见消息模型 SpringAMQPSimpleQueue 模型WorkQueue 模型发布订阅模型发布订阅-Fanout Exchange发布订阅-DirectExchange发布订阅-TopicExchange消息转换器 初识 MQ 同步通讯 同步…

解密图像处理中的利器——直方图与均衡化

直方图与均衡化是数字图像处理中常用的重要工具&#xff0c;它们能够帮助我们更好地理解和改善图像的亮度分布。本文将首先介绍直方图的基本概念以及其在图像处理中的意义&#xff0c;接着详细阐述直方图均衡化的原理和算法。同时&#xff0c;文章将探讨直方图均衡化在图像增强…

基于Vue+SpringBoot的天然气工程运维系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司&#xff08;施工单位&#xff09;功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3…

【Redis系列】Redis上设置key,value的时候出现NOAUTH Authentication required提示如何解决?

哈喽&#xff0c;大家好&#xff0c;我是小浪。相信大家在初学一门新的知识点的时候都会遇到各种各样的问题&#xff0c;在网上找了一大堆的解决方案&#xff0c;最后还是无功而返&#xff0c;那么今天博主就记录一下在进行Redis的一些操作中遇到的问题~ 当我们好不容易安装好R…

matlab simulink PSO算法优化simulink的PID参数

1、内容简介 略 13-可以交流、咨询、答疑 PSO算法优化simulink的PID参数 2、内容说明 标准的PSO算法优化simulink的PID参数 PSO、粒子群算法、simulink参数优化 3、仿真分析 4、参考论文 略 链接&#xff1a;https://pan.baidu.com/s/1yQ1yDfk-_Qnq7tGpa23L7g 提取码&…

计算机组成原理——指令系统题库1-20

1、以下有关指令系统的说法中错误的是什么。 A、 指令系统是一台机器硬件能执行的指令全体 B、 任何程序运行前都要先转化为机器语言 C、 指令系统是计算机软件、硬件的界面 D、 指令系统和机器语言是无关的。 2、在CPU执行指令的过程中&#xff0c;指令的地址由什么给出。…

线性模型拟合非线性数据中,如何找到最优的【分箱】数

具体的数据可以回看上一条博客。我们先来始化三个空列表&#xff0c;用于存储后续计算的预测得分、交叉验证得分的平均值和交叉验证得分的方差。 pred,score,var [], [], [] 2. 再定义一个列表&#xff0c;包含了我们想要尝试的分箱数量。 binsrange [2,5,10,15,20,30] 3…

Domino 14中安装配置使用OnTime团队日历组件

大家好&#xff0c;才是真的好。 在9月底发布的Domino 14 EA3中&#xff0c;包含了OnTime团队日历组件。OnTime是一款日历协作功能应用&#xff0c;侧重于团队日历&#xff0c;功能侧重于协作&#xff0c;界面较为简洁、现代等。 Domino如今越来越多地集成进合作伙伴的解决方…

Android设计模式--原型模式

一&#xff0c;定义 原型模式就是用原型实例指定创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象 也就是说用户从一个实例中复制出一个内部属性一致的对象&#xff0c;这个被复制的对象就是原型。 原型模式多用于创建复杂的或者构造耗时的实例&#xff0c;因为这…