46. Adding a Solver to TAO

New optimization solvers can be added to TAO. TAO provides tools for facilitate the implementation of a solver. The advantages of implementing a solver using TAO are several.

    1. TAO includes other optimization solvers with an identical interface, so application problems may conveniently switch solvers to compare their effectiveness.


    2. TAO provides support for function evaluations and derivative information. It allows for the direct evaluation of this information by the application developer, and contains limited support for finite difference, and allows the uses of matrix-free methods. The solvers can obtain this function and derivative information through a simple interface while the details of its computation are handled within the toolkit.


    3. TAO provides line searches, convergence tests, monitoring routines, and other tools which are helpful within an optimization algorithm. The availability of these tools means that the developers of the optimization solver do not have to write these utilities.


    4. TAO offers vectors, matrices, index sets, and linear solvers that can be used by the solver. These objects are standard mathematical constructions that have many different implementations. The objects may be distributed over multiple processors, restricted to a single processor, have a dense representation, use a sparse data structure, or vary in many other ways. TAO solvers do not need to know how these objects are represented or how the operations defined on them have been implemented. Instead, the solvers apply these operations through an abstract interface that leaves the details to TAO and external libraries. This abstraction allows solvers to work seamlessly with a variety of data structures while allowing application developers to select data structures tailored for their purposes.


    5. TAO supports an interface to PETSc and allows the integration of other libraries as well. When used with PETSc, TAO provides the user a convenient method for setting options at runtime, performance profiling, and debugging.