Use OR-Tools in Python to Solve Mixed Integer Programming Problems

Now, let's use this tool to solve a simple mixed integer programming problem in Python.


Install the OR-Tools library

1
pip install ortools


Example

Min:x1+2x2+x3Min: x_1+2x_2+x_3\\

S.T. :

r1:20<=2x1+4.5x20.6x3<=65r2:x1+5x3>=20r3:2.8x21.5x3>=5r1: 20<=2x_1+4.5x_2-0.6x_3<=65\\ r2:x_1+5x_3>=20\\ r3:2.8x_2-1.5x_3>=5

Bounds:

10<=x1<=60,Intergerx2>=0x3>=0,Interger10<=x_1<=60, Interger\\ x_2>=0\\ x_3>=0, Interger\\


Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from ortools.linear_solver import pywraplp

# Use CBC mixed integer programming solver
solver = pywraplp.Solver('test', pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING)

# The type and domain in which the decision variable is defined
x1 = solver.IntVar(10, 60, 'x1')
x2 = solver.NumVar(0, solver.infinity(), 'x2')
x3 = solver.IntVar(0, solver.infinity(), 'x3')

# Add constraint: 20 <= 2x1 +4.5x2 - 0.6x3 <= 65
constraint1 = solver.Constraint(20, 65)
constraint1.SetCoefficient(x1, 2)
constraint1.SetCoefficient(x2, 4.5)
constraint1.SetCoefficient(x3, -0.6)
# Add constraint: x1 + 5x3 >= 20
constraint2 = solver.Constraint(20, solver.infinity())
constraint2.SetCoefficient(x1, 1)
constraint2.SetCoefficient(x2, 0)
constraint2.SetCoefficient(x3, 5)
# Add constraint: 2.8x2 - 1.5x3 >= 5
constraint2 = solver.Constraint(5, solver.infinity())
constraint2.SetCoefficient(x1, 0)
constraint2.SetCoefficient(x2, 2.8)
constraint2.SetCoefficient(x3, -1.5)

# Objective Function: Min: x1 + 2x2 + x3
objective = solver.Objective()
objective.SetCoefficient(x1, 1)
objective.SetCoefficient(x2, 2)
objective.SetCoefficient(x3, 1)
objective.SetMaximization()

result_status = solver.Solve()
print("status=" + str(result_status))

# output the results
print('Number of variables =', solver.NumVariables())
print('Number of constraints =', solver.NumConstraints())
print('Optimal objective value =', solver.Objective().Value())
variable_list = [x1, x2, x3]
for variable in variable_list:
print(variable.name(), variable.solution_value())

The program output is as follows:

1
2
3
4
5
6
7
status=0
Number of variables = 3
Number of constraints = 3
Optimal objective value = 55.333333333333336
x1 10.0
x2 12.666666666666664
x3 20.0