https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
AdaptiveImportanceSampler Class Reference

A class used to perform Adaptive Importance Sampling using a Markov Chain Monte Carlo algorithm. More...

#include <AdaptiveImportanceSampler.h>

Inheritance diagram for AdaptiveImportanceSampler:
[legend]

Public Types

enum  SampleMode
 
typedef DataFileName DataFileParameterType
 

Public Member Functions

 AdaptiveImportanceSampler (const InputParameters &parameters)
 
const std::vector< Real > & getInitialValues () const
 
const int & getNumSamplesTrain () const
 
const bool & getUseAbsoluteValue () const
 
const Real & getOutputLimit () const
 
const std::vector< Real > & getImportanceVectorMean () const
 
const std::vector< Real > & getImportanceVectorStd () const
 
const std::vector< const Distribution * > & getDistributionNames () const
 
const Real & getStdFactor () const
 
virtual bool isAdaptiveSamplingCompleted () const override
 Returns true if the adaptive sampling is completed.
 
std::vector< Real > getSampleRow (dof_id_type row_index) const
 
Real getSample (dof_id_type row_index, dof_id_type col_index) const
 
dof_id_type getNumberOfRows () const
 
dof_id_type getNumberOfCols () const
 
dof_id_type getNumberOfLocalRows () const
 
const LocalRankConfig & getRankConfig (bool batch_mode) const
 
virtual bool enabled () const
 
std::shared_ptr< MooseObject > getSharedPtr ()
 
std::shared_ptr< const MooseObject > getSharedPtr () const
 
bool isKokkosObject () const
 
MooseApp & getMooseApp () const
 
const std::string & type () const
 
const std::string & name () const
 
std::string typeAndName () const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
MooseObjectName uniqueName () const
 
const InputParameters & parameters () const
 
const hit::Node * getHitNode () const
 
bool hasBase () const
 
const std::string & getBase () const
 
const T & getParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const T * queryParam (const std::string &name) const
 
const T & getRenamedParam (const std::string &old_name, const std::string &new_name) const
 
T getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &name) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
std::string messagePrefix (const bool hit_prefix=true) const
 
std::string errorPrefix (const std::string &) const
 
void mooseError (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecatedNoTrace (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
void callMooseError (std::string msg, const bool with_prefix, const hit::Node *node=nullptr, const bool show_trace=true) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
virtual void initialSetup ()
 
virtual void timestepSetup ()
 
virtual void jacobianSetup ()
 
virtual void residualSetup ()
 
virtual void subdomainSetup ()
 
virtual void customSetup (const ExecFlagType &)
 
const ExecFlagEnum & getExecuteOnEnum () const
 
PerfGraph & perfGraph ()
 
T & getSampler (const std::string &name)
 
Sampler & getSampler (const std::string &name)
 
T & getSamplerByName (const SamplerName &name)
 
Sampler & getSamplerByName (const SamplerName &name)
 
const VectorPostprocessorValue & getVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name) const
 
const VectorPostprocessorValue & getVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name, bool needs_broadcast) const
 
const ScatterVectorPostprocessorValue & getScatterVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValue & getScatterVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValue & getScatterVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValue & getScatterVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
bool hasVectorPostprocessor (const std::string &param_name, const std::string &vector_name) const
 
bool hasVectorPostprocessor (const std::string &param_name) const
 
bool hasVectorPostprocessorByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
bool hasVectorPostprocessorByName (const VectorPostprocessorName &name) const
 
const VectorPostprocessorName & getVectorPostprocessorName (const std::string &param_name) const
 
DenseMatrix< Real > getGlobalSamples ()
 
DenseMatrix< Real > getGlobalSamples ()
 
DenseMatrix< Real > getLocalSamples ()
 
DenseMatrix< Real > getLocalSamples ()
 
dof_id_type getLocalRowBegin () const
 
dof_id_type getLocalRowBegin () const
 
dof_id_type getLocalRowEnd () const
 
dof_id_type getLocalRowEnd () const
 
const Distribution & getDistribution (const std::string &name) const
 
const T & getDistribution (const std::string &name) const
 
const Distribution & getDistribution (const std::string &name) const
 
const T & getDistribution (const std::string &name) const
 
const Distribution & getDistributionByName (const DistributionName &name) const
 
const T & getDistributionByName (const std::string &name) const
 
const Distribution & getDistributionByName (const DistributionName &name) const
 
const T & getDistributionByName (const std::string &name) const
 
bool isVectorPostprocessorDistributed (const std::string &param_name) const
 
bool isVectorPostprocessorDistributed (const std::string &param_name) const
 
bool isVectorPostprocessorDistributedByName (const VectorPostprocessorName &name) const
 
bool isVectorPostprocessorDistributedByName (const VectorPostprocessorName &name) const
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 
bool isImplicit ()
 
Moose::StateArg determineState () const
 

Static Public Member Functions

static InputParameters validParams ()
 
static void callMooseError (MooseApp *const app, const InputParameters &params, std::string msg, const bool with_prefix, const hit::Node *node, const bool show_trace=true)
 

Public Attributes

 usingCombinedWarningSolutionWarnings
 
const ConsoleStream _console
 

Static Public Attributes

static const std::string type_param
 
static const std::string name_param
 
static const std::string unique_name_param
 
static const std::string app_param
 
static const std::string moose_base_param
 
static const std::string kokkos_object_param
 

Protected Member Functions

virtual void executeSetUp () override
 
virtual Real computeSample (dof_id_type row_index, dof_id_type col_index) const override
 Return the sample for the given row (the sample index) and column (the parameter index)
 
void setNumberOfRandomSeeds (std::size_t number)
 
Real getRand (std::size_t n, unsigned int index=0) const
 
unsigned int getRandl (std::size_t n, unsigned int lower, unsigned int upper, unsigned int index=0) const
 
virtual void computeSampleRow (dof_id_type i, std::vector< Real > &data) const
 
virtual void advanceGenerators (const dof_id_type count)
 
virtual void advanceGenerator (const unsigned int seed_index, const dof_id_type count)
 
void setAutoAdvanceGenerators (const bool state)
 
virtual void executeTearDown ()
 
virtual LocalRankConfig constructRankConfig (bool batch_mode) const
 
void flagInvalidSolutionInternal (const InvalidSolutionID invalid_solution_id) const
 
InvalidSolutionID registerInvalidSolutionInternal (const std::string &message, const bool warning) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level, const std::string &live_message, const bool print_dots=true) const
 
std::string timedSectionName (const std::string &section_name) const
 
virtual void addVectorPostprocessorDependencyHelper (const VectorPostprocessorName &) const
 
const ReporterContextBase & getReporterContextBaseByName (const ReporterName &reporter_name) const
 
const ReporterName & getReporterName (const std::string &param_name) const
 
virtual void addReporterDependencyHelper (const ReporterName &)
 
T & declareRestartableData (const std::string &data_name, Args &&... args)
 
ManagedValue< T > declareManagedRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
const T & getRestartableData (const std::string &data_name) const
 
T & declareRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
T & declareRecoverableData (const std::string &data_name, Args &&... args)
 
T & declareRestartableDataWithObjectName (const std::string &data_name, const std::string &object_name, Args &&... args)
 
T & declareRestartableDataWithObjectNameWithContext (const std::string &data_name, const std::string &object_name, void *context, Args &&... args)
 
std::string restartableName (const std::string &data_name) const
 
void setNumberOfRows (dof_id_type n_rows)
 
void setNumberOfRows (dof_id_type n_rows)
 
void setNumberOfCols (dof_id_type n_cols)
 
void setNumberOfCols (dof_id_type n_cols)
 
virtual void computeSampleMatrix (DenseMatrix< Real > &matrix)
 
virtual void computeSampleMatrix (DenseMatrix< Real > &matrix)
 
virtual void computeLocalSampleMatrix (DenseMatrix< Real > &matrix)
 
virtual void computeLocalSampleMatrix (DenseMatrix< Real > &matrix)
 
const T & getReporterValue (const std::string &param_name, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, ReporterMode mode, const std::size_t time_index=0)
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 

Protected Attributes

std::vector< const Distribution * > _distributions
 Storage for distribution objects to be utilized.
 
const std::vector< Real > & _proposal_std
 The proposal distribution standard deviations.
 
const std::vector< Real > & _initial_values
 Initial values values vector to start the importance sampler.
 
const Real & _output_limit
 The output limit, exceedance of which indicates failure.
 
const int & _num_samples_train
 Number of samples to train the importance sampler.
 
const int & _num_importance_sampling_steps
 Number of importance sampling steps (after the importance distribution has been trained)
 
const Real & _std_factor
 Factor to be multiplied to the standard deviation of the proposal distribution.
 
const bool & _use_absolute_value
 Absolute value of the model result. Use this when failure is defined as a non-exceedance rather than an exceedance.
 
const unsigned int & _num_random_seeds
 Initialize a certain number of random seeds. Change from the default only if you have to.
 
bool & _is_sampling_completed
 True if the sampling is completed.
 
const dof_id_type _min_procs_per_row
 
const dof_id_type _max_procs_per_row
 
const bool & _enabled
 
MooseApp & _app
 
Factory & _factory
 
ActionFactory & _action_factory
 
const std::string & _type
 
const std::string & _name
 
const InputParameters & _pars
 
const ExecFlagEnum & _execute_enum
 
const ExecFlagType & _current_execute_flag
 
MooseApp & _pg_moose_app
 
const std::string _prefix
 
MooseApp & _restartable_app
 
const std::string _restartable_system_name
 
const THREAD_ID _restartable_tid
 
const bool _restartable_read_only
 
const Parallel::Communicator & _communicator
 
const InputParameters & _ti_params
 
FEProblemBase & _ti_feproblem
 
bool _is_implicit
 
Real & _t
 
const Real & _t_old
 
int & _t_step
 
Real & _dt
 
Real & _dt_old
 
bool _is_transient
 

Private Member Functions

void execute ()
 
void checkReinitStatus () const
 
void advanceGeneratorsInternal (const dof_id_type count)
 
const VectorPostprocessorValue & getVectorPostprocessorByNameHelper (const VectorPostprocessorName &name, const std::string &vector_name, bool broadcast, std::size_t t_index) const
 
const VectorPostprocessorContext< VectorPostprocessorValue > & getVectorPostprocessorContextByNameHelper (const VectorPostprocessorName &name, const std::string &vector_name) const
 
bool vectorPostprocessorsAdded () const
 
bool reportersAdded () const
 
void possiblyCheckHasReporter (const ReporterName &reporter_name, const std::string &param_name="") const
 
RestartableDataValue & registerRestartableDataOnApp (std::unique_ptr< RestartableDataValue > data, THREAD_ID tid) const
 
void registerRestartableNameWithFilterOnApp (const std::string &name, Moose::RESTARTABLE_FILTER filter)
 
RestartableData< T > & declareRestartableDataHelper (const std::string &data_name, void *context, Args &&... args) const
 
void init ()
 
void init ()
 
void reinit ()
 
void reinit ()
 
void possiblyCheckHasVectorPostprocessor (const std::string &param_name, const std::string &vector_name) const
 
void possiblyCheckHasVectorPostprocessor (const std::string &param_name, const std::string &vector_name) const
 
void possiblyCheckHasVectorPostprocessorByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
void possiblyCheckHasVectorPostprocessorByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 

Static Private Member Functions

static const hit::Node * getHitNode (const InputParameters &params)
 
static std::string messagePrefix (const InputParameters &params, const bool hit_prefix)
 

Private Attributes

const std::vector< std::vector< Real > > & _inputs
 Storage for the inputs vector obtained from the reporter.
 
std::vector< Real > & _prev_value
 For proposing the next sample in the MCMC algorithm.
 
std::vector< Real > & _mean_sto
 Storage for means of input values for proposing the next sample.
 
std::vector< Real > & _std_sto
 Storage for standard deviations of input values for proposing the next sample.
 
std::vector< std::vector< Real > > & _inputs_sto
 Storage for previously accepted samples by the decision reporter system.
 
int & _retraining_steps
 Number of retraining performed.
 
const std::vector< bool > *const _gp_flag
 Indicate whether GP prediction is good or bad to influence next proposed sample.
 
std::vector< std::unique_ptr< MooseRandomStateless > > & _generators
 
dof_id_type & _n_local_rows
 
dof_id_type & _local_row_begin
 
dof_id_type & _local_row_end
 
dof_id_type & _n_rows
 
dof_id_type & _n_cols
 
std::size_t _n_seeds
 
bool _initialized
 
bool _needs_reinit
 
bool & _has_executed
 
const dof_id_type _limit_get_global_samples
 
const dof_id_type _limit_get_local_samples
 
const dof_id_type _limit_get_row
 
std::pair< LocalRankConfig, LocalRankConfig > & _rank_config
 
bool _auto_advance_generators
 
const ParallelParamObject & _parent
 
const MooseBase & _si_moose_base
 
const FEProblemBase * _si_problem
 
ExecFlagEnum _empty_execute_enum
 
const InputParameters & _dni_params
 
FEProblemBase & _dni_feproblem
 
const MooseObject *const _dni_moose_object_ptr
 
const InputParameters & _si_params
 
FEProblemBase & _si_feproblem
 
THREAD_ID _si_tid
 
const bool _broadcast_by_default
 
const MooseObject & _vpi_moose_object
 
const FEProblemBase & _vpi_feproblem
 
const THREAD_ID _vpi_tid
 
const InputParameters & _ri_params
 
FEProblemBase & _ri_fe_problem_base
 
const ReporterData & _ri_reporter_data
 
const MooseObject & _ri_moose_object
 
const RestartableDataMapName _metaname
 
std::string _restartable_name
 
const std::string _ti_name
 

Detailed Description

A class used to perform Adaptive Importance Sampling using a Markov Chain Monte Carlo algorithm.

Definition at line 18 of file AdaptiveImportanceSampler.h.

Constructor & Destructor Documentation

◆ AdaptiveImportanceSampler()

AdaptiveImportanceSampler::AdaptiveImportanceSampler ( const InputParameters &  parameters)

Definition at line 53 of file AdaptiveImportanceSampler.C.

56 _proposal_std(getParam<std::vector<Real>>("proposal_std")),
57 _initial_values(getParam<std::vector<Real>>("initial_values")),
58 _output_limit(getParam<Real>("output_limit")),
59 _num_samples_train(getParam<int>("num_samples_train")),
60 _num_importance_sampling_steps(getParam<int>("num_importance_sampling_steps")),
61 _std_factor(getParam<Real>("std_factor")),
62 _use_absolute_value(getParam<bool>("use_absolute_value")),
63 _num_random_seeds(getParam<unsigned int>("num_random_seeds")),
64 _is_sampling_completed(declareRecoverableData<bool>("is_sampling_completed", false)),
65 _inputs(getReporterValue<std::vector<std::vector<Real>>>("inputs_reporter")),
66 _prev_value(declareRecoverableData<std::vector<Real>>("prev_value")),
67 _mean_sto(declareRecoverableData<std::vector<Real>>("mean_sto")),
68 _std_sto(declareRecoverableData<std::vector<Real>>("std_sto")),
69 _inputs_sto(declareRecoverableData<std::vector<std::vector<Real>>>("inputs_sto")),
70 _retraining_steps(declareRecoverableData<int>("retraining_steps", 0)),
71 _gp_flag(isParamValid("flag_sample") ? &getReporterValue<std::vector<bool>>("flag_sample")
72 : nullptr)
73{
74 // Filling the `distributions` vector with the user-provided distributions.
75 for (const DistributionName & name : getParam<std::vector<DistributionName>>("distributions"))
77
78 /* Adaptive Importance Sampling (AdaptiveImportanceSampler) relies on a Markov Chain Monte Carlo
79 (MCMC) algorithm. As such, in MOOSE, any use of MCMC algorithms requires that the `num_steps`
80 parameter in the main App's executioner would control the total number of samples. Therefore,
81 the `num_rows` parameter typically used by exisiting non-MCMC samplers to set the total number
82 of samples has no use here and is fixed to 1.*/
84
85 // Setting the number of columns in the sampler matrix (equal to the number of distributions).
87
88 /* `inputs_sto` is a member variable that aids in forming the importance distribution.
89 One dimension of this variable is equal to the number of distributions. The other dimension
90 of the variable, at the last step, is equal to the number of samples the user desires.*/
91 _inputs_sto.resize(_distributions.size());
92
93 // Mapping all the input distributions to a standard normal space
94 for (unsigned int i = 0; i < _distributions.size(); ++i)
95 _inputs_sto[i].push_back(Normal::quantile(_distributions[i]->cdf(_initial_values[i]), 0, 1));
96
97 /* `prev_value` is a member variable for tracking the previously accepted samples in the
98 MCMC algorithm and proposing the next sample.*/
99 _prev_value.resize(_distributions.size());
100
101 // Storage for means of input values for proposing the next sample
102 _mean_sto.resize(_distributions.size());
103
104 // Storage for standard deviations of input values for proposing the next sample
105 _std_sto.resize(_distributions.size());
106
109}
std::vector< Real > & _prev_value
For proposing the next sample in the MCMC algorithm.
std::vector< const Distribution * > _distributions
Storage for distribution objects to be utilized.
int & _retraining_steps
Number of retraining performed.
const std::vector< bool > *const _gp_flag
Indicate whether GP prediction is good or bad to influence next proposed sample.
std::vector< Real > & _mean_sto
Storage for means of input values for proposing the next sample.
const unsigned int & _num_random_seeds
Initialize a certain number of random seeds. Change from the default only if you have to.
std::vector< Real > & _std_sto
Storage for standard deviations of input values for proposing the next sample.
bool & _is_sampling_completed
True if the sampling is completed.
const int & _num_importance_sampling_steps
Number of importance sampling steps (after the importance distribution has been trained)
const Real & _output_limit
The output limit, exceedance of which indicates failure.
const int & _num_samples_train
Number of samples to train the importance sampler.
const Real & _std_factor
Factor to be multiplied to the standard deviation of the proposal distribution.
std::vector< std::vector< Real > > & _inputs_sto
Storage for previously accepted samples by the decision reporter system.
const std::vector< Real > & _initial_values
Initial values values vector to start the importance sampler.
const std::vector< std::vector< Real > > & _inputs
Storage for the inputs vector obtained from the reporter.
const std::vector< Real > & _proposal_std
The proposal distribution standard deviations.
const bool & _use_absolute_value
Absolute value of the model result. Use this when failure is defined as a non-exceedance rather than ...
const Distribution & getDistributionByName(const DistributionName &name) const
const InputParameters & parameters() const
const std::string & name() const
const T & getParam(const std::string &name) const
bool isParamValid(const std::string &name) const
virtual Real quantile(const Real &p) const override
Definition Normal.C:80
const T & getReporterValue(const std::string &param_name, const std::size_t time_index=0)
T & declareRecoverableData(const std::string &data_name, Args &&... args)
void setNumberOfCols(dof_id_type n_cols)
void setAutoAdvanceGenerators(const bool state)
void setNumberOfRows(dof_id_type n_rows)
void setNumberOfRandomSeeds(std::size_t number)

Member Function Documentation

◆ computeSample()

Real AdaptiveImportanceSampler::computeSample ( dof_id_type  row_index,
dof_id_type  col_index 
) const
overrideprotectedvirtual

Return the sample for the given row (the sample index) and column (the parameter index)

Implements Sampler.

Definition at line 181 of file AdaptiveImportanceSampler.C.

182{
183 return _distributions[col_index]->quantile(Normal::cdf(_prev_value[col_index], 0.0, 1.0));
184}
virtual Real cdf(const Real &x) const override
Definition Normal.C:74

◆ executeSetUp()

void AdaptiveImportanceSampler::executeSetUp ( )
overrideprotectedvirtual

Reimplemented from Sampler.

Definition at line 112 of file AdaptiveImportanceSampler.C.

113{
114 const bool sample = _t_step > 1;
115 const bool gp_flag = _gp_flag ? (*_gp_flag)[0] : false;
116
117 if (sample && _is_sampling_completed)
118 mooseError("Internal bug: the adaptive sampling is supposed to be completed but another sample "
119 "has been requested.");
120
122 {
123 /* This is the importance distribution training step. Markov Chains are set up
124 to sample from the importance region or the failure region using the Metropolis
125 algorithm. Given that the previous sample resulted in a model failure, the next
126 sample is proposed such that it is very likely to result in a model failure as well.
127 The `initial_values` and `proposal_std` parameters provided by the user affects the
128 formation of the importance distribution. */
129 if (sample && !gp_flag)
130 {
131 for (dof_id_type j = 0; j < _distributions.size(); ++j)
132 _prev_value[j] = Normal::quantile(_distributions[j]->cdf(_inputs[j][0]), 0.0, 1.0);
133 Real acceptance_ratio = 0.0;
134 for (dof_id_type i = 0; i < _distributions.size(); ++i)
135 acceptance_ratio += std::log(Normal::pdf(_prev_value[i], 0.0, 1.0)) -
136 std::log(Normal::pdf(_inputs_sto[i].back(), 0.0, 1.0));
137 if (acceptance_ratio > std::log(getRand(0, _t_step)))
138 {
139 for (dof_id_type i = 0; i < _distributions.size(); ++i)
140 _inputs_sto[i].push_back(_prev_value[i]);
141 }
142 else
143 {
144 for (dof_id_type i = 0; i < _distributions.size(); ++i)
145 _inputs_sto[i].push_back(_inputs_sto[i].back());
146 }
147 for (dof_id_type i = 0; i < _distributions.size(); ++i)
148 _prev_value[i] =
150 }
151 }
152 else if (sample && !gp_flag)
153 {
154 /* This is the importance sampling step using the importance distribution created
155 in the previous step. Once the importance distribution is known, sampling from
156 it is similar to a regular Monte Carlo sampling. */
157 for (dof_id_type i = 0; i < _distributions.size(); ++i)
158 {
159 if (_t_step == _num_samples_train + 1)
160 {
163 }
164 _prev_value[i] =
166 }
167
168 // check if we have performed all the importance sampling steps
171 }
172
173 // When the GP fails, the current time step is 'wasted' and the retraining step doesn't
174 // happen until the next time step. Therefore, keep track of the number of retraining steps
175 // to increase the total number of steps taken.
176 if (sample && gp_flag && _t_step > _num_samples_train)
178}
void mooseError(Args &&... args) const
virtual Real pdf(const Real &x) const override
Definition Normal.C:68
Real getRand(std::size_t n, unsigned int index=0) const
Real computeSTD(const std::vector< Real > &data, const unsigned int &start_index)
compute the standard deviation of a data vector by only considering values from a specific index.
Real computeMean(const std::vector< Real > &data, const unsigned int &start_index)
compute the mean of a data vector by only considering values from a specific index.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ getDistributionNames()

const std::vector< const Distribution * > & AdaptiveImportanceSampler::getDistributionNames ( ) const
inline

Definition at line 44 of file AdaptiveImportanceSampler.h.

44{ return _distributions; }

Referenced by AdaptiveImportanceStats::AdaptiveImportanceStats().

◆ getImportanceVectorMean()

const std::vector< Real > & AdaptiveImportanceSampler::getImportanceVectorMean ( ) const
inline

Definition at line 38 of file AdaptiveImportanceSampler.h.

38{ return _mean_sto; }

Referenced by AdaptiveImportanceStats::execute().

◆ getImportanceVectorStd()

const std::vector< Real > & AdaptiveImportanceSampler::getImportanceVectorStd ( ) const
inline

Definition at line 41 of file AdaptiveImportanceSampler.h.

41{ return _std_sto; }

Referenced by AdaptiveImportanceStats::execute().

◆ getInitialValues()

const std::vector< Real > & AdaptiveImportanceSampler::getInitialValues ( ) const
inline

◆ getNumSamplesTrain()

const int & AdaptiveImportanceSampler::getNumSamplesTrain ( ) const
inline

◆ getOutputLimit()

const Real & AdaptiveImportanceSampler::getOutputLimit ( ) const
inline

◆ getStdFactor()

const Real & AdaptiveImportanceSampler::getStdFactor ( ) const
inline

Definition at line 47 of file AdaptiveImportanceSampler.h.

47{ return _std_factor; }

Referenced by AdaptiveImportanceStats::AdaptiveImportanceStats().

◆ getUseAbsoluteValue()

const bool & AdaptiveImportanceSampler::getUseAbsoluteValue ( ) const
inline

◆ isAdaptiveSamplingCompleted()

virtual bool AdaptiveImportanceSampler::isAdaptiveSamplingCompleted ( ) const
inlineoverridevirtual

Returns true if the adaptive sampling is completed.

Reimplemented from Sampler.

Definition at line 52 of file AdaptiveImportanceSampler.h.

52{ return _is_sampling_completed; }

◆ validParams()

InputParameters AdaptiveImportanceSampler::validParams ( )
static

Definition at line 19 of file AdaptiveImportanceSampler.C.

20{
22 params.addClassDescription("Adaptive Importance Sampler.");
23 params.addRequiredParam<std::vector<DistributionName>>(
24 "distributions",
25 "The distribution names to be sampled, the number of distributions provided defines the "
26 "number of columns per matrix.");
27 params.addRequiredParam<ReporterName>("inputs_reporter", "Reporter with input parameters.");
28 params.addRequiredParam<std::vector<Real>>("proposal_std",
29 "Standard deviations of the proposal distributions");
30 params.addRequiredParam<Real>("output_limit", "Limiting values of the VPPs");
31 params.addRequiredParam<std::vector<Real>>(
32 "initial_values", "Initial input values to get the importance sampler started");
34 "num_samples_train",
35 "num_samples_train>0",
36 "Number of samples to learn the importance distribution");
38 "num_importance_sampling_steps",
39 "num_importance_sampling_steps>0",
40 "Number of importance sampling steps (after the importance distribution has been trained)");
41 params.addRequiredParam<Real>(
42 "std_factor", "Factor to be multiplied to the standard deviation of the importance samples");
43 params.addParam<bool>("use_absolute_value", false, "Use absolute value of the sub app output");
44 params.addParam<unsigned int>(
45 "num_random_seeds",
46 100000,
47 "Initialize a certain number of random seeds. Change from the default only if you have to.");
48 params.addParam<ReporterName>("flag_sample",
49 "Flag samples if the surrogate prediction was inadequate.");
50 return params;
51}
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
static InputParameters validParams()

Referenced by AISActiveLearning::validParams().

Member Data Documentation

◆ _distributions

std::vector<const Distribution *> AdaptiveImportanceSampler::_distributions
protected

Storage for distribution objects to be utilized.

Definition at line 60 of file AdaptiveImportanceSampler.h.

Referenced by AdaptiveImportanceSampler(), computeSample(), executeSetUp(), and getDistributionNames().

◆ _gp_flag

const std::vector<bool>* const AdaptiveImportanceSampler::_gp_flag
private

Indicate whether GP prediction is good or bad to influence next proposed sample.

Definition at line 109 of file AdaptiveImportanceSampler.h.

Referenced by executeSetUp().

◆ _initial_values

const std::vector<Real>& AdaptiveImportanceSampler::_initial_values
protected

Initial values values vector to start the importance sampler.

Definition at line 66 of file AdaptiveImportanceSampler.h.

Referenced by AdaptiveImportanceSampler(), and getInitialValues().

◆ _inputs

const std::vector<std::vector<Real> >& AdaptiveImportanceSampler::_inputs
private

Storage for the inputs vector obtained from the reporter.

Definition at line 91 of file AdaptiveImportanceSampler.h.

Referenced by executeSetUp().

◆ _inputs_sto

std::vector<std::vector<Real> >& AdaptiveImportanceSampler::_inputs_sto
private

Storage for previously accepted samples by the decision reporter system.

Definition at line 103 of file AdaptiveImportanceSampler.h.

Referenced by AdaptiveImportanceSampler(), and executeSetUp().

◆ _is_sampling_completed

bool& AdaptiveImportanceSampler::_is_sampling_completed
protected

True if the sampling is completed.

Definition at line 87 of file AdaptiveImportanceSampler.h.

Referenced by executeSetUp(), and isAdaptiveSamplingCompleted().

◆ _mean_sto

std::vector<Real>& AdaptiveImportanceSampler::_mean_sto
private

Storage for means of input values for proposing the next sample.

Definition at line 97 of file AdaptiveImportanceSampler.h.

Referenced by AdaptiveImportanceSampler(), executeSetUp(), and getImportanceVectorMean().

◆ _num_importance_sampling_steps

const int& AdaptiveImportanceSampler::_num_importance_sampling_steps
protected

Number of importance sampling steps (after the importance distribution has been trained)

Definition at line 75 of file AdaptiveImportanceSampler.h.

Referenced by executeSetUp().

◆ _num_random_seeds

const unsigned int& AdaptiveImportanceSampler::_num_random_seeds
protected

Initialize a certain number of random seeds. Change from the default only if you have to.

Definition at line 84 of file AdaptiveImportanceSampler.h.

Referenced by AdaptiveImportanceSampler().

◆ _num_samples_train

const int& AdaptiveImportanceSampler::_num_samples_train
protected

Number of samples to train the importance sampler.

Definition at line 72 of file AdaptiveImportanceSampler.h.

Referenced by executeSetUp(), and getNumSamplesTrain().

◆ _output_limit

const Real& AdaptiveImportanceSampler::_output_limit
protected

The output limit, exceedance of which indicates failure.

Definition at line 69 of file AdaptiveImportanceSampler.h.

Referenced by getOutputLimit().

◆ _prev_value

std::vector<Real>& AdaptiveImportanceSampler::_prev_value
private

For proposing the next sample in the MCMC algorithm.

Definition at line 94 of file AdaptiveImportanceSampler.h.

Referenced by AdaptiveImportanceSampler(), computeSample(), and executeSetUp().

◆ _proposal_std

const std::vector<Real>& AdaptiveImportanceSampler::_proposal_std
protected

The proposal distribution standard deviations.

Definition at line 63 of file AdaptiveImportanceSampler.h.

Referenced by executeSetUp().

◆ _retraining_steps

int& AdaptiveImportanceSampler::_retraining_steps
private

Number of retraining performed.

Definition at line 106 of file AdaptiveImportanceSampler.h.

Referenced by executeSetUp().

◆ _std_factor

const Real& AdaptiveImportanceSampler::_std_factor
protected

Factor to be multiplied to the standard deviation of the proposal distribution.

Definition at line 78 of file AdaptiveImportanceSampler.h.

Referenced by executeSetUp(), and getStdFactor().

◆ _std_sto

std::vector<Real>& AdaptiveImportanceSampler::_std_sto
private

Storage for standard deviations of input values for proposing the next sample.

Definition at line 100 of file AdaptiveImportanceSampler.h.

Referenced by AdaptiveImportanceSampler(), executeSetUp(), and getImportanceVectorStd().

◆ _use_absolute_value

const bool& AdaptiveImportanceSampler::_use_absolute_value
protected

Absolute value of the model result. Use this when failure is defined as a non-exceedance rather than an exceedance.

Definition at line 81 of file AdaptiveImportanceSampler.h.

Referenced by getUseAbsoluteValue().


The documentation for this class was generated from the following files: