第二章、 背景知識與相關文獻
2.2 以基因規劃為基礎的符號式迴歸
基因規劃或稱為遺傳規劃和基因演算法一樣是受到自然界中生物演化的 啟發而發展出來的。基因規劃的提出是為了解決讓電腦自行設計電腦程式的問 題。傳統的程式設計就如同工業設計一般,所有的動作、指令、結果都是依循 著程式設計師精心規劃設計出來的。電腦在運作的時候,就依照著既定明確的 條件及指令去運算出結果。而基因規劃的提出,就是希望電腦可以在不明確的 條件之下,依然可以完成自己該做的事情。換句話說,人們使用基因規劃的時 候只需要告訴電腦需要完成甚麼,而不是告訴電腦該怎麼做。
基因規劃的歷史可以追朔到1960 年代到 1970 年代,那個時候演化式計算 (Evolutionary Computing)的研究廣泛的被接受,諸如像是演化式策略(Evolution Strategies)、基因演算法(Genetic Algorithm)等。在 1985 年,學者 Nichael L.
Cramer 提出了第一個基因規劃的架構[ 49 ]。而在 1992 年 John R. Koza 的著作 中更詳盡了介紹基因規劃 [ 28 ]。至此,基因規劃便被應用在各種不同的領域 之中,並且有著傑出的表現,尤其是量子運算、電子設計、遊戲比賽、排序、
搜尋等等。
以下簡敘GP 的重要步驟與機制:
z 樹狀結構:傳統上基因規劃是以樹狀結構來表示染色體,這是由於樹狀 結構很容易以遞迴(Recursive)來計算。這條算式樹之中的節點可以分為 有子樹的中間節點(Inner-node)和沒有任何子樹的葉節點(Leaf),每個中 間 節 點 就 是 一 個 運 算 子(Operator),而每個葉節點則是一個運算元 (Operand)。Koza 教授一開始是使用 Lisp 語言[ 28 ]來實做基因規劃。在 基因規劃之中染色體是有其限制,毫無控制的染色體可能會造成迴歸方 程式變為一條不合理的數學運算式。舉例來說,假設我們有一條染色體 為 “3 + 5”,經過突變的運算之後式子可能變為一條不合理的數學方程 式,例如 “* + 5”。因此在染色體的編碼上,我們必須為此定義特殊的
結構與規則。近年來,其他非樹狀結構的基因規劃方法也相繼被提出,
線性基因規劃(Linear Genetic Programming)便是使用串列(Link List)來做 為染色體的結構。這類的線性結構適合傳統循序式的程式語言,例如 Basic、C、Fortran。
z 交配策略:首先選擇兩條染色體作為父母親,從父樹和母樹之中各挑選 一個樹節點作為交配點,每點樹節點被挑選的機率都是相同的,之後再 將該節點以及其子樹一同交換。原先在父樹的子樹會被連接到母樹上,
母樹的子樹則連接到父樹之上。以下圖 2.2-1 為例,灰色的樹節點代表 交配點。經過交配運算之後會得到兩條新的子樹。
x 交配點
+
× 3
4 x
- +
x 4 x
×
+
× 3
4 x
- +
x 4
x x
×
父樹 母樹
子樹1 子樹2
互相交換 交配點之 下的子樹
z 突變策略 (Mutation):突變的方式有資料突變以及結構突變兩種方式。
資料突變是從染色體之中隨機挑選一個樹節點,並且改變樹節點內的資 料。資料突變特別注意運算樹的運算規則,若突變的節點是個運算子,
則突變前後都必定是個運算子,反之亦然。下圖 2.2-2 為資料突變的例 子,圖(a)為運算子的突變、圖(b)為運算元的突變。而結構突變是隨機挑 選一個樹節點作為突變點,該節點以下的子樹以另外一顆隨機產生的子 樹作為取代。下圖 2.2-3 為一結構突變的例子。
(a)
(b)
圖 2.2-2 樹資料突變
圖 2.2-3 樹結構突變 +
A -B A
+
A *
- B A B
× x -
x 3
×
5 -
x 3
× x -
x 3
×
x ÷
x 3
基 於 基 因 規 劃 的 符 號 式 迴 歸(Symbolic Regression based on Genetic Programming, SRGP)主要的運作方式是將數學方程式用樹狀資料結構表示為 染色體,在樹狀結構中可以分為中間節點的運算子以及葉節點的運算元。運算 子和運算元都是依據問題由使用者去定義的,例如運算子可能為加、減、乘、
除、sin、cos 等運算;運算元可能為常數或是變數等。在經由基因規劃的演化 策略:選擇、交配、突變等各種策略來產生新的子代,最後在經過適應值的計 算來淘汰較差的結果,最後演化成最佳的解答。