1.程式功能描述
透過MATLAB分別對比二進位制編碼遺傳最佳化演算法和實數編碼遺傳最佳化演算法,對比最優適應度值,平均適應度值以及演算法運算效率。
2.測試軟體版本以及執行結果展示
MATLAB2022a版本執行
3.核心程式
%-10~10,初始化種群 Popu = 6*rand(NUM,dim)-3; %初始化最優適應度值 Vbest =-inf; for i=1:NUM%計算適應度值 y(i)=fitness(Popu(i,:)); if y(i)>Vbest Vbest=y(i); Vopt=Popu(i,:); end end %迭代 for t=1:Maxiter t %選擇 p = y/sum(y); q = cumsum(p); %選擇個體索引 for i=1:NUM temp = rand(1); idx = find(q>=temp); Popus(i,:) = Popu(idx(1),:); end %交叉 for i=1:NUM if rand(1)<pc i1=randi([1,NUM]); i2=randi([1,NUM]); while i1==i2 i1=randi([1,NUM]); i2=randi([1,NUM]); end k = randi([1,dim]); temp = Popus(i1,k+1:end); Popus(i1,k+1:end) = Popus(i2,k+1:end); Popus(i2,k+1:end) = temp; end end %變異 Pm0 = rand(NUM,dim); Popus = (Pm0>=pm).*Popus + (Pm0<pm).*Pm0; %更新 ..................................................... end figure plot(1:Maxiter,Vsave0) hold on plot(1:Maxiter,Vsave1) legend('最優適應度','平均適應度') xlabel('迭代次數') ylabel('適應度值') t=toc save R1.mat 0003
4.本演算法原理
遺傳演算法是一種基於生物進化原理的最佳化演算法,廣泛應用於各種問題,如函式最佳化、機器學習、影像處理等。在遺傳演算法中,編碼方式是關鍵的一步,因為它決定了問題的表示方式以及演算法的搜尋空間。主要有兩種編碼方式:二進位制編碼和實數編碼。
4.1二進位制編碼遺傳最佳化演算法
二進位制編碼遺傳最佳化演算法是一種常見的遺傳演算法,它將問題的解表示為二進位制字串。在二進位制編碼中,每個解的每個基因都被編碼為一個0或1的二進位制數。這種編碼方式在許多問題中都很有效,因為它可以很容易地表示離散解空間。
二進位制編碼遺傳最佳化演算法的基本步驟:
初始化:隨機生成一組二進位制字串作為初始種群。每個字串的長度等於問題中決策變數的數量。
適應度評估:計算每個字串的適應度值,適應度值是根據問題的目標函式來計算的。
選擇:根據適應度值選擇哪些字串進入下一代。通常使用輪盤賭選擇法或錦標賽選擇法等。
交叉(重組):隨機選擇兩個字串,進行交叉操作,產生新的字串。交叉操作是透過交換兩個字串的部分基因來完成的。
變異:隨機選擇一些字串,對它們的基因進行變異操作,以增加種群的多樣性。變異操作是透過隨機改變一個基因的值來實現的。
終止條件:當達到預設的迭代次數或找到滿足要求的解時,演算法終止。
4.2實數編碼遺傳最佳化演算法
實數編碼遺傳最佳化演算法將問題的解表示為實數字符串。在實數編碼中,每個解的每個基因都被編碼為一個實數值。這種編碼方式在連續問題或具有連續決策變數的混合離散問題中很常見。
以下是實數編碼遺傳最佳化演算法的基本步驟:
初始化:隨機生成一組實數字符串作為初始種群。每個字串的長度等於問題中決策變數的數量。
適應度評估:計算每個字串的適應度值,適應度值是根據問題的目標函式來計算的。
選擇:根據適應度值選擇哪些字串進入下一代。通常使用輪盤賭選擇法或錦標賽選擇法等。
交叉(重組):隨機選擇兩個字串,進行交叉操作,產生新的字串。交叉操作是透過線性組合兩個字串的基因來完成的。
變異:隨機選擇一些字串,對它們的基因進行變異操作,以增加種群的多樣性。變異操作是透過隨機改變一個基因的值來實現的。
終止條件:當達到預設的迭代次數或找到滿足要求的解時,演算法終止。
二進位制編碼和實數編碼的主要區別在於問題的表示方式不同。二進位制編碼適用於離散問題,而實數編碼適用於連續問題或具有連續決策變數的混合離散問題。此外,由於實數編碼使用了實數表示解,因此可以直接對連續空間進行搜尋,而二進位制編碼只能透過離散的搜尋空間進行搜尋。然而,由於實數編碼的搜尋空間是連續的,因此可能需要更復雜的搜尋策略來找到全域性最優解,因為初始種群可能陷入區域性最優解中。在某些問題中,實數編碼可能比二進位制編碼更有效,但在其他問題中,二進位制編碼可能更有效。選擇哪種編碼方式取決於問題的具體性質和要求。