先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。
主要参考资料:
[1] 潘全科, 高亮, 李新宇. 流水车间调度及其优化算法[M]. 武汉: 华中科技大学出版社, 2013.
加工对象一旦进入加工就不能中断,直到完成其所有操作,这就是零等待。例如,在钢铁生产的炼钢-连铸生产过程中,为实现热送热装的生产方式,减少钢液在空气中的温降,希望钢液在加工过程中零等待。图1(a)所示为一个3×3的零等待流水车间调度问题甘特图。由于工件加工零等待要求,当第一台机器加工完第一个工件时不能立即加工第二个工件,同理,第一台机器加工完第二个工件时也不能立即加工第三个工件。与图1(b)所示的置换流水车间调度相比,工件2和工件3的开工时间有所滞后。因此,零等待流水车间调度问题不同于一般的置换流水车间调度问题。
图1
这里讨论一下零等待流水车间调度问题(NWFSP)和零空闲流水车间调度问题(NIFSP)的区别:NIFSP主要是针对机器而言,机器一旦加工就不能空闲;NWFSP主要是针对工件而言,工件一旦开始被加工,就不能等待。
这里主要讨论以最大完工时间为优化目标的零等待流水车间调度问题(no-wait flow-shop scheduling problem, NWFSP),记为Fm|perm, no-wait|Cmax。研究表明,m≥3时,这类调度问题即为NP-Hard 问题。
NWFSP可描述为:n个工件在m台机器上加工,所有工件在各机器上的加工路线均相同。同时约定:某一时刻一个工件只能在一台机器上加工;一台机器在某一时刻只能加工一个工件;同一工件在相邻两道工序之间没有等待时间。每个工件在每,道工序的加工时间已知,问题是如何安排各工件的生产次序,使得调度指标最小。
02
数学模型
(以下内容截自推文开头提到的参考书籍,潘老师的那本书。)
最大完成时间(Cmax)是研究零等待流水车间调度问题最常用的加工性能指标。这里只介绍Cmax的一种计算方法:计算相邻工件之间的开工时间差,其时间复杂度为O(nm)。(以下内容截自推文开头提到的参考书籍,潘老师的那本书。)Cmax的其他计算方法也可以在这本书籍里查阅。
对于遗传算法(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 最大排序值法的表示方法
这里对DBO求解NWFSP的效果进行简单测试,调度问题算例选用Rec(21个)。最大迭代次数T设置为2000,种群规模NP设为60。下面展示的结果都是算法随机运行一次得到的结果。
首先,以Rec05(20工件×5机器为例),展示DBO随机运行一次的求解结果。图3绘制了种群每代的最优适宜度收敛曲线和平均适宜度收敛曲线:
图3 DBO-NWFSP对于Rec05的收敛曲线
图4绘制了调度结果的甘特图:
图4 DBO-NWFSP对于Rec05的甘特图
其次,以Rec11(20工件×10机器为例),展示DBO随机运行一次的求解结果,如图5和图6所示。
图5 DBO-NWFSP对于Rec11的收敛曲线
图6 DBO-NWFSP对于Rec11的甘特图
最后,以Rec41(75工件×20机器为例),展示DBO随机运行一次的求解结果,如图7和图8所示。
图7 DBO-NWFSP对于Rec41的收敛曲线
图8 DBO-NWFSP对于Rec41的甘特图
智能算法(GA、PSO、DE、GWO、SSA、DBO等)求解零等待流水车间调度问题(no-wait flow-shop scheduling problem, NWFSP)的MATLAB代码,其中:main.m是主函数,直接运行即可;以算法简称命名的.m算法代码;gantt_chart.m用来绘制甘特图;objective.m是目标函数,即计算Makespan;method.pdf用来说明Makespan的计算方法,代码采用的是计算相邻工件之间开工时间差的方法;Car.xlsx和Rec.xlsx是流水车间调度的两个经典测试集。
输出结果包括Makespan、工件排序、计算时间、最优适宜度收敛曲线、平均适宜度收敛曲线、甘特图。
这里选择了十种算法来求解NWFSP。主要是几种经典算法和几个近几年的高引算法。对应的MATLAB代码链接如下:
遗传算法(GA)求解NWFSP | 关注公众号,里面有链接 |
差分进化(DE)求解NWFSP | 关注公众号,里面有链接 |
粒子群优化(PSO)求解NWFSP | 关注公众号,里面有链接 |
灰狼优化(GWO)求解NWFSP | 关注公众号,里面有链接 |
鲸鱼优化算法(WOA)求解NWFSP | 关注公众号,里面有链接 |
哈里斯鹰优化(HHO)求解NWFSP | 关注公众号,里面有链接 |
麻雀搜索算法(SSA)求解NWFSP | 关注公众号,里面有链接 |
非洲秃鹫优化算法(AVOA)求解NWFSP | 关注公众号,里面有链接 |
蜣螂优化(DBO)求解NWFSP | 关注公众号,里面有链接 |
星鸦优化算法(NOA)求解NWFSP | 关注公众号,里面有链接 |
以上十种智能优化算法(GA、DE、PSO、GWO、WOA、HHO、SSA、AVOA、DBO、NOA)求解NWFSP的全家桶 | 关注公众号,里面有链接 |
可通过下方链接下载代码清单,在里面寻找需要的算法代码,然后去对应的链接获取。清单会同步更新,一旦有新的代码,就可以在清单里找到。清单里面有部分代码是开源获取的。可随时免费下载。
链接:https://pan.baidu.com/s/1SFDMplrL7tiqGZlrpOSGYg
提取码:8023
此外,欢迎添加算法交流群进行交流:912369858