- Crossover I(One Point Crossover一点杂交)
- 选一个点,从这个点之后,所有的遗传物质进行交换
- Crossover I(One Point Crossover两点杂交)
- 选两个点,将这两个点之间的遗传物质进行交换
- 注意:如果杂交的需要交换的基因一样时,杂交后基因没变化
- Crossover III(Uniform Crossover各个点都可以杂交)
- 注意:本身具有随机性,此时是“两个生一个”
- Is it always easy?
- 问题:结果不合法
- TSP问题中,每个城市都不许被访问,且只访问一次,但有城市出现了两次(有城市没有出现)
- 解决:
- 修复:将重复的数字(4)改为未出现的数字(8)
- 使用新杂交算法,每次使得杂交结果都合法,无需修复
- 问题:结果不合法
- Mutation
- 离散的:0变1,1变0
- 连续的:加高斯,0变“-0.1到0.2”之类的,在此范围内取值
- mutation & Crossover
- mutation主要用于保持种群基因的多样性
- Population Diversity
- 算法总是要converge的(收敛),但是若算法的genetic diversity损失的太早太快,会导致premature converge(过早收敛、不成熟收敛),可能会收敛到错误位置
- Selection & Crossover & Mutation
- exploration & exploitation(勘探开发)
- Selection:
- 给最有希望的个体更多的资源
- 可能会导致基因多样性的损失
- Crossover
- 杂交、交换,希望好的父代、母代杂交出更好的子代
- 对基因多样性没有影响
- Mutation
- 生成新的基因(不要100个人集中在一个房间找,可能钱包丢在其他房间,也去找一找)
- 可以保持种群基因多样性
- Selection:
- exploration & exploitation(勘探开发)
- The Complete Picture
- GA Framework
- 形成初始种群(例如100个个体的种群)
- evaluate每个个体的适应度
- 外循环为一代一代的循环(从父代到子代的迭代循环)
- 内层循环为生成population中的每一个个体
- 选择两个个体
- 杂交
- 变异
- 评价(到此为止生成了两个新个体)
- 重复直到100个个体都生成完毕(一代内部循环结束)
- 内层循环为生成population中的每一个个体
- 外层循环(根据新生成的个体和原有个体组合出一个下一代的population,返回最优的个体,结束)
- Parameters(参数设置)
- 种群个体数量
- 太大:很慢,每个个体都要evaluate(管理一个十几亿人的国家是很麻烦的事情)
- 太少:派人去挖金子(很难说很快就能找到)
- 杂交比例
- 推荐比例:0.8
- 每次挑选的两个个体有80%的概率杂交
- 20%的概率直接copy到子代
- 推荐比例:0.8
- 变异推荐值
- 每个个体的基因1%变异(100个基因变异1个)
- 太大:搜索在整个空间“跳来跳去”,类似随机搜索
- 太小:收敛得快,收敛到错误的地方后,因变异率太小,很难在将它再拉回到其他区域中去
- 选择策略
- 重要的是选择压力(selection pressure)
- 如果开始就给相对较好的个体太多优先权,他的基因就会很快过度繁殖,占据种群的支配地位(dominant population),会导致快收敛到某点
- 方法
- Tournament Selection:两两PK,三三PK
- Truncation Selection(截断选择):类似于高考,划一个分数线,超过的留下
- 重要的是选择压力(selection pressure)
- 种群个体数量
- A few more words
- No free lunch
- 对于不同的问题,有不同的最优参数值,没有一个固定的参数值可以在任何问题上得到最优解
- Randomness
- 遗传算法本身内部就是随机的,每一次运行,结果都不完全一样,需要多运行几次寻找相对较好的结果
- Why doesn't it work?
- 很好理解,好实现(几十行代码就可以实现)
- 但为什么这样做可以工作,难以解释
- 机理很难用数学方式精准刻画和描述
- No free lunch
10.5.1遗传算法进阶
于 2023-12-13 11:41:40 首次发布