Knitro#

Artelys Knitro is an especially powerful nonlinear solver, offering a range of state-of-the-art algorithms and options for working with both smooth and discrete objective and constraint functions in continuous and integer variables. It is designed for local optimization of large-scale problems with up to hundreds of thousands of variables.

Product Page | Features | Options | Changes

Download Knitro | Start a Knitro Trial Now!

How to use it#

How to install using amplpy:

# Install Python API for AMPL:
$ python -m pip install amplpy --upgrade

# Install AMPL & solver modules:
$ python -m amplpy.modules install knitro # install Knitro

# Activate your license (e.g., free ampl.com/ce or ampl.com/academia licenses):
$ python -m amplpy.modules activate <your-license-uuid>

How to use:

from amplpy import AMPL
ampl = AMPL()
...
ampl.solve(solver="knitro", knitro_options="option1=value1 option2=value2")

Learn more about what we have to offer to implement and deploy Optimization in Python.

AMPL APIs give access to AMPL from a programming language:

ampl: option solver knitro; # change the solver
ampl: option knitro_options 'option1=value1 option2=value2'; # specify options
ampl: solve; # solve the problem

Features#

Algorithms#

Continuous models: interior point, active set, SQP

nlp_algorithm: 0 automatic (default), 1 interior point (direct), 2 interior point (CG), 3 active set (SLQP), 4 SQP, 5 several algorithms, 6 augmented Lagrangian. Knitro returns local optima.

Mixed-integer models

mip_method: 0 automatic, 1 branch-and-bound, 3 mixed-integer SQP. On nonconvex models the result is a local, not a global, optimum.

Multistart

ms_enable=1 solves from several starting points and keeps the best local optimum; ms_maxsolves sets how many. For MIP, mip_multistart=1.

Threads and time

numthreads (parallel features), maxtime (seconds).

Modeling with MP expressions#

MP expressions: logic and counting (MP2NL)

Natively, Knitro solves smooth nonlinear models with continuous and integer variables, and complementarity (complements). MP’s expressions (==>, or, atmost, count, alldiff, piecewise-linear terms, …) are not part of its native model type: through MP2NL, MP reformulates them into it first.

The Knitro driver includes the MP2NL bridge: set mp2nl=1 in knitro_options. MP’s own options (cvt:..., sol:chk:...) then go into the AMPL option mp_options.

MP reformulates logic with binary variables, which Knitro handles as integer variables.

ampl.solve(solver="knitro", knitro_options="mp2nl=1", mp_options="cvt:bigM=1e5")
ampl: option solver knitro;
ampl: option knitro_options 'mp2nl=1';
ampl: option mp_options 'cvt:bigM=1e5';
ampl: solve;

More: Meta-driver MP2NL.

Options#

Full list of solver options:

Retrieving solutions#

The outcome of the last optimization is stored in the AMPL parameter solve_result_num and the relative message in solve_result.

display solve_result_num, solve_result;

Knitro solve result codes:

Solve result table (AMPL default ranges)
          0- 99 solved: optimal for an optimization problem, feasible for a satisfaction problem
        100-199 solved? solution candidate returned but error likely
        200-299 infeasible
        300-399 unbounded
        400-499 limit
        500-999 failure, no solution returned

Changelog#