遗传算法中的轮盘赌选择法(Roulette Wheel Selection)

一、核心思想

  1. 每个个体适应度越高 ,分到的选择概率越大
  2. 把所有个体适应度拼成一个轮盘
  3. 随机转轮盘,指针落到哪个区间,就选中哪个个体;
  4. 概率 = 个体适应度 / 种群总适应度。

二、数学公式

设种群有 (N) 个个体,第 (i) 个个体适应度为 (f_i)

  1. 种群总适应度:

    F = \\sum_{i=1}\^N f_i

  2. 第 (i) 个个体被选中的概率:

    p_i = \\frac{f_i}{F}

  3. 累积概率(构造轮盘区间):

    P_i = \\sum_{k=1}\^i p_k


三、实现步骤(一步步流程)

  1. 计算种群每个个体适应度 (f_i)
  2. 总适应度 (F)
  3. 算每个个体选择概率 (p_i)
  4. 计算累积概率 (P_i),形成分段区间
  5. 生成一个 0~1 随机数 r
  6. 判断 r 落在哪个累积概率区间,对应个体被选中
  7. 重复多次,选出新种群

四、举个极简例子

种群4个个体,适应度:

(f_1=5,\ f_2=10,\ f_3=3,\ f_4=12)

总适应度 (F = 30)

概率:

  • (p_1 = 5/30 \approx 0.1667)
  • (p_2 = 10/30 \approx 0.3333)
  • (p_3 = 3/30 = 0.1)
  • (p_4 = 12/30 = 0.4)

累积概率:

  • (P_1 = 0.1667)
  • (P_2 = 0.5)
  • (P_3 = 0.6)
  • (P_4 = 1.0)

随机数举例:

  • 若 (r=0.2):在 (0.1667, 0.5) → 选个体2
  • 若 (r=0.7):在 (0.6, 1.0) → 选个体4

适应度越高,占区间越大,被选中概率越高。


五、Python 完整可运行代码实现

python 复制代码
import random
import numpy as np

# 轮盘赌概率分配选择法
def roulette_selection(population, fitness):
    # 1. 总适应度
    total_fit = sum(fitness)
    # 2. 每个个体选择概率
    prob = [f / total_fit for f in fitness]
    # 3. 累积概率
    cum_prob = np.cumsum(prob)
    
    # 4. 随机0~1,选择个体
    r = random.random()
    for i in range(len(cum_prob)):
        if r <= cum_prob[i]:
            return population[i]

# 测试
if __name__ == "__main__":
    pop = ['个体1','个体2','个体3','个体4']
    fit = [5, 10, 3, 12]
    selected = roulette_selection(pop, fit)
    print("本次选中个体:", selected)

六、关键特点 & 缺点

✅ 优点:

  • 完全按适应度概率分配,优胜劣汰直观
  • 实现简单、经典易懂

❌ 缺点:

  • 容易早熟收敛:超级优秀个体霸占轮盘,很快垄断种群
  • 适应度接近时,选择差异不大

👉 改进:排序选择、锦标赛选择(教学里常用轮盘赌作为基础原理)。


相关推荐
冬奇Lab几秒前
每日一个开源项目(第135篇):codebase-memory-mcp - 给 AI Agent 一张代码库的知识图谱
人工智能·开源·llm
IT_陈寒3 小时前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端
jooloo6 小时前
Codex 间歇性 400 之谜:一条对话里,它为什么有时候用 chat/completions,有时候切到 responses?
人工智能
用户5191495848457 小时前
OpenSSL PKCS#12 PBMAC1 堆栈缓冲区溢出漏洞 (CVE-2025-11187) 分析与验证
人工智能·aigc
用户5191495848458 小时前
HP Sound Research SECOMNService 权限提升漏洞利用工具
人工智能·aigc
用户018349301698 小时前
给 AI 智能体能力包一层 BFF,前端只调一个接口
人工智能
这token有力气11 小时前
Function Calling 格式漂移
人工智能
onething36511 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 5 —— SSE 流式输出 + 打字机效果
人工智能·后端·全栈
onething36512 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 6 —— 业务完善 + 会话消息预览
人工智能·后端·全栈