傳統基因演算法在演化的過程中會有一些問題
第一個問題是由於優良的染色體
會被大量的複製在交配池中導致染色體的多樣性降低
因此沒經過多少次演化之後
演化的過程便因為收斂而停止
因為交配池中的染色體幾乎是清一色的類別
這種未成熟的收斂我們叫premature convergence
會使得搜尋的變數也就是染色體種類不夠多
造成找到的解不是最佳解
第二個問題是經過許多代的演化以後
交配始終的染色體種類仍然有很多種
整體的平均適應值跟交配池中
表現最好的適應值相差不大
因此根據複製的表現
這個最佳的染色體並不會大量的子代被複製在交配池中
很明顯的演化的過程能否順利收斂到最佳值
是不可預料的
為了解決上述兩個問題
因此調整適應函數變得非常重要
而適應函數的線性調整是被用來去區隔最佳的適應函數
以及次佳的適應函數
例如有一個族群它的適應函數值分別是
89 56 82 45 97 95 跟5
這個適應函數值的平均值是67
我們可以發現最佳的適應值是97
次佳的適應值是95
很明顯的這兩個值是非常接近
為了避免這樣子的問題
在這一節裡面我們會放大
最佳適應函數跟次佳適應函數的差距
而且利用線性調整的方法
保持適應函數的平均值是一致的
而適應函數的線性調整的方法
可以用下面的方程式來表示
線性調整的方程式如下所示
其中f s ave (k)會等於f ave (k)
指的意思就是經過調整後的適應函數的平均值
會跟調整之前的平均值是一致的
這個ave指的是average也就是平均值的意思
而s代表的是利用線性調整的方式scaling的意思
第二個方程式指的是f s max(k)會等於c(k)乘上f ave(k)
這個意思指的是說經過調整後
適應函數的最大值會等於調整前平均值的c倍
這個c我們稱之為放大係數
而這邊線性調整的方程式
我們是依據下面的公式來調整
也就是f i s(k)會等於a(k)乘上fi(k)加上b(k)
其中這個a(k)會等於c(k)減1乘上f ave(k)
除上f max(k)減掉f ave(k)
而這邊的c(k)我們剛剛提過了就是放大係數
f ave(k)就是我們適應函數的平均值
而f max(k)就是我們適應函數的最大值
同樣的b(k)我們可以證明
會等於1減掉a(k) 乘上f ave(k)
而這邊的f (k)我們已經在上個方程式計算出來了
f ave(k)指的就是我們適應函數的平均值
而c(k)就是我們的放大係數
所以接下來我們可以根據這個公式
來計算我們線性調整的適應函數
這張圖顯示的是調整前適應函數
與調整後適應函數的關係
有兩個重點 第一個就是調整前
與調整後的適應函數平均值必須要一致
第二個重點是調整後適應函數的最大值
必須要是調整前適應函數平均值的c倍
c我們稱之為放大係數
接著我們來看下面的例子
我們希望使用適應函數的線性調整方法
去獲得新的一組適應函數值
而原來的適應函數分別是70 80 90 95 5跟1
而這邊的放大係數我們設定為2
所以首先我們要計算適應函數的平均值
也就是把各個適應函數相加再除上總數
在這題裡面總數是6
所以得到的結果我們的平均值是341除上6也就是56.83
接著我們要去計算a(k)的值跟b(k)的值
而a(k)會等於c(k)-1乘上平均值
再除上適應函數的最大值減掉平均值
因此會等於(2-1)乘上56.83再除上最大值是95減掉56.83
所以結果是1.489
b(k)會等於(1-a(k))乘上平均值
所以會等於(1-1.489)乘上56.83結果會等於-27.791
因此新的適應函數值就可以利用剛剛所提到的公式
新的適應函數值會等於a(k)乘上原來的適應函數值
再加上b(k)這是一個線性方程式
所以我們叫線性調整
因此我們可以得到f1s(k)會等於a(k)乘上70加上b(k)
會等於76.44
而f2s(k)會等於a(k)乘上80加上b(k)會等於91.33
同樣的我們可以用類似的方法得到f3s(k)以及f4s(k)
同樣的我們可以計算得到f5s(k)以及f6s(k)
但這邊我們注意到最後這兩個
調整過後的適應函數是出現負值
所以為了避免有負的適應函數
因此我們所有的適應函數
我們都會加上一個最小的適應函數值
使得我們調整過後的適應函數都是大於等於0
因此新的適應函數就是調整過後的適應函數
再加上我們適應函數裡面的最小值
而在這邊適應函數最小值就是f6s(k)
所以我們可以得到f1s'(k)會102.74
其他的我們都可以如法泡製
依次的得到最後我們的適應函數值
所以雖然所有的適應函數值
經過我們加上最小值以後都變成大於等於0
但是這樣的做法會改變我們適應函數的平均值
因此為了讓我們的適應函數不要是負的
我們有另外一種方法我們稱之為標準差的調整法
我們在下一節裡面會介紹
而這邊我們來介紹線性調整的電腦程式
接下來介紹適應函數的線性調整
利用電腦程式來撰寫
首先我們要計算適應函數的平均值以及最大值
接著我們利用剛剛所提到的公式我們來計算
適應函數經由調整後線性調整後所得到的結果
最後如果有負的適應函數產生的話
則我們必須要把它變成正的
這邊採用的方法就是每一個適應函數
我們都加上最小的適應函數的絕對值
這樣子可以確保調整後的適應函數大於等於0
接著我們在電腦視窗中輸入我們的原始適應函數值
以及設定我們的放大係數
接著呼叫剛剛所撰寫的副程式
我們就可以得到最後經由線性調整所得到的適應函數
以及第一次調整所得到的適應函數
在適應性函數線性縮放這一章裡面我們學到了
首先適應函數的線性縮放它具有哪些的特性
以及它有哪些的優點
這是傳統我們在適應函數的設計裡面所欠缺的
而我們也學到了適應函數線性縮放
它的原理以及它所需要的設計方程式
同時我們也用一個例子來介紹適應函數的線性縮放
如何利用電腦程式來進行程式的撰寫
