2017-03-23 45 views
0

我已经开始实现自己的遗传算法,并且正处于决定如何为新一代选择父母的阶段。我已经做了一些阅读,似乎有很多不同的方式去做。从人群中选择多少个人? (遗传算法)

我知道各种选择技巧(比赛,轮盘赌),但我似乎无法找到的信息正好是应该选择多少个父母。

初始人口规模,我会处理的将是50-75个人之间的任何地方。我想也许是为下一代选择了一半的人口,所以每一代人口减少了一半,不知道这是否是最好的途径。

任何建议将是伟大的。

+1

决定有多少父母选择遗传算法听起来像是一个更好的问题http://ai.stackexchange.com/。目前你似乎没有任何问题来实现你的算法,如果你这样做,请编辑你的问题,使其更清晰。 – PJvG

+2

最有效的人口在很大程度上取决于问题和算法。有效的人口规模可以通过实验找到。你也可以实例化你的算法的多个版本,使用不同的人口规模(两个作品的性能很好),并行运行它们。 – martijnn2008

回答

2

我作为硕士学位研究的一部分参加了遗传算法课程。

正如@et_l所说的,每个迭代中人口的大小通常应该是相同的大小,所以没有任何意义的是,每一代人需要的解决方案越来越少(如你所说,将人口减少一半)。 50-75人口也很小。我建议你的人口至少有100个解决方案。

有多少家长选择完全取决于你。你可以选择你的全部人口,或只有少数。父母的数量通常只影响你的人口会多快地收敛到一个单一的解决方案。通常,你选择的父母越少,你收敛的速度越快。

现在说(举个例子)你选择100人口的前10位解决方案作为下一代的父母。你杀了其他90人,并保持前10名。(注意,你也杀了多少人,这并不总是需要成为你的人口中没有达到顶峰的那部分并成为父母)。

接下来,您将结合您的10位家长创建新解决方案。有很多方法可以结合。在这一步,重要的是让你的人口恢复到你的人口的初始规模,这是100人。你可以选择让你的10位父母留在你的新一代,或杀死他们,并有一个完全由100个孩子组成的人口由10位家长组成,而不是由10位家长+ 90位儿童组成。

或者,您现在也可以在您的新人群中执行一些突变以获得更多种类的解决方案。无论你是否完全由你自己决定,我建议试试看看这可能会产生什么样的影响。如果您选择包含突变,通常只有一小部分人群会发生突变。

最后你有你的新的人口,如果你喜欢,你可以开始另一个迭代。继续做迭代,直到你得到满意的解决方案。

我希望我已经清楚地知道有很多方法来实现遗传算法,并且需要一些实验来找出哪些实现最适合您的具体问题。

+0

感谢您的回复,为我清除了很多东西:) – samcp20

1

我没有遗传算法的经验,但阅读[Wikipedia page](https://en.m.wikipedia.org/wiki/Genetic_algorithm)我可以看到,每个迭代的人口通常应该是相同的大小。在那里提到的终止条件包括固定次数的迭代和适合一代中最佳解决方案(个人)的最小值。理论上你应该能够继续迭代,使更多的世代更多,直到你满足终止条件。

考虑到这种理解,你现在可以用计算你需要多少父母才能生成新一代。请注意,您是从上一代的选择父母产生使用遗传算新的一个(通常是个交叉和突变以及它们的组合)。您不会将自己选定的个人用作新一代,因为这会导致解决方案无法发展。因此,要计算需要的父母数量,您需要确定您有多少父母用于生成一个孩子(“经典”方法为2,但这不是必需的)。通常情况下,你不会使用同一组(夫妻)的父母创建多个孩子。但我猜测(因为在维基页面中没有提到)你会在几个不同的组(夫妻)中使用特定的父母来创建不同的孩子。对于每个创建的孩子,您可能也没有固定数量的父母(例如,对于一个孩子,只能使用一个父母)。

让我们假设你正在使用完全相同2家长为每个孩子,你是不是使用同一对夫妇多次,但使用的是在多夫妇每个父生成多个孩子。要创建大小为y的人口,您需要选择x父母,以使(x choose 2) = (x!)/(2!(x-2)!) = (x•(x-1)/2) = (1/2)(x^2 - x)大于或等于y。用您要求的人口数量替代y并解决x

一个我注意到更多相关的事情,就是在wiki页面他们写道,通常选择的人口规模在数百或数千,所以50-75您选择的尺寸显得非常小。

1

每一代cicle在于选择父母的N多(不管你认为合适的。最好的数量取决于问题2是通常的),十字交叉,变异的孩子(只有一%的机会),并替代一些人口与他们(这是一个普遍的做法,以维持人口的规模)。你要求最后一个。

一个简单的策略是替代整个人口每一代cicle。另一个只能取代N个最差的个体。其他可能有N个随机个体......