1

我在理解进化算法时遇到了问题。我多次尝试使用这种技术,但我总是遇到同样的问题:退化为模拟退火。

可以说我的初始人口(括号中的健身)是:

A (7), B (9), C (14), D (19)

交配和突变后,我有以下孩子:

AB (8.3), AC (12.2), AD (14.1), BC(11), BD (14.7), CD (17)

在消除最弱的之后,我们得到

甲,乙,乙,交流

下一回合,AB 将再次配对,结果约为 8,将 AC 推出。下一轮,AB 再次将 B 推出(假设突变改变适应度主要在 >1 范围内)。

现在,仅仅几圈之后,池中就充满了最初最适合的候选者(A,B)和这两个的突变(AB)。无论初始池的大小如何,都会发生这种情况,只是需要更长的时间。比如说,初始人口为 50,需要 50 个回合,然后所有其他人都被淘汰,从而将整个设置转变为更复杂的模拟退火。一开始我也和自己交配了候选人,使问题恶化。

那么,我想念什么?我的突变率是不是太小了,如果我增加它们会消失吗?

这是我使用它的项目: http ://stefan.schallerl.com/simuan-grid-grad/ 是的,代码有问题,界面很糟糕,但我现在懒得修复它 - 和小心,它可能会锁定您的浏览器。更好地使用 chrome,即使认为 firefox 一次也不比 chrome 慢(可能图像比较的跟踪得到了回报,耶!)。如果有人感兴趣,可以在这里找到代码

在这里,我只是放弃了 ev-alg 的想法并进行了模拟退火。

ps:我什至不确定模拟退火——它就像进化算法,只是人口规模为 1,对吧?

4

2 回答 2

3

你似乎在做的是产生所有可能的后代,然后选择最合适的。这既是低效的(因为你生成的候选者比你需要的多)并且会导致过早收敛。

相反,您应该产生足够的后代来替代下一代的人口。选择适当数量的候选人作为父母(偏爱更健康的个体),然后如果您保留后代并丢弃父母,您应该拥有与您开始时相同数量的个体(暂时忽略精英主义)-这是您的下一代。重复直到满足终止条件。

前一段中的“优胜劣汰”资格故意含糊其辞。您可以通过多种不同的方式进行选择。看来您正在选择最适合的个体。这是截断选择。它只对某些类型的问题真正有效。因为你无情地剔除较弱的个体,它通常会导致过早收敛。

理想情况下,您希望给较弱的个体一些生存机会,因为如果与正确的伴侣配对或以正确的方式突变,它可能会产生健康的后代。这就是为什么大多数选择策略都是概率性的。例如,轮盘赌选择为每个人分配一个与其适应度分数成比例的概率。所以更健康的人会更频繁地生存,但弱者仍然有一些小机会。

选择通常是有替换的,因此同一个人可能会在给定的一代中多次被选为父母。

另一种常用的选择策略是锦标赛选择。您可能对我编写的描述不同选择策略和精英主义的文档感兴趣。

于 2010-02-17T22:31:41.683 回答
1

在进化算法中,您不必将种群中的每个人与其他人交叉以产生更大的后代集。确定繁殖阶段结果的方法有很多,但最基本的是取所有元素的适应度,并以它们为权重,为种群中的每个成员随机选择伙伴。这通常会导致下一代拥有与前一代相同数量的成员,尽管一些交配计划最终会更多(基于对手头问题的某种推理)并砍掉最低值(再次针对某种领域特定推理)。对于大多数问题,您还抛弃了上一代。

此外,您的适应度需要由繁殖目标来确定,并且对于每种情况充分推导可能非常具有挑战性。

于 2010-02-17T21:00:50.090 回答