达尔文自然选择学说和孟德尔遗传机理的生物进化过程的计算模型,个体经过每一代的迭代不断产生更优良的基因序列(可行解),淘汰掉适应度值低的个体,从而不断接近最优的适应度(目标函数),一般来说遗传算法是启发性算法,得到的目标函数值可能不尽相同
遗传算法由编解码,个体适应度评估和遗传运算三大模块组成
(取决于决策变量的定义域区间)
一般采用二进制编码,设某一个参数x的取值范围为(L,U),假设用长度为k的二进制编码表示该参数,则一共有2^k种不同的编码,参数变化的步长为
,则
因为x的变化情况是
目的是为了把不直观的二进制串还原成十进制,设某一个个体的二进制串为
,则解码公式为
确定k的大小,一般需要根据所求的x精度来确定,若x精度要求保留m位小数,则可行解的空间大小为(U-L)*10^m,所以此时的k应该满足
如果有多个自变量
,则需要对每个
进行各自的可行解范围的编码计算,然后计算出每个
后,将这些
拼串到一起组成一个大的二进制串
适应度函数即为待求解的目标函数,因为轮盘选择一般是选择最好的适应度,所以一般来求解最大值问题,所以如果是最小值问题,需要取负数求最大
初始个体即为寻找最优解的初始可行解,此时算出的适应度函数值不一定是最优的,初始种群大小为超参数,根据问题的规模来确定,且种群大小不随着迭代次数增加而变化,遗传算法本质上是不断把优质基因加入到后代当中去,不存在淘汰最差个体的情况
生存代数即为迭代次数,一般是等着适应度函数的变化收敛程度满足设定的阈值参数后就可以终止迭代,即此时的最优解就是此时最大适应度函数对应的个体
i 为自变量个数
的区间长度,方便后续做轮盘选择,即随机数落在这个区间的会因为区间长度的越大而越多
小于
则说明第k个个体是被选中的,这样就会得到一些含有重复个体的新种群,但种群大小还是为N
自由组合一般有单点自由或多点进行交叉的情况,考虑单点组合,设置一个交配概率,则参与交配的染色体数量为染色体总量乘以交配概率并向下取整,此时采取的方法是生成总数为N的(0,1)随机序列,低于选定的交配概率的值的个体作为交配的对象,如果只有一个个体则不进行交配,如果有多个个体则随机两两配对,然后分别在每对中生成以基因串长为范围的整数随机数即交配点位,然后进行基因片段的互换,一般交配是在复制之后进行操作
设定突变概率,总基因数为个体数乘以二进制串长,然后生成(0,1)的长度为总基因数的随机数,选出随机数中小于突变概率的基因,根据该基因的下标序号除以个体数所得的商就是需要突变的个体,余数就是该个体所要突变的基因位置,突变的含义是将个体二进制串的某一位置上的数由0变1或者由1变0,发生在基因交配之后
在经过基因突变后的新个体(个体数与之前保持不变),每个个体的基因串解码后又再次进行适应度值的计算,然后继续轮盘选择,不断迭代复制、交配、突变等几步,直到最大适应度值不发生变化或者变化的差值在给定的阈值时则停止迭代,最终取得最大适应度的个体即为最优个体,解码后即为可行解
自变量在给定的约束条件下进行了无缝编码(能覆盖所有可能的解),所以遗传算法总是有机会得到全局最优而不是局部最优