Release notes

What’s new in Knitro 16.0 ?

  • Knitro 16.0 introduces a new Nonlinear Modeler. This tool allows describing expressions symbolically as expression trees. Once the expression is described, Knitro evaluates it and computes all required derivatives automatically using automatic differentiation (AD). The Nonlinear Modeler is currently available through the C and Python APIs only. Examples using the Nonlinear Modeler are provided in the C and Python examples directory. The Nonlinear Modeler can also be enabled through the Knitro-AMPL interface by setting the option “use_asl=0”. See Nonlinear Modeler for more information.

  • Knitro 16.0 has introduced a new Concurrent Solver feature that allows the user to run several Knitro solves in parallel using different algorithms or different tunings for a specific algorithm. Using the Concurrent Solver in Knitro can significantly improve the overall robustness of the solver, while also often solving faster. The Concurrent Solver is enabled through the new concurrent_solver option. The options concurrent_lpalg and concurrent_nlpalg can be used to specify which algorithms run concurrently. The option concurrent_maxsolves sets a limit on the number of concurrent solves, while concurrent_outlog controls logging output. See Concurrent Solver for more information. Note that the “multi-alg” feature from previous versions of Knitro has been deprecated, as this feature is now handled through the Concurrent Solver.

  • Knitro 16.0 introduces a new deterministic option. By default, almost all Knitro solves/features operate deterministically. However, there are some features such as the concurrent solver and some of the linear solver (linsolver) options that may run in a non-deterministic manner. The “deterministic” option can be used to enforce deterministic behavior, where possible, in these cases.

  • Knitro 16.0 introduces a new presolveop_implied_mpec option that automatically detects and transforms complementarity constraints formulated as quadratic constraints.

  • Knitro 16.0 introduces a new maxstepsize option that places a limit on the relative size of each step generated at each iteration when solving a nonlinear optimization problem (or solving an LP using the barrier algorithm). By default, there is no limit placed on the step size. Restricting the step size at each iteration typically results in the algorithm taking more iterations to converge. However, in some cases, it may be useful to prevent the algorithm from generating large steps that may cause problems. The option maxstepsize_maxit places an iteration limit on when the maxstepsize option restriction is applied.

  • Knitro 16.0 introduces a new feaserr_level option. This option specifies the problem form (application level or internal) used to compute the feasibility error used for the algorithm and termination. By default, the application level problem form is used to compute the feasibility error. If set to “internal”, then the internal, scaled presolved form of the problem is used to compute the feasibility error.

  • Knitro 16.0 introduces a new scale_strategy option that allows the user to enable various scaling strategies for the objective function, constraints, or variables. The “scale_vars” option used in previous versions of Knitro for variable scaling has been deprecated.

  • Knitro 16.0 introduces a new presolve_zero_tol option that specifies a tolerance for rounding linear coefficients to zero in the presolve.

  • Knitro 16.0 introduces a new mip_heuristic_fixpropagate option that can be used to enable a fix-and-propagate heuristic for the branch-and-bound solver.

  • Knitro 16.0 produces better default “out-of-the-box” performance on very large-scale models. Additionally, when using the MKLPARDISO linear solver (linsolver =6), the performance, compared to Knitro 15.1, should generally be faster.

  • Knitro 16.0 improves performance for the barrier crossover procedure (when bar_maxcrossit > 0).

  • Knitro 16.0 improves performance significantly on mixed-integer problems, through enhancements to the heuristics and presolve.

  • Knitro 16.0 changes the default value for the option presolve_tol to 1e-8.

  • Knitro 16.0 adds the Augmented Lagrangian solver as an option in the mip_node_nlpalg and mip_root_nlpalg options.

  • Knitro 16.0 changes and adds new options for the mip_heuristic_diving option.

  • Knitro 16.0 introduces the .knsol file format for reading/writing solution points. The API function KN_read_solution and KN_write_solution can be used to input/output solutions from Knitro. The newpoint option is now writing points with this file format.

  • Knitro 16.0 introduces the concept of read-only attributes for obtaining information about a solve. Generic API functions KN_get_int_attr/KN_get_double_attr/KN_get_longint_attr are replacing individual API functions that are now deprecated. The list of available attributes is in the documentation alongside the Knitro options list.

Bug Fixes in Knitro 16.0.0

  • Fixed memory leak when using the Apple Accelerate linear solver (linsolver =9) on macOS.

  • Fixed bug that could cause negative times reported on Linux systems.

  • Fixed bug that could cause the Augmented Lagrangian algorithm not to terminate in rare cases.

  • Fixed bug that caused issues when using the multi-start procedure or the Knitro-Tuner on a least-squares model.