```MODEL: TITLE Dunbrmin mining problem; ! Keywords: mining / scheduling / multi-period; ! Problem: Which blocks to mine each year so we are within yearly capacity, produce a steady flow of useable material(e.g., precious metal), and satisfy removal precedence constraints; SETS: BLOCK: VALUE; YR: VSHORT; BXY( BLOCK, YR): Y; ! Y(b,t)=1 if block b removed in year t; BXB( BLOCK, BLOCK); ! Need pairs of blocks for precedences; ENDSETS DATA: ! Yearly target for value removed; YTARG = 1.1; ! Penalty/unit short of target in each year; TPEN = 2.1; ! Capacity/year in blocks removed; YCAP = 3; ! The years; YR = Y0 Y1 Y2 Y3 Y4 Y5 Y6 ; ! The individual blocks and their value; BLOCK = B01 B02 B03 B04 B05 B06 B07 B08 B09 B10 B11 B12 B13 B14 B15 ; VALUE = 0 0 .1 2 .1 .1 1.2 .2 .1 .9 .1 1.2 0 .1 1.1; ! Precedence pairs. Must do 1st block in same or earlier period than 2nd block of pair; BXB = B01,B02 B02,B03 B03,B04 B04,B05 B05,B11 B06,B07 B07,B08 B08,B09 B09,B10 B10,B11 B11,B12 B13,B14 B14,B15; ! Graphically, the blocks are arranged as follows: 1 6 13 2 7 14 3 8 15 4 9 5 10 \ / 11 12 ; ENDDATA ! Minimize the cost of shortfalls over planning horizon; MIN = @SUM( YR: TPEN * VSHORT); ! For each year t; @FOR( YR( t): ! Compute yearly short fall; [TARG] VSHORT( t) >= YTARG - @SUM( BLOCK( b): VALUE( b)* Y( b, t)); ! Enforce capacity each year; [CAPY] @SUM( BLOCK( b): Y( b, t)) <= YCAP; ); ! Precedence constraints. Year of removal of block b is <= that of b1; ! (There may be alternate/better, but less compact, ways of representing this precedence.); NYR = @SIZE( YR); @FOR( BXB( b, b1): [Prec] @SUM( YR( t): (NYR-t)*( Y(b,t)-Y(b1,t))) >= 0; ); ! A block can be removed at most once; @FOR( BLOCK( b): [ONCE] @SUM( YR( t): Y( b, t)) <= 1; ); ! You either do the block or you do not; @FOR( BXY( b, t): @BIN( Y( b, t));); ! Complications not considered here: Target value and capacity may vary from year to year. Work required to remove a block may vary among blocks. There may be a distinct removal cost for each block. Time value of money may be important. Precedence relations may be more complicated END```