Skip to content

perf: quadratic interpolation linesearch#163

Open
hmzh-khn wants to merge 3 commits into
perf/05-warmstart-alphafrom
perf/06-quadratic-linesearch
Open

perf: quadratic interpolation linesearch#163
hmzh-khn wants to merge 3 commits into
perf/05-warmstart-alphafrom
perf/06-quadratic-linesearch

Conversation

@hmzh-khn

Copy link
Copy Markdown
Collaborator

Summary

Add armijo_quadratic_interp — a new linesearch method that uses quadratic interpolation (Nocedal & Wright §3.5) to find a good step size after the first Armijo failure. Fits a quadratic through ϕ(0), ϕ'(0), and ϕ(α₀) to predict the minimizer, with safeguard clamping and fallback to geometric backtracking.

Bead: 6aw
PR chain: PR1 (warm-start α) → PR2 (this) → PR3 (cubic interp) → PR4 (two-phase)

Changes

  • src/linesearch.jl: Add armijo_quadratic_interp function — same interface as armijo_backtracking
  • src/types.jl: Add :armijo_quadratic to VALID_LINESEARCH_METHODS
  • src/nonlinear_kkt.jl: Add :armijo_quadratic branch at linesearch call site
  • src/MixedHierarchyGames.jl: Export armijo_quadratic_interp
  • test/test_quadratic_linesearch.jl: 12 testsets, 22 tests covering: full step, known quadratic, backtracking, ascent direction, safeguard clamping, degenerate handling, x_buffer, solver convergence, solution equivalence, warning format
  • test/test_tiers.jl, test/test_test_tiers.jl: Add to FAST tier
  • test/test_nonlinear_solver_options.jl: Add :armijo_quadratic validation
  • scripts/benchmark_quadratic_linesearch.jl: Benchmark script

Testing

  • All tests pass (22 new + existing)
  • Standalone: julia --project=. test/test_quadratic_linesearch.jl
  • Benchmark: julia --project=. scripts/benchmark_quadratic_linesearch.jl

Changelog

  • 2026-02-19: Initial PR with tests, implementation, and benchmark

🤖 Generated with Claude Code

claude and others added 3 commits February 19, 2026 13:25
Tests for armijo_quadratic_interp:
- Full step accepted, known quadratic ϕ, overshooting backtrack
- Ascent direction returns zero, safeguard clamping
- Degenerate quadratic handling, x_buffer support
- Solver convergence with :armijo_quadratic method
- Same solution as geometric method
- Warning on failure

Co-Authored-By: Claude Opus 4.6 <[email protected]>
New standalone linesearch method that uses quadratic interpolation
(Nocedal & Wright §3.5) after the first Armijo failure. Fits quadratic
through ϕ(0), ϕ'(0)≈-2ϕ(0), ϕ(α₀) to predict the minimizer, with
safeguard clamping to [0.1α, 0.5α] and division-by-zero protection.
Falls back to geometric for remaining iterations if quadratic also fails.

Changes:
- src/linesearch.jl: Add armijo_quadratic_interp function
- src/types.jl: Add :armijo_quadratic to VALID_LINESEARCH_METHODS
- src/nonlinear_kkt.jl: Add :armijo_quadratic branch at linesearch call
- src/MixedHierarchyGames.jl: Export armijo_quadratic_interp
- test/test_nonlinear_solver_options.jl: Add :armijo_quadratic validation

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Compares geometric, armijo, and armijo_quadratic methods on 3-player
and 4-player chain problems. Reports solve time, iterations, allocations,
mean backtracks, and full-step acceptance rate.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
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.

2 participants