本发明涉及作业车间调度领域,具体地涉及分布式柔性作业车间调度领域。
背景技术:
全球化商业模式的出现和技术的进步导致了制造环境的巨大变化。为了接近市场和制造资源,企业已经从一个单工厂演变成了一个多工厂的制造环境,这导致了调度系统从一个作业车间调度系统变成了一个柔性作业车间调度系统,甚至到一个分布式柔性作业车间调度系统。分布式柔性作业车间调度问题是指生产活动在几个工厂和制造单元进行的情况。对经典的柔性作业车间调度问题,包含以下问题:1)每一台设备的工序顺序;2)一个工件的工序优先约束;3)适当考虑设备能力约束的设备选择。分布式柔性作业车间调度问题可以认为是柔性作业车间调度问题的一个延伸,他们不仅包含柔性作业车间调度问题的信息,还包括合适的工厂和柔性制造单元的选择,因为分配具体的工件到不同的工厂会得到不同的生产调度,这将影响供应链。分布式柔性作业车间调度问题也是Np-hard问题。面对分布式问题更加符合制造实际且更加复杂,关于它的研究甚少,本发明提出一种遗传算法解决这个难题。遗传算法具有很强的鲁棒性和固有的并行性,能有效地处理规模较大的优化问题,但同时也存在着求解易陷入局部最优、早熟停滞等不足;以及如何将问题的解编码成染色体,保证染色体的可行性、合法性和映射的唯一性的问题。
技术实现要素:
针对上述不足之处,本发明要解决的技术问题是提供一种改进的编码方式和改进的交叉变异求解分布式柔性作业车间调度问题。
本算法的目标是:第一.解决分布式柔性作业车间调度问题,将工件分配合适的制造单元或车间;第二.解决传统遗传算法的编码方式会生成不可行解的问题;第三.解决遗传算法容易陷入局部最优,出现早熟收敛的问题。
本发明为实现上述目的所采用的技术方案是:采用改进编码方式的遗传算法解分布式柔性作业车间调度问题,该算法包括如下步骤:
步骤1:参数设定:设种群规模为M,子代规模为N,交叉概率为Pc,变异概率为Pm,进化代数为G,禁忌表规模为T;
步骤2:使用改进的编码算子产生初始种群M:
步骤2.1:基于工厂、设备、工件之间的关系创造一个可用资源表;
步骤2.2:根据工件的数量和工序的数量编码染色体的整数部分;
步骤2.3:编码候选工厂和选择设备,随机产生0到1之间的小数作为工厂选择和设备选择一个预定义的阈值;
步骤2.4:重复步骤2.2、2.3,直到产生M个初始个体;
步骤3:评估染色体的适应度值;
步骤4:判断是否达到最大进化代数,未达到执行下一步骤;否则输出最优调度方案,结束程序;
步骤5:使用锦标赛选择法选择N个子代种群;
步骤6:引入禁忌表的交叉:
步骤6.1:初始化参数,禁忌表设为空;
步骤6.2:计算父代个体的适应度值及平均适应度并记录;
步骤6.3:根据交叉概率Pm在父代种群中随机地选择两个个体,对染色体的工序部分和设备工厂部分分别进行交叉操作,得到子代新个体;
步骤6.4:计算子代新个体适应度值,如果子代新个体的适应度值比保存的父代的平均适应值高,则将该适应度值放入禁忌表同时将此子代新个体放入下一代,更新禁忌表;
步骤6.5:如果子代新个体的适应度值比保存的父代的平均适应值低,且该适应度值不在禁忌表中,则将该适应度值放入禁忌表,同时将此子代新个体放入下一代(目的是保持子代解的多样性),更新禁忌表;
步骤6.6:如果子代新个体的适应度值比保存的父代的平均适应值低,且该适应度值在禁忌表中,则从父代中选择适应度值最高的个体放入下一代(目的是子代直接继承父代的优良个体),将该最高适应度值放入禁忌表,同时更新禁忌表;
步骤6.7:若禁忌表已满,则替换最早放入禁忌表的值,解禁;
步骤6.8:子代种群个数是否达到最大规模,是则转步骤6.9,否则转步骤6.3;
步骤6.9:结束;
步骤7:基于邻域搜索的变异
步骤:7.1:设i=0;(i为基于邻域搜索变异程序的迭代次数)
步骤7.2:判断i≤N×Pm是否成立(N是子代种群规模,Pm是变异概率),是则转到步骤8.3,否则转步骤7.6;
步骤7.3:取变异染色体上λ个不同的基因,将他们工序顺序编码部分(即整数部分)生成其排序的所有邻域;
步骤7.4:评价所有邻域的适应度值,取其中的最佳个体
步骤7.5:i=i+1;
步骤7.6:结束。
步骤8:返回步骤4,重复程序
本发明的有益效果是:第一.改进编码方式的遗传算法能够有效解决分布式柔性作业车间调度问题;第二.基于概率的改良的编码方式能够避免产生不可行解,避免使用修复程序校正染色体;第三.引入禁忌表的交叉算子提高了算法的收敛速度和稳定性;第四.改进遗传算法的变异算子优化了遗传算法的性能,避免了算法过早收敛,陷入局部最优。
附图说明
图1表示本算法的详细流程图
图2表示三个工厂的分布式柔性作业车间调度问题的示例
图3表示基于图2所得的可用资源表,这是编码的基础,确定可行解空间
图4表示该编码方式生成的染色体
图5表示一对染色体交叉的过程。
图6表示一条染色体变异的过程。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例对本发明进一步详细说明。应当理解此处所描述的具体实施例仅仅用于解释本发明并不用于限定本发明。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明针对现有技术易出现早熟收敛且编码方式会产生不可行解,且现有技术对分布式柔性作业车间调度研究甚少的问题,提出了改进编码方式、交叉、变异的遗传算法求解分布式柔性作业车间调度问题。本发明加强了算法的性能考虑了实际生产情况,实用性强。
下面结合附图对本发明详细说明。
分布式柔性作业车间调度问题结合图2是指在分布式制造环境下的调度,当企业接受许多工件时,必须把他们分配到合适的工厂。每一个工件涉及几个工序顺序,可以在一组具体的设备上加工,完成的工件交付到一个中枢。
为了解决这个问题,假设在生产调度准备好之后工件的顺序不允许改变。每一道工序的加工时间是给定且固定的,不考虑设备停机、损坏和材料短缺。一旦工件开始加工,不能被中断,不允许中断后重加工。目标函数和约束用下面的符号和公式表示:
Fm={F1,F2,…,Fm}是一组工厂或柔性制造单元
Ji={J1,J2,…,Ji}是一组工件
Oi,j={Oi,1,Oi,2,…,Oi,j}是工件Ji的工序序列
Um,k={Mm,1,Mm,2,…,Mm,k}是一组设备
di,m是从工厂运输工件i到中枢的时间
Pi,j,m,k表示工件i的工序j在工厂Fm的一台设备上的加工时间
是工件i的工序j在设备m上的开始加工时间
工件i的工序j在设备m上的完工时间
Ti,j,m,k表示工件i的工序j在工厂Fm的一台设备上的开始加工时间
目标函数公式如下:
约束:Σjai,j,m≥1 (2)
pi,j,m,k≠pi,j,m,1,1∈k (3)
ΣhmXi,j,k,h,m≤1 (4)
ΣijhXi,j,k,h,m≤1 (5)
所述上面的约束中,约束(2)表示一个工件分配到一个工厂,所有这个工件的工序都必须在这个工厂加工。约束(3)表示每一个工厂的设备和技术不同,导致他们对一道工序的加工时间不同。约束(4)表示每一道工序在一个时间段只能在一台设备上加工。约束(5)表示每一个时间段一台设备只能加工一道工序,约束(6)表示一道工序只能在它的工件前一道工序完成之后才能加工。
本算法的详细流程图结合图1,具体步骤如下:
步骤1:参数设定:设种群规模为M,子代规模为N,交叉概率为Pc,变异概率为Pm,进化代数为G,禁忌表规模为T;
步骤2:使用改进的编码算子产生初始种群M:
步骤2.1:基于工厂、设备、工件之间的关系创造一个可用资源表;
步骤2.2:根据工件的数量和工件工序的数量编码染色体的整数部分;
步骤2.3:编码候选工厂和选择设备,随机产生0到1之间的小数作为工厂选择和设备选择一个预定义的阈值;
步骤2.4:重复步骤2.2、2.3,直到产生M个初始个体;
步骤3:评估染色体的适应度值;
步骤4:判断是否达到最大进化代数,未达到执行下一步骤;否则输出最优调度方案,结束程序;
步骤5:使用锦标赛选择法选择N个子代种群;
步骤6:引入禁忌表的交叉:
步骤6.1:初始化参数,禁忌表设为空;
步骤6.2:计算父代个体的适应度值及平均适应度并记录;
步骤6.3:根据交叉概率Pm在父代种群中随机地选择两个个体,对染色体的工序部分和设备工厂部分分别进行交叉操作,得到子代新个体;
步骤6.4:计算子代新个体适应度值,如果子代新个体的适应度值比保存的父代的平均适应值高,则将该适应度值放入禁忌表同时将此子代新个体放入下一代,更新禁忌表;
步骤6.5:如果子代新个体的适应度值比保存的父代的平均适应值低,且该适应度值不在禁忌表中,则将该适应度值放入禁忌表,同时将此子代新个体放入下一代(目的是保持子代解的多样性),更新禁忌表;
步骤6.6:如果子代新个体的适应度值比保存的父代的平均适应值低,且该适应度值在禁忌表中,则从父代中选择适应度值最高的个体放入下一代(目的是子代直接继承父代的优良个体),将该最高适应度值放入禁忌表,同时更新禁忌表;
步骤6.7:若禁忌表已满,则替换最早放入禁忌表的值,解禁;
步骤6.8:子代种群个数是否达到最大规模,是则转步骤6.9,否则转步骤6.3;
步骤6.9:结束;
步骤7:基于邻域搜索的变异
步骤:7.1:设i=0;(i为邻域搜索变异程序的迭代次数)
步骤7.2:判断i≥N×Pm是否成立(N是子代种群规模,Pm是变异概率),是则转到步骤8.3,否则转步骤7.6;
步骤7.3:取变异染色体上λ个不同的基因,将他们工序顺序编码部分(即整数部分)生成其排序的所有邻域;
步骤7.4:评价所有邻域的适应度值,取其中的最佳个体
步骤7.5:i=i+1;
步骤7.6:结束。
步骤8:返回步骤4,重复程序
所述步骤2.1创造可用资源表,结合图3详细描述如下:图中包含五种类型的信息,工厂集合,每一个工厂的设备集合,工件集合,工序集合,加工时间。第一行和第二行分别列出了工厂集合和设备集合。第一、二、三列分别列出了工件集,工序集和从工厂到中枢的运输时间。当可用资源的表完成时工件、工序、工厂和设备之间的映射关系即可被确定。比如:工序O1,1可以被分配到工厂F1,F2,或者F3加工,因为F1中三台设备M1,M2,M3都能加工工序O1,1,F2中两台设备M1,M3是合适的,工厂F3中两台设备M1,M2是可行的。
所述步骤2.2结合图4详细描述如下:基因排列表示工序序列,一个给定工件的所有工序都用相同的实际参数表示,这个参数取决于随机产生的概率,基因排列后根据工序在给定染色体中出现的顺序解读。比如:如果工件1(J1)由3个工序O1,1,O1,2,O1,3组成,在染色体中表示为三个基因1(111),工件2(J2)由两道工序O2,1,O2,2组成,染色体中表示为二个基因2(22)。比如一个染色体重所有基因的组合可以写为11122333455.然后打破一个染色体工序序列,一个新的序列随机产生。一个染色体序列中工件号可能出现几次,第一次表示工件的第一道工序,以此类推。
所述步骤2.3结合图4,描述如下:染色体的第二个基因是1.52.表示工件1和工序1或者O1,1。三个工厂(F1,F2,或者F3)能够支持这个基因,三个工厂选择的概率是0.33.但是,因为基因的小数0.52在[0.33,0.66)之间,工件被分配到工厂2加工。随后车轮选择法用来选择合适的设备。这个例子中设备M2,1,M2,3能够支持工件1的第一道工序或者O1,1的制造活动。M2,1,M2,3选择的概率是50%。由于基因的小数部分的阈值是0.52,位于[0.5,1),在选择第二个工厂的第三台设备M2,3。每一个基因的整数部分表示工件号,小数部分表示被分配到合适的工厂和设备的概率。这两部分使用转盘赌轮法确定。比如图4显示染色体的第一个基因是5.32,表示第五个工件的第一道工序,第八个基因5.51表示第五个工件的第二道工序。
所述步骤3根据图3所示的染色体的工序分配和设备编号映射时间调度方案,构造一个甘特图,计算各个解得适应度函数值
所述步骤6引入禁忌表交叉,本发明通过在交叉操作中引入禁忌搜索算法的特性对重复出现的个体进行有效禁忌操作,提高算法的收敛效率和解的稳定性。
所述步骤6.3工序部分使用基于优先顺序保护的POX方式交叉,结合图5具体步骤如下:设父代染色体Parent1和Parent2,POX产生Children1和Children2,POX交叉的具体流程如下:
1、随机划分工件集{1,2,3,…,i}为两个非空的子集J1和J2;
2、复制Parent1包含在J1的工件到Children1,Parent2包含在J1的工件到Children2,保留它们的位置;
3、复制Parent2包含在J2的工件到Children1,Parent1包含在J2的工件到Children2,保留它们的顺序。
所述步骤6.3工厂和设备选择部分使用两点交叉,随机选择两个点,两点之间的部分复制到下一代,其余的部分由另一个父代交叉确定。
所述步骤7本发明采用一种基于邻域搜索的新型变异算子,是因为在遗传算法中,变异是为了保持群体的多样性,它由对染色体执行较小的扰动产生。传统遗传算法变异算子有交换变异、插入变异和逆转变异等。本发明的变异算子,它通过局部范围内搜索改善子代的性能。