csched.gms : Cyclic Scheduling of Continuous Parallel Units

Description

Cyclic Scheduling of Continuous Parallel Units


Reference

  • And, V J, and Grossmann, I E, Cyclic Scheduling of Continuous Parallel Units with Decaying Performance. American Institute of Chemical Engineers Journal 44, 7 (1998), 1623-1636.

Large Model of Type : MINLP


Category : GAMS Model library


Main file : csched.gms   includes :  csched1.inc  csched2.inc

$Title Cyclic Scheduling of Continuous Parallel Units (CSCHED,SEQ=222)
$ontext
Cyclic Scheduling of Continuous Parallel Units


Jain, V, and Grossmann, I E, Cyclic Scheduling of Continuous
Parallel Units with Decaying Performance. American Institute
of Chemical Engineers Journal 44, 7 (1998), 1623-1636.

$offtext


Set k        subcycles
    kzero(k) subcycle 0
    i        furnaces
    j        feeds

Parameter tau(i,j) "changeover time [days]"
          D(i,j)   "processing rate [tons/day]"
          a(i,j)   "conversion parameters [1/day]"
          b(i,j)   "conversion parameter [1/day]"
          c(i,j)   "conversion parameter [1/day]"
          p(i,j)   "price parameter [$/ton]"
          Cs(i,j)  "setup/cleaning cost [$]"
          Flo(j)   lower bnd on flow rate
          Fup(j)   upper bnd on flow rate
          Cc(i,j)
          Cp(i,j)
          yk(k);

Scalar U upper bound on processing time
       epsi "small const to avoid 0/0"

Variables t(i,j)   process time of feed in furnace
          n(i,j)   number of subcycles of feed in furnace
          F(j)     rate of arrival of feed j
          S(j)     extra amount of feed processed above min
          dt(i,j)  time devoted to feed in furnace
          Tcycle   common cycle time for all furnaces
          y(i,j,k) "SOS to model n(i,j)"
          obj      objective variable;

Positive Variable t, n, S, dt, Tcycle;
Binary Variable y;

Equation   defobj       "objective is to maximize profit/cycle-time"
           massbal_1(j) "mass balance equations (8)"
           massbal_2(j) "mass balance equations (9)"
           integ_1(i,j) "integrality constraints (10)"
           integ_2(i,j) "integrality constraints (11)"
           time_1(i,j)  "relate total time of feed to processing & clean-up"
           time_2(i)    "total time less than cycle time"
           time_3(i,j)  "t(i,j) is zero if number of subcycles is zero"
           extra(j)     "extra constraints";

defobj.. Tcycle * obj =e=  sum((i,j),
                        Cc(i,j)*t(i,j) - Cs(i,j)*n(i,j)
                      + Cp(i,j)*n(i,j)*(1 - exp(-b(i,j)*t(i,j)/n(i,j)))) ;

massbal_1(j).. Flo(j)*Tcycle + S(j) =e= sum(i, D(i,j)*t(i,j));
massbal_2(j).. S(j) =l= (Fup(j) - Flo(j))*Tcycle;

integ_1(i,j).. n(i,j) =e= sum(k, yk(k) * y(i,j,k));
integ_2(i,j).. 1 =e= sum(k, y(i,j,k));

time_1(i,j)..  dt(i,j) =e= n(i,j)*tau(i,j) + t(i,j);
time_2(i)..    sum(j, dt(i,j)) =l= Tcycle;
time_3(i,j)..  t(i,j) =l= sum(kzero,U*(1 - y(i,j,kzero)));

extra(j)$(Flo(j) > 0).. sum(i, n(i,j)) =g= 1;

model csched /all/;

$if not set dataset $set dataset 1
$include csched%dataset%.inc

yk(k) = ord(k)-1; yk(kzero) = epsi;
Cc(i,j) = P(i,j)*D(i,j)*c(i,j);
Cp(i,j) = P(i,j)*D(i,j)*a(i,j)/ b(i,j);

n.up(i,j) = card(k)-1;
n.l(i,j) = 1;
n.lo(i,j) = epsi;
F.lo(j) = Flo(j); F.up(j) = Fup(j);
Tcycle.l = 100;

solve csched maximizing obj using minlp;