Ipopt.jl is a Julia interface to the Ipopt nonlinear solver.
The package is registered in METADATA.jl
and so can be installed with Pkg.add
.
julia> import Pkg; Pkg.add("Ipopt")
Ipopt.jl will use BinaryProvider.jl to automatically install the Ipopt binaries. This should work for both the official Julia binaries from https://julialang.org/downloads/
and source-builds.
To install custom built Ipopt binaries set the environmental variables JULIA_IPOPT_LIBRARY_PATH
and JULIA_IPOPT_EXECUTABLE_PATH
, and call import Pkg; Pkg.build("Ipopt")
. For instance, if the libraries are installed in /opt/lib
and the executable is in /opt/bin
just call
ENV["JULIA_IPOPT_LIBRARY_PATH"] = "/opt/lib"
ENV["JULIA_IPOPT_EXECUTABLE_PATH"] = "/opt/bin"
import Pkg; Pkg.build("Ipopt")
If you do not want BinaryProvider to download the default binaries on install set JULIA_IPOPT_LIBRARY_PATH
and JULIA_IPOPT_EXECUTABLE_PATH
before calling import Pkg; Pkg.add("Ipopt")
.
To switch back to the default binaries clear JULIA_IPOPT_LIBRARY_PATH
and JULIA_IPOPT_EXECUTABLE_PATH
, and call import Pkg; Pkg.build("Ipopt")
.
Ipopt implements the solver-independent MathOptInterface interface,
and so can be used within modeling software like JuMP.
The solver object is called Ipopt.Optimizer
. All options listed in the Ipopt documentation may be passed directly. For example, you can suppress output by saying Ipopt.Optimizer(print_level=0)
. If you wish to pass an option specifically for the restoration phase, instead of using the prefix resto.
, use the prefix resto_
. For example Ipopt.Optimizer(resto_max_iter=0)
.
You can use Ipopt with JuMP as follows:
using JuMP, Ipopt
model = Model(with_optimizer(Ipopt.Optimizer, max_cpu_time=60.0))
Full documentation for the Ipopt C wrapper is available here. Use of the nonlinear MathProgBase interface is recommended over the low-level C interface because it permits one to easily switch between solvers.