複製
複製(reproduction,也稱選擇 selection)比較每個物種的適應程度,決定它在產生下一代時應被淘汰或保留,被選中的放進交配池。常見兩種方式:
- 輪盤法(roulette wheel selection):依各物種的適應值在輪盤上分配面積,適應值越大、面積越大。就像對輪盤射飛鏢,飛鏢落點對應的物種就被選進交配池;重複到選出與原族群相同的數量。每個物種被選中的機率為 \(p_i = f_i / \sum_j f_j\)。
- 競賽法(tournament selection):每次隨機挑兩個(或多個)物種,其中適應值最大的進交配池,重複到數量足夠。計算量少、程式好寫,而且可以用每次挑選的個數控制競爭的激烈程度(挑越多個,弱者越難被選中),本課程的程式採用這種方法。
產生隨機整數 Random Integers
挑選物種時需要 1~\(m\) 的隨機整數。Matlab 的 rand 產生 0~1 的亂數,fix 無條件捨去小數(fix(0.8) = 0、fix(1.1) = 1)。若 \(a\) 為正整數:
要產生 1~7 的隨機整數,取 \(b\) = 1、\(a + b - 1\) = 7,即 \(a\) = 7:fix(7*rand)+1。
競賽法程式 Tournament Selection Code
function result=GA3_select(popu,fitness)
m=size(popu,1); % 族群中的染色體總數
for i=1:m
ind1=1+fix(m*rand); % 隨機產生 1~m 的整數
ind2=1+fix(m*rand);
while(ind1==ind2) % 兩個相同就重抽,直到不同為止
ind2=1+fix(m*rand);
end
if fitness(ind1)>=fitness(ind2) % 適應值大的放入交配池 result
result(i,:)=popu(ind1,:);
else
result(i,:)=popu(ind2,:);
end
end
▶ 在 Colab 開啟原課程的 MATLAB 程式已改寫成 Python 筆記本(第 1 節 GA3_select),可以直接在瀏覽器執行、修改參數。⬇ 下載 GA.ipynb
原講義附檔:GA3_select.zip。輪盤圖與機率例為補充(四個物種的適應值 10、50、30、20 取自保留最佳染色體頁的 sort 範例)。

