Hopfield 神经网络解决旅行商问题 (TSP) 仿真实验
项目介绍
本项目通过构建连续型 Hopfield 神经网络 (CHNN) 来求解典型的组合优化问题——旅行商问题 (TSP)。TSP 问题旨在寻找访问给定城市集合中每个城市一次并返回起点的最短路径。由于其 NP-hard 特性,传统的精确算法在城市规模增加时计算量激增。本项目利用神经网络的动力学演化特性,将城市访问顺序编码为神经元置信矩阵,通过定义包含约束条件和目标函数的能量函数,使网络状态自发向能量极小值方向演化,最终获取最优或近优路径。
功能特性
- 动力学仿真:采用欧拉迭代法模拟神经元状态随时间的动态演化过程。
- 约束映射:将 TSP 的空间约束(每行/每列只有一个 1)通过数学变换映射为神经元之间的相互作用力。
- 自动收敛:系统通过能量函数的梯度下降机制,实现状态从混沌初始化到规则排列的自动转变。
- 可视化反馈:实时生成能量演化曲线、地理路径图以及神经元状态热力图,便于直观观察网络收敛行为。
- 有效性验证:内置路径提取逻辑,自动检测网络输出是否满足 TSP 的合法回路约束。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 硬件要求:基础计算能力的通用个人计算机,无需高性能 GPU 支持。
核心实现逻辑
核心算法逻辑遵循神经动力学演化的标准流程,主要分为以下几个阶段:
- 空间环境构建:
手动指定 10 个城市的二维坐标,并根据欧几里得距离公式计算城市间的完整距离矩阵,作为动力学方程中路径惩罚项的基础。
- 网络参数建模:
设置四个关键惩罚因子:行约束参数 (A)、列约束参数 (B)、总数约束参数 (C) 和路径长度约束参数 (D)。这些参数决定了能量函数中各项的权重平衡。同时定义激活函数增益和迭代步长,以确保微分方程数值解的稳定性。
- 神经元状态初始化:
神经元的输入电位 U 在中值附近加入微小噪声进行初始化,打破对称性;输出置信度矩阵 V 通过双曲正切函数 (Tanh) 映射到 [0, 1] 区间,代表特定访问序列的置信概率。
- 动力学方程迭代:
在最大迭代次数内,重复计算四个项的贡献:
- 行/列约束项:确保每座城市被访问一次,且每个时序只对应一座城市。
- 总量约束项:限制激活的神经元总数与城市数量一致。
- 距离优化项:通过当前置信矩阵与距离矩阵的乘积,对长路径施加抑制力。
通过欧拉法更新输入电位,并根据激活函数更新输出状态。
- 结果提取与判别:
对最终的置信矩阵进行解析,通过提取每列中置信度最高的神经元索引来确定访问顺序。系统会自动检查该顺序是否构成一个包含所有城市且不重复的排列(合法路径)。
算法与关键技术细节分析
代码中实现的能量函数 E 是算法的核心。它由四个部分组成:前三项代表惩罚函数(Penalty Function),当神经元状态违背 TSP 约束(如一行出现多个 1)时,能量值会迅速上升;第四项为目标函数,其物理意义是路径的总物理长度。
神经元的输出 V 会经历从中间状态(约 0.5)到饱和态(趋近 0 或 1)的变化。理想情况下,网络收敛后置信矩阵应呈现为排列矩阵(Permutation Matrix)。
采用一阶 Euler 迭代,利用
dU = -(TermA + TermB + TermC + TermD) 体现了梯度下降的思想。其中,距离项的计算利用了置信矩阵的循环移位(Shift),巧妙地将封闭回路的距离耦合进动力学方程。
由于连续型 Hopfield 网络可能收敛到局部最优或非可行解,代码内置了有效性检查机制。若生成的置信矩阵未出现“非法”现象(即 unique 后的城市数量等于总数),则视为成功找到合法巡回路径。
使用方法
- 启动 MATLAB 软件环境。
- 将项目相关的脚本文件放置在当前工作目录。
- 直接运行主执行脚本。
- 程序将自动弹出两个图形窗口:
- 窗口 1 展示能量随迭代次数下降的过程以及最终提取的地理路径图。
- 窗口 2 以热力图形式展示神经元最终的置信度分布情况。
- 在控制台查看打印出的总距离及路径有效性分析结果。