原理
作為一種一種監督學習方法,符號迴歸(symbolic regression)試圖發現某種隱藏的數學公式,以此利用特徵變數預測目標變數。
編碼方法
公式可以寫成S-表示式的形式,繼而可以轉化成一顆二叉樹。在這個二叉樹裡,所有的葉節點都是變數或者常數,內部的節點則是函式。
用同構的思想不難發現:電路的本質也是表示式。
葉子節點可以是元器件(變數和常數)
內部節點可以是二元拓撲關係(函式)
元器件定義為如下形式:
\(X\Rightarrow \{O,M\}\)
\(O\)表示該器件向上層顯示的介面數
\(M\)表示該器件的屬性
二元拓撲關係\(P\)不妨定義為如下形式:
\(P\Rightarrow <LS,RS>\Rightarrow \{O,L,R,C\}\)
\(O\)表示該關係向上層顯示的介面數
\(L\)表示該關係左兒子的介面數
\(R\)表示該關係右兒子的介面數
\(C\)表示該關係左右兒子介面的連線方式
繁殖策略
交叉
原策略:優勝者內隨機選擇一個子樹,替換為另一棵公式樹的隨機子樹。
新增要求:只有根節點的\(O\)數值相同的子樹可以替換。
變異
子樹變異(Subtree Mutation)
原策略:優勝者的一棵子樹將被另一棵完全隨機的全新子樹代替。
新增要求:隨機新子樹的根節點的\(O\)數值固定。
hoist變異(Hoist Mutation)
hoist變異是一種對抗公式樹膨脹(bloating,即過於複雜)的方法。
原策略:從優勝者公式樹內隨機選擇一個子樹A,再從A裡隨機選擇一個子樹B,然後把B提升到A原來的位置,用B替代A。
新增要求:子樹B的根節點的\(O\)與子樹A的根節點的\(O\)相同。
點變異(Point Mutation)
原策略:一個隨機的節點將會被改變,比如加法可以被替換成除法,變數X0可以被替換成常數-2.5。
新增要求:\(O\)屬性不能變
解碼方法
DFS整棵樹
遇到關係,根據左右兒子連線的介面數增加相應的net
遇到器件,增加相應器件並回溯(因為一定搜到底了)
回溯時,記錄介面標號,與相應的net進行連線
初始化
因為變異和交叉過程有限制介面數,所以對搜尋能力必然有大幅地減弱,為了緩解這個問題,可以先人為構建出一些合法有效的初始解,再進行深度最佳化。