粒子群算法(PSO)求解TSP问题
TSP
1.1問題描述
????給定一系列城市和每對城市之間的距離,求解訪問每一座城市一次并回到起 始城市的最短回路。這里給定 10 個城市和兩兩之間的距離。如圖 2.1 所示。
1.2 粒子群算法求解
1.2.1 求解思路
????粒子群優化算法(PSO),粒子群中的每一個粒子都代表一個問題的可能解, 通過粒子個體的簡單行為,群體內的信息交互實現問題求解的智能性。
????在 TSP 問題中,我們將每一條訪問城市的順序編碼為一個個體,每個種群有 n 個個體,即有 n 種訪問順序,同時,每個個體又有 9 個染色體,即[2,10]的隨 機排列(城市 1 作為起始和終止城市,不進行粒子操作),代表訪問城市的順序。 通過每一代的演化,對粒子群進行位置、速度更新操作,選擇合適個體(最優的 順序)。
(1)編碼:位置(巡回順序):符號編碼。速度編碼:定義為交換子序列。 單個交換子 si ={n,m}對個體的第 n 個和第 m 個元素進行交換,則速度表示為 交換子序列 ss = {s1,s2…sm}由 m 個交換子組成,同時交換子序列有順序, 從第一個交換子操作。
(2)適應度:為了能夠讓適應度高的個體保存下來,定義適應度為:fitvalue=1/distance?collision(1.1)fitvalue =1/distance *collision \tag{1.1}fitvalue=1/distance?collision(1.1)其中 distance 為每個個體(路徑)的距離。顯然,如果距離最短,則適應 度最高,更利于遺傳給后代。
(3)速度更新:
vid=wvid+c1r1(pid?xid)+c2r2(pgd?xid)(1.2)v_{id}=wv_{id}+c_{1}r_1( p_{id} -x_{id} ) +c_2r_2 ( p_{gd}-x_{id} ) \tag{1.2}vid?=wvid?+c1?r1?(pid??xid?)+c2?r2?(pgd??xid?)(1.2)
????其中 w 為權重系數,vidv_{id}vid? 為速度,c1c_1c1?、c2c_2c2?為學習因子,pidp_{id}pid?、pgdp_{gd}pgd?為個體最優位置和全局最優位置,xidx_{id}xid? 為當前位置,r1r_1r1?、r2r_2r2?為隨機數。
??定義:
??[1] c*ss 定義為取前 c(c 為小數)個交換子構成新的交換子序列。
??[2](p-x)定義為兩個元素之間的交換子。
??[3] 交換子和交換子的“+”定義為將交換子合并。
(4)位置更新: xid=xid+vidx_{id}=x_{id}+v_{id}xid?=xid?+vid? ,其中vidv_{id}vid?為速度, xidx_{id}xid?為位置。序列和交換子 的“+”定義為對序列進行交換子操作。
1.2.2 流程圖
1.3 實驗結果
1.4 結果分析
????粒子群算法同遺傳算法一樣,都是不穩定的,每次運行的結果都會不一致。 但是,每次運行的結果不會相差很大,最短距離都在 40 左右,以上僅僅給出了 三次結果。 粒子群算法在計算最優解會出現陷入局部最優的情況,但是它的運行效率 高,在實際的應用中有很好的效果。
1.5 源碼
????GitHub傳送門!!!
總結
以上是生活随笔為你收集整理的粒子群算法(PSO)求解TSP问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信号与系统 --- 复指数函数(个人学习
- 下一篇: 4款FTP搜索引擎比专业