mine.gms : Opencast Mining

Description

This model finds an optimal extraction schedule for an opencast mine
with a side angle of 45 degrees and square plots. The extraction blocks
are identified by level, row and column number, with the surface blocks
having level number one.


Small Model of Type : LP


Category : GAMS Model library


Main file : mine.gms

$title Opencast Mining (MINE,SEQ=39)

$onText
This model finds an optimal extraction schedule for an opencast mine
with a side angle of 45 degrees and square plots. The extraction blocks
are identified by level, row and column number, with the surface blocks
having level number one.


Williams, H P, Model Building in Mathematical Programming. John Wiley
and Sons, 1978.

Keywords: linear programming, mining, scheduling
$offText

Set l 'identifiers for level row and column labels' / 1*4 /;

Alias (l,i,j);

Table conc(l,i,j) 'estimated ore concentration (percent metal)'
           1    2    3    4
   1.1   1.5  1.5  1.5  .75
   1.2   1.5  2.0  1.5  .75
   1.3   1.0  1.0  .75  .50
   1.4   .75  .75  .50  .25
   2.1     4    4    2
   2.2     3    3    1
   2.3     2    2   .5
   3.1    12    6
   3.2     5    4
   4.1     6               ;

Set
   k        'location of four neighboring blocks' / nw, "ne", se, sw /
   c(l,i,j) 'neighboring blocks related to extraction feasibility'
   d(l,i,j) 'complete set of block identifiers';

Parameter
   li(k)    'lead for i'  / (se,sw)   1 /
   lj(k)    'lead for j'  / ("ne",se) 1 /
   cost(l)  'block extraction cost' / 1 3000, 2 6000, 3 8000, 4 10000 /;

Scalar value 'extracted block value if 100 percent metal' / 200000 / ;

c(l,i,j) = yes$((ord(l) + ord(i)) <= card(l)     and (ord(l) + ord(j)) <= card(l));
d(l,i,j) = yes$( ord(l) + ord(i)  <= card(l) + 1 and  ord(l) + ord(j)  <= card(l) + 1);

display c, d;

Variable
   x(l,i,j) 'extraction of blocks'
   profit;

Positive Variable x;

Equation
   pr(k,l,i,j) 'precedence relationships'
   def         'profit definition';

def.. profit =e= sum((l,i,j)$d(l,i,j), (conc(l,i,j)*value/100 - cost(l))*x(l,i,j));

pr(k,l+1,i,j)$c(l,i,j).. x(l,i+li(k),j+lj(k)) =g= x(l+1,i,j);

x.up(l,i,j) = 1;

Model mine / all /;

solve mine maximizing profit using lp;

Parameter rep(i,j,l) 'extraction decision table';
rep(i,j,l) = x.l(l,i,j);

display rep;