TAO

Documentation: Changes


We will continually add new features and enhance functionality in upcoming releases of  TAO.  Small changes in usage and calling sequences of TAO routines will continue to occur.  Although keeping one's code accordingly up-to-date can be annoying, all TAO users will be rewarded in the long run with a cleaner, better designed, and easier-to-use interface.

New Features and changes in TAO 2.0

Released: Jan 30, 2012


Elimination of the TaoApplication Object

The largest change to the TAO programming interface is the elimination of the TaoApplication data structure. In previous versions of TAO, this structure was created by the application programmer for application-specific data and routines. In order to more closely follow PETSc design principles, this information is now directly attached to a TaoSolver object instead.

New Algorithms

TAO 2.0 has a new algorithm for solving derivative-free nonlinear least squares problems, POUNDerS, that can efficiently solve parameter optimization problems when no derivatives are available and function evaluations are expensive. TAO 2.0 also provides a new algorithm for the solution of optimization problems with partial differential equation (PDE) constraints based on a linearly constrained augmented Lagrangian (LCL) method. More information on PDE-constrained optimization and LCL can be found in the TAO Users Manual

TaoLineSearch Object

TAO 2.0 promotes the line search to a full object. Any of the available TAO line search algorithms (Armijo, More-Thuente, GPCG, and unit) can now be selected regardless of the overlying TAO algorithm. Users can also create new line search algorithms that may be more suitable for their applications. More information is available in Section 5.4 of the TAO Users Manual

Better Adherence to PETSc Style

TAO 2.0 features a tighter association with PETSc standards and practices. All TAO constructs now follow PETSc conventions and are written in C. There is no longer a separate abstract class for vectors, matrices, and linear solvers. TAO now uses these PETSc objects directly. We believe these changes make TAO applications much easier to create and maintain for users already familiar with PETSc programming. These changes also allow TAO to relax some of the previously imposed requirements on the PETSc configuration. TAO now works with PETSc configured with single-precision arithmetic (and quad-precision arithmetic when using GNU compilers) and no longer requires a C++ compiler. However, TAO is not compatible with PETSc installations using complex data types.

New Features and Changes in TAO 1.10.1

Released: July 8, 2010

General:

  • Updated to operate with PETSc version 3.1.

New Features and Changes in TAO 1.10

Released: Aug 13, 2009

General:

  • Updated to operate with PETSc version 3.0.0.

New Features and Changes in TAO 1.9

Released: Aug 29, 2007

General:

  • Updated to operate with PETSc version 2.3.3.
  • Unconstrained algorithms have been updated

Specific:

  • Nelder-Mead derivate free optimization algorithm added (tao_nm)
  • Conjugate Gradient methods have been aggregated. Use method tao_cg for all conjugate gradient methods, and set type with -tao_cg_type <type>, where <type> is one of
    • pr -- Polak-Ribiere
    • prp -- Polak-Ribiere Plus
    • fr -- Fletcher-Reeves
    • hs -- Hestenes-Stiefel
    • dy -- Dai-Yuan
  • LMVM, Newton Trust Region, and Newton Line Search algorithms have been reworked. Many new options are available for LMVM scaling and Newton parameters.
  • A derivative checker has been added to TAO to help users test the accuracy of their hand-coded gradient and Hessian evaluation routines against the values obtained from finite difference approximations. This can be run by using the TAO method tao_fd_test together with the options -tao_test_gradient or -tao_test_hessian.

New Features and Changes in TAO 1.8.2

Released: Sept 13, 2006

General:

  • Updated to operate with PETSc version 2.3.2.

New Features and Changes in TAO 1.8.1

Released: Mar 3, 2006

General:

  • Updated to operate with PETSc version 2.3.1.

New Features and Changes in TAO 1.8

Released: May 13, 2005

General:

  • Updated to operate with PETSc version 2.3.0.

New Features and Changes in TAO 1.7

Released: Aug 23, 2004

General:

  • Updated to operate with PETSc version 2.2.1.

New Features and Changes in TAO 1.6

Released: March 16, 2004

General:

Specific:

  • TaoPetscApplicationCreate() changed to TaoApplicationCreate().

New Features and Changes in TAO 1.5

Released: Jan 31, 2003

General:

  • New support for mesh-based applications includes mesh sequencing, easier matrix assembly, ADIC support for gradient computations, and finite differences with coloring for Hessian computations. 
  • Updated to operate with PETSc version 2.1.4.
  • New semismooth method and reduced space method for nonlinear complementarity applications.
  • Use of the TAO solvers with Global Arrays.
  • A SIDL interface and adherence to the Common Component Architecture specification.

Specific:

  • TaoSetPetscFunctionGradient() changes to TaoAppSetObjectiveandGradientRoutine()
  • The gradient vector does not have to be provided to the application object.
  • The variable vector must be given to the application in a separate routine: TaoAppSetVariableVec().
  • TaoSetPetscHessian() changed to TaoAppSetHessianRoutine().
  • The Hessian matrix must be supplied in a separate routine: TaoAppSetHessianMat().
  • TaoSolveApplication() should be used instead of TaoSolve().
  • TaoSetOptions() should be used instead of TaoSetFromOptions().
  • TaoPetscApplicationCreate() changed to TaoApplicationCreate().

New Features and Changes in TAO 1.4

Released: April 23, 2002

General:

  • TAO's interface to PETSc uses version 2.1.2.
  • User Manual available in PDF format.
  • Some vector and matrix methods changes spellings so that all methods begin with a capital letter.
  • Add component model that adheres to the specification of the Common Component Architecture.

New Features and Changes in TAO 1.3

Released: December 21, 2001

General:

  • We introduced a new object that represents the optimization application.  This object must contain relevant objective function, constraint, and derivation information.   Users may provide this application information using one of several interfaces.    In particular, users may write these routines using PETSc or ESI data structures instead of the TAO data structures.
  • TAO now supports ESI data objects.
  • TAO now provides limited interface capabilities with external packages APPS and OOQP.
  • New nonlinear least squares solvers have been implemented.
  • Several vector and matrix methods have been renamed.
  • TAO's interface to PETSc uses version 2.1.1.

New Features and Changes in TAO 1.2

Released: June 8, 2001

General:

  • TAO now uses C++.  Although the library still provides an interface familiar to C programmers and stubs that can be used by Fortran programmers, the TAO libraries and application programs must be compiled using a C++ compiler (e.g., make BOPT=g_c++ all will compile a debugging version of TAO, while make BOPT=O_c++ will compile an optimized version.) 
  • TAO's interface to PETSc uses version 2.1.0.

TaoVec (Vector Class):

  • The vector class used within TAO is now called TaoVec.  We implement this object using C++ and include a set of methods used by the solvers.   The TaoVec class does not contain any data.  Instead, classes derived from the TaoVec object contain the data.  One vector class derived from this base class uses the PETSc Vec object to represent a vector.  The TaoWrapPetscVec() routine creates a TaoVec object using a PETSc vector. 

TaoMat (Linear Operator Class):

  • The TaoMat class describes matrices and linear operators.  We implement this object using C++ and include a set of methods used by the solvers.   The TaoMat class does not contain any data.  Instead, classes derived from the TaoMat object contain the data.  One matrix class derived from this base class uses the PETSc Mat object to represent a matrix.  The TaoWrapPetscMat() routine creates a TaoMat object using a PETSc matrix. 

TaoIndexSet (Indices Class):

  • The TaoIndexSet class identifies a set of elements of a vector or rows of a matrix.   We implement this object using C++ and include a set of methods used by the solvers.   The TaoIndexSet class does not contain any data.  Instead, classes derived from the TaoIndexSet object contain the data.  One index set class derived from this base class uses the PETSc IS object to represent an index set.  The TapWrapIS() routine creates a TaoIndexSet object using a PETSc index set. 

TaoLinearSolver (Linear Solver Class):

  • We use the TaoLinearSolver class to describe linear solvers.  We implement this object using C++ and include a set of methods used by the solvers.  The TaoLinearSolver class does not contain particular algorithms or implementations.  Instead, classes derived from the TaoLinearSolver contain contain the algorithm and solve the linear system.  One linear solver class derived from this base class uses the PETSc SLES object to solve linear systems.  The TaoWrapSLES() routine creates a TaoLinearSolver object using SLES.

TAO Solvers:

  • All TAO routines now use pointers to TaoVec, TaoMat, TaoIndexSet, and TaoLinearSolver objects instead of their PETSc equivalents.
  • The TaoCreate() routine now has five arguments.  These arguments are vector of variables, a solution method, an options prefix, an MPI communicator, and a pointer to the new solver.  The second and third arguments are optional and can be set to 0.
  • The TaoSolve() routine now contains a second argument that indicates whether a solution has been found.
  • The TaoSetFunction() routine requires a vector that will be used to represent the gradient of the objective function and a location to store the objective value.   The variable vector is no longer an input argument since it has been moved to the TaoCreate() routine.
  • The routine TaoSetGradient() no longer exists; instead use TaoSetFunctionGradient().
  • The TaoSetFunctionGradient() routine also requires a location to store the objective value and no longer requires a variable vector.
  • The TaoSetHessian() routine no longer asks for a preconditioning matrix.  The preconditioning matrix and related flags can be set using the routine TaoSetPreconditioningMatrix().
  • The TaoView() routine no longer asks for a Viewer object.
  • The TaoGetLinearSolver() routine gets a pointer to the linear solver used by the TAO solver.  From this pointer, options can be set and underlying data, such as a SLES object. can be accessed.
  • The TaoGetIterationData() routine obtains the iteration number, objective value, and residual norms for the current solution.  This routine replaces routines that returned each piece of information separately.

 Fortran Interface:

  • Fortran users should declare TAO objects as follows: vectors as TaoVecF, matrices as TaoMatF, index sets as TaoIndexSetF, and linear solvers as TaoLinearSolverF.