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的值太大,可能會導致算法目前所處的較好的搜索狀態倒退回原來較差的情況。