An adapter for the Gurobipy from/to OMMX.
Project description
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
To run the test suite:
python -m pytest tests/
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file ommx_gurobipy_adapter-0.0.3.tar.gz.
File metadata
- Download URL: ommx_gurobipy_adapter-0.0.3.tar.gz
- Upload date:
- Size: 40.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d725b93f8e13421710c5c5a156d4298e51e02256effe7477d50e5a57e15e7d2f
|
|
| MD5 |
268f026b8f63dd474a027ce96983b59d
|
|
| BLAKE2b-256 |
d5c77c20e268c7542fe1ab968d776448c8cdd08be2c1d3792f76c752907cdcc2
|
Provenance
The following attestation bundles were made for ommx_gurobipy_adapter-0.0.3.tar.gz:
Publisher:
release.yml on Jij-Inc/ommx-gurobipy-adapter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ommx_gurobipy_adapter-0.0.3.tar.gz -
Subject digest:
d725b93f8e13421710c5c5a156d4298e51e02256effe7477d50e5a57e15e7d2f - Sigstore transparency entry: 171828621
- Sigstore integration time:
-
Permalink:
Jij-Inc/ommx-gurobipy-adapter@f39b0cc618fcf313f2d53527a3ca36f4b333fc4c -
Branch / Tag:
refs/tags/v0.0.3 - Owner: https://github.com/Jij-Inc
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f39b0cc618fcf313f2d53527a3ca36f4b333fc4c -
Trigger Event:
push
-
Statement type: