- Change name printed for variable using the
basename
keyword argument to@defVar
.
- Small fixes for nonlinear optimization
- Fix a regression in slicing for JuMPArrays (when not using 1-based indexing)
- The automatic differentiation functionality has been completely rewritten with a number of user-facing changes:
@defExpr
and@defNLExpr
now take the model as the first argument. The previous one-argument version of@defExpr
is deprecated; all expressions should be named. E.g., replace@defExpr(2x+y)
with@defExpr(jump_model, my_expr, 2x+y)
.- JuMP no longer uses Julia's variable binding rules for efficiently re-solving a sequence of nonlinear models. Instead, we have introduced nonlinear parameters. This is a breaking change, so we have added a warning message when we detect models that may depend on the old behavior.
- Support for user-defined functions integrated within nonlinear JuMP expressions.
- Replaced iteration over
AffExpr
withNumber
-like scalar iteration; previous iteration behavior is now available vialinearterms(::AffExpr)
. - Stopping the solver via
throw(CallbackAbort())
from a callback no longer triggers an exception. Instead,solve()
returnsUserLimit
status. getDual()
now works for conic problems (Thanks @emreyamangil.)
- Bug-fix for problems with quadratic objectives and semidefinite constraints
- Compatibility update for Mosek
- Remove usage of
@compat
in tests. - Fix updating quadratic objectives for nonlinear models.
- Julia 0.4.0 is the minimum required version for this release.
- Fix for scoping semantics of index variables in sum{}. Index variables no longer leak into the surrounding scope.
- Addition of the
solve(m::Model, relaxation=true)
keyword argument to solve the standard continuous realaxation of modelm
- The
getConstraintBounds()
method allows access to the lower and upper bounds of all constraints in a (nonlinear) model. - Update for breaking changes in MathProgBase
- Fix a rare error when parsing quadratic expressions
- Fix
Variable()
constructor with default arguments - Detect unrecognized keywords in
solve()
- Fix for deprecation warnings
- Fixes for ambiguity warnings.
- Fix for breaking change in precompilation syntax in Julia 0.4-pre
- Support (on Julia 0.4 and later) for conditions in indexing
@defVar
and@addConstraint
constructs, e.g.@defVar(m, x[i=1:5,j=1:5; i+j >= 3])
- Support for vectorized operations on Variables and expressions. See the documentation for details.
- New
getVar()
method to access variables in a model by name - Support for semidefinite programming.
- Dual solutions are now available for general nonlinear problems. You may call
getDual
on a reference object for a nonlinear constraint, andgetDual
on a variable object for Lagrange multipliers from active bounds. - Introduce warnings for two common performance traps: too many calls to
getValue()
on a collection of variables and use of the+
operator in a loop to sum expressions. - Second-order cone constraints can be written directly with the
norm()
andnorm2{}
syntax. - Implement MathProgBase interface for querying Hessian-vector products.
- Iteration over
JuMPContainer
s is deprecated; instead, use thekeys
andvalues
functions, andzip(keys(d),values(d))
for the old behavior. @defVar
returnsArray{Variable,N}
when each ofN
index sets are of the form1:nᵢ
.- Module precompilation: on Julia 0.4 and later,
using JuMP
is now much faster.
- Fixes for FactCheck testing on julia v0.4.
- Fix bug in @addConstraints.
- Fix for Julia 0.4-dev.
- Small infrastructure improvements for extensions.
- Comparison operators for constructing constraints (e.g.
2x >= 1
) have been deprecated. Instead, construct the constraints explicitly in the@addConstraint
macro to add them to the model, or in the@LinearConstraint
macro to create a stand-alone linear constraint instance. getValue()
method implemented to compute the value of a nonlinear subexpression- JuMP is now released under the Mozilla Public License version 2.0 (was previously LGPL). MPL is a copyleft license which is less restrictive than LGPL, especially for embedding JuMP within other applications.
- A number of performance improvements in ReverseDiffSparse for computing derivatives.
MathProgBase.getsolvetime(m)
now returns the solution time reported by the solver, if available. (Thanks @odow, Oscar Dowson)- Formatting fix for LP format output. (Thanks @sbebo, Leonardo Taccari).
- Nonlinear subexpressions now supported with the
@defNLExpr
macro. - SCS supported for solving second-order conic problems.
setXXXCallback
family deprecated in favor ofaddXXXCallback
.- Multiple callbacks of the same type can be registered.
- Added support for informational callbacks via
addInfoCallback
. - A
CallbackAbort
exception can be thrown from callback to safely exit optimization.
- Reduced costs and linear constraint duals are now accessible when quadratic constraints are present.
- Two-sided nonlinear constraints are supported.
- Methods for accessing the number of variables and constraints in a model are renamed.
- New default procedure for setting initial values in nonlinear optimization: project zero onto the variable bounds.
- Small bug fixes.
- Fix a method ambiguity conflict with Compose.jl (cosmetic fix)
- Fix a bug in
sum(::JuMPDict)
- Added the
setCategory
function to change a variables category (e.g. continuous or binary) after construction, andgetCategory
to retrieve the variable category.
- Fix a bug in parsing linear expressions in macros. Affects only Julia 0.4 and later.
- Breaking change: The syntax for column-wise model generation has been changed to use keyword arguments in
@defVar
. - On Julia 0.4 and later, variables and coefficients may be multiplied in any order within macros. That is, variable*coefficient is now valid syntax.
- ECOS supported for solving second-order conic problems.
- Support for skipping model generation when solving a sequence of nonlinear models with changing data.
- Fix a memory leak when solving a sequence of nonlinear models.
- The
@addNLConstraint
macro now supports the three-argument version to define sets of nonlinear constraints. - KNITRO supported as a nonlinear solver.
- Speed improvements for model generation.
- The
@addNLConstraints
macro supports adding multiple (groups of) constraints at once. Syntax is similar to@addConstraints
. - Discrete variables allowed in nonlinear problems for solvers which support them (currently only KNITRO).
- Starting values for variables may now be specified with
@defVar(m, x, start=value)
. - The
setSolver
function allows users to change the solver subsequent to model creation. - Support for "fixed" variables via the
@defVar(m, x == 1)
syntax. - Unit tests rewritten to use FactCheck.jl, improved testing across solvers.
- Fix a bug in multiplying two AffExpr objects.
- Further improvements and bug fixes for printing.
- Fixed a bug in
@defExpr
. - Support for accessing expression graphs through the MathProgBase NLP interface.
- Improvements and bug fixes for printing.
- Julia 0.3.0 is the minimum required version for this release.
buildInternalModel(m::Model)
added to build solver-level model in memory without optimizing.- Deprecate
load_model_only
keyword argument tosolve
. - Add groups of constraints with
@addConstraints
macro. - Unicode operators now supported, including
∑
forsum
,∏
forprod
, and≤
/≥
- Quadratic constraints supported in
@addConstraint
macro. - Quadratic objectives supported in
@setObjective
macro. - MathProgBase solver-independent interface replaces Ipopt-specific interface for nonlinear problems
- Breaking change:
IpoptOptions
no longer supported to specify solver options, usem = Model(solver=IpoptSolver(options...))
instead.
- Breaking change:
- New solver interfaces: ECOS, NLopt, and nonlinear support for MOSEK
- New option to control whether the lazy constraint callback is executed at each node in the B&B tree or just when feasible solutions are found
- Add support for semicontinuous and semi-integer variables for those solvers that support them.
- Add support for index dependencies (e.g. triangular indexing) in
@defVar
,@addConstraint
, and@defExpr
(e.g.@defVar(m, x[i=1:10,j=i:10])
).- This required some changes to the internal structure of JuMP containers, which may break code that explicitly stored
JuMPDict
objects.
- This required some changes to the internal structure of JuMP containers, which may break code that explicitly stored
- Fix a bug with specifying solvers (affects Julia 0.2 only)
- Fix a bug in printing models
- Add support for semicontinuous and semi-integer variables for those solvers that support them.
- Breaking change: Syntax for
Variable()
constructor has changed (use of this interface remains discouraged)
- Breaking change: Syntax for
- Update for breaking changes in MathProgBase
- Fix bug with problem modification: adding variables that did not appear in existing constraints or objective.
- Update for breaking change in MathProgBase which reduces loading times for
using JuMP
- Fix error when MIPs not solved to optimality
- Update for breaking change in ReverseDiffSparse
- Fix compatibility with Julia 0.3 prerelease
- Fix a bug in coefficient handling inside lazy constraints and user cuts
- Support for nonlinear optimization with exact, sparse second-order derivatives automatically computed. Ipopt is currently the only solver supported.
getValue
forAffExpr
andQuadExpr
- Breaking change:
getSolverModel
replaced bygetInternalModel
, which returns the internal MathProgBase-level model - Groups of constraints can be specified with
@addConstraint
(see documentation for details). This is not a breaking change. dot(::JuMPDict{Variable},::JuMPDict{Variable})
now returns the corresponding quadratic expression.
- Fix bug where change in objective sense was ignored when re-solving a model.
- Fix issue with handling zero coefficients in AffExpr.
- Support for SOS1 and SOS2 constraints.
- Solver-independent callback for user heuristics.
dot
andsum
implemented forJuMPDict
objects. Now you can say@addConstraint(m, dot(a,x) <= b)
.- Developers: support for extensions to JuMP. See definition of Model in
src/JuMP.jl
for more details. - Option to construct the low-level model before optimizing.
- Improved model printing
- Preliminary support for IJulia output
- Documentation updates
- Support for MOSEK
- CPLEXLink renamed to CPLEX
- Unbounded/infeasibility rays: getValue() will return the corresponding components of an unbounded ray when a model is unbounded, if supported by the selected solver. getDual() will return an infeasibility ray (Farkas proof) if a model is infeasible and the selected solver supports this feature.
- Solver-independent callbacks for user generated cuts.
- Use new interface for solver-independent QCQP.
setlazycallback
renamed tosetLazyCallback
for consistency.
- Breaking change: Objective sense is specified in setObjective instead of in the Model constructor.
- Breaking change:
lpsolver
andmipsolver
merged into singlesolver
option. - Problem modification with efficient LP restarts and MIP warm-starts.
- Relatedly, column-wise modeling now supported.
- Solver-independent callbacks supported. Currently we support only a "lazy constraint" callback, which works with Gurobi, CPLEX, and GLPK. More callbacks coming soon.
- Bug fixes for printing, improved error messages.
- Allow
AffExpr
to be used in macros; e.g.,ex = y + z; @addConstraint(m, x + 2*ex <= 3)
- Update for solver specification API changes in MathProgBase.
- Initial public release.