@hackage numeric-optimization0.1.1.0
Unified interface to various numerical optimization algorithms
Categories
License
BSD-3-Clause
Maintainer
masahiro.sakai@gmail.com
Links
Versions
Installation
Tested Compilers
Dependencies (10)
- base >=4.12 && <5
- constraints
- data-default-class >=0.1.2.0 && <0.2
- hmatrix >=0.20.0.0
- l-bfgs-b >=0.1.0.1 && <0.2
- lbfgs >=0.1 && <0.2 Show all…
Dependents (2)
@hackage/numeric-optimization-backprop, @hackage/numeric-optimization-ad
Package Flags
build-examples
(off by default)
Build example programs
with-cg-descent
(off by default)
Enable CGDescent optimization algorithm provided by nonlinear-optimization package and CG_DESCENT-C library. Since they are licensed under GPL, setting this flag True implies that resulting binary is also under GPL.
with-lbfgs
(on by default)
Enable L-BFGS (since 0.1.1.0)
with-lbfgsb
(off by default)
Enable L-BFGS-B (since 0.1.1.0)
numeric-optimization
Unified interface to various numerical optimization algorithms.
The aim of the package is to provide a convenient interface like Python's scipy.optimize.
Note that the package name is numeric-optimization and not numerical-optimization.
The name numeric-optimization comes from the module name Numeric.Optimization.
Example Usage
{-# LANGUAGE OverloadedLists #-}
import Data.Vector.Storable (Vector)
import Numeric.Optimization
main :: IO ()
main = do
result <- minimize LBFGS def (WithGrad rosenbrock rosenbrock') [-3,-4]
print (resultSuccess result) -- True
print (resultSolution result) -- [0.999999999009131,0.9999999981094296]
print (resultValue result) -- 1.8129771632403013e-18
-- https://en.wikipedia.org/wiki/Rosenbrock_function
rosenbrock :: Vector Double -> Double
rosenbrock [x,y] = sq (1 - x) + 100 * sq (y - sq x)
rosenbrock' :: Vector Double -> Vector Double
rosenbrock' [x,y] =
[ 2 * (1 - x) * (-1) + 100 * 2 * (y - sq x) * (-2) * x
, 100 * 2 * (y - sq x)
]
sq :: Floating a => a -> a
sq x = x ** 2
Supported Algorithms
| Algorithm | Solver implemention | Haskell binding | |
|---|---|---|---|
| CG_DESCENT | CG_DESCENT-C | nonlinear-optimization | Requires with-cg-descent flag |
| Limited memory BFGS (L-BFGS) | liblbfgs | lbfgs | |
| Limited memory BFGS with bounds constraints (L-BFGS-B) | L-BFGS-B | l-bfgs-b | Requires with-lbfgsb flag |
| Newton's method | Pure Haskell implementation using HMatrix | - |
Installation
Installing Prerequisites
BLAS and LAPACK
You may need to install BLAS and LAPACK for hmatrix.
Windows (MSYS2):
$ pacman -S mingw-w64-x86_64-lapack
or if you use MSYS2 installed by stack
$ stack exec -- pacman -S mingw-w64-x86_64-lapack
Debian and Ubuntu Linux:
$ apt-get install libblas-dev liblapack-dev
libblas-dev and liblapack-dev are reference implementations.
You need to install optimized ones for better performance.
(See DebianScience/LinearAlgebraLibraries)
macOS
By default hmatrix uses BLAS and LAPACK provided by Accelerate Framework provided by macOS.
liblbfgsb
If you want to use L-BFGS-B, you have to install the development package of liblbfgsb.
Ubuntu Linux:
$ apt-get install liblbfgsb-dev
Homebrew (macOS and Linux):
$ brew install msakai/tap/liblbfgsb
Windows (MSYS2):
$ wget https://github.com/msakai/mingw-w64-liblbfgsb/releases/download/v3.0-1/mingw-w64-x86_64-liblbfgsb-3.0-1-any.pkg.tar.zst
$ pacman -U mingw-w64-x86_64-liblbfgsb-3.0-1-any.pkg.tar.zst
or if you use MSYS2 installed by stack
$ wget https://github.com/msakai/mingw-w64-liblbfgsb/releases/download/v3.0-1/mingw-w64-x86_64-liblbfgsb-3.0-1-any.pkg.tar.zst
$ stack exec -- pacman -Sy
$ stack exec -- pacman -U mingw-w64-x86_64-liblbfgsb-3.0-1-any.pkg.tar.zst
Related Packages
- Packages for using with automatic differentiation:
- numeric-optimization-ad for using with ad package
- numeric-optimization-backprop for using with backprop package
- MIP for solving linear programming and mixed-integer linear programming problems
LICENSE
The code in thie packaged is licensed under BSD-3-Clause.
If you enable with-cg-descent flag, it uses GPL-licensed packages and the resulting binary should be distributed under GPL.