Skip to content
forked from mlpack/ensmallen

A header-only C++ library for numerical optimization --

License

Notifications You must be signed in to change notification settings

diixo/ensmallen

This branch is 122 commits behind mlpack/ensmallen:master.

Folders and files

NameName
Last commit message
Last commit date
Mar 10, 2019
May 6, 2020
Nov 15, 2023
Feb 16, 2024
Oct 31, 2020
Nov 24, 2023
Nov 24, 2023
May 31, 2019
Aug 30, 2021
Feb 15, 2024
Feb 16, 2024
Nov 15, 2023
Feb 16, 2024
Oct 4, 2018
Jun 6, 2023
Oct 18, 2018
Feb 2, 2021

Repository files navigation

ensmallen: a C++ header-only library for numerical optimization

ensmallen is a high-quality C++ library for non-linear numerical optimization.

ensmallen provides many types of optimizers that can be used for virtually any numerical optimization task. This includes gradient descent techniques, gradient-free optimizers, and constrained optimization. Examples include L-BFGS, SGD, CMAES and Simulated Annealing. ensmallen also allows optional callbacks to customize the optimization process.

Documentation and downloads: http://ensmallen.org

Requirements

  • C++ compiler with C++11 support
  • Armadillo: http://arma.sourceforge.net
  • OpenBLAS or Intel MKL or LAPACK (see Armadillo site for details)

Installation

ensmallen can be installed in several ways: either manually or via cmake, with or without root access.

The cmake based installation will check the requirements and optionally build the tests. If cmake 3.3 (or a later version) is not already available on your system, it can be obtained from cmake.org. If you are using an older system such as RHEL 7 or CentOS 7, an updated version of cmake is also available via the EPEL repository (see the cmake3 package).

Example cmake based installation with root access:

mkdir build
cd build
cmake ..
sudo make install

Example cmake based installation without root access, installing into /home/blah/ (adapt as required):

mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/home/blah/
make install

The above will create a directory named /home/blah/include/ and place all ensmallen headers there.

To optionally build and run the tests (after running cmake as above), use the following additional commands:

make ensmallen_tests
./ensmallen_tests --durations yes

Manual installation involves simply copying the include/ensmallen.hpp header and the associated include/ensmallen_bits directory to a location such as /usr/include/ which is searched by your C++ compiler. If you can't use sudo or don't have write access to /usr/include/, use a directory within your own home directory (eg. /home/blah/include/).

Example Compilation

If you have installed ensmallen in a standard location such as /usr/include/:

g++ prog.cpp -o prog -O2 -larmadillo

If you have installed ensmallen in a non-standard location, such as /home/blah/include/, you will need to make sure that your C++ compiler searches /home/blah/include/ by explicitly specifying the directory as an argument/option. For example, using the -I switch in gcc and clang:

g++ prog.cpp -o prog -O2 -I /home/blah/include/ -larmadillo

Example Optimization

See example.cpp for example usage of the L-BFGS optimizer in a linear regression setting.

License

Unless stated otherwise, the source code for ensmallen is licensed under the 3-clause BSD license (the "License"). A copy of the License is included in the "LICENSE.txt" file. You may also obtain a copy of the License at http://opensource.org/licenses/BSD-3-Clause

Citation

Please cite the following paper if you use ensmallen in your research and/or software. Citations are useful for the continued development and maintenance of the library.

@article{ensmallen_JMLR_2021,
  author  = {Ryan R. Curtin and Marcus Edel and Rahul Ganesh Prabhu and Suryoday Basak and Zhihao Lou and Conrad Sanderson},
  title   = {The ensmallen library for flexible numerical optimization},
  journal = {Journal of Machine Learning Research},
  year    = {2021},
  volume  = {22},
  number  = {166},
  pages   = {1--6},
  url     = {http://jmlr.org/papers/v22/20-416.html}
}

Developers and Contributors

  • Ryan Curtin
  • Dongryeol Lee
  • Marcus Edel
  • Sumedh Ghaisas
  • Siddharth Agrawal
  • Stephen Tu
  • Shikhar Bhardwaj
  • Vivek Pal
  • Sourabh Varshney
  • Chenzhe Diao
  • Abhinav Moudgil
  • Konstantin Sidorov
  • Kirill Mishchenko
  • Kartik Nighania
  • Haritha Nair
  • Moksh Jain
  • Abhishek Laddha
  • Arun Reddy
  • Nishant Mehta
  • Trironk Kiatkungwanglai
  • Vasanth Kalingeri
  • Zhihao Lou
  • Conrad Sanderson
  • Dan Timson
  • N Rajiv Vaidyanathan
  • Roberto Hueso
  • Sayan Goswami

About

A header-only C++ library for numerical optimization --

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 98.2%
  • CMake 1.4%
  • Shell 0.4%