The JuMP team is happy to announce the release of JuMP 0.12. This release features a complete rewrite of JuMP's automatic differentiation functionality, which is the largest change in JuMP's nonlinear optimization support since JuMP 0.5. Most of the changes are under the hood, but as previously announced <https://groups.google.com/forum/#!topic/julia-opt/wt36Y6nzysY> there are a couple of syntax changes: - The first parameter to @defNLExpr *and* @defExpr should now be the model object. All linear and nonlinear subexpressions are now attached to their corresponding model. - If solving a sequence of nonlinear models, you should now use nonlinear parameters instead of Julia's variable binding rules.
Many nonlinear models should see performance improvements in JuMP 0.12, let us know if you observe otherwise. We also now support user-defined functions <http://jump.readthedocs.org/en/latest/nlp.html#user-defined-functions> and *automatic differentiation of user-defined functions*. This is quite a significant new feature which allows users to integrate (almost) arbitrary code as a nonlinear function within JuMP expressions, thanks to ForwardDiff.jl <https://github.com/JuliaDiff/ForwardDiff.jl>. We're looking forward to seeing how this feature can be used in practice; please give us feedback on the syntax and any rough edges you run into. Other changes include: - Changed syntax for iterating over AffExpr objects - Stopping the solver from within a callback now causes the solver to return :UserLimit instead of throwing an error. - getDual() now works for conic problems (thanks to Emre Yamangil) Given the large number of changes, bugs are possible. Please let us know of any incorrect or confusing behavior. Miles, Iain, and Joey
