https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
BayesianPosteriorTargeted Class Reference

#include <BayesianPosteriorTargeted.h>

Inheritance diagram for BayesianPosteriorTargeted:
[legend]

Public Types

typedef DataFileName DataFileParameterType
 

Public Member Functions

 BayesianPosteriorTargeted (const InputParameters &parameters)
 
void computeAcquisition (std::vector< Real > &acq, const std::vector< Real > &gp_mean, const std::vector< Real > &gp_std, const std::vector< std::vector< Real >> &test_inputs, const std::vector< std::vector< Real >> &train_inputs, const std::vector< Real > &generic) const
 Compute the acquisition function values. More...
 
void penalizeAcquisition (std::vector< Real > &modified_acq, std::vector< unsigned int > &sorted_indices, const std::vector< Real > &acq, const std::vector< Real > &length_scales, const std::vector< std::vector< Real >> &inputs)
 Return the modified acquisition function values and sorted indices considering local penalization (inspired from Zhan et al. More...
 
void computeCorrelation (Real &corr, const std::vector< Real > &input1, const std::vector< Real > &input2, const std::vector< Real > &length_scales)
 Compute the correlation between two inputs using the length scales. More...
 
virtual bool enabled () const
 
std::shared_ptr< MooseObjectgetSharedPtr ()
 
std::shared_ptr< const MooseObjectgetSharedPtr () const
 
bool isKokkosObject () const
 
MooseAppgetMooseApp () 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 InputParametersparameters () const
 
const hit::Node * getHitNode () const
 
bool hasBase () const
 
const std::string & getBase () const
 
const TgetParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const TqueryParam (const std::string &name) const
 
const TgetRenamedParam (const std::string &old_name, const std::string &new_name) const
 
T getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool haveParameter (const std::string &name) 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
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () 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

void computeAcquisitionInternal (std::vector< Real > &acq, const std::vector< Real > &gp_mean, const std::vector< Real > &gp_std, const std::vector< std::vector< Real >> &test_inputs, const std::vector< std::vector< Real >> &train_inputs, const std::vector< Real > &generic) const override
 Implementation hook for derived classes (no size checks here). More...
 
void flagInvalidSolutionInternal (const InvalidSolutionID invalid_solution_id) const
 
InvalidSolutionID registerInvalidSolutionInternal (const std::string &message, const bool warning) const
 

Protected Attributes

const bool & _enabled
 
MooseApp_app
 
Factory_factory
 
ActionFactory_action_factory
 
const std::string & _type
 
const std::string & _name
 
const InputParameters_pars
 
const Parallel::Communicator & _communicator
 

Detailed Description

Definition at line 14 of file BayesianPosteriorTargeted.h.

Constructor & Destructor Documentation

◆ BayesianPosteriorTargeted()

BayesianPosteriorTargeted::BayesianPosteriorTargeted ( const InputParameters parameters)

Definition at line 23 of file BayesianPosteriorTargeted.C.

25 {
26 }
const InputParameters & parameters() const
ParallelAcquisitionFunctionBase(const InputParameters &parameters)

Member Function Documentation

◆ computeAcquisition()

void ParallelAcquisitionFunctionBase::computeAcquisition ( std::vector< Real > &  acq,
const std::vector< Real > &  gp_mean,
const std::vector< Real > &  gp_std,
const std::vector< std::vector< Real >> &  test_inputs,
const std::vector< std::vector< Real >> &  train_inputs,
const std::vector< Real > &  generic 
) const
inherited

Compute the acquisition function values.

Performs all argument/size checks, then dispatches to computeAcquisitionInternal implemented by derived classes.

Parameters
acqThe computed acquisition function values
gp_meanThe provided GP mean values
gp_stdThe provided GP standard deviation values
test_inputsAll the input values under which the GP has to be tested
train_inputsAll the input values under which the GP has been trained
genericA generic parameter (can be output values under which the GP has been trained or threshold parameter under the U-Function etc.)

Definition at line 28 of file ParallelAcquisitionFunctionBase.C.

35 {
36  // Size checks
37  if (test_inputs.size() == 0)
38  mooseError("computeAcquisition: test_inputs must be non-empty.");
39 
40  if (gp_mean.size() != test_inputs.size() || gp_std.size() != test_inputs.size())
41  mooseError("computeAcquisition: gp_mean, gp_std, and test_inputs must have the same length.");
42 
43  if (acq.size() != test_inputs.size())
44  mooseError("computeAcquisition: output 'acq' must be pre-sized to test_inputs.size().");
45 
46  // Dimensionality checks (all rows same dim; train dim matches test dim)
47  if (test_inputs.front().size() == 0)
48  mooseError("computeAcquisition: test_inputs row dimension must be > 0.");
49 
50  if (train_inputs[0].size() != test_inputs.front().size())
51  mooseError("computeAcquisition: train_inputs rows must match test_inputs dimension.");
52 
53  // Hand off to the derived implementation
54  computeAcquisitionInternal(acq, gp_mean, gp_std, test_inputs, train_inputs, generic);
55 }
virtual void computeAcquisitionInternal(std::vector< Real > &acq, const std::vector< Real > &gp_mean, const std::vector< Real > &gp_std, const std::vector< std::vector< Real >> &test_inputs, const std::vector< std::vector< Real >> &train_inputs, const std::vector< Real > &generic) const =0
Implementation hook for derived classes (no size checks here).
void mooseError(Args &&... args) const

◆ computeAcquisitionInternal()

void BayesianPosteriorTargeted::computeAcquisitionInternal ( std::vector< Real > &  acq,
const std::vector< Real > &  gp_mean,
const std::vector< Real > &  gp_std,
const std::vector< std::vector< Real >> &  test_inputs,
const std::vector< std::vector< Real >> &  train_inputs,
const std::vector< Real > &  generic 
) const
overrideprotectedvirtual

Implementation hook for derived classes (no size checks here).

Parameters
acqThe computed acquisition function values
gp_meanThe provided GP mean values
gp_stdThe provided GP standard deviation values
test_inputsAll the input values under which the GP has to be tested
train_inputsAll the input values under which the GP has been trained
genericA generic parameter (can be output values under which the GP has been trained or threshold parameter under the U-Function etc.)

Implements ParallelAcquisitionFunctionBase.

Definition at line 29 of file BayesianPosteriorTargeted.C.

36 {
37  Real psi = std::pow(test_inputs[0].size(), -0.85);
38  for (unsigned int i = 0; i < test_inputs.size(); ++i)
39  {
40  acq[i] = std::exp(2.0 * psi * gp_mean[i]) * (std::exp(gp_std[i]) - 1.0);
41  if (std::isinf(acq[i]))
42  acq[i] = std::numeric_limits<Real>::max();
43  }
44 }
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
MooseUnits pow(const MooseUnits &, int)

◆ computeCorrelation()

void ParallelAcquisitionFunctionBase::computeCorrelation ( Real corr,
const std::vector< Real > &  input1,
const std::vector< Real > &  input2,
const std::vector< Real > &  length_scales 
)
inherited

Compute the correlation between two inputs using the length scales.

Parameters
corrThe computed correlation value
input1The first input
input2The second input
length_scalesThe length scales to compute the correlation between inputs

Definition at line 98 of file ParallelAcquisitionFunctionBase.C.

Referenced by ParallelAcquisitionFunctionBase::penalizeAcquisition().

102 {
103  if (input1.size() != input2.size() || input1.size() != length_scales.size())
104  mooseError("computeCorrelation: input1, input2, and length_scales must be the same size.");
105  corr = 0.0;
106  for (unsigned int i = 0; i < input1.size(); ++i)
107  corr -= Utility::pow<2>(input1[i] - input2[i]) / (2.0 * Utility::pow<2>(length_scales[i]));
108  corr = 1.0 - std::exp(corr);
109 }
void mooseError(Args &&... args) const

◆ penalizeAcquisition()

void ParallelAcquisitionFunctionBase::penalizeAcquisition ( std::vector< Real > &  modified_acq,
std::vector< unsigned int > &  sorted_indices,
const std::vector< Real > &  acq,
const std::vector< Real > &  length_scales,
const std::vector< std::vector< Real >> &  inputs 
)
inherited

Return the modified acquisition function values and sorted indices considering local penalization (inspired from Zhan et al.

2017)

Parameters
modified_acqThe modified acquisition function values
sorted_indicesThe sorted indices modified acquisition function values
acqThe originally acquisition function values
length_scalesThe length scales to compute the correlation between inputs
inputsAll the input values under which acquisition needs to be computed
penalizeBool to indicate whether to compute the correlations or not

Definition at line 58 of file ParallelAcquisitionFunctionBase.C.

63 {
64  if (inputs.size() == 0)
65  mooseError("penalizeAcquisition: 'inputs' must be non-empty.");
66  if (modified_acq.size() != inputs.size() || sorted_indices.size() != inputs.size() ||
67  acq.size() != inputs.size())
68  mooseError(
69  "penalizeAcquisition: modified_acq, sorted_indices, and acq must match inputs.size().");
70 
71  if (inputs.front().size() != inputs.front().size())
72  mooseError("penalizeAcquisition: all input rows must have the same dimension.");
73  if (length_scales.size() != inputs.front().size())
74  mooseError("penalizeAcquisition: length_scales must match input dimension.");
75 
76  std::vector<Real> negate_acq = acq;
77  std::transform(negate_acq.cbegin(), negate_acq.cend(), negate_acq.begin(), std::negate<double>());
78  std::vector<size_t> ind;
79  Moose::indirectSort(negate_acq.begin(), negate_acq.end(), ind);
80  modified_acq[0] = -negate_acq[ind[0]];
81  sorted_indices[0] = ind[0];
82 
83  Real correlation = 0.0;
84  for (unsigned int i = 0; i < inputs.size() - 1; ++i)
85  {
86  for (unsigned int j = 0; j < inputs.size(); ++j)
87  {
88  computeCorrelation(correlation, inputs[j], inputs[ind[0]], length_scales);
89  negate_acq[j] = negate_acq[j] * correlation;
90  }
91  Moose::indirectSort(negate_acq.begin(), negate_acq.end(), ind);
92  modified_acq[i + 1] = -negate_acq[ind[0]];
93  sorted_indices[i + 1] = ind[0];
94  }
95 }
void indirectSort(RandomAccessIterator beg, RandomAccessIterator end, std::vector< size_t > &b)
void computeCorrelation(Real &corr, const std::vector< Real > &input1, const std::vector< Real > &input2, const std::vector< Real > &length_scales)
Compute the correlation between two inputs using the length scales.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void mooseError(Args &&... args) const
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")

◆ validParams()

InputParameters BayesianPosteriorTargeted::validParams ( )
static

Definition at line 16 of file BayesianPosteriorTargeted.C.

17 {
19  params.addClassDescription("Bayesian posterior targeted from El Gammal et al. 2023.");
20  return params;
21 }
void addClassDescription(const std::string &doc_string)

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