Renascence架構原理 遺傳規劃演算法

2021-07-09 22:01:59 字數 1376 閱讀 9883

請先看一下遺傳演算法:

遺傳規劃/遺傳程式設計(genetic programming)是遺傳演算法的乙個分支,與遺傳演算法中每個個體是一段染色體編碼不同,它的個體是乙個電腦程式。

維基上說它在70年代就已經有人實踐,不過正式提出應該還是在john r. koza教授於2023年發表的博士**中。

遺傳規劃最早的應用是符號回歸,比如為了擬合 z=f(x,y),它生成乙個初始函式 g(x,y),然後以g(x,y)與z的相關係數為適應度,進行選擇交叉變異,最終得到最優的乙個函式g』,再做一次線性回歸即可。

如下是gp表示的乙個例子,自然,還有其他的表達方式:

線型:gep(gene expression programming),

圖型:cgp(cartesian genetic programming)。

以樹型為例:

這棵樹表示乙個函式,就是上面所述的g(x,y),至於怎麼用就見仁見智了,確定好用法之後設定乙個計算適應度的方案,就可以跑遺傳規劃了。

在遺傳規劃中,選擇運算元與遺傳演算法的相同,交叉變異需要根據表達方式來。

樹形的交叉實現是這樣:

變異實現是這樣:

遺傳規劃的目標是得到最優的電腦程式,其自由度是機器學習演算法中最高的,幾乎能處理任何問題。當然,能處理問題不代表能解決,解決問題還是需要精確度達到一定要求的。

renascence架構使用遺傳規劃演算法,去動態決定adf的公式。但與上面所描述的gp演算法來說,有很大的不一樣:

1.renascence架構中,每個函式有自己的輸入輸出型別,子節點的輸出型別必須要匹配父節點的輸入型別。

2.renascence生成的電腦程式的實現依賴於下層的函式庫,不是完整的電腦程式。

由於這些不同,生成和變異演算法都需要先用回溯演算法找出所有可能解,然後再隨機挑選,這點比起傳統的遺傳規劃演算法來說複雜不少。

樹形實現最容易實現,renascence架構中目前採用的是樹形的表達方案,又因為交叉運算元實現起來比較麻煩且容易造成膨脹,捨棄了交叉運算元,採用進化策略(evolution strategy)的演算法做優化。當前架構所用的結構優化演算法事實上還有很大的優化空間。

維普上的genetic programming的介紹:

遺傳演算法的介紹(這篇文章講得較為基礎,很多變種優化沒有考慮,不過適合入門):

這篇文章講gep比較詳細,本文沒有看懂可以看這篇:

Renascence架構原理 遺傳規劃演算法

請先看一下遺傳演算法 遺傳規劃 遺傳程式設計 genetic programming 是遺傳演算法的乙個分支,與遺傳演算法中每個個體是一段染色體編碼不同,它的個體是乙個電腦程式。維基上說它在70年代就已經有人實踐,不過正式提出應該還是在john r.koza教授於1990年發表的博士 中。遺傳規劃最...

Elasticsearch 架構原理

elasticsearch的一些架構設計,對我們做效能調優 故障處理,具有非常重要的影響。下面將從elasticsearch的準實時索引的實現 自動發現 rounting和replica的讀寫過程,shard的allocate控制 在傳統的資料庫中,乙個欄位存乙個值,但是這對於全文搜尋是不足的。想要...

Elasticsearch 架構原理

elasticsearch的一些架構設計,對我們做效能調優 故障處理,具有非常重要的影響。下面將從elasticsearch的準實時索引的實現 自動發現 rounting和replica的讀寫過程,shard的allocate控制 在傳統的資料庫中,乙個欄位存乙個值,但是這對於全文搜尋是不足的。想要...