【模式识别与机器学习(6)】主要算法与技术(下篇:高级模型与集成方法)之进化计算(Evolutionary Computation)

文章目录

一、考试范围知识框架

  • 进化计算框架
  • 遗传算法(Genetic Algorithm)
  • 进化策略与进化规划
  • 遗传算法基本流程

可能考查的问题

  • 遗传算法的基本流程和操作
  • 遗传算法与进化策略的区别
  • 适应度函数的设计

二、正文内容

1. 进化计算框架

关键词:进化策略、进化规划、遗传算法、群体演化、适应度函数

什么是进化计算?

进化计算(Evolutionary Computation)是一种受生物进化过程启发的优化算法。简单来说,就是模拟"物竞天择,适者生存"的过程来寻找问题的最优解。

核心思想 :就像生物进化一样,通过选择、交叉、变异等操作,让"优秀"的个体(解)更可能生存和繁殖,经过多代演化,种群中的个体越来越优秀,最终找到问题的最优解或近似最优解。

生活例子:就像培育新品种的植物:选择最好的植株,让它们杂交,偶尔发生变异,经过多代培育,得到更好的品种。

进化计算的发展历史
  • 20世纪50年代:进化计算研究开始
  • 20世纪60年代 :Rechenberg提出进化策略(Evolution Strategies, ES) ,用于优化实值函数;Fogel、Owens和Walsh提出进化规划(Evolution Programming),将问题描述成有限状态机
  • 20世纪70年代 :Holland提出遗传算法(Genetic Algorithms, GA)

这三种方法构成了进化计算的主要框架。

基本概念

1. 个体和染色体

  • 个体:问题的一个潜在解
  • 染色体 :个体的编码表示,由一系列基因组成的基因串
  • 基因:染色体上的一个位置,表示解的一个组成部分

例子 :如果我们要优化一个函数 f ( x 1 , x 2 ) f(x_1, x_2) f(x1,x2)

  • 个体: ( x 1 , x 2 ) = ( 3.5 , 2.1 ) (x_1, x_2) = (3.5, 2.1) (x1,x2)=(3.5,2.1)(一个解)
  • 染色体:可能是二进制编码 11010101 或实数编码 [3.5, 2.1]
  • 基因:染色体上的每一位或每个数值

2. 种群

  • 种群:由多个个体组成的集合
  • 一代:当前的所有个体
  • 演化:从一代到下一代的进化过程

3. 适应度函数

  • 适应度函数:衡量个体"好坏"的函数
  • 适应度越高,个体越优秀,越可能被选中繁殖
  • 通常就是我们要优化的目标函数(或目标函数的某种变换)

例子 :优化函数 f ( x ) = x 2 f(x) = x^2 f(x)=x2

  • 个体 x = 5 x = 5 x=5 的适应度: f ( 5 ) = 25 f(5) = 25 f(5)=25
  • 个体 x = 3 x = 3 x=3 的适应度: f ( 3 ) = 9 f(3) = 9 f(3)=9
  • 如果我们要最大化 f ( x ) f(x) f(x),则 x = 5 x = 5 x=5 更优秀
进化过程

进化计算通过以下步骤完成一代的进化:

  1. 选择(Selection):根据适应度选择优秀的个体作为父代
  2. 交叉(Crossover):父代个体交换基因,生成子代
  3. 变异(Mutation):子代个体的某些基因发生随机变化
  4. 评估(Evaluation):计算新个体的适应度
  5. 生存选择(Survival Selection):从父代和子代中选择个体形成新一代种群

形象比喻选择 是挑选优秀的父母;交叉 是父母基因重组,生出孩子;变异 是孩子发生基因突变;评估 是测试孩子的能力;生存选择是让优秀的孩子和父母一起进入下一代。

经过多代演化,种群中的个体越来越适应环境(越来越接近最优解)。

2. 遗传算法(Genetic Algorithm)

关键词:染色体编码、初始种群、适应度函数、选择、交叉、变异

什么是遗传算法?

遗传算法(Genetic Algorithm, GA)是进化计算中最常用的方法,模拟生物遗传和进化的过程来求解优化问题。

核心特点:不需要问题的梯度信息(适用于不可导函数);可以处理离散和连续优化问题;有概率跳出局部最优,找到全局最优;适用于复杂的、多峰值的优化问题。

遗传算法的五个要素

应用遗传算法解决某个具体问题,需要定义或选择五个成分:

1. 编码方案(Chromosome Encoding)

如何将问题的解编码成染色体。常见编码:二进制编码、实数编码、排列编码等。

例子 :优化函数 f ( x ) f(x) f(x), x ∈ [ 0 , 10 ] x \in [0, 10] x∈[0,10]

  • 二进制编码:用8位二进制表示,如 10110101 表示 x = 181 / 255 × 10 ≈ 7.1 x = 181/255 \times 10 \approx 7.1 x=181/255×10≈7.1
  • 实数编码:直接使用 x x x 的值,如 [7.1]

2. 初始种群生成

如何生成第一代个体。通常随机生成,保证多样性。

例子:生成10个随机个体

  • 二进制编码:随机生成10个8位二进制串
  • 实数编码:在 [ 0 , 10 ] [0, 10] [0,10] 范围内随机生成10个值

3. 适应度函数(Fitness Function)

如何评估个体的好坏。通常就是目标函数(最大化问题)或目标函数的倒数(最小化问题)。

例子 :最大化 f ( x ) = x 2 f(x) = x^2 f(x)=x2

  • 适应度函数: F ( x ) = x 2 F(x) = x^2 F(x)=x2
  • 个体 x = 5 x = 5 x=5 的适应度: F ( 5 ) = 25 F(5) = 25 F(5)=25
  • 个体 x = 3 x = 3 x=3 的适应度: F ( 3 ) = 9 F(3) = 9 F(3)=9

4. 遗传操作(Genetic Operators)

  • 选择(Selection):如何选择父代个体
  • 交叉(Crossover):如何生成子代
  • 变异(Mutation):如何引入随机变化

5. 参数设置

  • 种群大小(通常20-200)
  • 交叉概率(通常0.6-0.9)
  • 变异概率(通常0.001-0.1)
  • 最大迭代次数
遗传算法的基本流程

算法步骤

  1. 初始化 :随机生成初始种群 P ( 0 ) P(0) P(0), t = 0 t = 0 t=0
  2. 评估 :计算种群 P ( t ) P(t) P(t) 中每个个体的适应度
  3. 重复以下过程直到满足终止条件
    • 选择:根据适应度选择父代个体
    • 交叉:父代个体交叉,生成子代
    • 变异:子代个体发生变异
    • 评估:计算子代的适应度
    • 生存选择 :从父代和子代中选择个体形成新一代种群 P ( t + 1 ) P(t+1) P(t+1)
    • t = t + 1 t = t + 1 t=t+1

终止条件:达到最大迭代次数;找到满足要求的解;种群适应度不再提升。

算法流程图
是 否 开始 初始化种群P0, t=0 评估种群Pt中每个个体的适应度 满足终止条件? 输出最优解 选择父代个体 交叉操作生成子代 变异操作 评估子代适应度 生存选择,形成新一代种群Pt+1 t = t+1

例子:优化函数 f ( x ) = x 2 f(x) = x^2 f(x)=x2, x ∈ [ 0 , 10 ] x \in [0, 10] x∈[0,10]

假设使用二进制编码,种群大小为4:

  1. 初始化:随机生成4个8位二进制串

    • 个体1:01010101 → x 1 ≈ 3.3 x_1 \approx 3.3 x1≈3.3,适应度 f ( x 1 ) ≈ 10.9 f(x_1) \approx 10.9 f(x1)≈10.9
    • 个体2:10101010 → x 2 ≈ 6.7 x_2 \approx 6.7 x2≈6.7,适应度 f ( x 2 ) ≈ 44.9 f(x_2) \approx 44.9 f(x2)≈44.9
    • 个体3:11110000 → x 3 ≈ 9.4 x_3 \approx 9.4 x3≈9.4,适应度 f ( x 3 ) ≈ 88.4 f(x_3) \approx 88.4 f(x3)≈88.4
    • 个体4:00001111 → x 4 ≈ 0.6 x_4 \approx 0.6 x4≈0.6,适应度 f ( x 4 ) ≈ 0.4 f(x_4) \approx 0.4 f(x4)≈0.4
  2. 选择:选择适应度高的个体作为父代(如个体2和个体3)

  3. 交叉:父代交换部分基因,生成子代

  4. 变异:子代随机改变某些位

  5. 评估和选择:计算新个体的适应度,选择优秀的进入下一代

  6. 重复 :经过多代演化,种群中的个体越来越接近最优解 x = 10 x = 10 x=10

3. 遗传操作

关键词:交叉、变异、染色体重组、防止局部最优

交叉操作(Crossover)

核心思想:从父母染色体中选择基因来生成新的子代,就像生物的有性繁殖。

单点交叉(One-Point Crossover):最简单的方式:随机选择一个交叉点,将父母基因链在交叉点切开,并交换其后半部分。

例子

假设有两个父代个体(二进制编码):

  • 父代1:1010|1010(交叉点在中间)
  • 父代2:0101|0101

交叉后生成两个子代:

  • 子代1:1010|0101(父代1的前半部分 + 父代2的后半部分)
  • 子代2:0101|1010(父代2的前半部分 + 父代1的后半部分)

其他交叉方式两点交叉 选择两个交叉点,交换中间部分;均匀交叉每个基因位置随机选择来自哪个父代。

交叉概率:交叉操作以一定概率发生(通常0.6-0.9)。如果交叉不发生,子代直接复制父代。

作用:组合父代的优秀基因;探索新的解空间;保持种群的多样性。

变异操作(Mutation)

核心思想:通过染色体上的某些基因位置产生突变,使得新产生的个体与其他个体有所不同。

二进制编码的变异:随机选择某些基因位,将该位的值取反(0变1,1变0)。

例子

假设有一个个体:10101010

随机选择第3位和第6位进行变异:

  • 变异前:10101010
  • 变异后:10001110(第3位和第6位取反)

实数编码的变异:随机选择某些基因,在该基因的值附近随机扰动。

例子

假设有一个个体:[3.5, 2.1, 7.8]

随机选择第2个基因进行变异(在 [ 2.1 − 0.5 , 2.1 + 0.5 ] [2.1-0.5, 2.1+0.5] [2.1−0.5,2.1+0.5] 范围内随机取值):

  • 变异前:[3.5, 2.1, 7.8]
  • 变异后:[3.5, 1.9, 7.8](第2个基因变为1.9)

变异概率:变异操作以一定概率发生(通常0.001-0.1)。每个基因位独立地决定是否变异。

作用防止陷入局部最优 (引入随机性,可能跳出局部最优解);保持种群多样性 (避免所有个体都相同);探索新的解空间(发现父代和交叉无法产生的解)。

形象比喻交叉 是父母基因重组,生出孩子(组合现有特征);变异是孩子发生基因突变(产生新特征)。

交叉和变异的关系

互补作用交叉 利用现有信息,组合优秀基因(利用);变异引入新信息,探索未知区域(探索)。

平衡:交叉概率太大 → 种群过早收敛,失去多样性;变异概率太大 → 种群随机游走,失去方向性。需要平衡利用和探索。

实际应用建议:交叉概率:0.6-0.9(主要操作);变异概率:0.001-0.1(辅助操作,保持多样性)。

4. 遗传算法与进化策略的区别

关键词:位串编码、实数串编码、全局最优、局部极值

编码方式的区别

遗传算法(GA)

  • 编码方式 :通常使用位串编码(二进制编码)
  • 例子01101001111001010110(一串0和1)
  • 优点:编码简单,交叉和变异操作容易实现
  • 缺点:需要编码和解码,可能损失精度

进化策略(ES)

  • 编码方式 :使用实数串编码(直接使用实数值)
  • 例子[5, 1.2, 8, 3.11, 19, 7, 2, 4.3](直接是数值)
  • 优点:不需要编码解码,精度高,适合连续优化
  • 缺点:交叉和变异操作需要特殊设计
优化能力的区别

遗传算法(GA)

  • 计算速度:相对较慢(需要编码解码)
  • 优化能力 :有可能找到全局最优解
  • 适用问题:离散优化、组合优化、复杂的多峰值问题
  • 原因:位串编码和交叉操作有助于跳出局部最优

进化策略(ES)

  • 计算速度:很快(直接操作实数)
  • 优化能力 :通常只能找到可行解局部极值解
  • 适用问题:连续优化、实值函数优化
  • 原因:主要依赖变异,容易陷入局部最优
实际应用对比
特性 遗传算法(GA) 进化策略(ES)
编码 位串编码(二进制) 实数串编码
速度 较慢 较快
优化能力 可能找到全局最优 通常找到局部最优
适用问题 离散、组合优化 连续优化
操作重点 交叉为主 变异为主

例子

问题1:旅行商问题(TSP)(离散优化)

  • 适合:遗传算法
  • 编码:城市顺序的排列编码
  • 原因:问题是离散的,需要组合优化

问题2:优化函数 f ( x 1 , x 2 ) = x 1 2 + x 2 2 f(x_1, x_2) = x_1^2 + x_2^2 f(x1,x2)=x12+x22(连续优化)

  • 适合:进化策略
  • 编码:实数编码 [x_1, x_2]
  • 原因:问题是连续的,直接优化实数值
共同缺点

遗传算法和进化策略都有以下缺点:

1. 编码方案选择困难:针对特定问题,选择合适的编码方案需要经验,编码方式直接影响算法性能。

2. 适应度函数设计困难:需要将问题转化为适应度函数,适应度函数的设计影响搜索方向。

3. 可能找不到全局最优解:算法是随机的,不保证找到全局最优,可能陷入局部最优或收敛到次优解。

4. 参数调优困难:种群大小、交叉概率、变异概率等需要调优,不同问题需要不同的参数设置。

改进方法:使用自适应参数调整;结合局部搜索算法;使用多种群并行演化。

相关推荐
v***44671 小时前
【语义分割】12个主流算法架构介绍、数据集推荐、总结、挑战和未来发展
算法·架构
玖剹1 小时前
floodfill算法题目(二)
c语言·c++·算法·leetcode·深度优先·dfs·深度优先遍历
禁默1 小时前
机器学习基础入门(第七篇):神经网络训练优化与常见问题解析
人工智能·神经网络·机器学习
二哈喇子!1 小时前
昇腾平台 vLLM 部署与性能优化实战:高吞吐推理落地指南
人工智能·性能优化
surtr11 小时前
区间查询mex异或gcd (焰与霜的共鸣,可持久化线段树+思维)
数据结构·c++·算法·数学建模·stl·动态规划
小狗照亮每一天1 小时前
【菜狗学深度学习】注意力机制手撕——20251201
人工智能·深度学习·机器学习
AI视觉网奇1 小时前
数字人 语音驱动
人工智能·python
宁大小白1 小时前
pythonstudy Day24
人工智能·机器学习
胡乱儿起个名1 小时前
Embedding查表操作
python·机器学习·embedding