遗传算法的个人理解
2016-05-08 13:09
155 查看
遗传算法是根据达尔文的进化论而来,从父代进行交叉繁衍,得出多种多样的子代。
这里讨论的是已知子代的目标值,让父代在繁衍时逐渐靠拢目标子代,也就是在庞大的数据中生成一个我们想要的值。
步骤:
创建种群:用随机的方式生成种群内的个体。
选择
2.1 评估适应度:计算种群中每个个体在目标中出现的概率。
2.2 创建交配池:在交配池中按适应度添加个体。例:a适应度0.8,b适应度0.2,即在交配池中添加80%的a和20%的b
繁殖
3.1 交叉:在交配池中取a中的前两元素,b中的后两个元素,将他们拼接在一起成为子代。
为了提高子代的多样性,我们可把中点位置改为随机点,即从a中取第一个元素,b中取后三个元素生成一个子代。从a中取前三个元素,b中取后最后一个元素生成另一个子代。
3.2 突变:在创建种群的过程中,我们用随机的方式创建了有多样性的种群,但是只生成了一次,也就是说种群只有第一代,不一定能满足生成目标值。我们需要多代种群,因此加入突变过程保证种群的不断更新。
3.3 突变完成后我们将子代加入新种群,新种群替代原来的种群,再回到选择步骤,重新评估适应度,创建新的交配池。
上一个根据《代码本色》改写的在openframeworks里实现的遗传算法,目标为字符串”HOW DO YOU DO “。
这里讨论的是已知子代的目标值,让父代在繁衍时逐渐靠拢目标子代,也就是在庞大的数据中生成一个我们想要的值。
步骤:
创建种群:用随机的方式生成种群内的个体。
选择
2.1 评估适应度:计算种群中每个个体在目标中出现的概率。
2.2 创建交配池:在交配池中按适应度添加个体。例:a适应度0.8,b适应度0.2,即在交配池中添加80%的a和20%的b
繁殖
3.1 交叉:在交配池中取a中的前两元素,b中的后两个元素,将他们拼接在一起成为子代。
为了提高子代的多样性,我们可把中点位置改为随机点,即从a中取第一个元素,b中取后三个元素生成一个子代。从a中取前三个元素,b中取后最后一个元素生成另一个子代。
3.2 突变:在创建种群的过程中,我们用随机的方式创建了有多样性的种群,但是只生成了一次,也就是说种群只有第一代,不一定能满足生成目标值。我们需要多代种群,因此加入突变过程保证种群的不断更新。
3.3 突变完成后我们将子代加入新种群,新种群替代原来的种群,再回到选择步骤,重新评估适应度,创建新的交配池。
上一个根据《代码本色》改写的在openframeworks里实现的遗传算法,目标为字符串”HOW DO YOU DO “。
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析