News for EAGO Releases

v0.9.1 (March 7, 2026)

  • Removed PrettyTables.jl dependency.
    • The display_table! function now prints information in a similar manner to the print_iteration! function.
  • Updated constraint propagation routines to do interval reverse passes for nonlinear constraints.
  • Updated fbbt! and obbt! to account for infinite bounds
  • Updated select_branch_point to account for infinite bounds
  • Added an EAGO parameter upper_result_adjust to shift the upper objective value f* by (1.0 + relative_tolerance/100.0)*f* + absolute_tolerance/100.0 which defaults to false.
  • Added evaluate_local_nlp! function to evaluate the problem locally using the current node lower solution information and update the upper solution information for the current node if it is feasible. This occurs when default_upper_heuristic returns false.
  • Updated the condition for fathoming nodes in fathom! to check if their lower bounds are within absolute and/or relative tolerances of the global upper bound.
  • Updated default node_limit from 1E7 to 1E9.

v0.9.0 (February 19, 2026)

  • EAGO now requires Julia v1.10 or later.
  • Bumped IntervalArithmetic.jl compatibility to v1.0.
  • Bumped ForwardDiff.jl compatibility to v1.0.

v0.8.4 (December 18, 2025)

  • Switched from Cbc to GLPK as the default relaxed optimizer.
  • Added an EAGO parameter fbbt_tolerance for FBBT to consider lower and upper bounds equal which defaults to 1E-8.

v0.8.3 (May 1, 2025)

  • Added support for MOI.UserDefinedFunction.
  • Updated bounds in unbounded_check from +/- 1E10 to +/- 1E6.
  • Bumped requirement for Ipopt.jl to 1.10 for type stability: https://github.com/jump-dev/Ipopt.jl?tab=readme-ov-file#type-stability.
  • Updated display.

v0.8.2 (October 27, 2024)

  • Added support for MOI.ScalarNonlinearFunction.
    • Users can now define all constraints using @constraint instead of needing to use @NLconstraint. This applies to @objective as well.
  • Added support for variable names.
  • Updated display.

v0.8.1 (June 15, 2023)

  • Resolved an issue where integer and binary variables would sometimes throw a MathOptInterface.UpperBoundAlreadySet error.
  • Added the function unbounded_check! which warns users if they are missing variable bounds and sets them to +/- 1E10 by default.
    • Added an EAGO parameter unbounded_check which defaults to true and enables unbounded_check!.
  • Bumped requirement for PrettyTables.jl to v2+ to accommodate the latest version of DataFrames.jl.

v0.8.0 (June 12, 2023)

  • Updated EAGO for compatibility with the nonlinear expression API changes introduced in JuMP v1.2: https://discourse.julialang.org/t/ann-upcoming-refactoring-of-jumps-nonlinear-api/83052.
    • EAGO now uses the MOI.Nonlinear submodule instead of JuMP._Derivatives.
    • Models, nodes, expressions, constraints, and operators are now compatible with MOI.
  • Added logic and comparison operators to EAGO.OperatorRegistry.

v0.7.3 (April 11, 2023)

  • Bumped DocStringExtensions.jl compatibility.

v0.7.2 (November 22, 2022)

  • Added support for Julia 1.7.
  • Bumped NaNMath.jl compatibility.
  • Added help? information for various functions and structures.
  • Updated documentation and some formatting.

v0.7.1 (June 26, 2022)

  • Added the function print_problem_summary, an internal script used to display all constraints, objectives in a linear program which is added to functions for debug purposes while writing code.
  • Adjusted default EAGOParameters.
    • branch_cvx_factor: 0.5 => 0.25
    • branch_offset: 0.2 => 0.15
    • time_limit and _time_left: 1000.0 => 3600.0
    • obbt_depth: 0 => 6
    • obbt_repetitions: 1 => 3
    • cut_tolerance_rel: 1E-2 => 1E-3
  • Adjusted Ipopt.Optimizer attributes.
    • max_iter: 20000 => 10000
    • acceptable_iter: 10000 => 1000
  • Excluded test_quadratic_nonconvex_constraint_basic from MOI tests.
  • Restricted JuMP compatibility to 1.0.0 - 1.1.1.

v0.7.0 (March 28, 2022)

  • Added envelopes of activation functions: xabsx, logcosh
  • Added variations of estimator_extrema, estimator_under, and estimator_over functions to EAGO for bilinear relaxations.
  • Moved various functions and related structures to new files.
  • Added RelaxCache structure to hold relaxed problem information.
  • Updated forward and reverse propagation.
  • Added PrettyTables.jl.
  • Added test examples.
  • Added a memory allocation analysis.
  • Updated documentation.

v0.6.1 (March 4, 2021)

  • Minor update to tests.

v0.6.0 (February 19, 2021)

  • License changed from CC BY-NC-SA 4.0 to MIT.
  • Fix deprecated Ipopt constructor.
  • Fix discrepancy between the returned objective value and the objective evaluated at the solution.
  • Dramatically decrease allocates and first-run performance of SIP routines.
  • Add two algorithms which modify SIPRes detailed in Djelassi, H. and Mitsos A. 2017.
  • Fix objective interval fallback function.
  • New SIP interface with extendable subroutines.
  • Fix x^y relaxation bug.
  • Add issues template.
  • Add SIP subroutine documentation.

v0.5.2 (November 18, 2020)

  • Fix user specified branching variables.

v0.5.1 (November 18, 2020)

  • Support for Julia ~1 (with limited functionality for Julia 1.0 and 1.1).

v0.5.0 (November 18, 2020)

  • Introduces the register_eago_operators!(m::JuMP.Model) which can be used to register all nonstandard nonlinear terms used in EAGO in any JuMP model.
  • Introduces positive, negative, lower_bnd, upper_bnd, and bnd functions which can be used to enforce bounds on intermediate terms in nonlinear expressions (EAGO.Optimizer only).
  • Adds envelopes: abs2, sinpi, cospi, fma, cbrt
  • Adds envelopes and functions: xlogx
  • Adds envelopes of special functions: erf, erfc, erfinv, erfcinv
  • Adds envelopes of activation functions: relu, gelu, elu, selu, swish, sigmoid, softsign, softplus, bisigmoid, pentanh, leaky_relu, param_relu
  • Error messages in sip_explicit have been made more transparent.
  • Fixes some issues with documentation image rendering and links.
  • Drops appveyor CI and Travis CI in favor of GitHub Actions.

v0.4.2 (August 28, 2020)

  • Support for Julia 1.5.

v0.4.1 (June 17, 2020)

  • Minor bug fixes.

v0.4.0 (June 12, 2020)

  • Support for new MOI/JuMP RawParameter input and a number of new attributes.
  • Separates McCormick and ReverseMcCormick libraries (now McCormick.jl and ReverseMcCormick.jl) from main package. McCormick.jl is reexported.
  • Relaxation calculations now return NaN values on a domain violation.
  • Tolerance based validation of cuts has been added to generate numerically safe cuts.
  • Significantly simplify internal codebase for EAGO.Optimizer (no changes to API): fully decouples input problem specifications from the formulation used internally, stack only stores variables that are branched on, and a number of internal rearrangements to clearly delineate different routines.
  • Add problem classification preprocessing that throws to simpler routines if LP problem types are detected (enables future support for SOCP, MILP, MISOCP, and Convex forms).
  • Fix multiple bugs and add more transparent error codes.

v0.3.1 (January 29, 2020)

  • Add unit tests.
  • Support for Julia 1.3.
  • Fix IntervalContractors.jl dependency issue.

v0.3.0 (November 5, 2019)

This update is intended to be the last to create a large number of breaking changes to the EAGO API. Please review the use cases provided in the documentation to update examples.

  • A number of performance improvements have been made to the underlying McCormick relaxation library.
  • The optimizer used to construct relaxations is now modified in place.
  • All subproblem storage has been moved to the Optimizer object and storage types (e.g. LowerInfo) have been removed.
  • A BinaryMinMaxHeap structure is now used to store nodes.
  • Speed and aesthetics for logging and printing utilities have been updated.
  • Subroutines are now customized by creating a subtype of ExtensionType and defining subroutines which dispatch on this new structure.
  • Parametric interval methods and the Implicit optimizer have been move to a separate package (to be tagged shortly).
  • JIT compilation time has been reduced substantially.
  • Support for silent tag and time limits.

v0.2.1 (July 7, 2019)

  • Bug fix for explicit SIP solving routine that occurred for uncertainty sets of dimension greater than 1.
  • Bug fix for MOI.MAX_SENSE (max objective sense).

v0.2.0 (June 14, 2019)

This update creates a number of breaking changes to the EAGO API. Please review the use cases provided in the documentation to update examples.

  • Updated to support Julia 1.0+, MathOptInterface (MOI), and MOI construction of subproblems.
  • Additional domain reduction routines available.
  • Support for specialized handling of linear and quadratic terms.
  • Significant performance improvements due to pre-allocation of Wengert tapes and MOI support.
  • A more intuitive API for McCormick relaxation construction.

v0.1.2 (June 20, 2018)

  • Significant speed and functionality updates.

v0.1.1 (June 7, 2018)

  • Initial release of combined EAGO packages.

v0.1.0 (April 10, 2018)

  • Main global solver release.