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.

**Reference**

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

**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;
```