我正在学习遗传算法,当我研究突变时,有些东西我无法弄清楚。在我们通过交叉点产生后代后有点不寻常,我们应该应用突变(小概率)那个小概率是多少?我有关于 8 个皇后问题的图像,我们在这里找到了最佳答案,我们的交叉点是 3,那么为什么例如我们在第一个、第三个和最后一个群体中有突变,但在第二个群体中没有?
很抱歉这个问题可能很愚蠢!
我正在学习遗传算法,当我研究突变时,有些东西我无法弄清楚。在我们通过交叉点产生后代后有点不寻常,我们应该应用突变(小概率)那个小概率是多少?我有关于 8 个皇后问题的图像,我们在这里找到了最佳答案,我们的交叉点是 3,那么为什么例如我们在第一个、第三个和最后一个群体中有突变,但在第二个群体中没有?
很抱歉这个问题可能很愚蠢!
首先,你所说的人口,它实际上只是人口中的一个人。人口是所有个体的整体。
一个好的遗传算法是平衡“探索与探索”的算法。探索试图找出新的解决方案,而不关心它们有多好(因为它们可能会导致一些更好的解决方案)。Exploatation 试图利用算法已经知道的“好的解决方案”。
CROSSOVER = EXPLOATATION 使用crossover,您正在尝试结合最好的个人(健康方面)以产生更好的解决方案
MUTATION = EXPLORATION 使用突变,你试图摆脱你的“基因库”并找出新的解决方案,这些解决方案具有你当前人口中没有的新特征。
话虽如此,平衡它们的最佳方法通常是反复试验。对于某个输入,尝试使用参数并查看它们是如何工作的。
关于为什么第二个个体根本没有变异,仅仅是因为变异个体的概率过程没有选择它。通常,在这类问题上,变异的工作方式如下:
for individual in population do:
for gene in individual:
if random() < MUTATION_RATIO:
mutate(gene)
这意味着一个人可能会遭受不止一种突变。
我对遗传算法的经验是,最佳突变概率取决于算法,有时甚至取决于问题。根据经验:
所以基本上这个问题是无法回答的。根据参数的数量、变异算法和问题(即对参数变化的敏感性),我的百分比从 0.5% 上升到了 8%。还有一些算法可以改变几代人的突变率。
我找到了一种学习和试验突变率的好方法(尽管仅适用于该算法)是这个网站,您可以玩概率并立即看到效果。看着那些小汽车也很沉思。