ABSTRACT
This paper addresses the optimisation of mineral value chains under metal and material type uncertainty. A mathematical model to simultaneously optimise the extraction decisions and the destination decisions is proposed. A fix-and-optimise scheme that exploits the structure of the problem and uses relaxation and decomposition techniques is introduced to obtain an initial solution, and an adaptive large neighbourhood search heuristic is developed to improve this solution. The proposed solution approach is tested on a real copper-gold mining complex. The results of these experiments show the ability of the proposed solution approach to efficiently address large instances of realistic size and provide schedules where the most valuable material is mined and processed early in the life of the mine and where the risk of not meeting production targets is successfully managed.
Disclosure statement
No potential conflict of interest was reported by the author(s).
Annex A. Destroy methods
The 14 destroy methods used to select the blocks to be removed from the current solution,
, are described below. Unless otherwise specified, all destroy methods follow the general scheme summarised in Algorithm 2 and select blocks based on priority rules. More precisely, an index
, henceforth referred to as a priority value, is first calculated for each block
using information derived from the current solution and/or from the history of the search. Blocks are then ranked in ascending or descending order of
, and the
first blocks are selected. The way the priority values
are computed differs from one method to another. Before describing how each method compute the
values and how it ranks the blocks, some extra notation is introduced.
Let be the number of destinations to which block
can be sent without violating the admissibility constraints (recall that
if block
is admissible for destination
under scenario
and 0 otherwise). Given the current solution
, denote by:
: the period in which block
is extracted in solution
the earliest period in which block
can be extracted without violating the slope constraints (recall that
denotes the set of immediate predecessors of block
).
the latest period in which block
can be extracted without violating the slope constraints (
denotes the set of immediate successors of block
).
the total tonnage, under scenario
of blocks extracted in period
in solution
the total tonnage, under scenario
of blocks processed at destination
during period
in solution
In what follows, in order to simplify the notation, the dependence on will be omitted whenever there is no risk of ambiguity; that is,
will be used instead of
and so on.
A.1. Random picker (D1)
The main purpose of this method is to diversify the search. It simply selects at random blocks from the current solution
to alleviate the risk of choosing the same blocks many times. This can be seen as associating with each block a random integer value
chosen between 1 and
and ranking the blocks in ascending order of
(recall that
denotes the number of blocks being scheduled).
A.2. Historical frequency (D2)
This method uses historical information to select the blocks. It relies on a frequency array where each entry
is associated with a block
. This frequency array keeps track of the number of times that each block
has been involved in destroying the solution since the beginning of the search process; that is, the
values are initially set to 0, and whenever the block
is selected by a destroy method, then the value of the entry
is incremented. The priority values of the blocks are calculated as
, and the blocks are ranked in ascending order of
. Thus, this method selects the blocks less frequently chosen so far in order to diversify the search.
A.3. Historical best (D3)
This method is also based on historical information, but it additionally uses the value of the current solution, . It aims to select the blocks that seem to be sent to the wrong destinations in the current solution with regard to the best-known solutions. More precisely, let
be the set of solutions found so far in which block
is extracted in period
. We define an
matrix
. The value
of entry
in this matrix corresponds to the value of the best solution in the set
(i.e.
). All
values are initially set to a large negative value, and they are updated each time a new solution is found. Recall that
denotes the period in which block
is extracted in the current solution. The priority value of block
is calculated as
. Hence, a positive value of
means that in one of the solutions found in the past
, block
is extracted in the period as it is in the current solution (
); however, the value of
is better than the value of
. This might be because in the current solution
is sent to the wrong destinations, and thus removing it from these destinations might result in an improvement. The blocks are ranked in descending order of
to favour the blocks that present the largest deviations
.
A.4. Greedy picker (D4)
This method selects the costliest blocks in the current solution in an attempt to extract them in other periods where they will generate more profit and/or send them to better destinations. Identifying these blocks reduces to identifying blocks whose removal increases the value of the objective function the most. Let denote the value of the current solution
if block
is removed from the schedule. The priority value of
is calculated as the difference between this value and the value of the current solution; i.e.
. The blocks are ranked in decreasing order of
.
A.5. Period mobility (D5)
This method selects the blocks that can be extracted in other periods without violating the slope constraints, for it is easier to modify the period in which these blocks are extracted and thus create new feasible solutions different from the current one. Moreover, when selecting such blocks, we take care to favour blocks whose removal does not increase the mining shortage cost (third term of the objective function (14)). Let be a small value (
= 0.0001 in the numerical results presented in Section 5). The priority value of block
is calculated as follows:
Note that the numerator represents the number of periods in which block
can be extracted in the current solution without violating the slope constraints, while the denominator
is equal to a small value if removing
from its current period
does not incur a mining shortage in
under any scenario, and it is equal to the total shortage amount considering all scenarios otherwise. Hence, a block with a high value of
has more feasible reinsertion possibilities (in terms of periods of extraction) and is less likely to incur a mining shortage if removed from its current period. For this reason, the blocks are ranked in descending order of
.
A.6. Destination mobility (D6)
This method has the same objective as the previous one; that is, to select blocks that can lead to a new feasible solution different from the current one. However, the blocks are ranked by the number of destinations to which they can be sent rather than the number of periods in which they can be extracted. Recall that represents the number of admissible destinations for block
in scenario
. The priority values are calculated using the formula below, and the blocks are ranked in descending order of these values:
Clearly, an unmined block cannot be sent to any destination, and thus if selected, one cannot modify its destination and get a new solution different from the current one. This is why unmined blocks are given less priority (the corresponding values are set to 0 to avoid selecting them).
A.7. Combined mobility (D7)
This method combines the two previous ones (Period mobility and Destination mobility). It accounts not only for the periods in which each block can be extracted, but also for the destinations to which the block can be sent. More precisely, the priority values are computed using the following formula:
The term () accounts for the number of destinations to which block
can be sent if its period of extraction is not modified (its current destination under each scenario does not contribute to this term), while the term (
) considers the other periods to which the block can be moved while satisfying the slope constraints. The blocks are ranked in descending order of
to select those with many feasible reinsertion possibilities.
A.8. Predecessor relatedness (D8)
This method has the same objective as the last three ones: create new feasible solutions different from the current one. However, it does not rely on the number of feasible reinsertion possibilities of each block nor does it follow the general scheme outlined in Algorithm 2. It selects blocks along with their predecessors extracted in the same period, as this should allow modifying their period of extraction and create a new feasible solution (more specifically, advance their extraction together which will ensure the satisfaction of the slope constraints). This is done in three steps. In the first step, a random integer value is chosen between 1 and
(recall that
is the number of periods over which the blocks are being scheduled). Then,
periods are selected at random. The priority values are not calculated for all blocks but only for blocks extracted in one of these
periods. Let
be such a period and
be a block extracted in
. Denote by
the number of blocks in the inverted cone formed by
and its predecessors extracted in
. Recall that
blocks should be selected. We set
and among the blocks currently extracted in
, the block with the smallest value of
is selected, as well as its predecessors extracted in
. Ties are broken up randomly. This process is repeated for each of the
periods.
A.9. Successor relatedness (D9)
This method is similar to the previous one except that it selects blocks along with their successors. Apart from the fact that represents the number of blocks in the cone formed by
and its successors extracted in the same period, the procedure to select the blocks is identical to the procedure described in the previous section (A.8).
A.10. Mining reduction (D10)
The objective of this method is to select blocks whose removal can reduce the mining surplus (i.e. decrease the value of the fourth term of the objective function) or reduce the tightness of the mining capacity constraints to make room for new blocks. The priority values are computed as follows:
The blocks are ranked in descending order of. Note that if an extracted block
cannot be moved to another period (
) without violating the slope constraints (i.e. if
and
), then the corresponding priority value
is equal to 0 to avoid selecting it. This is done to make it easy for the repair method to create new feasible solutions. The priority value of a block that is not extracted in the current solution (i.e. such that
) is also set to
to avoid selecting it, as such blocks are not extracted and thus have no influence on the mining capacity constraints (changing their periods does not affect the fourth term of the objective function (14)).
A.11. Processing reduction (D11)
This method is based on similar ideas as the previous one and aims to reduce the amount of surplus at the different destinations and/or the tightness of the processing capacity constraints. To be more precise, recall that denotes the total tonnage of blocks processed at destination
during period
under scenario
in the current solution, and that
is the processing capacity at
during
. Denote by
the number of feasible reinsertion possibilities for block
under scenario
. Thus, if block
cannot be moved to another period (i.e. if
), and if it can be sent to only one destination under scenario
(i.e. and if
), then
. Otherwise,
. The priority values
are calculated using the formula below, and the blocks are ranked in descending order of
:
Note that the way the ’s are defined implies that the blocks that are not extracted in the current solution, as well as the blocks that are extracted but can neither be moved to a different period nor sent to another destination for all scenarios, have the lowest priority values (0) to avoid selecting them. As for the previous method, the idea is to prevent getting a solution similar to the current one when applying the repair method.
A.12. Shortage cautious (D12)
The purpose of this method is to find blocks that can be sent to destinations more profitable than their current destinations without incurring a shortage in their current destination. Denote by the destination to which block
is sent under scenario
in the current solution. Let
be the best destination to which block
can be sent under scenario s; i.e.
(recall that
represents the economic value to be generated if block
is processed at destination
in scenario
. This value is calculated as the return from selling the recovered metal minus the processing, transportation, and selling costs.
is set to a large negative value if
is not admissible for destination
under scenario
). Again, let
be a small positive value, and let
be a large positive value. Recall that
is the economic discount rate. The priority values are computed using the following formula, and the blocks are ranked in descending order of the priority values:
In this formula, is used to account for the discount factor. The numerator (
) is used to favour blocks that can improve the second term of the objective function (14) the most. The denominator (
)) is used to favour blocks that will not incur a shortage if removed from their current destination (will not increase the fifth term of the objective function (14)). Finally, the priority values of blocks that are not extracted in the current solution are set to a large negative value to avoid selecting them, as these blocks do not contribute to any term of the objective function (14).
A.13. Empty one period (D13)
This method does not compute the priority values and does not necessarily select blocks. It randomly selects one period and adds all the blocks extracted in that period to the list
(list of selected blocks). The motivation is to allow all destinations in a given period to be empty and completely remake the destination decisions (reconstruct the destination plans) with the repair method. By doing so, more opportunities for new block combinations in the different destinations are created.
A.14. Empty waste dump (D14)
In a given period and under a given scenario, some blocks might be sent to the waste dump while they can be sent to profitable destinations where they can be processed and generate revenue. This method aims to select such blocks to improve the solution. Let be a parameter equal to 1 if block
is sent to the waste dump under scenario
in the current solution, and 0 otherwise. Clearly,
if
is not extracted in the current solution. The priority values are computed using the formula below, and the blocks are ranked in descending order of these values:
The term accounts for the number of the destinations to which block
can be sent under scenario
, excluding its current destination, while
accounts for the periods in which
can be extracted without violating the slope constraints, including its current period of extraction. The factor
is used to avoid selecting blocks that are currently not in the waste dump under any scenario.
Annex B. Repair methods
Referring to Algorithms 1 and 2, the blocks in the list , identified by the selected destroy method, are removed from the current solution
, resulting in an infeasible solution
. This means that all the variables associated with the blocks that are not in
are fixed, and the remaining variables are ‘free’. One of the seven methods described below is used to reinsert each block in
in other feasible periods and/or destinations to obtain a new feasible solution
that is, to optimise the ‘free’ variables. The following notation is used. Given the solution to repair
,
denotes the set of blocks extracted in period
. The set of blocks processed in destination
during period
under scenario
is denoted by
B.1. Random repair (R1)
This method considers one block at a time, which is selected randomly, and sequentially chooses the period and the destinations in which
will be scheduled. This is done as follows: The method starts by identifying the set of feasible periods
in which
can be extracted without violating the slope constraints. In doing so, the predecessors and the successors of
that are in the list
are not accounted for. Then, one of the periods in
is selected randomly, and
is scheduled to be extracted in that period. The next step is to decide in which destination
will be processed under each scenario, and again this is done randomly; i.e. under each scenario,
can be processed in any destination as long as it is an admissible destination. When all scenarios are considered,
is removed from
, another block is chosen, and the process is repeated until the list
is empty.
B.2. Greedy repair (R2)
This method is similar to the previous one in the sense that it considers blocks one at a time and sequentially determines the period and the destinations for the selected block before considering another block, but, to this end, it uses selection criteria different from those used by R1 as explained below. To simplify the presentation, we denote by
is used to evaluate the cost of extracting a block
in period
accounting for all blocks that are already extracted in this period, whereas
is used to measure how profitable it is in scenario
and period
to process an additional block in destination
accounting for blocks that are already processed in
. Again, let
denote the set of feasible periods in which
can be extracted, considering only its predecessors and successors that are not in
. For each period
, the repair method R2 first uses function (29) to compute the cost of extracting
in period
:
. Then, it considers the scenarios sequentially and for each scenario, it finds, following a greedy approach, the destination in which
can be processed. For that, function (30) is used and the following is computed to measure how feasible and profitable it is to process
in
:
if
is admissible to
under scenario
, and
is set equal to a large negative value otherwise.
Let . Clearly, the maximum profit that one can expect if block
is extracted in period
is
. Once all periods in
are considered, the period
is identified and block
is scheduled to be extracted in
(i.e. it is included in the set
). Finally, for each scenario
,
is sent to destination
(i.e. it is included in the set
).
B.3. Capacity cautious repair (R3)
This method is very similar to the previous one except for the following differences:
and
are here defined by Equationequations (31)
(31)
(31) and (Equation32
(32)
(32) ) below rather than (29) and (30) in order to select the periods/destinations that will leave the most residual capacity for forthcoming blocks. This is done to introduce some lookahead perspective when reinserting the blocks.
(2) Accordingly, instead of
(i.e. the best destination for a block in a given scenario and period is the one having the smallest capacity utilisation).
(3) is set equal to
and
B.4. MCFP repair (R4 and R5)
To repair the solution, this method combines the random repair heuristic (R1) and the MCFP heuristic described in Section 3.2. More specifically, it starts by assigning feasible periods to blocks in as in R1; that is, for each block
,
is first identified, then
is included in
where
is chosen randomly in
. Once this step is completed, the destination plans for each period
that have been affected at the previous step are determined by solving the
described in 3.2. This is done by applying the MCFP heuristic on each scenario separately. When applying the MCFP heuristic, the decisions associated with the blocks that were not in
(i.e. blocks that were not selected by the destroy method) are fixed to their current values. Another alternative, which is more flexible and might lead to better quality solutions but at the expense of longer computational times, is to reconstruct the destination plan from scratch (i.e. none of the parts of the plan is fixed and all the decisions are to optimise). In this paper, we examine the two alternatives, which leads to two variants of the MCFP repair method. The variant that solves a partial destination problem (first alternative) is denoted by R4, while the variant that solves the full destination problem (second alternative) is denoted by R5.
B.5. MIP repair (R6 and R7)
This method is very similar to the previous one. All the extraction decisions are made first before designing the destination plans. Again, the latter are determined by considering only periods that have been affected when making the extraction decisions, considering the scenarios separately. However, rather than using MCFP, a mixed-integer programming solver is used to find the optimal values of the variables ,
, and
that maximise the net present economic value to be generated from processing the blocks extracted in period
minus the total penalty costs of not satisfying the demands or exceeding the capacities of the different destinations during this period. Again, one can fix the binary variables
corresponding to the blocks
that were not selected by the destroy method to their current values, which results in a variant of the MIP repair method that we will denote by R6 as one can ‘free’ all variables, which gives yield to another variant of the MIP repair method denoted by R7.