【车间调度】遗传算法求解柔性作业车间调度问题

本文介绍了使用遗传算法求解柔性作业车间调度问题,重点讨论了染色体编码方法,包括集成编码和分段编码,并提出了整数编码MSOS。解码过程分为机器选择部分和工序排序部分,初始化策略结合了全局选择、局部选择和随机选择,以提高初始种群质量。交叉和变异操作确保了遗传操作的有效性,旨在解决机器选择和工序排序问题,以达到优化调度的效果。
摘要由CSDN通过智能技术生成

本系列为自己学习调度相关知识的记录,如有误请指出,也欢迎调度方向的小伙伴加我好友共同交流。

FJSP的染色体编码

染色体编码是将所研究的问题的解用染色体的形式来表达的,这是遗传算法的关键。编码的目的是为了实现交叉、变异等类似于生物界的遗传操作。必须考虑染色体的合法性、可行性、有效性,以及对问题解空间表达的完全性。良好的编码方式可以在后续遗传操作中易产生可行解,提高执行效率;否则,经过遗传操作会产生不可行解,需要一定的修补措施,这样就降低了执行效率。染色体编码对求解速度、计算精度等有着直接的关系,对算法具有重要影响。
FJSP包括两个子问题:机器选择和工序排序。机器选择解决每道工序在可选机器集中的哪台机器上进行加工的问题;工序排序解决所有工序确定加工机器后的排序和开工时间问题。针对编码过程中对两个子问题编码处理的不同,目前主要有以下两种不同的编码方法。

集成编码

集成编码染色体中的每一个基因位(h,j,i)代表一个工序任务,表示工件j的第h道工序在机器i上加工,染色体总长度等于所有工件的工序总和 T o T_o To。Kacem称为TSL(task sequencing list)或OLC(operations list coding),Kacem和Zribi等在其一系列文献中均采用此编码方法。这种编码方法易于表达,但是每一个基因位包括信息过多,在必须满足工序约束的条件下进行遗传操作较为复杂,容易产生非法解。因此适应此编码方法的交叉和变异方法较少,不易改进提高。

分段编码

分段编码染色体有A/B两部分组成,将工序信息分开处理,分别代表FJSP的两个子问题,两部分染色体长度都等于 T o T_o To。在有的文献中也称为双层编码或主副串编码,是一种较为常用的编码方式。Chen提出一种A/B编码,A部分表示每道工序选择的机器,B部分表示机器上的工序编码,如此易产生非法解,使得需要采取修补措施修正非法解。余琦玮、杨晓梅、卢冰原和谷峰等均采用染色体两层编码机制,只是在局部有所不同。Ho和Tay等对几种编码方式进行比较并且做了改进,取得了较好的效果,但是由于机器选择部分采用二进制数编码方法,使得求解效率不高。
FJSP包含T-FJSP和P-FJSP两种类型,染色体编码必须适应不同类型的问题.
结合分段编码易表现、易操作等特点,对以往编码方法进行了改进,设计了一种整数编码MSOS。由两部分组成:机器选择部分(machines selection MS)和工序排序部分(operations sequencing OS).此编码不但适合T-FJSP而且适合于P-FJSP。
如下为MSOS染色体结构:
MSOS染色体结构

1.机器选择部分

机器选择部分染色体长度为 T o T_o To。每个基因位用整数表示,依次按照工件和工件工序的顺序进行排列,每个整数表示当前工序选择的加工机器在可选机器集中的顺序编号,并不是对应的机器号,这保证了后续交叉、变异等操作后产生的解仍然是可行解。这种编码不但适应T-FJSP,而且更适合P-FJSP,对工序可选机器台数的多少没有要求,长度确定,操作方便。以往较多文献中求解P-FJSP时,需要先转换为T-FJSP,使得染色体中产生大量冗余信息,计算时间大幅度增加,计算效率降低。
以之前的P-FJSP为例,如下图所示依次是工件 J 1 J_1 J1和工件 J 2 J_2 J2的所有工序。工序 O 11 O_{11} O11有5台机器可以选择,对应的4表示可选机器集中第4台机器,即在机器 M 4 M_4 M4上加工,同理,工序 O 12 O_{12} O12有2台机器可以选择,分别为机器 M 2 M_2 M2和机器 M 1 M_1 M1,图中对应的1表示可选机器集中的第1台机器,即在机器 M 2 M_2 M2上进行加工。
FJSP染色体编码

2.工序排序部分

当工序的加工机器确定后,对工序的排序类似一般JSP。此部分采用Gen提出的基于工序的编码方式进行编码,染色体长度等于所有工件的工序之和 T o T_o To。每一个基因用工件号直接编码,工件号出现的顺序表示该工件工序间的先后加工顺序,即对染色体从左到右进行编译,对于第h次出现的工件号,表示该工件j的第h道工序,并且工件号的出现次数等于该工件的工序总数 h j h_j hj。如此编码柔性很高,可满足调度规模变化、工件工序数不定等各种复杂情况,而且任意置换染色体中的顺序后总能得到可行调度,在解码过程中可以产生活动调度.
如上图中,假设工序染色体为[2 2 1 1 2],则其中第一个2表示工件 J 2 J_2 J2的工序 O 21 O_{21} O21,第二个2表示工件 J 2 J_2 J2的工序 O 22 O_{22} O22.依次类推,转换成各工件工序的加工顺序为 O 21 − − > O 22 − − > O 11 − − > O 12 − − > O 23 O_{21}-->O_{22}-->O_{11}-->O_{12}-->O_{23} O21>O22>O11>O12>O23

FJSP的染色体解码

解码运算并不是编码的简单反运算,按照不同的方法可以解码成活动调度、半活动调度和非延迟调度等类型。

1.调度类型

对于一个FJSP染色体,机器选择部分是确定的,工序排序部分存在大量的可行解,因为任意两道工序之间可以插入无限的闲置时间。在不考虑任何两道连续工序之间存在闲置时间的情况下,调度问题可以分为三种类型,它们的定义分别如下。

  • 活动调度(active schedule)在不推迟其他操作或破坏优先顺序的条件下,其中没有一个操作可以提前加工。
  • 半活动调度(semi-active schedule)在不改变机器上加工顺序的条件下,其中没有操作可以提前
  • 非延迟调度(non-delay schedule)至少存在一个工件等待加工时,对应不存在相应处于空闲的机器。
    三者包含关系如下:
    活动调度集包含在半活动调度集中,也就是说:当调度处于非活动调度下,一定可以找到某些工序,使其可以更早加工。例如在同一台机器上一个工序在前道工序完成后,可将其插入到同一台机器中工序时间比它早的另一个工序之前;换言之,就是插入到另一个工序还未开始加工前的空闲时间内。虽然非延迟调度集包含在活动调度集中,但不能保证包含最优解。对于正规调度性能指标,已经证明最优调度必在活动调度集中。因此,对于正规调度性能指标在设计优化算法时,将搜索空间限于活动调度集中,不仅能够保证最优调度的存在,而且能够提高优化效率。但是对于非正规调度性能指标,如提前/拖期惩罚代价最小等调度问题,活动调度不能保证包含最优解,有可能最优解存在于半活动调度集中。本章中对于单目标的优化,均采用最大完工时间最小的正规调度性能指标,下面介绍FJSP染色体如何解码成活动调度。
    三种调度类型关系图

2.染色体解码

FJSP染色体MSOS由两部分组成,分别对它们进行解码,关键是需要将工序排序部分解码成对应于机器选择部分的活动调度,具体的解码步骤如下

步骤1

对机器选择部分进行解码,从左到右依次读取并转换成机器顺序矩阵 J M J_M J和时间顺序矩阵T。其中 J M ( j , h ) J_M(j,h) J

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值