遗传算法(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

猜你喜欢

转载自www.cnblogs.com/holaworld/p/12470176.html