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
- Updated to operate with PETSc version 3.1.
New Features and Changes in TAO 1.10
Released: Aug 13, 2009
- Updated to operate with PETSc version 3.0.0.
New Features and Changes in TAO 1.9
Released: Aug 29, 2007
- Updated to operate with PETSc version 2.3.3.
- Unconstrained algorithms have been updated
- 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
<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
- 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
New Features and Changes in TAO 1.8.2
Released: Sept 13, 2006
- Updated to operate with PETSc version 2.3.2.
New Features and Changes in TAO 1.8.1
Released: Mar 3, 2006
- Updated to operate with PETSc version 2.3.1.
New Features and Changes in TAO 1.8
Released: May 13, 2005
- Updated to operate with PETSc version 2.3.0.
New Features and Changes in TAO 1.7
Released: Aug 23, 2004
- Updated to operate with PETSc version 2.2.1.
New Features and Changes in TAO 1.6
Released: March 16, 2004
- TaoPetscApplicationCreate() changed to
New Features and Changes in TAO 1.5
Released: Jan 31, 2003
- New support for mesh-based applications includes mesh
sequencing, easier matrix assembly, ADIC support for gradient
computations, and finite differences with coloring for Hessian
- 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.
- TaoSetPetscFunctionGradient() changes to
- The gradient vector does not have to be provided to the
- The variable vector must be given to the application in
a separate routine: TaoAppSetVariableVec().
- TaoSetPetscHessian() changed to
- The Hessian matrix must be supplied in a separate
- TaoSolveApplication() should be used instead of
- TaoSetOptions() should be used instead of
- TaoPetscApplicationCreate() changed to
New Features and Changes in TAO 1.4
Released: April 23, 2002
- 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
- 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
- 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
- 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
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
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
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.
- All TAO routines now use pointers to TaoVec,
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
- 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()
- 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
- 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 users should declare TAO objects as follows:
vectors as TaoVecF, matrices as TaoMatF, index sets as TaoIndexSetF, and linear solvers as TaoLinearSolverF.