.. _responses-mixed_gradients-method_source:

"""""""""""""
method_source
"""""""""""""


Specify which finite difference routine is used


.. toctree::
   :hidden:
   :maxdepth: 1



**Specification**

- *Alias:* None

- *Arguments:* None

- *Default:* dakota


**Description**


The ``method_source`` setting specifies the source of the finite
differencing routine that will be used to compute the numerical
gradients:

- ``dakota`` (default)
- ``vendor``


``dakota`` denotes Dakota's internal finite differencing
algorithm and ``vendor`` denotes the finite differencing algorithm
supplied by the iterator package in use (DOT, CONMIN, NPSOL, NL2SOL, NLSSOL,
ROL, and OPT++ each have their own internal finite differencing
routines). The ``dakota`` routine is the default since it can execute
in parallel and exploit the concurrency in finite difference
evaluations (see the discussion on :ref:`exploiting parallelism <parallel:overview:cat>`).

However, the ``vendor`` setting can be desirable in some cases since
certain libraries will modify their algorithm when the finite
differencing is performed internally. Since the selection of the
``dakota`` routine hides the use of finite differencing from the
optimizers (the optimizers are configured to accept user-supplied
gradients, which some algorithms assume to be of analytic accuracy),
the potential exists for the ``vendor`` setting to trigger the use of
an algorithm more optimized for the higher expense and/or lower
accuracy of finite-differencing. For example, NPSOL uses gradients in
its line search when in user-supplied gradient mode (since it assumes
they are inexpensive), but uses a value-based line search procedure
when internally finite differencing. The use of a value-based line
search will often reduce total expense in serial operations. However,
in parallel operations, the use of gradients in the NPSOL line search
(user-supplied gradient mode) provides excellent load balancing
without need to resort to speculative optimization approaches.

In
summary, then, the ``dakota`` routine is preferred for parallel
optimization, and the ``vendor`` routine may be preferred for serial
optimization in special cases.


