第4章 遗传算法与一代进化的完整计算
遗传算法(Genetic Algorithm,GA)解决的是搜索和优化问题:把一批候选解编码成染色体,按适应度选择父代,通过交叉和变异产生新解,再重复评价。它适合不容易求导、变量关系复杂、允许近似解的问题。它不是“算一次就保证全局最优”的公式,而是一套带随机性的搜索程序。
本章对应 EE4285-Computational-Intelligence-4-AY2023S2.pdf,下文简称 GA 课件,页码均为 PDF 页码;练习对应 Tut-6.pdf。先理解编码,再计算适应度,最后动手完成选择、交叉和变异。
1 从候选解到染色体
一个个体(individual)代表一个候选解,一组个体构成种群(population)。染色体(chromosome)是解的编码;基因(gene)是编码中的一个组成部分;基因座(locus)是位置;等位值(allele)是该位置允许的取值。基因型(genotype)指编码,表现型(phenotype)指解码后的实际方案。[GA 课件 pp14–25]
例如用四位二进制 0111 表示整数 7,0111 是基因型,7 是表现型,而目标函数值还要另算。不要把“解码后的 x”和“目标值 f(x)”混为一谈。一般 GA 可以采用二进制、整数、实数或排列编码;课件中的经典遗传算法 CGA 特指固定种群、二进制编码和基本选择交叉变异算子。[GA 课件 pp16–20]
二进制解码公式
若变量在闭区间内取值,以 L 位二进制表示,令整数编码为 k,则端点包含式映射为:
其中最右边是最低位 b₀。公式中的分母是 2ᴸ−1,因为整数 k 从 0 到 2ᴸ−1,一共有 2ᴸ 个可表示点,相邻点之间只有 2ᴸ−1 段。分辨率为:
若要求相邻可表示点间隔不超过 ε,位数应满足:
这最后一式是由课件 p25 的映射公式推导得到的位数条件;如果题目直接给整数范围,也可按“需要多少个不同整数”确定编码位数。
例1 自编 解码和精度
在区间 [−2,6] 使用 4 位编码,染色体 1010 对应 k=10:
这时分辨率为 8/15≈0.5333。若要求间隔不超过 0.1,需要 2ᴸ−1≥80,即 L≥7。注意“四位二进制整数 10”并不表示实际变量 x=10,实际变量还要经过区间映射。
2 目标函数和适应度函数
目标函数描述原问题,例如路线长度、分类误差或收益。适应度函数(fitness function)描述 GA 中个体有多值得被选中。二者可以相同,也可能需要转换。[GA 课件 pp26–27]
若最大化的目标值均为非负数,可以直接采用 F(x)=f(x)。若最小化非负代价 J(x),课件给出的常见转换是:
J 越小,F 越大。但必须检查定义域:若 J 可能为负,直接套用这个式子可能产生负适应度、除零或排序问题。已知下界 Jmin 时,可以采用:
这是一种明确的平移转换示例,不是所有优化问题唯一的适应度定义。排名选择和锦标赛选择也不要求把原始目标值直接当概率。
Tut6 Q4 的题意检查
题目给出 z=x²−2y+3,称自变量为 x 和 y,随后却写“variables x, and z are in the range 0–7”。这处变量描述有歧义。若按常见出题意图,假设 x、y 都是在 0 到 7 的整数,则每个变量 3 位,拼接成 6 位染色体即可;这个假设需要写明,不能悄悄把题目中的 z 改成 y。[Tut6 p1 Q4]
在上述假设下,z 的最小值是 −11,于 x=0、y=7 处取得;最大值是 52,于 x=7、y=0 处取得。因此可取:
对最优候选,F=1;对最差候选,F=1/64。直接写 1/(1+z) 则不合适。若题目真正约束的是 x 与 z,而未规定 y 的范围,上述 6 位整数编码就不能直接使用。
3 轮盘赌选择到底算什么
轮盘赌选择(roulette-wheel selection)按适应度占比分配概率:
适用条件是每个 Fᵢ≥0 且总和大于 0。N 是种群数量;pᵢ 是一次抽样选到个体 i 的概率;nᵢ 是重复抽 N 次后该个体的复制次数;平均适应度为 F̄。期望复制次数可以是小数,实际复制次数一定是整数。[GA 课件 pp28–34]
如果所有适应度都为零,上式没有定义,应预先规定均匀选择等处理办法。如果适应度有负值,也不能直接除以总和。最优个体概率较大,但并不保证每一代都被选中;若要保留当前最优解,需要额外采用精英保留(elitism)。
例2 课件算例复算
最大化 f(x)=x²,x 取 0–31 的整数,使用五位二进制。初始种群见 GA 课件 pp43–49。
| 染色体 | x | F=x² | 选择概率 | N=4 时的期望复制次数 |
|---|---|---|---|---|
| 01101 | 13 | 169 | 169/1170≈0.1444 | 0.5778 |
| 11000 | 24 | 576 | 576/1170≈0.4923 | 1.9692 |
| 01000 | 8 | 64 | 64/1170≈0.0547 | 0.2188 |
| 10011 | 19 | 361 | 361/1170≈0.3085 | 1.2342 |
总适应度为 1170,平均适应度为 292.5。概率应加起来等于 1,期望复制次数应加起来等于 4;这是两个快速自检点。
沿表格顺序,累积概率约为 0.1444、0.6368、0.6915、1。为了演示实际抽样,另设四个均匀随机数 0.10、0.20、0.60、0.90。它们分别选中第 1、2、2、4 个个体,得到复制次数 (1,2,0,1)。这与课件给出的一组实际次数一致,但这组随机数是本章补充的演示,并非课件记录。
4 交叉与变异
单点交叉(one-point crossover)选定一个切分位置,交换两个父代该位置之后的部分;双点交叉(two-point crossover)交换两个切分位置之间的片段;均匀交叉(uniform crossover)按掩码决定每一位继承哪个父代。[GA 课件 pp35–37]
继续上面的种群,交配池为 01101、11000、11000、10011。按课件 p49 的切分位置:
父代1 0110|1 子代1 0110|0 = 12
父代2 1100|0 子代2 1100|1 = 25
父代3 11|000 子代3 11|011 = 27
父代4 10|011 子代4 10|000 = 16
若本轮没有实际发生变异,新种群适应度为 144、625、729、256,总和 1754,平均值 438.5,最大值 729。课件 p49 把平均值取整写成 439;写精确计算应保留 438.5。这一轮的最佳值从 576 提升到 729,但还没有到理论最大值 31²=961。
变异(mutation)在二进制编码中通常指逐位独立翻转 0 与 1。如果有 N 个个体,每个 L 位,每位变异概率为 pm,则:
对本例 N=4、L=5、pm=0.001,期望变异位数为 0.02,至少一位变异的概率约为 1.9811%。不能据此说“20 位太少所以一定不会变异”。课件 p51 用“每 1000 位变异一次”作直观描述,应理解为长期平均,而不是每累计 1000 位就强制翻转一次。
5 Tut6 Q3 完整手算
此题不是二进制编码,而是八个取值在 0–9 的数字基因。适应度定义为:
这里公式中的字母 f 同时被用作函数名和第六个基因,阅读时要分清。[Tut6 p1 Q3]
| 个体 | 染色体 | 展开计算 | 适应度 |
|---|---|---|---|
| x₁ | 65413532 | (6+5)−(4+1)+(3+5)−(3+2) | 9 |
| x₂ | 87126601 | (8+7)−(1+2)+(6+6)−(0+1) | 23 |
| x₃ | 23921285 | (2+3)−(9+2)+(1+2)−(8+5) | −16 |
| x₄ | 41852094 | (4+1)−(8+5)+(2+0)−(9+4) | −19 |
所以从优到劣为 x₂、x₁、x₃、x₄。第一问只要求评价和排序,出现负适应度本身不妨碍排序;若后续要使用轮盘赌,则需先处理负值。
在中点交叉最优的两个个体:
8712|6601 + 6541|3532
→ 8712|3532 和 6541|6601
得到 87123532 和 65416601,适应度分别为 15 和 17。子代未必超过最优父代的 23,交叉也不是“成绩保证器”。
再对第二优 x₁ 与第三优 x₃ 在 b 和 f 之后切开并交换中间段:
65|4135|32 + 23|9212|85
→ 65|9212|32 和 23|4135|85
得到 65921232 和 23413585,适应度分别为 −2 和 −5。题目只说“points b and f”,答题时最好画出切线,明确自己采用的是在这两个基因后切分的约定。
6 编码必须尊重问题结构
Tut6 Q2 的三种配料数量可以直接用整数向量 (q₁,q₂,q₃) 表示,也可将每个数量分别编码再拼接。模糊规则可以使用离散符号编码,例如 (red, small, round, apple),其各基因允许的取值集合不必相同。
旅行商问题(TSP)的解是城市排列,例如 (3,5,7,2,1,6,4,8)。这里每个城市必须恰好出现一次,普通单点拼接可能产生重复城市和漏访,因此需要保持排列合法的交叉算子。[GA 课件 pp56、62–64]
课件 p63 的 Order1 例子可按以下方式理解:固定父代1在位置 3–6 的片段 (7,2,1,6),从父代2的第7位开始循环扫描,跳过已经固定的城市,将剩余 (3,4,5,8) 依次填入子代空位 7、8、1、2,得到 (5,8,7,2,1,6,3,4)。交换两个城市是一种合法的排列变异,因为它仍保证每个城市恰好出现一次。
7 停止条件与考试表达
停止条件可以是达到代数上限、最佳适应度连续若干代没有明显提高、达到可接受目标值,或种群多样性降低。课件也介绍按基因趋同程度判断收敛。[GA 课件 pp42、54]
“收敛”不等于“已证明全局最优”。没有精英保留时,最佳个体还可能丢失;即使保存历史最优,当前种群平均值也可能下降。课件中的种群数、交叉率和变异率是示例设置,不能作为所有问题的固定标准。
遇到一代进化题,按 编码与解码 → 目标与适应度 → 概率与复制次数 → 父代配对与切分 → 变异 → 新种群评价 写出中间过程。最常见失分是分母误写成 2ᴸ、把期望次数当实际次数、对负适应度直接做轮盘赌、以及漏写切分位置。
8 自测与答案
- 用五位二进制表示 [0,31] 内整数,
10110是多少?适应度若为 x²,又是多少? - 三个个体的正适应度为 2、3、5,抽取 10 次,第三个个体的期望复制次数是多少?是否保证恰好出现该次数?
- 10 个个体,每个 8 位,每位变异概率为 0.01,期望变异位数是多少?
答案:1. x=22,F=484。2. 概率为 0.5,期望为 5 次,实际不保证是 5。3. 期望为 10×8×0.01=0.8 位,实际位数仍为整数。
本章来源
EE4285-Computational-Intelligence-4-AY2023S2.pdf:pp14–25 编码;pp26–34 适应度与选择;pp35–42 算子与停止;pp43–55 数值例;pp56–64 TSP。Tut-6.pdf:p1 Q1–Q4。本文给出的习题结果为独立推导,非官方答案。
- 感谢你赐予我前进的力量

