You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为最大化目标函数的遗传算法实现排名选择算子

遗传算法排名选择函数实现方案

核心逻辑梳理

排名选择的核心是基于个体适应度的排名分配选择权重,而非直接使用适应度数值。针对你的最大化目标函数场景:

  • 先将所有个体按适应度从低到高排序
  • 给排名第k位(从1开始计数,最差个体排第1)的个体分配权重k,所有个体的权重总和为 ( S = \frac{N(N+1)}{2} )(N为种群规模)
  • 每个个体的选择概率为 ( \frac{k}{S} ),适应度越高的个体排名越靠前,被选中的概率越大

具体实现代码

假设你的种群是由(x二进制编码, y二进制编码)组成的列表,适应度列表是对应每个个体的适应度计算结果,以下是rank_selection()的实现:

import random

def rank_selection(population, fitness_list):
    # 将个体与对应适应度配对,避免排序后错位
    paired_individuals = list(zip(population, fitness_list))
    # 按适应度升序排序(最差个体排第1位)
    sorted_pairs = sorted(paired_individuals, key=lambda x: x[1])
    # 计算权重总和(等差数列求和)
    population_size = len(population)
    total_weight = population_size * (population_size + 1) // 2
    # 生成每个个体的选择概率
    selection_probs = [rank / total_weight for rank in range(1, population_size + 1)]
    # 基于概率选择个体,返回与原种群规模一致的新种群
    selected_pop = random.choices([pair[0] for pair in sorted_pairs], weights=selection_probs, k=population_size)
    return selected_pop

适配你的算法调用

直接传入已生成的种群和get_fitness计算出的适应度列表即可:

# 假设已获取种群population和对应的适应度列表fitness_values
new_population = rank_selection(population, fitness_values)

内容的提问来源于stack exchange,提问作者Gabriel Schumacher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:15:36