計算適應函數值
適應函數(fitness function)衡量每個染色體「有多好」,GA 會讓適應值大的染色體有更多機會留下後代。適應函數直接由要解的問題決定。
若要求 \(f(x, y) = x\sin(4x) + 1.1\,y\sin(y)\) 的最大值,適應函數就取 \(f(x, y)\) 本身。
若要求最小值,適應函數改為
$$g(x, y) = K - f(x, y)$$其中 \(K\) 是一個常數,要大到讓 \(g\) 在整個搜尋範圍內都是正值。(適應值要為正,是因為輪盤法以適應值的比例當作被選中的機率;若改用競賽法,只比大小,負值也沒關係。)
適應函數的地形 Fitness Landscape
(補充)把搜尋範圍取為 \(0 \le x, y \le 10\),畫出 \(f\) 的分布:
這個函數有許多分開的峰,從隨機起點出發的梯度法很可能爬上附近的小峰就停住;GA 一次在整個範圍內放很多點,又靠突變不斷探索,比較容易找到全域最大值。用GA 演化互動模擬可以實際觀察。
在控制上的適應函數 Fitness for Controller Tuning
用 GA 調控制器時,染色體是控制器參數,每個染色體都要跑一次閉迴路模擬,再依響應算出適應值。本章範例 MCKGaPID 的主程式 MCKPIDGA_Main.m 是這樣做的:染色體為 \(K_p, K_i, K_d\)(各 8 位元、範圍 0.1~10),以 Simulink 模擬 MCK 系統 10 秒的步階響應,然後
也就是「誤差平方和+超越量懲罰」當成本 \(J\),再用上面 \(g = K - f\) 的方法轉成要最大化的適應值。只計算 1.2 秒以後的誤差,是不在乎起步那段、只要求盡快穩定在設定值。(說明為補充,數值取自原講義附檔程式)
附註:主程式呼叫 GA1_Initpopu(PopuSize,var_n,bit_n) 時後兩個引數的順序和函式定義 (popusize,bit_n,var_n) 相反,但函式只用到兩者的乘積,結果不受影響。
