智慧型控制 Intelligent Control

突變

突變是隨機選取某些物種與突變點,把該位元的值反轉(0 變 1、1 變 0)。同樣不是每個物種都會突變(否則就失去了「突變」的意義),發生的機率由突變率控制。

01100A01101A′XOR 字罩 00001突變點單點突變:被選中的位元 0↔1 反轉(等於和字罩做 XOR)

突變的目的,是希望最後求出的解是全域極大值。如果沒有突變,隨機產生的初始族群經過複製與交配之後,可能只在某個區域內反覆搜尋,最後得到的只是局部極大值:交配只能重新組合族群中已有的位元,若某個位置上所有染色體都是 0,再怎麼交配也不會出現 1。突變能把這種「已經消失的基因」再找回來。

以 XOR 實作 Mutation by XOR

\(a\)字罩\(a\) XOR 字罩
000
101
011
110

XOR 的性質:\(a \oplus 0 = a\)、\(a \oplus 1 = \bar a\)。所以只要產生一個與族群同大小的字罩,每個位置以突變率為 1,再和族群做 XOR,字罩為 1 的位元就反轉、其餘不變:

function result=GA5_mutate(popu,mu_rate)
  m=size(popu,1);
  n=size(popu,2);
  mask=rand(m,n)<mu_rate;   % 每個位元以機率 mu_rate 成為 1
  result=xor(popu,mask);
▶ 在 Colab 開啟原課程的 MATLAB 程式已改寫成 Python 筆記本(第 1 節 GA5_mutate),可以直接在瀏覽器執行、修改參數。⬇ 下載 GA.ipynb

注意這裡的突變率是「每個位元」的機率:染色體長度 20、突變率 0.01 時,平均每個染色體有 0.2 個位元突變。可在交配頁的互動示範切到「突變」觀察,操作錄影見 Matlab 程式。(說明為補充)

原圖對照
原圖
原圖
原圖