我在大學做了一個小GP(注:很少)工作,最近一直在玩它。我的問題是關於初始運行設置(人口規模,世代數,樹木的最小/最大深度,最初樹木的最小/最大深度,用於不同複製操作的百分比等)。設置這些參數的常規做法是什麼?人們使用哪些論文/網站作爲優秀指南?初始遺傳編程參數
初始遺傳編程參數
回答
你會發現,這在很大程度上取決於你的問題域 - 特別是適應度函數的性質,您的實現DSL等
一些個人體驗:
- 大的人口規模似乎上班時 更好,當你有一個嘈雜的健身功能 功能,我想這是因爲增長 在人口連續世代行爲 給予更多的取樣 的適應度函數。我通常使用 100來獲得較少的噪音/確定性功能,對於較大的噪音,我使用了1000+ 。
- 對於幾代人來說,最好衡量 健身功能的改進,並在 達到您的目標標準時停止。我通常跑幾百代,看看會出現什麼樣的答案,如果它沒有改善,那麼你可能在其他地方有一個問題。
- 樹深度要求真的取決於您的DSL。有時我會嘗試做一個 執行沒有明確的 限制,但懲罰或消除 程序運行時間過長(這可能是 你真正關心的事情...)。我還發現總節點數約爲1000是非常有用的硬限制。
- 不同突變/重組算子的百分比似乎不是 重要。只要 你有一個全面的突變,任何合理平衡的 分佈通常會工作。我認爲其原因在於你基本上是在尋求有利的改進,所以主要目標是確保試驗改進在各種可能性中都能合理地分配。
看看Koza的voluminous tomes關於這些事情。
當我開始研究遺傳算法時,我有同樣的問題。
我希望能在一個很簡單的問題,並給出鏈接運營商和參數值(如突變率等),在人口規模等
一旦我開始進入的函數給出結果收集數據variating參數遺傳算法多一點我然後意識到,鑑於變量的數量巨大這是一個巨大的任務,泛化是非常困難的。
從我的(有限的)經驗談起,如果您決定簡化問題並使用固定的方式來實現交叉,選擇,以及玩羣體大小和突變率(以一種給定的方式實現)試圖出現有了一般結果,你很快就會意識到,太多的變量仍在發揮作用,因爲在一天結束的時候,統計後你會得到一個體面的結果(無論你想要定義的方式體面的)的世代的數量仍然顯然取決於在你正在解決的問題上,因此基因組的大小(以不同的方式表示相同的問題在給定的GA參數的效果方面顯然會導致不同的結果!)。
確實有可能起草一套準則 - 正如(罕見但是很好的)文獻所證明的那樣 - 但只有當手頭的問題能夠準確編碼時,您才能夠以統計學的方式有效地推廣結果同樣的方式,並以某種相當的方式評估健身狀況(這通常意味着你在處理非常類似的問題)。
爲什麼不嘗試使用遺傳算法爲您優化這些參數? :)
在計算機科學的任何問題,可以 解決了 間接另一層(除了間接太多 層。)
-David J.惠勒
沒有贊成,因爲它不是一個正確的答案,但它確實讓我發笑。 :-) – 2010-05-15 17:26:15
即使在GP社區內也存在非常不同的思想流派 - 有些人認爲(低)成千上萬的人羣是足夠的,而Koza和其他人通常認爲不值得y開始GP運行,GP人口中不到一百萬人;-)
如前所述,它取決於您的個人品味和經驗,資源和可能使用的GP系統!
乾杯, 揚
- 1. Q:初始化遺傳算法
- 2. JAVA遺傳算法初始化
- 3. 參數傳遞到初始化函數
- 4. 遺傳編程Stackoverflow錯誤
- 5. JGAP遺傳編程 - 分類
- 6. 遺傳編程階段
- 7. 線性遺傳編程常數
- 8. 遺傳編程中的實數(常量)
- 9. 初始化時傳遞參數UICollectionViewCell
- 10. 初始化表時傳遞參數
- 11. 傳遞參數來初始化Singleton
- 12. 編程初始化
- 13. 將初始參數傳遞給ExtJS 4應用程序
- 14. 構造函數中的遺傳參數
- 15. 使用值編碼的遺傳算法初始種子多樣性C#
- 16. 以編程方式初始化和設置Button的參數
- 17. 以編程方式添加過濾器和初始化參數
- 18. 初始化,初始化與參數和便利初始化
- 19. 使用變量參數編號重載初始化參數
- 20. 尋找遺傳編程框架/庫
- 21. 從規範語言的遺傳編程?
- 22. 遺傳編程 - 健身功能
- 23. 遺傳編程在線學習
- 24. 在遺傳編程中實現交叉
- 25. 在smalltalk中新建並初始化 - 如何傳遞參數來初始化
- 26. 初始化遺址我的代碼
- 27. 訪問初始參數值
- 28. 初始化與參數
- 29. 結構初始化參數
- 30. 模板參數初始化
我讀過講座的第一本書就此事。我想自1992年以來,我已經有更多的研究對適當的起始人口進行了更多的研究,生殖方法的表現更好等。 – cmptrer 2010-05-06 16:31:25