# Example for the use of the Python language (Blending problem).
#
# Reading data from file.
#
# (C) 2018-2025 Fair Isaac Corporation

import xpress as xp
from Data.blend_data import COST, AVAIL, GRADE

p = xp.problem()

ROres = range(2)
REV = 125                     # Unit revenue of product.
MINGRADE = 4                  # Min permitted grade of product.
MAXGRADE = 5                  # Max permitted grade of product.

x = [p.addVariable(ub=AVAIL[o]) for o in ROres]

# Objective: maximize total profit.
p.setObjective(xp.Sum((REV - COST[o]) * x[o] for o in ROres),
               sense=xp.maximize)

# Lower and upper bounds on ore quality.
p.addConstraint(xp.Sum((GRADE[o] - MINGRADE) * x[o] for o in ROres) >= 0)
p.addConstraint(xp.Sum((MAXGRADE - GRADE[o]) * x[o] for o in ROres) >= 0)

p.optimize()

# Print out the solution.
print("Solution:\n Objective:", p.attributes.objval)
xsol = p.getSolution(x)
for o in ROres:
    print(" x(", o, "): ", xsol[o])
print("Grade: ", sum(GRADE[o] * xsol[o] for o in ROres)
      / sum(xsol[o] for o in ROres),
      " [min,max]: [", MINGRADE, ",", MAXGRADE, "]")
