好的,回复晚了,不过还是有人可以google一下。
首先 - 是的,您可以使用负适应度。但是我完全不建议你这样做,因为我已经这样做了并且遇到了很多问题(仍然可行,但完全不推荐)。所以这里是解释:
假设你有 N 个生物种群。经过模拟,它们都有一些适应度值 f(n),其中 f(n) 是适应度,n 是生物数量。在此之后,您想要建立一些概率分布来确定应该杀死哪些生物(当然您可以删除 40% 的最差生物,但如果您使用分布会更好)。你如何建立这样的分布?假设 f(a) = 50 和 f(b) = 100,所以生物 b 比生物 a 好 2 倍,所以你可能想要
生物 a 的生存概率是生物 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 现在比 a 好 1.05,这意味着 a 和 b 的适应度几乎相同,这是完全不能接受的,因为它显然比 a 好 2 倍(当然是假设适应度是线性的,但这也会弄乱非线性适应度)!你无法逃避这个问题,它会不断地妨碍你,因为概率不可能是负数,所以你可以从进化中移除概率(这不是很好的事情)或者你可以做一些例外和技巧。
由于在我的场景中消除负面适应度为时已晚,因此这是我解决问题的方法:
再一次,你有 N 个生物的种群。假设 neg(N) 给你所有负适应度生物和 pos(N) 正适应度生物(在这种情况下,你可以调用零负或正值)。假设你需要 D 个生物去死。现在这是诀窍:
f( c ) ( c 是 pos 生物) 值越高,生物越好,所以我们可以用它的适应度来确定生存的概率。但是 f( m ) 越低(负数越大)(m 是 neg 生物),生物越差,所以我们可以使用它的适应度来确定死亡的概率。
现在,如果 D > neg(N) 则所有 neg(N) 都会死亡,并且 pos(N) 的 (D-neg(N)) 将使用基于所有正生物适应度(probability生存率 p(a) = f(a) / sum( pos(n) ) )。但是如果 D dying 的概率),neg(N) 中的 D 个生物将死亡p(a) = f(a) / sum( neg(n) ) (f(a) 为负,但 sum( neg(n) ) 也为负,因此概率为正)。