29 std::vector<Real> & acq,
30 const std::vector<Real> & gp_mean,
31 const std::vector<Real> & gp_std,
32 const std::vector<std::vector<Real>> & test_inputs,
33 const std::vector<std::vector<Real>> & train_inputs,
34 const std::vector<Real> &
generic)
const 37 if (test_inputs.size() == 0)
38 mooseError(
"computeAcquisition: test_inputs must be non-empty.");
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.");
43 if (acq.size() != test_inputs.size())
44 mooseError(
"computeAcquisition: output 'acq' must be pre-sized to test_inputs.size().");
47 if (test_inputs.front().size() == 0)
48 mooseError(
"computeAcquisition: test_inputs row dimension must be > 0.");
50 if (train_inputs[0].size() != test_inputs.front().size())
51 mooseError(
"computeAcquisition: train_inputs rows must match test_inputs dimension.");
59 std::vector<unsigned int> & sorted_indices,
60 const std::vector<Real> & acq,
61 const std::vector<Real> & length_scales,
62 const std::vector<std::vector<Real>> & inputs)
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())
69 "penalizeAcquisition: modified_acq, sorted_indices, and acq must match inputs.size().");
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.");
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;
80 modified_acq[0] = -negate_acq[ind[0]];
81 sorted_indices[0] = ind[0];
83 Real correlation = 0.0;
84 for (
unsigned int i = 0; i < inputs.size() - 1; ++i)
86 for (
unsigned int j = 0;
j < inputs.size(); ++
j)
89 negate_acq[
j] = negate_acq[
j] * correlation;
92 modified_acq[i + 1] = -negate_acq[ind[0]];
93 sorted_indices[i + 1] = ind[0];
99 const std::vector<Real> & input1,
100 const std::vector<Real> & input2,
101 const std::vector<Real> & length_scales)
103 if (input1.size() != input2.size() || input1.size() != length_scales.size())
104 mooseError(
"computeCorrelation: input1, input2, and length_scales must be the same size.");
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);
void indirectSort(RandomAccessIterator beg, RandomAccessIterator end, std::vector< size_t > &b)
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 (in...
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.
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).
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void mooseError(Args &&... args) const
static InputParameters validParams()
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
ParallelAcquisitionFunctionBase(const InputParameters ¶meters)
static InputParameters validParams()
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.