数学建模【遗传算法】

一、遗传算法简介

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/493205.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytest教程-12-fixture作用域

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest fixture的基本使用方法,本小节我们讲解一下fixture的作用域。 fixture前后置区分 控制fixture的前置和后置操作是通过yield关键字进行来区分的,代码在yield前面…

编曲学习:高叠和弦 挂留和弦 和弦实战应用

高叠和弦 挂留和弦 和弦实战应用小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_65d4826fe4b04c10a1310517?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 七和弦 以三和弦举例,三和弦上面叠一个三度的音,就变成了七和弦。 从下到…

halcon中的2D测量-椭圆

一、定义 二维测量指的是测量二维几何图形的参数,例如圆、椭圆、圆弧、矩形的相关参数。这里的参数对圆来说可以是半径;椭圆可以是长半轴、短半轴;矩形则包括宽和高。 二、基本步骤 1.创建测量模型 使用算子 create_metrology_model 2.设…

leetcode hot100 买卖股票的最佳时机二

注意,本题是针对股票可以进行多次交易,但是下次买入的时候必须保证上次买入的已经卖出才可以。 动态规划可以解决整个股票买卖系列问题。 dp数组含义: dp[i][0]表示第i天不持有股票的最大现金 dp[i][1]表示第i天持有股票的最大现金 递归公…

SOLIDWORKS 查找并修复装配体配合错误

我们在SOLIDWORKS 正版软件进行装配体装配时,时常会出现一些报错,例如在配合、装配体特征或被装配体参考引用的零部件和子装配体中。一些常见的错误,如一个零部件的过定义会引发更多其他错误信息,并导致装配体停止解析配合关系。下…

背包问题(介绍+例题+代码+注解)

目录 介绍: 一、01背包 题目描述 输入描述: 输出描述: 代码: 二、完全背包 题目描述 输入描述: 输出描述: 代码: 三、多重背包 题目描述 输入描述: 输出描述: 代码: 四、背包问题 题目描述 输入描述: 输出描…

27.HarmonyOS App(JAVA)可复用列表项的ListContainer

可复用列表项的ListContainer 简短的列表可以通过定向布局实现,但是如果列表项非常多,则使用定向布局就不再合适。如需要创建50个列表项的列表,那么用定向布局实现至少需要创建50个以上的组件了。然而,限于设备屏幕大小的限制,绝大多数组件不会显示在屏幕上,却会占据大量的内存…

基础光学系列:(二)光学元件在机器视觉中的关键作用

光学元件,包括透镜、反射镜和棱镜,在机器视觉领域扮演着至关重要的角色。它们不仅是实现高精度图像捕获的基础,也是提升机器视觉系统性能的关键。通过深入了解这些光学元件的功能和应用,我们能够更好地掌握机器视觉技术的精髓。 …

算法-计算机基础知识

1&#xff0c;坐标系与数学不同&#xff0c;x轴向下&#xff0c;y轴向右 2.案例&#xff1a;螺旋矩阵 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution {public List<Integer> spiralOrder(int[][] matrix) { List<Integer&…

Linux使用Docker部署Nacos容器并结合内网穿透实现公网访问本地服务

文章目录 推荐1. Docker 运行Nacos2. 本地访问Nacos3. Linux安装Cpolar4. 配置Nacos UI界面公网地址5. 远程访问 Nacos UI界面6. 固定Nacos UI界面公网地址7. 固定地址访问Plik 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff…

互联设备-中继器-路由器等

网卡的主要作用 1 在发送方 把从计算机系统要发送的数据转换成能在网线上传输的bit 流 。 2 在接收方 把从网线上接收来的 bit 流重组成计算机系统可以 处理的数据 。 3 判断数据是否是发给自己的 4 发送和控制计算机系统和网线数据流 计算机的分类 1、台式机 2、小型机和服…

【网站项目】437物流管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…