• 智能算法之Matlab实现(1)——遗传算法(1)


    遗传算法的过程在这里先不介绍了,可能在接下来的几篇文章会介绍,这里介绍些实用的。

    (1)Sheffield遗传算法工具箱的安装

    我共享了下修改过文件名和后缀名的原版工具箱,地址为:http://pan.baidu.com/s/1inVKE

    安装方法

    将整个文件夹复制到matlab安装文件夹中的toolbox文件夹

    例如:C:Program FilesMATLABR2013b oolbox文件夹。

    然后在Command Window里面输入:

    str = ['C:Program FilesMATLABR2013b	oolboxgatbx']
    
    addpath(str)

    可能有些同学出现过这个问题,

    Undefined function or method 'crtbp' for input arguments of type 'double'

    或者是:

    Cannot find an exact (case-sensitive) match for 'crtbp.m'
    The closest match is C:Program FilesMATLABR2012a oolboxgatbxCRTBP.M
    To change the file extension, cd to the file's folder, type:
       movefile CRTBP.M CRTBP.m_bad; movefile CRTBP.m_bad CRTBP.m
    and then cd back.

    这是因为新旧Matlab版本对于M文件的文件名要求不尽相同,将其全部改为小写文件名和文件后缀名即可。

    (2)应用实例(1)——单变量函数求最值

    类似模板的东西,求解此函数最大值:

    daum_equation_1385220292313

    有如下代码:

    %% Do Some Cleaning
    clc
    clear all;
    close all;
    %% Set the initial parameters
    lb = 1; ub = 2;%x belongs to [1,2]
    %% Plot
    figure(1);
    hold on;
    ezplot('sin(10*pi*X)/X',[lb,ub]);
    xlabel('x/X')
    ylabel('y/Y')
    %% Define the parameters of GA
    NIND = 40;%size of the group
    MAXGEN = 20;%max generations
    PRECI = 20;%length of a individual
    GGAP = 0.95;%gap
    px = 0.7;%the possibility of cross production
    pm = 0.1;%the possibility of mutation
    trace = zeros(2,MAXGEN);%init value of algorithm寻优函数
    FieldD = [PRECI;lb;ub;1;0;1;1];%区域描述器
    Chrom = crtbp(NIND,PRECI);%creat random discrete group
    %% Optimizations
    gen = 0;%counter of generations
    X = bs2rv(Chrom,FieldD);%bin to dec
    ObjV = sin(10 * pi * X) ./ X;%cal the f(x)
    while gen < MAXGEN
        FitnV = ranking(ObjV);%allocate the adaptness
        SelCh = select('sus',Chrom,FitnV,GGAP);%select
        SelCh = recombin('xovsp',SelCh,px);%recombine
        SelCh = mut(SelCh, pm);%mutate
        X = bs2rv(SelCh,FieldD);%to dec
        ObjVSel = sin(10 * pi * X)./ X;%cal the next-gen's target f(x)
        [Chrom, ObjV] = reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel);%reinsert them to father-gen
        X = bs2rv(Chrom, FieldD);
        gen = gen + 1;%counter+=1
        %get every gen's answers and it's nums, Y stant for best f(x), I for
        %nums;
        [Y I] = min(ObjV);
        trace(1,gen) = X(I);
        trace(2,gen) = Y;
    end
    %% Plot
    plot(trace(1,:),trace(2,:),'bo');%plot every gen's answer
    grid on;
    plot(X,ObjV,'b*');
    hold off
    %% Plot the evolution
    figure(2);
    plot(1:MAXGEN,trace(2,:));
    grid on
    xlabel('count of generations')
    ylabel('answer')
    title('procedure')
    bestY = trace(2,end)
    bestX = trace(1,end)

    运行结果:

    GeneticAlgorithm_for_single_variables_02GeneticAlgorithm_for_single_variables_03

    (3)应用实例(2)——双变量函数求最值

    daum_equation_1385220479849

    那么有如下代码:

    %% Do Some Cleaning
    clc
    clear all;
    close all;
    %% Set the initial parameters
    lbx = -2; ubx = 2;%x belongs to [-2,2]
    lby = -2; uby = 2;%y belongs to [-2,2]
    %% Plot
    figure(1);
    ezmesh('y*sin(2*pi*x) + x*cos(2*pi*y)',[lbx,ubx,lby,uby],50);
    xlabel('x/X')
    ylabel('y/Y')
    hold on;
    %% Define the parameters of GA
    NIND = 40;%size of the group
    MAXGEN = 20;%max generations
    PRECI = 20;%length of a individual
    GGAP = 0.95;%gap
    px = 0.7;%the possibility of cross production
    pm = 0.01;%the possibility of mutation
    trace = zeros(3,MAXGEN);%init value of algorithm寻优函数
    FieldD = [PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1];%Field discriber
    Chrom = crtbp(NIND,PRECI*2);%creat random discrete group
    %% Optimizations
    gen = 0;%counter of generations
    XY = bs2rv(Chrom,FieldD);%bin to dec
    X = XY(:,1);
    Y = XY(:,2);
    ObjV = Y.*sin(2*pi*X) + X.*cos(2*pi*Y);%cal the f(x,y)
    while gen < MAXGEN
        FitnV = ranking(-ObjV);%allocate the adaptness
        SelCh = select('sus',Chrom,FitnV,GGAP);%select
        SelCh = recombin('xovsp',SelCh,px);%recombine
        SelCh = mut(SelCh, pm);%mutate
        XY = bs2rv(SelCh,FieldD);%bin to dec
        X = XY(:,1);
        Y = XY(:,2);
        ObjVSel = Y.*sin(2*pi*X) + X.*cos(2*pi*Y);%cal the next-gen's target f(x)
        [Chrom, ObjV] = reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel);%reinsert them to father-gen
        XY = bs2rv(Chrom,FieldD);
        gen = gen + 1;%counter+=1
        %get every gen's answers and it's nums, Y stant for best f(x), I for
        %nums;
        [Y, I] = max(ObjV);
        trace(1:2,gen) = XY(I,:);
        trace(3,gen) = Y;
    end
    %% Plot
    plot3(trace(1,:),trace(2,:),trace(3,:),'bo');%plot every gen's answer
    grid on;
    plot3(XY(:,1),XY(:,2),ObjV,'b*');
    hold off
    %% Plot the evolution
    figure(2);
    plot(1:MAXGEN,trace(3,:));
    grid on
    xlabel('count of generations')
    ylabel('answer')
    title('procedure')
    bestX = trace(1,end)
    bestY = trace(2,end)
    bestZ = trace(3,end)

    运行结果:

    GeneticAlgorithm_for_double_variables_02GeneticAlgorithm_for_double_variables_03

    (4)应用实例(3)——遗传算法接力优化(采用系统GAtool工具箱)

    优化此函数:

    daum_equation_1385221624253

    第一个文件(主文件):

    %主程序:本程序采用遗传算法接力进化,
    %将上次进化结束后得到的最终种群作为下次输入的初始种群
    clc;
    close all;
    clear all;
    %进化的代数
    T=100;
    optionsOrigin=gaoptimset('Generations',T/2);
    [x,fval,reason,output,finnal_pop]=ga(@ff,2,optionsOrigin);
    %进行第二次接力进化
    options1=gaoptimset('Generations',T/2,'InitialPopulation',finnal_pop,...
        'PlotFcns',@gaplotbestf);
    [x,fval,reason,output,finnal_pop]=ga(@ff,2,options1);
    Bestx=x
    BestFval=fval

    评价函数文件,与主文件一起保存,名字为ff.m

    %子函数:适应度函数同时也是目标函数,函数存储名称为ch14_2f.m
    function f=ff(x)
    g1=1.5+x(1)*x(2)-x(1)-x(2);
    g2=-x(1)*x(2);
    if(g1>0||g2>10)
        f=100;
    else
        f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
    end

    程序结果:

    untitled

    至此,第一部分结束,下一篇将介绍遗传算法的基本内容。

  • 相关阅读:
    arcgis栅格重分类(Reclassify>Raster To Polygon)
    geotools统计某一shapefile的polygon区域内的值的平均值
    geotools最短路径的实现
    arcgis栅格重采样(降采样)(切图)
    如何生成delaunay三角网(BowyerWatson算法)
    Arcgis自动化制图
    java collection转换为list
    geoserver发布服务流程
    GeoServer发布geotiff并且设置QGIS样式
    halconset_diagonal_matrix设置矩阵的对角线元素
  • 原文地址:https://www.cnblogs.com/zhengnanlee/p/3439649.html
Copyright © 2020-2023  润新知