OMMX adapter for Gurobi
This package provides an adapter for Gurobi from OMMX. It allows you to solve optimization problems defined in OMMX format using Gurobi's powerful solver.
Features
- Support for various variable types:
- Binary variables
- Integer variables
- Continuous variables
- Support for different optimization problems:
- Linear Programming (LP)
- Mixed Integer Linear Programming (MILP)
- Quadratic Programming (QP)
- Mixed Integer Quadratic Programming (MIQP)
- Support for both minimization and maximization problems
Prerequisites
- Python >= 3.9
- Gurobi Optimizer and valid license
- gurobipy >= 10.0.0
- ommx >= 1.8.4
Installation
First, ensure you have Gurobi installed and properly licensed. Then install the OMMX Gurobi adapter using pip:
pip install ommx-gurobipy-adapter
Usage
Here's a simple example of how to use the adapter:
from ommx_gurobipy_adapter import OMMXGurobipyAdapter
from ommx.v1 import Instance, DecisionVariable
# Create decision variables
x1 = DecisionVariable.integer(1, lower=0, upper=5)
x2 = DecisionVariable.continuous(2, lower=0, upper=5)
# Create OMMX instance
instance = Instance.from_components(
decision_variables=[x1, x2],
objective=x1 + 2*x2,
constraints=[
x1 + x2 <= 5, # Linear constraint
],
sense=Instance.MAXIMIZE,
)
# Solve using Gurobi
solution = OMMXGurobipyAdapter.solve(instance)
# Access the results
print(f"Objective value: {solution.objective}")
print(f"x1 = {solution.state.entries[1]}")
print(f"x2 = {solution.state.entries[2]}")
Controlling Gurobi Parameters
If you need more control over the Gurobi solver parameters, you can use the adapter in two steps:
from ommx_gurobipy_adapter import OMMXGurobipyAdapter
# Create adapter
adapter = OMMXGurobipyAdapter(instance)
# Get Gurobi model
model = adapter.solver_input
# Set Gurobi parameters
model.setParam('TimeLimit', 60) # Set time limit to 60 seconds
model.setParam('MIPGap', 0.01) # Set relative MIP gap tolerance to 1%
# Solve
model.optimize()
# Get solution
solution = adapter.decode(model)
Error Handling
The adapter provides specific error types for different situations:
OMMXGurobipyAdapterError: Base error class for adapter-specific errorsInfeasibleDetected: Raised when the problem is infeasibleUnboundedDetected: Raised when the problem is unbounded
Example of error handling:
from ommx_gurobipy_adapter import OMMXGurobipyAdapterError
from ommx.adapter import InfeasibleDetected, UnboundedDetected
try:
solution = OMMXGurobipyAdapter.solve(instance)
except InfeasibleDetected:
print("Problem is infeasible")
except UnboundedDetected:
print("Problem is unbounded")
except OMMXGurobipyAdapterError as e:
print(f"Adapter error: {e}")
Testing
-
Install uv
-
Run
pytestandmarkdown-code-runner:uv run pytest -vv uv run markdown-code-runner README.md
License
This project (the source code contained in this repository) is licensed under the Apache License 2.0.
[!WARNING] The package
ommx-gurobipy-adapterdepends ongurobipy, which is a proprietary software. Please make sure you have a valid license for Gurobi Optimizer when using this package.
Reference
For more information about OMMX, please visit: https://github.com/Jij-Inc/ommx
For Gurobi documentation, please visit: https://www.gurobi.com/documentation/
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
Release files for ommx-gurobipy-adapter 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ommx_gurobipy_adapter-0.2.1.tar.gz | 44.6 kB | Details |
Release files / ommx_gurobipy_adapter-0.2.1.tar.gz
| Download URL | ommx_gurobipy_adapter-0.2.1.tar.gz |
|---|---|
| Size | 44.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cf2393781ddcf431e241baf4d07e6c283b3dede43931d59cb2dd9466b7d4e1f9
|
|
BLAKE2b-256 checksum How to use checksums |
8c8bb6443cd80fff9945c029ace12f51e9c3822d6903d25a0dd95bbdff547d02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 29, 2025.
Transparency log