参考文献
[1] Zhu Z, Zhou X. An efficient evolutionary grey wolf optimizer for multi-objective flexible job shop scheduling problem with hierarchical job precedence constraints[J]. Computers & Industrial Engineering, 2020, 140: 106280.
问题描述
简要来说,基于分层作业优先约束的柔性作业车间调度问题可以描述如下:存在一组gn个作业组 和一组mn台机器
。作业组
负责制造一种最终产品,由
个多级作业
组成,这些作业对应于树状结构的BOM(物料清单)。作业
负责生产一种中间产品,并由
个连续操作
组成,这些操作按照工艺路线进行。操作
必须在一组备选机器
中选定的机器上进行加工。与传统的FJSSP不同,每个作业组内的所有作业都连接在一个层次化的作业优先级树中,同时每个作业内的操作都连接在一个线性的操作序列中。
调度问题可以分解为两个子问题:(1)为每个操作分配适当的机器;(2)在每台机器上排序已分配的操作。
此外,针对这个问题考虑了以下假设:
-
每个操作必须不间断地加工。
-
所有机器在时间零时可用,所有作业在时间零时释放。
-
操作之间的运输时间和机器的设置时间可以忽略不计。
问题模型
符号说明
符号 | 描述 |
第i个工件组 | |
工件组 | |
工件 | |
第l台机器 | |
工件组的数量 | |
工件组 | |
工件 | |
机器数量 | |
操作 | |
操作 | |
操作 | |
工件 | |
工件 | |
操作 | |
工件组 | |
全部工件组总工序数 | |
操作 | |
工件 |
目标函数及约束
(1)目标函数:最小化最大完工时间
(2)约束条件:
计算操作和作业的结束时间:
定义操作优先级约束,并确保在前一个操作完成之前不能启动后一个操作:
定义作业优先级约束,并确保后续作业不能在其先例作业完全完成之前启动:
描述必须在给定的替代机器上处理每个操作:
描述每个操作必须在一台且只能一台机器上处理:
保证每台机器每次只处理一个操作,即两个相邻操作的处理时间段不能重叠:
描述相同机器上的两个工序:
模型求解
对于车间调度的复杂模型,一般采用遗传算法进行求解。需要根据特定问题设计编码解码、种群初始化、交叉变异方式。
编码与解码
设计一种合适的基于分层作业优先约束的柔性作业车间调度问题编码方案的关键和难点在于同时满足混合约束,特别是树结构作业优先约束。本文提出了一种由作业测序向量(JSV)、分组操作测序向量(GOSV)和机器分配向量(MAV)三个部分组成的新的编码方案。所有这三个向量都是整数数组,其大小等于所考虑的操作的总数。
此外,基于二叉树对分组操作向量进行修复,消除了对作业优先级约束的违反。
以此可以得到调度方案:
在解码过程中,通过根据编码的向量确定其指定机器上的每个操作的特定开始时间和结束时间,可以得到真实的调度计划。
种群初始化
采用随机方式:(1)对初始工件向量[1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2]进行随机排序;(2)对分组操作向量的每一个分组随机排列,([1 1 1 2 2 3 3 4 4 5 5]和[1 1 2 2 3 3]);(3)为每一个操作随机选择一个可用机器。
交叉
(1)分组工件向量:
(2)分组操作向量:
与(1)分组工件向量交叉错操作类似,对每一个工件组序列分别进行交叉。
(3)机器分配向量:
随机选择n个交叉点,交换父代染色体对应位置的机器选择。
变异
(1)分组工件向量:
随机选择两个基因位置,交换染色体编码。重复多次。
(2)分组操作向量:
与(1)分组工件向量变异错操作类似,对每一个工件组序列分别进行变异。
(3)机器分配向量:
随机选择1个变异点,从候选机器集合中重新选择一个可以用机器。重复多次。
遗传算法流程
步骤1:初始化参数
步骤2:初始化种群
步骤3:评价种群
步骤4:选择操作
步骤5:交叉操作
步骤6:变异操作
步骤7:评价子种群
步骤8:子种群+父代种群,精英选择1
步骤9:终止判断。满足终止条件,输出最优解;否则转到步骤4。
MATLAB代码实现
代码更新中...
下期将对MATLB代码进行更新...