交配(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

