jit.gms : Design of Just-in-Time Flowshops

Description

This just-in-time flowshop problem involves P products and
S stages. Each stage contains identical equipment performing the
same type of operation on different products. The objective is
to minimize the total equipment related cost.

References

  • Gutierrez, R A, and Sahinidis, N V, A branch-and-bound approach for machine selection in just-in-time manufacturing systems. International Journal of Production Research 34, 3 (1996), 797-818.
  • Gunasekaran, A, Goyal, S K, Martikainen, T, and Yli-Olli, P, Equipment Selection Problems in just-in-time Manufacturing Systems. Journal of the Operational Research Society 44 (1993), 345-353.

Small Model of Type : MINLP


Category : GAMS Model library


Main file : jit.gms

$title Design of Just-in-Time Flowshops (JIT,SEQ=250)
$ontext

This just-in-time flowshop problem involves P products and
S stages. Each stage contains identical equipment performing the
same type of operation on different products. The objective is
to minimize the total equipment related cost.


Gunasekaran, A, Goyal, S K, Martikainen T, and Yli-Olli, P,
Equipment Selection Problems in just-in-time Manufacturing Systems.
Journal of the Operational Research Society 44 (1993), 345-353

Gutierrez, R A, and Sahinidis, N, A
Lagrangian Approach to the Pooling Problem.
Interantional J Production Research 34 (1996), 797-818.

$offtext

sets p products
     s stages

parameter alpha(p,s) processing cost
          beta(p,s)  production inbalance cost
          delta(p)   demand
          mu(s)      machine cost
          M          maximum amount of money for investment
          pi(p,s)    priority weight
          sigma(p,s) product cycles
          q(p,s)     batch size
          tau(p,s)   processing time
          omega(s)   resource requirements
          bigomega   max resource available for all machines

variables n(s)     number of machines
          pr(p,s)  production rate
          dpr(p,s) absolute value differences
          obj;

integer variable n;

equations objdef, prdef(p,s), budget, resource, abs1, abs2;

objdef.. obj =e= Sum((p,s), alpha(p,s)*sigma(p,s)/pr(p,s))
               + sum((p,s)$(ord(s)<card(s)), beta(p,s)*dpr(p,s))
               + sum(s, mu(s)*n(s));

prdef(p,s).. pr(p,s) =e= pi(p,s)/tau(p,s)*n(s);

budget.. sum(s, mu(s)*n(s)) =l= M;

resource.. sum(s, omega(s)*n(s)) =l= bigomega;

abs1(p,s+1).. dpr(p,s) =G= pr(p,s)-pr(p,s+1);

abs2(p,s+1).. dpr(p,s) =G= pr(p,s+1)-pr(p,s);

model jit /all /;


sets p / p1*p3 /
     s / s1*s4 /

parameters delta(p) / p1 3000, p2 2000, p3 4000 /
           mubase(s)/ s1 5000, s2 5500, s3 4000, s4 6000 /
           omega(s) / s1   60, s2   50, s3   80, s4   40 /
           M        / 6E6 /
           bigomega / 3000 /


table dat(*,p,s) data from table 10.16

      p1.s1  p1.s2  p1.s3 p1.s4  p2.s1 p2.s2 p2.s3 p2.s4  p3.s1  p3.s2  p3.s3  p3.s4

alpha  2.0    1.5    3.0    2.0    3.0   2.5   1.0   2.0    2.0    2.0    2.0    1.0
beta    60     90     60     80     90    80    80    70     80    100     80     90
kappa  0.2    0.3    0.4    0.3    0.1   0.4   0.3   0.2    0.2    0.3    0.2    0.2
pi     0.2    0.4    0.5    0.5    0.6   0.3   0.3   0.2    0.2    0.3    0.2    0.3
tau      1      1      1      1      1     1     1     1      1      1      1      1
q      800    800    800    800    700   700   700   700    900    900    900    900


set        c cases / case1*case9 /;

parameters multq(c)  / case1 1, case2 1,   case3 1,   case4 1, case5 1,   case6 0.5, case7 1.5, case8 2, case9 2.5 /
           multmu(c) / case1 1, case2 0.5, case3 1.5, case4 2, case5 2.5, case6 1,   case7 1,   case8 1, case9 1   /
           rep(c,*) summary report;

n.lo(s)    = 1;
pr.lo(p,s) = .01;

pi(p,s)    = dat('pi',p,s);
alpha(p,s) = dat('alpha',p,s);
beta(p,s)  = dat('beta',p,s)*1e+5;

abort$sum(s, abs(1 - sum(p, pi(p,s))) > 1e-10) 'weight do not add to 1',pi;

option optcr=0;

loop(c,

   q(p,s)     = dat('q',p,s) * multq(c);
   mu(s)      = mubase(s) * multmu(c);
   tau(p,s)   = q(p,s)*(dat('tau',p,s)-dat('kappa',p,s)*1e-5*mu(s));
   sigma(p,s) = delta(p)/q(p,s);

   pr.lo(p,s) = pi(p,s)/tau(p,s);

   solve jit using minlp min obj;

   option limrow=0,limcol=0,solprint=off;

   rep(c,s) = n.l(s);

   rep(c,'ModelStat')  = jit.modelstat;
   if (jit.modelstat = %modelstat.Optimal% or
       jit.modelstat = %modelstat.IntegerSolution%,
     rep(c,'Processing') = Sum((p,s), alpha(p,s)*sigma(p,s)/pr.l(p,s));
     rep(c,'Imbalance')  = sum((p,s)$(ord(s)<card(s)), beta(p,s)*abs(pr.l(p,s)-pr.l(p,s+1)));
     rep(c,'Investment') = sum(s, mu(s)*n.l(s));
   )
);

display rep;