matlab遗传算法工具箱源代码学习

首先使用 open ga命令打开遗传算法源代码,依次顺序阅读

defaultopt结构体给出了默认设置的代码m文件名称,可以查看默认的选择函数selectionstochunif(随机均匀选择),默认的交叉函数crossoverscattered(散点随机)等等

文件的最后给出了调用的主体函数gaunc,进入这个函数后可以看到一个和种群数目有关的for循环

for pop = 1:length(totalPop),

在循环中找到主要的函数:stepGA,进入这个函数

到这里就比较清楚了,可以看到遗传算法各个组成部分的数目,精英数目nEliteKids,用于产生交叉的2 * nXoverKids,用于产生变异的nMutateKids

nEliteKids = options.EliteCount;

nXoverKids = round(options.CrossoverFraction * (size(thisPopulation,1) - nEliteKids));

nMutateKids = size(thisPopulation,1) - nEliteKids - nXoverKids;

nParents = 2 * nXoverKids + nMutateKids;

可以看到用于交叉的父代数目是2倍的nXoverKids

parents(1:(2 * nXoverKids))

也可以看到下一代的组成

nextPopulation = [ eliteKids ; xoverKids ; mutateKids ];

同时通过打断点可以具体看数值;通过之前预设的交叉函数代码等可以看具体交叉函数如何实现。比如可以看到随机均匀选择函数内部是按步长逐步前进,总共2 * nXoverKids步,这样交叉后的子代就是nXoverKids个子代。通过源代码就看出来了随机均匀和轮盘赌的区别,其实二者都是类似的,都存在一个和适应度成比例的轮盘/线,只不过一个是按步长均匀前进,一个是不断的摇轮盘。其核心思路都蕴含了被选择概率与适应度成比例的思想,都有可能多次选中同一父辈。

具体各个选择/交叉/突变的函数名称可以通过help ga,然后在input arguments的options选项中找到

比如双点交叉函数crossovertwopoint

猜你喜欢

转载自blog.csdn.net/jianti9962/article/details/109015003