种群进化+邻域搜索的混合算法(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.


相关文章
|
1月前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
2月前
|
机器学习/深度学习 算法 索引
单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA
本项目使用FW烟花优化算法求解单目标问题,并在MATLAB2022A中实现仿真,对比PSO和GA的性能。核心代码展示了适应度计算、火花生成及位置约束等关键步骤。最终通过收敛曲线对比三种算法的优化效果。烟花优化算法模拟烟花爆炸过程,探索搜索空间,寻找全局最优解,适用于复杂非线性问题。PSO和GA则分别适合快速收敛和大解空间的问题。参数调整和算法特性分析显示了各自的优势与局限。
171 11
|
2月前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
264 15
|
1月前
|
传感器 算法
基于GA遗传优化的WSN网络最优节点部署算法matlab仿真
本项目基于遗传算法(GA)优化无线传感器网络(WSN)的节点部署,旨在通过最少的节点数量实现最大覆盖。使用MATLAB2022A进行仿真,展示了不同初始节点数量(15、25、40)下的优化结果。核心程序实现了最佳解获取、节点部署绘制及适应度变化曲线展示。遗传算法通过初始化、选择、交叉和变异步骤,逐步优化节点位置配置,最终达到最优覆盖率。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真
本项目基于MATLAB 2022a,展示了SVM、PSO、GA-PSO-SVM在混沌背景下微弱信号检测中的性能对比。核心程序包含详细中文注释和操作步骤视频。GA-PSO-SVM算法通过遗传算法和粒子群优化算法优化SVM参数,提高信号检测的准确性和鲁棒性,尤其适用于低信噪比环境。
|
1天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
146 68
|
1月前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
2天前
|
传感器 算法 物联网
基于粒子群算法的网络最优节点部署优化matlab仿真
本项目基于粒子群优化(PSO)算法,实现WSN网络节点的最优部署,以最大化节点覆盖范围。使用MATLAB2022A进行开发与测试,展示了优化后的节点分布及其覆盖范围。核心代码通过定义目标函数和约束条件,利用PSO算法迭代搜索最佳节点位置,并绘制优化结果图。PSO算法灵感源于鸟群觅食行为,适用于连续和离散空间的优化问题,在通信网络、物联网等领域有广泛应用。该算法通过模拟粒子群体智慧,高效逼近最优解,提升网络性能。

热门文章

最新文章