FICO
FICO Xpress Optimization Examples Repository
FICO Optimization Community FICO Xpress Optimization Home
Back to examples browserPrevious exampleNext example

Mining and process industries

Description
Problem name and type, featuresDifficulty
A‑1 Production of alloys: Blending problem *
formulation of blending constraints; data with numerical indices, solution printout, if-then, getsol
A‑2 Animal food production: Blending problem *
formulation of blending constraints; data with string indices, as, formatted solution printout, use of getsol with linear expressions, strfmt
A‑3 Refinery : Blending problem **
formulation of blending constraints; sparse data with string indices, dynamic initialization, dynamic arrays, finalize, create, union of sets
A‑4 Cane sugar production : Minimum cost flow (in a bipartite graph) *
ceil, is_binary
A‑5 Opencast mining: Minimum cost flow **
encoding of arcs, solving LP-relaxation only
A‑6 Production of electricity: Dispatch problem **
inline if, is_integer


Further explanation of this example: 'Applications of optimization with Xpress-MP', Chapter 6: Mining and process industries (blending problems)

mosel_app_1.zip[download all files]

Source Files

Data Files





a5mine.mos

(!******************************************************
   Mosel Example Problems
   ======================

   file a5mine.mos
   ```````````````
   Opencast mining
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Feb. 2002
*******************************************************!)

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)

! Solution printing
 declarations
  WEIGHT: integer                      ! Weight of blocks
 end-declarations

 initializations from 'a5mine.dat'
  WEIGHT
 end-initializations

 writeln("Total profit:", strfmt(getobjval*WEIGHT,8,0))
 write("Extract blocks")
 forall(b in BLOCKS) write(if(getsol(extract(b))>0, " "+b, ""))
 writeln 

end-model

Back to examples browserPrevious exampleNext example