Upload
alkis-vazacopoulos
View
145
Download
4
Tags:
Embed Size (px)
DESCRIPTION
The IML file is our user readable import or input file to the IMPL modeling and solving platform. IMPL is an acronym for Industrial Modeling and Programming Language provided by Industrial Algorithms LLC. The IML file allows the user to configure the necessary data to model and solve large-scale and complex industrial optimization problems (IOP's) such as planning, scheduling, control and data reconciliation and regression in either off or on-line environments. Please see our IML “(Basic) Reference Manual for Quantities” for a complete introduction on the basics of IML. This manual describes the configuration data necessary to model and solve IOP’s with logic and logistics (quantity and logic) variables and constraints i.e., setups, startups, shutdowns, switchovers, sequence-dependent switchovers, etc. The symbol "&" denotes an address, index, pointer or key, the "@" denotes an attribute, property, characteristic or value and the prefix "s" stands for string of which there are two other prefixes "r" and "i" for reals (double precision) and integers respectively. String addresses and attributes are case sensitive and do not require any quotes where essentially any character is allowed including spaces except for ",". Each address string field may have no more than 64 characters for it to be considered as unique and each attribute string field may have no more than 512 characters.
Citation preview
i M P l
Industrial Modeling Language (IML)
"(Advanced) Reference Manual for Logic/Logistics"
i n d u s t r I A L g o r i t h m s LLC. www.industrialgorithms.com
Version 1.0 April 2014
IAL-‐IMPL-‐IML-‐RMQL-‐1-‐0.docx
Copyright and Property of Industrial Algorithms LLC.
Introduction
The IML file is our user readable import or input file to the IMPL modeling and solving platform. IMPL is
an acronym for Industrial Modeling and Programming Language provided by Industrial Algorithms LLC.
The IML file allows the user to configure the necessary data to model and solve large-‐scale and complex
industrial optimization problems (IOP's) such as planning, scheduling, control and data reconciliation
and regression in either off or on-‐line environments.
Please see our IML “(Basic) Reference Manual for Quantities” for a complete introduction on the basics
of IML. This manual describes the configuration data necessary to model and solve IOP’s with logic and
logistics (quantity and logic) variables and constraints i.e., setups, startups, shutdowns, switchovers,
sequence-‐dependent switchovers, etc.
The symbol "&" denotes an address, index, pointer or key, the "@" denotes an attribute, property,
characteristic or value and the prefix "s" stands for string of which there are two other prefixes "r" and
"i" for reals (double precision) and integers respectively. String addresses and attributes are case
sensitive and do not require any quotes where essentially any character is allowed including spaces
except for ",". Each address string field may have no more than 64 characters for it to be considered as
unique and each attribute string field may have no more than 512 characters.
Constriction Data
IMPL allows for the configuration of several diverse types of logic and logistics (quantity and logic)
Constriction Data which comprise most of the configuration data for IOP’s involving logic and logistics
details.
Flow-‐ and holdup-‐smoothing minimizes the 1-‐norm and 2-‐norm deviations from the quantity in the
previous time-‐period against the current time-‐period.
&sUnit,&sOperation,@rFlowSmoothing1_Weight,@rFlowSmoothing2_Weight
UNIT,OPERATION, FSWEIGHT 1, FSWEIGHT2 &sUnit,&sOperation,@rFlowSmoothing1_Weight,@rFlowSmoothing2_Weight
&sUnit,&sOperation,@rHoldupSmoothing1_Weight,@rHoldupSmoothing2_Weight
UNIT,OPERATION, HSWEIGHT 1, HSWEIGHT2 &sUnit,&sOperation,@rHoldupSmoothing1_Weight,@rHoldupSmoothing2_Weight
&sUnit,&sOperation,&sPort,&sState,@rFlowSmoothing1_Weight,@rFlowSmoothing2_Weight
UNIT,OPERATION, PORT,STATE,FSWEIGHT 1, FSWEIGHT2 &sUnit,&sOperation,&sPort,&sState,@rFlowSmoothing1_Weight,@rFlowSmoothing2_Weight
Flow-‐equaling is similar to flow-‐smoothing except that equality constraints are created between the
previous and current time-‐periods instead of minimizing the 1-‐norm and 2-‐norm deviation variables in
the objective function.
&sUnit,&sOperation,@sFlowEquality
UNIT,OPERATION,ONOFF &sUnit,&sOperation,@sFlowEquality
&sUnit,&sOperation,&sPort,&sState,@sFlowEquality
UNIT,OPERATION,PORT,STATE,ONOFF &sUnit,&sOperation,&sPort,&sState,@sFlowEquality
Both lower and upper bounds for multi-‐use restrictions are applied to noncontentious units (planning)
whereas for contentious units (scheduling) the lower bound is assumed to be zero (0) and the upper is
one (1).
&sUnit,@iMultiUse_Lower,@iMultiUse_Upper
UNIT,LMULTIUSE,UMULTIUSE &sUnit,@iMultiUse_Lower,@iMultiUse_Upper
Multi-‐use on inlet and outlet unit-‐operation-‐port-‐states in terms of how many in-‐flows and out-‐flows are
allowed is configured using this frame.
&sUnit,&sOperation,&sPort,&sState,@iMultiUse_Lower,@iMultiUse_Upper
UNIT,OPERATION,PORT,STATE,LMULTIUSE,UMULTIUSE &sUnit,&sOperation,&sPort,&sState,@iMultiUse_Lower,@iMultiUse_Upper
The zero down-‐timing configuration forces IMPL not to shutdown the unit. This implies that at least
unit-‐operation must be setup for the entire future time-‐horizon.
&sUnit,@sZeroDownTiming
UNIT,ON &sUnit,@sZeroDownTiming
The lower and upper up-‐timing configuration specifies in the same time-‐units as the time-‐horizons that
the unit-‐operation, if setup or started-‐up, must be up or run for at least the lower up-‐timing configured
and no greater than the upper up-‐timing.
&sUnit,&sOperation,@rUpTiming_Lower,@rUpTiming_Upper
UNIT,OPERATION,LUPTIME,UUPTIME &sUnit,&sOperation,@rUpTiming_Lower,@rUpTiming_Upper
&sUnit,&sOperation,&sPort,&sState, &sUnit,&sOperation,&sPort,&sState,@rUpTiming_Lower,@rUpTiming_Upper
UNIT,OPERATION,PORT,STATE,UNIT2,OPERATION2,PORT2,STATE2,LUPTIME,UUPTIME &sUnit,&sOperation,&sPort,&sState,
&sUnit,&sOperation,&sPort,&sState,@rUpTiming_Lower,@rUpTiming_Upper
The lower and upper down-‐timing configuration specifies in the same time-‐units as the time-‐horizons
that the unit-‐operation, if setdown or shutdown, must be down or not run for at least the lower down-‐
timing configured and no greater than the upper down-‐timing.
&sUnit,&sOperation,@rDownTiming_Lower,@rDownTiming_Upper
UNIT,OPERATION,LDOWNTIME,UDOWNTIME &sUnit,&sOperation,@rDownTiming_Lower,@rDownTiming_Upper
The lower and upper fill-‐draw-‐delaying configuration specifies in the same time-‐units as the time-‐
horizons that for the unit-‐operation of type pool, if there is flow in to or the unit-‐operation is filling, then
any flow out of or drawing from the unit-‐operation must respect the lower and upper bounds. If the
lower bound is zero (0) then this is useful for a pool to be standing-‐gauge or also known as a dead-‐tank
i.e., as opposed to a live-‐tank.
&sUnit,&sOperation,@rFillDrawDelaying_Lower,@rFillDrawDelaying_Upper
UNIT,OPERATION,LFILLDRAWDELAY,UFILLDRAWDELAY
&sUnit,&sOperation,@rFillDrawDelaying_Lower,@rFillDrawDelaying_Upper
The switching-‐when-‐empty and -‐full configuration specifies in the quantity-‐units that for the unit-‐
operation of type pool, that if the holdup is below the empty quantity or above the full quantity then
the unit-‐operation can be switched. This is useful to model multi-‐purpose or multi-‐product (non-‐
dedicated) tanks to allow their material service, mode or operation to switch from one operation to
another provided the empty or full quantities are respected.
&sUnit,&sOperation,@rSwitchingWhen_Empty,@rSwitchingWhen_Full
UNIT,OPERATION,SWITCHWHENEMPTY,SWITCHWHENFULL &sUnit,&sOperation,@rSwitchingWhen_Empty,@rSwitchingWhen_Full
The lower and upper flow-‐delaying configuration specifies in the same time-‐units as the time-‐horizons
that for unit-‐operations of type batch-‐process and parcel, their flows in and out of their unit-‐operation-‐
port-‐states must respect these relative timings of when the unit-‐operation is started-‐up. The flow-‐
delaying configurations are also useful to model semi-‐batch operations where there can be a delay
between when material or other types of resources enter and leave the unit-‐operation.
&sUnit,&sOperation,&sPort,&sState,@rFlowDelaying_Lower,@rFlowDelaying_Upper
UNIT,OPERATION,PORT,STATE,LFLOWDELAY, UFLOWDELAY &sUnit,&sOperation,&sPort,&sState,@rFlowDelaying_Lower,@rFlowDelaying_Upper
Consolidation (Collection) Data
The Consolidation Data allows consolidations of unit-‐operations into collections such as unit-‐operation-‐
groups which are useful for applying aggregation or consolidation constraints across several diverse
unit-‐operations i.e., different units and different operations within the same group. There are also unit-‐
operation-‐operation-‐groups which are useful for sequence-‐dependent switchovers, setups or
changeovers when there is a constriction or restriction that some form of sequence-‐dependent
switchover action, activity or task must be taken between different operations in a different group on
the same unit.
&sUnit,&sOperation,&sGroup
UNIT,OPERATION,GROUP &sUnit,&sOperation,&sGroup
&sUnit,&sOperation,&sOperationGroup
UNIT,OPERATION,OGROUP
&sUnit,&sOperation,&sOperationGroup
Compatibility (Changeover) Data
The Compatibility or Changeover Data is operation-‐group centric in that on the same unit between
different operation-‐groups, IMPL allows for what we call “purging”, “prohibiting”, “phasing” and
“postponing”. “Purging” is the usual repetitive maintenance activity, task or operation that will be setup
between the “from” operation-‐group shutdown and the “to” operation-‐group startup where the last
field must be a configured and known operation on the unit – see Kelly and Zyngier,"An improved
modeling of sequence-‐dependent switchovers for discrete-‐time scheduling problems", I&ER, 46, (2007)
for details.
&sUnit,&sOperationGroup,&sOperationGroup,@sOperation
UNIT,OGROUP, OGROUP2,OPERATION &sUnit,&sOperationGroup,&sOperationGroup,@sOperation
If the last field is configured as “prohibited” then IMPL will not allow or will forbid any “from” operation-‐
group “to” operation-‐group sequence, transition or precedence and if “phased” will force or only allow
the “from” operation-‐group to be followed by the “to” operation-‐group.
“Postponing” as a word is not used explicitly where instead a lower and upper down-‐timing can be
configured which will force or maintain the unit to be shutdown in between when the “from” operation-‐
group is followed by the “to” operation-‐group.
&sUnit,&sOperationGroup,&sOperationGroup,@rDownTiming_Lower,@rDownTiming_Upper
UNIT,OGROUP, OGROUP2,LDOWNTIME,UDOWNTIME &sUnit,&sOperationGroup,&sOperationGroup,@rDownTiming_Lower,@rDownTiming_Upper
Cost Data
The Cost Data for logic is straightforward where again we have a profit-‐weight, performance1-‐weight (1-‐
norm deviations from target), performance2-‐weight (2-‐norm) and penalty-‐weight for each unit-‐
operation as well as unit-‐operation-‐port-‐state-‐unit-‐operation-‐port-‐state set of objective function
weights.
&sUnit,&sOperation,@rSetupPro_Weight, @rSetupPer1_Weight,@rSetupPer2_Weight,@rSetupPen_Weight
UNIT,OPERATION,WSPRO,WSPER1,WSPER2, WSPEN &sUnit,&sOperation,@rSetupPro_Weight,
@rSetupPer1_Weight,@rSetupPer2_Weight,@rSetupPen_Weight
In addition, for unit-‐operations of type batch-‐process and parcel we also have weights for their startup
variables when required.
&sUnit,&sOperation,@rStartupPro_Weight,
@rStartupPer1_Weight,@rStartupPer2_Weight,@rStartupPen_Weight UNIT,OPERATION,WSPRO,WSPER1,WSPER2, WSPEN &sUnit,&sOperation,@rStartupPro_Weight,
@rStartupPer1_Weight,@rStartupPer2_Weight,@rStartupPen_Weight
&sUnit,&sOperation,&sPort,&sState,&sUnit,&sOperation,&sPort,&sState,@rSetupPro_Weight, @rSetupPer1_Weight,@rSetupPer2_Weight,@rSetupPen_Weight
UNIT,OPERATION,PORT,STATE, UNIT2,OPERATION2,PORT2,STATE2,WSPRO,WSPER1,WSPER2, WSPEN &sUnit,&sOperation,&sPort,&sState,&sUnit,&sOperation,&sPort,&sState,@rSetupPro_Weight,
@rSetupPer1_Weight,@rSetupPer2_Weight,@rSetupPen_Weight
Content (Current) Data
The Content or Current Data configures the opening setup logic for unit-‐operations and unit-‐operation-‐
port-‐state-‐unit-‐operation-‐port-‐states in the past/present time-‐horizon.
&sUnit,&sOperation,@rSetup_Value,@rStart_Time
UNIT,OPERATION,SVALUE,START &sUnit,&sOperation,@rSetup_Value,@rStart_Time
&sUnit,&sOperation,&sPort,&sState, &sUnit,&sOperation,&sPort,&sState,@rSetup_Value,@rStart_Time
UNIT,OPERATION,PORT,STATE,UNIT2,OPERATION2,PORT2,STATE2,SVALUE,START &sUnit,&sOperation,&sPort,&sState,
&sUnit,&sOperation,&sPort,&sState,@rSetup_Value,@rStart_Time
Command (Control) Data
The Command or Control Data configures the order, transaction or proviso details of how the lower and
upper (hard) bounds can vary over time for unit-‐operation setups and startups and unit-‐operation-‐port-‐
state-‐unit-‐operation-‐port-‐state setups.
&sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time
UNIT,OPERATION,SLOWER,SUPPER,BEGIN,END &sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time
&sUnit,&sOperation,@rStartup_Lower,@rStartup_Upper,@rBegin_Time,@rEnd_Time
UNIT,OPERATION,SLOWER,SUPPER,BEGIN,END &sUnit,&sOperation,@rStartup_Lower,@rStartup_Upper,@rBegin_Time,@rEnd_Time
&sUnit,&sOperation,&sPort,&sState,&sUnit,&sOperation,&sPort,&sState, @rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time
UNIT,OPERATION,PORT,STATE,UNIT2,OPERATION2,PORT2,STATE2,SLOWER,SUPPER,BEGIN,END &sUnit,&sOperation,&sPort,&sState,&sUnit,&sOperation,&sPort,&sState,
@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time
To configure free or finite logic variables that will be declared as binary variables in the optimization, the
lower bound should be set to zero (0) and the upper bound to one (1). To configure fixed or forced logic
variables the lower and upper bounds should be equal to either zero (0) or one (1) i.e., off
(closed/inactive) or on (open/active) respectively.
An important aspect of IMPL’s logic order digitization or discretization from continuous-‐time to discrete-‐
time, is that the order lower and upper bounds are cumulative, aggregated or additive in nature. For
instance, to configure a fixed or forced logic variable to be zero (0) in a time-‐period (time-‐interval or
window) where it has already been fixed or forced to one (1) then the lower bound should be set to
minus one (-‐1) and the upper bound also to -‐1. This will add 1 to -‐1 resulting in 0 in the time-‐period for
both the lower and upper bounds. If previously in a time-‐interval the lower bound is zero (0) and the
upper bound is one (1) i.e., a binary variable but it needs to be fixed or forced to one (1) in a particular
time-‐period then the lower bound should be specified to one (1) and the upper bound to zero (0).
Configuration Demo (Job-‐Shop Scheduling Optimization Problem)
The Configuration Demo provided below is a small job-‐shop scheduling optimization problem with three
(3) jobs and three (3) machines which process or operate on these jobs in a predefined sequence or
precedence as shown in Figure 1.0 which is similar to what is known as a “disjunctive graph” in open-‐
shop scheduling theory. The square shapes are batch-‐processes with one in-‐port (circle) and one out-‐
port (circle with an “x” inside). The triangle shapes are pools which model unlimited wait times between
the work-‐in-‐progress of the jobs i.e., between the machines. The lines with the arrowheads are the
“flow” of the job hypothetically and the diamonds are called perimeters and represent the start and end
of the jobs.
The objective function of this example is to minimize the make-‐span or completion-‐time for processing
the three jobs on the three contentious (unary resource) machines i.e., the total-‐time to complete the
last job. Since this is an optimization (MILP) formation of the problem we discretize the time-‐horizon of
one-‐day or 24-‐hours into one-‐hour time-‐periods which tacitly assumes that the make-‐span is less than
the time-‐horizon configured. The completion-‐time for this example is 14-‐hours.
Figure 1.0 Flowsheet of Job-‐Shop Scheduling Optimization Problem.
i M P l (c)
Copyright and Property of i n d u s t r I A L g o r i t h m s LLC.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Calculation Data (Parameters)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
&sCalc,@sValue
START,0.0
BEGIN,0.0
END,24.0
PERIOD,1.0
&sCalc,@sValue
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Chronological Data (Periods)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@rPastTHD,@rFutureTHD,@rTPD
START,END,PERIOD
@rPastTHD,@rFutureTHD,@rTPD
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Construction Data (Pointers)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
&sUnit,&sOperation,@sType,@sSubtype,@sUse
End,,perimeter,,noncontiguous
Job1,,perimeter,,noncontiguous
Job11,,pool,,
Job12,,pool,,
Job2,,perimeter,,noncontiguous
Job21,,pool,,
Job22,,pool,,
Job3,,perimeter,,noncontiguous
Job31,,pool,,
Job32,,pool,,
JobPool,Draw,pool,,
JobPool,Fill,pool,,
Machine1,Job1,processb,,
Machine1,Job2,processb,,
Machine1,Job3,processb,,
Machine2,Job1,processb,,
Machine2,Job2,processb,,
Machine2,Job3,processb,,
Machine3,Job1,processb,,
Machine3,Job2,processb,,
Machine3,Job3,processb,,
&sUnit,&sOperation,@sType,@sSubtype,@sUse
&sAlias,&sUnit,&sOperation
ALLPARTS,End,
ALLPARTS,Job1,
ALLPARTS,Job11,
ALLPARTS,Job12,
ALLPARTS,Job2,
ALLPARTS,Job21,
ALLPARTS,Job22,
ALLPARTS,Job3,
ALLPARTS,Job31,
ALLPARTS,Job32,
ALLPARTS,JobPool,Draw
ALLPARTS,JobPool,Fill
ALLPARTS,Machine1,Job1
ALLPARTS,Machine1,Job2
ALLPARTS,Machine1,Job3
ALLPARTS,Machine2,Job1
ALLPARTS,Machine2,Job2
ALLPARTS,Machine2,Job3
ALLPARTS,Machine3,Job1
ALLPARTS,Machine3,Job2
ALLPARTS,Machine3,Job3
&sAlias,&sUnit,&sOperation
&sUnit,&sOperation,&sPort,&sState,@sType,@sSubtype
End,,i,,in,
Job1,,o,,out,
Job11,,i,,in,
Job11,,o,,out,
Job12,,i,,in,
Job12,,o,,out,
Job2,,o,,out,
Job21,,i,,in,
Job21,,o,,out,
Job22,,i,,in,
Job22,,o,,out,
Job3,,o,,out,
Job31,,i,,in,
Job31,,o,,out,
Job32,,i,,in,
Job32,,o,,out,
JobPool,Draw,o,,out,
JobPool,Fill,i,,in,
Machine1,Job1,i,,in,
Machine1,Job1,o,,out,
Machine1,Job2,i,,in,
Machine1,Job2,o,,out,
Machine1,Job3,i,,in,
Machine1,Job3,o,,out,
Machine2,Job1,i,,in,
Machine2,Job1,o,,out,
Machine2,Job2,i,,in,
Machine2,Job2,o,,out,
Machine2,Job3,i,,in,
Machine2,Job3,o,,out,
Machine3,Job1,i,,in,
Machine3,Job1,o,,out,
Machine3,Job2,i,,in,
Machine3,Job2,o,,out,
Machine3,Job3,i,,in,
Machine3,Job3,o,,out,
&sUnit,&sOperation,&sPort,&sState,@sType,@sSubtype
&sAlias,&sUnit,&sOperation,&sPort,&sState
ALLINPORTS,End,,i,
ALLINPORTS,Job11,,i,
ALLINPORTS,Job12,,i,
ALLINPORTS,Job21,,i,
ALLINPORTS,Job22,,i,
ALLINPORTS,Job31,,i,
ALLINPORTS,Job32,,i,
ALLINPORTS,JobPool,Fill,i,
ALLINPORTS,Machine1,Job1,i,
ALLINPORTS,Machine1,Job2,i,
ALLINPORTS,Machine1,Job3,i,
ALLINPORTS,Machine2,Job1,i,
ALLINPORTS,Machine2,Job2,i,
ALLINPORTS,Machine2,Job3,i,
ALLINPORTS,Machine3,Job1,i,
ALLINPORTS,Machine3,Job2,i,
ALLINPORTS,Machine3,Job3,i,
ALLOUTPORTS,Job1,,o,
ALLOUTPORTS,Job11,,o,
ALLOUTPORTS,Job12,,o,
ALLOUTPORTS,Job2,,o,
ALLOUTPORTS,Job21,,o,
ALLOUTPORTS,Job22,,o,
ALLOUTPORTS,Job3,,o,
ALLOUTPORTS,Job31,,o,
ALLOUTPORTS,Job32,,o,
ALLOUTPORTS,JobPool,Draw,o,
ALLOUTPORTS,Machine1,Job1,o,
ALLOUTPORTS,Machine1,Job2,o,
ALLOUTPORTS,Machine1,Job3,o,
ALLOUTPORTS,Machine2,Job1,o,
ALLOUTPORTS,Machine2,Job2,o,
ALLOUTPORTS,Machine2,Job3,o,
ALLOUTPORTS,Machine3,Job1,o,
ALLOUTPORTS,Machine3,Job2,o,
ALLOUTPORTS,Machine3,Job3,o,
&sAlias,&sUnit,&sOperation,&sPort,&sState
&sUnit,&sOperation,&sPort,&sState,&sUnit,&sOperation,&sPort,&sState
Job1,,o,,Machine1,Job1,i,
Job11,,o,,Machine2,Job1,i,
Job12,,o,,Machine3,Job1,i,
Job2,,o,,Machine1,Job2,i,
Job21,,o,,Machine3,Job2,i,
Job22,,o,,Machine2,Job2,i,
Job3,,o,,Machine2,Job3,i,
Job31,,o,,Machine1,Job3,i,
Job32,,o,,Machine3,Job3,i,
JobPool,Draw,o,,End,,i,
Machine1,Job1,o,,Job11,,i,
Machine1,Job2,o,,Job21,,i,
Machine1,Job3,o,,Job32,,i,
Machine2,Job1,o,,Job12,,i,
Machine2,Job2,o,,JobPool,Fill,i,
Machine2,Job3,o,,Job31,,i,
Machine3,Job1,o,,JobPool,Fill,i,
Machine3,Job2,o,,Job22,,i,
Machine3,Job3,o,,JobPool,Fill,i,
&sUnit,&sOperation,&sPort,&sState,&sUnit,&sOperation,&sPort,&sState
&sAlias,&sUnit,&sOperation,&sPort,&sState,&sUnit,&sOperation,&sPort,&sState
ALLPATHS,JobPool,Draw,o,,End,,i,
ALLPATHS,Machine1,Job1,o,,Job11,,i,
ALLPATHS,Machine2,Job1,o,,Job12,,i,
ALLPATHS,Machine1,Job2,o,,Job21,,i,
ALLPATHS,Machine3,Job2,o,,Job22,,i,
ALLPATHS,Machine2,Job3,o,,Job31,,i,
ALLPATHS,Machine1,Job3,o,,Job32,,i,
ALLPATHS,Machine2,Job2,o,,JobPool,Fill,i,
ALLPATHS,Machine3,Job1,o,,JobPool,Fill,i,
ALLPATHS,Machine3,Job3,o,,JobPool,Fill,i,
ALLPATHS,Job1,,o,,Machine1,Job1,i,
ALLPATHS,Job2,,o,,Machine1,Job2,i,
ALLPATHS,Job31,,o,,Machine1,Job3,i,
ALLPATHS,Job11,,o,,Machine2,Job1,i,
ALLPATHS,Job22,,o,,Machine2,Job2,i,
ALLPATHS,Job3,,o,,Machine2,Job3,i,
ALLPATHS,Job12,,o,,Machine3,Job1,i,
ALLPATHS,Job21,,o,,Machine3,Job2,i,
ALLPATHS,Job32,,o,,Machine3,Job3,i,
&sAlias,&sUnit,&sOperation,&sPort,&sState,&sUnit,&sOperation,&sPort,&sState
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Capacity Data (Prototypes)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
&sUnit,&sOperation,@rHoldup_Lower,@rHoldup_Upper
ALLPARTS,1.0,1.0
JobPool,Fill,0.0,3.0
JobPool,Draw,0.0,3.0
Job11,,0.0,1.0
Job12,,0.0,1.0
Job21,,0.0,1.0
Job22,,0.0,1.0
Job31,,0.0,1.0
Job32,,0.0,1.0
&sUnit,&sOperation,@rHoldup_Lower,@rHoldup_Upper
&sUnit,&sOperation,&sPort,&sState,@rTeeRate_Lower,@rTeeRate_Upper
ALLINPORTS,0.0,1.0
ALLOUTPORTS,0.0,1.0
&sUnit,&sOperation,&sPort,&sState,@rTeeRate_Lower,@rTeeRate_Upper
&sUnit,&sOperation,&sPort,&sState,@rTotalRate_Lower,@rTotalRate_Upper
ALLINPORTS,0.0,1.0
ALLOUTPORTS,0.0,1.0
&sUnit,&sOperation,&sPort,&sState,@rTotalRate_Lower,@rTotalRate_Upper
&sUnit,&sOperation,&sPort,&sState,@rYield_Lower,@rYield_Upper,@rYield_Fixed
Machine1,Job1,i,,1.0,1.0,
Machine1,Job2,i,,1.0,1.0,
Machine1,Job3,i,,1.0,1.0,
Machine2,Job1,i,,1.0,1.0,
Machine2,Job2,i,,1.0,1.0,
Machine2,Job3,i,,1.0,1.0,
Machine3,Job1,i,,1.0,1.0,
Machine3,Job2,i,,1.0,1.0,
Machine3,Job3,i,,1.0,1.0,
Machine1,Job1,o,,1.0,1.0,
Machine1,Job2,o,,1.0,1.0,
Machine1,Job3,o,,1.0,1.0,
Machine2,Job1,o,,1.0,1.0,
Machine2,Job2,o,,1.0,1.0,
Machine2,Job3,o,,1.0,1.0,
Machine3,Job1,o,,1.0,1.0,
Machine3,Job2,o,,1.0,1.0,
Machine3,Job3,o,,1.0,1.0,
&sUnit,&sOperation,&sPort,&sState,@rYield_Lower,@rYield_Upper,@rYield_Fixed
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Constriction Data (Practices/Policies)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
&sUnit,&sOperation,@rUpTiming_Lower,@rUpTiming_Upper
Machine1,Job1,3.0,3.0
Machine1,Job2,2.0,2.0
Machine1,Job3,2.0,2.0
Machine2,Job1,3.0,3.0
Machine2,Job2,4.0,4.0
Machine2,Job3,3.0,3.0
Machine3,Job1,3.0,3.0
Machine3,Job2,3.0,3.0
Machine3,Job3,1.0,1.0
&sUnit,&sOperation,@rUpTiming_Lower,@rUpTiming_Upper
&sUnit,&sOperation,&sPort,&sState,@rFlowDelaying_Lower,@rFlowDelaying_Upper
Machine1,Job1,i,,0.0,0.0
Machine1,Job2,i,,0.0,0.0
Machine1,Job3,i,,0.0,0.0
Machine2,Job1,i,,0.0,0.0
Machine2,Job2,i,,0.0,0.0
Machine2,Job3,i,,0.0,0.0
Machine3,Job1,i,,0.0,0.0
Machine3,Job2,i,,0.0,0.0
Machine3,Job3,i,,0.0,0.0
Machine1,Job1,o,,3.0,3.0
Machine1,Job2,o,,2.0,2.0
Machine1,Job3,o,,2.0,2.0
Machine2,Job1,o,,3.0,3.0
Machine2,Job2,o,,4.0,4.0
Machine2,Job3,o,,3.0,3.0
Machine3,Job1,o,,3.0,3.0
Machine3,Job2,o,,3.0,3.0
Machine3,Job3,o,,1.0,1.0
&sUnit,&sOperation,&sPort,&sState,@rFlowDelaying_Lower,@rFlowDelaying_Upper
&sUnit,&sOperation,@rSwitchingWhen_Empty,@rSwitchingWhen_Full
JobPool,Fill,,3.0
&sUnit,&sOperation,@rSwitchingWhen_Empty,@rSwitchingWhen_Full
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Cost Data (Pricing)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
&sUnit,&sOperation,&sPort,&sState,@rFlowPro_Weight,@rFlowPer1_Weight,@rFlowPer2_Weight,@rFlowPen_Weight,@rBegin_Time,@rEnd_Time
End,,i,,-1.0,,,,0.0,1.0
End,,i,,-2.0,,,,1.0,2.0
End,,i,,-3.0,,,,2.0,3.0
End,,i,,-4.0,,,,3.0,4.0
End,,i,,-5.0,,,,4.0,5.0
End,,i,,-6.0,,,,5.0,6.0
End,,i,,-7.0,,,,6.0,7.0
End,,i,,-8.0,,,,7.0,8.0
End,,i,,-9.0,,,,8.0,9.0
End,,i,,-10.0,,,,9.0,10.0
End,,i,,-11.0,,,,10.0,11.0
End,,i,,-12.0,,,,11.0,12.0
End,,i,,-13.0,,,,12.0,13.0
End,,i,,-14.0,,,,13.0,14.0
End,,i,,-15.0,,,,14.0,15.0
End,,i,,-16.0,,,,15.0,16.0
End,,i,,-17.0,,,,16.0,17.0
End,,i,,-18.0,,,,17.0,18.0
End,,i,,-19.0,,,,18.0,19.0
End,,i,,-20.0,,,,19.0,20.0
End,,i,,-21.0,,,,20.0,21.0
End,,i,,-22.0,,,,21.0,22.0
End,,i,,-23.0,,,,22.0,23.0
End,,i,,-24.0,,,,23.0,24.0
&sUnit,&sOperation,&sPort,&sState,@rFlowPro_Weight,@rFlowPer1_Weight,@rFlowPer2_Weight,@rFlowPen_Weight,@rBegin_Time,@rEnd_Time
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Content/Current Data (Past, Present Provisos)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
&sUnit,&sOperation,@rHoldup_Value,@rStart_Time
JobPool,Fill,0.0,-1.0
Job11,,0.0,-1.0
Job12,,0.0,-1.0
Job21,,0.0,-1.0
Job22,,0.0,-1.0
Job31,,0.0,-1.0
Job32,,0.0,-1.0
&sUnit,&sOperation,@rHoldup_Value,@rStart_Time
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Command Data (Future Provisos)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
&sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time
ALLPARTS,0,1,BEGIN,END
Job1,,1,0,BEGIN,END
Job2,,1,0,BEGIN,END
Job3,,1,0,BEGIN,END
End,,1,0,BEGIN,END
Job11,,1,0,BEGIN,END
Job12,,1,0,BEGIN,END
Job21,,1,0,BEGIN,END
Job22,,1,0,BEGIN,END
Job31,,1,0,BEGIN,END
Job32,,1,0,BEGIN,END
&sUnit,&sOperation,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time
&sUnit,&sOperation,&sPort,&sState,&sUnit,&sOperation,&sPort,&sState,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time
ALLPATHS,0,1,BEGIN,END
&sUnit,&sOperation,&sPort,&sState,&sUnit,&sOperation,&sPort,&sState,@rSetup_Lower,@rSetup_Upper,@rBegin_Time,@rEnd_Time
&sUnit,&sOperation,&sPort,&sState,@rHoldup_Lower,@rHoldup_Upper,@rHoldup_Target,@rBegin_Time,@rEnd_Time
Job1,,o,,1.0,1.0,,BEGIN,END
Job2,,o,,1.0,1.0,,BEGIN,END
Job3,,o,,1.0,1.0,,BEGIN,END
End,,i,,1.0,1.0,,BEGIN,END
&sUnit,&sOperation,&sPort,&sState,@rHoldup_Lower,@rHoldup_Upper,@rHoldup_Target,@rBegin_Time,@rEnd_Time