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:

  • Optim.jl - Implementations of standard optimization algorithms in pure Julia for unconstrained or box constrained problems. (Documentation, GitHub)
  • 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)
  • Convex.jl - An algebraic modeling language for disciplined convex programming embedded in Julia. (Documentation, GitHub)
  • MathProgBase - A standardized interface implemented by solvers that allows code to remain solver-agnostic. Used by JuMP and Convex.jl. Provides one-shot functions linprog, mixintprog, and quadprog. (Documentation, GitHub)
  • Solver interfaces - a variety of Julia wrappers for many open-source and commercial solvers.

The following table lists the current JuliaOpt solver interfaces and the problem classes they support. We also list the problem classes that can be modelled with JuMP and Convex.jl below:

JuliaOpt Compatibility Table
Key: Notes:
  1. Problem must be convex.
COIN Cbc (.jl)
COIN Clp (.jl)
CPLEX (.jl) IP Callbacks
ECOS (.jl)
GNU GLPK (.jl) IP Callbacks
Gurobi (.jl) IP Callbacks
Ipopt (.jl)
KNITRO (.jl)
Mosek (.jl) 1
NLopt (.jl)
SCS (.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). Stickers!