Hypatia is a highly-customizable interior point solver for generic conic optimization problems, written in Julia. It is licensed under the MIT License; see LICENSE.
See Hypatia's documentation for a description of Hypatia's conic form, predefined cones, generic cone interface, and interfaces. See also the applied examples in the examples folder. For more information about Hypatia's algorithms and cones, please see our working paper and cones reference.
Installation
To use Hypatia, install Julia, then at the Julia REPL, type:
julia> using Pkg; Pkg.add("Hypatia")
julia> using Hypatia
Hypatia is an experimental solver and a work in progress, and may not run with older releases of Julia. Default options/parameters are not well-tuned, so we encourage you to experiment with these.
Usage
Hypatia can be accessed through a low-level native Julia interface or through open-source modeling tools such as JuMP and Convex.jl. The native interface is more expressive, allowing Hypatia to solve conic models expressed with generic real floating point types and structured matrices or linear operators, for example. However, it is typically sufficient and more convenient to use JuMP.
Using JuMP, we can model a simple D-optimal experiment design problem and call Hypatia:
using LinearAlgebra
using JuMP
using Hypatia
# setup JuMP model
opt = Hypatia.Optimizer(verbose = false)
model = Model(() -> opt)
@variable(model, x[1:3] >= 0)
@constraint(model, sum(x) == 5)
@variable(model, hypo)
@objective(model, Max, hypo)
V = rand(2, 3)
Q = V * diagm(x) * V'
aff = vcat(hypo, [Q[i, j] for i in 1:2 for j in 1:i]...)
@constraint(model, aff in MOI.RootDetConeTriangle(2))
# solve and query solution
optimize!(model)
termination_status(model)
objective_value(model)
value.(x)
See our experiment design and D-optimal design examples for more information and references for this example.
Many more examples using the native interface or JuMP can be found in the examples folder.
Contributing
Comments, questions, suggestions, and improvements/extensions to the code or documentation are welcomed. Please reach out on Discourse, or submit an issue or contribute a PR on our Github repo. If contributing code, try to maintain consistent style and add docstrings or comments for clarity.
Acknowledgements
This work has been partially funded by the National Science Foundation under grant OAC-1835443 and the Office of Naval Research under grant N00014-18-1-2079.