遗传算法理解

之前写过一篇蜂群算法(Artificial Bee Colony), 那么遗传算法(Genetic Algorithm) 跟其有着相似的想法。

GA模拟人工种群的进化过程,通过选择、交叉、变异机制,在每次迭代中保留一组候选个体,重复此过程,经过若干代进化后,理想情况下其适应度会到“近似最优”状态。

1、ABC、GA算法,都是为了寻找最优解。

2、相关概念,个体(individual),种群(population),适应度值(Fitness Value)。

3、GA中,个体又被称为染色体(Chromosome),种群又被称为染色体组(Genome)。

4、GA中,关键词,交叉(crossover),变异(mutation)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

现在结合实例分析,

假设现在有目标函数F(x)=X-1,解为正整数,解区间为[0,10] ,

当然这个目标函数非常简单,一眼就知道最优解是10…

第一步:编码

每个解对应一条染色体,染色体表达方式如下图,

《遗传算法理解》

最常用的则是第一种,二进制方式

因为我们的解区间为[0,10],所以用4位二进制表示就够了。

第二步:初始化

随机初始化染色体个数,具体要求没有,但是数量太少,寻找最优解速度会很慢,数量过多,浪费很多时间在无关解上。在ABC算法中,也同样有初始化这一步,并且相同的是,也是由多个个体组成群体,但ABC中,个体叫做蜜源(nectar,or solution),群体叫做食物源(Foods)。

假设随机初始化4个染色体来组成染色体组,

《遗传算法理解》

第三步:选择

利用目标函数,计算出每个解的FitnessValue(也就是把X代入,得到的Y值),然后根据FitnessValue计算该染色体被选中的概率。

在ABC算法中,类似的思路,先计算某个蜜源的ObjectValue(目标函数值),然后利用ObjectValue计算Fitness,再利用Fitness计算被选中的Probability。

《遗传算法理解》

FitnessValue象征着该解有better performance, 利用轮盘赌算法选择优秀的解(假设选择了No.1 和 No.4),做为parent,参加下面的交叉和变异工作。同样地,在ABC中的Onlooker Bee阶段,也是用轮盘赌算法选择优秀的蜜源。

第四步:产生后代(offspring), 方法就是交叉和变异。

先说交叉(crossover)。

从第三步中,我们选择No.1 和 No.4为parent, 最常用的是单点交叉(Single point crossover),选择一个基因座(locus),假如我们选择的是3,那么包括3以后的基因互换,如下图

《遗传算法理解》

通过交叉,我们得到了两个新的解,解码后,分别对应的是5和7,我擦嘞,这特么就尴尬了,竟然跟parent重复了,就是举例而已,假如得到的新解,比parent还好,那么用新解代替旧解。

跟ABC一样,都是保证了进化策略的正向性。

再说变异(mutation)。

变异是为了增加解空间的多样性,说白了,说不定新的变异是更加有有效呢。

一句话,随机选个基因座进行0和1互变换。

在ABC中,Scout Bee扮演着同样地角色,负责去找出新的solution,所以,那些FitnessValue 较低的染色体,比如说No.3 染色体,假如对第一个基因座进行进行下面的变异操作,

《遗传算法理解》

得到的新解,解码后是9,这个变异就很好,

第五步:终结

重复进行步骤3和4,知道满足某种终结条件时,结束。

这个终结条件很多,比如可以设定循环次数,可以设定两次最优解之间的差值小于某个值等等。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

MATLAB 可以直接调用遗传算法函数。

    原文作者:遗传算法
    原文地址: https://blog.csdn.net/u010807846/article/details/54894128
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞