• Stars
    star
    244
  • Rank 165,885 (Top 4 %)
  • Language
    Julia
  • License
    Other
  • Created about 8 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

A Julia/JuMP-based Global Optimization Solver for Non-convex Programs

Alpine, a global solver for non-convex MINLPs

CI codecov Documentation version

ALPINE (glob(AL) o(P)timization for mixed-(I)nteger programs with (N)onlinear (E)quations), is a novel global optimization solver that uses an adaptive, piecewise convexification scheme and constraint programming methods to solve non-convex Mixed-Integer Non-Linear Programs (MINLPs) efficiently. MINLPs are typically "hard" optimization problems which appear in numerous applications (see MINLPLib.jl).

Alpine is entirely built upon JuMP and MathOptInterface in Julia, which provides incredible flexibility for usage and further development.

Alpine globally solves a given MINLP by:

  • Analyzing the problem's expressions (objective & constraints) and applies appropriate convex relaxations and polyhedral outer-approximations

  • Performing sequential optimization-based bound tightening (OBBT) and an iterative MIP-based adaptive partitioning scheme via piecewise polyhedral relaxations with a guarantee of global convergence

Installation

Install Alpine using the Julia package manager:

import Pkg
Pkg.add("Alpine")

Usage with JuMP

Use Alpine with JuMP as follows:

using JuMP, Alpine, Ipopt, HiGHS
ipopt = optimizer_with_attributes(Ipopt.Optimizer, "print_level" => 0)
highs = optimizer_with_attributes(HiGHS.Optimizer, "output_flag" => false)
model = Model(
    optimizer_with_attributes(
        Juniper.Optimizer,
        "nlp_solver" => ipopt,
        "mip_solver" => highs,
    ),
)

Documentation

For more details, see the online documentation.

Support problem types

Alpine can currently handle MINLPs with polynomials in constraints and/or in the objective. Currently, there is no support for exponential cones and Positive Semi-Definite (PSD) cones in MINLPs. Alpine is also a good fit for subsets of the MINLP family, for example, Mixed-Integer Quadratically Constrained Quadratic Programs (MIQCQPs), Non-Linear Programs (NLPs), etc.

For more details, check out this video on Alpine.jl at JuMP-dev 2018.

Underlying solvers

Though the MIP-based bounding algorithm implemented in Alpine is quite involved, most of the computational bottleneck arises in the underlying MIP solvers. Since every iteration of Alpine solves an MIP sub-problem, which is typically a convex MILP/MIQCQP, Alpine's run time heavily depends on the run-time of these solvers. For the best performance of Alpine, we recommend using the commercial solver Gurobi, which is available free for academic purposes. However, due to the flexibility offered by JuMP, the following MIP and NLP solvers are supported in Alpine:

Solver Julia Package
CPLEX CPLEX.jl
Cbc Cbc.jl
Gurobi Gurobi.jl
Ipopt Ipopt.jl
Bonmin Bonmin.jl
Artelys KNITRO KNITRO.jl
Xpress Xpress.jl
HiGHS HiGHS.jl

Bug reports and support

Please report any issues via the GitHub issue tracker. All types of issues are welcome and encouraged; this includes bug reports, documentation typos, feature requests, etc.

Challenging Problems

We are seeking out hard benchmark instances for MINLPs. Please get in touch either by opening an issue or privately if you would like to share any hard instances.

Citing Alpine

If you find Alpine useful in your work, we kindly request that you cite the following papers (PDF, PDF)

@article{alpine_JOGO2019,
  title = {An adaptive, multivariate partitioning algorithm for global optimization of nonconvex programs},
  author = {Nagarajan, Harsha and Lu, Mowen and Wang, Site and Bent, Russell and Sundar, Kaarthik},
  journal = {Journal of Global Optimization},
  year = {2019},
  issn = {1573-2916},
  doi = {10.1007/s10898-018-00734-1},
}

@inproceedings{alpine_CP2016,
  title = {Tightening {McCormick} relaxations for nonlinear programs via dynamic multivariate partitioning},
  author = {Nagarajan, Harsha and Lu, Mowen and Yamangil, Emre and Bent, Russell},
  booktitle = {International Conference on Principles and Practice of Constraint Programming},
  pages = {369--387},
  year = {2016},
  organization = {Springer},
  doi = {10.1007/978-3-319-44953-1_24},
}

If you find the underlying piecewise polyhedral formulations implemented in Alpine useful in your work, we kindly request that you cite the following papers (link-1, link-2):

@article{alpine_ORL2021,
  title = {Piecewise polyhedral formulations for a multilinear term},
  author = {Sundar, Kaarthik and Nagarajan, Harsha and Linderoth, Jeff and Wang, Site and Bent, Russell},
  journal = {Operations Research Letters},
  volume = {49},
  number = {1},
  pages = {144--149},
  year = {2021},
  publisher = {Elsevier}
}

@article{alpine_OptOnline2022,
  title={Piecewise Polyhedral Relaxations of Multilinear Optimization},
  author={Kim, Jongeun and Richard, Jean-Philippe P. and Tawarmalani, Mohit},
  eprinttype={Optimization Online},
  date={2022}
}

More Repositories

1

PowerModels.jl

A Julia/JuMP Package for Power Network Optimization
Julia
391
star
2

Juniper.jl

A JuMP-based Nonlinear Integer Program Solver
Julia
180
star
3

PowerModelsDistribution.jl

A Julia/JuMP Package for Unbalanced Power Network Optimization
Julia
142
star
4

WaterModels.jl

A Julia/JuMP Package for Water Distribution Network Optimization
Julia
70
star
5

GasModels.jl

A Julia/JuMP Package for Gas Network Optimization
Julia
65
star
6

rosetta-opf

AC-OPF Implementations in Various NLP Modeling Frameworks
Julia
51
star
7

tutorial-grid-science

Julia Tutorial Materials for the Grid Science Tools
MATLAB
42
star
8

InfrastructureModels.jl

Shared functionalities for multiple infrastructure network optimization packages
Julia
39
star
9

MINLPLib.jl

A JuMP-based library of Non-Linear and Mixed-Integer Non-Linear Programs
Julia
34
star
10

PowerModelsSecurityConstrained.jl

A PowerModels Extension for Security Constrained Optimization Problems
Julia
33
star
11

grg-pssedata

Python tools for working with PSSE v33 data files
Python
31
star
12

QuantumAnnealing.jl

Tools for the Simulation and Execution of Quantum Annealing Algorithms
Julia
24
star
13

GraphicalModelLearning.jl

Algorithms for Learning Graphical Models
Julia
23
star
14

PowerModelsAnnex.jl

A PowerModels.jl Extension Package for Exploratory Work
Julia
22
star
15

GasPowerModels.jl

Julia packages for joint optimization of natural gas and power transmission networks
Julia
21
star
16

PowerModelsMLD.jl

DEPRECIATED :: Use PowerModelsRestoration.jl
Julia
20
star
17

PowerModelsRestoration.jl

A PowerModels Extension for Optimization of Power Network Restoration
Julia
20
star
18

grail

Gas Reliability Analysis Integrated Library: algorithms for natural gas pipeline optimization, optimal control, and simulation
MATLAB
18
star
19

PowerModelsONM.jl

An optimization library for the operation and restoration of electric power distribution feeders featuring networked microgrids
Julia
18
star
20

PowerModelsAnalytics.jl

Tools for the analysis and visualization of PowerModels data and results
Julia
14
star
21

MomentOpt.jl

A Julia modeling layer for the Generalized Moment Problem
Julia
12
star
22

PowerModelsITD.jl

Integrated Transmission and Distribution Optimization
Julia
12
star
23

PowerModelsGMD.jl

GMD problem formulation for PowerModels.jl
Julia
11
star
24

Katana.jl

A Cutting-Plane Based Solver for Convex NLPs
Julia
9
star
25

PowerModelsProtection.jl

Fault study formulations for PowerModels and PowerModelsDistribution
Julia
9
star
26

PowerWaterModels.jl

A Julia/JuMP Package for Joint Optimization of Power and Water Distribution Networks
Julia
9
star
27

MathProgIncidence.jl

Tools for constructing and analyzing the incidence graph or matrix of variables and constraints in a JuMP model
Julia
9
star
28

ODO

Operations & Design Optimization for Networked Microgrids
C++
8
star
29

dwig

D-Wave Instance Generator (D-WIG)
Python
8
star
30

inverse_ising

Julia implementation of RISE, logRISE and RPLE algorithms for the inverse Ising problem
Julia
8
star
31

ising-solvers

Algorithms for finding ground states of Ising models
Python
7
star
32

bqpsolvers

Solver interfaces for bqpjson data files
Python
6
star
33

SALO

Julia
5
star
34

ARMO

Point Cloud Alignment and Registration via Mathematical Optimization
C++
5
star
35

bqpjson

Utilities for working with bqpjson data
Python
4
star
36

grg-mpdata

Python tools for working with Matpower data files
MATLAB
4
star
37

QASA

Quantum Annealing Single-qubit Assessment (QASA)
Python
3
star
38

micot

Java
3
star
39

PowerModelsStability.jl

Stability-constrained Power Flow Models
Julia
3
star
40

PetroleumModels.jl

A Julia/JuMP Package for Petroleum Network Optimization
Julia
3
star
41

QuantumAnnealingAnalytics.jl

Tools for Visualization of Quantum Annealing
Julia
3
star
42

grg-psse2grg

Translation tools for PSSE and GRG network data
Python
3
star
43

goc-solution2-solver

Basic Solution 2 Solver for Grid Optimization Competition Challenge 1
Julia
2
star
44

dwisc

D-Wave Ising Sample Collector (D-WISC)
Python
2
star
45

WaterModelsAnnex.jl

A WaterModels.jl Extension Package for Exploratory Work
Julia
2
star
46

isodus

Algorithms for learning exponential family distributions with unbounded support
Julia
2
star
47

OPFRecourse.jl

MATLAB
2
star
48

grg-mp2grg

Translation tools for Matpower and GRG network data
MATLAB
2
star
49

learning-ising-dynamics

Interaction Screening and Pseudolikelihood based algorithms for learning dynamics of Ising model
Jupyter Notebook
2
star
50

gmd-data

A Repository for Software to Capture and Analyze Data on Geomagnetic Disturbances (GMDs)
Python
2
star
51

flexes-build

Components needed for building and deploying flexes
Python
1
star
52

GOC3Benchmark.jl

Benchmark algorithm for Challenge 3 of the Grid Optimization Competition
Julia
1
star
53

flexes-feed

Generic structure for retrieving and processing regularly updated data from the web
Python
1
star
54

energy-storage-example

An example of energy storage optimization using PowerModels
R
1
star
55

dmcis2017

HTML
1
star
56

MVAD

Multi-Variate Anomaly Detection in R
R
1
star
57

gfm-lpnorm

Java
1
star
58

ThreePhasePowerModels.jl

DEPRECIATED :: Use PowerModelsDistribution.jl
Julia
1
star
59

generalized-fragility-model

Extensible Java framework for fragility modeling
Java
1
star
60

minlp-solvers

Wrappers for Benchmarking MINLP Solvers
Julia
1
star
61

lanl-ansi.github.io

ANSI Website Source Code
1
star
62

flexes-lib

Client library for flexes
Python
1
star
63

MG-RAVENS

1
star