簡體   English   中英

如何改善TSP的遺傳算法?

[英]How can I improve this genetic algorithm for the TSP?

這是我的遺傳算法,分步進行:

  1. 隨機生成兩個初始種群,然后從兩者中選擇最適合的游覽。

  2. 執行有序分頻,選擇第一個擬合巡回的隨機部分,然后從第二個依次填充其余部分。

  3. 如果該游覽僅是初始人口中排名前10%的游覽的1.3倍(我實際上只是通過歸納法完成,將產生的貧困旅行選出來),則通過隨機交換兩個城市來改變此游覽的方式-我很樂意改變這一點,但想不出更好的方法。

    • 該突變選自幾個突變的群體。
  4. 返回產生的游覽。

但是,與分頻器不同的是,變異幾乎總是更糟。

非常感謝您的幫助。 謝謝!

Google Analytics(分析)的問題是縮小搜尋空間的速度太快,無法達成當地的最高解決方案。 您需要確保除了選擇/健身功能以外,不要以任何其他方式領導您的解決方案。 所以當你說

為什么您會選擇一個好的解決方案,然后執行最有可能使它成為更糟糕的解決方案的功能

,原因是您想讓解決方案退后一步,它可能需要變得更糟才能變得更好。 因此,實際上,您應該從遺傳算子中刪除所有判斷邏輯,然后再由選擇過程中選擇。

同樣,交叉和變異應該被視為生成孩子個體的兩種不同方式,您應該使用其中一種。 實際上,這意味着您有機會執行單親突變或兩個親本之間的交叉。 通常,突變機會只有5%,而使用交叉產生其他95%。

交叉保留了父母雙方的遺傳信息(孩子是鏡像),因此一個孩子比父母更糟,另一個孩子比父母更好(或兩者都一樣)。 因此,從這種意義上講,跨界工作如果有所變化,您總是會得到更好的個人。

另一方面,變異並不能保證會有更好的個體,但是它的存在是為了引入新數據,從而有助於將遺傳算法從局部最大值場景中轉移出來。 如果突變不能改善個體並使之惡化,那么無論如何,選擇突變育兒的機會就會減少(即,突變運算符本身不需要這種邏輯)。

你選擇最好的變異

嚴格來說並非如此,好的人應該有更高的被選中的機會。 在這里,有一個微妙的區別,即BAD個人也可能被選為父母。 同樣,這有助於減少達到局部最大值解的機會。 這也意味着,一代人中最好的人實際上可能(而且經常如此)變得更糟。 為了解決這個問題,我們通常采用“精英主義”,即最好的人總是被復制到下一代(正在/不進行任何操作)。

如果我可以評論您使用的是哪種遺傳算子,那也將是有益的。 根據我的經驗,我發現循環交叉和反轉突變效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM