IBM Decision Optimization CPLEX Modeling for Python (DOcplex)

raw JSON →
2.32.264 verified Fri May 01 auth: no python

DOcplex is a modeling library for mathematical optimization, providing a Python API to IBM ILOG CPLEX and CP Optimizer solvers. Current version 2.32.264 supports linear, mixed-integer, and constraint programming. Release cadence is quarterly.

pip install docplex
error docplex.util.environment.DOcplexException: Model has no solution
cause Solver failed to find a feasible solution or model is infeasible.
fix
Check model constraints for conflicts or use mdl.refine_conflict() to diagnose infeasibility.
error ImportError: cannot import name 'Model' from 'docplex'
cause Incorrect import path; Model is in `docplex.mp.model`.
fix
Use from docplex.mp.model import Model instead of from docplex import Model.
error NameError: name 'IntegerVarType' is not defined
cause Deprecated import removed in newer versions.
fix
Use model.integer_var() or model.binary_var() directly, not IntegerVarType.
breaking In DOcplex 2.10+, the `CpoModel.solve()` returns a `CpoSolveResult` instead of a tuple. Code relying on tuple unpacking will break.
fix Access result attributes directly (e.g., `sol.get_objective_value()`) rather than unpacking.
deprecated `docplex.mp.vartype` (e.g., `IntegerVarType`) is deprecated in favor of using `docplex.mp.model.Model.integer_var()` directly.
fix Use model methods like `model.integer_var()`, `model.binary_var()`, and `model.continuous_var()` instead.
gotcha DOcplex requires a CPLEX license to solve locally (free for academic users with IBM Academic Initiative). Without a local CPLEX installation or cloud subscription, `solve()` will raise a `DOcplexException`.
fix Install CPLEX (e.g., `pip install cplex`) and set up license, or use IBM Decision Optimization on Cloud (set `url` and `key` in `Model.solve()`).

Create a simple mixed-integer programming model, add variables and constraints, maximize objective, and solve.

from docplex.mp.model import Model

mdl = Model(name='example')
x = mdl.integer_var(name='x')
y = mdl.integer_var(name='y')
mdl.add_constraint(x + y <= 10)
mdl.maximize(x + 2*y)
solution = mdl.solve()
if solution:
    print(f'x = {x.solution_value}, y = {y.solution_value}')