最近稍微学习一下智能算法的设计,就满Internet搜索,最终发现遗传算法是大家学习最多的,也是在各个领域内进行函数优化,解析解求解过程中很重要的一种方法!
学习遗传算法,首先为了上手较快,我推荐大家先使用Matlab,这个工具进行矩阵分析有应用,真的很管用,而且上手特别快!
http://bbs.pinggu.org/biaoqian/matlabbb/ 这个是Matlab相关下载的地方!
http://www.ilovematlab.cn/forum.php 这个网址链接是很多初学者和专业人士都在这里进行讨论交流的地方!我就在这上面学习到好多知识!
http://baike.soso.com/v100038.htm 这个网页上面有很详细的关于遗传只能算法的讲解,内容很详细,是我们学习的好帮手!希望对这个算法不是很熟悉的同学,要好好了解一下这个背景!
个人理解:其实简单的来说,就是使用一个种有效的编码方式,将有效空间中的解集,按照编码方式排布,在代价函数的作用下,不断的有目的的迭代,去寻找最后解,当然这是把这个问题给简化好多!这几其中自然包括如何去选择,如何去进化,如何避免局部最优解,对于种群进化来说应该如何避免种群的进化速度,如何去交叉!如何寻找到一个比较好的代价函数!
现在我们使用英国的谢菲尔德工具箱进行简单遗传算法的设计:下载地址:http://ishare.iask.sina.com.cn/f/7561185.html?sudaref=www.sogou.com&retcode=0
简单的一元函数的优化:
y = sin(10*pi*x)/x 1<=x<=2
参数的设置:
种群大小:40
最大遗传代数:20
个体长度:20
代沟:0.95
交叉遗传:0.7
变异概率:0.01
lb=1;ub=2; ezplot(‘sin(10*pi*X)/X‘,[lb,ub]); xlabel(‘自变量/X‘) ylabel(‘函数值/y‘)
创建一个初始的种群,并用十进制数进行标示,便于计算
trace = zeros(2,MAXGEN); FieldD = [PRECI;lb;ub;1;0;1;1]; Chrom = crtbp(NIND,PRECI); gen = 0; X = bs2rv(Chrom,FieldD);
代价函数:
ObjV = sin(10*pi*X)./X;
下面是主要的迭代过程:
while gen < MAXGEN FitnV = ranking(ObjV); Selch = select(‘sus‘,Chrom,FitnV,GGAP); Selch = recombin(‘xovsp‘,Selch,px); Selch = mut(Selch,pm); X = bs2rv(Selch,FieldD); ObjvSel = sin(10*pi*X)./X; [Chrom,ObjV] = reins(Chrom,Selch,1,1,ObjV,ObjvSel); X = bs2rv(Chrom,FieldD); gen = gen + 1; [Y,I] = min(ObjV); trace(1,gen) = X(I); trace(2,gen) = Y; end
还有就是一些图片的显示工作!这个对于有matlab基础的同学来说是很easy的事情!在这个方向有什么要的建议我们一起讨论!