Skip to content

Releases: coin-or/Ipopt

3.14.6

02 May 12:20
Compare
Choose a tag to compare
  • Fixed mapping of meta data for inequalities, e.g., constraint names, from TNLP to Ipopts internal NLP [#570, by Daniel Oliveira].
  • Fixed that MC68 ordering time was not accounted in symbolic factorization time of HSL MA86 [#571].
  • Include more header files in IpIpoptCalculatedQuantities.hpp for setups where forward declarations are not sufficient [#572].

3.14.5

09 Feb 08:30
Compare
Choose a tag to compare
  • Tried to fix recognition of JNI headers on macOS >= 11 [#516].
  • Fixed that only primal variable values where passed to finalize_solution() when a timelimit was reached [#552].

3.14.4

20 Sep 08:46
Compare
Choose a tag to compare

Buildsystem fixes:

  • Skip build of Java interface if either java or jar is not found [#510]. Only give warning if javac and jar are found, but no java or javadoc.
  • Fixed that --with-lapack-lflags was ignored if --with-lapack was not specified explicitly [#512,#515].

For windows libraries, use the one from the 3.14.3 release.

3.14.3

03 Sep 08:50
Compare
Choose a tag to compare
  • Fixed timing for iterate initialization if initialization fails due to an evaluation error.
  • Fixed possible integer overflow when reserving space for indices of Jacobian belonging to fixed variables (introduced with 3.14.0) and reduced memory usage for indices of Jacobian belonging to fixed variables.

3.14.2

21 Jul 07:55
Compare
Choose a tag to compare
  • Added OptionsList::UnsetValue() to remove an option setting.
  • Added missing translation of some Ipopt status codes into AMPL solve result codes.
  • If using the MPI-parallel version of MUMPS: Moved calls to MPI_Init()/MPI_Finalize() in MUMPS interface into global constructor/destructor of Ipopt library (if building with GCC/clang). Use configure flag --disable-mpiinit to disable. [#500]

3.14.1

25 Jun 09:27
Compare
Choose a tag to compare
  • Fixed invalidation of cached Hessians when reoptimizing with same structure.
  • Added OptionsList::SetBoolValue() and OptionsList::SetBoolValueIfUnset(). [#492]
  • Skip check for and link against libdl if linear solver loader is disabled.
  • Fixed missing initialization of BacktrackingLineSearch::in_watchdog_.
  • Fixed a problem with the current solution not being reset when initialization of a NLP fails in reoptimization.
  • Fixed that C++11 capability was not correctly identified with MS/Intel compilers.

3.14.0

15 Jun 17:55
Compare
Choose a tag to compare

The following lists changes since 3.13.4.
In particular users of the Ipopt/Pardiso interface should be aware of the highlighted backward-incompatible changes.
The documentation provides a list of deprecated types and functions. To disable C/C++ compiler warnings from using deprecated types or functions, add a #define IPOPT_DEPRECATED before the include of Ipopt headers in your code.

Data Types

  • Due to a contribution by Mitchell Clement [#428], it is now possible to build Ipopt in a variant that uses single-precision floating point arithmetic instead of the default double-precision.
    This can be enabled by specifying the configure flag --with-precision=single.
    Doing so has a number of consequences on Ipopt interfaces and Ipopt dependencies.
    See the Ipopt installation instructions for more details.
  • The name of all functions in IpBlas.hpp and IpLapack.hpp has been changed to drop the precision-specifier "D" in the name.
    Wrapper using the old names are available, but their use is deprecated.
  • It is now possible to build Ipopt in a variant that uses 64-bit integers for its Index type.
    This can be enabled by specifying the configure flag --with-intsize=64.
    Doing so has a number of consequences on Ipopt interfaces and Ipopt dependencies.
    See the Ipopt installation instructions for more details. [#259]
  • Added new header IpTypes.h that defines Ipopt types for integer and real numbers for C users.
  • Deprecated almost never used type Ipopt::Int, use int instead.
  • Deprecated Number, Index, and Int (on global namespace) in IpStdCInterface.h, use ipnumber, ipindex, and int instead, respectively.
  • Deprecated Bool in IpStdCInterface.h and replaced it by bool from stdbool.h. Note, that Bool was defined to be int, but bool is likely a shorter type, e.g., signed char. Deprecated TRUE and FALSE, use true and false instead.
  • Deprecated IPOPT_EXPORT macro and introduced IPOPT_CALLCONV.
  • Deprecated IPOPT_FORTRAN_INTEGER_TYPE and ipfint. These were always assumed to be int. Use ipindex or ipopt::Index instead.

Linear Solver Interfaces

  • Due to a contribution by Byron Tasseff [#446], it is now possible to use the linear solver SPRAL (Sparse Parallel Robust Algorithms Library) with Ipopt.
    SPRAL is open-source and can, optionally, make use of NVIDIA GPUs.
    If Ipopt has been build with SPRAL, then option linear_solver can be set to spral to enable use of SPRAL.
    See the installation instructions on how to build the Ipopt/SPRAL interface and the options documentation for new options that are available for the Ipopt/SPRAL interface.
  • Added IpoptLinearSolvers.h with function IpoptGetAvailableLinearSolvers() to retrieve information which linear solvers are available for Ipopt (linked in or loaded at runtime).
    Options linear_solver and linear_system_scaling can now only be set to values which corresponding code is available (linked in or for load at runtime).
  • Revised and streamlined implementation of feature that loads libraries with HSL or Pardiso routines at runtime.
    Added options hsllib and pardisolib to specify name of of HSL and Pardiso libraries, respectively.
  • Separated interfaces for Pardiso from pardiso-project.org and Pardiso from Intel MKL and allow to have both Pardiso versions available with the same Ipopt libraries.
    • Pardiso from pardiso-project.org can be selected via linear_solver=pardiso.
      configure option --with-pardiso should now specify only a Pardiso library to be loaded at runtime (the value for --with-pardiso decides the default value for option pardisolib).
      To avoid conflicts with Pardiso from MKL, it is no longer possible to link against Pardiso from pardiso-project.org.
    • Pardiso from MKL can be selected via linear_solver=pardisomkl.
    • Options that influence Pardiso from MKL are named pardisomkl_msglvl, pardisomkl_order, etc.
    • configure option --disable-pardisomkl can be used to disable the check for MKL Pardiso. [#454]
  • Fixed that return code (info%flag) of ma97_solve() was not checked in Ma97SolverInterface::MultiSolve().
  • Calls into MUMPS are now protected by a mutex if compiling for C++11 or higher.
    This prevents Ipopt from calling MUMPS concurrently from several threads.
  • An insufficient memory return status is now also given if the memory required for a working space array of a linear solver exceeds the maximal value for the working space length variable, e.g., if MA27 requires a working space array of length higher than 2^31.
  • Avoid floating point overflow when computing memory increase in interfaces to MA27 and MA57.

Algorithm

  • Changed treatment of NLPs with all variables fixed and fixed_variable_treatment set to make_parameter:
    Ipopt will still terminate early, but initialize its data structures first and print a solve summary (49a0d3a).
    Changed treatment of NLPs with inconsistent variable bounds or constraint sides: These will now result in an invalid problem definition error (-11) (5cdb262).
    As a consequence, solve statistics should now always be available if the return status from (Re)Optimize() is larger than -10.
  • Bound multipliers are now computed for fixed variables if fixed_variable_treatment is set to make_parameter (the default).
    This can trigger a reevaluating of the gradient of the objective function or the Jacobian of the constraint functions. If this is not desired, then option fixed_variable_treatment can be set to the new value make_parameter_nodual. [#308]
  • Changed default for honor_original_bounds to no.
    Variable bounds (see option bound_relax_factor) are now relaxed by at most the value of constr_viol_tol.
    The solve summary now reports the violation of original bounds and SolveStatistics::(Scaled)Infeasibilities() has been extended to report the violation of original variable bounds. [#312]
  • If Ipopt hits a time or iteration limit during watchdog phase, the iterate from before the watchdog phase is now restored and passed to finalize_solution. Note that this does not apply if Ipopt is stopped due to a user-interrupt (intermediate_callback). [#289]
  • When BacktrackingLinesearch could not find a trial point that provided sufficient progress, it may resort to call the feasibility restoration phase. If, however, the current (scaled) constraint violation was below tol/100, this would result in the infamous "Restoration phase is called at almost feasible point..." abort with status code Restoration_Failure. Now, this message has been changed to "Linesearch failed, but no restoration phase or other fall back is available." and the status code to Error_In_Step_Computation to better reflect that the linesearch failed and not the restoration phase. Further, the unscaled constraint violation tolerance now needs to be below constr_viol_tol/10 as well in order to trigger this abort.
  • When a square problem is solved and the restoration phase only succeeded to find a point that is feasible w.r.t. constr_viol_tol, but not w.r.t. tol, then status Feasible_Point_Found is returned now.

Ipopt interfaces

  • Added TNLP::get_curr_iterate() and TNLP::get_curr_violations() to request the current iterate (primal and dual variable values) and primal and dual infeasibility w.r.t. the TNLP. The methods are meant to be called during intermediate_callback to inspect the current iterate. The C, Fortran, and Java interfaces have been extended by corresponding functions, too. The hs071 examples have been extended to show use of the new functions. Added test getcurr to test new functions. [#382, #451]
  • Extended the Java interface by the possibility to specify an intermediate_callback.
  • Added flag to TNLPAdapter::ResortX() to specify how to handle fixed variables.
    Added flag to TNLPAdapter::ResortG() to specify whether to correct by right-hand-side of equality constraints.
    Added TNLPAdapter::ResortBoundMultipliers() to generate correct duals for fixed variables if fixed_variable_treatment is make_constraint.
    Added TNLPAdapter::GetFullDimensions(), TNLPAdapter::GetFixedVariables(), TNLPAdapter::GetPermutationMatrices(), and TNLPAdapter::GetC_Rhs() to retrieve more information of the transformation in a TNLPAdapter.
  • Added TNLPAdapter::ResortBounds() and deprecated TNLPAdapter::ResortBnds().
  • AmplTNLP constructor and AmplTNLP::get_options() now expect to receive a pointer to a RegisteredOptions object as well.
    Previous versions of these methods are still available but deprecated.
    Using a NULL pointer for the RegisteredOptions argument is also deprecated.
  • std::overflow_error exceptions are now caught by Ipopt even if rethrowing of non-Ipopt exceptions is enabled.

Timing

  • Added option max_wall_time to specify a wallclock time limit.
    Added SolverReturn code WALLTIME_EXCEEDED and ApplicationReturnStatus code Maximum_WallTime_Exceeded.
  • Changed default for max_cpu_time to 1e20 to indicate no CPU timelimit.
  • Detailed timing statistics are no longer collected by default.
    To reenable, set the new option timing_statistics to yes or set the option print_timing_statistics to yes [#299].
  • Removed IpoptData::ResetCpuStartTime(). Deprecated IpoptData::cpu_time_start(), use IpoptData::TimingStats()::OverallAlgorithm()::StartCpuTime() instead.
  • Deprecated SolveStatistics::TotalCPUTime(), use SolveStatistics::TotalCpuTime() instead.

Option handling

  • All Ipopt options are now also available via the AMPL interface, that is, can be set in AMPL via an option ipopt_options "..." statement.
  • Added flag "advanced" for RegisteredOption to store whether an option is rather mea...
Read more

3.13.4

24 Feb 05:29
Compare
Choose a tag to compare
  • Fixed a linking issue for ipopt_sens [#418]
  • Fixed Makefile for Java example regarding location of .jar file
  • Fixed build of R interface if using -fvisibility=hidden.

3.13.3

16 Oct 13:48
Compare
Choose a tag to compare
  • Members of class AmplTNLP are now protected instead of private.
  • Updated Eclipse Public License from 1.0 to 2.0.
  • Added example recursive_nlp that uses Ipopt to solves an optimization problem for the evaluation of the objective function. [contributed by Brad Bell]
  • Fixed dangling pointer problems with Journalist used for debugging (--with-ipopt-verbosity > 0) when more than one IpoptApplication is used. [#393, thanks to Brad Bell]
  • Fixed build problem when using HSL library that does not include MA27, MA57, or MC19. [#395]
  • Fixed build of linear-solver loader on Windows. [#408]

3.13.2

30 Apr 12:09
Compare
Choose a tag to compare
  • The C-preprocessor defines COIN_IPOPT_CHECKLEVEL, COIN_IPOPT_VERBOSITY, and FORTRAN_INTEGER_TYPE, which are defined by IpoptConfig.h, have been renamed to IPOPT_CHECKLEVEL, IPOPT_VERBOSITY, and IPOPT_FORTRAN_INTEGER_TYPE, respectively.
    They are still available under their previous name, but these will be removed in Ipopt 3.14.
  • Changed dependencies as used by coinbrew to use new versions (2.1) of ThirdParty/HSL and ThirdParty/MUMPS and dropped ThirdParty/Metis.
    The new versions of the HSL and MUMPS build scripts now look for a Metis library in the system and should work with both Metis 4 and Metis 5.
  • Changed location where Java interface jar gets installed from $libdir to $datadir/java/.
  • minor fixes to buildsystem