智能算法(GA、DBO等)求解阻塞流水车间调度问题(BFSP)

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。

主要参考资料:

[1] 潘全科, 高亮, 李新宇. 流水车间调度及其优化算法[M]. 武汉: 华中科技大学出版社, 2013.

由于机器中间缓冲区或生产温度的限制,使得工件加工完成后被阻塞在当前机器上,这就是阻塞流水车间调度问题(blocking flow-shop scheduling problem, BFSP)。譬如,在化学制造过程中,由于温度的要求,当药品在上游机器上完成后,为了保持此时的高温,应立即离开当前的机器而转向下游机器。但是如果下游机器处于忙的状态,此时药品只能被阻塞在上游机器上。图1所示为一个3×3的BFSP的甘特图。当工件2在第一台机器上加工完毕时,机器2正在加工工件1。由于没有中间缓冲区,工件2工并不能立刻离开该机器,而是等到工件1加工完毕后才运输到机器2上加工。这样就造成了工件3延迟开工。

图片

图1 阻塞流水车间调度问题

01
问题描述

这里主要讨论以最大完工时间(Cmax)为优化目标的阻塞流水车间调度问题(blocking flow-shop scheduling problem, BFSP),记为Fm|blocking|Cmax。研究表明,m≥3时,这类调度问题也是NP-Hard 问题。

Fm|blocking|Cmax问题可描述为:有n个工件按照相同的工艺路线在m台机器上加工。约定所有机器上工件的加工次序都相同。要求相邻机器之间没有缓冲区。也就是说工件j在机器i上完成后,如果下一台机器i+1正在使用,那么工件j将被阻塞在机器i上,直到第i+1个机器空闲出来。一个工件不能同时由多台机器加工,一台机器也不能同时加工多个工件。已知工件在各机器上的加工时间。问题是如何安排各工件的生产次序,使得最大完成时间最小。

02
数学模型

(以下内容截自推文开头提到的参考书籍,潘老师的那本书。)

图片

图片

03
加工性能指标计算

最大完成时间(Cmax)是研究阻塞流水车间调度问题最常用的加工性能指标。Cmax通常有三种计算方法:前向计算法、反向计算法和双向计算法。

这里主要介绍前向计算法。(以下内容截自推文开头提到的参考书籍,潘老师的那本书。)其他计算方法也可以在这本书籍里查阅。

图片

图片

04
智能算法(GA、DBO等)编码方法

对于遗传算法(GA),因为其算法本身是离散的,通过选择、交叉、变异产生下一代。因此,一条染色体就代表一种调度方案。即工件的排序即是它的个体编码。例如,10个工件的排序方案,用MATLAB初始化GA的一个个体(一条染色体)就是:

x=randperm(10);

效果如下所示:

图片

但是对于粒子群优化(PSO)、麻雀搜索算法(SSA)、蜣螂优化(DBO)等,它们本身是针对连续优化问题提出的,所以在编码时需要经过进一步的处理。与GA一样,一个调度方案(工件排序)表示一个个体,可以采用SPV规则,将实数编码转成整数编码。例如,10个工件的排序方案,用MATLAB初始化DBO的一个个体(一条染色体)就是:

jobNum=10; % 工件数x=unifrnd(0,1,[1 jobNum]); % 产生10个[0,1]之间随机数os = 1:1:jobNum; % 产生从1到10的数列[~, up_index] = sort(x); % 对x进行降序排序, 得到位置序列x = os(up_index); % 按照位置序列排序工件, 得到一个调度方案

效果如下:

图片

此外,与SPV规则相反,Li等提出最大排序值法(Largest rank value, LRV),也是将连续值映射成离散排列常用的方法之一。如图2所示,LRV将代表种群个体的一组连续值按降序排列生成一组工件排序。(参考文献:[2] LI X, YIN M. An opposition-based differential evolution algorithm for permutation flow shop scheduling based on diversity measure [J]. Advances in Engineering Software, 2013, 55(8): 10-31.)

图片

图2 最大排序值法的表示方法

05
数值实验

这里对DBO求解BFSP的效果进行简单测试,调度问题算例选用Rec(21个)。最大迭代次数T设置为2000,种群规模NP设为60。下面展示的结果都是算法随机运行一次得到的结果。

首先,以Rec05(20工件×5机器为例),展示DBO随机运行一次的求解结果。图3绘制了种群每代的最优适宜度收敛曲线和平均适宜度收敛曲线:

图片

图3 DBO-BFSP对于Rec05的收敛曲线

图4绘制了调度结果的甘特图:

图片

图4 DBO-BFSP对于Rec05的甘特图

其次,以Rec11(20工件×10机器为例),展示DBO随机运行一次的求解结果,如图5和图6所示。

图片

图5 DBO-BFSP对于Rec11的收敛曲线

图片

图6 DBO-BFSP对于Rec11的甘特图

最后,以Rec41(75工件×20机器为例),展示DBO随机运行一次的求解结果,如图7和图8所示。

图片

图7 DBO-BFSP对于Rec41的收敛曲线

图片

图8 DBO-BFSP对于Rec41的甘特图

06
MATLAB代码

智能算法(GA、PSO、DE、GWO、SSA、DBO等)求解阻塞流水车间调度问题(blocking flow-shop scheduling problem, BFSP)的MATLAB代码,其中:main.m是主函数,直接运行即可;以算法简称命名的.m算法代码;gantt_chart.m用来绘制甘特图;objective.m是目标函数,即计算Makespan;method.pdf用来说明Makespan的计算方法,代码采用的是前向计算方法;Car.xlsx和Rec.xlsx是流水车间调度的两个经典测试集。

输出结果包括Makespan、工件排序、计算时间、最优适宜度收敛曲线、平均适宜度收敛曲线、甘特图。

博主挑选了十种算法来求解BFSP。主要是几种经典算法和几个近几年的高引算法。对应的MATLAB代码链接如下:

遗传算法(GA)求解BFSP关注公众号,里面有链接
差分进化(DE)求解BFSP关注公众号,里面有链接
粒子群优化(PSO)求解BFSP关注公众号,里面有链接
灰狼优化(GWO)求解BFSP关注公众号,里面有链接
鲸鱼优化算法(WOA)求解BFSP关注公众号,里面有链接
哈里斯鹰优化(HHO)求解BFSP关注公众号,里面有链接
麻雀搜索算法(SSA)求解BFSP关注公众号,里面有链接
非洲秃鹫优化算法(AVOA)求解BFSP关注公众号,里面有链接
蜣螂优化(DBO)求解BFSP关注公众号,里面有链接
星鸦优化算法(NOA)求解BFSP关注公众号,里面有链接
以上十种智能优化算法(GA、DE、PSO、GWO、WOA、HHO、SSA、AVOA、DBO、NOA)求解BFSP的全家桶关注公众号,里面有链接

可通过下方链接下载代码清单,在里面寻找需要的算法代码,然后去对应的链接获取。清单会同步更新,一旦有新的代码,就可以在清单里找到。清单里面有部分代码是开源获取的。可随时免费下载。

链接:https://pan.baidu.com/s/1SFDMplrL7tiqGZlrpOSGYg

提取码:8023

此外,欢迎添加算法交流群进行交流:912369858

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

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

相关文章

Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(二)

远控木马 SET 同时集成了木马生成工具,可以生成木马并调用MSF框架对远程主机进行控制。直接使用MSF生成木马并控制主机的可参考之前另一篇博文:渗透测试-Kali入侵Win7主机。 控制主机 1、运行 SET,选择创建攻击载荷和监听器: 2…

Topaz Video AI 视频修复工具(内附安装压缩包win+Mac)

目录 一、Topaz Video AI 简介 二、Topaz Video AI 安装下载 三、Topaz Video AI 使用 最近玩上了pika1.0和runway的图片转视频,发现生成出来的视频都是有点糊的,然后就找到这款AI修复视频工具 Topaz Video AI。 一、Topaz Video AI 简介 Topaz Video…

【C语言刷题每日一题#牛客网BC68】——X形图案

问题描述 思路分析 首先根据输入的描述&#xff0c;多组输入需要将scanf放在循环中来实现 #include<stdio.h> int main() {int a 0;while (scanf("%d", &a) ! EOF){} } 完成了输入之后&#xff0c;再来分析输出——输出的是一个由“*”组成的对称的X形…

力扣算法-Day10

160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 示例 1&#xff1a; 输入&#xff1a;intersectVal 8, listA [4,1,8,4,5], listB [5,6,1,8,4,5], skipA 2, s…

HarmonyOS - 基础组件绘制

文章目录 所有组件开发 tipsBlankTextImageTextInputButtonLoadingProgress 本文改编自&#xff1a;<HarmonyOS第一课>从简单的页面开始 https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667360160710997 所有组件 在 macOS 上&#xff0c;组…

基于Hexo+GitHub Pages 的个人博客搭建

基于HexoGitHub Pages 的个人博客搭建 步骤一&#xff1a;安装 Node.js 和 Git步骤二&#xff1a;创建Github Pages 仓库步骤二&#xff1a;安装 Hexo步骤三&#xff1a;创建 Hexo 项目步骤四&#xff1a;配置 Hexo步骤五&#xff1a;创建新文章步骤六&#xff1a;生成静态文件…

JAVA的拼图游戏

看好路径 MyActionListener public class MyActionListener implements ActionListener {Overridepublic void actionPerformed(ActionEvent e) {System.out.println("按钮被点击了");} }MyJFrame public class MyJFrame extends JFrame implements ActionListener…

研究论文 2022-Oncoimmunology:AI+癌RNA-seq数据 识别细胞景观

Wang, Xin, et al. "Deep learning using bulk RNA-seq data expands cell landscape identification in tumor microenvironment." Oncoimmunology 11.1 (2022): 2043662. https://www.tandfonline.com/doi/full/10.1080/2162402X.2022.2043662 被引次数&#xff1…

ubuntu20.04安装timeshift最新方法

总结&#xff1a; 现在可以使用如下代码安装 sudo apt-get update sudo apt-get install timeshift原因&#xff1a; 在尝试Timeshift系统备份与还原中的方法时&#xff0c; sudo apt-add-repository -y ppa:teejee2008/ppa运行失败。 更改为以下代码&#xff1a; sudo a…

使用ArcMap进行栅格数据矢量化

文章目录 题目流程1&#xff0c;打开ArcMap软件&#xff0c;加入练习数据到工作区2&#xff0c;定义投影3&#xff0c;地理配准4&#xff0c;开始绘制 题目 实验名称&#xff1a;栅格数据矢量化 实验目的及要求&#xff1a; 1. 掌握栅格数据矢量化预处理方法 2. 掌握矢量数据…

redis基本用法学习(C#调用FreeRedis操作redis)

FreeRedis属于常用的基于.net的redis客户端&#xff0c;EasyCaching中也提供适配FreeRedis的包。根据参考文献4中的说法&#xff0c;FreeRedis和CsRedis算是近亲&#xff08;都是GitHub中账号为2881099下的开源项目&#xff09;&#xff0c;因此其用法特别相似。FreeRedis的主要…

python(上半部分)

第一部分 1、input()语句默认结果是字符串 2、type()可以判断变量的类型 3、input()输出语句 &#xff08;默认为字符串类型&#xff09; 4、命名规则&#xff1a;中文、英文、数字、_&#xff0c;数字不可开头&#xff0c;大小写敏感。 5、 %s&#xff1a;将内容转换成…