2013-02-19 101 views
2

我正在實施NSGA II遺傳算法來爲我的大學開發一套時間表。我遇到了各種解決方案的問題。遺傳算法問題

我的算法在初始化,變異和交叉時工作正常,但在最後一代審查我的解決方案後,它們都是相同的,例如我在一代中有200個,也許其中的64個將彼此相同,54彼此相同等

我的問題是什麼可能造成這種情況?什麼是交叉和變異的最佳形式?

對於世代大小,世代數量,變異率和交叉率還有規範嗎?

目前,它運行像這樣:

  1. 隨機產生300個解決方案
  2. 計算健身和排名
  3. 選擇最佳解決方案的200
  4. 這些變異的5%,併產生80名兒童
  5. 再次計算並排名
  6. 挑選最佳300移至下一代
  7. 重複
+1

用您提供的信息很難說出「某處可能存在bug」之外的任何內容。把你的算法減少到幾行僞代碼(至少是每一代的選擇和生成)(你可以添加到問題中)應該不會太困難。在算法的初始化和中間步驟查看總體也可以提供一些見解。此外,這個問題可能超出了SO的範圍(對於CSTheory,CS或程序員來說可能更好)。 – Dukeling 2013-02-19 13:43:44

+0

在分鐘運行,像這樣 1.隨機產生300種溶液 2.計算健身和排名 3.選取最佳的解決方案 4.突變的這些5%的200和產生80名兒童 5.計算和秩再次 6.挑選最好的300轉移到下一代 重複以上 我不認爲這是一個錯誤,因爲我已經通過它,一切似乎都沒問題。雖然我會很樂意被證明是錯的! – Melo1991 2013-02-19 13:45:25

+2

這裏沒有太多的信息,但我的直覺告訴我你的解決方案權重有問題,因此你的選擇(3)選擇性過高,導致過度同質的人口。嘗試單元測試並測量GA以外的輸出以驗證其正確性。 – NWS 2013-02-19 14:06:39

回答

0

這個結果不一定是壞的。它可能只是聚合在一些解決方案上,而沒有任何其他可行的「附近」解決方案。您正在收斂的解決方案不好?

我注意到的一件事是,雖然你提到交叉,你不會列出它作爲你的7個步驟之一。如果實際上你只是在做突變,那麼這會讓GA更難從本地最優方案中爬出來。

0

G.A的作品喜歡融合到選擇一組最小等位基因(解決方案)的點。在一些罕見的情況下,經過幾千年的長期運行後,它可能會帶來一個最佳的解決方案。

但是在某些情況下,它可能會在最小運行次數(比如100)下帶來收斂解決方案。但它有可能陷入局部最優,無法達到全局最優。

我不確定哪一代,你嘗試過。我建議你去1000代並比較結果。同樣的情節可能會改變幾代後,就像你可以看到全新的解決方案

對於不同的表示有不同的交叉和變異。也許你可以告訴你正在使用的表示,結果與代數成正比

+0

不,對於一個多目標優化問題,你應該得到幾個不同的解決方案,分佈在帕累託前沿(如果不是,它不是一個真正的多目標優化問題)。問題是關於NSGA-II:一個GA來解決多目標優化問題。 – 2013-02-23 13:59:32

+0

@Benoît我認爲這是我之前解釋的。如果你兩次閱讀我的答案,你可以得到我的意思。 – naran 2013-02-25 06:39:35

+0

我兩次閱讀你的答案,看起來我仍然沒有明白你的意思:-)一個解決方案可能不會是任何問題的最終結果,特別是對於多標準優化問題,因爲有很多帕累托最優解(這不是因爲進化方法)。 – 2013-02-25 07:48:15

1

我相信你的算法中可能沒有錯誤。這是GA的一個衆所周知的問題。如果你想有各種解決方案,你應該實施一些Niching方法。它的想法是懲罰你的人口中類似的人。你可以找出一些啓發式的個人相似性,並排除你的人羣中類似的個體或消除個體的適應性。這將使您的人口更加多樣化,並且不會讓您的變異操作員選擇和演變同一個人。查看Samir W. Mahfoud的「Niching Methods for Genetic Algorithms」將很有用。