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工具箱即可。

  • 相关阅读:
    hibernate_0100_HelloWorld
    MYSQL子查询的五种形式
    JSF是什么?它与Struts是什么关系?
    nop指令的作用
    htmlparser实现从网页上抓取数据(收集)
    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the
    FCKeditor 在JSP上的完全安装
    Java遍历文件夹的2种方法
    充电电池和充电时间说明
    吃知了有什么好处
  • 原文地址:https://www.cnblogs.com/kmxojer/p/12297880.html
Copyright © 2011-2022 走看看