智慧型控制 Intelligent Control

交配(Matlab 程式)

單點交配的 Matlab 程式。族群中的染色體兩兩一組(第 1、2 個,第 3、4 個……),每組以交配率 co_rate 決定是否交配;交配點 cross_pt 取 1~(n−1) 的隨機整數(產生方法見複製頁的隨機整數),交配點之後的位元互換。

function result=GA4_Crossover(popu,co_rate)
   m=size(popu,1);
   n=size(popu,2);
   for i=1:2:m-1
     if rand<co_rate                       % co_rate 為交配率
        cross_pt=1+fix((n-1)*rand);         % 產生 1~(n-1) 的隨機整數為交配點
        tmp=popu(i,cross_pt+1:n);           % 交配點後的基因暫存於 tmp
        popu(i,cross_pt+1:n)=popu(i+1,cross_pt+1:n); % 以第二個染色體交配點後的基因取代
        popu(i+1,cross_pt+1:n)=tmp;         % 以 tmp 取代第二個染色體交配點後的基因
     end
   end
   result=popu;
▶ 在 Colab 開啟原課程的 MATLAB 程式已改寫成 Python 筆記本(第 1 節 GA4_Crossover),可以直接在瀏覽器執行、修改參數。⬇ 下載 GA.ipynb

交配點取 1~(n−1),是為了保證交配點之後至少有一個、之前也至少保留一個位元,交配才有意義(取 0 或 n 等於整條互換或完全不換)。因為複製時交配池的順序已經是隨機的,直接把相鄰兩個配成一對就等於隨機配對。(說明為補充)

原講義附檔:GA4_Crossover.zip

原講義的交配動畫與程式截圖
原圖
原圖