# Example problem

• Each unit of A requires 1 unit of Milk and 3 units of Choco,
• Each unit of B requires 1 unit of Milk and 2 units of Choco.
• Rs. 6 per unit A sold,
• Rs. 5 per unit B sold.

# Mathematical formulation

## Decision variables:

• x be the total number of units produced by A,
• y be the total number of units produced by B.

# Installing Pyomo

`pip install pyomo`

# Pyomo model

## Import required packages

`from pyomo.environ import * from pyomo.opt import SolverFactory`

## Create a model

`model = ConcreteModel(name=”(My-Pyomo-Model)”)`

## Define decision variables of the model

`model.x = Var(domain = NonNegativeReals, name = ‘x’) model.y = Var(domain = NonNegativeReals, name = ‘y’)`

## Define the objective function of the model

`model.objective = Objective(expr = 6*model.x + 5*model.y, sense = maximize)`

## Add constraints to the model

`model.constraints = ConstraintList()model.constraints.add(model.x + model.y <= 5); # constraint-1 model.constraints.add(3*model.x + 2*model.y <= 12); # constraint-2 # to suppress unnecessary outputs, use a semicolon at the end`

## Create a solver

`solver = SolverFactory(“/opt/ibm/ILOG/CPLEX_Studio1271/cplex/bin/x86–64_linux/cplexamp”)`

## Solve the model

`sol = solver.solve(model)`

## Print the solution

`print(sol)`
`Problem: - Lower bound: -inf Upper bound: inf Number of objectives: 1 Number of constraints: 2 Number of variables: 2 Sense: unknownSolver: - Status: ok Message: CPLEX 12.7.1.0\x3a optimal solution; objective 27; 2 dual simplex iterations (1 in phase I) Termination condition: optimal Id: 0 Error rc: 0 Time: 0.2711672782897949Solution: - number of solutions: 0 number of solutions displayed: 0`

## Retrieving decision variables’ values

`print(‘x =’, model.x.value)print(‘y =’, model.y.value)`
`x = 2.0000000000000004y = 2.9999999999999996`

## Retrieve the objective value

`print(‘The objective value is =’,model.objective())`
`The objective value is = 27.0`

## Save the model in a file

`model.write();`
`\* Source Pyomo model name=‘(My-Pyomo-Model)’ *\max x3:+6 x1+5 x2s.t.c_u_x4_:+1 x1+1 x2<= 5c_u_x5_:+3 x1+2 x2<= 12c_e_ONE_VAR_CONSTANT: ONE_VAR_CONSTANT = 1.0bounds 0 <= x1 <= +inf 0 <= x2 <= +infend`

## Display model information

`model.display()`
`Model ‘(My-Pyomo-Model)’Variables: x : Size=1, Index=None Key : Lower : Value : Upper : Fixed : Stale : Domain None : 0 : 2.0000000000000004 : None : False : False : NonNegativeReals y : Size=1, Index=None Key : Lower : Value : Upper : Fixed : Stale : Domain None : 0 : 2.9999999999999996 : None : False : False : NonNegativeRealsObjectives: objective : Size=1, Index=None, Active=True Key : Active : Value None : True : 27.0Constraints: constraints : Size=2 Key : Lower : Body : Upper 1 : None : 5.0 : 5.0 2 : None : 12.0 : 12.0`

--

--

## More from Dr. Soumen Atta, Ph.D.

Postdoctoral Researcher at Laboratoire des Sciences du Numérique de Nantes (LS2N), Université de Nantes, IMT Atlantique, Nantes, France.

Love podcasts or audiobooks? Learn on the go with our new app.

## Dr. Soumen Atta, Ph.D.

94 Followers

Postdoctoral Researcher at Laboratoire des Sciences du Numérique de Nantes (LS2N), Université de Nantes, IMT Atlantique, Nantes, France.