Blurb::
Approximate control variate (ACV) sampling methods for UQ
Description::
An adaptive sampling method that utilizes multifidelity
relationships in order to improve efficiency through variance reduction.
It employs an ensemble model to manage an unordered set of
lower-fidelity approximations to a single truth model.

Compared to multifidelity Monte Carlo (MFMC), ACV relaxes the nested
sampling of a recursive emulator, instead targeting the truth model's
variance with each control variate pair.  While the ensemble of
control variates appears identical to MFMC:


.. math::  \hat{Q}_{HF}^{CV} = \hat{Q}_{HF}^{MC} - \sum_{i=1}^M \beta_i (\hat{Q}_{LF_i}^{MC} - \mathbb{E}[Q_{LF_i}]) 

the sample patterns used for the constituent estimators differ as
depicted in Gorodetsky et al. (2020), Figure 2.  Two ACV variants
are currently implemented, ACV-MF and ACV-IS, with ACV-KL to follow.

*Default Behavior*

The ``approximate_control_variate`` method employs Monte Carlo sample
sets by default, but this default can be overridden to use Latin
hypercube sample sets using ``sample_type`` ``lhs``.

*Expected Output*

The ``approximate_control_variate`` method reports estimates of the
first four moments and a summary of the evaluations performed for each
model fidelity and discretization level.  The method does not support
any level mappings (response, probability, reliability, generalized
reliability) at this time.

*Expected HDF5 Output*

If Dakota was built with HDF5 support and run with the
:dakkw:`environment-results_output-hdf5` keyword, this method
writes the following results to HDF5:


- :ref:`hdf5_results-sampling_moments` (moments only, not confidence intervals)


In addition, the execution group has the attribute ``equiv_hf_evals``, which
records the equivalent number of high-fidelity evaluations.

*Usage Tips*

The ``approximate_control_variate`` method must be used in combination
with an ensemble model specification that defines either a
model form sequence or a discretization level sequence.  For a model
form sequence, each model must provide a scalar
``solution_level_cost``.  For a discretization level sequence,
``solution_level_control`` must identify the variable string descriptor
that controls the resolution levels and the associated array of
relative costs must be provided using ``solution_level_cost``.
Topics::

Examples::
The following method block:

.. code-block::

    method,
     model_pointer = 'NONHIER'
     approximate_control_variate
       acv_mf nip
       pilot_samples = 20 seed = 1237
       max_iterations = 10
       convergence_tolerance = .001

specifies ACV-MF using the nonlinear interior point (NIP) solver in
combination with the model identified by the NONHIER pointer.

This NONHIER model specification provides a one-dimensional sequence,
here defined by a single truth model and a set of unordered approximation
models, each with a single (or default) discretization level:

.. code-block::

    model,
     id_model = 'NONHIER'
     surrogate ensemble
       truth_model = 'HF'
       unordered_model_fidelities = 'LF1' 'LF2'
    
    model,
     id_model = 'LF1'
     interface_pointer = 'LF1_INT'
     simulation
       solution_level_cost = 1
    
    model,
     id_model = 'LF2'
     interface_pointer = 'LF2_INT'
     simulation
       solution_level_cost = 16
    
    model,
     id_model = 'HF'
     interface_pointer = 'HF_INT'
     simulation
       solution_level_cost = 256.


Refer to ``dakota/test/dakota_uq_diffusion_acv3_cost4``.in and
``dakota/test/dakota_uq_tunable_acv``.in in the source distribution
for this case as well as additional examples.

Refer to [Gorodetsky et al., JCP (408), 2020] for more
detailed algorithm descriptions, theoretical considerations, and
a helpful sample set diagram.
Theory::

Faq::

See_Also::
