| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mining and process industries Description
Further explanation of this example: 'Applications of optimization with Xpress-MP', Chapter 6: Mining and process industries (blending problems)
Source Files By clicking on a file name, a preview is opened at the bottom of this page.
Data Files
a5mine.mos (!****************************************************** Mosel Example Problems ====================== file a5mine.mos ``````````````` Opencast mining An opencast uranium mine is being prospected. 6 of the 18 blocks contain uranium. To extract a block, 3 blocks of the level above it need to be extracted. Blocks have varied extraction costs and each block of uranium has a different market value. The objective is to determine which blocks to extract to maximize total benefit. This model uses binary variables to indicate which blocks will be extracted. There is also a two-dimensional array to enforce the extraction order between layers. A relaxed formulation of this constraint is commented out for reference. (c) 2008-2022 Fair Isaac Corporation author: S. Heipcke, Feb. 2002, rev. Mar. 2022 *******************************************************!) model "A-5 Opencast mining" uses "mmxprs" declarations BLOCKS = 1..18 ! Set of blocks LEVEL23: set of integer ! Blocks in levels 2 and 3 COST: array(BLOCKS) of real ! Exploitation cost of blocks VALUE: array(BLOCKS) of real ! Value of blocks ARC: array(LEVEL23,1..3) of integer ! Arcs indicating order of extraction extract: array(BLOCKS) of mpvar ! 1 if block b is extracted end-declarations initializations from 'a5mine.dat' COST VALUE ARC end-initializations ! Objective: maximize total profit Profit:= sum(b in BLOCKS) (VALUE(b)-COST(b))* extract(b) ! Extraction order ! forall(b in LEVEL23) 3*extract(b) <= sum(i in 1..3) extract(ARC(b,i)) forall(b in LEVEL23) forall(i in 1..3) extract(b) <= extract(ARC(b,i)) forall(b in BLOCKS) extract(b) is_binary ! Solve the problem maximize(Profit) ! Solving LP relaxation only ! maximize(XPRS_LIN, Profit) ! Solution printing declarations WEIGHT: integer ! Weight of blocks end-declarations initializations from 'a5mine.dat' WEIGHT end-initializations writeln("Total profit:", getobjval*WEIGHT) write("Extract blocks") forall(b in BLOCKS | getsol(extract(b))>0) write(" ", b) writeln end-model | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
© Copyright 2023 Fair Isaac Corporation. |