• Stars
    star
    180
  • Rank 213,097 (Top 5 %)
  • Language
    Julia
  • License
    MIT License
  • Created about 7 years ago
  • Updated 2 months ago

Reviews

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

Repository Details

A JuMP-based Nonlinear Integer Program Solver

Juniper

CI codecov Documentation

Juniper (Jump Nonlinear Integer Program solver) is a solver for mixed-integer nonlinear programs.

It is a heuristic which is not guaranteed to find the global optimum. If you need the global optimum, check out Alpine.

Installation

Install Juniper using the Julia package manager:

import Pkg
Pkg.add("JuMP")

Use with JuMP

Use Juniper with JuMP as follows:

using JuMP, Juniper, Ipopt
ipopt = optimizer_with_attributes(Ipopt.Optimizer, "print_level"=>0)
optimizer = optimizer_with_attributes(Juniper.Optimizer, "nl_solver"=>ipopt)
model = Model(optimizer)
v = [10, 20, 12, 23, 42]
w = [12, 45, 12, 22, 21]
@variable(model, x[1:5], Bin)
@objective(model, Max, v' * x)
@constraint(model, sum(w[i]*x[i]^2 for i in 1:5) <= 45)
optimize!(model)
println(termination_status(model))
println(objective_value(model))
println(value.(x))

The nl_solver is used by Juniper to solve continuous nonlinear sub-problems while Juniper searches for acceptable assignments to the discrete variables. A common choice is Ipopt, but any optimizer that supports the continuous relaxation of the model may be used.

To solve problems with more complex nonlinear functions, use the @NLconstraint and @NLobjective JuMP macros.

Documentation

The online documentation is available at https://lanl-ansi.github.io/Juniper.jl/stable/.

Feasibility pump

If Juniper has difficulty finding feasible solutions on your model, try adding a solver that supports integer variables (for example, HiGHS) to run a feasibility pump:

using JuMP, Juniper, 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,
        "nl_solver" => ipopt,
        "mip_solver" => highs,
    ),
)

The feasibility pump is used at the start of Juniper to find a feasible solution before the branch and bound part starts. For some classes of problems this can be a highly effective pre-processor.

Citing Juniper

If you find Juniper useful in your work, we kindly request that you cite the following paper or technical report:

@inproceedings{juniper,
     Author = {Ole Kröger and Carleton Coffrin and Hassan Hijazi and Harsha Nagarajan},
     Title = {Juniper: An Open-Source Nonlinear Branch-and-Bound Solver in Julia},
     booktitle="Integration of Constraint Programming, Artificial Intelligence, and Operations Research",
     pages="377--386",
     year="2018",
     publisher="Springer International Publishing",
     isbn="978-3-319-93031-2"
}

More Repositories

1

PowerModels.jl

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

Alpine.jl

A Julia/JuMP-based Global Optimization Solver for Non-convex Programs
Julia
244
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