遗传算法与进化策略的对比

进化算法精讲

基于对生物进化机制的模仿,共产生进化算法的四种典型模型:
①遗传算法 Genetic Algorithm,GA
②进化规划 Evolutionary Programming,EP
③遗传规划 Genetic Programming,GP
④进化策略 Evolution Strategy, E

一、遗传算法(GA)
遗传算法是仿真生物遗传学和自然选择机理,通过人工方式所构造的一类搜索算法,从某种程度上说遗传算法是对生物进化过程进行的数学方式仿真。

其主要思想是生物种群的生存过程普遍遵循达尔文进化准则,群体中的个体根据对环境的适应能力而被大自然所选择或淘汰。进化过程的结果反映在个体的结构上,其染色体包含若干基因,相应的表现型和基因型的联系体现了个体的外部特性与内部机理间逻辑关系。通过个体之间的交叉、变异来适应大自然环境。生物染色体用数学方式或计算机方式来体现就是一串数码,仍叫染色体,有时也叫个体;适应能力是对应着一个染色体的一个数值来衡量;染色体的选择或淘汰则按所面对的问题是求最大还是最小来进行。

其实本质上,遗传算法就是在一个解空间上,随机的给定一组解,这组解称为父亲种群,通过这组解的交叉,变异(一会再解释这几个概念),构建出新的解,称为下一代种群,然后在目前已有的所有解(父亲种群和下一代种群)中抽取表现好的解组成新的父亲种群,然后继续上面的过程,直到达到了迭代条件或者获取到了最优解(一般都是局部最优解)。
遗传算法的架构图:
在这里插入图片描述

适应度

所谓的适应度,本质上可以理解为一个代价函数,或者一个规则,通过对初始种群中的个体计算适应度,能够得到对初始种群中的个体是否优劣的一个度量

选择

选择操作是根据种群中的个体的适应度函数值所度量的优、劣程度决定它在下一代是被淘汰还是被遗传。

交叉

交叉操作是将选择的两个个体p1p1作为父母节点,将两者的部分码值进行交换。假设有下面的两个节点的二进制编码表示:

这里写图片描述

随机产生一个1到7之间的随机数,假设为3,则将p1p1的低三位进行互换,如下图所示,就完成了交叉操作:

这里写图片描述

当然这个只是非常简单的交叉方法,业界常用的交叉方法为模拟二进制交叉,后面我们会继续介绍这种方法。

变异

变异操作就是改变节点p2p2的二进制编码的某些未知上的马尾的数值,如下所示:

1 1 0 1 1 1 1

随机产生一个1到8之间的随机数,假设为3,则将编码的第三位进行变异,将1变为0,如下图所示,就完成了交叉操作:

1 1 0 1 1 0 1

这个依旧是一种简单的变异操作,业界常用的变异操作方法有高斯变异,柯西变异等。

二、进化策略(ES)

与遗传算法对比的相同点:进化策略的思路与遗传算法相似,二者都是利用进化理论进行优化,即利用遗传信息一代代传承变异,通过适者生存的理论,保存适应度高的个体,得到最优解。
在这里插入图片描述
不同点:

1.DNA序列采用实数编码,而非0-1二进制码
2.变异时无法进行简单的0-1互换,思考:实数值该怎么变?随机?
变异思路:为DNA序列上的每一个实数值添加变异强度。根据这个变异强度决定DNA序列上的实数值该变成多少

3.编码:
由第2点可知,进化策略在编码时,不仅要有表示解决方案的实数编码链A1,还得有一条表示每个实属值对应的变异强度值组成的链A2(也就是说,遗传给后代的信息有两种)

4.交叉:
两条链都要交叉,即A1与B1交叉形成表示子代解决方案的C1链,A2与B2交叉形成表示C1链对应位置实数值变异强度的C2链(父:A,母:B,子:C)

5.C1链上值的变异方法:
将C1链上的值看作正态分布的均值μ;
将C2链上变异强度值看作标准差σ;
用正态分布产生一个与C1链上选定位置相近的数,进行替换;

6.C2链上值的变异方法:
因为随着不断遗传迭代,种群中个体1号链的值不断逼近最优解,变异的强度也应当不断减小。所以也需要根据需求自定义2号链的变异方法。

7.选择:
将生成的孩子加入父代中,形成一个包含两代DNA的种群U;
对U种群中每个DNA序列的1号链(表示解决方案)进行fitness计算(打分),并根据分值从大到小排列(用U‘表示排列后的混合种群);
截取U’中的分值高的前n位(n表示一代种群中的个体数目)形成新种群;

1、遗传算法采用二进制编码杂交;而进化策略使用实数。
2、遗传算法采用二进制0->1,1->实现变异;而进化策略则使用变异强度实现变异。

3、遗传算法仅需要一条编码链,用于存储个体的基因;进化策略在编码时,不仅要有实数编码链,还要有变异强度编码链。

4、遗传算法在交叉繁殖的时候,仅实现基因的交叉;进化策略则要实现两条链的交叉,父母辈的实数链交叉形成子辈的实数链,变异强度编码链交叉形成子辈的变异强度编码链。

5、遗传算法在变异时,随机选择基因段变异;进化策略则是将实数链上的实数值看作正态分布的均值μ,将变异强度编码链上变异强度值看作正态分布的标准差σ。

6、遗传算法在自然选择时,通过轮盘赌实现自然选择;进化策略则将子种群加入到父种群中,按照适应度排序,直接选出适应度最大的pop_size个个体。

进化策略代码

import numpy as np
import matplotlib.pyplot as plt

# 每个个体的长度
GENE_SIZE = 1
# 每个基因的范围
GENE_BOUND = [0, 5]    
# 200代   
N_GENERATIONS = 200
# 种群的大小
POP_SIZE = 100          
# 每一代生成50个孩子
N_KID = 50  

# 寻找函数的最大值
def F(x): 
    return np.sin(10*x)*x + np.cos(2*x)*x    

class ES():
    def __init__(self,gene_size,pop_size,n_kid):
        # 基因长度代表字符串的长度
        self.gene_size = gene_size
        # 种群的大小代表种群中有几个个体
        self.pop_size = pop_size
        self.n_kid = n_kid
        self.init_pop()
        print(self.pop)
    # 降到一维
    def get_fitness(self
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeremy-Sky

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值