[1-20241031]基于分层作业优先约束的柔性作业车间调度问题

参考文献

[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个作业组 G={G_1, G_2, ..., G_{gn}}和一组mn台机器M={M_1, M_2, ..., M_{mn}} 。作业组 G_i负责制造一种最终产品,由j_{n_i}个多级作业J_{​{i,j_1}},J_{​{i,j_2}}, ...,J_{​{i,j_{n_i}}} 组成,这些作业对应于树状结构的BOM(物料清单)。作业 J_{​{i,j}}负责生产一种中间产品,并由on_{​{i,j}}个连续操作 O_{​{i,j,1}},O_{​{i,j,2}}, ...,O_{​{i,j,on_{i,j}}}组成,这些操作按照工艺路线进行。操作O_{​{i,j,k}}必须在一组备选机器AM_{​{i,j,k}}中选定的机器上进行加工。与传统的FJSSP不同,每个作业组内的所有作业都连接在一个层次化的作业优先级树中,同时每个作业内的操作都连接在一个线性的操作序列中。  

   

调度问题可以分解为两个子问题:(1)为每个操作分配适当的机器;(2)在每台机器上排序已分配的操作。

此外,针对这个问题考虑了以下假设:

  1. 每个操作必须不间断地加工。

  2. 所有机器在时间零时可用,所有作业在时间零时释放。

  3. 操作之间的运输时间和机器的设置时间可以忽略不计。

 问题模型

符号说明

符号说明
符号描述
G_{i}第i个工件组
J_{i,j}工件组G_{i}的第j个工件
O_{i,j,k}工件J_{i,j}的第k个操作
M_{l}第l台机器
gn工件组的数量
jn_{i}工件组G_{i}的工件数量
on_{i,j}工件J_{i,j}的操作数
mn机器数量
pt_{i,j,k,l}操作O_{i,j,k}在机器M_{l}上的处理时间
ma_{i,j,k,l}操作O_{i,j,k}能否在机器M_{l}上处理,是为1,否则0
AM_{i,j,k}操作O_{i,j,k}的候选机器集合
jp_{k,m,n}工件J_{k,m}J_{k,n}的紧前工件时为1,否则为0
PJ_{i,j}工件J_{i,j}的所有前序工件集合
Index(O_{i,j,k})=k+\sum_{p=1}^{j-1}on_{i,p}+\sum_{q=1}^{i-1}\sum_{p=1}^{jn_{q}}on_{q,p}操作O_{i,j,k}的固定ID
on_{i}=\sum_{p=1}^{jn_{i}}on_{i,p}工件组G_{i}的总工序数
on=\sum_{q=1}^{gn}\sum_{p=1}^{jn_{q}}on_{q,p}全部工件组总工序数
X_{i,j,k,l}操作O_{i,j,k}是否在机器M_{l}上处理的决策变量,是1,否0
Y_{i,j,k,r,s,t}O_{i,j,k}O_{r,s,t}相同机器上的紧前工序,1;后继工序,-1;否则0
st_{i,j,k}O_{i,j,k}的开始时间
et_{i,j,k}O_{i,j,k}的结束时间
et_{i,j}工件J_{i,j}的结束时间

目标函数及约束

(1)目标函数:最小化最大完工时间

Minimaze f=max(et_{i,j,k}|i=1,2,...,gn;j=1,2,...,jn_{i};k=1,2,...,om_{i,j})

(2)约束条件:

计算操作和作业的结束时间:

et_{i,j,k}=st_{i,j,k}+\sum_{l=1}^{mn}X_{i,j,k,l}pt_{i,j,k,l},\forall O_{i,j,k}

et_{i,j}=et_{i,j,on_{i,j}},\forall J_{i,j}

定义操作优先级约束,并确保在前一个操作完成之前不能启动后一个操作:

st_{i,j,k}\geqslant et_{i,j,k-1},\forall(O_{i,j,k-1},O_{i,j,k})

定义作业优先级约束,并确保后续作业不能在其先例作业完全完成之前启动:

st_{i,j,1}\geqslant et_{i,m}jp_{i,m,j},\forall(J_{i,j},J_{i,m})

描述必须在给定的替代机器上处理每个操作:

X_{i,j,k,l}\leqslant ma_{i,j,k,l},\forall(O_{i,j,k},M_{l})

描述每个操作必须在一台且只能一台机器上处理:

\sum_{l=1}^{mn}X_{i,j,k,l}=1,\forall O_{i,j,k}

保证每台机器每次只处理一个操作,即两个相邻操作的处理时间段不能重叠:

(st_{i,j,k}-et_{r,s,t})X_{i,j,k,l}X_{r,s,t,l}Y_{i,j,k,r,s,t}(Y_{i,j,k,r,s,t}-1)+(st_{r,s,t}-et_{i,j,k})X_{i,j,k,l}X_{r,s,t,l}Y_{i,j,k,r,s,t}(Y_{i,j,k,r,s,t}+1)\geqslant 0,\forall(O_{i,j,k},O_{r,s,t},M_{l})

描述相同机器上的两个工序:

Y_{i,j,k,r,s,t}+Y_{r,s,t,i,j,k}=0,\forall (O_{i,j,k},O_{r,s,t})

模型求解

对于车间调度的复杂模型,一般采用遗传算法进行求解。需要根据特定问题设计编码解码、种群初始化、交叉变异方式。

编码与解码

设计一种合适的基于分层作业优先约束的柔性作业车间调度问题编码方案的关键和难点在于同时满足混合约束,特别是树结构作业优先约束。本文提出了一种由作业测序向量(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代码进行更新...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值