智能算法(GA、DBO等)求解零空闲流水车间调度问题(NIFSP)

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

本期的主要参考资料:

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

不允许机器停止运转,这就是所谓的零空闲调度问题。图1(a)所示为一个3×3的零空闲流水车间调度问题的甘特图,由于机器连续运转的要求,当第一个工件到达机器2时,该机器并不能立即开工。与图1(b)所示的置换流水车间调度相比,机器2的开工时间有所滞后。因此,零空闲流水车间调度问题不同于一般的置换流水车间调度问题。

图片

图1

01
问题描述

这里主要考虑以最大完成时间为优化目标的零空闲流水车间调度问题(no-idle flow-shop scheduling problem, NIFSP),记为Fm|perm, no-idle|Cmax。当m≥3时,这类调度问题就是NP-Hard 问题。

Fm|perm, no-idle|Cmax问题可描述为:有n个工件按照相同的工艺路线在m台机器上加工,约定所有机器上工件的加工次序都相同,要求在同一机器上加工的相邻两工件之间没有空闲时间。假设机器之间存在无限大的缓冲区,一个工件不能同时由多台机器加工,一台机器也不能同时加工多个工件。已知工件在各机器上的加工时间。问题是如何安排各工件的生产次序,使得最大完成时间取值最小。

02
数学模型

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

图片

图片

03
加工性能指标计算

最大完成时间(Cmax)是研究零空闲流水车间调度问题最常用的加工性能指标。NIFSP的最大完工时间有五种计算方法,其时间复杂度均为O(nm)。

方法一:计算机器之间的开工时间差

方法二:Kalezynski和Kamburowski方法(转化为F2|perm|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求解NIFSP的效果进行简单测试,调度问题算例选用Rec(21个)。最大迭代次数T设置为2000,种群规模NP设为60。下面展示的结果都是算法随机运行一次得到的结果。

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

图片

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

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

图片

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

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

图片

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

图片

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

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

图片

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

图片

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

06
MATLAB代码

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

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

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

遗传算法(GA)求解NIFSP

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

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

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

提取码:8023

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

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

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

相关文章

android 简单实现圆角,Android 实现圆角图片的简单实例

Android 实现圆角图片的简单实例实现效果图:本来想在网上找个圆角的例子看一看,不尽人意啊,基本都是官方的Demo的那张原理图,稍后会贴出。于是自己自定义了个View,实现图片的圆角以及圆形效果。效果图:Andr…

zookeeper介绍及集群的搭建(利用虚拟机)

ZooKeeper ​   ZooKeeper是一个分布式的,开放源码(apache)的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase、dubbox、kafka的重要组件。它主要用来解决分布式集群中应用系统的一致性问题…

标准库类型String

定义和初始化string对象 初始化string对象方式 string s1 默认初始化,s1是一个空串 string s2(s1) s2是s1的副本 string s2 s1 等价于s2(s1), s2是s1的副本 string s3("value") s3是字面值"value"的副本,除了字面值最后的那个…

轻量级数据库中间件利器Sharding-JDBC深度解析(有彩蛋)

讲师介绍张亮 当当架构部总监 负责分布式中间件和私有云平台建设 目前主导开源项目:Elastic-Job及Sharding-JDBC 主题简介: 1、关系型数据库中间件核心功能介绍 2、Sharding-JDBC架构及内核解析 3、Sharding-JDBC未来展望 一、关系型数据库中间件核心功…

const 常量_条款03:尽可能使用const

const 允许你指定一个语义约束(也就是指定一个“不该被改动”的对象),而编译器会强制实施这项约束。1、const指针如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量&…

javascript高级程序设计---js事件思维导图

绘制思维软件与平时用的笔记,以及导出功能,这三个问题综合起来,于是我把思维导图分开画 1、js事件的基本概念 2、js事件的事件处理程序 3、js事件的事件对象 转载于:https://www.cnblogs.com/Jamie1032797633/p/10567419.html

和 Thrift 的一场美丽邂逅

一. 与 Thrift 的初识 也许大多数人接触 Thrift 是从序列化开始的。每次搜索 “java序列化” “方式”、“对比” 或 “性能” 等关键字时,搜索引擎总是会返回一大堆有关各种序列化方式的使用方法或者性能对比的结果给你,而其中必定少不了 Thrift&#…

弹出框 每次打开 滚动条置顶_微信置顶文字怎么弄?微信置顶一句话教程

今日支付宝红包支付宝首页搜索511501453马上领取红包(支付宝双十二活动,瓜分15亿红包)(领取后一定要记得使用,不然会浪费的呦,更会影响第二天的领取!)奶思靓机“ 一 个 有 用 的 公 众 号 の ”嗨,最近很流行在微信上面…

python 3 面向过程编程

python 3 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就像设计好一条工业流水线,是一种机械式的思维方式。 1、优点:程序结构清晰,可以把复杂的问题简单化&…

在ionic/cordova中使用百度地图插件

在ionic项目中,如果想实现定位功能,可以使用ng-cordova提供的cordova-plugin-geolocation。 但由于高墙的缘故,国内andorid环境下,此插件不起作用(ios环境下可用)。 国内比较好的是现实使用百度地图提供的A…

汉诺塔问题递归算法python代码_[python]汉诺塔问题递归实现

一、问题描述及算法步骤 汉诺塔问题的大意是有三根柱子a, b, c,现在a柱有N个盘子从下往上尺寸递减排列,要求: 1. 将a上的盘子移动到c柱上; 2. 每次移动一个盘子; 3. 柱子上的盘子始终必须是大的在下面image.png 汉诺塔问题的经典实现算法步骤…

plsql 批量调存储过程_数控双端开榫机:批量铣榫头真牛气

数控双端开榫机主要用于实木家具批量化铣榫头专用,因为其本身的优势逐渐被家具厂老板们所接受,是目前家具生产不可缺少的一款自动化设备,给企业节约了生产成本,今天又焦峰小编来给大家讲解一下。主要技术参数:知乎视频…

python时间差怎么转换为数字_pandas进行时间数据的转换和计算时间差并提取年月日...

#pd.to_datetime函数 #读取数据 import pandas as pd data pd.read_csv(police.csv) #将stop_date转化为datetime的格式的dataframe,存到stop_datetime data[stop_datetime] pd.to_datetime(data.stop_date) #自定义一个时间,计算时间差 data_new pd.…

人脸识别html5效果,用HTML5实现人脸识别

注:今天 HTML5 小组沙龙《论道 HTML5 》分享时有朋友问到一个问题, getUserMedia 是否会支持人脸识别,我当时的答案是这应该是应用来实现的功能,而不是规范要完成的工作。而我之前在网上看到过一篇关于 getUserMedia 和人脸识别的…

华为mate40会不会有鸿蒙系统,鸿蒙OS系统正式推送,拿华为Mate40更新后,发现了优缺点...

自从鸿蒙系统正式推送之后,笔者一直都带着好奇心在体验着HarmonyOS 2带来的变化,生怕错过惊喜,也担心系统本身会出现不足。因为鸿蒙系统就像是年轻人一样,才刚刚出炉,需要时间去磨练,然后才能发挥出真正强大…

jstack使用

jstack主要用来查看某个Java进程内的线程堆栈信息,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多,语法格式如下: jstack [option] pid jstack [option] executable core jstack [option] [server-id]rem…

删除目录软链接注意事项

2019独角兽企业重金招聘Python工程师标准>>> 实验环境: 在root 目录下创建一个目录 1 ,并在该目录下创建一个2.txt 的文件,写入内容 1.txt: [rootserver ~]# mkdir 1 [rootserver ~]# echo 1.txt > 1/2.txt [rootserver ~]# tree 1 1 └─…

html如何模拟点击,Javascript 模拟点击事件(点击链接与html点击) 兼容IE/Firefox

一把情况下模拟点击一般两个方面,模拟点击超级连接事件firefox的兼容的函数为对HTMLAnchorElement 加入onclick事件try {// create a element so that HTMLAnchorElement is accessibledocument.createElement(a);HTMLElement.prototype.click function () {if (ty…

mvn编写主代码与测试代码

maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包。默认情况下,Maven假设项目主代码位于src/…

打印速度快点的打印机_SLM推出了功能强大的新型金属3D打印机,速度快20倍

德国金属3D打印机制造商SLM Solutions在Formnext Connect贸易展览会上推出了功能强大的新系统NXG XII 600。SLM的大幅面机器配备了十二个可同时运行的1 KW激光器,使其速度比该公司自己的单激光SLM 280快20倍。NXG XII 600经过定制设计,可大量生产大型零件…