JuMP v0.19 has been released

We are thrilled to announce the release of JuMP v0.19. Work on this release started nearly two years ago at the first JuMP-dev meetup.

As introduced in an earlier post and at the second JuMP-dev meetup, JuMP has undergone a major refactoring to replace its solver interface from MathProgBase (MPB) to the new MathOptInterface (MOI), receiving many new features and improvements along the way.

While MPB had three different interfaces: linear/quadratic, conic and nonlinear, MOI is completely generic and extensible by design:

  • The objective function is described by any scalar function and the constraints are described either in the form “scalar function-in-scalar set” or “vector function-in-vector set”. The functions and sets can either be one of those defined in MOI (see Manual · MathOptInterface) or any function or set defined independently in a separate package (see Extensions · JuMP).
  • The result informations (e.g. primal/dual values, iteration count, solver time, objective bounds, statuses (which are now a lot more detailed), …) as well as model attributes and solver parameters have a unified interface, see Reference · MathOptInterface

MOI offers more flexibility in specifying an optimization problem than MPB, so there might be a large gap between what a solver natively supports and what is required to implement the interface. For this reason, MOI includes several utilities that can lift a solver with restricted functionality to a fully functional MOI object.

These MOI utilities are automatically used by JuMP when needed. In order to be interfaced directly with the solver without any MOI facilities in-between, we have introduced a direct mode. In direct mode, no model cache nor constraint or variable names are stored in the JuMP model. All operations are directly managed by the solver. In this mode, JuMP and MOI constitute a thin wrapper on top of the solver API. One benefit of direct mode is that it reduces the number of copies of a model kept in memory.

See the NEWS for a detailed list of changes between JuMP v0.18 and JuMP v0.19 as well as the list of known regressions from v0.18 that will be addressed in future releases.

We would like to acknowledge the following major contributors to the 0.19 release, including solver wrappers and supporting infrastructure:

Thanks to Iain Dunning for performance and testing infrastructure improvements.

We also thank all the other contributors who submitted patches, reported bugs, or provided feedback.

At JuMP-dev in Santiago next month, Miles will present the roadmap for JuMP 1.0. Stay tuned!

39 Likes

Link to docs seems broken: http://www.juliaopt.org/JuMP.jl/0.19/.

The docs are fixed and available at Introduction · JuMP.

2 Likes

I’ve been eagerly awaiting this release! Huge congrats and thanks to all the contributors.

The timing is also excellent because next week the startup I work at is going to start using JuMP in quasi-production :slight_smile:

9 Likes

I can’t find in docs anything about (common?) interface to warmstarting. Is it supported/planned, or should I resolve to optimizer specific code?

We forgot to list these in the docs (start_value and set_start_value are not listed in the documentation · Issue #1871 · jump-dev/JuMP.jl · GitHub):

help?> start_value
search: start_value set_start_value

  start_value(v::VariableRef)

  Return the start value (MOI attribute VariablePrimalStart) of the variable
  v. See also set_start_value.

help?> set_start_value
search: set_start_value

  set_start_value(variable::VariableRef, value::Number)

  Set the start value (MOI attribute VariablePrimalStart) of the variable v to
  value.
3 Likes

thanks!

maybe adding warmstart keyword to docstrings would help the future users