文章目录
一、考试范围知识框架
- 进化计算框架
- 遗传算法(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 更优秀
进化过程
进化计算通过以下步骤完成一代的进化:
- 选择(Selection):根据适应度选择优秀的个体作为父代
- 交叉(Crossover):父代个体交换基因,生成子代
- 变异(Mutation):子代个体的某些基因发生随机变化
- 评估(Evaluation):计算新个体的适应度
- 生存选择(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)
- 最大迭代次数
遗传算法的基本流程
算法步骤:
- 初始化 :随机生成初始种群 P ( 0 ) P(0) P(0), t = 0 t = 0 t=0
- 评估 :计算种群 P ( t ) P(t) P(t) 中每个个体的适应度
- 重复以下过程直到满足终止条件 :
- 选择:根据适应度选择父代个体
- 交叉:父代个体交叉,生成子代
- 变异:子代个体发生变异
- 评估:计算子代的适应度
- 生存选择 :从父代和子代中选择个体形成新一代种群 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:
-
初始化:随机生成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
- 个体1:
-
选择:选择适应度高的个体作为父代(如个体2和个体3)
-
交叉:父代交换部分基因,生成子代
-
变异:子代随机改变某些位
-
评估和选择:计算新个体的适应度,选择优秀的进入下一代
-
重复 :经过多代演化,种群中的个体越来越接近最优解 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. 参数调优困难:种群大小、交叉概率、变异概率等需要调优,不同问题需要不同的参数设置。
改进方法:使用自适应参数调整;结合局部搜索算法;使用多种群并行演化。