All Projects → ZJU-FAST-Lab → LBFGS-Lite

ZJU-FAST-Lab / LBFGS-Lite

Licence: MIT license
LBFGS-Lite: A header-only L-BFGS unconstrained optimizer.

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to LBFGS-Lite

pytorch
Improved LBFGS optimizer in PyTorch.
Stars: ✭ 16 (-83.67%)
Mutual labels:  optimization, nonlinear-optimization, lbfgs
Nonlinear-Optimization-Algorithms
MATLAB implementations of a variety of nonlinear programming algorithms.
Stars: ✭ 86 (-12.24%)
Mutual labels:  optimization, nonlinear-optimization
dfogn
DFO-GN: Derivative-Free Optimization using Gauss-Newton
Stars: ✭ 20 (-79.59%)
Mutual labels:  optimization, nonlinear-optimization
lbfgsb-gpu
An open source library for the GPU-implementation of L-BFGS-B algorithm
Stars: ✭ 70 (-28.57%)
Mutual labels:  nonlinear-optimization, lbfgs
pdfo
Powell's Derivative-Free Optimization solvers
Stars: ✭ 56 (-42.86%)
Mutual labels:  nonlinear-optimization, unconstrained-optimization
snopt-matlab
Matlab interface for sparse nonlinear optimizer SNOPT
Stars: ✭ 49 (-50%)
Mutual labels:  nonlinear-optimization
LaplacianOpt.jl
A Julia/JuMP Package for Maximizing Algebraic Connectivity of Undirected Weighted Graphs
Stars: ✭ 16 (-83.67%)
Mutual labels:  optimization
MINLPLib.jl
A JuMP-based library of Non-Linear and Mixed-Integer Non-Linear Programs
Stars: ✭ 30 (-69.39%)
Mutual labels:  nonlinear-optimization
Superstring
A fast and memory-optimized string library for C++
Stars: ✭ 252 (+157.14%)
Mutual labels:  optimization
geneal
A genetic algorithm implementation in python
Stars: ✭ 47 (-52.04%)
Mutual labels:  optimization
CSDP.jl
Julia Wrapper for CSDP (https://projects.coin-or.org/Csdp/)
Stars: ✭ 18 (-81.63%)
Mutual labels:  optimization
Pajarito.jl
A solver for mixed-integer convex optimization
Stars: ✭ 98 (+0%)
Mutual labels:  nonlinear-optimization
galini
An extensible MINLP solver
Stars: ✭ 29 (-70.41%)
Mutual labels:  nonlinear-optimization
Optimization
A set of lightweight header-only template functions implementing commonly-used optimization methods on Riemannian manifolds and convex spaces.
Stars: ✭ 66 (-32.65%)
Mutual labels:  optimization
NAGPythonExamples
Examples and demos showing how to call functions from the NAG Library for Python
Stars: ✭ 46 (-53.06%)
Mutual labels:  nonlinear-optimization
IterativeLQR.jl
A Julia package for constrained iterative LQR (iLQR)
Stars: ✭ 15 (-84.69%)
Mutual labels:  optimization
Ray
An open source framework that provides a simple, universal API for building distributed applications. Ray is packaged with RLlib, a scalable reinforcement learning library, and Tune, a scalable hyperparameter tuning library.
Stars: ✭ 18,547 (+18825.51%)
Mutual labels:  optimization
hopperOptimizations
A mod that optimizes hoppers and their interactions with entities and inventories. It drastically reduces hopper lag without changing any behavior.
Stars: ✭ 65 (-33.67%)
Mutual labels:  optimization
jaxfg
Factor graphs and nonlinear optimization for JAX
Stars: ✭ 124 (+26.53%)
Mutual labels:  nonlinear-optimization
HashedExpression
Type-safe modelling DSL, symbolic transformation, and code generation for solving optimization problems.
Stars: ✭ 40 (-59.18%)
Mutual labels:  lbfgs

LBFGS-Lite

A header-only L-BFGS unconstrained optimizer.

0. About

LBFGS-Lite is a C++ header-only library for unconstrained optimization. Many engineering considerations are added for improved robustness compared to the original version by Nocedal.

1. How to use

All explanations are detailed by the comments in "lbfgs.hpp". See "lbfgs_example.cpp" for the calling procedure. You may need to install Eigen via "sudo apt install libeigen3-dev" because we use Eigen for better performance since ver. 2.1. If you need a pure C-style lib without any external dependence, please refer to ver. 0.9.

2. Features

3. Why this lib

  • Our lib is well-organized and concise (about 800 lines).

  • Many other libs use Nocedal's zoom line search, More-Thuente line search, or Hager-Zhang line search. The truth is, interpolation-based schemes bring many tunable parameters and make more or less assumptions on the function smoothness. Engineering practice tells us that these assumptions can fail due to bad numerical conditions and ill-shaped functions. Admittedly, they slightly reduce the iteration number in some cases, but also easily-crashed.

  • Some other libs provide user-specified options for Armijo and weak/strong Wolfe condition without considering positive definiteness (PD) of the approximated Hessian. This is misleading because if only Armijo condition is satisfied, the PD property is not guaranteed and the solver is unstable or easily-crashed. We make the weak Wolfe condition mandatory here, which suffices for PD property.

  • We use Lewis-Overton line search as the only scheme since ver. 2.1 from which nonsmooth functions are supported. Other schemes either assume high orders of continuity, or enforce the strong Wolfe condition can never be fulfilled by nonsmooth functions. Moreover, Lewis-Overton line search are widely adopted in many graphics applications involving optimization on scene, shape, or mesh, showing its practical robustness.

  • According to our practice, the function/gradient evaluation numbers are comparable with interpolation-based schemes. Sometimes it even requires fewer function calls. If you insist an interpolation-one for smooth well-shaped cost function, we also propose our ver. 0.9 where a More-Thuente line search is kept.

  • Other schemes' global convergence on non-convex functions are not guaranteed theoretically. We avoid the potential problems by employing the cautious update scheme in our lib without additional computation overhead.

6. Licence

LBFGS-Lite is modified from the C version by Okazaki, which is further based on the original Fortran version by Nocedal. Thus it is distributed under the term of the MIT license according to previous ones by Okazaki and by Nocedal. Please refer to LICENSE file in the distribution.

7. Maintaince

If any bug, please contact Zhepei Wang ([email protected]).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].