Skip to content

v2.9.0

Latest

Choose a tag to compare

@github-actions github-actions released this 08 Sep 14:33
· 31 commits to main since this release
23e1950

Uno v2.9.0 implements substantial improvements to the barrier method.

As of Sept 9, 2026, Uno can solve 45/47 instances on the Mittelmann benchmark, in about the same time as IPOPT.

Features

  • Second-order corrections implemented for line-search interior-point methods (#812, #864, #876, #904)
  • Computation of least-square multipliers for equality-constrained problems (#833, #852, #856)
  • Use a filter method for globalizing the restoration phase (#903)
  • Function scaling (#866)
  • Update to HiGHS v1.15.1 and MUMPS v5.9.1 (#869, #881, #892)

Improvements

  • Optimized settings for linear solvers
  • Flush calls to write the logger info to the disk immediately (#824)
  • Replaced raw pointers with views for KKT blocks (#831)
  • Reset Wächter's filter after 5 successive filter rejections (#835)
  • Upon BacktrackingLineSearch::is_tiny_direction(), skip backtracking and accept (#839)
  • Improved timer (#847)
  • Use previous Hessian if its evaluation fails (#857, #862)
  • Create the Jacobian sparsity once in the models, and copy them in the subproblem solvers (#865)
  • Print the versions of the subproblem solvers (#845)
  • Detect diverging iterates (added status DIVERGING_ITERATE) (#874)
  • Slight relaxation of bounds if variables too close to bounds in IPM (#883)
  • Allow the user to set the model name (#894)
  • Improved printing of methods and stat table (#905)
  • Improved preallocation of vectors (#907)
  • Cache optimized computation of predicted reductions (#909)
  • Minimum step length for the backtracking line search (#910)
  • Tie trial evaluations reset to assembly of trial iterate (#912)

Bug fixes

  • Resize bound duals in Iterate::set_number_variables (#825)
  • Check parameterization on current inequality handling method in FeasibilityRestoration (#832)
  • Fixed statistics.print_current_line() in BacktrackingLineSearch (#836)
  • Set OptimizationProblem::dual_regularization_factor to 1 (#837)
  • Properly handle the evaluation cache during SOCs (#838)
  • Apply dual regularization in the loop, not just once at the beginning (#841, #855)
  • Set the logger before AMPL model creation (#848)
  • Refresh the parameterization with the new barrier parameter in InteriorPointMethod::initialize_feasibility_problem (#859)
  • Attach progress measures and predicted reductions to OptimizationProblem and subclasses (#860)
  • Reset the trial evaluations when the line search fails (#861)
  • Dual inertia correction should be applied to all constraints (#872)
  • Fixed complementarity error for one-sided constraints (#875)
  • Detect unboundedness only when primal feasibility is achieved (#873)
  • Fixed quasi-Newton update guards (#880)
  • When accepting tiny steps, make sure the constraints and Jacobian can be evaluated (#884)
  • big one: Forgot to scale step length with fraction-to-boundary step length when calling this->constraint_relaxation_strategy->is_iterate_acceptable (#886, #890)
  • Fixed Subproblem::assemble_augmented_rhs (#888)
  • Fixed switch back to optimality phase (#898)
  • When exiting restoration, reset the constraint multipliers to 0 (#900)
  • Several IPM bug fixes (#902, #911)
  • Relax linear constraints as well in l1RelaxedProblem (#906)

CI

  • Taylor Julia tests to problem nature (bound-constrained, equality-constrained, inequality-constrained, LP, NLP) (#764)
  • Use a shared cache for all the Julia CI jobs (#827)
  • Added bfpc instance to Julia tests (#843)
  • Parameterized Julia equality-constrained tests with linear solver (#820)
  • Self-hosted runners at ZIB (#844, #849, #868, #870)
  • Run all tests with equality constrained problems with HSL solvers (#846)
  • Ensure that the new options are always documented (#867)
  • Test unopy + CoinHSL via dynamic loading (#871)
  • Parameterized tests for the linear solvers (#878)
  • Compile Uno with SPRAL (#588, #892)
  • Workflow for Mittelmann benchmark (#893, #897, #896)
  • Test the ipopt preset on infeasible instances (#899)
  • Run the MOI tests with various presets (#822)

Refactoring

  • Moved Direction to subproblem solver (#823)
  • Moved Subproblem and SubproblemSolver to InequalityHandlingMethod (#828)
  • Split Filter::acceptable_wrt_infeasibility_upper_bound and Filter::filter_acceptable (#834)
  • Use more views (#882, #885, #887)
  • Moved switch to feasibility problem to globalization mechanism (#891)