Optimization-related projects in Julia. JuliaOpt on GitHub.

The three circles represent (clockwise): linear, integer, and nonlinear programming.

What is Julia?

Julia is a "high-level, high-performance dynamic programming language for technical computing". It is free (open-source) and cross-platform. The familiar syntax, the ease of connecting with external libraries, the speed, and advanced language features like metaprogramming offer interesting possibilities for optimization software.

What is JuliaOpt?

JuliaOpt is an umbrella group for Julia-based optimization-related projects. For more in-depth information about JuliaOpt and some of its projects, see this presentation from JuliaCon 2014. All our code is available from our GitHub page, as well as through the Julia package manager. We have a mailing list, julia-opt, on Google Groups. The current JuliaOpt projects are:

  • JuMP - An algebraic modeling language for linear, quadratic, and nonlinear constrained optimization problems embedded in Julia. Generates models as quick as commercial modeling tools and supports advanced features like solver callbacks. (Documentation, GitHub)
  • Optim.jl - Implementations of standard optimization algorithms in pure Julia for unconstrained or box constrained problems. (Documentation, GitHub)
  • MathProgBase - A standardized interface implemented by solvers that allows code to remain solver-agnostic. Used by JuMP. (Documentation, GitHub)

We also have connections to many open-source and commercial solvers:

Julia Solver Interfaces
Key: Notes:
  1. Not exposed through JuMP yet - use interface directly.
COIN Cbc/Clp Cbc.jl/Clp.jl
CPLEX CPLEX.jl IP Callbacks
GNU GLPK GLPK.jl IP Callbacks
Gurobi Gurobi.jl IP Callbacks
Ipopt Ipopt.jl
Mosek Mosek.jl 1 1
NLopt NLopt.jl

Guidelines for JuliaOpt Packages

JuliaOpt aims to be a collection of high-quality optimization-related packages for users of Julia. To be included in JuliaOpt, we request that packages follow the following simple guidelines:

  • Packages should have good documentation.
  • Packages must have a basic suite of tests in a test subdirectory, ideally controlled by a master file test/runtests.jl. Unit testing and the use of the Travis continuous integration service is strongly encouraged.
  • (Recent) Linux, OS X, and Windows platforms must be fully supported.
  • For packages with freely distributable binary dependencies, these should be installed automatically via BinDeps. Binaries should be available for both OS X and Windows users. (See the Julia Homebrew package for easy binary packaging on OS X. For Windows, many upstream libraries provide a pre-compiled DLL file.)

Current JuliaOpt packages can be used as examples of how to implement these guidelines (please file an issue if you believe they don't!). We are happy to provide assistance to package maintainers, especially with testing on various platforms and dealing with binary dependencies.

This website was made with Skeleton. Something wrong? Submit issue. Contact: Iain Dunning (idunning AT mit DOT edu, @iaindunning), Miles Lubin (mlubin AT mit DOT edu)