2013-05-06 29 views
2

我正在使用TinyGP的項目。我正在研究TinyGP代碼,但它確實「密集」,沒有多少評論。我可以讓它根據我的樣本數據發展方程式。它們通常是龐大的方程,可以使梗塞接近我用來從中產生數據的源方程。TinyGP如何創建新的常量

我無法弄清楚TinyGP實際上是在哪裏創建新的隨機常量,以及在GP中完成這項工作的技術是什麼?

回答

1

你應該看看Genetic Programming Field Guide。它解釋了這一點。不同的GP使用不同的技術來生成常量。在TinyGP中,他們是「終端機」的一部分。 TinyGP在一開始就生成它們。所以他們是固定的。新的「常量」是通過變異和交叉創建的。

也許1,2和10在你的常量集中。您可能有一個常數1作爲終端節點。突變可能會使這個「1/2」,現在你有.5。進一步的突變可能會將此更改爲「1/2/10」。現在你有0.05。完整的樹仍然貫穿每一步。這就是TinyGP如何更有效地獲得價值。

這樣做會導致像你注意到的龐大的方程。重寫規則可以幫助解決這個問題。雖然,你需要考慮什麼時候重寫。最後重寫可以給你更好的方程。隨着重寫,會給你更小的樹,這可能會阻止TinyGP創建更豐富的常量集,因爲現在有更少的分支需要進行變異和交叉。

一個非常簡單的重寫規則有助於壓扁所有的常量值。例如,如果您在節點下未檢測到變量,則只需計算它並用計算出的值替換。對於TinyGP,您最終只能這樣做,因爲您不能隨時引入新的常量節點。

+1

謝謝你的快速回復,沒有意識到他們是一個集合。你是否認爲修改TinyGP很難,以便在突變發生時產生常量?然後我也可以重寫爲培訓進展。 – 2013-05-06 17:54:58

+1

這不會是一個小小的改變。現在節點只是類型。所以節點「*」,「/」,「10」,「20」是三種節點類型。兩個運算符和兩個常量。常量都是單獨的節點類型。如果你突變「10」來表示「15」,那麼你會改變所有具有「10」到「15」的基因組,這肯定不是所期望的。 – JeffHeaton 2013-05-06 17:58:24