-2

我从人口开始。我还拥有人口中每个人都可以拥有的财产。如果一个人拥有该属性,它的分数会增加 5。如果它没有它,它的分数会增加 0。使用长度作为属性的示例代码:

for x in individual: 
    if len <5:
        score += 5
    if len >=5:
        score += 0

然后我将总分相加并选择我想继续的个人。这是一个适应度函数吗?

4

1 回答 1

0

任何东西都可以是适应度算法,只要它为更好的 DNA 提供更好的分数。您编写的代码看起来像是 DNA 的基因,而不是约束。如果它是一个约束,你会给它一个不断增长的分数惩罚(它是分数的最小化?),这取决于到约束点的距离,以便选择/交叉部分可以优先考虑更接近的 DNA 到 5 以获得更小和更远的值以 5 为更大。但目前它看起来像“任何大于 5 的东西都可以正常工作”,所以即使你应用精英主义,也会有很多随机的解决方案,具有高度的多样性,而不是像 4.9、4.99 等值。

如果有许多变量,如“len”,得分相同,那么一个基因的失败可能会被另一个基因的成功所掩盖。为了阻止这种情况,你可以给他们不同的分数,比如 5,10,20,40,... 这样选择和交叉就可以知道它是否真的取得了进展而没有任何失败。

如果你的意思是 5 的约束,那么你应该告诉选择更接近 5 的“失败”值(即 4、4.5、4.9、4.99)比遥远的值好,通过应用这样的变量分数:

if(gene < constraint_value)
    score += (constraint_value - gene)^2;
// if you've meant to add zero, then don't need to add zero

在评论中,你说分子计算。分子具有浮点坐标和质量,因此如果您正在优化它们,那么如果突变添加到基因的当前值而不是将它们设置为一个完全随机的值。

于 2022-02-04T11:36:49.707 回答