首先介绍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
另外你用这个程序算做什么?一般智能算法解决解决问题具有随机性,因此很难对误差做出评价,这也是应用受到阻碍的主要原因,如果在解决具体问题的时候,还是优先考虑定量算法的.
希望我的回答对你有所帮助.