• Stars
    star
    139
  • Rank 260,928 (Top 6 %)
  • Language
    Julia
  • License
    Other
  • Created about 6 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

interior point solver for general convex conic optimization problems

Hypatia logo

Build Status codecov

Hypatia is a highly customizable open source interior point solver for generic conic optimization problems, written in Julia.

For more information on Hypatia, please see:

and preprints of our papers:

and corresponding raw results CSV files generated by our run scripts in the benchmarks folder.

License

Hypatia is licensed under the MIT License (see LICENSE).

Installation

To use Hypatia, install Julia, then at the Julia REPL, type:

using Hypatia
using Pkg
Pkg.add("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

model = Model(() -> Hypatia.Optimizer(verbose = false))
@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 D-optimal design example for more information and references.

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. If contributing code, try to maintain consistent style and add docstrings or comments for clarity. New examples are welcomed and should be implemented similarly to the existing examples.

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.

Citing Hypatia

If you find Hypatia solver useful, please cite our solver paper:

@article{coey2022solving,
    title={Solving natural conic formulations with {H}ypatia.jl},
    author={Chris Coey and Lea Kapelevich and Juan Pablo Vielma},
    year={2022},
    journal={INFORMS Journal on Computing},
    publisher={INFORMS},
    volume={34},
    number={5},
    pages={2686--2699},
    doi={https://doi.org/10.1287/ijoc.2022.1202}
}

If you find aspects of Hypatia's IPM implementation useful, please cite our algorithm paper:

@article{coey2022performance,
    title={Performance enhancements for a generic conic interior point algorithm},
    author={Chris Coey and Lea Kapelevich and Juan Pablo Vielma},
    year={2023},
    journal={Mathematical Programming Computation},
    publisher={Springer},
    volume={15},
    pages={53--101},
    doi={https://doi.org/10.1007/s12532-022-00226-0}
}

More Repositories

1

JuMP.jl

Modeling language for Mathematical Optimization (linear, mixed-integer, conic, semidefinite, nonlinear)
Julia
2,203
star
2

Convex.jl

A Julia package for disciplined convex programming
Julia
554
star
3

MathOptInterface.jl

An abstraction layer for mathematical optimization solvers
Julia
374
star
4

Gurobi.jl

A Julia interface to the Gurobi Optimizer
Julia
219
star
5

Ipopt.jl

A Julia interface to the Ipopt nonlinear solver
Julia
149
star
6

JuMPTutorials.jl

Tutorials on using JuMP for mathematical optimization in Julia
Jupyter Notebook
141
star
7

CPLEX.jl

A Julia interface to the CPLEX solver
Julia
131
star
8

Pajarito.jl

A solver for mixed-integer convex optimization
Julia
130
star
9

DiffOpt.jl

Differentiating convex optimization programs w.r.t. program parameters
Julia
122
star
10

SumOfSquares.jl

Sum of Squares Programming for Julia
Julia
114
star
11

HiGHS.jl

A Julia interface to the HiGHS solver
Julia
103
star
12

GLPK.jl

A Julia interface to the GNU Linear Programming Kit
Julia
101
star
13

Dualization.jl

Automatic dualization feature for MathOptInterface.jl
Julia
95
star
14

SCS.jl

A Julia interface for the SCS conic programming solver
Julia
82
star
15

Cbc.jl

A Julia interface to the Coin-OR Branch and Cut solver (CBC)
Julia
81
star
16

KNITRO.jl

A Julia interface to the Artelys Knitro solver
Julia
75
star
17

AmplNLWriter.jl

A Julia interface to AMPL-enabled solvers
Julia
65
star
18

Xpress.jl

A Julia interface to the FICO Xpress Optimization suite
Julia
64
star
19

MultiObjectiveAlgorithms.jl

A Julia package for solving multi-objective optimization problems
Julia
60
star
20

Pavito.jl

A gradient-based outer approximation solver for convex mixed-integer nonlinear programming (MINLP)
Julia
59
star
21

Clp.jl

A Julia interface to the Coin-OR Linear Programming solver (CLP)
Julia
52
star
22

MutableArithmetics.jl

Interface for arithmetics on mutable types in Julia
TeX
49
star
23

PolyJuMP.jl

A JuMP extension for Polynomial Optimization
Julia
41
star
24

ECOS.jl

A Julia interface to the ECOS conic optimization solver
Julia
40
star
25

ParametricOptInterface.jl

Extension for dealing with parameters
Julia
36
star
26

MosekTools.jl

A MathOptInterface.jl interface to the MOSEK solver
Julia
29
star
27

CSDP.jl

A Julia interface to the Coin-OR solver CSDP
Julia
21
star
28

benchmarks

A repository for long-term benchmarking of JuMP performance
Julia
19
star
29

MathOptFormat

Specification and description of the MathOptFormat file format
Python
18
star
30

BARON.jl

A Julia interface to the BARON mixed-integer nonlinear programming solver
Julia
18
star
31

MiniZinc.jl

A Julia interface to the MiniZinc constraint modeling language
Julia
15
star
32

MINLPTests.jl

Unit and Integration Tests for JuMP NLP and MINLP solvers
Julia
12
star
33

jump-dev.github.io

Source for jump.dev
Jupyter Notebook
11
star
34

SDPA.jl

A Julia interface to the SDPA semidefinite programming solver
Julia
11
star
35

MatrixOptInterface.jl

An interface to pass matrix form problems
Julia
11
star
36

SDPNAL.jl

A Julia interface to the SDPNAL+ solver
Julia
10
star
37

ComplexOptInterface.jl

Extension of MathOptInterface to complex sets
Julia
8
star
38

SDPLR.jl

Julia wrapper for SDPLR
Julia
7
star
39

Penopt.jl

A Julia interface to the Penopt SDP solver
Julia
7
star
40

SolverTests

Test that all solvers pass the tests before a new MOI release
7
star
41

SeDuMi.jl

A Julia interface to the SeDuMi SDP solver
Julia
6
star
42

SDPT3.jl

A Julia interface to the SDPT3 solver
Julia
5
star
43

DSDP.jl

A Julia interface to the DSDP semidefinite programming solver
Julia
4
star
44

GSOC2021

GSOC2021 information for JuMP
3
star
45

JuMPPaperBenchmarks

Benchmarks for a paper on JuMP 1.0
Julia
2
star
46

Gurobi_jll.jl

A Julia package for installing the Gurobi Optimizer
Julia
2
star
47

MOIPaperBenchmarks

Benchmarks for a paper on MathOptInterface
Julia
1
star
48

GSOC2022

GSOC2022 information for JuMP
1
star
49

HiGHSBuilder

Julia
1
star
50

GSOC2020

GSOC2020 information for JuMP
1
star
51

GSOC

1
star
52

open-energy-modeling-benchmarks

1
star