OMMX (Open Mathematical prograMming eXchange) lets you describe what you want to solve separately from how you solve it. Its Python and Rust SDKs provide a common representation for optimization problems and candidate solutions. You can change the formulation you send to a solver and still evaluate the result against the domains, constraints, and objective of your original problem.
Suppose a production line can make up to 100 units per hour, but only 60 in reduced mode. You can record the conditional limit once as an indicator constraint. The PySCIPOpt adapter can pass this constraint directly to SCIP. To try a different formulation with the same solver, you can instead use OMMX to convert the rule to a linear inequality using the known upper bound of 100.
Either way, a candidate that produces 65 units per hour in reduced mode violates the original rule. OMMX can check that rule for a candidate from either formulation, or even one proposed by a planner. You can try a new formulation without rewriting the requirement or the check. Checking feasibility tells you whether the candidate satisfies the model; proving optimality requires a separate guarantee.
The same division of work applies to other tasks:
Today, OMMX provides individual transformations and preparation policies. The longer-term goal is to use the structure of a problem to select and combine preprocessing steps. Developing these techniques on a common representation lets improvements benefit multiple modeling tools and gives new solving methods a body of work to build on.
The Book explains when to use each capability and how to interpret the results. The API Reference documents individual operations, their conditions, and executable usage examples.
| Purpose | Start here |
|---|---|
| Understand OMMX and explore its capabilities | English Book · 日本語Book |
| Choose how to represent a problem for a solver | Transform a problem · 日本語 |
| Check a candidate against your requirements | Evaluate candidates · 日本語 |
| Choose a solver or sampler integration | Adapter packages and input contracts |
| Install the Python SDK and an optional adapter | Installation guide · 日本語 |
| Inspect and exchange saved data from the command line | OMMX CLI |
Until the 3.0.0 stable release, both the Book and API Reference describe main. The installation guide covers the latest published prerelease and installation from main; use main for features that have not been released yet. Rust and Python SDK versions are managed independently.
| SDK | Package | API Reference |
|---|---|---|
| Python | Python API Reference | |
| Rust |
See DEVELOPMENT.md to work on OMMX, or the Adapter API Reference to connect your own solving tool. The Rust-to-Python PyO3 bridge has its own API Reference.
© 2024 Jij Inc.
This project is licensed under either of
at your option.
This work was performed for Council for Science, Technology and Innovation (CSTI), Cross-ministerial Strategic Innovation Promotion Program (SIP), "Promoting the application of advanced quantum technology platforms to social issues"(Funding agency : QST).