• 数学建模【遗传算法】


    一、遗传算法简介

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

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

  • 相关阅读:
    前端的页面代码
    二叉树遍历——前序、后序和中序遍历
    关于 4.1 - copycat 的通关经历
    国内酒店预定接口
    C++高级教程学习---文件和流
    如何使用idea连接服务器上的mysql?
    Spring Cloud之负载均衡组件Ribbon原理分析
    JSP快速入门
    【操作系统】了解Linux操作系统中PCB进程管理模块与进程PID
    【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割1(综述篇)
  • 原文地址:https://blog.csdn.net/W_O_Z/article/details/136246739