Expand description
Penalty line-search acceptor — port of IpPenaltyLSAcceptor.{hpp,cpp}.
Phase 10. Backs line_search_method = penalty. Maintains a penalty
parameter ν that’s bumped up whenever the predicted reduction
would otherwise be non-monotone:
ν⁺ = (∇φᵀ δ + ½ δᵀ W δ) / ((1 − ρ) · θ)
if ν < ν⁺ then ν ← ν⁺ + ν_incAcceptance test (Armijo on the penalty merit M = φ + ν · θ,
upstream IpPenaltyLSAcceptor.cpp:CheckAcceptabilityOfTrialPoint):
pred(α) = − α · ∇φᵀδ − ½ α² · δᵀWδ + ν · (θ − θ₂(α))
ared(α) = (φ_ref + ν · θ_ref) − (φ_trial + ν · θ_trial)
accept iff Compare_le(η · pred, ared, |φ_ref + ν · θ_ref|)where θ₂(α) is the 1-norm of the linearised constraint
infeasibility at the predicted step:
θ₂(α) = ‖c(x) + α · J_c · δx‖₁ + ‖d(x) − s + α · (J_d · δx − δs)‖₁init_this_line_search (driven by the backtracking driver before
the α-loop) snapshots the reference state and the
linearisation vectors, then runs update_nu. check_trial_point
reads the snapshot to compute pred/ared per α — matching upstream
lines 188-247.