简单遗传算法
还是实习期间的笔记,但是没学完。无奖竞猜,我会填坑吗?
简单遗传算法原理
其实这是一张mermaid图,但是我还没加mermaid扩展,脑补吧
1 | --- |
step 1: 编码
编码包括
- 二进制编码
- 格雷码
- 实数编码(高维复杂情况下常用)
- 多参数级联编码(多个子串串连)
二进制编码缺点:
- 进位时要改变所有的位(
),用格雷码可以克服 - 要先给出求解的精度,没法微调,精度低误差大,精度高串长效率低
- 高维优化问题,串非常长,效率很低
格雷码
这里⊕为异或符号

step 2: 群体设定
可以随机生成,组成初始群体;也可以根据先验知识生成。种群规模一般取为20~100。
规模小了优化性能不好且可能引起未成熟收敛,规模大计算复杂。
step 3: 适应度评估
适应度函数
适应度越高,个体越好。一般最大化问题,适应度函数取
设变换前适应度为
不同的变换方法:
- 线性变换:
- Boltzmann变换:
- 乘幂变换:
- 归一化变换:
适应度共享:根据个体在某个距离内与其他个体的临近程度,来确定该个体的适应度应改变多少。
根据距离测度分类:
- 基因型共享:码空间距离
- 表现型共享:解空间距离
step 4: 选择
选择:从群体中选择优胜个体,淘汰劣质个体的操作。即从当前群体中选择适应度较高的个体以生成配对池。
选择压力:
选择方式如下:
随机选择
- 选择幅度决定了每个个体被复制的次数
- 选择幅度由以下两部分组成
- 确定染色体的期望值
- 将期望值转换成实际值(即该染色体后代个体)的数目
- 常用选择方式
- 轮盘赌(比例选择算子)
- 一次随机采样
确定性采样
(直接放书本原文了)
确定性采样就是从父代和子代个体中选择最优的个体。具体举例如下:
(1) (μ+λ)-selection(μ个父代,λ个子代,从μ+λ中选择最好的μ个个体);
(2) (μ,λ)-selection(μ个父代,λ个子代,从λ中选择最好的μ个个体);
(3) Truncation selection(截断选择);
(4) Block selection(块选择);
(5) Elitist selection(贪婪选择,在比例选择最优个体时没有被选择,进行强制选择);
(6) The generational replacement(代替换);
(7) Steady-state reproduction(稳态再生,n个最差的父代个体被子代替换)。
混合采样
混合采样同时具有随机性和确定性,具体举例如下:
(1) Tournament selection(竞赛选择);
(2) Binary tournament selection(规模为2的竞赛选择);
(3) Stochastic tournament selection(采用普通的方法计算选择概率,然后采用赌盘选择个体,适应度高的进入群体,否则被抛弃);
(4) Remainder stochastic sampling(随机保留采样,期望选择次数的整数部分确定,小数部分随机)。
step 5: 交叉
交叉:把两个父代个体的部分结构加以替换,生成新的个体,来提高搜索能力。
原理动图
step 6: 变异
变异:将染色体编码串中的某些基因用其它的基因来替换,改善局部搜索能力。
随机变异
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|
| 1 | 2 | 5 | 3 | 4 | 6 | 7 | 8 | 9 |
|---|
或者
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|
| 1 | 5 | 3 | 4 | 2 | 6 | 7 | 8 | 9 |
|---|