遗传算法是根据达尔文的进化论而来,从父代进行交叉繁衍,得出多种多样的子代。
这里讨论的是已知子代的目标值,让父代在繁衍时逐渐靠拢目标子代,也就是在庞大的数据中生成一个我们想要的值。
步骤:
- 创建种群:用随机的方式生成种群内的个体。
选择
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 “。