(!*******************************************************
* Mosel Example Problems *
* ====================== *
* *
* file blend.mos *
* `````````````` *
* Example for the use of the Mosel language *
* (Blending problem) *
* *
* Reading data from file. *
* *
* (c) 2008 Fair Isaac Corporation *
* author: S. Heipcke, 2001, rev. Feb. 2010 *
*******************************************************!)
model Blend ! Start a new model
uses "mmxprs" ! Load the optimizer library
declarations
ROres = 1..2 ! Range of Ores
REV = 125 ! Unit revenue of product
MINGRADE = 4 ! Min permitted grade of product
MAXGRADE = 5 ! Max permitted grade of product
COST: array(ROres) of real ! Unit cost of ores
AVAIL: array(ROres) of real ! Availability of ores
GRADE: array(ROres) of real ! Grade of ores (measured per unit of mass)
x: array(ROres) of mpvar ! Quantities of ores used
end-declarations
! Read data from file
initializations from 'Data/blend.dat'
COST
AVAIL
GRADE
end-initializations
! Objective: maximize total profit
Profit:= sum(o in ROres) (REV-COST(o))* x(o)
! Lower and upper bounds on ore quality
LoGrade:= sum(o in ROres) (GRADE(o)-MINGRADE) * x(o) >= 0
UpGrade:= sum(o in ROres) (MAXGRADE-GRADE(o)) * x(o) >= 0
! Set upper bounds on variables
forall(o in ROres) x(o) <= AVAIL(o)
maximize(Profit) ! Solve the LP-problem
! Print out the solution
writeln("Solution:\n Objective: ", getobjval)
forall(o in ROres) writeln(" x(" + o + "): ", x(o).sol)
writeln("Grade: ",
(sum(o in ROres) GRADE(o)*x(o).sol) / sum(o in ROres) x(o).sol,
" [min,max]: [", MINGRADE, ",", MAXGRADE, "]")
end-model
|