数学建模【遗传算法】

一、遗传算法简介

从做菜说起,小魏是一名大厨,想要创造一道美味的菜肴。首先随机生成多个原始配方,每种配方所用的原料(鸭脖、鸡肉、大肠等)与手法(煎炒焖炸卤炖)组合不同,现实中考虑调料用量、烹饪时间等等变量,会有无穷多种解,传统算法难以求解。

请评委对几种配方做出的菜打分,分数高的配方进行配方交叉,保留一部分评分高的配方要素、舍弃评分低的配方。例如配方A和配方C的分数都高,A是卤鸭脖,C是炖大肠,配方交叉尝试新一组方案:"炖鸭脖"和"卤大肠"。

有时会在配方交叉之后,再变更食材或烹饪方式。就像是在配方中随机使用了一些与原配方无关的调料或者做法(鸭脖改成鼠头),变异可能带来惊喜(评分高),也可能有惊无喜(试试就逝世),所以只小概率进行。

再对新配方的菜评分,继续交叉、小概率变异.....不断循环直至无改进空间为止。

将其类比于生物学和遗传算法

|--------------|------|---------|
| 烹饪配方 | 生物学 | 遗传算法 |
| 多种配方 | 群体 | 可行解集合 |
| 单个配方 | 个体 | 可行解 |
| 配方内容(原料、方式等) | 基因 | 可行解的分量 |
| 评分 | 适应度 | 适应度函数值 |
| 配方交叉 | 交叉 | 交叉操作 |
| 随机新操作 | 变异 | 变异操作 |
| 做出美味佳肴 | 物种进化 | 最优解(近似) |

二、适用赛题

函数优化、组合优化问题

  • 对于一些非线性、多模型、多目标的函数优化问题
  • 不依赖于问题的背景领域,使用方便,连续1离散、单峰1多峰等等各种形式均可

NP-Hard问题

  • 模拟退火算法中讲过的TSP问题、背包问题、图形划分问题等
  • 在NP-Hard问题方面普遍来说各类启发式算法均可

优缺点

  • 相比模拟退火,相比良好的全局搜索能力,不易陷入局部最优
  • 相比粒子群算法,常规的遗传算法可直接求解离散问题
  • 缺点:由于变异是随机的,局部搜索能力差;相对其他算法更耗时、思路复杂抽象
  • 可多种算法结合改进,例如遗传算法优化神经网络等混合算法(新手慎用)

三、模型流程

四、流程分析

还是以一个例题贯穿流程分析

例题:现有12份快递需要配送,背包容量350,每份快递的体积不同、收益不同,应该将哪些物品放进背包,使得所总体积不超过背包容量且总收益最大?

这是一个很典型的0-1背包问题,如果学过动态规划的同学,这个题目是非常简单的,不过这里我们用遗传算法求解之。

  • 用"0"和"1"表示物品的装包状态
  • 一个物品装包状态为0代表没有被装进包中,1代表被装进包中
  • 例如"100111001001"代表第1,4,5,6,9,12个物品被装进背包
  • 每一个物品的装包状态(0或1)作为一个基因
  • 问题的一个解:一组12个数构成的数组为一个个体(染色体)
1.种群初始化
  • 有N个物品,则随机生成N个数(0或1)构成一个数组,作为一个个体,及可能的解
  • 重复上一步,生成多个个体,构成种群(解集)
  • 群体规模太小容易陷入局部最优,太大又会使计算复杂度高费时间,一般设置20到200
2.选择运算
  • 求每个个体的适应度:把解x带入目标函数求函数值f(x)
  • 目的是从第t代群体P(t)中挑选出优良个体,把基因遗传到下一代群体P(t+1)

选择操作的准则

  • 适应度越高的个体被选中的概率越大
  • 适应度较低的个体仍有被选中的可能

为什么不直接从大到小排序,直接选适应度最高的几个个体进行后续操作?

  • 适应度最高的几个个体,也意味着适应度高度相似
  • 往往其基因(解分量)也很相似
  • 如果每次都只选适应度最高的个体,意味着每轮迭代所选的个体相似度很高
  • 那么后代的相似度也会很高,进化陷入停滞,意味着陷入局部最优解

至于选择操作怎么进行,看个人,只要符合上面的准则即可。下面提供一种方法

轮盘赌法

  • 1.计算每个个体被选中概率P(xi),概率值与其适应度值成正比
  • 2.计算每个个体对应的累积概率qi,为从第1个个体到当前个体的选中概率之和
  • 3.随机生成一个数组bet,其中的元素取值在0到1之间,并将元素从小到大排序
  • 4.若第i个个体的累积概率qi大于bet(i), 则第i个个体被选中,并更新bet(i)为bet(i+1),否则选择第(i+1)个个体与bet(i)比较,直至选出一个个体为止
  • 5.重复步骤4,直至选出与种群数量相等的个体数(其中有的个体被多次选中)

轮盘赌法分析

  • 第i个个体适应度值越大→被选中概率P(xi)数值越大
  • P(xi)越大→P(xi) = (qi) - (qi-1)越大, 即第i个个体对累积概率带来的"增大幅度"也越大
  • 增大幅度(qi - qi-1)越大→新个体满足qi > bet的概率也越大(回忆下bet是怎么变化的)
  • 个体满足qi > bet(i)即意味着被选中
  • 结论:个体适应度值越大,被选中的概率越大
  • 基因好、适应度大使得其对累积概率带来的"增幅"更大
  • 类似在轮盘上该个体所占的面积越大,被选中的概率也越大
  • 被选择的个体中会有重复
  • 因为适应度高的个体被选中概率大而可能被选中多次
  • 对应于生物界中基因优良生存能力强的个体可能具有多次交配权
3.交叉
  • 在被选择的所有个体中,两个个体之间进行交叉操作
  • 先根据交叉概率判断是否执行交叉操作,一般设置为80%到95%(即较大概率)
  • 随机选择进行交叉的位置,如何选择看个人,满足随机即可
4.变异
  • 变异操作是为了利用"不确定性"来赌一把,或许更好,或许更差
  • 先判断每个个体的每个基因是否进行变异运算,一般变异概率设为0.5%到5%即可
  • 变异运算就是对变异的基因取反,0变1,1变0
5.输出最优解

当循环完成后,统计种群中所有的适应度,取最优解输出,到底是最大还是最小是最优解根据具体题目

6.补充

进行运算的时候,不要忘记题目本身的一些约束。比如这个背包问题,如果体积超过背包容量上限,即使其适应度可能很高但是这种情况也不能要,所以要进行一些操作避免,比如设置惩罚系数或者直接赋0等,看个人选择。具体题目具体分析。

7.总结

|-----------|------|---------|
| 背包问题 | 生物学 | 遗传算法 |
| 多种背包方案 | 群体 | 可行解集合 |
| 单个方案 | 个体 | 可行解 |
| 每个物体是否被选中 | 基因 | 可行解的分量 |
| 包内总价值 | 适应度 | 适应度函数值 |
| 两方案中的物品交换 | 交叉 | 交叉操作 |
| 随机改变物品的选择 | 变异 | 变异操作 |
| 包内总价值最大 | 物种进化 | 最优解(近似) |

相关推荐
毕小宝7 分钟前
逻辑回归(下): Sigmoid 函数的发展历史
算法·机器学习·逻辑回归
小叮当爱咖啡12 分钟前
DenseNet算法:口腔癌识别
算法
希望有朝一日能如愿以偿16 分钟前
算法(食物链)
算法
鱼跃鹰飞17 分钟前
Leecode热题100-295.数据流中的中位数
java·服务器·开发语言·前端·算法·leetcode·面试
summ1ts27 分钟前
组合数求法汇总
c++·数学·算法·离散数学·组合数学
@qike1 小时前
【C++】—— 日期类的实现
c语言·c++·笔记·算法·学习方法
luthane1 小时前
python 实现djb2哈希算法
python·算法·哈希算法
江奖蒋犟3 小时前
【初阶数据结构】排序——归并排序
c语言·数据结构·算法
cdut_suye3 小时前
STL之list篇(下)(从底层分析实现list容器,逐步剥开list的外表)
开发语言·数据结构·c++·学习·算法·stl·list
大地之灯3 小时前
深度学习每周学习总结J1(ResNet-50算法实战与解析 - 鸟类识别)
人工智能·python·深度学习·学习·算法