Skip to main content

Module line_search

Module line_search 

Source
Expand description

l1-merit backtracking line search for SQP. The classic Han-Powell scheme:

    φ(x; ν) = f(x) + ν · violation(x)
    violation(x) = Σ_i max(bl_i − c_i, 0) + max(c_i − bu_i, 0)
                 + Σ_j max(xl_j − x_j, 0) + max(x_j − xu_j, 0)

Step p is a descent direction of φ(·; ν) whenever ν ≥ ‖λ_g‖_∞ (Nocedal-Wright §18.4). We adapt ν at every iteration as ν ← max(ν, ‖λ_g_qp‖_∞ + buffer) so the QP- derived multipliers are always dominated.

Backtracking is plain Armijo:

    φ(x + αp) ≤ φ(x) + η · α · D_p φ(x; ν)

with predicted derivative

    D_p φ ≈ ∇f(x)ᵀ p − ν · violation(x)

(correct under the standard assumption that the QP step reduces the linearized constraint violation to zero).

Phase 5b commit 5 deliverable. The filter alternative (Fletcher-Leyffer 2002) is opt-in via SqpGlobalization::Filter and lands as a follow-up.

Structs§

LineSearchResult

Functions§

l1_merit_line_search
Adapt ν against the QP multiplier magnitude and run Armijo backtracking on the l1 merit function. Returns the accepted step length, the updated ν, and the resulting trial state (x_new, f_new, c_new) so the caller doesn’t have to re-evaluate.
l1_violation
l1 constraint + bound violation ‖max(bl − c, 0) + max(c − bu, 0)‖_1 (plus the same for variable bounds). Infinite bounds are treated as never violated.