种群进化+邻域搜索的混合算法(GA+TS)求解作业车间调度问题(JSP)-算法介绍

本文涉及的产品
全球加速 GA,每月750个小时 15CU
简介: 种群进化+邻域搜索的混合算法(GA+TS)求解作业车间调度问题(JSP)-算法介绍

过去小编简单了解过作业车间调度问题(JSP),这两个月简单接触了柔性车间调度问题(FJSP),但是因为一些原因打算暂时研究到这里。在研究的时候,小编发现网上这方面的中文资源不多,那么秉持着普度众生的原则,就在这里和大家分享一下最近研究的一些成果。

柔性作业车间调度问题介绍

之前我们曾经做过车间调度问题(JSP)的内容,相关可以看这篇文章:

这里再简单介绍一下FJSP:

集合表示一系列相互独立的工件,任一工件需要经过等一系列工序的加工方可完成,工序之间按照固定的加工顺序依次完成。集合表示可用的加工机器,表示工件的第道工序,可以在可用机器集合中的任意机器上进行加工。每道工序的加工时间与加工机器相关。

一道工序一旦开始加工,就不能中断。每台机器一次只能加工一道工序。在初始加工时刻,所有工件和机器都是可用的。

一般来说,该问题的目标是最小化Makespan,通常用L来表示,即从开始加工到所有工件加工完毕总的时长。

综上所述,柔性车间调度问题和车间调度问题相似,在此之上改变了一个条件:对JSP,每道工序只能在某个特定的机器上加工;对FJSP,工序可能有多个可加工的机器(且不同机器上加工时间不同)。

所以,FJSP不光要选择工序在机器上加工的顺序,还要选择在哪个机器上加工。这也意味着FJSP是比JSP更复杂的优化问题。

根据小编这段时间的研究,学术界目前比较常用的启发式求解算法是种群进化+邻域搜索混合算法,其中GA+TS是比较成熟的算法体系。接下来主要参考论文 An effective hybrid genetic algorithm and tabu search for flexible job shop scheduling problem 的算法,介绍论文里的混合算法HA,以及小编自己复现的代码。(代码和论文可在文末下载)

640.png算法总体的流程如上图所示,简单来说就是在GA的过程中,对每一个子代个体进行tabu search优化。下面小编分别对GA部分和TS部分进行讲解。

遗传算法部分

大家知道,不同的启发式算法在不同问题下效果会有很大的差别。过去小编在研究VRP问题时,GA的表现不是很好,编码、解码过程也相对复杂。但是GA在FJSP上表现的却非常优秀,因此大部分算法采取GA或类似GA的种群进化算法作为基础。仅仅是GA部分,已经可以以相当快的速度得到还算不错的解。

编码解码

FJSP的GA编码采取两行数字的方式。一串叫做OS(operation sequence),一串叫做MS(machine sequence)。之前我们提到过,求解FJSP需要做两个选择:工序加工顺序的选择;工序加工机器的选择。顾名思义,两串编码分别对应这两种选择。

图片

640.png上图是一个FJSP算例的编码和对应解。

表a代表算例。

640.png

算例中有三个工件需要加工,每个工件分别有两道工序(不同工件加工工序不一定一样多)。除了J3的工序T2(task)外,所有工序都可以在三台机器上加工,对应的加工时间如表a所示。

表b的OS String和MS String代表染色体编码。

OS 640.png

String中有N个数字(N代表总工序数),每一位数字代表一道工序对应的工件。简单的说,在decode的过程中,优先安排靠左的工件到对应机器上。同一数字出现的次数代表工件的第k道工序,例如第一个“1”代表O11,也就是J1T1。第二个“3”代表O31,J3T1。第三个“1”代表O12,J1T2。

MS String中也有N个数字,代表每个工件选择的机器。MS的顺序按照工件顺序排列,如图,J1、J2、J3都有2道工序,那么第一位数字“2”则代表O11,J1T1,需要安排在第二个可以加工的机器上。注意这里的数字不代表机器序号,代表的是可加工的机器。例如最后一位数字“2”,代表的不是machine2,因为J3T3无法在machine2上加工;它代表的是J3T3第二个可加工的机器,也就是machine3。

表c用甘特图表示了表b中编码解码出的一个可行解。

640.png

最基本的思路是按照OS的顺序,在甘特图中一个接一个填入工序。但这样做后你会发现,O22本应该出现在O12后面(在OS中第二个2出现在第二个1后面),但它却跑到了O12前面;但是,图中的解确实可行,而且优于我们之前的做法。这就涉及一个查找的过程,是decode中的一个优化。

这里介绍一下如何优化decode。首先,我们设定 (allowing starting time),代表Oij的在工序约束(必须在同一工件上一道工序结束后才能开始加工)下的最早允许开始时间;代表Oij的结束时间。则我们得到公式。

从第一道工序开始按OS的顺序,安排工序Oij:

  1. 计算
  2. 检查工序所在加工机器中的所有空闲时间区间。例如对O22而言,其所在加工机器M1中的空闲时间区间有一个:。
  3. ,则设置当前工序Oij的开始时间。其中表示Oij在机器k上加工的时间。
  4. 否则,检查下一个空闲时间区间。若所有区间都不满足,放置机器最后。
  5. 设置工序加工结束时间。

编码的过程则比较简单。MS编码自不用说,按顺序把机器需要排列好就行;OS编码论文中没提编码方法,小编觉得可以对所有工序直接按照starting time排序,再按规则填入数字即可。简单试验后发现,对一串染色体进行这样的解码编码后得到的染色体与原本的染色体是相同的。

除了编码解码外,其他交叉、变异、选择部分与一般的GA算法没有太大差别。对一串合法的OS序列,无论进行怎样的交换、插入运算,都可以解码成可行解。对MS序列,在同一工件范围内任意交换顺序,也可以保证得到可行解。所以后续处理相对常规。

下面我们分别介绍相关步骤。

初始解生成

初始解生成采用随机生成的方式。

交叉

OS

OS String介绍两种crossover方法,分别为POX(precedence operation crossover )和JBX(job-basedcrossover ),每次迭代分别以50%的概率选择其中一个实行。

先介绍POX。

640.png

记父代为P1,P2,子代为O1,O2。

  1. 将工件随机分配成两组,Jobset1和Jobset12;
  2. 将P1中属于JS1的部分插入O1相同位置处,将P2中属于JS1的部分插入O1相同位置处;
  3. 将P1中属于JS2的部分按顺序插入O1的空余位置中(如图所示),P2同。

JBX非常类似:

640.png

  1. 将工件随机分配成两组,Jobset1和Jobset12;
  2. 将P1中属于JS1的部分插入O1相同位置处,P2中属于JS2的部分插入O2相同位置中;
  3. 将P2中属于JS2的部分按顺序插入O1的空余位置中(如图所示),P1则插入O2中。

MS

640.pngMS更简单,随机选择两个位置,如图所示,属于范围内的P1部分放到O1中,不属于范围内的P2部分放到O1中;属于范围内的P2部分放到O2中,不属于范围内的P1部分放到O2中。

变异

OS

OS的变异有两种方法,交换式和邻域式。

640.png交换式即随机选择两点交换位置。

image.gif640.png

邻域式则是选择三个点,组成种情况,再随机选择其中一种。

选择

选择可以有多种方法。精英选择,锦标赛选择,轮盘赌选择。这里介绍论文里使用的前两种。(小编的代码中三种都有写)

精英选择:直接按适应度排序,取最优的几个。

锦标赛选择:每次随机选择k个子代(k一般在2~6之间,论文里采用k=2),选出其中最优的一个。

论文里采用精英选择+竞标赛选择的方法。

禁忌搜索算法部分

禁忌搜索算法部分是嵌套在GA中的。按原论文的说法,对每一代子代的每一个个体,都需要decode成可行解,然后运用禁忌搜索优化解,再编码回GA编码,进入下一代。(听起来就觉得时间复杂度蛮高的)

除了甘特图外,JSP / FJSP还有自己的一套表示解的方法,称为析取图。简单来说,就是把工序作为点,前后加工关系作为边,以此表示工序的加工顺序。

如前文所说,由于嵌套至每一个个体,算法的运行时间很容易爆炸,多写一个循环都会产生不可估量的后果。同时,原论文在这一部分没有很详细的描述,因此小编在复现这一部分的时候也没有处理的很好,来来回回写了多个Tabu Search。由于篇幅原因,这一部分暂时留到下期讲,后续应该还会对小编的代码进行简单讲解,请大家多多关注!

关于甘特图的画法,可以参照:

10分钟用Python或MATLAB制作漂亮的甘特图(Gantt)

参考

[1]Li, Xinyu , and L. Gao . "An effective hybrid genetic algorithm and tabu search for flexible job shop scheduling problem." International Journal of Production Economics 174.Apr.(2016):93-110.

[2]Zhang, Chao Yong , P. G. Li , and Y. R. Zailin Guan . "A tabu search algorithm with a new neighborhood structure for the job shop scheduling problem." Computers & Operations Research 34.11(2007):3229-3242.

[3]Mastrolilli, Monaldo , and L. M. Gambardella . "Effective Neighbourhood Functions for the Flexible Job Shop Problem." Journal of Scheduling 3.1(2015):3-20.

[4]Zhang, Guohui , L. Gao , and Y. Shi . "An effective genetic algorithm for the flexible job-shop scheduling problem." Expert Systems with Applications 38.4(2011):3563-3573.


相关文章
|
18天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
|
1月前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
该算法结合了遗传算法(GA)与分组卷积神经网络(GroupCNN),利用GA优化GroupCNN的网络结构和超参数,提升时间序列预测精度与效率。遗传算法通过模拟自然选择过程中的选择、交叉和变异操作寻找最优解;分组卷积则有效减少了计算成本和参数数量。本项目使用MATLAB2022A实现,并提供完整代码及视频教程。注意:展示图含水印,完整程序运行无水印。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真
本项目基于MATLAB 2022a,展示了SVM、PSO、GA-PSO-SVM在混沌背景下微弱信号检测中的性能对比。核心程序包含详细中文注释和操作步骤视频。GA-PSO-SVM算法通过遗传算法和粒子群优化算法优化SVM参数,提高信号检测的准确性和鲁棒性,尤其适用于低信噪比环境。
|
2月前
|
算法 决策智能
基于GA-PSO遗传粒子群混合优化算法的TSP问题求解matlab仿真
本文介绍了基于GA-PSO遗传粒子群混合优化算法解决旅行商问题(TSP)的方法。TSP旨在寻找访问一系列城市并返回起点的最短路径,属于NP难问题。文中详细阐述了遗传算法(GA)和粒子群优化算法(PSO)的基本原理及其在TSP中的应用,展示了如何通过编码、选择、交叉、变异及速度和位置更新等操作优化路径。算法在MATLAB2022a上实现,实验结果表明该方法能有效提高求解效率和解的质量。
|
2月前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
39 0
|
3月前
|
算法 调度
作业调度算法_先来先服务算法_短作业优先算法_高响应比优先算法
本文介绍了作业调度算法,包括先来先服务(FCFS)、短进程优先(SJF)和高响应比优先(HRRN)算法。通过分析进程的到达时间和所需CPU服务时间,计算进程的开始时间、完成时间、平均周转时间和平均带权周转时间,以评估不同算法的性能。FCFS适合长作业,SJF适合短作业,而HRRN则综合了两者的优点。
131 12
|
4月前
|
算法
算法设计与分析作业
这篇文章是关于算法设计与分析的作业,其中包含了两个算法实现:一个是使用分治算法实现的十进制大整数相乘(包括加法、减法和乘法函数),并进行了正确性和健壮性测试;另一个是使用快速排序思想实现的分治查找第K小元素的程序,并分析了其平均和最坏时间复杂度。
算法设计与分析作业
|
4月前
|
DataWorks 算法 调度
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
49 1
|
16天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
下一篇
DataWorks