zoukankan      html  css  js  c++  java
  • 生产计划与管理——单机作业排程/极小化平均流程时间 —— 四种线性规划模型

    知识点

      排程问题的“冲突回避概念”建模  -- 累死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)

  • 相关阅读:
    POJ1486 Sorting Slides 二分图or贪心
    POJ2060 Taxi Cab Scheme 最小路径覆盖
    POJ3083 Children of the Candy Corn 解题报告
    以前的文章
    POJ2449 Remmarguts' Date K短路经典题
    这一年的acm路
    POJ3014 Asteroids 最小点覆盖
    POJ2594 Treasure Exploration 最小路径覆盖
    POJ3009 Curling 2.0 解题报告
    POJ2226 Muddy Fields 最小点集覆盖
  • 原文地址:https://www.cnblogs.com/leapms/p/10071129.html
Copyright © 2011-2022 走看看