- Support views in some derivative evaluation functions.
- Improved compatibility with PackageCompiler.
- Fix a bug in model printing on Julia 0.7 and 1.0.
- Add support for Julia v1.0
- Fix matrix expressions with quadratic functions (#1508)
- Fix a bug in second-order derivatives when expressions are present (#1319)
- Fix a bug in
@constraintref
(#1330)
- Fix for nested tuple destructuring (#1193)
- Preserve internal model when relaxation=true (#1209)
- Minor bug fixes and updates for examples
- Drop support for Julia 0.5.
- Update for ForwardDiff 0.5.
- Minor bug fixes.
- Use of
constructconstraint!
in@SDconstraint
. - Minor bug fixes.
- Breaking change: Mixing quadratic and conic constraints is no longer supported.
- Breaking change: The
getvariable
andgetconstraint
functions are replaced by indexing on the corresponding symbol. For instance, to access the variable with namex
, one should now writem[:x]
instead ofgetvariable(m, :x)
. As a consequence, creating a variable and constraint with the same name now triggers a warning, and accessing one of them afterwards throws an error. This change is breaking only in the latter case. - Addition of the
getobjectivebound
function that mirrors the functionality of the MathProgBasegetobjbound
function except that it takes into account transformations performed by JuMP. - Minor bug fixes.
The following changes are primarily of interest to developers of JuMP extensions:
- The new syntax
@constraint(model, expr in Cone)
creates the constraint ensuring thatexpr
is insideCone
. TheCone
argument is passed toconstructconstraint!
which enables the call to the dispatched to an extension. - The
@variable
macro now callsconstructvariable!
instead of directly calling theVariable
constructor. Extra arguments and keyword arguments passed to@variable
are passed toconstructvariable!
which enables the call to be dispatched to an extension. - Refactor the internal function
conicdata
(used build the MathProgBase conic model) into smaller subfunctions to make these parts reusable by extensions.
- Minor bug fixes and printing tweaks
- Address deprecation warnings for Julia 0.6
- Better support for
AbstractArray
in JuMP (Thanks @tkoolen) - Minor bug fixes
- Breaking change: JuMP no longer has a mechanism for selecting solvers by default (the previous mechanism was flawed and incompatible with Julia 0.6). Not specifying a solver before calling
solve()
will result in an error. - Breaking change: User-defined functions are no longer global. The first argument to
JuMP.register
is now a JuMPModel
object within whose scope the function will be registered. CallingJuMP.register
without aModel
now produces an error. - Breaking change: Use the new
JuMP.fix
method to fix a variable to a value or to update the value to which a variable is fixed. Callingsetvalue
on a fixed variable now results in an error in order to avoid silent behavior changes. (Thanks @joaquimg) - Nonlinear expressions now print out similarly to linear/quadratic expressions (useful for debugging!)
- New
category
keyword to@variable
. Used for specifying categories of anonymous variables. - Compatibility with Julia 0.6-dev.
- Minor fixes and improvements (Thanks @cossio, @ccoffrin, @blegat)
- Bugfix for
@LinearConstraints
and friends
- Julia 0.5.0 is the minimum required version for this release.
- Document support for BARON solver
- Enable info callbacks in more states than before, e.g. for recording solutions.
New
when
argument toaddinfocallback
(#814, thanks @yeesian) - Improved support for anonymous variables. This includes new warnings for potentially confusing use of the traditional non-anonymous syntax:
- When multiple variables in a model are given the same name
- When non-symbols are used as names, e.g.,
@variable(m, x[1][1:N])
- Improvements in iterating over JuMP containers (#836, thanks @IssamT)
- Support for writing variable names in .lp file output (Thanks @leethargo)
- Support for querying duals to SDP problems (Thanks @blegat)
- The comprehension syntax with curly braces
sum{}
,prod{}
, andnorm2{}
has been deprecated in favor of Julia's native comprehension syntaxsum()
,prod()
andnorm()
as previously announced. (For early adopters of the new syntax,norm2()
was renamed tonorm()
without deprecation.) - Unit tests rewritten to use Base.Test instead of FactCheck
- Improved support for operations with matrices of JuMP types (Thanks @ExpandingMan)
- The syntax to halt a solver from inside a callback has changed from
throw(CallbackAbort())
toreturn JuMP.StopTheSolver
- Minor bug fixes
- Allow singeton anonymous variables (includes bugfix)
- More consistent handling of states in informational callbacks,
includes a new
when
parameter toaddinfocallback
for specifying in which state an informational callback should be called.
- Compatibility with Julia 0.5 and ForwardDiff 0.2
- Support for "anonymous" variables, constraints, expressions, and parameters, e.g.,
x = @variable(m, [1:N])
instead of@variable(m, x[1:N])
- Support for retrieving constraints from a model by name via
getconstraint
@NLconstraint
now returns constraint references (as expected).- Support for vectorized expressions within lazy constraints
- On Julia 0.5, parse new comprehension syntax
sum(x[i] for i in 1:N if isodd(i))
instead ofsum{ x[i], i in 1:N; isodd(i) }
. The old syntax with curly braces will be deprecated in JuMP 0.15. - Now possible to provide nonlinear expressions as "raw" Julia
Expr
objects instead of using JuMP's nonlinear macros. This input format is useful for programmatically generated expressions. s/Mathematical Programming/Mathematical Optimization/
- Support for local cuts (Thanks to @madanim, Mehdi Madani)
- Document Xpress interface developed by @joaquimg, Joaquim Dias Garcia
- Minor bug and deprecation fixes (Thanks @odow, @jrevels)
- Compatibility update for MathProgBase
- Fix broken deprecation for
registerNLfunction
.
- Most exported methods and macros have been renamed to avoid camelCase. See the list of changes here. There is a 1-1 mapping from the old names to the new, and it is safe to simply replace the names to update existing models.
- Specify variable lower/upper bounds in
@variable
using thelowerbound
andupperbound
keyword arguments. - Change name printed for variable using the
basename
keyword argument to@variable
. - New
@variables
macro allows multiline declaration of groups of variables. - A number of solver methods previously available only through MathProgBase are now exposed directly in JuMP. The fix was recorded live!
- Compatibility fixes with Julia 0.5.
- The "end" indexing syntax is no longer supported within JuMPArrays which do not use 1-based indexing until upstream issues are resolved, see here.
- 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.