                      ****************************
                      *                          *
                      * Using KNITRO with CUTEst *
                      *                          *
                      ****************************

              ( Last modified on 10 May 2023 at 23:25:00 )

WHAT IS KNITRO?
-------------------

KNITRO is a code for solving large-scale nonlinear programming
problems of the form

  Min         f(x)
  Subject to       
              h_i(x) =  0,                 i = 1,...,num_equal
              cl(j) <= g_j(x) <=  cu(j),   j = num_equal+1,...,m
              bl(k) <=   x(k) <=  bu(k),   k = 1,...,n

The code implements an interior point algorithm with trust 
region techniques. It uses first and second derivatives of the 
function and constraints

HOW DO I GET KNITRO?
--------------------

See 

  https://www.artelys.com/solvers/knitro/


USING KNITRO WITH CUTEst
----------------------------

Create an environment variable KNITRODIR pointing to the directory
where your KNITRO package is stored. You should have the
subdirectories and files

    $KNITRODIR/include/knitro.h
    $KNITRODIR/lib/libknitro.so

Copy $KNITRODIR/include/knitro.h to the $CUTEST/include directory;
the latest version we know about will already be in $CUTEST/include.

The file knitro.opt should be present in the directory from which you 
launch CUTEst. Alternatively, there can be a symbolic link pointing to it.

KNITRO is not available in single precision.

USING THE KNITRO INTERFACE TOOL
-----------------------------------

Suppose you wish to solve the problem written in SIF format contained
in the file probname.SIF.

The KNITRO interface tools require two input files:

    probname.SIF   specifies the problem in SIF format
    knitro.opt      sets values for Knitro parameters

The opt file should be present in the current directory, in
$CUTEST/src/knitro or there should be a symbolic link pointing to it. 
The file is self-documented so the purpose of each parameter should be clear 
from the file. Please refer to the KNITRO documentation for more details.

To run with CUTEst, use the runcutest command with the -p knitro option.
See the man page for runcutest for more details of other options.

THE KNITRO SPECIFICATIONS FILE
----------------------------------

The file knitro.opt may be used to set various Knitro parameters.
Refer to knitro.opt in this directory for a description of all
parameters.

REFERENCES
----------

  [1] R. H. Byrd, J. Nocedal, and R. A. Waltz, 
  "KNITRO: An Integrated Package for Nonlinear Optimization" in 
  Large-Scale Nonlinear Optimization, G. di Pillo and M. Roma, eds, 
  pp. 35-59 (2006), Springer-Verlag.

  [2] R.H. Byrd, J.C. Gilbert, and J. Nocedal, "A trust region
  method based on interior point techniques for nonlinear 
  programming", Technical Report OTC 96/02, Optimization
  Technology Center, Northwestern University (1996).
    Note: this paper provides a global convergence analysis

  [3] R.H. Byrd, M.E. Hribar, and J. Nocedal, "An interior point 
  algorithm for large scale nonlinear programming", SIAM Journal 
  on Optimization, 9,4, (1999) pp.877-900
    Note: this paper gives a description of the algorithm
          implemented in KNITRO 2.0. Some changes have occurred since
          then; see ref [4].

  [4] R. H. Byrd, G. Liu, and J. Nocedal, "On the local behavior 
  of an interior point method nonlinear programming", Numerical
  analysis, D. F. Griffiths, D. J. Higham and G. A. Watson eds.,
  Longman, 1997.
    Note: this paper studies strategies for ensuring a fast local
          rate of convergence. These strategies have not yet been
          implemented in the current version of KNITRO 2.0.

  [5] G. Liu, "Design Issues in Algorithms for Large Scale 
  Nonlinear Programming", PhD thesis, Department of Industrial 
  Engineering and Management Science, Northwestern University, 
  Evanston, Illinois, USA, 1999
    Note: this paper describes a number of enhancements that
          are implemented in the current version of the code 
