請先看一下遺傳算法:
<a href="http://blog.csdn.net/v_july_v/article/details/6132775">http://blog.csdn.net/v_july_v/article/details/6132775</a>
遺傳規劃/遺傳程式設計(genetic programming)是遺傳算法的一個分支,與遺傳算法中每個個體是一段染色體編碼不同,它的個體是一個計算機程式。
維基上說它在70年代就已經有人實踐,不過正式提出應該還是在john r. koza教授于1990年發表的博士論文中。
遺傳規劃最早的應用是符号回歸,比如為了拟合 z=f(x,y),它生成一個初始函數 g(x,y),然後以g(x,y)與z的相關系數為适應度,進行選擇交叉變異,最終得到最優的一個函數g’,再做一次線性回歸即可。
如下是gp表示的一個例子,自然,還有其他的表達方式:
線型:gep(gene expression programming),
圖型:cgp(cartesian genetic programming)。
以樹型為例:

這棵樹表示一個函數,就是上面所述的g(x,y),至于怎麼用就見仁見智了,确定好用法之後設定一個計算适應度的方案,就可以跑遺傳規劃了。
在遺傳規劃中,選擇算子與遺傳算法的相同,交叉變異需要根據表達方式來。
樹形的交叉實作是這樣:
變異實作是這樣: