遗传算法处理负健身值

问题描述 投票:9回答:3

我正在尝试实现遗传算法以最大化n个变量的函数。然而问题是健身值可能是负的,我不确定如何在做选择时处理负值。我读了这篇文章Linear fitness scaling in Genetic Algorithm produces negative fitness values,但我不清楚负面适应度值是如何处理的,以及如何计算比例因子a和b。

另外,从文章中我知道轮盘赌选择仅适用于积极适应值。锦标赛选择也一样吗?

genetic-algorithm
3个回答
6
投票

锦标赛选择不受此问题的影响。它只是比较群体大小为n的均匀采样子集的适应度值,并采用具有最佳值的那个。当然,这意味着,如果您在不重复的情况下进行采样,那么最糟糕的n-1个体将永远不会被选中。如果您重复采样,他们有机会被选中。

与比例选择一样:它不适用于负适应值。您只能对您的健身值应用“窗口”或“缩放”,在这种情况下它们会再次起作用。

我曾经编写过一些sampling methods作为C#的IEnumerable的扩展方法,其中包括SampleProportional和SampleProportionalWithoutRepetition扩展方法。他们是GPL许可下的HeuristicLab的一部分。


8
投票

如果您有负值,您可以尝试在人口中找到最小的适应值,并将其与每个值相加。这样您就不会有负值,而适应值之间的差异将保持不变。


0
投票

好的,现在回答很晚,但仍然有人可以谷歌。

首先 - 是的,你可以使用负面的健身。但我完全建议你不要这样做,因为我已经做到并经历了很多问题(仍然可行,但完全不推荐)。所以这里有解释:

假设您有N个生物的数量。在模拟之后它们都具有一些适应值f(n),其中f(n)是适应度而n是生物数。在此之后你想建立一些概率分布来确定应该杀死哪些生物(当然你可以删除40%的最差生物,但如果你使用分布会更好)。你如何建立这样的分布?假设f(a)= 50,f(b)= 100,那么生物b比生物a好2倍,所以可能你想让生物的生存概率比生物b高2倍(如果你的健康值是​​线性的)。万一你想知道怎么做:

假设sum(f(n))是所有适应度值的总和。那么生物a的生存概率p(a)是:

p(a)= f(a)/ sum(f(n))

这样就可以了。

但现在让我们允许负面的健身。假设f(a)= 50,f(b)= 100,f(c)= -1000。 b再次比a好2倍,但是它比c好10倍?没有意义。上面的绅士建议你添加最差的健身价值,这有点可以“修复”你的情况,但实际上它没有(我之前犯了同样的错误)。好的,让我们为所有健身值添加1000:

f(a)= 1050,f(b)= 1100,f(c)= 0,所以c的生存概率现在为零,好吧,我们可以接受它。但是现在让我们比较a和b:

b比现在好1.05,这意味着a和b的适应性几乎相同,这是完全不可接受的,因为它明显比a好2倍(当然假设适应性是线性的,但这会搞砸非线性拟合度)!你不能逃避这个问题,它会不断地妨碍你,因为概率不能是负面的,所以你要么可以从进化中去除概率(这不是很好的事情),或者你可以做一些例外和招数。

由于在我的场景中为了消除负面的适应性为时已晚,所以这是我的方法来解决问题:

再一次,你有N个生物的数量。假设neg(N)给你所有负面健身生物和pos(N)正面健身生物(这是你的零负面或正面的召唤,在这种情况下无关紧要)。让我们说你需要D生物去死。而现在这就是诀窍:

较高的f(c)(c是pos生物)值,生物越好,所以我们可以利用它的适应度来确定生存的概率。但是较低的(较大的负数)f(m)(m是负生物),生物较差的生物,所以我们可以利用它的适应性来确定死亡的概率。

现在,如果D> neg(N)则所有neg(N)将死亡,并且pos(N)的(D-neg(N))将使用基于所有正生物健康的概率分布而死亡(生存概率p) (a)= f(a)/ sum(pos(n)))。但是如果D <neg(N),则所有pos(N)将存活,并且neg(N)生物的D将使用基于所有负面生物适应性的概率分布而死亡(死亡的概率p(a)= f( a)/ sum(neg(n))(f(a)将为负,但sum(neg(n))也将为负,因此概率为正)。

© www.soinside.com 2019 - 2024. All rights reserved.