生产计划与管理——单机作业排程/极小化平均流程时间 —— 四种线性规划模型

知识点

  排程问题的“冲突回避概念”建模  -- 累死CPLEX的模型1

  排程问题的“图()概念”建模 

排程问题的“排序概念”建模 

排程问题的“P-算法”建模 -- 秒解模型

单机作业排程/极小化平均流程时间

单机作业排程是指将n个作业依次地在一台机器上完成,不同作业不能同时占用这台机器,且一旦机器被分配给该作业,则该机器必须完成该作业才能交付下一个作业使用。

假设作业i的作业时间为T[i], 且其开始作业时间为 t[i] 则其流程时间(即完成时间)为 t[i]+T[i]。极小化平均流程时间,即目标为:

  min sum{i=1,...,n}(T[i]+t[i])/n

数据:假设有10个作业,其作业时间分别为 13 15 21 9 10 12 5 14 11 20

模型1——“冲突回避”模型

考虑任务i,j且i<>j(即i不等于j), 则有两种情况:或者i作业先于j作业加工 或者 反之。如果是前者,则

  t[j] >= t[i] + T[i] 

如果是后者,则

  t[i] >= t[j] +T[j]

两个约束显然是互斥的,不能同时成立。因此必须用或关系将他们加入模型。加入或关系的方法是引进0-1变量u[i][j],如果u[i][j]=1前一个约束成立,否则如果u[i][j]=0后一个约束成立。此时配合一个足够大的数bigM,则可把上面两个或约束表示成:

    t[j]-t[i] >= T[i] - (1 - u[i][j])bigM   //(1)
    t[i]-t[j] >= T[j] - u[i][j]bigM   // (2)

 

  完整模型:

min sum{i=1,...,n}(T[i]+t[i])
subject to
    t[j]-t[i] >= T[i] - (1 - u[i][j])bigM | i=1,...,n; j=1,...,n; i<>j  //(1)
    t[i]-t[j] >= T[j] - u[i][j]bigM | i=1,...,n; j=1,...,n; i<>j   //(2)
where
    n is an integer
    bigM is a number
    T is a set
    t[i] is a variable of nonnegative number | i=1,...,n
    u[i][j] is a variable of binary | i=1,...,n; j=1,...,n; i<>j
data_relation 
    n=_$(T)
    bigM =sum{i=1,...,n}T[i]
data
    T={13 15 21 9 10 12 5 14 11 20}

 模型2——“图(论)概念”模型

 把作业看成是图的节点,作业之间的直接衔接关系看成是边。则单机作业问题 可以看成是一个特殊的树,即成一条直线的树。

首先根据图论中给出的树的性质:树的边数是节点数减一。以0-1变量e[i][j]表示边,于是有约束:

  sum{i=1,...,n;j=1,...,n;i<>j} e[i][j] = n-1   // (3)

其次,每个节点的入次和出次小于等于1:

    sum{i=1,...,n;i<>j} e[i][j] <=1 | j=1,...,n    // (4)
    sum{j=1,...,n;i<>j} e[i][j] <=1 | i=1,...,n    // (5)

  满足(3)-(5)之后并不能保证作业成直线布排,因为环同样会符合约束(3)-(5)。为了防止环的出现,使用时间箭头约束(时间是不能周而复始的!):

    t[j]>=t[i]+T[i] - bigM*(1-e[i][j]) | i=1,...,n;j=1,...,n;i<>j    //(6)

  即如果作业i和j衔接,则e[i][j]=1,上述约束变成t[j]>=t[i]+T[i],符合时间箭头逻辑。否则i,j之间并不直接衔接,上式右端的 - bigM*(1-e[i][j]) 等于-bigM,约束式恒成立,等于不存在。

  完整模型为:

min (sum{i=1,...,n}(t[i]+T[i]))
subject to

    sum{i=1,...,n;j=1,...,n;i<>j}e[i][j]=n-1   //(3)
    sum{i=1,...,n;i<>j}e[i][j]<=1|j=1,...,n   //(4)
    sum{j=1,...,n;i<>j}e[i][j]<=1|i=1,...,n   //(5)
    
    t[j]>=t[i]+T[i] - bigM*(1-e[i][j])|i=1,...,n;j=1,...,n;i<>j    //(6)

where
    n is an integer
    bigM is a number
    T is a set
    e[i][j] is a variable of binary|i=1,...,n;j=1,...,n;i<>j
    t[i] is a variable of nonnegative number|i=1,...,n
data_relation
    n=_$(T)
    bigM=sum{i=1,...,n}T[i]
data
    T={13 15 21 9 10 12 5 14 11 20}

模型3— “排序概念”模型

所谓排程即排序,在之前的博文“使用 线性规划 解决 数字 排序问题, +Leapms模型“中提到过线性规划可以做数字排序,方法是定义排序对象的次序数变量。

首先为每个作业定义一个次序数变量nd[i],其下界是0,上界是1. 其次每个作业的开始加工时间显然必须小于所有作业的作业时间之和TT,于是有约束:

    nd[i] <=n-1 | i=1,...,n // (7)
    t[i] <= TT | i=1,...,n  // (8)

次序数是一个先后的概念,必须与时间t[i]符合向前的时间箭头逻辑:

      如果: nd[i] <= nd[j]+1 (即作业i在作业j之前)则 :t[i]+T[i] <= t[j] (即作业j的开始加工时间要大于作业i的开始加工时间加上作业i的作业时间)

写成命题逻辑式相当于:

  nd[i] <= nd[j]+1   →  t[i]+T[i] <= t[j] 

从数理逻辑知道,上式相当于

  nd[i ]<= nd[j]+1   or   t[i]+T[i] <= t[j] 

 成为一个或关系逻辑。对或关系的处理方法是引入0-1变量u[i][j], 写成:

    nd[i]>=nd[j]+1 - u[i][j]n | i=1,...,n;j=1,...,n;i<>j // (9)
    t[i]+T[i]<=t[j]+(1-u[i][j])TT | i=1,...,n;j=1,...,n;i<>j // (10)

  完整模型为:

min sum{i=1,...,n}(T[i]+t[i])
subject to

    nd[i]<=n-1|i=1,...,n // (7)
    t[i]<=TT|i=1,...,n   // (8)

    nd[i]>=nd[j]+1 - u[i][j]n | i=1,...,n;j=1,...,n;i<>j   // (9)
    t[i]+T[i]<=t[j]+(1-u[i][j])TT | i=1,...,n;j=1,...,n;i<>j  // (10)

where
    n is an integer
    TT is a number
    T is a set
    nd[i] is a variable of nonnegative number|i=1,...,n
    u[i][j] is a variable of binary|i=1,...,n;j=1,...,n;i<>j
    t[i] is a variable of nonnegative number|i=1,...,n
data_relation
    n=_$(T)
    TT=sum{i=1,...,n}T[i]
data
    T={13 15 21 9 10 12 5 14 11 20}

模型4——“P-算法”模型

单机作业排程/极小化平均流程时间 问题具有P算法,方法是优先加工作业时间较小的作业。此时用时间作业时间大小过滤箭头即可,即:

    t[i]+T[i]<=t[j] | i=1,...,n;j=1,...,n;i<>j;T[i]<T[j]   //(11)
    t[i]+T[i]<=t[j] | i=1,...,n;j=1,...,n;i<j;T[i]==T[j]   //(12)

完整模型为:

min (sum{i=1,...,n}(t[i]+T[i]))
subject to
    t[i]+T[i]<=t[j] | i=1,...,n;j=1,...,n;i<>j;T[i]<T[j] //(11)
    t[i]+T[i]<=t[j] | i=1,...,n;j=1,...,n;i<j;T[i]==T[j] //(12)
where
    n is an integer
    TT is a number
    T is a set
    e[i][j] is a variable of binary|i=1,...,n;j=1,...,n;i<>j
    t[i] is a variable of nonnegative number|i=1,...,n
data_relation
    n=_$(T)
    TT=sum{i=1,...,n}T[i]
data
    T={13 15 21 9 10 12 5 14 11 20}

四种模型的试算比较

     对四种模型在经过+Leapms解析后使用CPLEX12.6.3试算,第一个模型的计算时间在2-5分钟左右,最后一个模型无论是CPLEX还是+leapms的内置求解器都能在<0.01秒内完成求解。

     预计当任务数大于20时,前3个模型CPLEX计算时间将在10分钟以上。

   以下是+Leapms生成的第一个模型和第二个模型的.lp模型,可在CPLEX上试解。

==================================
Problem SingleMachine1
.lp file gnerated by +Leapms
==================================
Minimize 
 Obj: t1+t2+t3+t4+t5+t6+t7+t8+t9+t10+130
Subject to
 C1: -t1+t2-130u1_2>=-117
 C2: -t1+t3-130u1_3>=-117
 C3: -t1+t4-130u1_4>=-117
 C4: -t1+t5-130u1_5>=-117
 C5: -t1+t6-130u1_6>=-117
 C6: -t1+t7-130u1_7>=-117
 C7: -t1+t8-130u1_8>=-117
 C8: -t1+t9-130u1_9>=-117
 C9: -t1+t10-130u1_10>=-117
 C10: t1-t2-130u2_1>=-115
 C11: -t2+t3-130u2_3>=-115
 C12: -t2+t4-130u2_4>=-115
 C13: -t2+t5-130u2_5>=-115
 C14: -t2+t6-130u2_6>=-115
 C15: -t2+t7-130u2_7>=-115
 C16: -t2+t8-130u2_8>=-115
 C17: -t2+t9-130u2_9>=-115
 C18: -t2+t10-130u2_10>=-115
 C19: t1-t3-130u3_1>=-109
 C20: t2-t3-130u3_2>=-109
 C21: -t3+t4-130u3_4>=-109
 C22: -t3+t5-130u3_5>=-109
 C23: -t3+t6-130u3_6>=-109
 C24: -t3+t7-130u3_7>=-109
 C25: -t3+t8-130u3_8>=-109
 C26: -t3+t9-130u3_9>=-109
 C27: -t3+t10-130u3_10>=-109
 C28: t1-t4-130u4_1>=-121
 C29: t2-t4-130u4_2>=-121
 C30: t3-t4-130u4_3>=-121
 C31: -t4+t5-130u4_5>=-121
 C32: -t4+t6-130u4_6>=-121
 C33: -t4+t7-130u4_7>=-121
 C34: -t4+t8-130u4_8>=-121
 C35: -t4+t9-130u4_9>=-121
 C36: -t4+t10-130u4_10>=-121
 C37: t1-t5-130u5_1>=-120
 C38: t2-t5-130u5_2>=-120
 C39: t3-t5-130u5_3>=-120
 C40: t4-t5-130u5_4>=-120
 C41: -t5+t6-130u5_6>=-120
 C42: -t5+t7-130u5_7>=-120
 C43: -t5+t8-130u5_8>=-120
 C44: -t5+t9-130u5_9>=-120
 C45: -t5+t10-130u5_10>=-120
 C46: t1-t6-130u6_1>=-118
 C47: t2-t6-130u6_2>=-118
 C48: t3-t6-130u6_3>=-118
 C49: t4-t6-130u6_4>=-118
 C50: t5-t6-130u6_5>=-118
 C51: -t6+t7-130u6_7>=-118
 C52: -t6+t8-130u6_8>=-118
 C53: -t6+t9-130u6_9>=-118
 C54: -t6+t10-130u6_10>=-118
 C55: t1-t7-130u7_1>=-125
 C56: t2-t7-130u7_2>=-125
 C57: t3-t7-130u7_3>=-125
 C58: t4-t7-130u7_4>=-125
 C59: t5-t7-130u7_5>=-125
 C60: t6-t7-130u7_6>=-125
 C61: -t7+t8-130u7_8>=-125
 C62: -t7+t9-130u7_9>=-125
 C63: -t7+t10-130u7_10>=-125
 C64: t1-t8-130u8_1>=-116
 C65: t2-t8-130u8_2>=-116
 C66: t3-t8-130u8_3>=-116
 C67: t4-t8-130u8_4>=-116
 C68: t5-t8-130u8_5>=-116
 C69: t6-t8-130u8_6>=-116
 C70: t7-t8-130u8_7>=-116
 C71: -t8+t9-130u8_9>=-116
 C72: -t8+t10-130u8_10>=-116
 C73: t1-t9-130u9_1>=-119
 C74: t2-t9-130u9_2>=-119
 C75: t3-t9-130u9_3>=-119
 C76: t4-t9-130u9_4>=-119
 C77: t5-t9-130u9_5>=-119
 C78: t6-t9-130u9_6>=-119
 C79: t7-t9-130u9_7>=-119
 C80: t8-t9-130u9_8>=-119
 C81: -t9+t10-130u9_10>=-119
 C82: t1-t10-130u10_1>=-110
 C83: t2-t10-130u10_2>=-110
 C84: t3-t10-130u10_3>=-110
 C85: t4-t10-130u10_4>=-110
 C86: t5-t10-130u10_5>=-110
 C87: t6-t10-130u10_6>=-110
 C88: t7-t10-130u10_7>=-110
 C89: t8-t10-130u10_8>=-110
 C90: t9-t10-130u10_9>=-110
 C91: t1-t2+130u1_2>=15
 C92: t1-t3+130u1_3>=21
 C93: t1-t4+130u1_4>=9
 C94: t1-t5+130u1_5>=10
 C95: t1-t6+130u1_6>=12
 C96: t1-t7+130u1_7>=5
 C97: t1-t8+130u1_8>=14
 C98: t1-t9+130u1_9>=11
 C99: t1-t10+130u1_10>=20
 C100: -t1+t2+130u2_1>=13
 C101: t2-t3+130u2_3>=21
 C102: t2-t4+130u2_4>=9
 C103: t2-t5+130u2_5>=10
 C104: t2-t6+130u2_6>=12
 C105: t2-t7+130u2_7>=5
 C106: t2-t8+130u2_8>=14
 C107: t2-t9+130u2_9>=11
 C108: t2-t10+130u2_10>=20
 C109: -t1+t3+130u3_1>=13
 C110: -t2+t3+130u3_2>=15
 C111: t3-t4+130u3_4>=9
 C112: t3-t5+130u3_5>=10
 C113: t3-t6+130u3_6>=12
 C114: t3-t7+130u3_7>=5
 C115: t3-t8+130u3_8>=14
 C116: t3-t9+130u3_9>=11
 C117: t3-t10+130u3_10>=20
 C118: -t1+t4+130u4_1>=13
 C119: -t2+t4+130u4_2>=15
 C120: -t3+t4+130u4_3>=21
 C121: t4-t5+130u4_5>=10
 C122: t4-t6+130u4_6>=12
 C123: t4-t7+130u4_7>=5
 C124: t4-t8+130u4_8>=14
 C125: t4-t9+130u4_9>=11
 C126: t4-t10+130u4_10>=20
 C127: -t1+t5+130u5_1>=13
 C128: -t2+t5+130u5_2>=15
 C129: -t3+t5+130u5_3>=21
 C130: -t4+t5+130u5_4>=9
 C131: t5-t6+130u5_6>=12
 C132: t5-t7+130u5_7>=5
 C133: t5-t8+130u5_8>=14
 C134: t5-t9+130u5_9>=11
 C135: t5-t10+130u5_10>=20
 C136: -t1+t6+130u6_1>=13
 C137: -t2+t6+130u6_2>=15
 C138: -t3+t6+130u6_3>=21
 C139: -t4+t6+130u6_4>=9
 C140: -t5+t6+130u6_5>=10
 C141: t6-t7+130u6_7>=5
 C142: t6-t8+130u6_8>=14
 C143: t6-t9+130u6_9>=11
 C144: t6-t10+130u6_10>=20
 C145: -t1+t7+130u7_1>=13
 C146: -t2+t7+130u7_2>=15
 C147: -t3+t7+130u7_3>=21
 C148: -t4+t7+130u7_4>=9
 C149: -t5+t7+130u7_5>=10
 C150: -t6+t7+130u7_6>=12
 C151: t7-t8+130u7_8>=14
 C152: t7-t9+130u7_9>=11
 C153: t7-t10+130u7_10>=20
 C154: -t1+t8+130u8_1>=13
 C155: -t2+t8+130u8_2>=15
 C156: -t3+t8+130u8_3>=21
 C157: -t4+t8+130u8_4>=9
 C158: -t5+t8+130u8_5>=10
 C159: -t6+t8+130u8_6>=12
 C160: -t7+t8+130u8_7>=5
 C161: t8-t9+130u8_9>=11
 C162: t8-t10+130u8_10>=20
 C163: -t1+t9+130u9_1>=13
 C164: -t2+t9+130u9_2>=15
 C165: -t3+t9+130u9_3>=21
 C166: -t4+t9+130u9_4>=9
 C167: -t5+t9+130u9_5>=10
 C168: -t6+t9+130u9_6>=12
 C169: -t7+t9+130u9_7>=5
 C170: -t8+t9+130u9_8>=14
 C171: t9-t10+130u9_10>=20
 C172: -t1+t10+130u10_1>=13
 C173: -t2+t10+130u10_2>=15
 C174: -t3+t10+130u10_3>=21
 C175: -t4+t10+130u10_4>=9
 C176: -t5+t10+130u10_5>=10
 C177: -t6+t10+130u10_6>=12
 C178: -t7+t10+130u10_7>=5
 C179: -t8+t10+130u10_8>=14
 C180: -t9+t10+130u10_9>=11
Binaries
  u1_2
  u1_3
  u1_4
  u1_5
  u1_6
  u1_7
  u1_8
  u1_9
  u1_10
  u2_1
  u2_3
  u2_4
  u2_5
  u2_6
  u2_7
  u2_8
  u2_9
  u2_10
  u3_1
  u3_2
  u3_4
  u3_5
  u3_6
  u3_7
  u3_8
  u3_9
  u3_10
  u4_1
  u4_2
  u4_3
  u4_5
  u4_6
  u4_7
  u4_8
  u4_9
  u4_10
  u5_1
  u5_2
  u5_3
  u5_4
  u5_6
  u5_7
  u5_8
  u5_9
  u5_10
  u6_1
  u6_2
  u6_3
  u6_4
  u6_5
  u6_7
  u6_8
  u6_9
  u6_10
  u7_1
  u7_2
  u7_3
  u7_4
  u7_5
  u7_6
  u7_8
  u7_9
  u7_10
  u8_1
  u8_2
  u8_3
  u8_4
  u8_5
  u8_6
  u8_7
  u8_9
  u8_10
  u9_1
  u9_2
  u9_3
  u9_4
  u9_5
  u9_6
  u9_7
  u9_8
  u9_10
  u10_1
  u10_2
  u10_3
  u10_4
  u10_5
  u10_6
  u10_7
  u10_8
  u10_9

End
==================================
==================================
Problem singlemachine4
.lp file gnerated by +Leapms
==================================
Minimize 
 Obj: t1+t2+t3+t4+t5+t6+t7+t8+t9+t10+130
Subject to
 C1: t1-t2<=-13
 C2: t1-t3<=-13
 C3: t1-t8<=-13
 C4: t1-t10<=-13
 C5: t2-t3<=-15
 C6: t2-t10<=-15
 C7: -t1+t4<=-9
 C8: -t2+t4<=-9
 C9: -t3+t4<=-9
 C10: t4-t5<=-9
 C11: t4-t6<=-9
 C12: t4-t8<=-9
 C13: t4-t9<=-9
 C14: t4-t10<=-9
 C15: -t1+t5<=-10
 C16: -t2+t5<=-10
 C17: -t3+t5<=-10
 C18: t5-t6<=-10
 C19: t5-t8<=-10
 C20: t5-t9<=-10
 C21: t5-t10<=-10
 C22: -t1+t6<=-12
 C23: -t2+t6<=-12
 C24: -t3+t6<=-12
 C25: t6-t8<=-12
 C26: t6-t10<=-12
 C27: -t1+t7<=-5
 C28: -t2+t7<=-5
 C29: -t3+t7<=-5
 C30: -t4+t7<=-5
 C31: -t5+t7<=-5
 C32: -t6+t7<=-5
 C33: t7-t8<=-5
 C34: t7-t9<=-5
 C35: t7-t10<=-5
 C36: -t2+t8<=-14
 C37: -t3+t8<=-14
 C38: t8-t10<=-14
 C39: -t1+t9<=-11
 C40: -t2+t9<=-11
 C41: -t3+t9<=-11
 C42: -t6+t9<=-11
 C43: -t8+t9<=-11
 C44: t9-t10<=-11
 C45: -t3+t10<=-20

End
==================================

讨论

1、建立排程问题的线性规划模型可以有不同的方法,例如可以从冲突回避角度、图角度、排序角度、P-算法角度多种思路去考虑。所建立的模型的运行效率是不同的,甚至相差极大。

2、线性规划模型是一种问题的描述方法,目前的求解器基本上采用的是松弛—分支方法去求解,尽管加入了很多前处理,还没有能够做到根据模型本身所描述约束情况的推知问题的性质从而进行高效求解的地步。

3、有P算法的问题,当依据该算法发现的性质进行线性规划建模后,其求解效率会相应被提高。

By: 陆战之王 (2018-12-5)

原文地址:https://www.cnblogs.com/leapms/p/10071129.html