用SOM 算法求解 TSP 問題

2020-12-24 NLP學習筆記

旅行商問題 (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 個城市上的效果比較差。

48 個城市 TSP 問題
101 個城市 TSP 問題
225 個城市 TSP 問題
561 個城市 TSP 問題

2.TSP 問題

TSP 問題稱為旅行商問題,問題的定義:有一個旅行商需要訪問 N 個城市,旅行商從一個城市出發,需要經過所有的 N 個城市且每個城市只經過一次,最後回到出發點,求最短的路徑。如下圖所示,從城市 A 出發,左側為 TSP 問題的最短路徑:

TSP 問題

之前介紹過 Pointer Network,可用於求解 TSP 問題,不熟悉的童鞋可以參考一下之前的文章指針網絡 Pointer Network。本文介紹另一種神經網絡 SOM 用於求解 TSP。

3.SOM 算法

SOM 神經網絡 (自組織映射 Self-Organizing Map),是一種競爭型神經網絡,通常用於無監督學習。一般的神經網絡通過損失函數計算梯度進行優化,而 SOM 採用了競爭的策略。

對於每一個輸入樣本 x,SOM 會計算所有神經元與 x 的距離 (例如歐式距離),選出獲勝神經元 (也稱為激活神經元,距離最近的),然後優化獲勝神經元附近的網絡拓撲結構。常見 SOM 結構如下,包括輸入層和輸出層 (競爭層):

SOM 示意圖

上面的圖中,輸入層的維度是 d (即每一個樣本 x 維度是 d),上面的二維網格中每一個圓點均是一個神經元,每個神經元都具有一個特徵向量 w (維度也是 d)。

神經元之間是具有拓撲結構的,常見的拓撲結構有矩形 (Rectangular) 和六邊形 (Hexagonal) 的,如下:

SOM 神經元常見的拓撲結構

SOM 訓練的過程如下:

隨機初始化輸出層神經元的特徵向量 w,維度是 d。對於每一個輸入樣本 x,找出與其最匹配的神經元,可以根據歐氏距離匹配,計算所有神經元和樣本 x 的歐式距離,選距離最近的神經元作為獲勝神經元 I。

選擇與 x 距離最近的神經元 I

找到獲勝神經元 I 後,需要更新神經元 I 和其鄰居節點 (即拓撲結構上的鄰居) 的特徵向量 w 值,更新的時候有更新權重,越靠近 I 的神經元更新權重越大。對於神經元 j,其更新權重可以用下面的公式計算:

神經元 j 的更新權重

得到更新權重後,可以更新神經元的特徵向量 w。更新的公式如下,主要是把特徵向量往 x 的方向移動。

更新神經元的特徵向量

訓練完成後,輸出層的神經元可以按照聯繫的緊密程度劃分為幾個部分,每部分代表一個簇或者一個類,如下圖所示:

訓練完成後,神經元可以劃分為不同的簇

4.用 RSOM 求解 TSP

RSOM (Ring SOM) 是一種特殊的 SOM 網絡,和上面說的 SOM 主要有兩個區別:

RSOM 輸出層的神經元拓撲結構是環形的。輸出層神經元個數不是固定的,會隨著訓練不斷增加神經元。RSOM 的結構如下所示:

RSOM 示意圖

RSOM 訓練時的超參數包括:Tint (每更新 Tint 次,就在輸出層插入一個新的神經元),Tmax (最大的訓練次數),N(t) (t 時刻神經元的總個數),Ci(t) (t 時刻神經元 i 獲勝的次數)。RSOM 訓練過程如下:

隨機初始化 N(0) 個神經元,所有神經元的計數 Ci(0) = 0。對於一個輸入 x,使用歐氏距離找出獲勝神經元 I。更新神經元 I 及其鄰居節點的特徵向量。

更新獲勝神經元及其鄰居的特徵向量

獲勝神經元的計數器 CI(t) 加 1,其鄰居不用加。如果更新了 Tint 次,則需要增加一個新的節點,新的節點在獲勝神經元和其鄰居之間添加。獲勝神經元 I 有左右兩個鄰居 (因為環形的),選擇距離遠的鄰居 f,並在 I 和 f 中間添加新神經元 r。新神經元 r 的特徵向量是 I 和 f 特徵向量的均值,同時修改新神經元 r 和獲勝神經元 I 的計數器:

新神經元 r 的特徵向量和計數器值

通過上面的步驟即可訓練 RSOM 網絡,在求解 TSP 問題時,輸入樣本 x 就是城市的坐標 (一般是 2 維,包含 x,y),每個神經元的特徵向量維度也是 2。訓練時每個城市都會找出一個獲勝神經元,然後把該神經元及其鄰居都拉向城市的坐標。可以理解為有個橡皮筋,每個城市把橡皮筋往自己的方向拉,最終橡皮筋上的不同點會固定到不同的城市中,如下圖所示。

RSOM 求解 TSP 示意圖

上圖中的黑色點代表城市,白色點代表神經元,紅色點代表獲勝神經元。

5.參考文獻

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

相關焦點

  • 模擬退火算法求解tsp問題
    它是 NP 困難問題,易於描述而難於求解,可簡單地描述為:該問題為一名旅行商人要去多個城市旅遊,其中每個城市僅去一次,且最終回到原點,求所走路徑最短的方案。隨著TSP問題中的城市數目增加,問題的複雜度呈指數上升,此類問題的大型實例無法用窮舉法這類常規算法求解,需尋找有效的近似方法計算。
  • 史上已獲得最優解的旅行商問題(TSP)的算例有八萬五千九百個節點
    為了幫助大家解決這個問題小編特地Google了一下相關的資料,竟然發現了這樣一個網站?!網站的連結如下:       http://www.math.uwaterloo.ca/tsp/index.html    不看不知道,一看嚇一跳,世界上能夠求解出最優解的最大規模的TSP算例規模竟然已經到達了85900個節點。
  • 遺傳算法(GA)求解旅行商問題(TSP)MATLAB代碼講解
    其實現方法如下: (1) 根據具體問題確定可行解域,確定一種編碼方法,能用數值串或字符串表示可行解域的每一解。 (2) 對每一解應有一個度量好壞的依據,它用一函數表示,叫做適應度函數,適應度函數應為非負函數。 (3) 確定進化參數群體規模 M 、交叉概率 pc 、變異概率 pm 、進化終止條件。
  • 優化 | 淺談旅行商問題(TSP)的啟發式算法
    編者按:作為經典NP-hard問題,TSP和VRP問題一直是業界和學界的關注重點。本文以業界為主要視角,通過VRP和TSP的聯繫做切入點來引入TSP問題,分類討論了啟發式算法在對稱TSP與非對稱TSP中的運用。
  • 混合算法(GA+TS)求解作業車間調度問題代碼解讀+完整JAVA代碼
    前兩篇文章中,我們介紹了FJSP問題,並梳理了一遍HA算法。這一篇文章對小編實現的(很亂很爛的)代碼進行簡單解讀。往期回顧:種群進化+鄰域搜索的混合算法(GA+TS)求解作業車間調度問題(JSP)-算法介紹混合算法(GA+TS)求解作業車間調度問題(JSP)-禁忌搜索部分代碼下載請關注公眾號,後臺回復【FJSPHA】即可,不包括【】代碼框架
  • Chemkin 求解複雜化學反應問題的得力助手
    Chemkin軟體最早是由美國Sandia實驗室在1980年的時候開發推出,如今已被ANSYS收購。  Chemkin是一整套模擬詳細化學反應或者表面反應以及燃燒分析的專業軟體,先進的求解器和完整的功能允針對特定的應用開發快速和準確模型。它包括「核心程序(Core Utilities)」和「應用程式(Applicaction)兩級程序包」。以表面反應、氣相反應、傳遞過程這三個核心軟體包為基礎,Chemkin提供了對多種常見化學反應模型及後處理程序。
  • 從米開朗基羅到算法的三種設計策略
    在上一節回顧了算法的設計流程,並著重介紹了「對問題的觀察」。在這一節,回顧如何依據對問題內在結構的觀察,採用相應的策略設計算法。對於一個 math problem,我們可以用一周的時間嘗試正面求解,如果求解不出,會不會不存在解呢?我們可以再用一周的時間證明這件事,依次反覆。
  • 柯西型矩陣的快速QR分解算法
    對於形如A=UTV(其中U和V為歸一化矩陣,T為上三角矩陣)的位移結構矩陣,設計其正交分解的有效算法,目前存在很多困難。然而,這類問題的求解對於最小二乘和基於秩的QR分解等問題是非常關鍵的。
  • 破51項紀錄的背後:華為雲擎天架構調度求解引擎解讀
    我們的解決方案:面向雲場景的約束規劃問題優化求解引擎為了解決雲上遇到的此類複雜的約束優化問題,尤其是資源規劃與調度相關問題,華為雲擎天架構調度與算法團隊設計了面向雲場景的約束規劃問題優化求解引擎。或者說,理論上,並不存在一個在所有問題上都能獲得最優結果的算法。常用求解NP難約束優化問題的方法,大致可分為精確算法和啟發式算法。精確算法,如Branch-and-cut, Branch-and-bound 等,可以在理論上保證算法朝最優解收斂,但是通常適用於問題規模較小的情況。
  • 菜鳥網絡算法專家朱禮君:物流優化問題在大數據時代被賦予新的意義...
    還有一點也是我們最近在研究的方向,就是怎麼用機器學習的思想來求解傳統物流優化問題,這也是在學術界上非常有挑戰的一個新的方向,我們在這個過程中也有一些經驗。物流算法應用案例下面分享一下我們在菜鳥網絡做過的一些物流算法應用的案例。
  • 人工智慧之ICA算法
    對於盲源分離問題,ICA是指在只知道混合信號,而不知道源信號、噪聲以及混合機制的情況下,分離或近似地分離出源信號的一種分析過程。  加入標準正交性約束(orthonormality constraint)後,ICA獨立成分分析相當於求解如下優化問題:
  • 阿里三面慘遭被虐,關於數據結構與算法竟然一竅不通!
    本書特點:所有代碼用Java實現。數據結構難點啟發思考。為每個問題列舉可能的解決辦法。基於不同複雜度提供多種巧妙的解決方法。第1章緒論本章的目的是闡述算法分析的重要性、它們的表示法和關係,並儘可能求解多個問題第2章遞歸和回溯本章將探討一個重要的內容「遞歸"。
  • 自我代碼提升之啟發式算法(番外篇)
    本期給大家帶來一些啟發式算法的介紹和代碼實現。嚴格來說,啟發式算法並不屬於機器學習領域的方法,其解決的問題也並不是分類和回歸預測,因此本篇屬於該系列番外篇。啟發式算法簡介在數學建模的經典問題當中,有一種問題是最優化問題,即在給定條件下,給出能夠是的目標實現最優的答案的方法。
  • 動態規划算法 --- 01背包問題
    動態規划算法介紹:動態規划算法和分治算法類似,也是將待求解問題分成若干個小問題一步步求解,不同的是,每一個小問題求解過程依賴於上一個小問題的解。動態規劃問題可以通過填表法來得到解,最經典的應用就是背包問題。二.
  • NSGAII與動態算子的結合算法 | 動態多目標旅行商問題(二)
    在動態多目標旅行商問題(一)這篇推文中,我們講解了動態多目標旅行商問題(Dynamic Multi-Object Traveling Salesman Problem,DMOTSP,DMOTSP)的概念,同時也講解了動態多目標算法的預備算法:Inver-Over算法。
  • 超算求解要用6億年 它只需200秒
    12月4日,中國科學技術大學宣布該校潘建偉等人成功構建76個光子的量子計算原型機「九章」,求解數學算法高斯玻色取樣只需200秒,而目前世界最快的超級計算機要用6億年。這一突破使我國成為全球第二個實現「量子優越性」的國家。  「量子優越性像個門檻,是指當新生的量子計算原型機,在某個問題上的計算能力超過了最強的傳統計算機,就證明其未來有多方超越的可能。」
  • 經典算法之背包問題
    看看今天的背包問題能不能幫助到你吧。背包問題(Knapsack problem)可以描述為:給定一組物品,每種物品都有自己的重量和價格,在限定的總重量內,我們如何選擇,才能使得物品的總價格最高。指的是包裝你最有價值或有用的物品而不會超載你的行李的常見問題。
  • 二十世紀最偉大的十大經典算法
    而Dantzig提出的單純形法便是求解類似線性規劃問題的一個極其有效的方法。Krylov子空間迭代法是用來求解形如Ax=b 的方程,A是一個n*n 的矩陣,當n充分大時,直接計算變得非常困難,而Krylov方法則巧妙地將其變為Kxi+1=Kxi+b-Axi的迭代形式來求解。這裡的K(來源於作者俄國人Nikolai Krylov姓氏的首字母)是一個構造出來的接近於A的矩陣,而迭代形式的算法的妙處在於,它將複雜問題化簡為階段性的易於計算的子步驟。
  • 什麼是近似算法?它適用於哪些問題?這篇文章給你答案
    本文將介紹近似算法及其對某些標準問題的適用性,以及哪些因素會影響到特定算法的選擇。什麼是近似算法?近似算法是一種處理優化問題 NP 完全性的方式,它無法確保最優解。近似算法的目標是在多項式時間內儘可能地接近最優值。它雖然無法給出精確最優解,但可以將問題收斂到最終解的近似值。
  • 亞馬遜check in問題,求解
    > 亞馬遜check in問題,求解 我們公司發往美國MDW2倉庫的亞馬遜貨物自五月份開始,每一次都是在快遞投遞半個月之後才被亞馬遜checkin。。