车间作业调度问题(JSSP)描述以及编码解码

车间作业调度问题

  车间作业调度问题(Job Shop Scheduling Problem,JSSP)是经典的组合优化问题,在阅读论文过程中发现了对其描述如下:
给定一组工件 J = 1 , 2 , . . . , n J=1,2,...,n J=1,2,...,n,要求在一组机器 M = 1 , 2 , . . . , m M=1,2,...,m M=1,2,...,m上加工完成,满足以下约束条件:
1)每个工件在机器上的加工次序给定;
2)每台机器在任何时刻最多只加工一个工件,工件加工的时间是固定的且工序一旦开始不能被中断;
3)每道工序必须等到其所有的前继工序加工完毕后才能开始加工。
  数学描述如下:
f = m i n { m a x { c i k } } (1) f=min\{max\{c_{ik}\}\} \tag{1} f=min{max{cik}}(1)s.t. c i k − p i k + M ( 1 − a i h k ) ≥ c i h , i = 1 , 2 , . . . . , n ; h , k = 1 , 2 , . . . m (2) c_{ik}-p_{ik}+M(1-a_{ihk})\ge c_{ih}, \\i=1,2,....,n;h,k=1,2,...m \tag{2} cikpik+M(1aihk)cih,i=1,2,....,n;h,k=1,2,...m(2) c j k − c i k + M ( 1 − x i j k ) ≥ p j k , i , j = 1 , 2 , . . . . , n ; k = 1 , 2 , . . . m (3) c_{jk}-c_{ik}+M(1-x_{ijk})\ge p_{jk}, \\ i,j=1,2,....,n;k=1,2,...m \tag{3} cjkcik+M(1xijk)pjk,i,j=1,2,....,n;k=1,2,...m(3) c i k ≥ 0 , i = 1 , 2 , . . . , n ; k = 1 , 2 , . . . , m (4) c_{ik}\ge 0,i=1,2,...,n;k=1,2,...,m\tag{4} cik0,i=1,2,...,n;k=1,2,...,m(4)
其中,符号 c i k c_{ik} cik p i k p_{ik} pik分别表示工件 i i i在机器 k k k上的加工完成时间和加工时长; M M M是一个足够大的正数; a i h k a_{ihk} aihk x i j k x_{ijk} xijk分别为指示系数和指示变量,意义如下:
a i h k = { 1 若机器 h 先于机器 k 加工工件 i 0 非上述情况 (5) a_{ihk}= \begin{cases} 1& \text{若机器$h$先于机器$k$加工工件$i$}\\ 0& \text{非上述情况} \end{cases}\tag{5} aihk={10若机器h先于机器k加工工件i非上述情况(5) x i j k = { 1 若工件 i 先于工件 j 在机器 k 上加工 0 非上述情况 (6) x_{ijk}= \begin{cases} 1& \text{若工件$i$先于工件$j$在机器$k$上加工}\\ 0& \text{非上述情况} \end{cases}\tag{6} xijk={10若工件i先于工件j在机器k上加工非上述情况(6)
理解:
  目标函数(1)中的 m a x { c i k } max\{c_{ik}\} max{cik}表示一系列工件最后一个工件完工的时间。
  约束(2)表示,若机器 h h h先于机器 k k k加工工件 i i i,则需保证 c i k − p i k ≥ c i h c_{ik}-p_{ik}\ge c_{ih} cikpikcih,即工件 i i i在机器 h h h上加工完后再到机器 k k k上加工。
  约束(3)表示,若工件 i i i先于工件 j j j在机器 k k k上加工,则须保证 c j k − c i k ≥ p j k c_{jk}-c_{ik}\ge p_{jk} cjkcikpjk,即工件 j j j在机器 k k k上加工完后才能再加工工件 i i i
  约束(4)表示每个工件在每个机器上都要加工。

编码

  这里对基于工序的编码方式进行介绍:
  每个个体的染色体有所有工序的排序构成,每个基因代表一个工序,同一作业的所有工序由同一作业序号表示,根据他们在染色体排序中的顺序决定他们在不同机器上的加工顺序。对于一个 n n n个工件, m m m个机器的作业调度问题,每个染色体由 n × m n\times m n×m个基因组成,每个工件号在染色体中出现的次数为 m m m次,同一工件的第 i i i次出现表示该工件的第 i i i道工序。

解码

  这里采用前插式解码,根据给定的染色体,对每个当前工序,从其所在机器的前面开始遍历,如果有时间间隔和约束条件可以满足当前工序,则将其插入该位置。

示例

  下面以论文《Optimization of job shop scheduling problems using teaching-learning-based optimization algorithm》中的例子为例。已知的工件对应的操作机器、时间如下表所示,
在这里插入图片描述
在这里插入图片描述
  假设编码为:1 2 3 1 2 3 2 1 3
  那么它对应的时间安排是什么样的呢?
  将上述两个表格进行重新整理:

JobOperation1Operation2Operation3
11(15)2(25)3(18)
22(10)3(20)1(7)
33(8)1(12)2(10)

(括号外为这一操作使用的机器,括号内为每一步操作所需时间)
  1 表示工件1的第一个操作,在机器1上完成:15min
  2 表示工件2的第一个操作,在机器2上完成:10min
  3 表示工件3的第一个操作,在机器3上完成:8min
  1 表示工件1的第二个操作,在机器2上完成:此时需等待工件1的第一个操作已完成,且机器2有空闲:15min+25min=40min
  2 表示工件2的第二个操作,在机器3上完成:此时需等待工件2的第一个操作已完成,且机器3有空闲:10min+20min=30min
  3 表示工件3的第二个操作,在机器1上完成:此时需等待工件3的第一个操作已完成,且机器1有空闲:15min+12min=27min
  2 表示工件2的第三个操作,在机器1上完成:此时需等待工件2的第二个操作已完成,且机器1有空闲:30min+7min=37min
  1 表示工件1的第三个操作,在机器3上完成:此时需等待工件1的第二个操作已完成,且机器3有空闲:40min+18min=58min
  3 表示工件3的第三个操作,在机器2上完成:此时需等待工件3的第二个操作已完成,且机器2有空闲:40min+10min=50min
于是该染色体对应甘特图如下:
在这里插入图片描述

  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值