旅行商问题 (TSP 问题) 是一个 NP-hard 问题,给定若干个城市,求旅行商从某个城市开始,遍历所有城市最终回到出发点的最短路径 (每个城市只经过一次) 。求 TSP 的最优解时间较长,本文介绍一种用 SOM 算法求 TSP 近似解的方法,SOM 是竞争神经网络,也称为自组织映射 。1.前言最近突然翻到读大学时一个小作业的代码,主要用 SOM 网络算法求 TSP 问题近似解 。代码参考了论文《A simple learning algorithm for growing ring SOM and its application to TSP》,论文作者用了一种 RSOM 算法,与 SOM 不同,其初始神经元比较少,但是会在训练的过程中不断的增加新的神经元 。
代码是用 matlab 编写的,地址:https://github.com/cc54294/SOM_TSP
代码的效果如下面的 gif 所示,分别是在 48、101、225、561 个城市上计算 TSP 的结果 。在 48、101、225 个城市上的效果都比较好,但是在 561 个城市上的效果比较差 。
![用 SOM 算法求解 TSP 问题](https://www.isolves.com/d/file/p/2020/07-19/4fbc902ce693f15df1aefaf3652443c5.jpg)
文章插图
48 个城市 TSP 问题
![用 SOM 算法求解 TSP 问题](http://img.jiangsulong.com/220418/1532262Q8-1.jpg)
文章插图
101 个城市 TSP 问题
![用 SOM 算法求解 TSP 问题](http://img.jiangsulong.com/220418/15322CL3-2.jpg)
文章插图
225 个城市 TSP 问题
![用 SOM 算法求解 TSP 问题](https://www.isolves.com/d/file/p/2020/07-19/81433debddff8b978ef3e5b63c0c140e.jpg)
文章插图
561 个城市 TSP 问题
2.TSP 问题TSP 问题称为旅行商问题,问题的定义:有一个旅行商需要访问 N 个城市,旅行商从一个城市出发,需要经过所有的 N 个城市且每个城市只经过一次,最后回到出发点,求最短的路径 。如下图所示,从城市 A 出发,左侧为 TSP 问题的最短路径:
![用 SOM 算法求解 TSP 问题](http://img.jiangsulong.com/220418/15322624A-4.jpg)
文章插图
TSP 问题
之前介绍过 Pointer Network,可用于求解 TSP 问题,不熟悉的童鞋可以参考一下之前的文章《指针网络 Pointer Network》 。本文介绍另一种神经网络 SOM 用于求解 TSP 。
3.SOM 算法SOM 神经网络 (自组织映射 Self-Organizing Map),是一种竞争型神经网络,通常用于无监督学习 。一般的神经网络通过损失函数计算梯度进行优化,而 SOM 采用了竞争的策略 。
对于每一个输入样本 x,SOM 会计算所有神经元与 x 的距离 (例如欧式距离),选出获胜神经元 (也称为激活神经元,距离最近的),然后优化获胜神经元附近的网络拓扑结构 。常见 SOM 结构如下,包括输入层和输出层 (竞争层):
![用 SOM 算法求解 TSP 问题](http://img.jiangsulong.com/220418/15322BT0-5.jpg)
文章插图
SOM 示意图
上面的图中,输入层的维度是 d (即每一个样本 x 维度是 d),上面的二维网格中每一个圆点均是一个神经元,每个神经元都具有一个特征向量 w (维度也是 d) 。
神经元之间是具有拓扑结构的,常见的拓扑结构有矩形 (Rectangular) 和六边形 (Hexagonal) 的,如下:
![用 SOM 算法求解 TSP 问题](http://img.jiangsulong.com/220418/15322A9E-6.jpg)
文章插图
SOM 神经元常见的拓扑结构
SOM 训练的过程如下:
- 随机初始化输出层神经元的特征向量 w,维度是 d 。
- 对于每一个输入样本 x,找出与其最匹配的神经元,可以根据欧氏距离匹配,计算所有神经元和样本 x 的欧式距离,选距离最近的神经元作为获胜神经元 I 。
![用 SOM 算法求解 TSP 问题](http://img.jiangsulong.com/220418/15322B261-7.jpg)
文章插图
选择与 x 距离最近的神经元 I
- 找到获胜神经元 I 后,需要更新神经元 I 和其邻居节点 (即拓扑结构上的邻居) 的特征向量 w 值,更新的时候有更新权重,越靠近 I 的神经元更新权重越大 。对于神经元 j,其更新权重可以用下面的公式计算:
![用 SOM 算法求解 TSP 问题](http://img.jiangsulong.com/220418/15322C912-8.jpg)
文章插图
神经元 j 的更新权重
- 得到更新权重后,可以更新神经元的特征向量 w 。更新的公式如下,主要是把特征向量往 x 的方向移动 。
![用 SOM 算法求解 TSP 问题](http://img.jiangsulong.com/220418/15322CX7-9.jpg)
文章插图
更新神经元的特征向量
训练完成后,输出层的神经元可以按照联系的紧密程度划分为几个部分,每部分代表一个簇或者一个类,如下图所示:
![用 SOM 算法求解 TSP 问题](http://img.jiangsulong.com/220418/1532262Y4-10.jpg)
文章插图
训练完成后,神经元可以划分为不同的簇
4.用 RSOM 求解 TSPRSOM (Ring SOM) 是一种特殊的 SOM 网络,和上面说的 SOM 主要有两个区别:
推荐阅读
- 利用USO服务将特权文件写入武器化
- DDos之SYN Flood攻击原理与使用金盾防火墙进行防护 AI云
- 柑普洱茶的功效与作用,冲泡普洱茶熟茶的水温
- 放松喝茶用心生活,喝茶的境界
- 各类养生茶有哪些作用,女性冬季养生茶有哪些
- 使用Java带你打造一款简单的外卖系统
- 3分钟短文 | MySQL存时间,到底该用timestamp还是datetime?
- Github上这5款非常好用的开源 Docker 工具,京东、华为都在用
- 梦见美景用手机拍照手机掉河里了 梦见美景用手机拍照却排不到
- 隔夜茶有用吗,用隔夜茶涂睫毛有用吗