# ipopt-hs: haskell binding to ipopt and nlopt including automatic differentiation

[ bsd3, library, math, numeric, optimisation ] [ Propose Tags ]

a haskell binding to the nonlinear programming solver Ipopt. Bindings to NLopt are also included.

installation
needs the c library ipopt installed. Also by default a binding to nlopt is included. Nlopt by default does not include shared libraries, which seems to be needed to run things from ghci (ie. you need to ./configure --enable-shared when building nlopt).

A embedded language, similar to the one provided by glpk-hs, is defined in Ipopt.NLP. The goal is to define problems at a level similar to other "algebraic modeling languages", but retain some of the safety and flexibility available in haskell. There is some overhead http://code.haskell.org/~aavogt/ipopt-hs/examples/bench.html but perhaps it is negligible for your uses.

Current limitations include:

• copying in every iteration happens between between Data.Vector.Storable and Data.Vector might be avoidable somehow. Currently it is done because AD needs a Traversable structure, but Storable vectors are not traversable. Note that there is a Numeric.AD.Mode.Forward.Double but as yet none for Vectors of Double

• sparseness of derivatives isn't used

• no binding to sensitivity parts as-implemented in ipopt

[Index]

## Flags

Automatic Flags
NameDescriptionDefault
build_examples

build executable from examples/

Disabled
nlopt

also include nlopt bindings

Enabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info