【问题标题】:Deceptive landscapes for a Genetic Algorithm遗传算法的欺骗性景观
【发布时间】:2018-03-27 09:35:41
【问题描述】:

我目前正在做一个关于遗传算法的项目,以及是什么让它们难以解决。对于这个项目,我需要生成一组二进制字符串并获取每个人的适应度。

适应度函数应该给出一个全 1 的字符串是最佳适应值,一个全 0 的字符串是次优值,然后如果有更多的 1,0 和 1 的任何变化都应该返回更差的值(除非全 1 ) 和更好的值,更多的零。

我的项目要求我将 GA 的性能与二进制字母表与十进制字母表进行比较。对于十进制字母表,我能够通过为每个数字分配权重来创建一个欺骗性的适应度函数,9 是最好的,8 是最差的,当你达到 0 时,值会增加。这导致 GA 远离提供欺骗性景观的最佳解决方案。

如果您对二元欺骗性适应度函数有任何建议,那就太好了。我已经包含了十进制字母的适应度函数:

public float getFitness(){
    fitness= 0.00f;
    for(int j =0;j<genes.length;j++){
        if(genes[j]==9){
            fitness+=.901;
        }else{
            fitness=(fitness+(1-(genes[j]+1)*.100f));
        }
    }       

    fitness = fitness/genes.length;
    fitness = Math.round(fitness *10000.0f)/10000.0f; 

    return fitness;
}

【问题讨论】:

标签: java genetic-algorithm


【解决方案1】:

如果将适应度值分配给符号组而不是单个符号,则可以使用二进制字母表实现相同的目的。

例如,使用 3 个符号组成的组可以为您提供 2^3=8 个值,因此您用于字母 0-9 的相同想法也适用于此。

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多