Skip to content

Use MOI.Nonlinear.QPBlockData for the quadratic constraints - #237

Open
blegat wants to merge 5 commits into
mainfrom
bl/qp_block_data
Open

Use MOI.Nonlinear.QPBlockData for the quadratic constraints#237
blegat wants to merge 5 commits into
mainfrom
bl/qp_block_data

Conversation

@blegat

@blegat blegat commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

A net line deletion of 145 lines. Needs

LinearConstraints and Objective are deliberately kept: their materialized sparse structures are performance fast paths that QPBlockData would not preserve.

Behavioral notes:

  • The Jacobian structure of a quadratic constraint may now contain duplicate column entries (one per term) instead of the previous deduplicated gradient sparsity, so nnzj counts can differ; NLPModels COO conventions allow duplicates.
  • VectorQuadraticFunction constants are now handled with MOI.Utilities.shift_constant, fixing the previous handling that produced lcon = +constant for Nonnegatives and an infeasible lcon/ucon pair for Zeros with nonzero constants.

blegat and others added 2 commits August 13, 2026 08:53
Replace the per-constraint QuadraticConstraint storage (COO Hessian,
sparse gradient, gradient-sparsity dictionary) and its bespoke
evaluation loops with a MOI.Nonlinear.QPBlockData holding the
quadratic constraints, in both MathOptNLPModel and MathOptNLSModel.
QuadraticConstraints keeps its nquad/nnzj/nnzh fields and now also
stores the precomputed Jacobian and Hessian structures of the block
(with per-constraint Hessian offsets for jth_hess_coord!).

The block-shaped NLPModels methods (cons, jac, jprod, jtprod, hess,
hprod) call the corresponding MOI evaluator methods of the block; the
per-constraint methods (jth_hess_coord!, jth_hprod!, ghjvprod!) use
MOI.Nonlinear's per-function helpers.

LinearConstraints and Objective are deliberately kept: their
materialized sparse structures are performance fast paths that
QPBlockData would not preserve.

Behavioral notes:
- The Jacobian structure of a quadratic constraint may now contain
  duplicate column entries (one per term) instead of the previous
  deduplicated gradient sparsity, so nnzj counts can differ; NLPModels
  COO conventions allow duplicates.
- VectorQuadraticFunction constants are now handled with
  MOI.Utilities.shift_constant, fixing the previous handling that
  produced lcon = +constant for Nonnegatives and an infeasible
  lcon/ucon pair for Zeros with nonzero constants.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor
Package name latest stable
JSOSuite
NLSProblems
PartiallySeparableNLPModels
PartiallySeparableSolvers

blegat added 3 commits August 13, 2026 15:28
Follow-up to the rename in MathOptInterface: the accumulating product
functions of QPBlockData are no longer methods of the MOI.eval_...
generic functions. The calls on nls.Feval are unchanged: that is an
MOI.Nonlinear.Evaluator, for which the MOI generic functions apply.
* Use MOI.Nonlinear.ModelWithQuad instead of QPBlockData

Store the parsed quadratic constraints in a MOI.Nonlinear.ModelWithQuad and
evaluate them through the corresponding MOI.Nonlinear.EvaluatorWithQuad,
instead of using the QPBlockData and its private helpers directly. The
per-constraint methods (jth_hess_coord!, jth_hprod! and ghjvprod!) evaluate
the Hessian of the Lagrangian of the block with a basis multiplier vector,
which removes the per-constraint Hessian offsets. The products of the
evaluator overwrite their output, so the Jacobian-transpose and Hessian
products go through a new hv workspace before being accumulated.

* MOI

* Add the variables to the ModelWithQuad

MOI.Nonlinear.ModelWithQuad now owns the variables of the model, so the
parser adds them and the evaluator no longer takes ordered_variables.

* MOI
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant