遺傳演算法的工作原理
一、演算法概述
下面的提綱總結了演算法工作的過程
1.演算法產生一個初始的、隨機的種群。
2.演算法產生一系列的新的種群。在演算法的每一步中,演算法使用當前種群的個體產生下一代的種群。為了產生新的種群,演算法將會執行下列的步驟:
a.通過計算適應度值給每個群體中的個體打分。
b.標定原始的適應度值到一定的資料範圍之內。
c.依據適應度值選擇群體中的成員,稱為父代。
d.在當前群體中一部分個體有更低的適應度值,這一部分被稱為“精英”,這些精英們被直接複製到下一代中。
e.從父代中產生子代個體。產生子代的方法可以有兩種:使用“交叉”的方法產生下一代或者使用“變異”的方法產生下一代。
f.使用產生的子代個體替換群體中的當前群體中的個體,進而產生下一代群體。
3.當演算法滿足停止標準中的任何一個標準時,演算法停止。
二、初始化種群
演算法以建立隨機的初始化種群作為演算法的開始。初始化的種群用表示
在這個例子中,初始群體包含20個個體。20是演算法Population選項面板中Population size的預設設定。注意:這裡的個體位於象限的右上方,範圍時[0;1],這是因為在Population面板中的Initial range預設設定為[0;1].
三、產生下一代
在演算法的每一步中,演算法使用當前群體來產生子代,進而組成下一代。演算法依據適應度值選擇父代中的個體來產生子代。你可以通過在Selection面板中的設定Selection function選項來指定一個特定的函數用來選擇父代。
遺傳演算法使用3種途徑來產生子代中的個體。
3.1在當前群體中具有最優適應度值的個子組成“精英團隊”,這些精英分子會直接複製到下一代中,作為下一代群體的組成之一。
3.2通過一對父個體,交叉,產生交叉子代個體。
3.3使用一個父代個體,通過隨機改變或者變異操作,產生變異子代。
下面的原理圖描述了三種產生子代個體的途徑
四、後期演算法迭代圖形的繪製
60次迭代是個體分布圖
80次迭代子代分布圖
95代迭代的分布圖
100次迭代個體的分布情況
隨著演算法迭代代數的遞增,群體中的個體逐漸靠近全域最優值所在的點[0 0].
五、演算法停止的條件
演算法使用下列的條件來決定演算法停止的時機。
Generations ----迭代的代數,當演算法啟動並執行次數超過規定的代迭代次數時,演算法將停止。
Time limit-----當演算法啟動並執行時間超過規定的時間間隔後,演算法將停止運行。
Fitness limit ------當演算法運行時,適應度值已經小於該選項規定的數值時,演算法停止運行
Stall generations-----當演算法在Stall generations規定的代數內,適應度函數的加權平均變化小於Function Tolerance時,演算法停止運行。
Stall time limit------當演算法在Stall time limit 規定的時間間隔內,目標函數值沒有任何的改善的話,演算法停止。
Function Tolerance ------參看Stall generations。
Nonlinear constraint tolerance ------這個選項一般不用來作為演算法停止的條件,它往往用來衡量非線性約束的可行性。
上述的這些指標你可以在最佳化工具箱的Stopping criteria面板中找到,進而可以根據具體的實際情況來改變它們。是這些選項的預設值
當你運行演算法結束時,在 Run solver and view results面板中會列出演算法停止運行時的原因。
中選項Stall time limit 和 Time limit 是為了防止演算法啟動並執行時間太長. 如果演算法是因為這兩個選項而停止的,那麼你可以通過提高Stall time limit 和 Time limit的值來改善演算法的運行效果。