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

  • 相关阅读:
    MySQL数据库(2)
    mysql数据库(1)
    python是动态语言
    元类
    Django 全文检索
    Django 分页的实现
    FastDFS分布式存储服务器的使用
    FastDFS分布式存储服务器安装
    Django 获取用户历史浏览记录(基于Redis缓存)
    LoginRequiredMixin类的使用
  • 原文地址:https://www.cnblogs.com/holaworld/p/12470176.html
Copyright © 2020-2023  润新知