zoukankan      html  css  js  c++  java
  • 智能算法:遗传算法

    基本理论:遗传算法最优解的方法是模仿生物的进化过程,模拟自然选择和遗传中发生的复制、交叉和变异等现象。它从代表问题可能潜在解集的一个种群开始,而一个种群则由经过基因编码的一定数目的个体组成。对种群反复进行选择、交叉以及变异操作,估计各个个体的适应值,根据“适者生存,优胜略汰”的进化规则,从而产生一群更适应环境的个体,也就使得群体1越来越向最优解的方向进化,最后把末代种群中最优个体经过解码获得满足要求的最优解。

    (1)一元函数的优化问题

    利用遗传算法计算函数f(x)=xcos(5Πx)+3.5在区间[-1,2.5]上的最大值。

    为了避免汉明悬崖,我们选择格雷编码,种群规模为50个个体,每个各题长度为20,使用代购为0.9,最大遗传代数为60.

    f(x)=xcos(5Πx)+3.5:

    function y=fun_sigv(x)
    y=x.*cos(5*pi*x)+3.5;

    遗传算法:

    opt_minmax=1; %目标优化类型:1最大化、-1最小化
    num_ppu=50;   %种群规模:个体个数
    num_gen=60;   %最大遗传代数
    len_ch=20;    %基因长度
    gap=0.9;      %代沟
    sub=-1;       %变量取值下限
    up=2.5;       %变量取值上限
    cd_gray=1;    %是否选择格雷编码:1是,0否
    sc_log=0;     %是否选择对数标度:1是,0否
    trace=zeros(num_gen,2); %遗传迭代性能跟踪器
    fieldd=[len_ch;sub;up;1-cd_gray;sc_log;1;1]; %区域描述器
    chrom=crtbp(num_ppu,len_ch); %初始化生成种群
    k_gen=0;
    x=bs2rv(chrom,fieldd); %翻译初始化种群为10进制
    fun_v=fun_sigv(x);     %计算目标函数值
    tx=sub:.01:up;
    plot(tx,fun_sigv(tx))
    xlabel('x')
    ylabel('y')
    title('一元函数优化结果')
    hold on
    while k_gen<num_gen
        fit_v=ranking(-opt_minmax*fun_v); %计算目标函数的适应度
        selchrom=select('rws',chrom,fit_v,gap); %使用轮盘赌方式选择
        selchrom=recombin('xovsp',selchrom); %交叉
        selchrom=mut(selchrom); %变异
        x=bs2rv(selchrom,fieldd); %子代个体翻译
        fun_v_sel=fun_sigv(x); %计算子代个体对应目标函数值
        [chrom,fun_v]=reins(chrom,selchrom,1,1,opt_minmax*fun_v,opt_minmax*fun_v_sel); %根据目标函数值将子代个体插入新种群
        [f,id]=max(fun_v); %寻找当前种群最优解
        x=bs2rv(chrom,fieldd);
        f=f*opt_minmax;
        fun_v=fun_v*opt_minmax;
        k_gen=k_gen+1;
        trace(k_gen,1)=f;
        trace(k_gen,2)=mean(fun_v);
    end
    plot(x(id),f,'r*')
    figure
    plot(trace(:,1),'r-*');
    hold on
    plot(trace(:,2),'b-o');
    legend('各子代种群最优解','各子代种群平均值');
    xlabel('迭代次数');
    ylabel('目标函数优化情况')
    title('一元函数优化过程')
        

    过程:

    结果:

     bug解决:

    bug:

    未定义函数或变量 'crtbp'。

    解决:

    这是缺少遗传算法需要的一个谢菲尔德工具箱,网上下载后按照安装步骤安装好后成功解决。

    具体安装步骤如下:

    链接:https://pan.baidu.com/s/1ex6auJZ6Pmtk_flRGZF1iw 密码:81nk

    可下载MATLAB的gatbx安装包。
    安装步骤:把gatbx.rar解压至matlab安装目录下的toolbox文件夹里。运行matlab,在设置路径里添加该gatbx工具箱即可。

  • 相关阅读:
    CSS3 @font-face
    CSS3 Media Queries
    简单弹出层示例
    mysql查询排名
    ajax 简单学习
    js ajax 传送xml dom对象到服务器
    雨燕权限管理后端技术总结
    日期date出参入参和timestamp转化
    雨燕权限管理前端技术总结
    jwt再度理解
  • 原文地址:https://www.cnblogs.com/kmxojer/p/12297880.html
Copyright © 2011-2022 走看看