c-sched1
minco
Knitro
AMPL
short
= 0; # process time of feed in furnace
var n {feeds,furnaces} >= 0, <= K,
:= 1.0; # number of subcycles of feed in furnace
var F {i in feeds} >= Flo[i], <= Fup[i];# rate of arrival of feed i
var S {feeds} >= 0; # extra amount of feed processed above min
var dt {feeds,furnaces} >= 0; # time devoted to feed in furnace
var Tcycle >= 0; # common cycle time for all furnaces
var y {feeds,furnaces,0..K} >= 0, <= 1,
binary; # SOS to model n[i,l]
# ... objective is to maximize profit/cycle-time
maximize profit: sum{i in feeds, l in furnaces}
( Cc[i,l]*t[i,l] - Cs[i,l]*n[i,l]
+ Cp[i,l]*n[i,l]*(1 - exp(-b[i,l]*t[i,l]/n[i,l]) )
) / Tcycle;
subject to
# ... mass balance equations (8) & (9)
massbal_1{i in feeds}: Flo[i]*Tcycle + S[i] = sum{l in furnaces}( D[i,l]*t[i,l] );
massbal_2{i in feeds}: S[i] <= ( Fup[i] - Flo[i] )*Tcycle;
# ... integrality constraints (10) & (11)
integ_1{i in feeds, l in furnaces}: n[i,l] = sum{k in 0..K} yk[k] * y[i,l,k];
integ_2{i in feeds, l in furnaces}: 1 = sum{k in 0..K} y[i,l,k];
# ... timing constraint (13): relate total time of feed to processing & clean-up
time_1{i in feeds, l in furnaces}: dt[i,l] = n[i,l]*tau[i,l] + t[i,l];
# ... timing constraint (14): total time less than cycle time
time_2{l in furnaces}: sum{i in feeds} dt[i,l] <= Tcycle;
# ... timing constraint (15): t[i,l] is zero if number of subcycles is zero
time_3{i in feeds, l in furnaces}: t[i,l] <= U*(1 - y[i,l,0]);
# .. extra constraints
extra{i in feeds: Flo[i] > 0}: sum{l in furnaces} n[i,l] >= 1;
]]>
solve;
display _varname, _var;
# c-sched.mod OLR2-AN-v-v
# AMPL coding: S. Leyffer, University of Dundee, March 2000.
#
# Source: V. Jain, I.E. Grossmann, "Cyclic Scheduling of Continuous
# Parallel Units with Decaying Performance", AIChE Journal,
# 44, 1623-1636.
#
# Formulation with binary variables
#
# data files: c-sched1.dat = Example 1 (3 feeds, single furnace)