ipopt-hs-0.3.0.0: haskell binding to ipopt including automatic differentiation
a haskell binding to the nonlinear programming solver ipopt http://projects.coin-or.org/Ipopt
installation
- needs ipopt installed: For example if you have a `/usr/include/coin/IpStdCInterface.h` from your ipopt installation, use:
cabal install ipopt-hs --extra-include-dirs=/usr/include/coin
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.
Refer to examples/Test1.hs
for an example where the derivatives
are computed by hand, Test2.hs
for the use of
createIpoptProblemAD
and Test3.hs
for the highest level.
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.
- sparseness of derivatives isn't used to decide which way to calculate (forward vs. backward mode)
- probably doesn't work if
IpStdCInterface.h
has Number =/=CDouble
- no binding to SetIntermediateCallback
- garbage collection of
IpProblem
won't free C-side resources
- Ipoptexports most things you should need
- Ipopt.AnyRFrepresenting functions that can be differentiated
- Ipopt.NLPa EDSL for describing nonlinear programs
- Ipopt.PP
- Ipopt.Raw
- Ipopt.Sparsityfind out derivatives are unnecessary