任务车间调度问题(混合整数规划模型+Lingo求解)

  1. 目录

    一、问题描述

     二、混合整数模型

    三、Lingo求解 

    3.1 Lingo代码: 

    3.2 求解结果

    3.3 调度方案: 

    3.4 甘特图:

    四、参考文献


    问题来源文献[1]

一、问题描述[1]

有一家公司收到三种类型墙纸的订单:第一种(墙纸1)在蓝色背景上有黄色图案,第二种(墙纸 2)在绿色背景上有蓝色和黄色图案;第三种(墙纸3)在黄色背景上有蓝色和绿色图案。在生产时,每种类型的墙纸都是一个连续的纸卷,并且将要通过若于台机器,每台机器向其上印刷不同的颜色。墙纸通过机器的顺序取决于墙纸的设计:对于墙纸1,首先印刷蓝色背景,然后印刷黄色图案;对于墙纸 2,首先印刷绿色背景,然后先印刷蓝色图案再印刷黄色图案;对于墙纸 3,首先印刷黄色背景,然后先印刷蓝色图案再印刷绿色图案。

d9a44a71c1184f14be1300370cf7ddb8.png

 每一个工序的处理时间取决于需要向其上印刷的对象。每种墙纸类型每种颜色的印刷时间(分钟)列于下表中。

 墙纸1墙纸2墙纸3
蓝色452012
绿色01017
黄色103428

 二、混合整数模型

符号符号说明
eq?i印刷工序索引,eq?i%3D1%2C...%2C3
eq?j墙纸类型索引,eq?j%3D1%2C...%2C3
eq?S_%7Bij%7D第j种墙纸的第i道工序在第几台设备上处理,蓝色第一台,绿色第二台,黄色第三台
eq?T_%7Bij%7D第i种墙纸的在第j台设备上的的处理时间
eq?tt_%7Bij%7D第j种墙纸的第i台设备上的开始时间
eq?u_%7Bijk%7D01变量,第j种墙纸为第k种墙纸在第i台设备上的紧前任务,为1;否则,为0
eq?M一个足够大的数

模型的目标是极小化总完工时间makespan

eq?min%20f%3Dmakespan                                                      (1)

subject to

eq?makespan%5Cgeq%20tt_%7BS_%7Bj3%7D%2Cj%7D+T_%7BS_%7Bj3%7D%2Cj%7D%2Cfor%20j%3D1%2C...%2C3                                                                      (2)

eq?tt_%7Bik%7D%5Cgeq%20tt_%7Bij%7D+T_%7Bij%7D-M%5Ccdot%20u_%7Bijk%7D%2Cfor%20i%3D1%2C...%2C3%3Bj%3D1%2C...%2C3%3Bk%3D1%2C...%2C3%3Bj%5Cneq%20k                      (3)

eq?tt_%7Bij%7D%5Cgeq%20tt_%7Bik%7D+T_%7Bik%7D-M%281-u_%7Bijk%7D%29%29%2Cfor%20i%3D1%2C...%2C3%3Bj%3D1%2C...%2C3%3Bk%3D1%2C...%2C3%3Bj%5Cneq%20k                                (4)

eq?tt_%7BS_%7Bj%2Ck+1%7D%2Cj%7D%5Cgeq%20tt_%7BS_%7Bj%2Ck%7D%2Cj%7D+T_%7BS_%7Bj%2Ck%7D%2Cj%7D%2Cfor%20j%3D1%2C...%2C3%3Bk%3D1%2C...%2C2%3B                                                  (5)

eq?tt_%7Bij%7D%5Cgeq%200%2Cfor%20i%3D1%2C...%2C3%3Bj%3D1%2C...%2C3%3B                                                                                     (6)

eq?makespan%5Cgeq%200                                                                                                                          (7)

eq?u_%7Bijk%7D%5Cin%20%280%2C1%29%2C%20for%20i%3D1%2C...%2C3%3Bj%3D1%2C...%2C3%3Bk%3D1%2C...%2C3%3Bj%5Cneq%20k                                            (8)

其中(2)进行完工时间约束,大于等于三种纸张的各自完成时间;(3)(4)对任意纸张j和k,如果j不等于k,则他们在同一台机器上的加工时间不能冲突;(5)加工次序约束,上一工序完成时才能进行下一工序的操作;(6)工序开始时间需大于等0;(7)完工时间需大于等于0;(8)0-1变量。

三、Lingo求解 

3.1 Lingo代码: 

model:

sets:
row/1..3/:;

cols/1..2/:;

link(row,row):T,S,tt,finish;
links(row,row,row):u;

endsets

data:
S=1 3 2
2 1 3
3 1 2;
T=45 20 12
0 10 17
10 34 28;
enddata

[obj]min=makespan;
@for(row(j):makespan>=tt(S(j,3),j)+T(S(j,3),j));

@for(links(i,j,k):tt(i,k)>=@if(j#ne#k,tt(i,j)+T(i,j)-M*u(i,j,k),0));
@for(links(i,j,k):tt(i,j)>=@if(j#ne#k,tt(i,k)+T(i,k)-M*(1-u(i,j,k)),0));

@for(row(j):@for(cols(k):tt(S(j,k+1),j)>=tt(S(j,k),j)+T(S(j,k),j)));

@for(link(i,j):tt(i,j)>=0);

makespan>=0;

@for(links:@bin(u));

@for(link(i,j):finish(i,j)=tt(i,j)+T(i,j));

end

3.2 求解结果

  Local optimal solution found.
  Objective value:                              97.00000
  Objective bound:                              97.00000
  Infeasibilities:                              0.000000
  Extended solver steps:                              47
  Total solver iterations:                          1696


                       Variable           Value        Reduced Cost
                       MAKESPAN        97.00000            0.000000
                              M        97.00000            0.000000
                       T( 1, 1)        45.00000            0.000000
                       T( 1, 2)        20.00000            0.000000
                       T( 1, 3)        12.00000            0.000000
                       T( 2, 1)        0.000000            0.000000
                       T( 2, 2)        10.00000            0.000000
                       T( 2, 3)        17.00000            0.000000
                       T( 3, 1)        10.00000            0.000000
                       T( 3, 2)        34.00000            0.000000
                       T( 3, 3)        28.00000            0.000000
                       S( 1, 1)        1.000000            0.000000
                       S( 1, 2)        3.000000            0.000000
                       S( 1, 3)        2.000000            0.000000
                       S( 2, 1)        2.000000            0.000000
                       S( 2, 2)        1.000000            0.000000
                       S( 2, 3)        3.000000            0.000000
                       S( 3, 1)        3.000000            0.000000
                       S( 3, 2)        1.000000            0.000000
                       S( 3, 3)        2.000000            0.000000
                      TT( 1, 1)        42.00000            0.000000
                      TT( 1, 2)        10.00000            0.000000
                      TT( 1, 3)        30.00000            0.000000
                      TT( 2, 1)        97.00000            0.000000
                      TT( 2, 2)        0.000000            0.000000
                      TT( 2, 3)        42.00000            0.000000
                      TT( 3, 1)        87.00000            0.000000
                      TT( 3, 2)        30.00000            0.000000
                      TT( 3, 3)        2.000000            0.000000
                  FINISH( 1, 1)        87.00000            0.000000
                  FINISH( 1, 2)        30.00000            0.000000
                  FINISH( 1, 3)        42.00000            0.000000
                  FINISH( 2, 1)        97.00000            0.000000
                  FINISH( 2, 2)        10.00000            0.000000
                  FINISH( 2, 3)        59.00000            0.000000
                  FINISH( 3, 1)        97.00000            0.000000
                  FINISH( 3, 2)        64.00000            0.000000
                  FINISH( 3, 3)        30.00000            0.000000
                    U( 1, 1, 1)        0.000000            0.000000
                    U( 1, 1, 2)        1.000000            0.000000
                    U( 1, 1, 3)        1.000000            0.000000
                    U( 1, 2, 1)        0.000000            0.000000
                    U( 1, 2, 2)        0.000000            0.000000
                    U( 1, 2, 3)        0.000000            0.000000
                    U( 1, 3, 1)        0.000000            0.000000
                    U( 1, 3, 2)        1.000000            0.000000
                    U( 1, 3, 3)        0.000000            0.000000
                    U( 2, 1, 1)        0.000000            0.000000
                    U( 2, 1, 2)        1.000000            0.000000
                    U( 2, 1, 3)        1.000000            0.000000
                    U( 2, 2, 1)        0.000000            0.000000
                    U( 2, 2, 2)        0.000000            0.000000
                    U( 2, 2, 3)        0.000000            0.000000
                    U( 2, 3, 1)        0.000000            0.000000
                    U( 2, 3, 2)        1.000000            0.000000
                    U( 2, 3, 3)        0.000000            0.000000
                    U( 3, 1, 1)        0.000000            0.000000
                    U( 3, 1, 2)        1.000000            0.000000
                    U( 3, 1, 3)        1.000000            0.000000
                    U( 3, 2, 1)        0.000000            0.000000
                    U( 3, 2, 2)        0.000000            0.000000
                    U( 3, 2, 3)        1.000000            0.000000
                    U( 3, 3, 1)        0.000000            0.000000
                    U( 3, 3, 2)        0.000000            0.000000
                    U( 3, 3, 3)        0.000000            0.000000

3.3 调度方案: 

 墙纸1墙纸2墙纸3
蓝色42-8710-3030-42
绿色97-970-1042-59
黄色87-9730-642-30

 

3.4 甘特图:

79a0c53658264e9d985145e6ea7ba707.png

四、参考文献

[1] Christelle Guéret, Christian Prins, Marc Sevaux. Applications of optimization with Xpress-MP (Translated and revised by Susanne Heipcke). Dash Optimization Ltd. 2000.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值