您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

用 SOM 算法求解 TSP 问题

时间:2020-07-19 11:26:35  来源:  作者:

旅行商问题 (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 问题

48 个城市 TSP 问题


用 SOM 算法求解 TSP 问题

101 个城市 TSP 问题


用 SOM 算法求解 TSP 问题

225 个城市 TSP 问题


用 SOM 算法求解 TSP 问题

561 个城市 TSP 问题

2.TSP 问题

TSP 问题称为旅行商问题,问题的定义:有一个旅行商需要访问 N 个城市,旅行商从一个城市出发,需要经过所有的 N 个城市且每个城市只经过一次,最后回到出发点,求最短的路径。如下图所示,从城市 A 出发,左侧为 TSP 问题的最短路径:

用 SOM 算法求解 TSP 问题

TSP 问题

之前介绍过 Pointer Network,可用于求解 TSP 问题,不熟悉的童鞋可以参考一下之前的文章《指针网络 Pointer Network》。本文介绍另一种神经网络 SOM 用于求解 TSP。

3.SOM 算法

SOM 神经网络 (自组织映射 Self-Organizing Map),是一种竞争型神经网络,通常用于无监督学习。一般的神经网络通过损失函数计算梯度进行优化,而 SOM 采用了竞争的策略。

对于每一个输入样本 x,SOM 会计算所有神经元与 x 的距离 (例如欧式距离),选出获胜神经元 (也称为激活神经元,距离最近的),然后优化获胜神经元附近的网络拓扑结构。常见 SOM 结构如下,包括输入层和输出层 (竞争层):

用 SOM 算法求解 TSP 问题

SOM 示意图

上面的图中,输入层的维度是 d (即每一个样本 x 维度是 d),上面的二维网格中每一个圆点均是一个神经元,每个神经元都具有一个特征向量 w (维度也是 d)。

神经元之间是具有拓扑结构的,常见的拓扑结构有矩形 (Rectangular) 和六边形 (Hexagonal) 的,如下:

用 SOM 算法求解 TSP 问题

SOM 神经元常见的拓扑结构

SOM 训练的过程如下:

  • 随机初始化输出层神经元的特征向量 w,维度是 d。
  • 对于每一个输入样本 x,找出与其最匹配的神经元,可以根据欧氏距离匹配,计算所有神经元和样本 x 的欧式距离,选距离最近的神经元作为获胜神经元 I。
用 SOM 算法求解 TSP 问题

选择与 x 距离最近的神经元 I

  • 找到获胜神经元 I 后,需要更新神经元 I 和其邻居节点 (即拓扑结构上的邻居) 的特征向量 w 值,更新的时候有更新权重,越靠近 I 的神经元更新权重越大。对于神经元 j,其更新权重可以用下面的公式计算:
用 SOM 算法求解 TSP 问题

神经元 j 的更新权重

  • 得到更新权重后,可以更新神经元的特征向量 w。更新的公式如下,主要是把特征向量往 x 的方向移动。
用 SOM 算法求解 TSP 问题

更新神经元的特征向量

训练完成后,输出层的神经元可以按照联系的紧密程度划分为几个部分,每部分代表一个簇或者一个类,如下图所示:

用 SOM 算法求解 TSP 问题

训练完成后,神经元可以划分为不同的簇

4.用 RSOM 求解 TSP

RSOM (Ring SOM) 是一种特殊的 SOM 网络,和上面说的 SOM 主要有两个区别:

  • RSOM 输出层的神经元拓扑结构是环形的。
  • 输出层神经元个数不是固定的,会随着训练不断增加神经元。

RSOM 的结构如下所示:

用 SOM 算法求解 TSP 问题

RSOM 示意图

RSOM 训练时的超参数包括:Tint (每更新 Tint 次,就在输出层插入一个新的神经元),Tmax (最大的训练次数),N(t) (t 时刻神经元的总个数),Ci(t) (t 时刻神经元 i 获胜的次数)。RSOM 训练过程如下:

  • 随机初始化 N(0) 个神经元,所有神经元的计数 Ci(0) = 0。
  • 对于一个输入 x,使用欧氏距离找出获胜神经元 I。
  • 更新神经元 I 及其邻居节点的特征向量。
用 SOM 算法求解 TSP 问题

更新获胜神经元及其邻居的特征向量

  • 获胜神经元的计数器 CI(t) 加 1,其邻居不用加。
  • 如果更新了 Tint 次,则需要增加一个新的节点,新的节点在获胜神经元和其邻居之间添加。获胜神经元 I 有左右两个邻居 (因为环形的),选择距离远的邻居 f,并在 I 和 f 中间添加新神经元 r。新神经元 r 的特征向量是 I 和 f 特征向量的均值,同时修改新神经元 r 和获胜神经元 I 的计数器:
用 SOM 算法求解 TSP 问题

新神经元 r 的特征向量和计数器值

通过上面的步骤即可训练 RSOM 网络,在求解 TSP 问题时,输入样本 x 就是城市的坐标 (一般是 2 维,包含 x,y),每个神经元的特征向量维度也是 2。训练时每个城市都会找出一个获胜神经元,然后把该神经元及其邻居都拉向城市的坐标。可以理解为有个橡皮筋,每个城市把橡皮筋往自己的方向拉,最终橡皮筋上的不同点会固定到不同的城市中,如下图所示。

用 SOM 算法求解 TSP 问题

RSOM 求解 TSP 示意图

上图中的黑色点代表城市,白色点代表神经元,红色点代表获胜神经元。

5.参考文献

A simple learning algorithm for growing ring SOM and its Application to TSP



Tags: SOM 算法求解   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
旅行商问题 (TSP 问题) 是一个 NP-hard 问题,给定若干个城市,求旅行商从某个城市开始,遍历所有城市最终回到出发点的最短路径 (每个城市只经过一次)。求 TSP 的最优解时间较长,...【详细内容】
2020-07-19  Tags: SOM 算法求解  点击:(287)  评论:(0)  加入收藏
▌简易百科推荐
前言Kafka 中有很多延时操作,比如对于耗时的网络请求(比如 Produce 是等待 ISR 副本复制成功)会被封装成 DelayOperation 进行延迟处理操作,防止阻塞 Kafka请求处理线程。Kafka...【详细内容】
2021-12-27  Java技术那些事    Tags:时间轮   点击:(1)  评论:(0)  加入收藏
博雯 发自 凹非寺量子位 报道 | 公众号 QbitAI在炼丹过程中,为了减少训练所需资源,MLer有时会将大型复杂的大模型“蒸馏”为较小的模型,同时还要保证与压缩前相当的结果。这就...【详细内容】
2021-12-24  量子位    Tags:蒸馏法   点击:(11)  评论:(0)  加入收藏
分稀疏重建和稠密重建两类:稀疏重建:使用RGB相机SLAMOrb-slam,Orb-slam2,orb-slam3:工程地址在: http://webdiis.unizar.es/~raulmur/orbslam/ DSO(Direct Sparse Odometry)因为...【详细内容】
2021-12-23  老师明明可以靠颜值    Tags:算法   点击:(7)  评论:(0)  加入收藏
1. 基本概念希尔排序又叫递减增量排序算法,它是在直接插入排序算法的基础上进行改进而来的,综合来说它的效率肯定是要高于直接插入排序算法的;希尔排序是一种不稳定的排序算法...【详细内容】
2021-12-22  青石野草    Tags:希尔排序   点击:(6)  评论:(0)  加入收藏
ROP是一种技巧,我们对execve函数进行拼凑来进行system /bin/sh。栈迁移的特征是溢出0x10个字符,在本次getshell中,还碰到了如何利用printf函数来进行canary的泄露。ROP+栈迁移...【详细内容】
2021-12-15  星云博创    Tags:栈迁移   点击:(22)  评论:(0)  加入收藏
一、什么是冒泡排序1.1、文字描述冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地...【详细内容】
2021-12-15    晓掌柜丶韶华  Tags:排序算法   点击:(16)  评论:(0)  加入收藏
在了解golang的map之前,我们需要了解哈希这个概念。哈希表,又称散列表(Hash table),是根据键(key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算出一个键值的函数,将...【详细内容】
2021-12-07  一棵梧桐木    Tags:哈希表   点击:(14)  评论:(0)  加入收藏
前面文章在谈论分布式唯一ID生成的时候,有提到雪花算法,这一次,我们详细点讲解,只讲它。SnowFlake算法据国家大气研究中心的查尔斯·奈特称,一般的雪花大约由10^19个水分子...【详细内容】
2021-11-17  小心程序猿QAQ    Tags:雪花算法   点击:(24)  评论:(0)  加入收藏
导读:在大数据时代,对复杂数据结构中的各数据项进行有效的排序和查找的能力非常重要,因为很多现代算法都需要用到它。在为数据恰当选择排序和查找策略时,需要根据数据的规模和类型进行判断。尽管不同策略最终得到的结果完...【详细内容】
2021-11-04  华章科技    Tags:排序算法   点击:(40)  评论:(0)  加入收藏
这是我在网上找的资源的一个总结,会先给出一个我看了觉得还行的关于算法的讲解,再配上实现的代码: Original author: Bill_Hoo Original Address: http://blog.sina.com.cn/s/bl...【详细内容】
2021-11-04  有AI野心的电工和码农    Tags: KMP算法   点击:(36)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条