遗传算法中选择算子的问题clear all;close all;%ParametersSize=80; G=100; C

1个回答

  • 首先介绍sort函数用法:

    [B,I]=sort(A,.),I为返回的排序后元素在原数组中的行位置或列位置.B一般为排序后的数组.举例:

    A = 3 4 2

    1 5 3

    4 7 1

    [B,I]=sort(A)

    B = 1 4 1

    3 5 2

    4 7 3

    I = 2 1 3

    1 2 1

    3 3 2

    [Oderfi,Indexfi]=sort(fi),因此这句话中的Oderfi保存了从小到大排列的结果,而Indexfi保存了Oderfi中对应原始数组(fi)的的原始位置.

    fi_Size=(Oderfi/fi_sum)*Size 这句话挺难理解的,不过我运行了这个程序后,还是被我发现了

    其中Oderf为 适应值 由小到大排列,fi_sum为适应值的总和,Size为总的个数,而fi_sum/size就是平均值,因此.fi_size中所存放的数据是Oderf中数值除以其平均值后的结果.其中必有大于1的,小于1的.我们这里的淘汰规则是淘汰掉 种群中小于平均值的数据,下边的代码是对这个规则的具体化

    fi_S只包含0和1,其中0是小于平均值的个体,1是大于平均值的个体.

    for j=1:1:fi_S(i) %Select and Reproduce

    TempE(kk,:)=E(Indexfi(i),:);

    kk=kk+1; %kk is used to reproduce

    end

    E中保存的是初始种群,我们每一代种群中都会有80个个体(每一行是一个个体,列数决定了个体范围和精度),当fi_S中某个个体(记为个体A)不是0的时候,就执行了TempE(kk,:)=E(Indexfi(i),:);

    这句代码,Indexfi保存了个体A在E中的行数(也就是fi的列数),我们认定这一行(这个个体A)具有优良基因,因此保存在TempE中,进化到下一代.

    好久没看遗传算法了,上边的有些术语是我自己编的,看懂就好

    还有,你的程序不完全,你能把这个完整的遗传算法代码给我吗,我感觉这个程序写的很简洁,非常好.我的邮箱glinfV@163.com

    另外你用这个程序算做什么?一般智能算法解决解决问题具有随机性,因此很难对误差做出评价,这也是应用受到阻碍的主要原因,如果在解决具体问题的时候,还是优先考虑定量算法的.

    希望我的回答对你有所帮助.