为什么在遗传算法中需要适应度缩放?

时间:2016-06-02 13:59:36

标签: genetic-algorithm

阅读David E. Goldberg撰写的“遗传算法”一书,他提到遗传算法中的适应度缩放。

我对这个功能的理解是限制最强的候选人,这样他们就不会涌入游泳池进行繁殖。

为什么要限制最佳候选人?在我看来,尽可能早地让尽可能多的候选人尽可能快地找到最佳解决方案。

2 个答案:

答案 0 :(得分:4)

如果你的早期最佳候选人后来变成了进化的死胡同怎么办?比如说,你最适合的候选人是那些在较小的,较弱的候选人中占主导地位的强大的代理人。如果所有较弱的那些都被淘汰了,那么你就会被大型野兽所困扰,这些野兽可能对环境的一个方面存在弱点,而弱小的那些人还没有遇到这种情况:想想恐龙与小型哺乳动物的关系小行星撞击。或者,在一个更确定的环境中,更有可能是GA的情况,较弱的候选人可能是一个或少量的进化步骤,远离探索健身景观的一个全新的富有成效的部分:想象弱小的小动物进化飞行,开辟了一个全新的可能性,让大野兽最有可能永远无法触及。

潜在的问题是,你早期最强的候选人实际上可能在健身空间的本地最大中或附近,这可能很难实现。可能是较弱的候选人实际上更接近全球最大值。

无论如何,通过积极地修剪你的人口,你可以减少你的人口的遗传多样性,这通常会减少你所覆盖的搜索空间,并限制你搜索这个空间的速度。例如,也许你最好的候选人 相对接近全球最佳解决方案,但只是近亲繁殖该群体可能不会更接近它,​​你可能不得不等待足够的随机正面突变发生。然而,也许你想要削减的一个弱势候选人有一些基因本身并没有多大帮助,但是当与你的强大候选人的基因杂交时,可能会引起巨大的进化跳跃!想象一下,人类与蜘蛛DNA交叉。

答案 1 :(得分:3)

@ sgvd的回答是有效的,但我想详细说明。

首先,我们需要定义健身缩放的实际含义。如果这意味着只是将拟合度乘以某个因子,则改变群体中的关系 - 如果最佳个体的适应度比最差个体高10倍,则在这种乘法之后这仍然是正确的(除非你乘以零,这没有任何意义)。因此,更合理的适应度缩放是适应度值的仿射变换:

scaled(f) = a * f + b

即。这些值乘以某个数字偏移另一个数字,向上或向下。

健身缩放只对某些类型的选择策略有意义,即选择概率与个体 1 的适应度成正比的那些。

健身缩放实际上扮演两个角色。第一个仅仅是实用的 - 如果你想要一个概率与健康成正比,你需要适应性是积极的。因此,如果您的原始适应值可能为负值(但受限于下方),则可以对其进行调整,以便计算出其中的概率。 示例:如果您的适应度给出范围[-10,10]中的值,则只需将10加到值即可获得所有正值。

第二个角色是,正如您和@sgvd已经提到的那样,限制最强解决方案的能力来压倒弱势解决方案。最好的例子就是一个例子。

假设您的原始适应度值给出范围[0,100]的值。如果你这样离开,那么最差的人将被选中的概率为零,而最好的人的概率比最差的人高100倍(不包括真正最差的人)。但是,我们将缩放系数设置为a = 1/2, b = 50。然后,范围转换为[50,100]。马上就会发生两件事:

  1. 即使是最差的人也有非零概率被选中。
  2. 现在最好的人选择的可能性比最差的人多2倍。
  3. 探索与利用

    通过设置缩放因子,您可以控制算法是否会对利用进行更多探索,反之亦然。在缩放之后,这些值将更加“压缩” 2 ,将进行更多的探索(因为与最差的个体相比,选择最佳个体的可能性将降低) 。反之亦然,“扩展” 2 的价值越多,开发就越多(因为与最差的个体相比,选择最佳个体的可能性会增加)。

    其他选择策略

    正如我在开始时所写的那样,适应性缩放仅对选择策略有意义,这些选择策略从适应度值中成比例地导出选择概率。但是,有其他选择策略不能像这样工作。

    排名选择

    排名选择与轮盘赌选择相同,但概率来源的数字不是原始适应值。相反,整个总体按原始适应度值排序,并且排名(即排序列表中的位置)是您从中获得选择概率的数字。

    当有一个或两个“大”个体和许多“小”个体时,这完全消除了差异。他们只会被排名。

    锦标赛选择

    在这种类型的选择中,您根本不需要知道绝对适应度值,您只需要能够比较其中两个并告诉哪个更好。要使用锦标赛选择选择一个人,您可以从人口中随机选择一些人(这个数字是一个参数),然后选择其中最好的一个。只要你选择了足够多的人,你就重复一遍。

    在这里,您还可以根据锦标赛的规模控制探索与开拓事项 - 锦标赛越大,最佳人选参加锦标赛的机会就越高。

    1 这种选择策略的一个例子是经典的轮盘赌选择。在这种选择策略中,每个人都有自己的轮盘赌部分,其大小与特定个人的健康状况成比例。

    2 假设原始值为正,则缩放值会在a下降到零并且b上升时被压缩。扩张则相反。