数学建模【遗传算法】

发布于:2024-02-28 ⋅ 阅读:(89) ⋅ 点赞:(0)

一、遗传算法简介

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

请评委对几种配方做出的菜打分,分数高的配方进行配方交叉,保留一部分评分高的配方要素、舍弃评分低的配方。例如配方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.总结
背包问题 生物学 遗传算法
多种背包方案 群体 可行解集合
单个方案 个体 可行解
每个物体是否被选中 基因 可行解的分量
包内总价值 适应度 适应度函数值
两方案中的物品交换 交叉 交叉操作
随机改变物品的选择 变异 变异操作
包内总价值最大 物种进化 最优解(近似)

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到