Python MIP

1.17.6 · active · verified Thu Apr 16

Python-MIP (Mixed-Integer Programming) is a Python library for modeling and solving Mixed-Integer Linear Programs (MIPs). It provides a high-level, intuitive API inspired by Pulp, offering access to advanced solver features like cut generation, lazy constraints, and solution pools. The library integrates with popular open-source solvers like COIN-OR CBC and HiGHS, as well as the commercial Gurobi solver. It is actively maintained, with version 1.17.6 being the latest, and aims for high performance and extensibility, supporting Python 3.10+ and PyPy for faster model generation.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart solves a 0/1 Knapsack Problem, demonstrating model creation, variable definition, objective function, adding constraints, optimization, and result querying.

from mip import Model, xsum, maximize, BINARY, OptimizationStatus

# 0/1 Knapsack Problem example
p = [10, 13, 18, 31, 7, 15] # profits
w = [11, 15, 20, 35, 10, 33] # weights
c, I = 47, range(len(w)) # capacity, items index

m = Model("knapsack")

x = [m.add_var(var_type=BINARY, name=f'x_{i}') for i in I]

m.objective = maximize(xsum(p[i] * x[i] for i in I))

m += xsum(w[i] * x[i] for i in I) <= c

status = m.optimize()

if status == OptimizationStatus.OPTIMAL:
    selected_items = [i for i in I if x[i].x >= 0.99]
    print(f"Selected items: {selected_items}")
    print(f"Total profit: {m.objective_value}")
    print(f"Total weight: {sum(w[i] for i in selected_items)}")
elif status == OptimizationStatus.FEASIBLE:
    print("Solution found, but not necessarily optimal.")
elif status == OptimizationStatus.INFEASIBLE:
    print("Model is infeasible.")
elif status == OptimizationStatus.UNBOUNDED:
    print("Model is unbounded.")
else:
    print(f"Optimization status: {status}")

view raw JSON →