遗传算法(GA)
算法背景
遗传算法(Genetic Algorithm, GA)是模拟生物在自然环境中的遗传和进化的过程而形成的自适应
全局优化搜索算法。遗传算法借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种并行、
高效、全局搜索的方法,它能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制
搜索过程以求得最优解。遗传算法操作使用"适者生存”的原则,在潜在的解决方案种群中逐次产生
一个近似最优的方案。在遗传算法的每一代中,根据个体在问题域中的适应度值和从自然遗传学中
借鉴来的再造方法进行个体选择,产生一个新的近似解。这个过程导致种群中个体的进化,得到的
新个体比原个体更能适应环境,就像自然界中的改造一样。
基本原理
对每个个体进行进化,然后择优录取
编码
将问题的可行解,抽象编码为适用于遗传算法的形式
二进制编码:将数值转换为二进制串,用以求解问题
用一个二进制串表示十进制数值
给定数值解区间范围[1,10]
给定精度:1e-5,两个数值之间的间隔
进行编码:为每个数值解分配一个独一无二的二进制串,串所能表示的数值的个数大于等于解
的个数
一个长度n的串,表示
区间范围为【1,10】长度2串提供精度
数值区间长度L,精度E条件下,二进制串长度n,三者关系
解码
二进制串的索引,当前串是第几个串,可以使用二进制转十进制得到
【1,0】为例,转化为十进制2,找对应数值1+2*3=7
一般,区间范围为【a,b】,区间长度L,L=b-a,串长n,当前串十进制T,对应实值解
个体进行复制,以概率进行基因的交叉,复制交叉方式多种多样
复制
将个体适应度大小映射为概率进行复制:适应度高的个体有更大概率复制,且复制的份数越多轮盘赌法。
对适应度高的前N/4的个体进行复制,然后用这些个体把后N/4个体替换掉-精英产生精英。
一定是将当前个体的复制体将下一一个个体替换掉吗?随机可以吗? YES!
一 定只能把"坏解”替换掉吗?把随机某个适应度高5的解替换掉呢? YES!
交叉
按顺序,两两个体之间按概率交叉。如1和2,2和3等。或者1和2,2和4等,或者1和4这样。
必须两两交叉? 3个可以吗? YES!。 5个? YES!
对适应度高的前N/2个体、 甚至N/4的个体之间相互交叉? YES!
一定是按顺序交叉吗?对每个个体随机从前N/2中选一一个个体交叉? YES!
一定是只有一段交叉?多段呢? YES!
变异
每个个体都进行变异。
只对适应度低的后N/4的,或者后N/2个个体变异? YES!
必须都变异吗?按适应度大小映射为概率变异? YES!
一 定是只有一个位点变异?多个位点呢? YES!
算法实现
复制:按适应度大小映射为概率,进行轮盘赌复制
交叉:1和2,3和4,以一定概率决定是否交叉,若交叉,则二者随机一个段进行交叉
变异:按照一定概率决定改个体是否变异,若变异,随机选择一个点进行变异,按位取反
轮盘赌基本思想:适应度越高的解,按道理越应该高概率的进行复制,且复制的份数应该越多
随机数落到不同区域,进行复制:如rand=0-0.2,则对X1复制,缺点需要一直进行比较,划分n个区域可能就需要n个判断
再具体实现时 ,先将小于0.2的都进行判断,再出现随机数只需要判断一端
优点
1)参数少,理论优势
2)变异机制赋予群体跳出局部极值的能力
缺点
容易陷入局部最优,算法实现较繁琐