Skip to content

C2: MindtPy AD-based cut generation via PyNumero #16

Description

@bernalde

Cuts are still built from symbolic Jacobians (differentiate_mode ∈ {reverse_symbolic, sympy}, util.py:42-66), re-evaluated per iteration; PyNumero is used only for the Lagrangian regularization objectives (util.py:340-380, integers relaxed first). The 2020 "use AD instead of symbolic differentiation / talk to Michael Bynum" item remains open.

Scope:

  • Assemble OA cut expressions from PyNumero numeric Jacobian rows at each trial point (PyomoNLP.evaluate_jacobian()), keeping symbolic as fallback; benchmark expression-tree size vs evaluation cost on large instances (the historical motivation: models where symbolic cuts blow up).
  • MindtPy already consumes grey-box AD (cut_generation.py:183-215) — unify the two paths.
  • Note MAX_SYMBOLIC_DERIV_SIZE = 1000 heuristic in GDPopt loa.py does something similar (sympy below, reverse-numeric above) — share the policy.

Part of roadmap epic #2 (item C2).

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions