Optimization in Julia is organized through projects in the
JuliaDiff communities, which coordinate
the development of a wide breadth of functionality in mathematical
programming, optimization and Operations Research.
Julia, JuliaOpt and JuliaDiff packages address a variety of optimization
problem categories (e.g. linear, nonlinear, semidefinite, second-order
conic, and mixed-integer), provide functionality for advanced
acceleration techniques (automatic differentiation and dual-number
calculations), as well as provide high-level, embedded, domain-specific
algebraic modeling languages directly in Julia.
The excellent work on these packages is done by the JuliaOpt and JuliaDiff communities – most notably
by Miles Lubin, Iain Dunning, Joey Huchette, Jarrett Revels, Luis Benet, John Myles White, Theodore Papamarkou and others. Julia Computing provides support and training for clients looking to use these packages, and contributes back enhancements as open source.
The optimization ecosystem consists of both packages implemented as
liberally-licensed, pure Julia code, as well as integrations with other
best-of-breed commercial and open-source optimization libraries
implemented in C, C++ and Fortran.
Optimization and differentiation packages implemented as pure Julia
packages allow for easy embedding within your own distributed software
without concerns regarding potential differences in the deployed
environment or possible license restrictions. Standalone Julia packages
Optim.jl – implementations of standard optimization algorithms for unconstrained or boxed constrained problems including BFGS, Nelder-Mead, Conjugate Gradient and others.
LsqFit.jl – Least-squares non-linear curve fitting in Julia.
ForwardDiff.jl – Forward mode automatic differentiation functionality for determining derivatives, gradients, Jacobians, Hessians of native Julia functions
ReverseDiffSource.jl – Source code transformation for generating derivatives of arbitrary order
DualNumbers.jl – Implementation of dual numbers and associated mathematical operations
HyperDualNumbers.jl – Hyper-dual number functionality used in the numerical computation of first and second derivatives without the cancellation errors of finite-differencing schemes
Modeling language and solver independent interfaces in Julia consist of
the following packages:
JuMP.jl – An embedded, domain-specific, algebraic modeling language for generating and solving optimization models for linear, quadratic and nonlinear constrained optimization problems.
Convex.jl – An algebraic modeling language for disciplined convex programming
MathProgBase.jl – A standard solver-agnostic interface providing base functionality utilized by all low-level library wrappers in the JuliaOpt ecosystem as well as functionality for use at a high-level by JuMP and Convex.jl. Also allows for end-users to write their own solver-agnostic interfaces.
The Julia optimization ecosystem includes interfaces to the following
commercial and open-source optimization libraries:
LP = Linear Programming
MILP = Mixed Integer LP
SOCP = Second-order cone programming (includes convex QP, QCQP)
MISOCP = Mixed Integer SOCP
SDP = Semidefinite Programming
NLP = (constrained) Nonlinear Programming (includes general QP, QCQP)
CPLEX® is a registered trademark of IBM Corporation
Gurobi® is a registered trademark of Gurobi Optimization
KNITRO® is a registered trademark of Artelys
Mosek™ is a trademark of Mosek ApS
Xpress® is a registered trademark of Fair Isaac Corporation
Need help with Julia?
We also provide training and consulting services
and build open source or proprietary packages
for our customers on a consulting basis. Email us:
Julia Computing was founded by all the creators
of the language to provide commercial support
to Julia users. We are based in Boston, New York,
San Francisco, London and Bangalore with
customers across the world.
© 2016 - 2020 Julia Computing, Inc. All Rights Reserved.