2015-12-14 55 views
1

我很確定我的問題必須經過調查,但我錯過了會幫助我搜索文獻的行話。我正在寫一個遺傳算法來解決一類旅行商問題(TSP)。像標準TSP一樣,我的變體沒有定位的概念。在一個標準的TSP中,由於要求形成一個電路回到起始城市,所以對於任何最佳解決方案,應該有兩條同樣優化的路線,這兩條路線就是該電路周圍的兩條相反的路線。旅行商問題的遺傳算法中的拮抗作用沿同一條路線的相反路徑

在遺傳算法中,我會想象有時會出現相同(或類似)路徑的良好解決方案,但在不同基因型的相反方向編碼。我也想象,這些相反的路線之間的大多數交叉往往會相互對立,因爲我的意思是他們的後代不適合,因爲他們試圖只從相反的方向優化相同/相似的路線。這兩種基因型只會從相對的兩側爬上同一座小山。看起來這個問題會減慢搜索速度。

我的假設是否正確?你知道用什麼術語來描述這個問題,或者有什麼技巧可以解決這個問題嗎?在一個理想的世界裏,你需要兩個適合但幾乎相反的基因型進行編碼或交叉,以保持整個路線結構,而不管方向如何。

+0

這是我想到的一種可能的解決方案。通過在向前和反向兩個方向插入「施主」順序來執行交叉。然後測試兩種重組基因型的適應性,並保持更好的基因型。 – user1856955

回答

1

對於遺傳算法和TSP,我假設你正在使用你的染色體的置換編碼。

現在,假設一條獨特的路徑是最優的---這是通常的情況;即最優解之間不存在簡併度---反循環置換也是最優的。對於不同的起點城市來說,同樣的道路也是如此;對於n個城市,在您的染色體中2 * n種不同的置換編碼中可以找到相同的不同路徑(2爲反向循環,n爲第一條目=起始城市,染色體中)。

但實際上,這不是問題。非最優路徑的數量非常大,以至於反向循環良好路徑之間的「對抗性」的可能效果在實踐中將不存在。

但是,您可能已經很清楚的一個非常重要的問題是交叉的執行方式。使用置換編碼,簡單的交叉會導致不可行的路徑,所以必須考慮到所產生的子染色體仍然描述有效的TSP置換來執行編碼。

收起來;你應該擔心對抗w.r.t.循環的反向路徑,因爲這在實踐中不是問題。相反,重點研究差異交叉方法。

參見例如遺傳算法爲Traveling Salesman Problem using Sequential Constructive Crossover Operator


最後一點:從經典的優化背景的人,一開始,我就很難接受關於隨機優化方法,如遺傳算法或蟻羣opimization,所以「在實踐中...」語句上。但是我已經學會了接受這些方法,因爲這些方法通過構建而不是確定性的,因此「實踐中......」的陳述通常是我們所期望的最好的。

+0

只需快速跟進。在我特別的遺傳算法實現中,我看到了循環反向路徑之間的對立。但實際上,一方很快勝出,另一方則滅絕。但是,如果兩者都存在,他們確實會導致不適合的後代。在某種程度上,這可以通過操縱精英主義和/或通過插入兩個命令並選擇最合適的一個來控制,如上所述。但正如dfri所言,總的來說,這只是一個短暫的麻煩。 – user1856955