Geometric Programming Relaxations¶
The module geometric.py implements a geometric-programming lower-bound strategy
for constrained polynomial optimization over basic semialgebraic sets.
Theory to Implementation¶
The implementation follows the Section 4 construction used in the repository notes, including a transformed program defined by a matrix \(H\) and a GP objective/constraint system over auxiliary variables.
Let \(g_0=-f\) and let \(g_1,\dots,g_m\) be the constraint polynomials. The geometric pipeline builds transformed expressions \(h_j\) using \(H\) and then solves for a lower bound through GP variables \(\mu\), \(w_\alpha\), and \(z_\alpha\).
At a high level, the transformed family is:
The relaxation objective then combines transformed positive parts and residual terms indexed by active support elements. In implementation-oriented notation, the objective has the form
Here \(d\) denotes the effective even relaxation order used by the problem.
The implementation follows the lower-bound construction associated with Section 4,
including equation (3) as implemented in geometric.py for transformed objective
and constraint families.
The main implementation stages are:
auto_transform_matrix: builds a transformation matrix satisfying the required sign structure.transform_program: constructs transformed expressions from the original objective/constraints._build_delta_setsand_initialize_variables: prepare monomial sets and GP variables._build_objectiveand constraint assembly insolve: formulate and solve the GP model.
Interpretation of the Matrix Transform¶
The matrix \(H\) is not only a numerical preconditioner. It defines which
linear combinations of objective/constraint polynomials are exposed to the GP
model and therefore determines the sign and support structure of the final
inequalities. The auto_transform_matrix routine computes a feasible
transformation using diagonal/sign conditions encoded in the implementation.
Constraint Families in solve¶
The method assembles several GP/signomial constraint blocks:
Normalization and variable bounds (including \(\mu_0=1\)).
Generator-wise inequalities over transformed coefficients.
Degree-matching constraints for terms in \(\Delta^{=d}\).
Positive/negative coefficient balancing for all active terms.
These blocks correspond to the computational implementation of the Section 4
equation family and are solved through gpkit.Model.
Lower-Bound Meaning¶
The solved value is used as a lower bound certificate for the original POP. As with any hierarchy-style relaxation strategy, bound quality depends on model order, transform quality, and problem structure.
Practical Notes¶
The method returns a lower bound as a floating-point value.
Solver availability and numerical conditioning can affect runtime behavior.
examples/GPExample.pyprovides a complete end-to-end usage pattern.If automatic transformation is unstable for a given instance, a custom matrix can be supplied by setting
gp.Hbefore callingsolve.