# Example for the use of the Python language (Small LP-problem).
#
# Retrieve constraint activity values.
#
# (C) 2018-2025 Fair Isaac Corporation

import xpress as xp

DescrV = {}
DescrC = {}

p = xp.problem()

xs = p.addVariable()
xl = p.addVariable()

mc_time = 3*xs + 2*xl <= 400  # Limit on available machine time.
wood = xs + 3*xl <= 200       # Limit on available wood.

# Define the variable and constraint descriptions. Since the arrays
# and the indexing sets are dynamic they grow with each new variable
# description added:
DescrV = {xs: " Number of small chess sets",
          xl: " Number of large chess sets"}

DescrC = {mc_time: " Limit on available machine time",
          wood: " Limit on available wood"}

p.addConstraint(mc_time, wood)

# Define the objective function.
p.setObjective(5*xs + 20*xl, sense=xp.maximize)

p.optimize()

# Print out the solution.
print("Solution:\n Objective: ", p.attributes.objval)
print(DescrV[xs], ":", p.getSolution(xs), ",",
      DescrV[xl], ":", p.getSolution(xl))

print(" Constraint activity:")
print(DescrC[mc_time], ": ", mc_time.rhs - mc_time.getSlack(), "\n",
      DescrC[wood],    ": ", wood.rhs - wood.getSlack(), sep='')
