Skip to main content

Module perturbation_handler

Module perturbation_handler 

Source
Expand description

Primal-dual perturbation handler — port of Algorithm/IpPDPerturbationHandler.{hpp,cpp}.

Owns the four perturbations (δ_x, δ_s, δ_c, δ_d) that the PDFullSpaceSolver adds to the augmented system to recover correct inertia / non-singularity. Implements upstream’s full state machine:

  • [Self::consider_new_system] — first call per new aug-system. Finalizes the previous trial’s degeneracy probe, decides whether to start a new degeneracy test, and seeds δ_c / δ_d if the Jacobian is already known to be degenerate (or perturb_always_cd is on).
  • [Self::perturb_for_singular] — escalation step taken when MA57 reports Singular.
  • [Self::perturb_for_wrong_inertia] — escalation step taken when the factor’s negative-eigenvalue count disagrees with what the KKT structure requires.
  • [Self::current_perturbation] — read the most recently committed (δ_x, δ_s, δ_c, δ_d).

Returns false when no further escalation is possible (caller must enter the restoration phase). The info_string-mutation calls in upstream are emitted via the IpoptData handle the caller passes in; if None is passed, the strings are simply dropped.

Structs§

Deltas
Snapshot of the four perturbations after a state-machine call.
PdPerturbationHandler
State + algorithmic parameters. Defaults mirror IpPDPerturbationHandler.cpp::RegisterOptions.

Enums§

DegenType
Degeneracy state — port of DegenType.
TrialStatus
Trial state — port of upstream TrialStatus enum.