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;