Add a trust-region Newton optimizer

Đã đóng
#1,615 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@NAThompson đang làm issue này rồi.

Từ ngày 2/11/2026.

  • #1619 của @NAThompson — đang mở

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
15/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
cpp
Lĩnh vực
backend

Hướng nghiên cứu

Start from make_lbfgs, which the issue names as the interface to match: an objective over rvars, a vector of variables, and step(). Then read how autodiff_reverse supplies exact derivatives, since the Hessian comes from it. The issue leaves the design open (dogleg versus Steihaug–CG, and the trust-region update rule), so agree on a plan with maintainers first. Done means a step()-based optimizer that handles indefinite Hessians and reaches f − f* ≤ 1e-6 on 2-D Rosenbrock in fewer calls than L-BFGS.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

The gradient-based optimizers (make_gradient_descent, make_nag, make_lbfgs) are all first-order or quasi-Newton. A trust-region Newton method would use the exact Hessian, which autodiff_reverse can already supply, and converge quadratically near a minimum.

  • Dogleg for small n, Steihaug–CG (Hessian–vector products only) for large n.
  • A trust region rather than a line search, so indefinite Hessians (saddles, as on Styblinski–Tang or Himmelblau) are handled.
  • Same interface as make_lbfgs: an objective on rvars and a vector of variables, with step().

On Rosenbrock in 2-D, L-BFGS needs ~100–150 objective calls to reach f − f* ≤ 1e-6; this is the case where exact curvature should pay off.

Ngôn ngữ chính
C++
Star
377
Fork
269
Merge trung bình
12 giờ 31 phút
Pull request đã merge (30 ngày)
66

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của boostorg/math

Tất cả issue của boostorg/math

Issue tương tự

Thêm issue về C++

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.