“适应度”简介

发布于:2025-07-25 ⋅ 阅读:(17) ⋅ 点赞:(0)

前言

提醒:
文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。
其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。

内容由AI辅助生成,仅经笔者审核整理,请甄别食用。


“适应度”用于计算多目标优化问题中个体适应度的公式,特别是在使用非支配排序(Non-dominated Sorting)和共享机制(Sharing Mechanism)时。这个公式综合考虑了个体在目标空间中的非支配等级(rank)和共享小生境计数(nc),以平衡解的收敛性和多样性。

数学公式解释

公式如下:

fitness ( i ) = 1 ( 1 + rank ( i ) ) ⋅ ( 1 + nc ( i ) ) \text{fitness}(i) = \frac{1}{(1+\text{rank}(i)) \cdot (1+\text{nc}(i))} fitness(i)=(1+rank(i))(1+nc(i))1

  • fitness(i):第 i i i 个个体的适应度。数值越大,结果越“优”
  • rank(i):第 i i i 个个体的非支配等级。在非支配排序中,等级越低,表示该个体越优,因为它支配了更多的其他个体。通常,等级为1的个体位于帕累托前沿。数值越小,结果越“优”
  • nc(i):第 i i i 个个体的共享小生境计数,用于衡量个体在其邻域中的拥挤程度。这个值越大,表示该个体周围有更多的相似个体,即该区域更拥挤。数值越小,结果越“优”

公式的作用

  1. 非支配等级(rank):通过 1 + rank ( i ) 1+\text{rank}(i) 1+rank(i) 来调整,等级越低(即越优的解),分母越小,从而适应度越高。这鼓励算法优先选择帕累托前沿上的解。

  2. 共享小生境计数(nc):通过 1 + nc ( i ) 1+\text{nc}(i) 1+nc(i) 来调整,如果一个个体处于一个拥挤的区域(即 nc ( i ) \text{nc}(i) nc(i) 较大),则分母增大,适应度降低,这有助于减少解的聚集,促进种群的多样性。

代码实现

在实际的多目标优化算法中,如NSGA-II(非支配排序遗传算法II),这个适应度计算公式可以这样实现:

def calculate_fitness(population):
    fitness = []
    for i in range(len(population)):
        rank = population[i].rank  # 假设每个个体都有一个rank属性
        nc = population[i].nc      # 假设每个个体都有一个nc属性
        fitness_i = 1 / ((1 + rank) * (1 + nc))
        fitness.append(fitness_i)
    return fitness

在这个代码示例中,我们假设种群中的每个个体都有一个 ranknc 属性,这些属性需要在算法的早期阶段计算得出。然后,我们使用上述公式计算每个个体的适应度,并将这些适应度值存储在列表 fitness 中。这些适应度值可以用于选择操作,以决定哪些个体将被保留到下一代。


网站公告

今日签到

点亮在社区的每一天
去签到