Skip to content

Add new quadratization methods to QCQP - #158

Open
GiovanniKarra wants to merge 2 commits into
gkarra/polynomial-preprocessingfrom
gkarra/qcqp-method-extension
Open

GiovanniKarra wants to merge 2 commits into
gkarra/polynomial-preprocessingfrom
gkarra/qcqp-method-extension

Conversation

@GiovanniKarra

@GiovanniKarra GiovanniKarra commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

This PR adds a bunch of polynomial to QCQP reformulation methods.

CompositeQuadratization: a multi-parameter quadratization method. It is discussed in detail in my master's thesis. I'm not 100% happy with the interface and would like to know your opinion about it.

OptimalQuadratization: in most cases not very practical, but it creates the quadratization with the mathematically minimal amount of auxiliary variables.

GreedyQuadratizion: the new name of the old default PolyJuMP.QCQP method.

Adding a quadratization method requires only creating a type that inherits from AbstractQuadratizationMethod', create a decompose()` overload for this type, and provide the type as an attribute to the optimizer.

It also adds consistency constraints of type v1 * v2 == v3 * v4 if this is true for the monomials represented by these (auxiliary) variables. It is an optional parameter that's deactivated by default.

None of these parameters have an "optimal" setting, it is recommended to identify what works best for your specific problem by trial and error.

@GiovanniKarra
GiovanniKarra added this pull request to stack #159 October 20, 2026 12:49
@GiovanniKarra
GiovanniKarra force-pushed the gkarra/qcqp-method-extension branch 2 times, most recently from 38f9415 to cb1e6b4 Compare October 20, 2026 12:50
@GiovanniKarra
GiovanniKarra marked this pull request as ready for review October 20, 2026 12:56
@GiovanniKarra
GiovanniKarra force-pushed the gkarra/qcqp-method-extension branch from cb1e6b4 to 75f4662 Compare November 3, 2026 16:52
Add `ToReformulatedPolynomialBridge` (constraint and objective), which
substitutes high-degree subexpressions of a `MOI.ScalarNonlinearFunction`
with bounded auxiliary variables before conversion to a polynomial, and
`QCQP.optimizer(model; preprocessing)` stacking these bridges on top of
`QCQP.Optimizer`. `ToPolynomialBridge` now only bridges
`MOI.ScalarNonlinearFunction` and non-integer exponents now throw instead
of being rounded.
Add `AbstractQuadratizationMethod` with `GreedyQuadratization`,
`CompositeQuadratization` (smart decomposition followed by a greedy,
balanced or sequential phase, with optional variable reuse) and
`OptimalQuadratization` (binary program minimizing the number of auxiliary
variables). The method is chosen with the `QuadratizationMethod` optimizer
attribute and `EnforceConsistencyConstraints` optionally adds the
redundant constraints `v1 * v2 == v3 * v4`. `QCQP.Optimizer` no longer
claims support for `MOI.ScalarNonlinearFunction` so that it is always
converted to a polynomial.
@GiovanniKarra
GiovanniKarra force-pushed the gkarra/qcqp-method-extension branch from 75f4662 to 8c225ab Compare November 3, 2026 16:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant