```MODEL: ! Multiproduct Capacitated lot sizing; SETS: PROD/1..2/: ! Each product has a ...; ST, ! Setup time; VT, ! Production time per unit; SC, ! Setup cost; VC, ! Production cost per unit; HC; ! Holding cost per unit per period; TIME/1..6/:; PXT( PROD, TIME): ! Each product in each period has...; DEM, ! Demand; MAKE, ! Amount to produce; Y; ! = 1 if anything is produced; ENDSETS DATA: CAP = 200; ! Capacity per period; ST = 0 0; ! Setup times; VT = 1 1; ! Production time per unit; SC = 150 45; ! Setup costs; VC = 7 4; ! Cost per unit to produce; HC = 2 1; ! Holding cost per unit; DEM = 40 60 130 0 100 200 ! Demands; 0 45 50 35 20 35; ENDDATA !------------------------------------; ! The Eppen/Martin model; SETS: PXTXT( PROD, TIME, TIME)| &3 #GE# &2: PCOF, CCOF, X; ENDSETS! Compute cost and production amounts for various production runs; @FOR( PROD( I): @FOR( TIME( S): PCOF( I, S, S) = DEM( I, S); CCOF( I, S, S) = VC( I) * DEM( I, S); @FOR( TIME( T)| T #GT# S: PCOF( I, S, T) = PCOF( I, S, T - 1) + DEM( I, T); CCOF( I, S, T) = CCOF( I, S, T - 1) + ( VC( I) + HC( I) * ( T - S)) * DEM( I, T); ) ) ); ! The objective; MIN = TCOST; TCOST = @SUM( PXTXT: CCOF * X) + @SUM( PXT( I, S): SC( I) * Y( I, S)); @FOR( PROD( I): ! In period 1, some production run must be started; ! Note, watch out for periods without demand; @SUM( PXTXT( I, S, T) | S #EQ# 1: X( I, S, T)) = 1; @FOR( TIME( K)| K #GT# 1: ! If we ended a run in period K - 1...; @SUM( PXTXT( I, S, T)| T #EQ# K - 1: X( I, S, K - 1)) ! then we must start a run in period k; = @SUM( PXTXT( I, K, T): X( I, K, T)); ); ! Setup forcing; @FOR( TIME( S): Y( I, S) = @SUM( PXTXT( I, S, T) : ( PCOF( I, S, T) #GT# 0) * X( I, S, T)); ! Calc amount made each period; MAKE( I, S) = @SUM( PXTXT( I, S, T): PCOF( I, S, T) * X( I, S, T)) ) ); ! The capacity constraints; @FOR( TIME( S): @SUM( PROD( I): ST( I) * Y( I, S)) + @SUM( PXTXT( I, S, T): VT( I) * PCOF( I, S, T) * X( I, S, T)) <= CAP ); ! Make the Y's integer; @FOR( PXT: @GIN( Y)); END ```