csched.gms : Cyclic Scheduling of Continuous Parallel Units

Description

Cyclic Scheduling of Continuous Parallel Units.

This example contains three MINLP models from two papers, JG and WEM.
The authors consider different objective functions,

JG:  Maximizing the Profit of the Units.
WEM: Maximizing the Profit of the Least Profitable Unit.
The MINLP problems have been solved by minimizing the negative profit.

JG introduces a smooth pseudoconvex MINLP minimization problem, JG.
WEM introduces a non-smooth f0-pseudoconvex MINLP min max problem, WEM,
as well as a smooth nonconvex MINLP reformulation, WEMreform of WEM.

The switch --formulation=JG|WEM|WEMreform selects the particular
problem and formulation.

In the original paper JG (for data set 2, i.e. csched2.inc) the set of
subcycles (set k) was set to 0*4 but subsequent publications used 0*10.
The switch --JGOrgSC=1 will use 0*4 for data set 2.

In paper WEM the authors report the following optimal solutions with
their ESH (Extended Supporting Hyperplane) method for data set 2:

          k=0*4      k=0*10
JG    -165398.7   -166102.0
WEM    -39071.3    -39613.1

The optimum of the WEMreform is same as for WEM.

(JG): 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.

(WEM): Westerlund T, Eronen V-P and Makela M. On Solving Generalized
Convex MINLP Problems Using Supporting Hyperplane Techniques.
Journal of Global Optimization, 71 (2018), 987-1011
https://doi.org/10.1007/s10898-018-0644-z.

Keywords: Nonsmooth optimization, Mixed integer (nonlinear) programming,
          General convexity, Supporting hyperplanes, Cutting planes,
          Cyclic scheduling, Continuous parallel units, Chemical engineering


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.

This example contains three MINLP models from two papers, JG and WEM.
The authors consider different objective functions,

JG:  Maximizing the Profit of the Units.
WEM: Maximizing the Profit of the Least Profitable Unit.
The MINLP problems have been solved by minimizing the negative profit.

JG introduces a smooth pseudoconvex MINLP minimization problem, JG.
WEM introduces a non-smooth f0-pseudoconvex MINLP min max problem, WEM,
as well as a smooth nonconvex MINLP reformulation, WEMreform of WEM.

The switch --formulation=JG|WEM|WEMreform selects the particular
problem and formulation.

In the original paper JG (for data set 2, i.e. csched2.inc) the set of
subcycles (set k) was set to 0*4 but subsequent publications used 0*10.
The switch --JGOrgSC=1 will use 0*4 for data set 2.

In paper WEM the authors report the following optimal solutions with
their ESH (Extended Supporting Hyperplane) method for data set 2:

          k=0*4      k=0*10
JG    -165398.7   -166102.0
WEM    -39071.3    -39613.1

The optimum of the WEMreform is same as for WEM.

(JG): 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.

(WEM): Westerlund T, Eronen V-P and Makela M. On Solving Generalized
Convex MINLP Problems Using Supporting Hyperplane Techniques.
Journal of Global Optimization, 71 (2018), 987-1011
https://doi.org/10.1007/s10898-018-0644-z.

Keywords: Nonsmooth optimization, Mixed integer (nonlinear) programming,
          General convexity, Supporting hyperplanes, Cutting planes,
          Cyclic scheduling, Continuous parallel units, Chemical engineering

$offText

$if not set formulation $set formulation JG
$ifI %formulation%==JG        $log --- Maximizing the Profit of the Units
$ifI %formulation%==WEM       $log --- Maximizing the Profit of the Least Profitable Unit
$ifI %formulation%==WEMreform $log --- Maximizing the Profit of the Least Profitable Unit

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 parameter  [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)  'assembled parameter Cc(i,j)=P(i,j)*D(i,j)*c(i,j)'
   Cp(i,j)  'assembled parameter Cp(i,j)=P(i,j)*D(i,j)*a(i,j)/b(i,j)'
   yk(k)    'parameter assigning k in yk(k) as yk(k)=k while yk(0)=epsi';

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

Variable
   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';

$ifThenI %formulation%==WEM
defobj.. Tcycle*obj =e= smax(i, sum(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)))));
$elseIfI %formulation%==WEMreform
defobj(i).. Tcycle*obj =g= sum(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))));
$else
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))));
$endIf
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;
obj.lo    =-300000;
obj.up    = 0;

$if not set reproduceWEB $set reproduceWEB 0
$ifThenE (%dataset%=2)and(%reproduceWEB%<>0)
   option resLim=1000, optCR=1e-5, MIP=cplex, nlp=ipopt;
   csched.nodlim = 1e6;
$endIf

solve csched minimzing obj using minlp;