我想要終端變量有實數指數(不只是整數)。 例如,假設我想演化一個函數y = x^3.5 + x^2.2 + 6.我該如何繼續?我還沒有看到任何可以做到這一點的GP實現。 我嘗試過使用冪函數,但有時最初的解決方案有很多指數,評估值超過'雙'界限! 任何建議,將不勝感激。提前致謝。遺傳規劃中的指數
遺傳規劃中的指數
回答
DEAP(在Python中)實現它。實際上有一個example。通過在原始集中添加來自Python的math.pow,您可以獲得您想要的結果。
pset.addPrimitive(math.pow, 2)
但使用你就有可能得到類似的x ^戰俘運營商(χ^(χ^(X))),這可能是不希望的。你應該添加一個限制(通過我不確定的意思),在你的樹中允許的位置(就在葉子或類似的東西之前)。你可以使用來自<math.h>
的pow來開發你自己的原語,你可以用Sin或Cos原語作爲例子。
嵌套的pow正是我面臨的問題。我可以將pow運算符限制在葉節點之前。但我也希望指數是一個常數,而不是@Tom Castle建議的變量之一。 – Prometheus 2012-04-19 21:23:20
整數具有與實數不同的二進制表示,因此您必須使用略微不同的位串表示和重組/變異操作符。
想要獲得優秀的演示,請參見www.cs.vu.nl/~gusz/ecbook/slides/Genetic_Algorithms.ppt的幻燈片24或查看Eiben/Smith的書「Introduction to Evolutionary Computing Genetic Algorithms」。這描述瞭如何將位串映射到實數。然後可以創建一個表示式,其中x僅位於區間[y,z]內。在這種情況下,選擇y和z的幅度小於所用數據類型的容量(例如,雙精度數爲10^308),因此您不會遇到您描述的溢出問題。
我正在使用C進行符號迴歸。可能是我不清楚。在我目前的實現中,我可以通過'*'函數獲得變量的指數。所以如果我有一個像(*(* x x)x)的樹,我得到x^3。但是,如果我想將x^3.5作爲我的迴歸函數的一部分發展,我該如何繼續。 – Prometheus 2012-04-17 13:12:04
你必須考慮到實數指數和負數的基數,你不會得到一個真實的,但是一個複數。例如,.NET中的Math.Pow實現表示,如果您嘗試計算一個非負整數指向非整數指數的功率,那麼您將得到NaN。你必須確保你所有的x值都是正值。我認爲這是當你「超出雙重界限」時你所看到的問題。
順便說一句,你可以嘗試執行HeuristicLab GP。它使用可配置的語法非常靈活。
這是一個很好的觀點。您正在使用的電源功能的實現需要被保護以免出現這種情況,因此任何可能的輸入都具有有效的返回值。 – 2012-04-17 21:58:20
如果只有一些的初始人口正在遭受溢出問題,然後只是懲罰他們與一個不良的健身得分,他們可能會從幾代人的人口中刪除。
但是,如果問題是幾乎所有的個人都遭受這個問題,那麼你將不得不添加一些約束。最簡單的做法是將冪函數的指數子代約束爲一個真正的文字 - 這意味着權力將不被允許嵌套。這取決於這是否足以滿足您的需求。有幾種方法可以添加這些(或更復雜的)約束 - 嘗試尋找受約束的句法結構和語法引導的GP。
其他一些簡單的想法:你可以使用更大範圍的數據類型嗎?此外,您可以減少最大深度參數,以便嵌套指數的空間更小。當然這只是在一定程度上可能,並且取決於函數的複雜性。
- 1. 計劃中的遺傳類
- 2. 交叉概率對遺傳算法/遺傳規劃有什麼影響?
- 3. 進化規劃和遺傳編程有什麼區別?
- 4. 從規範語言的遺傳編程?
- 5. 構造函數中的遺傳參數
- 6. 遺傳算法的數獨
- 7. 是用於實現優化算法的混合整數線性規劃(例如遺傳或粒子羣)
- 8. @Transactional不遺傳數據庫中的INSERT
- 9. 遺傳編程中的實數(常量)
- 10. 隨機通用抽樣應該如何與遺傳規劃中的精英相結合?
- 11. 動態規劃:任務規劃變化
- 12. Mathematica中的二次規劃
- 13. gwt中的路線規劃
- 14. Haskell中的二次規劃
- 15. 路線規劃中的Prolog
- 16. 傳int,而不是雙到規劃器
- 17. 數學規劃優化
- 18. 如何將數據規劃
- 19. 的遺傳算法
- 20. 規劃和Scrum的
- 21. 規劃算法的
- 22. 遺傳算法新一代指數增長
- 23. 遺傳算法。如何找到人口的最佳規模
- 24. 如何規範遺傳算法的神經網絡?
- 25. 塞格遺傳
- 26. 遺傳算法
- 27. 動態規劃
- 28. 項目規劃
- 29. 動態規劃
- 30. 進化規劃
你在做什麼語言?你能否讓你的問題更具體一些? – simchona 2012-04-17 00:12:58
我使用C進行符號迴歸。可能是我不清楚。在我目前的實現中,我可以通過'*'函數獲得變量的指數。所以如果我有一個像(*(* x x)x)的樹,我得到x^3。但是,如果我想將x^3.5作爲我的迴歸函數的一部分發展,我該如何繼續。 – Prometheus 2012-04-17 13:11:41