智慧型控制 Intelligent Control

複製

複製(reproduction,也稱選擇 selection)比較每個物種的適應程度,決定它在產生下一代時應被淘汰或保留,被選中的放進交配池。常見兩種方式:

A 9%B 45%C 27%D 18%飛鏢(亂數)輪盤法:被選機率 = 適應值 / 總和A:f = 10 → p = 10/110 = 0.091B:f = 50 → p = 50/110 = 0.455C:f = 30 → p = 30/110 = 0.273D:f = 20 → p = 20/110 = 0.182競賽法:隨機抽兩個,適應值大的進交配池(不必算總和與比例,也不怕適應值有負數)

產生隨機整數 Random Integers

挑選物種時需要 1~\(m\) 的隨機整數。Matlab 的 rand 產生 0~1 的亂數,fix 無條件捨去小數(fix(0.8) = 0、fix(1.1) = 1)。若 \(a\) 為正整數:

$$0 < \texttt{rand} < 1 \;\Rightarrow\; 0 \le \texttt{fix}(a\cdot\texttt{rand}) \le a-1 \;\Rightarrow\; b \le \texttt{fix}(a\cdot\texttt{rand}) + b \le a+b-1$$

要產生 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 範例)。

原圖對照
原圖
原圖