最近在做人工智慧的課設,碰到乙個與tsp類似的問題,今天嘗試了一下用遺傳演算法求解tsp,下面是我碰到的問題以及我的一些想法:
1.如何對個體進行編碼?
tsp問題的實質是求乙個最短的哈密頓迴路,如果將城市標號為0,1,2...n-1,那麼tsp的乙個解就是乙個圓排列,等價於乙個規定了起點的排列,所以容易想到可以用順序編碼方式,即用乙個陣列儲存旅遊順序。
2.如何快速初始化種群?
根據上述編碼方式,種群初始化就是產生一系列隨機排列,c++有乙個函式rand_shuffle(v.begin(),v.end())可以打亂乙個排列,用這個可以實現種群的快速初始化。
3.如何交叉?
這個問題可以說是遺傳演算法求tsp的關鍵,也是難點所在,在這裡,交叉形式上就是由兩個排列產生兩個新的排列,但是要保持原來的排列的優越性。目前用的比較多的是順序交叉法。
4.變異運算元
求tsp時,變異運算元採用比較多的是交換2個站點的旅遊順序。變異的目的是增加種群的多樣性,我有乙個想法,就是將乙個排列變成它的互補排列,例如將1 4 2 3變成4 1 3 2,這樣應該也滿足增加多樣性的要求,可以試一試。
暫時就寫這麼多吧,若有錯的地方或者大家有更好的想法,還望不吝指教。
用遺傳演算法求解的tsp問題
對於遺傳演算法的基本定義及內容筆者就不重複了,這裡附上 供大家去學習參看。遺傳演算法 大家也可以參看我其他的文章,比如智慧型演算法和數學建模專題,裡面都有詳細的介紹和題目 完全夠讀者學習和使用的,後面筆者也會對這些專題和其他內容進行更新,敬請期待哦。題目 在一條裝配線上用乙個機械手去固定待裝配部件上...
tsp遺傳演算法
include include include include include include using namespace std define m 10 種群規模 define n 31 省會 首府城市數量 define t 10000 遺傳代數 define earth radius 637...
tsp問題 遺傳演算法解決
tsp問題最簡單的求解方法是列舉法。它的解是多維的 多區域性極值的 趨於無窮大的複雜解的空間,搜尋空間是n個點的所有排列的集合,大小為 n 1 可以形象地把解空間看成是乙個無窮大的丘陵地帶,各山峰或山谷的高度即是問題的極值。求解tsp,則是在此不能窮盡的丘陵地帶中攀登以達到山頂或谷底的過程。這一篇將...