改进的MOEA/D算法求解双目标模糊柔性作业车间调度问题
研究背景
智能制造,工业4.0这些使得调度问题备受关注,高效的生产调度是现代化制造的根基。传统的柔性作业车间调度中,加工时间是个固定值,而实际调度中加工时间是一个不确定的值,在一定时间区间内浮动。因此需要将加工时间模糊化处理。
三角模糊数
最后将加工时间模糊化的例子
模型建立和问题描述
问题描述
有个工件集合J有n个工件
J
1
,
J
2
,
.
.
.
,
J
i
,
.
.
.
,
J
n
J_1,J_2,...,J_i,...,J_n
J1,J2,...,Ji,...,Jn个工件每个工件有
O
i
,
1
,
O
i
,
2
,
.
.
.
,
O
i
,
j
,
.
.
.
O
i
,
θ
O_{i,1},O_{i,2},...,O{i,j},...O_{i,\theta}
Oi,1,Oi,2,...,Oi,j,...Oi,θ个工序,共有m台机器
M
1
,
M
2
,
.
.
.
,
M
k
,
.
.
.
,
,
M
m
M_1,M_2,...,M_k,...,,M_m
M1,M2,...,Mk,...,,Mm。每个工件的加工时间都是一个三角模糊数,每个工序都要分配一台加工机器且可以在多台机器中选择一台进行加工,每个机器可以加工多种工件的工序。柔性车间调度目的,给工件的工序安排一个调度顺序,并为每个工序安排一个机器,选择一个加工时间。后面是一些约束。
符号设置
模型建立
一个简单的甘特图
上面的三角是完工时间,下面的三角是开工时间,如果在0时刻开始为长方形,同一个工序是一样的颜色。每个工序的时间是个三角模糊数。
IMOEA/D算法
由于双目标模糊柔性作业车间调度问题是一个组合优化问题,是个NP难问题,不能穷举,所以得用智能优化算法,由于是多目标问题,得用多目标优化算法,选择分布性较好的MOEA/D算法。
编码解码
种群初始化
为了获得优质的初始化种群, 确保群体中个体的质量和群体多样性, 本文结合三种初始化策略: 局部加工时间最小原则~(Local minimum processing time rule, LS), 全局机器负载最小原则~(Global minimum workload rule, GW), 以及随机初始化原则~(Random), 提出了一种新的初始化策略, 即非支配解优先原则~(Non-dominated solution first rule, NDSF).
随机初始化原则: 具有高多样性特点, 工序码将工件$j$重复$n_j$次, 再重排整个向量. 机器码选择一个工序$O_{ij}$随机选择该工序的可选机器$M_{ij}$并存储到机器码;
局部加工时间最小原则: 根据模糊数比较原则, 每个工序$O_{ij}$选择当前可用机器$M_{ij}$中处理时间最小的;
全局机器负载最小原则: 根据模糊数比较原则, 每个工序$O_{ij}$选择当前可用机器$M_{ij}$中机器负载最小的, 如果有多个可选机器, 则选最小处理时间的;
非支配解优先原则: 执行LS和GW原则分别产生$Np$大小的两个种群
P
1
\mathbb{P}_1
P1,
P
2
\mathbb{P}_2
P2, 然后把两个种群合并. 对于合并种群中的个体利用快速非支配排序~(Fast non-dominated sorting)进行排序, 剔除其中适应值冗余的个体, 如果种群中剩余个体的数量大于~
N
p
Np
Np, 则选择前$Np$个个体作为初始父种群
P
\mathbb{P}
P; 否则, 采用随机初始化原则补齐剩余个体.
交叉变异
在2.1节中采用了双层编码的方式, 染色体中每个基因值都必须是整数, 同时染色体的结构需要满足两个约束: 1)在工序码中每个基因值表示工序号, 工序号 O i j O_{ij} Oij必须在 { 1 , … , N } \{1,\dots,N\} {1,…,N}~的范围内取离散的整数值, 且工序 O i j O_{ij} Oij~必须在染色体中重复出现 t t t次; 2)在机器码中每个基因值表示工序号 O i j O_{ij} Oij选择的机器 M k M_k Mk, 如表1所示有的工序如 O 12 O_{12} O12只能选择机器 M 1 , M 3 M_1,M_3 M1,M3, 当改变 O 12 O_{12} O12改变所选机器, 备选的机器号只能在 M 1 , M 3 M_1,M_3 M1,M3中变动. 在进行交叉操作时需要保证产生的新解依旧满足以上的两个约束. 而传统的交叉操作会将基因值变成实数域的小数值, 违背了上述约束, Gao~等提出了一种新的交叉策略, 将两个不同的染色体的基因一部分做保留, 一部分做交换. 同时不违背两个约束条件.
假设有四个工件
J
1
,
J
2
,
J
3
,
J
4
∈
J
J_1,J_2,J_3,J_4 \in \mathbb{J}
J1,J2,J3,J4∈J, 每个工件只加工一个工序, 每个工件号
J
i
J_i
Ji在染色体中只出现一次, 工序码交叉操作的具体步骤如下:
变领域搜索
为了增加算法的后期收敛能力, 设计了结合五种邻域动作的变邻域搜索(Variable neighborhood search, VNS). 选取一个解
x
\mathbf{x}
x, 采用邻域动作
N
S
i
,
i
∈
{
1
,
2
,
3
,
4
,
5
}
NS_i, i\in \{1,2,3,4,5\}
NSi,i∈{1,2,3,4,5}在解
x
\mathbf{x}
x的附近局部搜索, 产生两个邻域解
x
′
\mathbf{x}'
x′,
x
′
′
\mathbf{x}''
x′′. 五个局部搜索一共产生十个邻域解, 对于所有邻域解进行评估, 如果有解可以更新参考点则更新当前参考点. 随后根据1.2节中的模糊数比较原则, 选取当前邻域解中适应值最好的个体
x
l
b
e
s
t
\mathbf{x}_{lbest}
xlbest, 采用聚合函数的评价方式, 如果
x
l
b
e
s
t
\mathbf{x}_{lbest}
xlbest优于
x
\mathbf{x}
x则替换
x
\mathbf{x}
x. 五种邻域动作描述如下:
邻域动
N
S
1
NS_1
NS1: 找到所有工序中最后一个完成的工序
O
f
i
n
a
l
O_{final}
Ofinal, 如果该工序有多个备选机器, 则替换备选机器中处理时间最小的那个.
邻域动作
N
S
2
NS_2
NS2: 在所有工序中随机选择一个工序
O
i
j
O_{ij}
Oij, 如果该工序有多个备选机器, 则替换备选机器中处理时间最小的那个.
邻域动作
N
S
3
NS_3
NS3: 找到负载最大的机器
M
m
a
x
M_{max}
Mmax, 在所有
M
m
a
x
M_{max}
Mmax~上加工的工序中随机选择工序
O
i
j
O_{ij}
Oij, 在该工序的备用机器中随机选择一个替换.
邻域动作
N
S
4
NS_4
NS4: 随机选择两个工序
O
i
j
O_{ij}
Oij和
O
i
j
′
O_{ij}'
Oij′, 交换两个工序在工序码中的位置.
邻域动作
N
S
5
NS_5
NS5: 随机选择两个工序
O
i
j
O_{ij}
Oij和
O
i
j
′
O_{ij}'
Oij′, 将
O
i
j
′
O_{ij}'
Oij′插入到
O
i
j
O_{ij}
Oij前一个位置.
实验部分
测试集
(D1-D4)LEI D M. Co-evolutionary genetic algorithm for fuzzy flexible job
shop scheduling. Applied Soft Computing, 2012, 12, 2237-224.
(D5)LEI D M. A genetic algorithm for flexible job shop scheduling with fuzzy processing time. International Journal of Production Research,
2010, 48 , 2995-3013
(R1-R8)GAO K Z, SUGANTHAN P N, PAN Q K, et al. An effective discrete harmony search algorithm for flexible job shop scheduling problem with fuzzy processing time. International Journal of Production Rersearch, 2015, 53, 5896-5911
实验指标
参考WHILE L, HINGSTON P, BARONE L, et al. A faster algorithm for calculating hypervolume. IEEE Transactions on Evolutionary Computation, 2006, 10(1):29-38
为了对比六个算法所获得
P
F
PF
PF的收敛性和分布性, 选用超体积度量(Hypervolum, HV)公式如下:
H V ( P , r ) = ⋃ x ∈ P P v ( x , r ) . HV(P,r)=\bigcup_{\mathbf{x} \in P}^{P} v(\mathbf{x} ,r). HV(P,r)=⋃x∈PPv(x,r).
P P P为算法求得的 P F PF PF, r r r~为该解集的参考点, r = ( 1 , 1 ) r=(1,1) r=(1,1) , x = ( f 1 − f 1 m i n f 1 m a x − f 1 m i n , f 2 − f 2 m i n f 2 m a x − f 2 m i n ) \mathbf{x} =(\frac{f_1-f_{1min}}{f_{1max}-f_{1min}},\frac{f_2-f_{2min}}{f_{2max}-f_{2min}}) x=(f1max−f1minf1−f1min,f2max−f2minf2−f2min), v v v表示在 P F PF PF上的点 x \mathbf{x} x与 r r r坐标围成的超立方体的体积, H V HV HV将 P F PF PF上各个点 x \mathbf{x} x和参考点 r r r围成超立方体的体积 v v v求并集, 即 P P P与 r r r组成的不规则超立方体的总体积. H V HV HV适用于在不知真实 P F PF PF前沿的情况, 度量统一坐标系下解的分布性和收敛性. HV的值越大, 算法性能越好
对比实验结果
源码下载
源码下载链接
https://github.com/CUGLiRui/BFFJSP
源码进不去github的可以去我的主业下载
我的主业