Artelys Knitro
Artelys Knitro is a commercial software package for solving large scale nonlinear mathematical optimization problems.
Designed by |
|
---|---|
Developer | Artelys |
First appeared | 2001 |
Stable release | 12.3
/ December 9, 2020 |
OS | Cross-platform |
License | Proprietary |
Website | Artelys Knitro |
KNITRO – (the original solver name) short for "Nonlinear Interior point Trust Region Optimization" (the "K" is silent) – was co-created by Richard Waltz, Jorge Nocedal, Todd Plantenga and Richard Byrd. It was first introduced in 2001, as a derivative of academic research at Northwestern University (through Ziena Optimization LLC), and has since been continually improved by developers at Artelys.
Optimization problems must be presented to Knitro in mathematical form, and should provide a way of computing function derivatives using sparse matrices (Knitro can compute derivatives approximation but in most cases providing the exact derivatives is beneficial). An often easier approach is to develop the optimization problem in an algebraic modeling language. The modeling environment computes function derivatives, and Knitro is called as a "solver" from within the environment.
Problem classes solved by Artelys Knitro
Knitro is specialized for nonlinear optimization but also solves a wide range of optimization problems:
- General nonlinear problems (NLP), including non-convex
- Systems of nonlinear equations
- Linear problems (LP)
- Quadratic problems (QP/QCQP/SOCP), both convex and non-convex
- Least squares problems / regression, both linear and nonlinear
- Mathematical programs with complementarity constraints (MPCC/MPEC)
- Mixed-integer nonlinear problems (MIP/MINLP)
- Derivative-free optimization problems (DFO)
Algorithms
Artelys Knitro contains a wide range of optimization algorithms.
NonLinear Programming (NLP) solver
Knitro offers four different optimization algorithms for solving optimization problems.[1] Two algorithms are of the interior point type, and two are of the active set type. These algorithms are known to have fundamentally different characteristics; for example, interior point methods follow a path through the interior of the feasible region while active set methods tend to stay at the boundaries. Knitro provides both types of algorithm for greater flexibility in solving problems, and allows crossover during the solution process from one algorithm to another. The code also provides a multistart option for promoting the computation of the global minimum.
- Interior/Direct algorithm
- Interior/Conjugate Gradient algorithm
- Active Set algorithm
- Sequential Quadratic Programming (SQP) algorithm
Mixed-Integer NonLinear Programming (MINLP) solver
Knitro provides tools for solving optimization models (both linear and nonlinear) with binary or integer variables. The Knitro mixed integer programming (MIP) code offers three algorithms for mixed-integer nonlinear programming (MINLP):[2]
- Nonlinear Branch and Bound
- Quesada Grossman algorithm
- Mixed-Integer Sequential Quadratic Programming (MISQP)
Features
Artelys Knitro supports a variety of programming and modeling languages including.[3]
- Object-oriented interfaces for C++, C#, Java and Python
- Matrix-oriented interfaces for Julia, C, Fortran, MATLAB, and R
- Links to modeling languages: AIMMS, AMPL, GAMS, and MPL
- Links to Excel through Frontline Solvers
Artelys Knitro also includes a number of key features:
- A large set of well-documented user options[4] and automatic tuner
- (Parallel) multi-start for global optimization
- Derivatives approximation and checker
- Internal presolver
Supported platforms
Artelys Knitro is available on the following platforms:
- Windows 64
- Linux 64
- MacOS 64
- ARM processors for embedded optimization[5]
References
- Nocedal, Jorge; Wright, Stephen J. (2006). Numerical Optimization (2nd ed.). Springer Publishing. ISBN 0-387-30303-0.
- Byrd, Richard H.; Nocedal, Jorge; Waltz, Richard A. (2006). "Knitro: An Integrated Package for Nonlinear Optimization" (PDF). Archived from the original (PDF) on October 12, 2016. Retrieved November 17, 2017. Cite journal requires
|journal=
(help)