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;