我正在为我的ai
课程中的一个项目研究遗传算法,但是我有些困惑于似乎是传统算法的东西。
基本上,我想知道为什么他们使用不同的选择方法,比如轮盘赌来选择父母进行繁殖。为什么不选择具有最佳适应度得分的父母并结束呢?
此外,交叉也让我感到困惑。它每次随机选择点来拼接父代信息。但是如果交叉基于以前的信息进行更改,那么似乎更有意义。如果某个染色体字符串已知在某一点之前很好,那么交叉仍然可以是随机的,但不在字符串的好部分范围内。
你有什么想法吗?
我正在为我的ai
课程中的一个项目研究遗传算法,但是我有些困惑于似乎是传统算法的东西。
基本上,我想知道为什么他们使用不同的选择方法,比如轮盘赌来选择父母进行繁殖。为什么不选择具有最佳适应度得分的父母并结束呢?
此外,交叉也让我感到困惑。它每次随机选择点来拼接父代信息。但是如果交叉基于以前的信息进行更改,那么似乎更有意义。如果某个染色体字符串已知在某一点之前很好,那么交叉仍然可以是随机的,但不在字符串的好部分范围内。
你有什么想法吗?
如果你只选择最好的父代,那么你得到的就是爬山算法。爬山算法能够很好地工作,但是一般来说,问题越难,你就越有可能陷入一个无法进一步取得进展的局面。
一般来说,问题越难,这种局部最优解就越多。除了选择最好的个体之外,选择其他个体可以保持种群的多样性:解在搜索空间更广泛地分布,如果一个部分的种群陷入局部最优解,另一个部分的种群仍然可以取得进展。
现代遗传算法通常会花费大量精力来保持种群的多样性,以防止过早收敛。其中一种技术是适应度共享。另一种简单的方法是将种群划分为不同的物种,使不同物种的个体无法(或极少)相互繁殖。
交叉试图在由突变引起的个体之间分配基因组的好部分。如果能够只交换基因组的好部分,那就太好了,这种尝试也已经有人做过;例如,可以查看每个基因,并测量拥有该基因的个体的平均适应度。
但是,这样做有两个主要问题:
它计算成本高。
基因组可能存在相互依赖性。也许基因A根据你的指标看起来很好,但基因B却不好,所以你将其排除。然而,在现实中,基因A没有基因B存在可能就不起作用。
不选择最佳方案 => 因为否则你很可能会陷入局部最优解。出于类似的原因,轮盘赌选择已经过时了,时髦的孩子们使用基于排名的选择(按适应度对后代进行排序并保留最好的1/10,参见“进化策略”)。轮盘赌选择,又称适应度比例选择,在适应度尺度不是非常规则时效果不佳,在实践中它几乎从来没有是规则的。
交叉 => 进化策略只使用变异,没有交叉也完全可以。交叉假设您的目标函数可以被整洁地分解成几个部分,而交叉将找到这些部分。在大多数基因型中,基因型的各个部分以高度非线性的方式相关联。这是非常幼稚的,只在玩具问题上才是真实的。如果您没有严肃的理由使用交叉算子,请不要使用,奥卡姆剃刀和所有其他原则都是如此。
交叉后替换物种怎么样?
我使用轮盘赌选择方法选择繁殖物种。我的交叉率为0.7(70%),但实际上我不知道这意味着什么。这是指我选择70对父母,交叉并用新的两个替换池中最差的两个吗?还是它意味着我选择70/2 = 35对父母,交叉并用最差的那些替换它们?
我真的不知道你用什么物种替换新孩子?如果孩子的适应度比池中最差的两个还要差怎么办?请解释使用轮盘赌比例选择方法的替换过程。
我认为DataWraith回答了这个问题。关于交叉,我只想补充一点,John Holland认为GA通过随机交叉和选择隐式地计算每个染色体子串(“模式”)的适应度,而不是显式地计算它,这将非常耗时(正如DataWraith所说)。Holland称这个过程为“隐式并行性”。
-Ted