谢菲尔德遗传算法工具箱

安装工具箱

谢菲尔德遗传算法工具箱作为matlab的一个函数库,可以简单实现遗传算法。我一开始学习了粒子群优化算法和鲸鱼优化算法等群智能优化算法,都是在整数域上,依靠不同的算子对种群中的每个agent进行迭代,也有接触过差分进化算法这类遗传算法的改进算法。初步了解遗传算法之后,便一直思考遗传算法中二进制和十进制之间的转换问题,因为涉及到十进制的小数部分和二进制的位数等方面。在谢菲尔德工具箱中,存在一个bs2rv()函数,该内置函数包含一个特定的算法,使得我们按照该算法需要的参数可以轻松将二进制数组转化为特定区间的十进制数,其中的原理也没有特别了解。

下载工具箱

原来的下载链接是由官方免费提供的,但是目前是被404的,需要的话可以私信我,原来的官网就是下面这个。
http://codem.group.shef.ac.uk/index.php/ga-toolbox
(1)从网盘里面下出来,为了好记加了中文,下载下来可以把前面的中文删了。

(2)解压出来放在matlab管理工具的文件夹(toolbox)里。P.S我用的是matlab2012a
在这里插入图片描述

添加路径

在matlab中找到下面的文件夹,把gatbx 添加到所有文件的路径中,我的这个matlab每次启动都需要添加一下.
在这里插入图片描述

遗传算法函数

遗传算法是一种群智能优化算法。在种群中,通过对每个粒子进行选择,交叉,变异三个操作进行迭代。下面介绍几个稍微难理解的函数,对于几个函数,我的理解也可能存在偏差。

ranking()函数

ranking()函数有三种调用格式
1.FitnV = ranking(ObjV)
2.FitnV = ranking(ObjV,RFun)
3.FitnV = ranking(ObjV,RFun,SUBPOP)

第一种格式
ObjVobject value,储存一个向量。返回一个线性排序,压差=2的序列,这里线性排序和压差为2是默认属性。宏观上看,返回一个**[0,2]的向量,ObjV越大对应的返回值越小。这个返回值会在select函数**中被调用.
第二种格式
Rfun要传入一个两位的数组,
Rfun(1)中,对线性排序,Rfun(1)需要控制在[1,2],就我理解,压差是一种压缩模式,Rfun(1)=2,函数的返回值会控制在[0,2],Rfun(1)=1.5,返回值会控制在[0.5,1.5].
Rfun(2)中,Rfun(2)=1为非线性排序,Rfun(2)=0为线性排序。对于线性排序和非线性排序的了解不多,ranking()函数默认为线性排序。
第三种格式
默认SUBPOP = 1,SUBPOP定义了ObjV中子种群的数量,这个参数没有过多研究。

select()函数

从种群中选择个体
1.SelCh = select(SEL_F,Chrom,FitnV)
2.SelCh = select(SEL_F,Chrom,FitnV,GGAP)
3.SelCh = select(SEL_F,Chrom,FitnV,GGAP,SUBPOP)

第一种格式
SEL_F传入一个字符串参数’rws’是Roulette Wheel Selection,也就是轮盘赌和’sus’是Stochastic Universal Sampling,也就是随机通用采样。
第二种格式
GGAP表示代沟,即留下来的概率。默认为1.0

bs2rv()函数

二进制转为十进制函数
bs2rv(Chrom,FieldD)
这个函数理解为遗传算法工具箱里内置的一个算法,因为遗传算法中的选择,交叉,变异都是在二进制字符串中完成,所以需要这个函数转化为十进制。
FieldD理解为我们转化是需要传入的格式参数。
FieldD = [len lb ub code scale lbin ubin]
len = size(Chrom,2)
lb,ub分别为每个变量的上下限。
code传入的是编码模式,1表示标准的二进制编码,0表示格雷编码。
scale传入的子串的所用刻度,0表示算出刻度。1表示对数刻度。
lbin ubin分别表示转化的范围中是否包含边界,0表示不包含边界,1表示包含。

小结

本文只简单介绍了谢菲尔德遗传算法工具箱很少的一部分,有不正确的地方欢迎大家私信讨论,希望这篇文章在帮助我记录学习的点滴之余,也能帮助到大家。

发布了1 篇原创文章 · 获赞 0 · 访问量 6

猜你喜欢

转载自blog.csdn.net/qq_40705144/article/details/105600406