2013-05-30 103 views
3

我與遺傳算法的81個城市實施TSPTW(與時間窗口旅行商),我採用以下步驟:TSPTW用遺傳算法

mutation prob=0.03 
population size=100 
-Generate random population according to the value of population size intialized 
-Sort the generated population 
-Looping for populations and determine two parents by roulette selection, apply crossover on the parents, get child and add it to children list 
-I am saving the best solution over the algorithm 
-Sort the Children, replace worst tour in populations with best one of children 
until no good children is existing is better than worst solution in populations 
-loop (1 to population size)in all populations and Apply mutation of each worst solution with solution i , if the mutated solution is better than the worst solution of children. I insert it in populations in its place according to its fitness function and remove the worst one. 

我不能找到一個好的結果,我跑它到了特定的時間,但是我發現有時候它會陷入解決方案,無法獲得更好的結果。 我改變了

參數(人口規模= 20000,1000,100,突變 概率= 0.03,0.02,..)

我也有循環交叉測試它,並下令交叉

我想知道,我的步驟是正確的嗎?我如何正確指定種羣大小和變異概率?

+1

你的突變是錯誤的。突變可能發生在任何一個孩子身上,而不僅僅是最糟糕的(如果我對你最後一步的理解是正確的)。這可能不是你問題的根源,因此不是答案。 – NWS

+0

我已經在人羣中添加了更好的孩子,所以當突變在人羣中完成時,它也包括一些更好的孩子 – Yasmin

+0

再次看着你的步驟,我懷疑你對如何交叉和產生新的人羣感到困惑。你讀過:http://en.wikipedia.org/wiki/Genetic_algorithm和文章http://en.wikipedia.org/wiki/Selection_%28genetic_algorithm%29&http://en.wikipedia.org/wiki/ Crossover_%28genetic_algorithm%29? – NWS

回答

2

你的算法可能太精英了。它只允許更好的解決方案進入你的人口。我認爲在某些時候它將包括所有類似的個人。沒有多樣性遺留和你的精英替代只有少量的突變可能會引入新的遺傳物質。

我會建議只使用精英主義,因爲你只讓上一代最好的個體生存下來。其餘的人都應該被新一代所取代。

或者你可以用我們發明的後代選擇方法。對於每個孩子的生存來說,它肯定比父母的更好。否則,他們會被丟棄,並選擇一對新的父母來創造一個新的孩子。你循環產生新的孩子,直到你有足夠的人口填補新的人口。然後你替換你的人口並重新開始。後代選擇遺傳算法在質量方面通常優於遺傳算法。它在HeuristicLab中實施。如果您打開VRPTW並只允許一輛車,您應該能夠對TSPTW進行建模。

另一種選擇是使用基於軌跡的算法,例如,基於禁忌搜索,如統一禁忌搜索。由於時間窗口解決方案和達到不同的局部最優解,可能需要約束鬆弛。

+0

我會檢查圖書館,但禁忌總是給我一個非常好的結果,幾乎在0-5違反約束條件之間,所以如果我在將它們添加到人羣之前將它用於兒童,我認爲它會給我帶來好結果不是因爲遺傳學本身,但因爲禁忌。 我沒有得到你的意思,「我會建議只使用精英主義,因爲你......新一代。」你的意思是說,如果我拯救的最佳解決方案比當前生成的孩子的最佳解決方案更好,我不會將這些孩子添加到人羣中,否則用新孩子替換所有人羣? – Yasmin

+0

在標準遺傳算法中,您不會對新老一代進行關於它們適應性的比較。您已經考慮到了選擇父母的適應性。遺傳算法中的1-Elitism意味着你可以充分利用老年人口,再加上(n-1)個孩子來形成新的人口/一代人。如果你使用健身比例選擇,並且使用健身替代,那麼你太過貪婪,並且會過早地收斂。遺傳算法的大問題是遺傳漂移(相關遺傳信息的丟失)。你可以在維基百科上閱讀它。 – Andreas

+0

HeuristicLab不是一個庫btw。它是一個運行在Windows上的軟件,它有一個GUI。你當然也可以對它進行編程。 – Andreas