For a detailed list of the closed issues and pull requests from this release, see the tag notes. A summary of changes are as follows:
- Fix deprecation warnings
- Throw
DimensionMismatch
for incompatibly sized functions and sets - Unify treatment of
keys(x)
on JuMP containers
For a detailed list of the closed issues and pull requests from this release, see the tag notes. A summary of changes are as follows:
- New features:
- Add debug info when adding unsupported constraints
- Add
relax_integrality
for solving continuous relaxation - Allow querying constraint conflicts
- Bug fixes:
- Dispatch on
Real
forMOI.submit
- Implement
copy
forCustomSet
in tests - Don't export private macros
- Fix invalid assertion in nonlinear
- Dispatch on
- Error if constraint has
NaN
right-hand side - Improve speed of tests
- Lots of work modularizing files in
/test
- Lots of work modularizing files in
- Improve line numbers in macro error messages
- Print nonlinear subexpressions
- Various documentation updates
- Dependency updates:
- Datastructures 0.18
- MathOptFormat v0.5
- Prep for MathOptInterface 0.9.15
- Added Special Order Sets (SOS1 and SOS2) to JuMP with default weights to ease the creation of such constraints (#2212).
- Added functions
simplex_iterations
,barrier_iterations
andnode_count
(#2201). - Added function
reduced_cost
(#2205). - Implemented
callback_value
for affine and quadratic expressions (#2231). - Support
MutableArithmetics.Zero
in objective and constraints (#2219). - Documentation improvements:
- Mention tutorials in the docs (#2223).
- Update COIN-OR links (#2242).
- Explicit link to the documentation of
MOI.FileFormats
(#2253). - Typo fixes (#2261).
- Containers improvements:
- Fix
Base.map
forDenseAxisArray
(#2235). - Throw
BoundsError
if number of indices is incorrect forDenseAxisArray
andSparseAxisArray
(#2240).
- Fix
- Extensibility improvements:
- Implement a
set_objective
method fallback that redirects toset_objective_sense
andset_objective_function
(#2247). - Add
parse_constraint
method with arbitrary number of arguments (#2051). - Add
parse_constraint_expr
andparse_constraint_head
(#2228).
- Implement a
- Added
relative_gap()
to accessMOI.RelativeGap()
attribute (#2199). - Documentation fixes:
- Added link to source for docstrings in the documentation (#2207).
- Added docstring for
@variables
macro (#2216). - Typo fixes (#2177, #2184, #2182).
- Implementation of methods for Base functions:
- Implemented
Base.empty!
forJuMP.Model
(#2198). - Implemented
Base.conj
for JuMP scalar types (#2209).
- Implemented
- Bug fixes:
- Fixed sum of expression with scalar product in macro (#2178).
- Fixed writing of nonlinear models to MathOptFormat (#2181).
- Fixed construction of empty SparseAxisArray (#2179).
- Fixed constraint with zero function (#2188).
- Improved the clarity of the
with_optimizer
deprecation warning.
Breaking changes:
-
Deprecated
with_optimizer
(#2090, #2084, #2141). You can replacewith_optimizer
by either nothing,optimizer_with_attributes
or a closure:- replace
with_optimizer(Ipopt.Optimizer)
byIpopt.Optimizer
. - replace
with_optimizer(Ipopt.Optimizer, max_cpu_time=60.0)
byoptimizer_with_attributes(Ipopt.Optimizer, "max_cpu_time" => 60.0)
. - replace
with_optimizer(Gurobi.Optimizer, env)
by() -> Gurobi.Optimizer(env)
. - replace
with_optimizer(Gurobi.Optimizer, env, Presolve=0)
byoptimizer_with_attributes(() -> Gurobi.Optimizer(env), "Presolve" => 0)
.
alternatively to
optimizer_with_attributes
, you can also set the attributes separately withset_optimizer_attribute
. - replace
-
Renamed
set_parameter
andset_parameters
toset_optimizer_attribute
andset_optimizer_attributes
(#2150). -
Broadcast should now be explicit inside macros.
@SDconstraint(model, x >= 1)
and@constraint(model, x + 1 in SecondOrderCone())
now throw an error instead of broadcasting1
along the dimension ofx
(#2107). -
@SDconstraint(model, x >= 0)
is now equivalent to@constraint(model, x in PSDCone())
instead of@constraint(model, (x .- 0) in PSDCone())
(#2107). -
The macros now create the containers with
map
instead offor
loops, as a consequence, containers created by@expression
can now have any element type and containers of constraint references now have concrete element types when possible. This fixes a long-standing issue where@expression
could only be used to generate a collection of linear expressions. Now it works for quadratic expressions as well (#2070). -
Calling
deepcopy(::AbstractModel)
now throws an error. -
The constraint name is now printed in the model string (#2108).
New features:
- Added support for solver-independent and solver-specific callbacks (#2101).
- Added
write_to_file
andread_from_file
, supported formats are CBF, LP, MathOptFormat, MPS and SDPA (#2114). - Added support for complementarity constraints (#2132).
- Added support for indicator constraints (#2092).
- Added support for querying multiple solutions with the
result
keyword (#2100). - Added support for constraining variables on creation (#2128).
- Added method
delete
that deletes a vector of variables at once if it is supported by the underlying solver (#2135). - The arithmetic between JuMP expression has be refactored into the MutableArithmetics package (#2107).
- Improved error on complex values in NLP (#1978).
- Added an example of column generation (#2010).
Bug fixes:
- Incorrect coefficients generated when using Symmetric variables (#2102)
- Add sections on
@variables
and@constraints
in the documentation (#2062). - Fixed product of sparse matrices for Julia v1.3 (#2063).
- Added
set_objective_coefficient
to modify the coefficient of a linear term of the objective function (#2008). - Added
set_time_limit_sec
,unset_time_limit_sec
andtime_limit_sec
to set and query the time limit for the solver in seconds (#2053).
- Documentation updates.
- Numerous bug fixes.
- Better error messages (#1977, #1978, #1997, #2017).
- Performance improvements (#1947, #2032).
- Added LP sensitivity summary functions
lp_objective_perturbation_range
andlp_rhs_perturbation_range
(#1917). - Added functions
dual_objective_value
,raw_status
andset_parameter
. - Added function
set_objective_coefficient
to modify the coefficient of a linear term of the objective (#2008). - Added functions
set_normalized_rhs
,normalized_rhs
, andadd_to_function_constant
to modify and get the constant part of a constraint (#1935, #1960). - Added functions
set_normalized_coefficient
andnormalized_coefficient
to modify and get the coefficient of a linear term of a constraint (#1935, #1960). - Numerous other improvements in MOI 0.9, see the
NEWS.md
file of MOI for more details.
- Fix a bug in derivatives that could arise in models with nested nonlinear subexpressions.
- Usability and performance improvements.
- Bug fixes.
JuMP 0.19 contains significant breaking changes.
Breaking changes:
-
JuMP's abstraction layer for communicating with solvers changed from MathProgBase (MPB) to MathOptInterface (MOI). MOI addresses many longstanding design issues. (See @mlubin's slides from JuMP-dev 2018.) JuMP 0.19 is compatible only with solvers that have been updated for MOI. See the installation guide for a list of solvers that have and have not yet been updated.
-
Most solvers have been renamed to
PackageName.Optimizer
. For example,GurobiSolver()
is nowGurobi.Optimizer
. -
Solvers are no longer added to a model via
Model(solver = XXX(kwargs...))
. Instead useModel(with_optimizer(XXX, kwargs...))
. For example,Model(with_optimizer(Gurobi.Optimizer, OutputFlag=0))
. -
JuMP containers (e.g., the objects returned by
@variable
) have been redesigned.Containers.SparseAxisArray
replacesJuMPDict
,JuMPArray
was rewritten (inspired byAxisArrays
) and renamedContainers.DenseAxisArray
, and you can now request a container type with thecontainer=
keyword to the macros. See the corresponding documentation for more details. -
The statuses returned by solvers have changed. See the possible status values here. The MOI statuses are much richer than the MPB statuses and can be used to distinguish between previously indistinguishable cases (e.g. did the solver have a feasible solution when it stopped because of the time limit?).
-
Starting values are separate from result values. Use
value
to query the value of a variable in a solution. Usestart_value
andset_start_value
to get and set an initial starting point provided to the solver. The solutions from previous solves are no longer automatically set as the starting points for the next solve. -
The data structures for affine and quadratic expressions
AffExpr
andQuadExpr
have changed. Internally, terms are stored in dictionaries instead of lists. Duplicate coefficients can no longer exist. Accessors and iteration methods have changed. -
JuMPNLPEvaluator
no longer includes the linear and quadratic parts of the model in the evaluation calls. These are now handled separately to allow NLP solvers that support various types of constraints. -
JuMP solver-independent callbacks have been replaced by solver-specific callbacks. See your favorite solver for more details. (See the note below: No solver-specific callbacks are implemented yet.)
-
The
norm()
syntax is no longer recognized inside macros. Use theSecondOrderCone()
set instead. -
JuMP no longer performs automatic transformation between special quadratic forms and second-order cone constraints. Support for these constraint classes depends on the solver.
-
The symbols
:Min
and:Max
are no longer used as optimization senses. Instead, JuMP uses theOptimizationSense
enum from MathOptInterface.@objective(model, Max, ...)
,@objective(model, Min, ...)
,@NLobjective(model, Max, ...)
, and@objective(model, Min, ...)
remain valid, but@objective(m, :Max, ...)
is no longer accepted. -
The sign conventions for duals has changed in some cases for consistency with conic duality (see the documentation). The
shadow_price
helper method returns duals with signs that match conventional LP interpretations of dual values as sensitivities of the objective value to relaxations of constraints. -
@constraintref
is no longer defined. Instead, create the appropriate container to hold constraint references manually. For example,constraints = Dict() # Optionally, specify types for improved performance. for i in 1:N constraints[i] = @constraint(model, ...) end
-
The
lowerbound
,upperbound
, andbasename
keyword arguments to the@variable
macro have been renamed tolower_bound
,upper_bound
, andbase_name
, for consistency with JuMP's new style recommendations. -
We rely on broadcasting syntax to apply accessors to collections of variables, e.g.,
value.(x)
instead ofgetvalue(x)
for collections. (Usevalue(x)
whenx
is a scalar object.)
New features:
-
Splatting (like
f(x...)
) is recognized in restricted settings in nonlinear expressions. -
Support for deleting constraints and variables.
-
The documentation has been completely rewritten using docstrings and Documenter.
-
Support for modeling mixed conic and quadratic models (e.g., conic models with quadratic objectives and bi-linear matrix inequalities).
-
Significantly improved support for modeling new types of constraints and for extending JuMP's macros.
-
Support for providing dual warm starts.
-
Improved support for accessing solver-specific attributes (e.g., the irreducible inconsistent subsystem).
-
Explicit control of whether symmetry-enforcing constraints are added to PSD constraints.
-
Support for modeling exponential cones.
-
Significant improvements in internal code quality and testing.
-
Style and naming guidelines.
-
Direct mode and manual mode provide explicit control over when copies of a model are stored and/or regenerated. See the corresponding documentation.
There are known regressions from JuMP 0.18 that will be addressed in a future release (0.19.x or later):
-
Performance regressions in model generation (issue). Please file an issue anyway if you notice a significant performance regression. We have plans to address a number of performance issues, but we might not be aware of all of them.
-
Fast incremental NLP solves are not yet reimplemented (issue).
-
We do not yet have an implementation of solver-specific callbacks.
-
The column generation syntax in
@variable
has been removed (i.e., theobjective
,coefficients
, andinconstraints
keyword arguments). Support for column generation will be re-introduced in a future release. -
The ability to solve the continuous relaxation (i.e. via
solve(model; relaxation = true)
) is not yet reimplemented (issue).
- 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 (Thanks @ExpandingMan)
- 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 example
- 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.