种群
有一个鸟类种群,种群中有一些多样性,它们看起来有些颜色较浅,有些颜色较深。我们也有4个捕食者猫头鹰,他们非常喜欢吃这些鸟,但对它们来说是什么颜色无所谓,因为它们尝起来都一样好吃,但是它们会随着时间变长而越来越饿,并且它们打猎的时间和它们的视力正相关。但如图所示,明亮的背景下看到颜色较深的鸟要更容易,所以深色的鸟很容易被看到,被吃掉,颜色较浅的多鸟也会被随机吃掉。因为种群中留下的浅色鸟比例较高,它们繁殖和生产浅色后代的可能性更高。
基因突变
猫头鹰饿了,像以前一样出去寻找食物。他们每个人这次都吃鸟,结果种群中剩下的鸟都是白色的,或者它们的后代也是白色的。但是在这个过程中,我们看到其中一只鸟看起来不像它的父母。这在自然界中被称为基因突变,因为脱氧核糖核酸复制自己的时候它会犯一些小错误,这些错误就是所谓的突变。
遗传算法的组成
- METHOD TO SPAWN POPULATION
- CROSSOVER OPERATOR
- MUTATION OPERATOR
- FITNESS EVALUATION
种群
产生原始群体的方法,通常是设计GA最难的部分。当产生新的种群时,个体的创造被称为产卵。我们希望确保种群具有足够的多样性或可变性,以获得解决方案空间的良好覆盖。
交叉
一旦我们有了种群,我们用来模拟来自两个父母的DNA组合,当他们有交叉后代时。主动交叉是我们在使用遗传算法时需要设计的最复杂的系统之一。
约束
你想确保父母双方的特征都保留下来,同时确保他们的后代在现实世界的一些限制下是可行的。如果我们试图培育最适合游泳的人类。它们有鳃可能是理想的,但这种违反了必须是人类的约束。
变异
然后我们需要一种方法来引入额外的可变性到我们的问题中,模仿前面讨论的自然界中发生的突变,然而,当我们手工制作这个突变运算符时。我们可以尽可能少或尽可能多的突变,或者添加更聪明的突变方法,或者真正像我们想要的那样有创造力,以确保我们从GA中获得最佳结果,我们GA需要的最后一个组件是确定个人适应度的方法。
适应度
在关于鸟的例子中,鸟类更好地融入它们更适合的环境。但是,当在GA中编码任何问题时。我们需要一些方法来改变种群中的这个人。变成一个表示拟合程度的数字是非常好的,所以现在我们有了遗传算法的所有组件。让我们谈谈我们的核心GA将遵循的过程。
例子
找到函数的最小值,你也许能够直观地知道这个函数的最小值在X等于零,但请记住。这是一个超级基本的例子。
我们在这种情况下的个人。每个个体由单个浮点值表示。X的值在-2到+6的范围内。因此,每个人都将在这个范围内创建一个随机值。现在种群的数量完全取决于我们的电脑有多好。但是在我们这里的例子中,我们就选10吧。
然后我们需要给我们每个个体的适应度进行评级。在我们这里,这很简单。当插入我们的方程以适合我们的个体时,结果值越低。
现在我们有了我们的种群,种群个体都有各自的适应度,我们可以开始繁殖过程了。虽然这个育种过程的实施可以改变我们将要做的方式。
我们在进行此选择时从人群中选择2个父母。它应该是随机的,但也应该更有可能选择更健康的父母。开始交叉,交叉需要两个个体,并导致一个孩子或后代个体分享其父母的特征。同样,我们稍后将更详细地介绍这个过程。但是现在,只要知道我们更有可能产生一个后代,它的值接近或介于它的两个父母的值之间,例如,如果我们有一个个体的值。-0.25和另一个值为0.75,它们的后代可能有大约的价值0.3在这一点上,我们有机会介绍我们的突变运算符突变运算符。只有使用后代来确保种群中最佳个体的完整性,突变运算符才是非常简单的。它在负数之间增加了一些值。
重复这个过程,直到有2倍的初始种群。接下来,我们计算所有新后代的适应度。我们把我们的种群从最好的、最适合的到最差的。然后我们移除种群的下半部分。这保证了繁殖的产生永远不会造成。我们最好的解决方案是变得比前一代人更糟糕,我们能看到的唯一进步是我们会保持和前一代人一样好或者变得更好。
然后我们重复这个过程,而我们仍然看到一代又一代的改进。如果一段时间过去了,我们不再看到任何改善。我们从我们的人群中挑选出最好的人,并将其作为解决方案提供。