.. _topic-package_optpp:

Package: OPT++
==============

The OPT++ library :cite:p:`MeOlHoWi07` contains primarily
gradient-based nonlinear programming optimizers for unconstrained,
bound-constrained, and nonlinearly constrained minimization:
Polak-Ribiere conjugate gradient (Dakota's ``optpp_cg`` method),
quasi-Newton (Dakota's ``optpp_q_newton`` method), finite difference
Newton (Dakota's ``optpp_fd_newton`` method), and full Newton (Dakota's
``optpp_newton`` method).

The conjugate gradient method is strictly
unconstrained, and each of the Newton-based methods are automatically
bound to the appropriate OPT++ algorithm based on the user constraint
specification (unconstrained, bound-constrained, or
generally-constrained). In the generally-constrained case, the Newton
methods use a nonlinear interior-point approach to manage the
constraints.
The library also contains a direct search algorithm, PDS
(parallel direct search, Dakota's ``optpp_pds`` method), which supports
bound constraints.

*Controls*
 -# ``max_iterations``
 -# ``max_function_evaluations``
 -# ``convergence_tolerance``
 -# ``output``
 -# ``speculative``



*Concurrency*

OPT++'s gradient-based methods are not parallel algorithms and
cannot directly take advantage of concurrent function
evaluations. However, if ``numerical_gradients`` with ``method_source``
``dakota`` is specified, a parallel Dakota configuration can utilize
concurrent evaluations for the finite difference gradient
computations.

*Constraints*

Linear constraint specifications are supported by each of the
Newton methods ( ``optpp_newton``, ``optpp_q_newton``, ``optpp_fd_newton``,
and ``optpp_g_newton``)

``optpp_cg`` must be unconstrained

``optpp_pds`` can be, at most, bound-constrained.