我们如何知道下一代会更好?


32

这篇MSDN文章最近向我介绍了遗传算法,他在其中将它们称为组合进化,但这似乎是同一回事,并且正在努力理解如何将两个潜在解决方案结合起来始终会产生一个新的解决方案,至少和父母一样好。

为什么会这样呢?当然,合并可能会导致更糟的情况。

据我了解,该算法基于这样的概念:当一个物种的雄性和雌性产生后代时,这些后代将具有父母双方的特征。有些组合会更好,有些会更差,有些也会一样。更好的(无论“更好”的定义是否适当)具有生存和产生具有改进特性的fpsring的更多机会。然而,是比较弱的组合。为什么GA不会出现此问题?


12
However, there will be combinations that are weaker. Why isn't this an issue with GA?-因为较弱的组合被丢弃。
罗伯特·哈维

6
我们知道下一代不会更糟,因为我们不会丢掉好人,但会丢掉坏人。而且有一定的机会将一些优秀的产品组合在一起会变得更好,但这并不能保证。
user253751 '16

7
Why isn't this an issue with GA?好吧,或更确切地说,可能是。使用GA进行优化的众多参数之一是种群数量:如果种群数量太小,您可能只会产生较弱的个体,但是种群数量太大,则与适应度函数相关的计算时间可能会太长。
Loufylouf

3
繁殖除草之间是有区别的:繁殖阶段(可能)会产生更差的后代,但是除草阶段(应该)将消除下一繁殖阶段之前表现最差的情况。
TripeHound

感谢大家。如果我理解正确的话,那是他在文章中所说的话,使我无所适从。他说:“ 新的,可能很好的儿童有机体取代了贫穷的有机体 ”,这引起了我的疑问。似乎是错误的:)
Avrohom Yisroel

Answers:


43

遗传算法试图通过剔除种群来提高每一代。根据适应度函数对每个成员进行评估,并且只允许复制其中得分较高的部分。

不过,您是对的:我们无法保证下一代会在前辈的得分上有所提高。

考虑道金斯的鼬鼠程序:“进化”字符串"Methinks it is like a weasel"。从一组随机字符串开始,适应度函数会评估最接近的文本匹配,并对其进行干扰以产生下一代。通过简单的分频复制,将两个高得分的琴弦组合在一起很容易产生得分较低的后代。甚至单个高适应度字符串的“无性”随机突变都可能降低孩子的健康状况。

我认为,值得注意的是,这不一定是缺陷。通过这种搜索,便有了局部最大值的想法。总体中的一个成员可能代表的解决方案不是最佳结果,而是可以实现的最佳方案而不会恶化。

想象一下,黄鼠狼程序的适应度函数不仅会找到编辑距离,而且还会有一些“单词”的概念,并测试字符串的最后一个单词是否是动物的名字。任何动物名字得分都很高,但"weasel"会获得可观的奖励。

现在,如果"Methinks it is like a walrus"进化了会怎样?得分不错。不像最终目标字符串那样好,但是比"Methinks it is like a walrut"单步突变可以达到的更好或其他接近的变化更好。

海象字符串是一个局部最大值,除非程序允许下一代的分数变差,否则搜索可能会卡在此处。


1
相关:youtube.com/watch? v=YT1vXXMsYak-道金计算机程序的演示大约在12分钟内进行,尽管整个演讲值得一看,因为它描述了进化的基本理论基础(无论是生物学的还是模拟的)接地。
Periata Breatta

24
确实,有时您会允许一定比例的较弱评分成员生存,以增加“遗传多样性”,并引入完全不基于任何现有成员的完全随机突变。
约尔格W¯¯米塔格

@JoshCaswell谢谢你。尽管所有答案都很好,但我将其标记为可接受的答案,因为它涵盖了我所要求的所有内容,以及我尚未要求的几件事!
Avrohom Yisroel

很高兴能为您提供帮助,@ AvrohomYisroel
乔什·卡斯威尔

6

我们不知道它会变得更好,我们确实知道它不会变得更糟。

在每一代中,不仅包括最佳元素的出现,而且还包括最佳元素本身-如果愿意,可以克隆。由于它们仍然存在,因此它们的得分将与以前相同。这意味着,如果后代没有一个更好的话,那么前几代的获胜者将再次获胜-并重新变异/繁殖。

考虑:以一个祖先个体为字母,例如,A 通过添加数字来定义一个变异的孩子,例如A1,将交叉面包的解决方案写在父母的周围,(A1B2) 并用括号括起来,例如,并写上任何无形的适应性核心-越高越好[12]

为了演示,考虑一个5的池,我们保留最好的2.,并用每个的1个变异填充,再加上一个杂种

第一代

  • A [10]
  • B [5]
  • C [4]
  • D [3]
  • E [1]

保留A,,B因为它们是最好的两个,然后用后代重新填充其他3个位置

第二代

  • A [10]
  • B [5]
  • (AB) [7]
  • A1 [12]
  • B1 [4]

保持A,并且(AB),因为它们是最好的2-这意味着,A由于大多数上班族的工作能力较弱,爷爷将仍然留在游泳池中

第三代

  • A [10]
  • (AB) [12]
  • (A(AB)) [14]
  • A2 [8]
  • (AB)1 [13]

保持(AB)1(A(AB))-这一次没有祖父母维持,作为两个孩子的击败他们。但是,如果(AB1)表现稍差一些,我们将继续保持(AB)

这一直持续到分数稳定下来。这表明您已经达到某种局部最大值(可能是全局最大值)。为什么要检测到这一点,就是如果同一个人继续被“克隆”到下一代。(尽管对于可能需要太长时间的高维问题,所以最好检查一下改进情况<特定公差)


1
“在每一代中,不仅包括最佳元素的出现,还包括最佳元素本身”。这取决于实现方式。有些实现不这样做。这样做有时被称为“精英主义”。
jpmc26

4

通常,遗传算法通过在每一代的亲本上创建许多(随机)变异来起作用。然后应用一些选择功能,根据该功能最适合的后代存活。因此,后代不一定是更好的,因为变异是随机的,但结合选择,随着时间的推移,您会得到改进。


4
嗯,听起来好像这篇文章有些误导。他说:“ 新的,可能很好的儿童有机体取代了贫穷的有机体 ”,这让我感到困惑。我想,如果他将各种生物体的负荷结合起来,那么总体上我们将期待增加,即使个别新生物体可能比以前的生物体弱。那正确吗?谢谢
Avrohom Yisroel

@AvrohomYisroel:是的。
JacquesB

1
@AvrohomYisroel:当心对非专家的大致了解。(还请当心专家的精确“行话墙”。)
埃里克·塔

@EricTowers是的,我明白了!从以前写过的文章来看,我认为他是专家,但是显然他在本文中似乎犯了一些大错误。
Avrohom Yisroel

4

当我在大学学习遗传算法时,解释如下:

想象一个解决方案是“基因”的组合,其中每个基因都会影响整个解决方案的质量。当两个溶液交配时,从每个亲本中随机选择它们的基因。

现在,如果基因通常能带来很好的解决方案,那么它在基因库中的频率就会增加。在极端情况下,该基因将主导种群。

因此,当您考虑遗传算法(通常是进化)时,您不应该考虑个体。您应该考虑整个基因和种群。即使丢失了一个“最佳”解决方案,也并不意味着它的基因就丢失了。

遗传算法中也有精英思想。这意味着,最好的解决方案始终保持世代相传。这可能会加快算法的收敛速度,但算法更容易陷入局部最优状态。


2

GA算法不是确定性的,它们不能保证每一代都得到改进,也不能保证找到总的最优值。但是,使用适应度函数的GA选择阶段使“好的解决方案”得以生存的可能性更大。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.