p17 | Open-Pit Mine Production Scheduling¶
See also
This problem is sourced from Ferchtandiker2025.
Note
The efficient formulation
p17.ais a linear relaxation of the inefficient formulationp17.b. Hence, it is not a valid reformulation ofp17.bby our constructive definition. We include it in the FormulationBench dataset as a negative reformulation example.
Description¶
Optimizing Long-Term Open-Pit Mine Production Scheduling
Open-pit mining operations require strategic long-term production schedules to maximize profitability while adhering to physical, operational, and economic constraints. A key challenge is determining when to mine each block of material (ore or waste) to maximize the Net Present Value (NPV) of the project, considering factors like ore grades, processing capacities, mining precedences, and time-discounted cash flows.
Core Challenge The mine is divided into thousands of blocks, each with specific attributes:
Ore/waste tonnage: Ore blocks contain valuable minerals (e.g., gold, copper), while waste blocks must be removed to access ore.
Grade: The concentration of valuable minerals in ore blocks.
Economic value: Calculated as revenue from mineral sales minus mining/processing costs, discounted over time. Roughly 20% of blocks are completely made up of ore. The remaining blocks contain a fraction of ore. When not accounting for discounting, the value of a block is propostional to the percentage of ore contained in it.
The goal is to sequence block extraction over multiple periods (years) to:
Maximize NPV: Prioritize high-value blocks for early extraction to account for the time value of money.
Meet processing demands: Ensure ore production stays within mill capacity limits each period.
Respect slope stability: Blocks cannot be mined until overlying layers are removed to prevent pit collapses.
Blend ore grades: Maintain average ore grades within acceptable bounds to optimize processing efficiency.
Formulations¶
Formulation a (valid)¶
See also
This formulation is sourced from Ferchtandiker2025 (formulation id: efficient).
Note
We add all listed implicit assumptions.
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of blocks |
integer |
scalar |
|
Number of scheduling periods |
integer |
scalar |
|
Net Present Value (NPV) of mining block i in period tau |
continuous |
|
|
Ore grade of each block |
continuous |
|
|
Ore tonnage of each block |
continuous |
|
|
Waste tonnage of each block |
continuous |
|
|
Minimum allowed average ore grade in any period |
continuous |
scalar |
|
Maximum allowed average ore grade in any period |
continuous |
scalar |
|
Minimum per-period ore processing capacity |
continuous |
scalar |
|
Maximum per-period ore processing capacity |
continuous |
scalar |
|
Minimum per-period total mining capacity (ore + waste) |
continuous |
scalar |
|
Maximum per-period total mining capacity (ore + waste) |
continuous |
scalar |
|
Precedence matrix: P[i][j] = 1 if block i must be mined before block j |
binary |
|
Definitions¶
Name |
Description |
Formulation |
|---|---|---|
|
Set of block indices with grade strictly less than 1 (mixed/low-grade blocks that remain binary) |
\(I_0 = \{ i \in I : g_i < 1 \}\) |
|
Set of block indices with grade equal to 1 (pure-ore blocks relaxed to continuous [0,1]) |
\(I_1 = \{ i \in I : g_i = 1 \}\) |
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
Extraction variable: binary for mixed/low-grade blocks (I0), continuous fraction in [0,1] for pure-ore blocks (I1) |
continuous |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of blocks is positive. |
\(n \geq 1\) |
yes |
Number of scheduling periods is positive. |
\(t \geq 1\) |
yes |
NPV of each block in each period is non-negative. |
\(c_i^\tau \geq 0 \quad \forall i \in I,\; \tau \in T\) |
yes |
Ore grade of each block is non-negative. |
\(g_i \geq 0 \quad \forall i \in I\) |
yes |
Ore tonnage of each block is non-negative. |
\(O_i \geq 0 \quad \forall i \in I\) |
yes |
Waste tonnage of each block is non-negative. |
\(W_i \geq 0 \quad \forall i \in I\) |
yes |
Constraints¶
Binary integrality for mixed/low-grade blocks.
\[ x_i^\tau \in \{0,1\} \quad \forall i \in I_0,\; \forall \tau \in T \]Upper grade blending constraint: weighted average ore grade does not exceed G_max in each period.
\[ \sum_{i \in I} (g_i - G_{\max}) O_i x_i^\tau \leq 0 \quad \forall \tau \in T \]Lower grade blending constraint: weighted average ore grade is at least G_min in each period.
\[ \sum_{i \in I} (g_i - G_{\min}) O_i x_i^\tau \geq 0 \quad \forall \tau \in T \]Each block is mined at most once over the entire planning horizon.
\[ \sum_{\tau \in T} x_i^\tau \leq 1 \quad \forall i \in I \]Ore processing capacity upper bound per period.
\[ \sum_{i \in I} O_i x_i^\tau \leq PC_{\max} \quad \forall \tau \in T \]Ore processing capacity lower bound per period.
\[ \sum_{i \in I} O_i x_i^\tau \geq PC_{\min} \quad \forall \tau \in T \]Total mining capacity (ore + waste) upper bound per period.
\[ \sum_{i \in I} (O_i + W_i) x_i^\tau \leq MC_{\max} \quad \forall \tau \in T \]Total mining capacity (ore + waste) lower bound per period.
\[ \sum_{i \in I} (O_i + W_i) x_i^\tau \geq MC_{\min} \quad \forall \tau \in T \]Precedence constraint: block j may be mined in period tau only after all required predecessors i (P[i][j]=1) have been fully mined by period tau.
\[ \sum_{\tau'=1}^{\tau} x_i^{\tau'} \geq x_j^\tau \quad \forall \tau \in T,\; \forall i,j \in I \text{ with } P_{ij}=1 \]
Objective¶
Maximize total discounted Net Present Value (NPV) across all blocks and periods.
Formulation b (invalid)¶
See also
This formulation is sourced from Ferchtandiker2025 (formulation id: inefficient).
Note
We add all listed implicit assumptions.
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of blocks |
integer |
scalar |
|
Number of scheduling periods |
integer |
scalar |
|
Net Present Value (NPV) of mining block i in period tau |
continuous |
|
|
Ore grade of each block |
continuous |
|
|
Ore tonnage of each block |
continuous |
|
|
Waste tonnage of each block |
continuous |
|
|
Minimum allowed average ore grade in any period |
continuous |
scalar |
|
Maximum allowed average ore grade in any period |
continuous |
scalar |
|
Minimum per-period ore processing capacity |
continuous |
scalar |
|
Maximum per-period ore processing capacity |
continuous |
scalar |
|
Minimum per-period total mining capacity (ore + waste) |
continuous |
scalar |
|
Maximum per-period total mining capacity (ore + waste) |
continuous |
scalar |
|
Precedence matrix: P[i][j] = 1 if block i must be mined before block j |
binary |
|
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
Binary indicator: 1 if block i is mined in period tau, 0 otherwise |
binary |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of blocks is positive. |
\(n \geq 1\) |
yes |
Number of scheduling periods is positive. |
\(t \geq 1\) |
yes |
NPV of each block in each period is non-negative. |
\(c_i^\tau \geq 0 \quad \forall i \in I,\; \tau \in T\) |
yes |
Ore grade of each block is non-negative. |
\(g_i \geq 0 \quad \forall i \in I\) |
yes |
Ore tonnage of each block is non-negative. |
\(O_i \geq 0 \quad \forall i \in I\) |
yes |
Waste tonnage of each block is non-negative. |
\(W_i \geq 0 \quad \forall i \in I\) |
yes |
Minimum grade bound does not exceed maximum grade bound. |
\(G_{\min} \leq G_{\max}\) |
yes |
Minimum processing capacity does not exceed maximum processing capacity. |
\(PC_{\min} \leq PC_{\max}\) |
yes |
Minimum mining capacity does not exceed maximum mining capacity. |
\(MC_{\min} \leq MC_{\max}\) |
yes |
Constraints¶
Upper grade blending constraint: weighted average ore grade does not exceed G_max in each period.
\[ \sum_{i \in I} (g_i - G_{\max}) O_i x_i^\tau \leq 0 \quad \forall \tau \in T \]Lower grade blending constraint: weighted average ore grade is at least G_min in each period.
\[ \sum_{i \in I} (g_i - G_{\min}) O_i x_i^\tau \geq 0 \quad \forall \tau \in T \]Each block is mined at most once over the entire planning horizon.
\[ \sum_{\tau \in T} x_i^\tau \leq 1 \quad \forall i \in I \]Ore processing capacity upper bound per period.
\[ \sum_{i \in I} O_i x_i^\tau \leq PC_{\max} \quad \forall \tau \in T \]Ore processing capacity lower bound per period.
\[ \sum_{i \in I} O_i x_i^\tau \geq PC_{\min} \quad \forall \tau \in T \]Total mining capacity (ore + waste) upper bound per period.
\[ \sum_{i \in I} (O_i + W_i) x_i^\tau \leq MC_{\max} \quad \forall \tau \in T \]Total mining capacity (ore + waste) lower bound per period.
\[ \sum_{i \in I} (O_i + W_i) x_i^\tau \geq MC_{\min} \quad \forall \tau \in T \]Precedence constraint: block j may be mined in period tau only after all required predecessors i (P[i][j]=1) have been mined by period tau.
\[ \sum_{\tau'=1}^{\tau} x_i^{\tau'} \geq x_j^\tau \quad \forall \tau \in T,\; \forall i,j \in I \text{ with } P_{ij}=1 \]
Objective¶
Maximize total discounted Net Present Value (NPV) across all blocks and periods.