遺傳算法(Genetic Algorithm)


求函數f(x) = xsin(10Π·x) + 2.0 x∈[-1,2]的最大值:

一、編碼

設求解精度精確到6位小數,所以將區間 [-1,2] 分為 [2-(-1)]×106 = 3×106 等份
221 < 3×106 < 222
所以編碼的二進制串長至少22位
二進制串 s = (b21b20…b0),如 <1000101110110101000111>
x'= s對應的十進制,如 (1000101110110101000111)2 = 2 288 967
x = 對應的[-1,2]中的值,如 -1 + 2288967 × 3 / (222 - 1) = 0.637 197

二、產生初始種群

設產生了4個初始個體
s1 = <1000101110110101000111>
s2 = <0000001110000000100000>
s3 = <1110000000111111000101>
s4 = <0010001000110111010010>

三、計算適應度

令 適應值函數 f(s) = 目標函數 f(x)

編號 個體串 x 適應值 百分比/% 累計百分比/%
s1 1000101110110101000111 0.637 197 2.586 364 29.1 29.1
s2 0000001110000000100000 -0.958 373 1.078 878 12.1 41.2
s3 1110000000111111000101 1.627 888 3.250 650 36.5 77.7
s4 0010001000110111010010 -0.599 032 1.981 785 22.3 100

s3的適應值最大,為最佳個體

四、遺傳操作

1.選擇
轉盤賭方式:

生成隨機數0.35、0.72,所以選中的個體為s2、s3

2.交叉
s2 = <0000001110000000100000>
s3 = <1110000000111111000101>
隨機選擇交叉點,如第5位與第6位之間,交叉后產生子個體:
s2' = <00000|00000111111000101>
s3' = <11100|01110000000100000>
適應值為:
f(s2') = f(-0.998 113) = 1.940 865
f(s3') = f(1.666 028) = 3.459 245
交叉后,子個體s3'的適應值比父個體高

3.變異
若以一小概率選擇了s3的第5個遺傳因子變異,產生的新個體為:
s3' = <1110__1__00000111111000101>
適應值為:
f(s3') = f(1.721 638) = 0.917 743

五、模擬結果

令種群大小為50,交叉概率 pc = 0.25,變異概率 pm = 0.01
按照標准遺傳算法SGA,運行到第89代時獲得的最佳個體為:
smax = <1111001100111111001011>
xmax = 1.850 549
f(xmax) = 3.850274


參考:https://www.jianshu.com/p/ae5157c26af9


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM