【发布时间】:2021-12-19 19:12:39
【问题描述】:
我并不完全熟悉所有术语,因此请原谅这部分的任何错误。我决定编写一个程序,使用进化 (?) 算法将随机字符串转换为目标字符串。
它工作正常,但我注意到一些我不明白的东西。如果我使用“无性”繁殖,即每个字符串克隆自身,然后以一定的概率发生变异,则解决方案的收敛速度要慢得多,有时根本不收敛,但会被困在说平均适合度约为 0.8。这对我来说没有意义,因为突变应该使它趋于最优,对吧?
但是,如果我改为使用交叉,例如我选择两个父母并进行字符的统一混合,然后像正常情况一样以一定的概率对孩子进行变异,收敛不仅实际上得到保证,而且速度也快数量级。我认为这不能仅仅通过孩子“变异更多”这一事实来解释,因为它的父母在上一代也发生了变异。
有人可以解释一下交叉的作用,以及为什么它可以在诸如此类的算法中实现更快的收敛吗?
【问题讨论】: