我正在實施NSGA II遺傳算法來爲我的大學開發一套時間表。我遇到了各種解決方案的問題。遺傳算法問題
我的算法在初始化,變異和交叉時工作正常,但在最後一代審查我的解決方案後,它們都是相同的,例如我在一代中有200個,也許其中的64個將彼此相同,54彼此相同等
我的問題是什麼可能造成這種情況?什麼是交叉和變異的最佳形式?
對於世代大小,世代數量,變異率和交叉率還有規範嗎?
目前,它運行像這樣:
- 隨機產生300個解決方案
- 計算健身和排名
- 選擇最佳解決方案的200
- 這些變異的5%,併產生80名兒童
- 再次計算並排名
- 挑選最佳300移至下一代
- 重複
用您提供的信息很難說出「某處可能存在bug」之外的任何內容。把你的算法減少到幾行僞代碼(至少是每一代的選擇和生成)(你可以添加到問題中)應該不會太困難。在算法的初始化和中間步驟查看總體也可以提供一些見解。此外,這個問題可能超出了SO的範圍(對於CSTheory,CS或程序員來說可能更好)。 – Dukeling 2013-02-19 13:43:44
在分鐘運行,像這樣 1.隨機產生300種溶液 2.計算健身和排名 3.選取最佳的解決方案 4.突變的這些5%的200和產生80名兒童 5.計算和秩再次 6.挑選最好的300轉移到下一代 重複以上 我不認爲這是一個錯誤,因爲我已經通過它,一切似乎都沒問題。雖然我會很樂意被證明是錯的! – Melo1991 2013-02-19 13:45:25
這裏沒有太多的信息,但我的直覺告訴我你的解決方案權重有問題,因此你的選擇(3)選擇性過高,導致過度同質的人口。嘗試單元測試並測量GA以外的輸出以驗證其正確性。 – NWS 2013-02-19 14:06:39