2010-03-30 37 views
5

我讀了各種各樣的東西,並理解了所涉及的原理和概念,但是沒有一篇文章提到如何計算染色體適應度的細節(它代表了一條路線)涉及相鄰城市(在染色體中)不直接由邊緣連接(在圖中)。例如,給定一個染色體1 | 3 | 2 | 8 | 4 | 5 | 6 | 7,其中每個基因代表圖/地圖上城市的指數,我們如何計算它的適應度(即例如,如果在城市2和8之間沒有直接的邊緣/鏈接,那麼我們是否遵循某種貪婪算法來計算2到8之間的路線,並將該路線的距離加上總數?把遺傳算法應用到旅行商的一個細節問題

將GA應用於TSP時,此問題似乎很常見。任何之前完成的人請分享您的經驗。謝謝。

+1

正如@kibibu所說,你永遠不應該能夠產生無效的染色體。這適用於任何GA實現。 – 2010-03-30 00:43:47

回答

6

如果圖表上2和8之間沒有鏈接,那麼對於經典旅行商問題,任何具有2 | 8或8 | 2的染色體無效。如果您發現2至8之間的其他路線,您可能會違反「每次訪問一次」的要求。

一個非常不切實際的解決方案是將這些節點之間的邊緣以極高的距離包含在內,如果您的語言支持它,甚至可以包含+ INF。這樣,您的標準最小化適應度函數將自然修剪它們。

我認爲問題的原始表述包括所有節點之間的邊緣,所以這是一個非問題。

+0

我挖掘+ INF解決方案作爲解決問題的最簡單方法 – JohnIdol 2010-03-30 14:08:03

+1

解決此問題的最簡單方法是完全避免它:確保每對節點之間存在邊緣。 – Ross 2010-03-31 11:41:48

+0

這就是我的意思 - 一個瘋狂的高距離的實際邊緣。僞邊緣是一個糟糕的選擇,改變了。 – kibibu 2010-03-31 12:21:09

1

這是問題的確切類型,專門的交叉和變異方法已經應用於基於遺傳算法的TSP問題的解決方案。看到這個question

1

如果染色質不代表有效的解決方案,那麼它完全不適合解決問題。所以取決於你如何訂購健身。即,如果較低的數字代表更多的適應性(當健身代表總成本時可能是一個好主意),那麼當您遇到無效的基因序列時,您可以將其指定爲最大值,並打破對該染色體的任何進一步適應性計算。

(或反之,分配給它的零健身如果需要更高的健身意味着chromosone更適合這項工作)

然而,正如其他人指出,它可以更好地保證無效chromosones不發生。然而,如果這本身就是一個過分強迫的過程,那麼允許它們並確保破碎的染色體不可能連續幾代都可以成爲可接受的方法。