JuMP 1.0.0 is released
releases ·Author: Miles Lubin, Oscar Dowson, Iain Dunning, Joaquim Dias Garcia, Joey Huchette, and Benoît Legat
We are happy to announce the release of JuMP 1.0!
Nearly 10 years in the making, the release of JuMP 1.0 represents a major milestone in the history of JuMP. It also represents a stable platform from which we can continue to build new and exciting features for a long time into the future.
In this post we explain what “going 1.0” means for us now and what it will mean for the future.
If it’s been a while since you tried JuMP, read our release notes to review some recently added features. We’ve also put a lot of effort into revising our documentation, and there are a range of getting started tutorials for new users.
What is JuMP?
JuMP is a modeling language and collection of supporting packages for mathematical optimization problems in Julia.
JuMP makes it easy to formulate and solve a range of problem classes, including linear programs, integer programs, conic programs, semidefinite programs, and constrained nonlinear programs.
JuMP is one of the 10 most popular Julia packages, and it has tens of thousands of users in countries worldwide, with over 50 thousand downloads in the last six months.
JuMP consists of two main Julia packages, JuMP.jl and MathOptInterface.jl, along with a plethora of supporting packages which interface MathOptInterface.jl to external solvers, use JuMP to solve application specific optimization problems, or extend JuMP to new problem domains.
JuMP-dev, the annual user conference, has dozens of contributed talks, and there are over 250 Julia packages that depend on JuMP and MathOptInterface for things such as power systems modeling, exa-scale metabolic modeling, convex programming and much more.
People use JuMP to route school buses, schedule trains, plan power grid expansion, and optimize organic milk production.
A brief history of JuMP
- 09 Oct 2012 - First commit to JuMP.jl repo
- 24 Oct 2013 - JuMP 0.1.0 - First public release
- 15 Dec 2013 - JuMP 0.2.0 - First support for solver callbacks
- 02 May 2014 - JuMP 0.5.0 - First support for nonlinear optimization
- 16 Mar 2015 - First JuMP paper published: Computing in Operations Research Using Julia
- 26 Jun 2015 - First JuMP presentation in JuliaCon 2015
- 31 Aug 2015 - JuMP 0.10.0 - First support for semidefinite optimization
- 15 Dec 2016 - INFORMS Computing Society (ICS) Prize (290 stars)
- 05 May 2017 - Second JuMP paper published: JuMP: A Modeling Language for Mathematical Optimization
- 12 Jun 2017 - First JuMP-dev workshop in Cambridge, USA
- 27 Jun 2018 - Second JuMP-dev workshop in Bordeaux, France
- 06 Aug 2018 - JuMP joins NumFOCUS as a sponsored project
- 15 Feb 2019 - JuMP 0.19.0 - Migration from MathProgBase to MathOptInterface
- 12 Mar 2019 - Third JuMP-dev workshop in Santiago, Chile
- 23 Jan 2020 - First 1000 stars in the JuMP.jl repository on GitHub
- 21 Oct 2020 - Governance structure formalized
- 22 Feb 2021 - NumFOCUS signs agreement with MIT provide ongoing maintenance and support
- 23 Jul 2021 - JuMP wins the Beale–Orchard-Hays prize from the Mathematical Optimization Society
- 28 Jul 2021 - Fourth JuMP-dev workshop
- 22 Oct 2021 - Third JuMP paper published: MathOptInterface: a data structure for mathematical optimization problems
- 21 Feb 2022 - NumFOCUS signs agreement with LANL to improve nonlinear support
Why 1.0 and how will future versions work?
The 1.0 release marks the completion of the JuMP 1.0 roadmap and the transition to semantic versioning.
In short, semantic versioned packages have a version comprised of three numbers: MAJOR.MINOR.PATCH. Given a version number MAJOR.MINOR.PATCH:
- the MAJOR version is incremented for incompatible API changes
- the MINOR version is incremented when new backwards compatibile functionality is added
- the PATCH version is incremented for bug fixes.
By releasing JuMP 1.0.0, the core contributors are ensuring that all code you write using a 1.x.y release of JuMP will continue to work with all future MINOR and PATCH releases, until we make a new MAJOR release.
JuMP follows the ColPrac guide for deciding how to version each release.
JuMP and Julia compatibility
The latest release of JuMP will always support the long-term support and stable releases of Julia.
When the long-term support release is changed, JuMP’s minimum required version of Julia will be updated and a new minor release will be tagged.
Next steps
JuMP 1.0 is not an end goal. We have big plans for the future! To get involved:
- Read our roadmap
- Join the community forum
- Join the developer chatroom
Thank you
A huge number of people have contributed to packages in the JuMP-dev GitHub repositories over the last 10 years. In order of the number of pull requests, we thank:
- @odow
- @blegat
- @mlubin
- @joehuchette
- @joaquimg
- @IainNZ
- @ericphanson
- @matbesancon
- @guilhermebodin
- @frapac
- @dourouc05
- @tkelman
- @chriscoey
- @akshay326
- @kalmarek
- @yeesian
- @IssamT
- @tkoolen
- @henriquebecker91
- @ararslan
- @rdeits
- @JackDunnNZ
- @ccoffrin
- @Ayush-iitkgp
- @juan-pablo-vielma
- @rschwarz
- @barpit20
- @jd-lara
- @karanveerm
- @madeleineudell
- @rafabench
- @staticfloat
- @ExpandingMan
- @metab0t
- @mtanneau
- @yashvardhan747
- @adamferreira
- @Peiffap
- @amontoison
- @bodono
- @ndinsmore
- @dpo
- @kdheepak
- @leotac
- @lkapelevich
- @mohamed82008
- @remi-garcia
- @shadiakiki1986
- @yuyichao
- @Wikunia
- @abelsiqueira
- @caioluke
- @chkwon
- @cossio
- @ranjanan
- @tweisser
- @ulfworsoe
- @hellemo
- @jd-foster
- @vfegger
- @vitornesello
- @AtsushiSakai
- @GunnarFarneback
- @KristofferC
- @PaulSoderlind
- @abhijithch
- @carlobaldassi
- @emreyamangil
- @mforets
- @pitmonticone
- @pulsipher
- @r-barnes
- @rtwalker
- @tomasfmg
- @EdvinAblad
- @anriseth
- @chengg04
- @coroa
- @freemin7
- @iamed2
- @jac0320
- @jlepird
- @kibaekkim
- @madanim
- @migarstka
- @timholy
- @JinraeKim
- @Thuener
- @bhalonen
- @bmetherall
- @brilhana
- @cdeil
- @davidanthoff
- @dstahlke
- @edljk
- @fa-bien
- @ferrolho
- @guimarqu
- @jcheyns
- @jrevels
- @martinbiel
- @mewilhel
- @mfalt
- @nan2ge1
- @omus
- @philipithomas
- @simonbowly
- @tasseff
- @Crghilardi
- @EQt
- @GillesBareilles
- @GregPlowman
- @Kelvyn88
- @MatthewStuber
- @Ochibobo
- @Shuvomoy
- @ViralBShah
- @alessandroSSJ
- @andrewrosemberg
- @antonhinneck
- @arnavs
- @colinfang
- @cormullion
- @daschw
- @daviddelaat
- @davidlizeng
- @egbuck
- @englhardt
- @gdowdy3
- @gragusa
- @gsoleilhac
- @guberger
- @hdavid16
- @huckl3b3rry87
- @ianfiske
- @iaravena
- @jmpohl
- @joeltay
- @ketitalabs
- @kreibaum
- @marcusps
- @mthelm85
- @peterwittek
- @ranocha
- @raphaelsaavedra
- @riccardomurri
- @rofinn
- @shoibalc
- @sivapvarma
- @sshin23
- @tummykung
- @vernwalrahul
- @votroto
- @vrngupta53
- @vtjeng
- @zlatanvasovic
- @AaronMoat
- @BenChung
- @Carl-Ning-Yan
- @CarloLucibello
- @ChrisRackauckas
- @DilumAluthge
- @Dr-G
- @DrChainsaw
- @Dx-Wang
- @Gbrunieau
- @IlyaOrson
- @JiazhengZhu
- @Ken-B
- @Laurae2
- @LefterisM
- @MarcMush
- @MartinBonde
- @MassimoDeMauri
- @MaximilianJHuber
- @MichaelHatherly
- @NLaws
- @Non-Contradiction
- @Ontahm
- @Pramodh-G
- @StefanKarpinski
- @Vgrunert
- @Wimmerer
- @a-torgovitsky
- @adelarue
- @ahwillia
- @alyst
- @amburosesekar
- @amilajack
- @andrioni
- @aritrasep
- @aspicer
- @baggepinnen
- @bbrunaud
- @bkamins
- @blakejohnson
- @brozjak2
- @c-jg
- @cmaes
- @colbec
- @coreysharris
- @czlee
- @dafrick
- @danielschermer
- @danspielman
- @deltova
- @djunglas
- @doorisajar
- @dovahcrow
- @dressel
- @dschein
- @fingolfin
- @frederikgeth
- @freeboson
- @galabovaa
- @gitter-badger
- @gliuzzi
- @gnadt
- @goretkin
- @goulart-paul
- @gpinu1
- @haoxiangyang89
- @harshangrjn
- @hsnamkoong
- @hurak
- @ignace-computing
- @igormcoelho
- @ilancoulon
- @innerlee
- @jayvn
- @jeanpauphilet
- @jgoldfar
- @jiahao
- @jiweiqi
- @jlwether
- @joerenes
- @johnzigla
- @jonas-schulze
- @jonmgonzales
- @joseortiz3
- @joshualeond
- @junglegobs
- @jw3126
- @jwscook
- @jwveysey
- @jz2903
- @kaarthiksundar
- @kiwisensei
- @kmsquire
- @ko56
- @kofron
- @larssp
- @laurentbartholdi
- @laurentheirendt
- @leclere
- @lluang
- @loicvh
- @lrnv
- @malagbek
- @martincornejo
- @mattmilten
- @melonedo
- @mikerouleau
- @mikolajpp
- @mlhetland
- @moehle
- @molet
- @mstriebs
- @niklasschmitz
- @nkottary
- @nodet
- @noilreed
- @numbermaniac
- @omalled
- @oxinabox
- @pedromxavier
- @petershintech
- @pkofod
- @qlete
- @ramcha24
- @raphasampaio
- @renkekuhlmann
- @rocarvaj
- @rohit-mp
- @ryancorywright
- @salazarzen
- @schillic
- @sean-lo
- @seanemoon
- @sebastianangerhausen
- @snitramodranoel
- @sourabhdalvi
- @spockoyno
- @stared
- @stefanobenati
- @stephentu
- @sylvainmouret
- @tamas-borbath
- @tcveatch
- @thomasschiet
- @tmigot
- @tomerarnon
- @traversaro
- @trigaut
- @ven-k
- @viniciusmotta4
- @waldyrious
- @willtebbutt
- @xhub
- @yvesx