我已经开始实施自己的遗传算法,我正处于决定如何为新一代选择父母的阶段。我做了一些阅读,似乎有很多不同的方法可以解决它。
我知道各种选择技巧(锦标赛,轮盘赌),但我似乎无法找到的信息是应该选择多少父母。
我将要处理的初始人口规模将在50-75个人之间。我在考虑为下一代选择一半的人口,所以每一代人口减少一半,不确定这是否是最好的途径。
任何建议都会很棒。
答案 0 :(得分:4)
我参加了遗传算法课程,作为我硕士学位课程的一部分。
正如@et_l正确地说的那样,每次迭代的人口一般应该是相同的大小,所以你想要每一代的解决方案越来越少(如你所说的那样减少一半的人口数)是没有意义的。人口50-75也很小。我建议在你的人群中至少有100个解决方案。
选择多少家长完全取决于您。您可以选择您的整个人口,或只选择少数人口。父母的数量通常只会影响您的人口汇聚到单一解决方案的速度。通常,选择的父母越少,收敛的越快。
现在说(例如)你选择100人口的十大解决方案作为你下一代的父母。你杀死了其他90个人口并保持前10名。(请注意,你杀死的人数也存在差异,这并不总是需要成为你的人口的一部分而不是进入顶部并成为父母。)
接下来,您将10个父母组合在一起,创建新的解决方案。有很多方法可以结合起来。在这一步,重要的是让你的人口回到你的人口的初始大小,即100.你可以选择让你的10个父母留在你的新一代,或杀死他们,并拥有一个完全由100个孩子组成的人口10个父母的总和,而不是10个父母的人口+ 90个孩子。
或者,您现在还可以对新群体执行一些变异,以获得更多种类的解决方案。你是否这样做完全取决于你,我建议你试验一下,看看这会产生什么样的影响。如果您选择包含突变,通常只有一小部分人口会发生变异。
最后你有新的人口,如果你愿意,你可以开始另一次迭代。继续进行迭代,直到获得满意的解决方案。
我希望我已经明确表示有很多方法可以实现遗传算法,需要进行一些实验才能找出最适合您特定问题的实现方法。
答案 1 :(得分:1)
我没有使用遗传算法的经验,但是阅读[维基百科页面](https://en.m.wikipedia.org/wiki/Genetic_algorithm)我可以看到每次迭代时群体的大小通常应该相同。这里提到的终止条件包括固定数量的迭代和一代中最佳解(个体)适应度的最小值。从理论上讲,你应该能够继续迭代,在你达到终止条件之前再多生一代。
考虑到这种理解,您现在可以计算生成新一代所需的父母数量。请注意,您正在使用遗传算子(通常是交叉和突变及其组合)从上一代选择父 生成新的生成。您不会将选定的个体本身用作新一代,因为这不会导致解决方案的演变。因此,要计算所需父母的数量,您需要确定您使用多少父母来生成一个孩子("经典"方法将是2,但这不是必需的)。通常情况下,您不会使用相同的父母组(夫妻)来创建多个孩子。但我猜测(因为在wiki页面中没有提到)你会在几个不同的组(夫妻)中使用特定的父母来创建不同的孩子。您可能也没有为每个创建的子项创建一定数量的父项(例如,使用突变,您只能为一个孩子使用一个父项)。
假设您为每个孩子准确使用了2个父母,您不是多次使用同一对夫妇,而是在多对夫妇中使用每个父母生成多个孩子。要制作大小为y
的人口,您需要选择x个父母,以便(x choose 2) = (x!)/(2!(x-2)!) = (x•(x-1)/2) = (1/2)(x^2 - x)
大于或等于y
。用您所需的人口规模替换y
并求解x
。
我注意到的另一个相关的事情是,在他们写的维基页面中,通常选择的人口规模是数百或数千,所以你选择的50-75的大小似乎非常小。
答案 2 :(得分:1)
每一代人都在选择N个父母(无论你认为合适。最好的数字取决于问题.2是通常的),越过它们,改变孩子(只有百分之几的机会),并替换一些人口与他们(这是保持人口规模的常见做法)。你要的是最后一个。
一个简单的策略是用每一代cicle代替整个人口。另一个只能替代N个最差的人。其他可能是N个随机个体...