进化计算中的适应度共享和生态位计数是什么?
What are fitness sharing and niche count in evolutionary computation?
在进化计算的上下文中,"fitness sharing"和"niche count"是什么?
随着种群多样性的减少,进化算法 (EA) 倾向于收敛到一个单一的解决方案 [1]。这种行为被称为 遗传漂移 。任何根据种群成员之间的距离保持种群多样性的技术都称为 小生境技术 。
适应度共享是一种小生境,其中每个人的适应度根据其与他人的接近程度进行缩放。这意味着人口稠密地区的良好解决方案比人口稀少地区的相对良好解决方案具有更低的适应值。实际上,该算法的选择技术不太重视这些高质量、高密度的解决方案。可以根据决策 space(基因型)、解决方案 space(表型)或两者(如 Goldberg 和 Richardsen [2]). Distance in genotype is usually defined using the Hamming distance whereas distance in phenotype is usually defined using Euclidean distance.
中的值计算距离。
下面Java方法给出了一个简单的适应度分享方法:
/**
* Computes the shared fitness value for a solution
* @param index the index of the solution for which a shared fitness value will be computed
* @param minDist any solution closer than minDist will share fitness with the current solution
* @param shareParam a parameter that defines how much influence sharing has. Higher = more sharing.
* @param population the array of solutions. Each solution has a genotype and associated fitness value.
*/
public double computeSharedFitnessValue(int index, double minDist, double shareParam, Solution[] population){
double denominator = 1;
for(int j = 0; j < population.length; j++){
final double dist = hamming_dist(population[index],population[j]);
if (dist < minDist){
denominator += (1-(dist/shareParam))
}
}
return population[index].getFitnessValue()/denominator;
}
激励示例:下图完美地说明了为什么适应度共享在多objective问题中如此重要。在图 A(左)中,多样性在整个执行过程中得以保持。因此,解决方案跨越了相当一部分真正的帕累托前沿(此处显示为线框)。在图 B(右)中,人口仅会聚到帕累托前沿的一小块区域。在许多情况下,即使图 B 中的解决方案质量更高,决策者也会更喜欢图 A 中提供的选项的多样性,而不是图 B 的(名义上的)质量改进。
其他资源:
在进化计算的上下文中,"fitness sharing"和"niche count"是什么?
随着种群多样性的减少,进化算法 (EA) 倾向于收敛到一个单一的解决方案 [1]。这种行为被称为 遗传漂移 。任何根据种群成员之间的距离保持种群多样性的技术都称为 小生境技术 。
适应度共享是一种小生境,其中每个人的适应度根据其与他人的接近程度进行缩放。这意味着人口稠密地区的良好解决方案比人口稀少地区的相对良好解决方案具有更低的适应值。实际上,该算法的选择技术不太重视这些高质量、高密度的解决方案。可以根据决策 space(基因型)、解决方案 space(表型)或两者(如 Goldberg 和 Richardsen [2]). Distance in genotype is usually defined using the Hamming distance whereas distance in phenotype is usually defined using Euclidean distance.
中的值计算距离。下面Java方法给出了一个简单的适应度分享方法:
/**
* Computes the shared fitness value for a solution
* @param index the index of the solution for which a shared fitness value will be computed
* @param minDist any solution closer than minDist will share fitness with the current solution
* @param shareParam a parameter that defines how much influence sharing has. Higher = more sharing.
* @param population the array of solutions. Each solution has a genotype and associated fitness value.
*/
public double computeSharedFitnessValue(int index, double minDist, double shareParam, Solution[] population){
double denominator = 1;
for(int j = 0; j < population.length; j++){
final double dist = hamming_dist(population[index],population[j]);
if (dist < minDist){
denominator += (1-(dist/shareParam))
}
}
return population[index].getFitnessValue()/denominator;
}
激励示例:下图完美地说明了为什么适应度共享在多objective问题中如此重要。在图 A(左)中,多样性在整个执行过程中得以保持。因此,解决方案跨越了相当一部分真正的帕累托前沿(此处显示为线框)。在图 B(右)中,人口仅会聚到帕累托前沿的一小块区域。在许多情况下,即使图 B 中的解决方案质量更高,决策者也会更喜欢图 A 中提供的选项的多样性,而不是图 B 的(名义上的)质量改进。
其他资源: