发明内容
本发明的目的是提供一种基于改进NSGA-Ⅱ算法求解柔性作业车间节能调度问题的方法,从完工时间、总延期时长、设备总负荷和***总能耗四个方面,给生产企业提供一种更优的调度方案。
本发明所采用的技术方案是,基于改进NSGA-Ⅱ算法求解柔性作业车间节能调度问题的方法,具体按照以下步骤实施:
步骤1、构建柔性作业车间节能调度问题模型:包括柔性作业车间节能调度问题描述、模型假设;
步骤2、采用基于自然数两段式编码,两段式编码分别为工序码和设备码;采用随机方式生成规模为2N的初始调度解集,即第一代种群R1;设置算法参数:当前迭代次数t,最大迭代次数tmax,交叉概率PN,变异概率PM;
步骤3、对初始种群R1,通过快速非支配排序构造非支配解集F1,F2...Fi、拥挤度距离计算以及精英选择生成第二代父代种群P2,规模为N;
步骤4、对父代种群P2中的个体进行交叉、变异操作,生成交叉子代种群Q2;
步骤5、对父代种群P2中的所有个体计算稀疏度,找出稀疏解S*,并对稀疏解S*执行局部搜索操作,从而生成局部搜索子代种群G2;
步骤6、将父代种群P2、交叉子代种群Q2、局部搜索子代种群G2合并,得到新种群R2;
步骤7、对新种群R2进行快速非支配排序、拥挤度距离计算以及精英选择,生产下一代父代种群P3;
步骤8、判断是否满足终止条件,若不满足,则执行步骤4;若满足则执行步骤9;
步骤9、利用加权法,从最优解集F1中选出一个解作为最优妥协解,并输出。
本发明的特点还在于,
步骤1中柔性作业车间节能调度问题描述如下:
n个工件在m台设备上加工,每个工件有一道或多道工序,每道工序可在不同的设备上加工,但不同设备加工同一工序的时间不同,调度内容即是在满足约束条件的前提下,将工件的各道工序合理地安排给各台设备,以实现最大完工时间、最小总延期时长、最小设备总负荷和最小***总能耗;
模型假设具体如下:
一台设备一次只能加工一个工件;
设备开始加工中途不可停止;
同一工件的工序加工有先后之分,即后道工序只有在前道工序加工完才可以加工;
不同工件没有先后约束;
设备空闲时不停机;
设备加工前的准备时间以及加工过程中工件的装载和卸载时间均不考虑;
包括设备故障、任务加急在内的紧急情况均不考虑。
步骤1中柔性作业车间节能调度问题模型构建具体如下:
J
i表示工件i的总工序数;
表示工件i的完工时间;n表示工件总数;T
i表示工件i的交货期;t
ijk表示工件i的第j道工序在设备k上的加工时间;x
ijk为0-1变量,如果工件i的第j道工序在设备k上的加工,则x
ijk=1,否则x
ijk=0;M表示车间单位时间的固定能耗;λ
k表示设备k加工时单位时间的平均能耗;CT
k表示设备k的完工时间;θ
k表示设备k空载时单位时间的平均能耗;α表示车间内工件的转移能耗;Z表示车间工件的转移次数;
目标函数构件如下:
其中,公式(1-1)表示最大完工时间最小的目标函数;公式(1-2)表示总延期时长最小的目标函数;公式(1-3)表示设备总负荷最小的目标函数;公式(1-4)表示***总能耗最小的目标函数,***总能耗又包括固定能耗、加工能耗、空载能耗以及转移能耗。
步骤3具体按照以下步骤实施:
步骤3.1、快速非支配排序:
给每个个体y(i)设置两个参数ni和Si,ni为种群其他支配个体y(i)的个体数量,Si为被个体y(i)支配的其他个体的集合,当个体y(i)的所有目标值比个体y(j)对应的目标值都优时,定义个体y(i)支配个体y(j),否则个体y(i)不能支配个体y(j);
每个个体的参数设置完后,首先把种群中所有ni=0的个体y(i)存入集合F1中,然后观察集合F1中每个个体的Si,将集合Si中的每个个体y(j)的nj减1,nj为种群其他支配个体y(j)的个体数量,再把所有nj-1=0的个体y(k)存入集合F2中,继续对F2重复这一操作,直到所有个体都被划入相应集合Fi中,最后将Fi中的所有个体赋予非支配等级ri;
步骤3.2、拥挤度距离计算:
用P(i)distance表示个体y(i)的拥挤度距离,P(i).m表示个体y(i)在目标m上的函数值;
当问题为单目标时,个体y(i)的拥挤度距离表示为:
P(i)distance=P(i+1).f1-P(i-1).f1 (3-1)
当问题为多目标时,个体y(i)的拥挤度距离表示为:
对个体拥挤度距离作归一化处理,即:
对于边界个体,即在某个目标上最小值或最大值对应的个体,拥挤度距离为无穷大;
步骤3.3、精英选择:
从第一代种群R1中选取部分个体生成下一代父代种群P2,选择时,优先选择非支配等级ri低的个体,当非支配等级ri相同时,选取拥挤度距离P(i)distance大的个体。
步骤4具体按照以下步骤实施:
步骤4.1、工序交叉:
(1)创建两个子集,子集S1和子集S2;
(2)从工件集中随机选取几个工件序号放入子集S1中,再将其他工件序号放入子集S2;
(3)从父代种群P2中随机选择父代个体L1,L2,将S1中的工件,复制L1到子代C1,将S2中的工件,从父代L2复制到子代C2,保持位置不变;
(4)将S2中的工件,从父代L2复制到子代C1,将S1中的工件,从父代L1复制到子代C2,保持顺序不变;
步骤4.2、设备交叉:
(1)创建四个子集K1,K2,K3,K4;
(2)从父代种群P2中随机选择父代个体L1,L2,从设备码或工序码的位置序列中随机选取几个位置放入子集K1,将剩余序列放入K2中;
(3)将L1中K2对应的值复制给子代C1,将L2中K1对应的值复制给子代C2,保持位置不变;
(4)将父代L1中与K1对应的工序码,在父代L2的工序码中找见,并将其位置序列放入K3,再将父代L2中其余位置序列放入K4;
(5)将父代L2中K3对应的值复制给子代C1中K1对应的值,将父代L1中K1对应的值复制给子代C2中K3对应的值,保持顺序不变;
步骤4.3、变异分为互换变异、***变异和倒序变异,具体如下:
步骤4.3.1、互换变异,即在工序码中随机选择两个不同的位置e1和e2,并将这两个位置对应的元素进行交换;
步骤4.3.2、***变异,即在工序码中随机选择两个不同的位置e1和e2,将e2对应的元素***到e1前面;
步骤4.3.3、倒序变异,即在工序码中随机选择两个不同的位置e1和e2,将这两个位置之间的元素进行倒序排列。
步骤5具体按照以下步骤实施:
步骤5.1、在父代种群P2中,计算所有个体稀疏度SP(xi),找出稀疏解S*,具体如下:
先对个体的目标函数值作归一化处理,即:
其中,fjmax、fjmin分别为种群中第j个目标函数值的最大值和最小值;
计算每个个体与其他个体的欧式距离,欧式距离计算公式如下:
计算每个个体稀疏度,稀疏度计算公式如下:
其中,zi为个体i与其他个体的欧氏距离小于r的个数,r为欧氏距离判断阈值,其的取值范围为0<r<1;H为种群中个体的数量;
最后,稀疏度SP(xi)最小的个体定义为稀疏解S*;
步骤5.2、对稀疏解S*执行局部搜索操作,具体如下:
本文局部搜索算法中,共有三种邻域结构,每次迭代时等概率选择N1∪N3和N2∪N3其中一种来执行局部搜索操作,邻域结构具体如下:
领域结构N1:在工序排序部分的码段中任选两个元素,将选中的两个元素进行位置交换操作;
领域结构N2:在工序排序部分的码段中任选两个元素,将选中的两个元素中位置靠前的元素***到位置靠后的元素后面的的位置;
领域结构N3:在机器分配部分的码段中任选一个元素,该元素的可加工设备数量大于1台,然后将该元素的对应加工设备变为其他可选设备。
步骤9中从非支配解集F1选出最优妥协解采用的方法为加权法,具体步骤如下:
步骤9.1、采用[0,1]线性变换算子将所有非支配解集F1中的个体对应的子目标函数值进行无量纲化处理;
步骤9.2、通过Delphi法确定每一个子目标的权重,对非支配解集F1中所有个体的目标函数值进行加权求和,选择加权和最小的解作为最优妥协解。
本发明的有益效果是,基于改进NSGA-Ⅱ算法求解柔性作业车间节能调度问题的方法,NSGA-Ⅱ算法是一种专门求解多目标问题的算法,由于其特性,不需要将多目标问题转化为单目标。改进算法是在原算法的基础上引入了稀疏度,并在每次迭代中,对稀疏度最小的解即稀疏解周围进行局部搜索,增强了算法的局部搜索能力,且扩大了种群多样性。此外,针对NSGA-Ⅱ算法最终求得最优解不止一个的情况,尝试采用加权法从最优解集中选出唯一最优解。
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
本发明基于改进NSGA-Ⅱ算法求解柔性作业车间节能调度问题的方法,具体按照以下步骤实施:
步骤1、构建柔性作业车间节能调度问题模型:包括柔性作业车间节能调度问题描述、模型假设;
其中,柔性作业车间节能调度问题描述如下:
n个工件在m台设备上加工,每个工件有一道或多道工序,每道工序可在不同的设备上加工,但不同设备加工同一工序的时间不同,调度内容即是在满足约束条件的前提下,将工件的各道工序合理地安排给各台设备,以实现最大完工时间、最小总延期时长、最小设备总负荷和最小***总能耗;
模型假设具体如下:
一台设备一次只能加工一个工件;
设备开始加工中途不可停止;
同一工件的工序加工有先后之分,即后道工序只有在前道工序加工完才可以加工;
不同工件没有先后约束;
设备空闲时不停机;
设备加工前的准备时间以及加工过程中工件的装载和卸载时间均不考虑;
包括设备故障、任务加急在内的紧急情况均不考虑。
步骤1中柔性作业车间节能调度问题模型构建具体如下:
J
i表示工件i的总工序数;
表示工件i的完工时间;n表示工件总数;T
i表示工件i的交货期;t
ijk表示工件i的第j道工序在设备k上的加工时间;x
ijk为0-1变量,如果工件i的第j道工序在设备k上的加工,则x
ijk=1,否则x
ijk=0;M表示车间单位时间的固定能耗;λ
k表示设备k加工时单位时间的平均能耗;CT
k表示设备k的完工时间;θ
k表示设备k空载时单位时间的平均能耗;α表示车间内工件的转移能耗;Z表示车间工件的转移次数;
目标函数构件如下:
其中,公式(1-1)表示最大完工时间最小的目标函数;公式(1-2)表示总延期时长最小的目标函数;公式(1-3)表示设备总负荷最小的目标函数;公式(1-4)表示***总能耗最小的目标函数,***总能耗又包括固定能耗、加工能耗、空载能耗以及转移能耗。
步骤2、采用基于自然数两段式编码,两段式编码分别为工序码和设备码;采用随机方式生成规模为2N的初始调度解集,即第一代种群R1;设置算法参数:当前迭代次数t,最大迭代次数tmax,交叉概率PN,变异概率PM;
步骤3、对初始种群R1,通过快速非支配排序构造非支配解集F1,F2...Fi、拥挤度距离计算以及精英选择生成第二代父代种群P2,规模为N,具体按照以下步骤实施:
步骤3.1、快速非支配排序:
给每个个体y(i)设置两个参数ni和Si,ni为种群其他支配个体y(i)的个体数量,Si为被个体y(i)支配的其他个体的集合,当个体y(i)的所有目标值比个体y(j)对应的目标值都优时,定义个体y(i)支配个体y(j),否则个体y(i)不能支配个体y(j);
每个个体的参数设置完后,首先把种群中所有ni=0的个体y(i)存入集合F1中,然后观察集合F1中每个个体的Si,将集合Si中的每个个体y(j)的nj减1,nj为种群其他支配个体y(j)的个体数量,再把所有nj-1=0的个体y(k)存入集合F2中,继续对F2重复这一操作,直到所有个体都被划入相应集合Fi中,最后将Fi中的所有个体赋予非支配等级ri;
步骤3.2、拥挤度距离计算:
用P(i)distance表示个体y(i)的拥挤度距离,P(i).m表示个体y(i)在目标m上的函数值;
当问题为单目标时,个体y(i)的拥挤度距离表示为:
P(i)distance=P(i+1).f1-P(i-1).f1 (3-1)
当问题为多目标时,个体y(i)的拥挤度距离表示为:
对个体拥挤度距离作归一化处理,即:
对于边界个体,即在某个目标上最小值或最大值对应的个体,拥挤度距离为无穷大;
步骤3.3、精英选择:
从第一代种群R1中选取部分个体生成下一代父代种群P2,选择时,优先选择非支配等级ri低的个体,当非支配等级ri相同时,选取拥挤度距离P(i)distance大的个体。
步骤4、对父代种群P2中的个体进行交叉、变异操作,生成交叉子代种群Q2,具体按照以下步骤实施:
步骤4.1、工序交叉:
(1)创建两个子集,子集S1和子集S2;
(2)从工件集中随机选取几个工件序号放入子集S1中,再将其他工件序号放入子集S2;
(3)从父代种群P2中随机选择父代个体L1,L2,将S1中的工件,复制L1到子代C1,将S2中的工件,从父代L2复制到子代C2,保持位置不变;
(4)将S2中的工件,从父代L2复制到子代C1,将S1中的工件,从父代L1复制到子代C2,保持顺序不变;
步骤4.2、设备交叉:
(1)创建四个子集K1,K2,K3,K4;
(2)从父代种群P2中随机选择父代个体L1,L2,从设备码或工序码的位置序列中随机选取几个位置放入子集K1,将剩余序列放入K2中;
(3)将L1中K2对应的值复制给子代C1,将L2中K1对应的值复制给子代C2,保持位置不变;
(4)将父代L1中与K1对应的工序码,在父代L2的工序码中找见,并将其位置序列放入K3,再将父代L2中其余位置序列放入K4;
(5)将父代L2中K3对应的值复制给子代C1中K1对应的值,将父代L1中K1对应的值复制给子代C2中K3对应的值,保持顺序不变;
步骤4.3、变异分为互换变异、***变异和倒序变异,具体如下:
步骤4.3.1、互换变异,即在工序码中随机选择两个不同的位置e1和e2,并将这两个位置对应的元素进行交换;
步骤4.3.2、***变异,即在工序码中随机选择两个不同的位置e1和e2,将e2对应的元素***到e1前面;
步骤4.3.3、倒序变异,即在工序码中随机选择两个不同的位置e1和e2,将这两个位置之间的元素进行倒序排列。
步骤5、对父代种群P2中的所有个体计算稀疏度,找出稀疏解S*,并对稀疏解S*执行局部搜索操作,从而生成局部搜索子代种群G2,具体按照以下步骤实施:
步骤5.1、在父代种群P2中,计算所有个体稀疏度SP(xi),找出稀疏解S*,具体如下:
先对个体的目标函数值作归一化处理,即:
其中,fjmax、fjmin分别为种群中第j个目标函数值的最大值和最小值;
计算每个个体与其他个体的欧式距离,欧式距离计算公式如下:
计算每个个体稀疏度,稀疏度计算公式如下:
其中,zi为个体i与其他个体的欧氏距离小于r的个数,r为欧氏距离判断阈值,其的取值范围为0<r<1;H为种群中个体的数量;
最后,稀疏度SP(xi)最小的个体定义为稀疏解S*;
步骤5.2、对稀疏解S*执行局部搜索操作,具体如下:
本文局部搜索算法中,共有三种邻域结构,每次迭代时等概率选择N1∪N3和N2∪N3其中一种来执行局部搜索操作,邻域结构具体如下:
领域结构N1:在工序排序部分的码段中任选两个元素,将选中的两个元素进行位置交换操作;
领域结构N2:在工序排序部分的码段中任选两个元素,将选中的两个元素中位置靠前的元素***到位置靠后的元素后面的的位置;
领域结构N3:在机器分配部分的码段中任选一个元素,该元素的可加工设备数量大于1台,然后将该元素的对应加工设备变为其他可选设备。
步骤6、将父代种群P2、交叉子代种群Q2、局部搜索子代种群G2合并,得到新种群R2;
步骤7、对新种群R2进行快速非支配排序、拥挤度距离计算以及精英选择,生产下一代父代种群P3;
步骤8、判断是否满足终止条件,若不满足,则执行步骤4;若满足则执行步骤9;
步骤9、利用加权法,从最优解集F1中选出一个作为最优妥协解解,并输出,其中从非支配解集F1选出最优妥协解采用的方法为加权法,具体步骤如下:
步骤9.1、采用[0,1]线性变换算子将所有非支配解集F1中的个体对应的子目标函数值进行无量纲化处理;
步骤9.2、通过Delphi法确定每一个子目标的权重,对非支配解集F1中所有个体的目标函数值进行加权求和,选择加权和最小的解作为最优妥协解。
本发明一种基于改进NSGA-Ⅱ算法求解柔性作业车间节能调度问题的方法,根据已构建的NSGA-Ⅱ算法解决柔性作业车间节能调度问题的模型,现以以陕西省某汽车零部件制造企业机加车间的实际数据与标准算例为基础,验证模型和算法的实用性与有效性,并为零部件制造企业机加车间的节能调度问题提供最优的分配方案。
仿真验证
1.企业案例仿真
以陕西省某汽车零部件制造企业机加车间的实际数据为基础,经过取整处理后得加工信息如表1、表2所示。将传统NSGA-Ⅱ和改进NSGA-Ⅱ用Matlab2016b编程,在配置为内存8G,R5 3.2GHz的计算机上,在win10操作***下进行仿真求解。两种算法的参数设置为:种群规模大小为200,迭代次数为500,交叉概率0.8,变异概率0.1,稀疏度计算中,个体稀疏度判别阈值r=0.1,加权法中,通过Delphi调查法得到f1,f2,f3,f4,对应权重分别为0.3,0.2,0.1,0.4,两种算法采用以上相同参数的设置,都采用加权法来从Pareto解集中选择最优妥协解,针对该企业案例进行仿真求解,结果如表3所示。
表1具有交货期的10×6柔性车间调度问题
表2 10×6FJSP能耗数据
表3 10×6FJSP仿真结果
仿真运行10次得到的结果如表3所示,包含最大完工时间、总延期时长、总负荷、总能耗和算法时间的最优值和平均值。对应单目标收敛曲线和非支配解分布等如图3-图7所示,分析可知:
改进NSGA-Ⅱ算法在完工时间,总延期,能耗总量三个目标上均优于传统NSGA-Ⅱ,但在设备总负荷方面传统NSGA-Ⅱ算法略优于改进NSGA-Ⅱ,主要原因为设备的能耗一般随加工速度的增长而增加,因此,提高加工速度,降低设备负荷的同时,必然伴随有能耗的增长。
从图3-图6可以看出,传统NSGA-Ⅱ算法曲线波动较大,改进NSGA-Ⅱ算法曲线较为平稳,原因是NSGA-Ⅱ算法在求解高维MOP问题时,由于种群多样性较差,Pareto解集中解的个数较多,导致每次选出的最优妥协解差异较大,造成了最优妥协解的不确定性,Pareto解集在三目标坐标系的分布如图7所示,从图7可以看出虽然改进NSGA-Ⅱ算法取得解的数量较改进NSGA-Ⅱ算法少,但其分布更接近于最优Pareto曲面,算例调度结果甘特图如图1、图2所示。
2.标准算例仿真分析
为了进一步验证算法的有效性,本节对标准算例MK01-MK04进行仿真实验,由于标准算例仅包含加工时间数据,不能直接应用本文算法求解,为了有效应用本文算法对MK01-MK04进行求解,在[5,18]随机产生所有设备的加工能耗,在[1,3]随机产生所有设备的空载能耗,单位为kW/m,MK01,MK02的固定能耗和转移能耗分别30kW/m,1.8kW/次,MK03,MK04的固定能耗和转移能耗与企业案例相同;按照公式(7)生成所有工件的交货期数据。
其中,dj代表第j个工件的交期时间,rj代表第j个工件的投放时间,tj代表第j个工件的松紧度,sj代表第j个工件的工序数,pl,j代表第j个工件的第l个工序的加工时间。tj有三个取值:tj=2表示时间宽松,tj=1.5表示时间适中,tj=1表示时间紧张。每个案例中,具有不同时间松紧程度(紧张、适中、宽松)的工件数量分别为34%,33%,33%。
运行环境与参数设置与企业实例相同,每个算例运行10次。
表4标准算例仿真结果
仿真运行10次得到的结果如表4所示,分析表4可知,在最大完工时间和总能耗两项指标上,改进NSGA-Ⅱ算法的求解结果均较传统NSGA-Ⅱ算法优;在总延长时间方面,在对MK01,MK02,MK04求解时,改进NSGA-Ⅱ算法的结果均优于传统NSGA-Ⅱ算法,在对MK03求解时,传统NSGA-Ⅱ算法的结果略优于改进NSGA-Ⅱ算法;在总负荷方面,传统NSGA-Ⅱ算法的求解结果略优于改进NSGA-Ⅱ;在算法求解速度方面,改进NSGA-Ⅱ算法的计算速度明显快于传统NSGA-Ⅱ算法。