求函數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