Use Ipopt
Choose Ipopt for continuous, nonlinear prescriptive problems. It is a gradient-based local solver, so it can converge to a locally optimal solution rather than a global optimum.
Capabilities
Section titled “Capabilities”- Supports continuous nonlinear programs (NLP), including continuous quadratic programs (QP) and quadratically constrained programs (QCP) as special cases.
Limitations
Section titled “Limitations”- Requires a single, scalar objective.
- Does not support discrete decision variables.
- Does not support indicator constraints like
implies(). - Does not support SOS constraints such as
special_ordered_set_type_1()andspecial_ordered_set_type_2().
Example
Section titled “Example”Pass "ipopt" to Problem.solve() to use the Ipopt backend:
from relationalai.semantics import Float, Modelfrom relationalai.semantics.reasoners.prescriptive import Problem
m = Model("NonlinearExample")
# ... model definition ...
p = Problem(m, Float)
# ... problem definition ...
p.solve("ipopt")- It is common for Ipopt to terminate with
LOCALLY_SOLVED. Treat that as “converged to a local minimum” rather than “certified global optimum.”
Version and licensing
Section titled “Version and licensing”Ipopt is bundled and does not require a license key or additional Snowflake setup.
| Detail | Info |
|---|---|
| Version | 3.14.4 |
| License | Eclipse Public License (free and open source) |
Resources
Section titled “Resources”Where to go next
Section titled “Where to go next”Solve a decision problemLearn the prescriptive workflow for declaring decision variables, adding requirements and an objective, solving, and reading results.
Browse prescriptive reasoning templatesExplore prescriptive templates you can adapt to your own problems.