遺傳算法求解TSP問題


1、遺傳算法

前一篇遺傳算法的基本內容在之前的博客已經應用過了

之前遺傳算法解決的是函數優化問題,即求解最大值或最小值問題;

此次要解決的是組合優化問題中的TSP問題,即旅行商問題。

這邊先介紹一下TSP問題

TSP問題(Traveling Salesman Problem),即旅行商問題,又譯為旅行推銷員問題、貨郎擔問題,是數學領域中著名問題之一。假設有一個旅行商人要拜訪n個城市,他必須選擇所要走的路徑,路徑的限制是每個城市只能拜訪一次,而且最后要回到原來出發的城市。路徑的選擇目標是要求得的路徑路程為所有路徑之中的最小值。

簡單地說,TSP問題就是要找到圖中的最短哈密爾頓回路,即全局最短路徑。

然后遺傳算法可以模仿生物進化,然后可以找到一個近似最優解,但其不一定是全局最優解。

2、實驗原理

1)產生初始種群;隨機生成N個個體作為初始群體popm,隨機選擇一個種群;
2)適應度函數;個體評價 計算P(t)中各個個體的適應度,遺傳算法在進化搜索中基本不利用外部信息,僅以適應度函數為依據,利用種群中每個個體的適應度值來進行搜索。TSP的目標是路徑總長度為最短
3)選擇運算;將使適應度較大(優良)個體有較大的存在機會,而適應度較小(低劣)的個體繼續存在的機會也較小。簡單遺傳算法采用賭輪選擇機制
4)交叉運算 將交叉算子作用於群體;
5)變異運算 將變異算子作用於群體,並通過以上運算得到下一代群體P(t + 1);
6)終止條件 輸出解。

3、代碼實現

1.city.m:隨機生成N個城市的坐標並保存

 

2.plot_route.m:實現連點畫圖

 

 

 3.染色體的路程代價函數 mylength.m

 

 

 

 4.適應度函數fit.m

 

 

 5.交叉操作函數 cross.m

 

 

 

 6.變異函數 Mutation.m

 

 

 7.main函數

3、結果分析

調整參數並分析運行結果

(1)對於city_25.mat文件中的城市序列,參數ITER=2000,m=2,Pc=0.8,Pm=0.05保持不變,調整種群個數M的值,觀察其結果變化:

M=50

 

 

 M=100

 

 

 

 M=500

 

 

 由運行結果可知當M=100時得到TSP的最短路徑長度均小於M=50和M=500運行得出的最短路徑長度。

因此可以得出結論:群體個數M參數不宜過大或過小
若M設置較大,一次進化所覆蓋的模式較多,可以保證群體的多樣性,從而提高算法的搜索能力,但是由於群體中染色體的個數較多,勢必增加算法的計算量,降低了算法的運行效率。
若M設置較小,雖然降低了計算量,但是同時降低了每次進化中群體包含更多較好染色體的能力。

 (2)同上,調整交叉概率Pc的值,觀察其運行結果

 

Pc=0.4

 

 

 Pc=0.8

 

 

 Pc=1.2

 

由運行結果可見較差概率影響着算法的運行效率,但對得出的最優值不能保證其最優性。

參考資料得Pc的取值一般為0.4~0.99。
(3)
Pm=0.001

 

 

 Pm=0.05

 

 Pm=0.20

 

 

 由運行結果可得

Pm的值不宜過大。因為變異對已找到的較優解具有一定的破壞作用,如果Pm的值太大,可能會導致算法目前所處的較好的搜索狀態倒退回原來較差的情況。

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM