【发布时间】: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;
}
【问题讨论】:
-
也许 H-IFF 对您有用(见第 5 页):pdfs.semanticscholar.org/14b9/…